COBOL2002 ユーザーズガイド
HTMLの先頭部分を出力するサービスルーチンです。CBLHTMLBEGINサービスルーチンが出力する内容を,次に示します。
<HTML> <HEAD> <TITLE> 引数1 </TITLE> </HEAD> <BODY>
CALL 'CBLHTMLBEGIN' USING 引数1
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TITLE-NAME PIC X(128).
PROCEDURE DIVISION.
MOVE 'This my test title' TO TITLE-NAME.
CALL 'CBLHTMLBEGIN' USING TITLE-NAME.
CALL 'CBLHTMLEND'.HTMLの終端部分を出力するサービスルーチンです。CBLHTMLENDサービスルーチンが出力する内容を,次に示します。
</BODY> </HTML>
CALL 'CBLHTMLEND'
引数に指定された文字列を出力するサービスルーチンです。
CALL 'CBLDISPLAYTEXT' USING 引数1
表27-5 CBLDISPLAYTEXTサービスルーチンのインタフェース領域
| 記述形式 | 内容 |
|---|---|
01 データ名1. |
CALL文のUSINGで指定するインタフェース領域の名前。 |
02 データ名2 PIC S9(9)
USAGE COMP.
|
出力する文字列の長さを4バイトの2進項目で指定する。 |
02 データ名3.
03 PIC X OCCURS 1024
DEPENDING ON データ名2.
|
出力する文字列を可変長英数字項目で指定する。最大1,024バイトまで指定できる。 |
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NAMEX.
02 NAME-LEN PIC S9(9) USAGE COMP.
02 NAME-STRING.
03 PIC X OCCURS 1024 DEPENDING ON NAME-LEN.
PROCEDURE DIVISION.
COMPUTE NAME-LEN = FUNCTION LENGTH('COBOL').
MOVE 'COBOL' TO NAME-STRING.
CALL 'CBLDISPLAYTEXT' USING NAMEX.引数に指定した文字列を,実体参照の形式に変換して出力するサービスルーチンです。
実体参照とは,HTML言語で予約されているため表示できない文字を,別の文字列を使って表す記法です。例えば,HTML言語では「<」「>」の文字が予約されているため,実体参照ではこれを「<」「>」と表します。
CALL 'CBLCONVERTTEXT' USING 引数1
表27-6 CBLCONVERTTEXTサービスルーチンのインタフェース領域
| 記述形式 | 内容 |
|---|---|
01 データ名1. |
CALL文のUSINGで指定するインタフェース領域の名前。 |
02 データ名2 PIC S9(9)
USAGE COMP.
|
変換して出力する文字列の長さを4バイトの2進項目で指定する。 |
02 データ名3.
03 PIC X OCCURS 1024
DEPENDING ON データ名2.
|
変換して出力する文字列を可変長英数字項目で指定する。 最大1,024バイトまで指定できる。 |
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NAMEX.
02 NAME-LEN PIC S9(9) USAGE COMP.
02 NAME-STRING.
03 PIC X OCCURS 1024 DEPENDING ON NAME-LEN.
01 TEXT-STR PIC X(17) VALUE 'SHOW AN <OPTION>.'.
PROCEDURE DIVISION.
:
COMPUTE NAME-LEN = FUNCTION LENGTH (TEXT-STR).
MOVE TEXT-STR TO NAME-STRING.
CALL 'CBLCONVERTTEXT' USING NAMEX.SHOW AN <O PTION>.
CGI環境変数の名前と現在の値を,HTML形式で出力するサービスルーチンです。
出力される環境変数の種類については,「27.4 CGI環境変数へのアクセス」を参照してください。
CALL 'CBLPRINTENV'
DATA DIVISION.
WORKING-STORAGE SECTION.
01 INPUTLIST USAGE ADDRESS VALUE NULL.
PROCEDURE DIVISION.
CALL 'CBLCGIINIT' USING INPUTLIST.
CALL 'CBLPRINTENV'.
:
CALL 'CBLDESTROYLIST' USING INPUTLIST.<HTML> <BODY> <H3> Environment variable list: </H3> AUTH_TYPE= (NULL) <BR> CONTENT_LENGTH= 0 <BR> CONTENT_TYPE= (NULL) <BR> GATEWAY_INTERFACE= CGI/1.1 <BR> : : </BODY> </HTML>
環境変数の値を取得するサービスルーチンです。
CALL 'CBLGETENV' USING 引数1 引数2
表27-7 CBLGETENVサービスルーチンのインタフェース領域
| 記述形式 | 内容 |
|---|---|
01 データ名1. |
CALL文のUSINGで指定するインタフェース領域の名前。 |
02 データ名2 PIC S9(9)
USAGE COMP.
|
取得した環境変数の値(文字列)の長さを格納する領域で,4バイトの2進項目で指定する。 |
02 データ名3.
03 PIC X OCCURS 1024
DEPENDING ON データ名2.
|
取得した環境変数の値を格納する領域で,最大1,024バイトの可変長集団項目を指定する。 |
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NAMEX PIC X(28) VALUE 'REMOTE_HOST'.
01 VALUEX.
02 VALUE-LEN PIC S9(9) USAGE COMP.
02 VALUE-STRING.
03 PIC X OCCURS 1024 DEPENDING ON VALUE-LEN.
PROCEDURE DIVISION.
CALL 'CBLGETENV' USING NAMEX VALUEX.
IF RETURN-CODE = 0 THEN
DISPLAY 'THE CLIENT MACHINE IS ' VALUE-STRING
ELSE
DISPLAY 'ERROR'
END-IF.フォーム情報からCGIリストを作成し,リストのアドレスを取得するサービスルーチンです。フォーム情報がPOSTメソッド(標準出力経由),GETメソッド(環境変数経由)のどちらから転送されても,CGIリストを作成できます。
また,-TDInfオプションを指定してコンパイルしたCGIプログラムでCBLCGIINITサービスルーチンが呼び出されると,CGI用環境変数の値をCGI環境ファイル(実行可能ファイル名.env)として,CGIプログラムと同じフォルダに出力します。
CALL 'CBLCGIINIT' USING 引数1
| 名前 | 値 |
|---|---|
| NAME1 | 1,024バイト |
| NAME1 | 1,024バイト |
| NAME1 | 952バイト |
CBLCGIINITSIZE=最大文字列長
DATA DIVISION.
WORKING-STORAGE SECTION.
01 INPUTLIST USAGE ADDRESS VALUE NULL.
PROCEDURE DIVISION.
CALL 'CBLCGIINIT' USING INPUTLIST.
:
CALL 'CBLDESTROYLIST' USING INPUTLIST.新たにCGIリストを作成し,リストのアドレスを取得するサービスルーチンです。
CALL 'CBLCREATELIST' USING 引数1
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NAMELIST USAGE ADDRESS VALUE NULL.
PROCEDURE DIVISION.
CALL 'CBLCREATELIST' USING NAMELIST.
:
CALL 'CBLDESTROYLIST' USING NAMELIST.CGIリストを削除して,領域を解放するサービスルーチンです。
CALL 'CBLDESTROYLIST' USING 引数1
指定したCGIリストの最後に,「名前」と「値」の対を追加するサービスルーチンです。
CALL 'CBLADDPAIR' USING 引数1 引数2 引数3
表27-8 CBLADDPAIRサービスルーチンのインタフェース領域
| 記述形式 | 内容 |
|---|---|
01 データ名1. |
CALL文のUSINGで指定するインタフェース領域の名前。 |
02 データ名2 PIC S9(9)
USAGE COMP.
|
CGIリストに追加する「値」の長さを格納する領域で,4バイトの2進項目で指定する。 |
02 データ名3.
03 PIC X OCCURS 1024
DEPENDING ON データ名2.
|
CGIリストに追加する「値」を格納する領域で,最大1,024バイトの可変長集団項目を指定する。 |
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NAMELIST USAGE ADDRESS VALUE NULL.
01 VALUEX.
02 VALUE-LEN PIC S9(9) USAGE COMP.
02 VALUE-STRING.
03 PIC X OCCURS 1024 DEPENDING ON VALUE-LEN.
01 NAMEX PIC X(28) VALUE 'Hitachi'.
01 NAMEX-VALUE PIC X(9) VALUE 'COBOL2002'.
PROCEDURE DIVISION.
CALL 'CBLCREATELIST' USING NAMELIST.
COMPUTE VALUE-LEN = FUNCTION LENGTH(NAMEX-VALUE).
MOVE NAMEX-VALUE TO VALUE-STRING.
CALL 'CBLADDPAIR' USING NAMELIST NAMEX VALUEX.
CALL 'CBLDESTROYLIST' USING NAMELIST.指定したCGIリストの現在のポイント位置から,「名前」と「値」の対を削除するサービスルーチンです。
CALL 'CBLDELETEPAIR' USING 引数1
DATA DIVISION.
WORKING-STORAGE SECTION.
01 INPUTLIST USAGE ADDRESS VALUE NULL.
01 NAMEX PIC X(28) VALUE 'COBOL'.
01 VALUEX.
02 VALUE-LEN PIC S9(9) USAGE COMP.
02 VALUE-STRING.
03 PIC X OCCURS 1024 DEPENDING ON VALUE-LEN.
PROCEDURE DIVISION.
CALL 'CBLCGIINIT' USING INPUTLIST.
CALL 'CBLFINDPAIR' USING INPUTLIST
NAMEX VALUEX.
CALL 'CBLDELETEPAIR' USING INPUTLIST.
CALL 'CBLDESTROYLIST' USING INPUTLIST.指定したCGIリストの先頭のポイント位置から「名前」を検索し,「名前」に対応する「値」を取得するサービスルーチンです。また,一致した「名前」にポイント位置を移動します。
CALL 'CBLFINDPAIR' USING 引数1 引数2 引数3
表27-9 CBLFINDPAIRサービスルーチンのインタフェース領域
| 記述形式 | 内容 |
|---|---|
01 データ名1. |
CALL文のUSINGで指定するインタフェース領域の名前。 |
02 データ名2 PIC S9(9)
USAGE COMP.
|
検索した「名前」に対応する「値」の長さが格納される領域。4バイトの2進項目を指定する。 |
02 データ名3.
03 PIC X OCCURS 1024
DEPENDING ON データ名2.
|
検索した「名前」に対応する「値」が格納される領域。 最大1,024バイトの可変長集団項目を指定する。 |
DATA DIVISION.
WORKING-STORAGE SECTION.
01 INPUTLIST USAGE ADDRESS VALUE NULL.
01 NAMEX PIC X(28) VALUE 'Hitachi'.
01 VALUEX.
02 VALUE-LEN PIC S9(9) USAGE COMP.
02 VALUE-STRING.
03 PIC X OCCURS 1024 DEPENDING ON VALUE-LEN.
PROCEDURE DIVISION.
CALL 'CBLCGIINIT' USING INPUTLIST.
CALL 'CBLFINDPAIR' USING INPUTLIST NAMEX VALUEX.
CALL 'CBLDISPLAYTEXT' USING VALUEX.
CALL 'CBLDESTROYLIST' USING INPUTLIST.指定したCGIリストの,次のポイント位置から「名前」を検索し,「名前」に対応する「値」を取得するサービスルーチンです。また,一致した「名前」にポイント位置を移動します。
CALL 'CBLFINDNEXTPAIR' USING 引数1 引数2 引数3
表27-10 CBLFINDNEXTPAIRサービスルーチンのインタフェース領域
| 記述形式 | 内容 |
|---|---|
01 データ名1. |
CALL文のUSINGで指定するインタフェース領域の名前。 |
02 データ名2 PIC S9(9)
USAGE COMP.
|
検索した「名前」に対応する「値」の長さが格納される領域。4バイトの2進項目を指定する。 |
02 データ名3.
03 PIC X OCCURS 1024
DEPENDING ON データ名2.
|
検索した「名前」に対応する「値」が格納される領域。 最大1,024バイトの可変長集団項目を指定する。 |
DATA DIVISION.
WORKING-STORAGE SECTION.
01 INPUTLIST USAGE ADDRESS VALUE NULL.
01 NAMEX PIC X(28) VALUE 'Hitachi'.
01 VALUEX.
02 VALUE-LEN PIC S9(9) USAGE COMP.
02 VALUE-STRING.
03 PIC X OCCURS 1024 DEPENDING ON VALUE-LEN.
PROCEDURE DIVISION.
CALL 'CBLCGIINIT' USING INPUTLIST.
CALL 'CBLFINDPAIR'
USING INPUTLIST NAMEX VALUEX.
CALL 'CBLDISPLAYTEXT' USING VALUEX.
CALL 'CBLFINDNEXTPAIR'
USING INPUTLIST NAMEX VALUEX.
CALL 'CBLDISPLAYTEXT' USING VALUEX.
CALL 'CBLDESTROYLIST' USING INPUTLIST.指定したCGIリストの現在のポイント位置から「名前」と「値」の対を取得するサービスルーチンです。ポイント位置は移動しません。
CALL 'CBLGETPAIR' USING 引数1 引数2 引数3
表27-11 CBLGETPAIRサービスルーチンのインタフェース領域
| 記述形式 | 内容 |
|---|---|
01 データ名1. |
CALL文のUSINGで指定するインタフェース領域の名前。 |
02 データ名2 PIC S9(9)
USAGE COMP.
|
「値」の長さが格納される領域。4バイトの2進項目を指定する。 |
02 データ名3.
03 PIC X OCCURS 1024
DEPENDING ON データ名2.
|
「値」が格納される領域。最大1,024バイトの可変長集団項目を指定する。 |
DATA DIVISION.
WORKING-STORAGE SECTION.
01 INPUTLIST USAGE ADDRESS VALUE NULL.
01 NAMEX PIC X(28).
01 VALUEX.
02 VALUE-LEN PIC S9(9) USAGE COMP.
02 VALUE-STRING.
03 PIC X OCCURS 1024 DEPENDING ON VALUE-LEN.
PROCEDURE DIVISION.
CALL 'CBLCGIINIT' USING INPUTLIST.
CALL 'CBLGETPAIR' USING INPUTLIST NAMEX VALUEX.
DISPLAY 'NAME = ' NAMEX.
CALL 'CBLDESTROYLIST' USING INPUTLIST.指定したCGIリストの現在のポイント位置から「名前」と「値」の対を取得するサービスルーチンです。また,ポイント位置を次に移動します。
CALL 'CBLGETPAIRNEXT' USING 引数1 引数2 引数3
表27-12 CBLGETPAIRNEXTサービスルーチンのインタフェース領域
| 記述形式 | 内容 |
|---|---|
01 データ名1. |
CALL文のUSINGで指定するインタフェース領域の名前。 |
02 データ名2 PIC S9(9)
USAGE COMP.
|
「値」の長さが格納される領域。4バイトの2進項目を指定する。 |
02 データ名3.
03 PIC X OCCURS 1024
DEPENDING ON データ名2.
|
「値」が格納される領域。最大1,024バイトの可変長集団項目を指定する。 |
DATA DIVISION.
WORKING-STORAGE SECTION.
01 INPUTLIST USAGE ADDRESS VALUE NULL.
01 NAMEX PIC X(28).
01 VALUEX.
02 VALUE-LEN PIC S9(9) USAGE COMP.
02 VALUE-STRING.
03 PIC X OCCURS 1024 DEPENDING ON VALUE-LEN.
PROCEDURE DIVISION.
CALL 'CBLCGIINIT' USING INPUTLIST.
CALL 'CBLGETPAIRNEXT'
USING INPUTLIST NAMEX VALUEX.
DISPLAY ' NAME = ' NAMEX.
CALL 'CBLGETPAIRNEXT'
USING INPUTLIST NAMEX VALUEX.
DISPLAY ' NAME = ' NAMEX.
CALL 'CBLDESTROYLIST' USING INPUTLIST.指定したCGIリスト中の「名前」と「値」の対の数を取得するサービスルーチンです。
CALL 'CBLLISTCOUNT' USING 引数1 引数2
DATA DIVISION.
WORKING-STORAGE SECTION.
01 INPUTLIST USAGE ADDRESS VALUE NULL.
01 LIST-COUNT PIC S9(9) USAGE COMP.
PROCEDURE DIVISION.
CALL 'CBLCGIINIT' USING INPUTLIST.
CALL 'CBLLISTCOUNT'
USING INPUTLIST LIST-COUNT.
IF RETURN-CODE = 0 THEN
DISPLAY 'LIST COUNT : ' LIST-COUNT
END-IF.
:
CALL 'CBLDESTROYLIST' USING INPUTLIST.CGIリストにHTML拡張言語のREPEATで終端を認識する終端インジケータを追加するサービスルーチンです。終端インジケータは,特殊な名前と値(.REPEAT.TERMINATOR,1)で構成されています。
本サービスルーチンは,CGIリストの途中で%REPEAT%文を打ち切りたい場合などに使用します。
CALL 'CBLENDREPEAT' USING 引数1
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NAMELIST USAGE ADDRESS VALUE NULL.
:
PROCEDURE DIVISION.
CALL 'CBLCREATELIST' USING NAMELIST.
MOVE 'CITY' TO NAMEX.
COMPUTE VALUE-LEN = FUNCTION LENGTH ('TOKYO').
MOVE 'TOKYO' TO VALUE-STRING.
CALL 'CBLADDPAIR' USING NAMELIST NAMEX VALUEX.
CALL 'CBLENDREPEAT' USING NAMELIST.
COMPUTE VALUE-LEN = FUNCTION LENGTH ('FUKUOKA').
MOVE 'FUKUOKA' TO VALUE-STRING.
CALL 'CBLADDPAIR' USING NAMELIST NAMEX VALUEX.
CALL 'CBLENDREPEAT' USING NAMELIST.
:
CALL 'CBLDESTROYLIST' USING NAMELIST.CBLFILLTEMPLATEサービスルーチンは,HTMLテンプレートをインタプリットするサービスルーチンです。また,HTMLテンプレートからあらかじめ生成したDLLファイルを,実行時に呼び出せます。ただし,DLLファイルはstdcall属性で作成しておかなければなりません。HTMLテンプレートについては,「27.6 HTMLテンプレート機能」を参照してください。
CALL 'CBLFILLTEMPLATE' USING 引数1 引数2
DATA DIVISION.
WORKING-STORAGE SECTION.
01 INPUTLIST USAGE ADDRESS VALUE NULL.
01 TMPLT-NAME PIC X(256) VALUE 'HITACHI.htm'.
PROCEDURE DIVISION.
CALL 'CBLCGIINIT' USING INPUTLIST.
CALL 'CBLFILLTEMPLATE' USING TMPLT-NAME
INPUTLIST.
:
CALL 'CBLDESTROYLIST' USING INPUTLIST.指定したCGIリストの内容を,HTML形式で出力するサービスルーチンです。
CALL 'CBLPRINTLIST' USING 引数1
DATA DIVISION.
WORKING-STORAGE SECTION.
01 INPUTLIST USAGE ADDRESS VALUE NULL.
PROCEDURE DIVISION.
CALL 'CBLCGIINIT' USING INPUTLIST.
CALL 'CBLPRINTLIST' USING INPUTLIST.
:
CALL 'CBLDESTROYLIST' USING INPUTLIST.<HTML>
<BODY>
<H3> CGI list: </H3>
<DL>
<DT> name1
<DD> option1
<DT> name2
<DD> option2
</DL>
</BODY>
</HTML>HTML形式でエラーメッセージを出力するサービスルーチンです。
CALL 'CBLSENDERROR' USING 引数1
DATA DIVISION.
WORKING-STORAGE SECTION.
01 ERROR-MESSAGE PIC X(256) VALUE 'ERROR STRING.'.
PROCEDURE DIVISION.
:
CALL 'CBLSENDERROR' USING ERROR-MESSAGE.<HTML>
<HEAD>
<TITLE>Error Message </TITLE>
</HEAD>
<BODY>
<BR>
<H2>!! Error Message from COBOL CGI program !!</H2>
<H3> ERROR STRING. </H3>
</BODY>
</HTML> CGIプログラムの作成を支援するサービスルーチンの呼び出しをトレースするサービスルーチンです。また,CGI環境変数の値も取得します。トレース情報や環境変数の情報は,トレースファイル(実行可能ファイル名.trc)に出力されます。
トレース情報には,呼び出したサービスルーチンの名称と引数情報が出力されます。例えば,CBLCGIINITでは,CGIリストのアドレスが引数情報になります。
CALL 'CBLCGITRACE'
| サービスルーチン | 出力されるトレース情報 |
|---|---|
| CBLHTMLBEGIN | <! CBLHTMLBEGIN(); Title = "文字列" > |
| CBLHTMLEND | <! CBLHTMLEND(); > |
| CBLDISPLAYTEXT | 出力されない。 |
| CBLCONVERTTEXT | <! CBLCONVERTTEXT(); input string = "文字列" > |
| CBLPRINTENV | 出力されない。 |
| CBLGETENV | <! CBLGETENV(); name = "環境変数名", value = "環境変数の値" > |
| CBLCGIINIT |
|
|
|
| CBLCREATELIST |
|
|
|
| CBLDESTROYLIST | <! CBLDESTROYLIST(); list = " CGIリストのアドレス" > |
| CBLADDPAIR | <! CBLADDPAIR(); list = " CGIリストのアドレス", name = "名前", value = "値" > |
| CBLDELETEPAIR | <! CBLDELETEPAIR(); list = " CGIリストのアドレス" > |
| CBLFINDPAIR |
|
|
|
| CBLFINDNEXTPAIR |
|
|
|
| CBLGETPAIR |
|
|
|
| CBLGETPAIRNEXT |
|
|
|
| CBLLISTCOUNT | <! CBLLISTCOUNT(); list = " CGIリストのアドレス", count = "名前/値の数" > |
| CBLENDREPEAT | <! CBLENDREPEAT(); list = " CGIリストのアドレス" > |
| CBLFILLTEMPLATE | <! CBLFILLTEMPLATE(); list = " CGIリストのアドレス", filename = 'テンプレート名' > |
| CBLPRINTLIST | 出力されない。 |
| CBLSENDERROR | 出力されない。 |
| CBLCGITRACE | <! CBLCGITRACE(); YYYY-MM-DD (HH:MM:SS) > YYYY-MM-DDは年-月-日,HH:MM:SSは時:分:秒を示す。 |
DATA DIVISION.
WORKING-STORAGE SECTION.
01 INPUTLIST USAGE ADDRESS VALUE NULL.
01 NAMEX PIC X(28) VALUE 'COBOL'.
01 VALUEX.
02 VALUE-LEN PIC S9(9) USAGE COMP.
02 VALUE-STRING.
03 PIC X OCCURS 1024 DEPENDING ON VALUE-LEN.
PROCEDURE DIVISION.
CALL 'CBLCGITRACE'.
CALL 'CBLCGIINIT' USING INPUTLIST.
CALL 'CBLPRINTENV'.
CALL 'CBLFINDPAIR' USING INPUTLIST NAMEX VALUEX.
:
CALL 'CBLDESTROYLIST' USING INPUTLIST.<! CBLCGITRACE();YYYY-MM-DD (HH:MM:SS)> <! **** CGI ENVIRONMENT VARIABLES ***> AUTH_TYPE= (null) CONTENT_LENGTH= 0 : <! **** END OF CGI ENVIRONMENT VARIABLES ***> <! CBLCGIINIT();list = 0x890980 > :
All Rights Reserved. Copyright (C) 2013, 2016, Hitachi, Ltd.
All Rights Reserved. Copyright (C) 2002, 2011, Microsoft Corporation.