スタートページ> (主張・講演、 Web教材) 歴史> ソフトウェアの歴史
残念なことに、私は汎用コンピュータOSが動作する環境をもっていません。文法書を見ながら「昔とった杵柄」で記述したので、厳密には誤りを含んでいるかもしれません。例示のものを実務で用いるのはご遠慮ください。
一般にデータの集まりをファイルというが、MVSでは、それが物理的に格納されているものをデータセットといい、プログラムで記述するときは論理的なファイルをファイルという。
例えば、ディレクトリ「KEIRI」に存在するデータセット「D201005」をアクセスする場合、プログラムでその名称を指示したのでは、別のデータセット「D201005」をアクセスするときには、プログラムを修正しなければならない。それを回避するために、プログラムでは論理的な名称(ファイル名)、例えば「OLDFILE」としておき、実行時にJCLで、OUTFILE と KEIRI.D201005 を関係づけるのである。
このような方法を採用することにより、データセットが磁気ディスクにあるのか磁気テープにあるのか、順編成ファイルなのか索引付ファイルなのかなどを、プログラマは知る必要がなくなるし、プログラムに影響を与えずに、運用の都合でデータセットの格納場所を変更することができる。
汎用コンピュータでは、データのもち方が標準化されていた。データが単純に入っていて、先頭から順にアクセスする順編成ファイル、データに格納場所のインデクスがついていて、直接にアクセスできる乱編成ファイル、その中間的な索引付順編成ファイルなどがあり、そして、そのアクセス方法をOSが管理していたのである(オープン系では、EXCELで作成したファイルを WORD で読むのは困難だが、汎用コンピュータでは、同じOSであれば言語間でのファイル互換は容易だった)。
区分編成ファイルとは、一つのファイルのなかに、いくつものファイルが入っているような編成法である。その個々のファイルをメンバーという。一般にプログラムは区分編成ファイルのメンバとするのが一般的だった。特に本番用の実行形式プログラムは重要であり、LOADLIB というような名称を付けて管理されていた。
先月までのデータを累積したファイルに、今月のデータをカードから与えて更新し、今月までの累積ファイルを作り、それからレポートを作成する処理を例とする(これは説明のためのものであり、現実的には適切とはいえない)。
左上は「処理の流れ」を示す。JCLは黄色の部分を右のように記述する。これは紙カードにパンチされ、左下のような構成でコンピュータに入力される。
//GETSUJI JOB KEIRI,CLASS=J,MSGCLASS=J,MSGLEVEL(1,0) [A] |
参照:IBM「MVS JCL 解説書」
http://publibfp.dhe.ibm.com/epubs/pdf/c8865789.pdf
CLISTは、TSS環境におけるJCLだといえる。コンピュータへの指示コマンドをあらかじめCLISTファイルに記述しておき実行させるので、現在のパソコンでのマクロのようなものでもある。TSS環境でユーザが定型的なアプリケーションを実行するときに、広く活用されていた。
COBOLなどで作成した既存のプログラムを実行する例。このとき、対象となるデータセットの指定、プログラムへ単純なパラメータを渡すことができる。
あらかじめ、次のCLISTが作成されており、それが呼び出されたとする。
HAJIME: WHITENR 対象年月は(YYYYMM、打切りなら0)? [A]
READ &YM [B]
IF &YM=0 THEN EXIT [C]
ALLOCATE FILE(INFILE) DATASET('KEIRI.D&YM') SHR [D]
ALLOCATE FILE(SYSIN) DUMMY REUSE
ALLOCATE FILE(SYSOUT) DUMMY REUSE
WHITENR 選択する府県名は(例:東京)?
READ &FUKEN
CALL 'USERLIB(URIAGE)' '&FUKEN' [E]
GOTO HAJIME [F]
CLISTは、計算命令、制御命令などをもっているので、CLISTだけで簡単な処理を行うことができる。次のCLISTは、関数をユーザが与えて、計算結果を表示するものである。
WRITENR 変数を&Xとする計算式(例:2*(&X+1)-3)?
READ &SHIKI
READX:WHITENR Xの値?
READ &X
SET Y=&SHIKI
WHITE &Y
GOTO READX
式を「2*(&X+1)-3」とし、Xの値を5とすれば、「SET Y=&SHIKI」は「SET Y=2*(&X+1)-3」であり、&X=5であるから、Y=2*(5+1)-3=9 となり、「9」が出力される。
このように、CLISTでは実行中に命令の一部を変更できるのが特徴である。
入力ファイル「INFILE」のレコードは、次の項目を含んでいる。
年月:1桁目から6桁目まで
商品コード:7桁目から13桁目まで
府県コード:14桁目から15桁目まで
このうち1つの項目[KOUMOKU」を指定して、その値[ATAI」を指定する。
「INFILE」のその項目の値「DATAVAL」が「ATAI」と一致するレコードを選択して、出力ファイル「OUTFILE」を作成する。例えば、
選択条件の項目(1:年月 2:商品 3:府県)? 1
選択科目の値? 201006
とすれば、年月(7桁目から13桁目まで)が 201006 のレコードだけが選択される。
WHITENR 選択条件の項目(1:年月 2:商品 3:府県)?
READ &KOUMOKU
WHITENR 選択科目の値?
READ &ATAI
ALLOCATE FILE(INFILE) DATASET(KEIRI.D2001006) INPUT
ALLOCATE FILE(OUTFILE) DATASET(USER.WORKFILE) OUTPUT
OPENFILE INFILE INPUT
OPENFILE OUTFILE OUTPUT
GETFILE INFILE
SET RTNCODE = &LASTCC /* データがなくなると LASTCC=400 になる。*/
DO WHILE RTNCODE < 400
IF KOUMOKU=1 SET DATAVAL=&SUBSTR(1:6,&INFILE)
IF KOUMOKU=2 SET DATAVAL=&SUBSTR(7:13,&INFILE)
IF KOUMOKU=3 SET DATAVAL=&SUBSTR(14:15,&INFILE)
IF ATAI = DATAVAL +
DO
SET OUTFILE = &INFILE
PUT OUTFILE
END
GETFILE INFILE
SET RTNCODE = &LASTCC
END
CLOSEFILE INFILE
CLOSEFILE OUTFILE
このような機能を適切に組み合わせれば「テンプレートとなるプログラムを読み込み、対話的に修正して新規のプログラムを作成して、コンパイルして実行する」CLISTを作成することは容易である。そのCLISTをユーザに公開すれば、ユーザは多様な情報を入手できるようになる。
このように、汎用コンピュータでもユーザが使いやすい環境を実現することができるし、実際に活用していたのである。
参照:IBM[TSO/E CLIST」(CLISTの解説書)
http://publibfp.dhe.ibm.com/epubs/pdf/a8886275.pdf