フロッピーディスクを初期化してファイルをコピーするJS
-
ここではもう少し複雑なJSを作ってみます。
フロッピーディスクを初期化し、そのフロッピーディスクに順編成ファイル(ファイル名:DATA01)を作成、その後磁気ディスク上のファイル(ファイル名:TESTDATA)のデータをフロッピーディスク上の順編成ファイル(DATA01)にコピーします。
作りかけのJS(FDCP01) 1
「フロッピーディスクを初期化するJS」は前章で作ったので、それをそのまま利用します。
ただし最初の説明文は少し変えましょう。
******* FD FORMAT & DATA01 ALLOCATE & COPY ***************** // フロッピーディスクを初期化して、; // MSD002のTESTDATAをコピーするジョブです。; // フロッピーディスクを装置に入れてください。; /PAUSE 準備ができたら「CTRL」と「F5」を押してください。; /RUN #VOLPR; ACT=PREPARE_NOV=01_VOL=ABCDEF_DEV=FDU000_NAM=_ SSZ=256_FIL=NON_CMP=NO_PRD=NO_ ACT=END_ /> ;
次はフロッピーディスク上に順編成ファイルを作る部分を作成します。
ファイルを作成するユーティリティ#ALLOCを使ってみます。
この例で作成するファイルは以下の形式です。
50セクタしかないので、非常に小さいファイルです。50行分のデータしか入りません。
ファイル名 DATA01 ファイル形式 順編成 レコード長 256バイト ブロック化係数 1レコード/ブロック 領域サイズ 50セクタ
作りかけのJS(FDCP01) 2
前章と同じように、#ALLOCのパラメータを書き込んでいきます。
******* FD FORMAT & DATA01 ALLOCATE & COPY ***************** // フロッピーディスクを初期化して、; // MSD002のTESTDATAをコピーするジョブです。; // フロッピーディスクを装置に入れてください。; /PAUSE 準備ができたら「CTRL」と「F5」を押してください。; /RUN #VOLPR; ACT=PREPARE_NOV=01_VOL=ABCDEF_DEV=FDU000_NAM=_ SSZ=256_FIL=NON_CMP=NO_PRD=NO_ ACT=END_ /> ; * /RUN #ALLOC; ACT=ALLOCATE_VOL=ABCDEF_DEV=FDU000_NAM=_FIL=DATA01_ TYP=DATA_ORG=SEQ_LOC=_UOA=SECTOR_REC=0256_BLF=001_SIZ=50_ VFY=NO_VSN=00_EXP=000000_CLR=NO_PRD=PRN999_LST=NO_ ACT=END_ /> ;
こちらに#ALLOCを使って会話式に順編成ファイルを作成する方法が書いてあります。
キーボードからパラメータを入力する順番通りに、JSのパラメータを書いているのが分かりますね。
次はファイルのデータをコピーする部分を作成します。
作りかけのJS(FDCP01) 3
ファイルのデータをコピーするのは#FLCNVというユーティリティを使います。
この例では、磁気ディスク2番のTESTDATAという順編成ファイルから、先ほどフロッピーディスクに作成したファイルにデータをコピーします。
******* FD FORMAT & DATA01 ALLOCATE & COPY ***************** // フロッピーディスクを初期化して、; // MSD002のTESTDATAをコピーするジョブです。; // フロッピーディスクを装置に入れてください。; /PAUSE 準備ができたら「CTRL」と「F5」を押してください。; /RUN #VOLPR; ACT=PREPARE_NOV=01_VOL=ABCDEF_DEV=FDU000_NAM=_ SSZ=256_FIL=NON_CMP=NO_PRD=NO_ ACT=END_ /> ; * /RUN #ALLOC; ACT=ALLOCATE_VOL=ABCDEF_DEV=FDU000_NAM=_FIL=DATA01_ TYP=DATA_ORG=SEQ_LOC=_UOA=SECTOR_REC=0256_BLF=001_SIZ=50_ VFY=NO_VSN=00_EXP=000000_CLR=NO_PRD=PRN999_LST=NO_ ACT=END_ /> ; * /RUN #FLCNV; IDE=MSD002_ICI=_IFI=TESTDATA_IGN=_IFO=PROTECT_ODE=FDU000_ OFI=DATA01_LST=NO_ERR=ABORT_MOD=CREATE_AMD=LOGICAL_GTR=_ DEL=NO_CLR=NO_OUT=_RNG=_SEL=_SAV=_NXT=_ /> ;
こちらに#FLCNVを使って会話式にファイルのデータをコピーする方法が書いてあります。
やはりキーボードからパラメータを入力する順番通りに、JSのパラメータを書いています。簡単ですよね。
さてこれで一通りできたわけですが、もう一工夫してみましょう。
完成したJS(FDCP01)
今のJSでは問題があります。例えばフロッピーディスクのフォーマット中に#VOLPRが異常終了したり、あるいはユーザがプログラム放棄コマンドを実行して#VOLPRの処理を終了させた場合です。
#VOLPRが異常終了した後に、次の#ALLOCが実行されます。ところが前のジョブステップでフロッピーディスクがきちんと初期化されていないので、#ALLOCでエラーが発生してしまいます。さらにファイルを作成していないので、#FLCNVでもエラーとなってしまいます。
#VOLPRで異常終了となった場合は、以降の処理は行わないようにしましょう。#ALLOCの異常終了の場合も同様、以降の処理は実行しないようにします。
******* FD FORMAT & DATA01 ALLOCATE & COPY ***************** // フロッピーディスクを初期化して、; // MSD002のTESTDATAをコピーするジョブです。; // フロッピーディスクを装置に入れてください。; /PAUSE 準備ができたら「CTRL」と「F5」を押してください。; /RUN #VOLPR; ACT=PREPARE_NOV=01_VOL=ABCDEF_DEV=FDU000_NAM=_ SSZ=256_FIL=NON_CMP=NO_PRD=NO_ ACT=END_ /> ; /: ABORT JUMP=ENDJOB; * /RUN #ALLOC; ACT=ALLOCATE_VOL=ABCDEF_DEV=FDU000_NAM=_FIL=DATA01_ TYP=DATA_ORG=SEQ_LOC=_UOA=SECTOR_REC=0256_BLF=001_SIZ=50_ VFY=NO_VSN=00_EXP=000000_CLR=NO_PRD=PRN999_LST=NO_ ACT=END_ /> ; /: ABORT JUMP=ENDJOB; * /RUN #FLCNV; IDE=MSD002_ICI=_IFI=TESTDATA_IGN=_IFO=PROTECT_ODE=FDU000_ OFI=DATA01_LST=NO_ERR=ABORT_MOD=CREATE_AMD=LOGICAL_GTR=_ DEL=NO_CLR=NO_OUT=_RNG=_SEL=_SAV=_NXT=_ /> ;
「/: ABORT JUMP=ENDJOB;」と書くことで、異常終了の場合はジョブを終了させるようにすることができます。
「最終的にこのジョブが正常終了したか異常終了したか」をジョブ終了後に人間が判断できるように、画面にメッセージを出すなど工夫をすべきですが、今回はこのくらいにしておきます。これ以降は皆さんでいろいろと工夫してみてください。
JSが完成したので、早速実行してみましょう。
磁気ディスク上のライブラリにJSを書き込みます。
RUNコマンド行で作成したJSを実行します。
間違いが無ければ、以下の画面のようになるはずです。
JSが終了したら、きちんとフロッピーディスクが初期化されてファイルが作成されたか確認してみましょう。
確認する方法はいろいろありますが、例えば#ABCを使って フロッピーディスク上のファイル一覧表示をしたりして確認できます。