LWKDIR(作業ディレクトリ 処理パラメータ 設定支援 ほか)


PREMSG, PROMPT, DPCENT, ABEND, ABENDM,
OPNPIN, CLSPIN, LWKDIR関数, LRTRIM関数,
PARMIN, GPARMA, GPARMI, GPARMF, GPARMD,
GPARMIF, GPARMID, GPARMI2, GPARMF2, GPARND2
1.機 能
    premsg, prompt ルーチンは,メッセージを標準エラー出力に書き出す.
    dpcentルーチンは,長時間を要するループ処理の実行時などにおいて,その進捗状
  況を表示する.
    abendルーチンは "ERROR" の文字とコード番号を,abendmルーチンは "[ABEND] " 
  の文字と指定のメッセージ文字列を,標準エラー出力に書き出しエラー終了する.
    opnpin, clspin ルーチンは,lwkdir関数および parmin, gparma, gparmi, gparmf,
  gparmd, gparmif, gparmid, gparmi2, gparmf2, gparmd2 の各ルーチンに対する入力
  を,通常のキーボード入力から既存ファイル読み取りに変更する機能を提供する.
    lwkdir関数は,プログラム実行時のホームディレクトリ(~)およびカレントディ
  レクトリ(.)の絶対パス名を表示し,作業ディレクトリの入力を促してその指定を
  待つ.その指定から得た作業ディレクトリの絶対パス名とそのディレクトリ内のファ
  イルの一覧を画面(標準エラー出力)に表示する.また,そのディレクトリの絶対パ
  ス名を文字列として受け取る. なお,ディレクトリの絶対パス名は後ろに "/" が付
  加された形となっており,単にファイル名を付け加えるだけでそのファイルの絶対パ
  ス名となる.ここでいう作業ディレクトリとは,カレントディレクトリの移動を行う
  ものではなく,単にディレクトリの絶対パス名の文字列を設定して,ファイルの絶対
  パス名での指定を容易にするための手段を提供するに過ぎない.
    lrtrim関数は,引数文字列の右側空白を切り縮めたときの文字列長を得る.
    parmin および gparma, gparmi, gparmf, gparmd, gparmif, gparmid, gparmi2, 
  gparmf2, gparmd2 の各ルーチンは,標準エラー出力へのプロンプト(入力催促文字
  列)表示に続いて,各形式でのデータ入力を受付ける.

2.呼出し手順と引数

      call premsg(mesg)
      call prompt(mesg)
  mesg  [char]  標準エラー出力へ書き出す文字列.
          標準エラー出力へ文字列を書き出す.premsg 呼出しでは,文字列出力後に
          改行されるが,prompt 呼出しでは改行しない.

      call dpcent(m, n)
  m, n  [int]  合計n回の繰返しのうち,m回の処理を終了したことを指定する.
          最初の呼び出しは,n=m=0 で行うものとし,それ以後(n≠0)は m/n を
          進捗率とみなし,m=n>0 で繰返し処理の終了と判断する.

      call abend(icd)
  icd   [int]   標準エラー出力へ出力するコード番号.
      call abendm(msg)
  msg   [char]  標準エラー出力へ出力するメッセージ文字列.

      call opnpin()
          メインプログラムの起動パラメータに与えられた名前の既存ファイルから
          パラメータの入力データを読み込む.その名前が空もしくは "-" のとき,
          パラメータ入力は通常どおり標準入力から行われる.
      call clspin()
          opnpin による設定を解除する.

          パラメータ入力ファイル名の指定においては,ファイル名に続けて ":name"
          と記述することにより,パラメータファイル内の ":name" なるタグ行以降
          別のタグ行が出現する前まで をデータとして扱うことができる.
          なお,パラメータファイル内では,先頭桁が '#' の行はコメント行として
          無視され,行内に ";#" の文字列があると,その位置以降行末までがコメン
          トとして無視される.なお,タグ行は,先頭桁を ':' とし,2桁目からスペ
          ースを挟むことなくタグ名を記述する.(パラメータデータとして,先頭桁
          に '#', ':' を置くことはできない.通常のデータは先頭桁をスペースにす
          ることを想定している.)

      nch = lwkdir(len, dnm)
  len   [int]   文字列変数 dnm の最大文字数を指定する.
  dnm   [char]  作業ディレクトリの絶対パス名の文字列を得る.
                この文字列変数の長さは,len 以上確保されていなければならない.
  nch   [int]   絶対パス名文字列の文字数が与えられる.
            dnm に与えられる文字列は,C言語の文字列形式であり,最後に char(0)
          が付加された形となる.指定された作業ディレクトリのパス名の長さが,
          lenに等しいかそれ以上の場合には,メッセージを表示して異常終了する.
            ホームディレクトリまたはカレントディレクトリの絶対パス名の長さが,
          所定の値(80文字)よりも大きい場合,また作業ディレクトリ指定の文字列
          の長さが,所定の値(80文字)より大きい場合にも,メッセージを表示して
          異常終了する.

      nc = lrtrim(chrs)
  chrs  [char]  文字列を指定する.
  n     [int]   文字列chrsの右側空白を切り縮めたときの文字列長が与えられる.

      call parmin(str, lbuf, buf)
  str   [char]  プロンプト文字列.
  lbuf  [int]   受け取る文字列の最大長をバイト単位で指定する.
  buf   [char]  受け取った文字列が入る.
          プロンプト(入力催促文字列) str を標準エラー出力に書き出すとともに,
          opnpin による設定に基づいてパラメータ入力を行い,入力どおりの文字列
          を受け取る.

      call gparma(str, lnam, nam)
      call gparmi(str, iv)
      call gparmf(str, fv)
      call gparmd(str, dv)
      call gparmif(str, iv, fv)
      call gparmid(str, iv, dv)
      call gparmi2(str, iv, jv)
      call gparmf2(str, fv, gv)
      call gparmd2(str, dv, ev)
  str    [char]   プロンプト文字列.
  lnam   [int]    受け取る文字列の最大長をバイト単位で指定する.
  nam    [char]   受け取った文字列が入る.
  iv,jv  [int]    受け取った整数値が入る.
  fv,gv  [float]  受け取った単精度実数値が入る.
  dv,ev  [double] 受け取った倍精度実数値が入る.
            プロンプト(入力催促文字列) str を標準エラー出力に書き出すとともに,
          opnpin による設定に基づいてパラメータ入力を行う.
            入力文字列より,スペースを区切りとして,スペースを含まない文字列・
          整数値・単精度実数・倍精度実数もしくはそれらの組み合わせとして,パラ
          メータ値を受け取る.
            なお,パラメータ入力がキーボード端末(character device)以外に割り当
          てられている場合は,入力文字列が標準エラー出力へも改行付きで書き出さ
          れる.また,プロンプト文字列 str は,その定義長全体が出力対象になる
          が,途中に NULL コードがあると,それ以後の部分は書き出されない.

3.使 用 例

      character wdr*80, fnam*120
c
      call premsg('--- start ---')
      call opnpin()
      ldr = lwkdir(80,wdr) + 1
      fnam = wdr
      call gparma('Enter filename ==> ', 121-ldr, fnam(ldr:120))
      open(10,file=fnam,status='old')
      write(6,'(a,a)') 'Input file : ', fnam(1:lrtrim(fnam))
          :
          :
      call clspin()
      call prompt('Loop operation - ')
      call dpcent(0, 0)
      do 10 i=1,imax
      do 10 j=1,jmax
          :
          :
        call dpcent((i-1)*jmax+j, imax*jmax)
   10 continue
          :
          :
      if (.....) call abend(90)
          :
          :