changequote({,})changecom({!})dnl
! Copyright (C) GFD Dennou Club, 2000-2001.  All rights reserved
! sysdeparg.m4 - 環境依存性ルーチン (コマンドライン取得)

! 通常の設定では DCL の OSLIB を用いるが、OSLIB の設定が悪い場合には
! 自前で対処する能力を一応もっておく。

! 通常の処理系では iargc, getarg というサービスサブルーチンが
! つけられている。これを使えない処理系では適宜対処が必要である。
! 日立コンパイラでは上記サービスサブルーチンの挙動が違うので注意。

INTEGER FUNCTION SYSDEPARGCOUNT() RESULT(RESULT)
    IMPLICIT NONE
ifelse(argtype, DCL, {dnl
    CALL OSQARN(RESULT)dnl
}, argtype, HITACHI, {dnl
    INTERFACE
        INTEGER FUNCTION IARGC()
        END FUNCTION
    END INTERFACE
    RESULT = IARGC() - 1 dnl
}, {dnl
    INTERFACE
        INTEGER FUNCTION IARGC()
        END FUNCTION
    END INTERFACE
    RESULT = IARGC()dnl
})
END FUNCTION

SUBROUTINE SYSDEPARGGET(IDX_GIVEN, RESULT)
    IMPLICIT NONE
    INTEGER, INTENT(IN):: IDX_GIVEN
    CHARACTER(LEN = *), INTENT(OUT):: RESULT
    INTEGER:: IDX
    INTEGER:: ARGC
    INTERFACE
        INTEGER FUNCTION SYSDEPARGCOUNT()
        END FUNCTION
    END INTERFACE
    ARGC = SYSDEPARGCOUNT()
    IF (IDX_GIVEN < 0) THEN
        IDX = ARGC + 1 + IDX_GIVEN
    ELSE
        IDX = IDX_GIVEN
    ENDIF
    IF (IDX > ARGC) THEN
        RESULT = ""
    ELSE
ifelse(argtype, DCL, {dnl
	CALL OSGARG(IDX, RESULT)dnl
}, argtype, HITACHI, {dnl
        CALL GETARG(IDX + 1, RESULT)dnl
}, {dnl
        CALL GETARG(IDX, RESULT)dnl
})
    ENDIF
END SUBROUTINE
