COBOL行番号

【公式】スペースコブラ 第1話「復活!サイコガン」”SPACE ADVENTURE COBRA” EP01(1982)

アニメ『スペースコブラ』(1982)

当時夢中になっていたアニメの一つです。夢中になった理由の一つは、当時流行っていたルービックスネークのように形が変わるタートル号だったり、車がロボットに変形するサイコロイドだったり。まあ変形するものにすぐに目がいってしまう子供時代を過ごしていたので、まんまと玩具メーカーの策略にハマりながらアニメをみてたわけです。コブラの一番の魅力はサイコガンで間違いないのですが、欲しかったですタートル号。
左手のサイコガンは、なんと曲がるんです。アンジェリーナ・ジョリー主演の「ウォンテッド」を見た時、サイコガンを思い出しました。サイコガンは曲がることが一番の魅力です。

ではCOBRAではなくCOBOLいきます。

前回Hello Worldを作りましたが、左側の空白部分に行番号がありません。

takk@ubu16:~/coboltest$ cat test.cob
      * コメント
      *
      *
      *
       IDENTIFICATION  DIVISION.
       PROGRAM-ID.     HELLO.
       PROCEDURE       DIVISION.
       DISPLAY "Hello World!".
       STOP   RUN.

takk@ubu16:~/coboltest$

この7列の空白部分に行番号を入れてコンパイルしてみましょう。
行番号はnlコマンドで作ります。

takk@ubu16:~/coboltest$ nl test.cob
     1        * コメント
     2        *
     3        *
     4        *
     5         IDENTIFICATION  DIVISION.
     6         PROGRAM-ID.     HELLO.
     7         PROCEDURE       DIVISION.
     8         DISPLAY "Hello World!".
     9         STOP   RUN.
    10
takk@ubu16:~/coboltest$

COBOLは10ずつ増える行番号が似合ってますので、10増やすようにnlコマンドに-iオプションを指定します。

takk@ubu16:~/coboltest$ nl -i10 test.cob
     1        * コメント
    11        *
    21        *
    31        *
    41         IDENTIFICATION  DIVISION.
    51         PROGRAM-ID.     HELLO.
    61         PROCEDURE       DIVISION.
    71         DISPLAY "Hello World!".
    81         STOP   RUN.
    91
takk@ubu16:~/coboltest$

先頭が1から始まってますので、10からに指定します。

takk@ubu16:~/coboltest$ nl -i10 -v10 test.cob
    10        * コメント
    20        *
    30        *
    40        *
    50         IDENTIFICATION  DIVISION.
    60         PROGRAM-ID.     HELLO.
    70         PROCEDURE       DIVISION.
    80         DISPLAY "Hello World!".
    90         STOP   RUN.
   100
takk@ubu16:~/coboltest$

次は左側を空白埋ではなく、0埋に変えましょう。

takk@ubu16:~/coboltest$ nl -i10 -v10 -nrz test.cob
000010        * コメント
000020        *
000030        *
000040        *
000050         IDENTIFICATION  DIVISION.
000060         PROGRAM-ID.     HELLO.
000070         PROCEDURE       DIVISION.
000080         DISPLAY "Hello World!".
000090         STOP   RUN.
000100
takk@ubu16:~/coboltest$

元々のテキストの左6桁は不要なので削除します。

takk@ubu16:~/coboltest$ cut -b7- < test.cob
* コメント
*
*
*
 IDENTIFICATION  DIVISION.
 PROGRAM-ID.     HELLO.
 PROCEDURE       DIVISION.
 DISPLAY "Hello World!".
 STOP   RUN.

takk@ubu16:~/coboltest$

くっつけます。

takk@ubu16:~/coboltest$ cut -b7- < test.cob | nl -i10 -v10 -nrz -w7
0000010 * コメント
0000020 *
0000030 *
0000040 *
0000050  IDENTIFICATION  DIVISION.
0000060  PROGRAM-ID.     HELLO.
0000070  PROCEDURE       DIVISION.
0000080  DISPLAY "Hello World!".
0000090  STOP   RUN.
0000100
takk@ubu16:~/coboltest$

行番号と本体の間に区切り文字(タブ)が入ってしまいました。
いっそのこと、タブを0に置換することにします。これでnlへ指定するオプションも減ります。

takk@ubu16:~/coboltest$ cut -b7- < test.cob | nl -nrz -w5 | sed 's/\t/0/'
000010* コメント
000020*
000030*
000040*
000050 IDENTIFICATION  DIVISION.
000060 PROGRAM-ID.     HELLO.
000070 PROCEDURE       DIVISION.
000080 DISPLAY "Hello World!".
000090 STOP   RUN.
000100
takk@ubu16:~/coboltest$

コンパイルしてみます。

takk@ubu16:~/coboltest$ !! > test2.cob
cut -b7- < test.cob | nl -nrz -w5 | sed 's/\t/0/' > test2.cob
takk@ubu16:~/coboltest$ cobc -x test2.cob
takk@ubu16:~/coboltest$ ./test2
Hello World!
takk@ubu16:~/coboltest$

ビルド、実行できました。行番号があるプログラムってなんだかまっすぐで固い印象になりますね。

コメント

タイトルとURLをコピーしました