MinGWを利用しWindows上で行う
OpenCOBOLでのWebプログラミング
2002/08/30
ビットウォークさんがMinGW版OpenCOBOLを開発されました。
これによりWindows上で手軽にOpenCOBOLプログラミングが出来るようになりました。
そこで今回MinGWとOpenCOBOLを使用してWeb対応のプログラムを作成いたしました。
最新版のOpen COBOLはコンパイルオプションが違いますのでご注意下さい。
こちらを参考にして下さい 2004/04/06
http://www12.ocn.ne.jp/~peg/Compiler-Options.html
| 1.MinGWとは MinGW(Minimalist GNU for Windows)は、GCC(GNUコンパイラコレクション)およびネイティブな32bit Windowsプログラムを生成するためのヘッダーファイルとインポートライブラリを揃えた環境です。 |
| 2.OpenCOBOLとは OpenCOBOLとは日本で開発されているLinux上で動くCOBOLのフリーコンパイラです。 |
| 利用環境 | |
| OS | Windows98 SE |
| HTTPサーバー | AN HTTPDを使用させて頂きました。 |
| MinGW | ビットウォークさん開発分を使用させて頂きました。 |
| MinGW版OpenCOBOL | ビットウォークさん開発分を使用させて頂きました。 |
| ディレクトリ構成 | |
| ドキュメントルート | C:\ホームページ\自宅サーバー\cobol ここにindex.htmlをおいております。 |
| CGIパス | C:\ホームページ\自宅サーバー\cobol\cgi-bin ここにCOBOLのexeと各種dllをおいております。 |
| MinGW | C:\mingw ここにMinGW・MinGW版OpenCOBOLをインストール致しました。 |
| 作成したプログラムは以下です。 ホスト計算機で使用するブロッキングファクターと最適レコード長を算出する為の計算プログラムです。 |
![]() この画面でDASDのトラックサイズ(左の例は3380ディスクパックのハーフトラックの数字です)とレコード長を入力し計算ボタンを押します。 するとトラックサイズの数字とレコードレングスがCOBOLプログラムに渡され、計算され以下の画面を表示します。 |
![]() |
| HTMLのソースです。 |
|
<HTML> |
| 以下メインのCOBOLソースです。 今回は直接HTMLからデータを受け取っております。FORMのmethod="POST"としCOBOL側で標準入力からデータを受ける方法(ACCEPT命令)です。エンコードは今回ENCTYPE="text/plain"です。 |
IDENTIFICATION DIVISION.
PROGRAM-ID. TEST01.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WK-BLKSIZE.
03 FILLER PIC X(004).
03 WK-BLKX PIC X(009).
01 WK-RECLEN.
03 FILLER PIC X(004).
03 WK-RECX PIC X(009).
01 WK-RECLEN9 PIC 9(015).
01 WK-BLKSIZE9 PIC 9(015).
01 WK-BFK PIC 9(015) VALUE ZERO.
01 WK-SBSIZE PIC 9(015) VALUE ZERO.
01 WK-BFKX PIC Z,ZZZ,ZZZ,ZZZ,ZZZ,ZZ9.
01 WK-SBSIZEX PIC Z,ZZZ,ZZZ,ZZZ,ZZZ,ZZ9.
01 A PIC X(015).
01 C PIC S9(12)V9(03).
01 JSW PIC 9.
PROCEDURE DIVISION.
A000-SHORI.
ACCEPT WK-BLKSIZE.
ACCEPT WK-RECLEN.
MOVE WK-BLKX TO A.
MOVE ZERO TO C.
CALL "SUBX" USING A C JSW.
MOVE C TO WK-BLKSIZE9.
MOVE WK-RECX TO A.
MOVE ZERO TO C.
CALL "SUBX" USING A C JSW.
MOVE C TO WK-RECLEN9.
COMPUTE WK-BFK = WK-BLKSIZE9 / WK-RECLEN9.
COMPUTE WK-SBSIZE = WK-BFK * WK-RECLEN9.
MOVE WK-BFK TO WK-BFKX.
MOVE WK-SBSIZE TO WK-SBSIZEX.
A000-300.
DISPLAY "Content-type: text/html".
DISPLAY.
DISPLAY "<HTML>".
DISPLAY "<HEAD>".
DISPLAY "<TITLE>最適ブロックサイズ計算結果</TITLE>".
DISPLAY "</HEAD>".
DISPLAY "<BODY><CENTER><H1>".
DISPLAY "最適ブロックサイズ計算結果".
DISPLAY "</H1><br>ブロックサイズ".
DISPLAY WK-BLKX.
DISPLAY "バイト".
DISPLAY "<br>レコード長".
DISPLAY WK-RECX.
DISPLAY "バイト".
DISPLAY "<BR><BR><FONT COLOR=RED>ブロッキングファクター".
DISPLAY "</FONT>".
DISPLAY WK-BFKX.
DISPLAY "<br><FONT COLOR=BLUE>最適ブロックサイズ</FONT>".
DISPLAY WK-SBSIZEX.
DISPLAY "バイト".
DISPLAY "<br>".
DISPLAY "<A HREF=../INDEX.HTML>戻る</A></CENTER>".
DISPLAY "</BODY>".
DISPLAY "</HTML>".
STOP RUN.
|
| 以下 数字項目変換サブプログラムです。 |
IDENTIFICATION DIVISION.
PROGRAM-ID. SUBX.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CD-BTAB PIC X VALUE "*".
01 SUB-AREA.
02 A PIC X(15).
02 BBU REDEFINES A.
03 B-ITEM PIC X OCCURS 15.
02 ITEM-B PIC X.
02 NU PIC 9(02).
02 IU PIC 9(02).
02 Z-C-AREA.
03 C-SUU PIC 9(15).
03 DDU REDEFINES C-SUU.
04 D-ITEM PIC X OCCURS 15.
03 TPU1 PIC X.
03 TPU2 PIC X.
03 DEPO PIC 9(2).
03 KK PIC 9(2).
LINKAGE SECTION.
01 AA PIC X(15).
01 C PIC S9(12)V9(3).
01 JSW PIC 9.
PROCEDURE DIVISION USING AA C JSW.
HAJIME.
display "start subxa"
MOVE AA TO A.
IF B-ITEM (1) = CD-BTAB
MOVE 1 TO JSW
GO TO SUBXE.
MOVE 16 TO NU IU.
MOVE ZERO TO Z-C-AREA JSW.
UU1.
SUBTRACT 1 FROM IU.
IF IU = ZERO
GO TO UU2.
MOVE B-ITEM (IU) TO ITEM-B.
IF ITEM-B = " " OR "+" OR "," OR LOW-VALUE
GO TO UU1.
IF ITEM-B = "-"
MOVE "*" TO TPU1
GO TO UU1.
IF ITEM-B = "."
MOVE "*" TO TPU2
GO TO UU1.
IF ITEM-B NOT NUMERIC
MOVE 2 TO JSW
GO TO SUBXE.
IF TPU2 NOT = "*"
ADD 1 TO DEPO.
SUBTRACT 1 FROM NU.
MOVE ITEM-B TO D-ITEM (NU).
GO TO UU1.
UU2.
MOVE C-SUU TO C.
IF TPU1 = "*"
COMPUTE C = ZERO - C.
IF TPU2 = "*"
NEXT SENTENCE
ELSE
GO TO SUBXE.
UU3.
ADD 1 TO KK.
COMPUTE C = C * 0.1000.
IF KK NOT = DEPO
GO TO UU3.
SUBXE.
EXIT-PROGRAM.
|
以下 コンパイルの手順です。
1.SET PATH=c:\mingw\bin
(mingwのパス設定)
2.cobc -c -static -main test01.cob
(メインプログラムのコンパイル)
3.cobc -c -static subx.cob
(サブプログラムのコンパイル)
4.cobc -o test01 test01.o subx.o
(メインプログラムをサブプログラムをリンクさせtest01のexe作成)
※ OpenCOBOLのコンパイル・リンク方法に関してはOpenCOBOLのサイトに詳細が紹介されております。

私の場合C:\ホームページ\自宅サーバー\cobolにプログラムソースを作成し、このディレクトリでコンパイルリンクし、exeを作成。その後exeをC:\ホームページ\自宅サーバー\cobol\cgi-binに移す方法で開発しました。

C:\ホームページ\自宅サーバー\cobol\cgi-binをCGIのディレクトリにHTTPDで設定しましたのでここにexeをおきます。またMinGWの一部のdellをc:\Mingw\binよりこのディレクトリにコピーしてきました。
