======================================================================== 【名 称】 CGi_LiB.CMD Version 1.01 【作成者名】 清水 和佳 (kshimz@dd.iij4u.or.jp / kshimz@air.ne.jp) 【動作環境】 OS/2 Warp + REXX (Classic Rexx) 【関連Soft】 DateUtil.CMD 【公開月日】 1998/09/22 【動作確認】 OS/2 Warp Ver 4.0・OS/2 Warp Server Ver 4.0 SMP 【ソフト種】 フリーソフトウェア 【転載条件】 GPL2 に従う ======================================================================== 【はじめに】  Perl の cgi-lib.pl に触発されて作成した、Rexx による CGI 関連のユーティ リティです。他の Rexx プログラムから外部ルーティンとして呼び出される事を 想定していますが、他のプログラムの内部に必要な部分を組み込み、内部ルーチ ンとして利用することもできます。使い方のサンプルとして、 ・cgi_test.cmd (デバッグ用) ・test.cgi.cmd (フォームの入力確認用) を付けます。 このままの形での再配布は自由ですが、中身を改変したものの再配布は、オリジ ナルとの差分を添付する形でお願いします。(GPL.txt も参照してください)。 【アーカイブの内容】   CGi_LiB.CMD   ・・・ プログラム本体   CGi_LiB.TXT   ・・・ この文書   CGi_Test.cmd  ・・・ 機能テスト用コマンド   test.cgi.cmd  ・・・ 汎用の、フォームの入力内容確認スクリプト   cgitest.html  ・・・ test.cgi.cmd を呼び出す html 文書   GPL.txt     ・・・ GNU 一般公有使用許諾書 【インストール方法】 PATH の通ったディレクトリに CGi_LiB.CMD を置けばいいです。 (外部ルーチンとして呼び出す際に便利です。) 一部の機能で、拙作の DateUtil.CMD (日付と時間に関するユーティリティ群) を 利用しているので、これも PATH の通ったディレクトリに置いてください。 【test.cgi.cmd を試してみる】 test.cgi.cmd と cgitest.html を試すには、以下の手順に従ってください。 1. test.cgi.cmd を、Web サーバの /cgi-bin/ ディレクトリに置く 2. cgitest.html を、Web サーバの適当なディレクトリに置く 3. ブラウザから URL を指定して、cgitest.html を呼び出す。 4. フォームに適当にデータを入力し、「確認する」ボタンを押す。 5. 結果が表示される。 【基本的な呼び出し方法】  以下、Rexx プログラムからの利用方法を説明します。 1. 外部ルーチンとして利用する場合  普通の Rexx プログラムと同じですが、第一引数は CGi_LiB.cmd の機能名 (CGi_LiB.cmd 内のサブルーチン名) にしなければなりません。第二引数以下 は、呼び出す機能によって異なります。 (後述の機能説明を参照) ret = cgi_lib( FUNC , arg_1 , arg_2 , .... , arg_n ) if ret = .... または CALL cgi_lib FUNC , arg_1 , arg_2 , .... , arg_n if result = .... といった記述になります。 2. 内部ルーチンとして利用する場合  作成するプログラムの最後に、CGi_LiB.cmd (のうちの必要な部分) を複写 してご利用ください。内部で参照している変数は、ステム cgi_lib. を除き、 すべて独立変数です。 (同じ名前の変数を別のサブルーチンで使っていても、 互いに影響することはない)  内部ルーチンとなるので、機能名 (CGi_LiB.cmd 内のサブルーチン名) を 直接呼び出すことができます。 ret = FUNC ( arg_1 , arg_2 , .... , arg_n ) if ret = .... または CALL FUNC arg_1 , arg_2 , .... , arg_n if result = .... といった記述が可能です。(引数は後述の機能説明を参照) 【機能 (サブルーチン) の概要説明】 CgiDie CgiError と同じだが、ここでプログラムは終了する。 CgiError cgi の異常終了時メッセージを標準出力に出力する。 CgiParse フォームに入力された変数の値を、CERN httpd サーバと一緒に 配布される cgiparse と同じ規則で環境変数に格納する。 ConvertCRLF 改行コードをすべて CR+LF に変換する。 GetVarVal cgiparse の実行後、フォームで入力された変数の値を得る。 HtmlBot HTML 文書の終了文字列 () を得る。 HtmlTop HTML 文書の開始文字列 (<BODY><H1>) を得る。 HtmlTop2 背景色として白を指定し、第1レベルの見出しを中央揃えにした HTML 文書の開始文字列 (<HEAD><TITLE><BODY><H1>) を得る。 MyURL cgi スクリプトの URL を得る。 PrintDocType HTML 文書のバージョン宣言文字列 (<!DOCTYPE>) を得る。 PrintHeader cgi 出力のヘッダ部を得る ReadParse フォームに入力された変数の値を、ステム 'cgi_lib.input.' に格納する SetVarVal CgiParse を実行する UrlDecode URL エンコードされた文字列を復号する。 ※ この文書、および CGi_LiB.cmd でも、アルファベット順に記述しています。 【機能 (サブルーチン) の詳細説明】 ・CgiDie (引数 1, 引数2) CgiError と同じだが、ここでプログラムは終了する。 (cgi-lib.pl のマネ) 引数 1 : 文書のタイトル および 第1レベルの見出し となる文字列 引数 2 : 主内容となる文字列 (説明など) ・CgiError (引数 1, 引数2) cgi の異常終了時メッセージを標準出力に出力する。 引数 1 : 文書のタイトル および 第1レベルの見出し となる文字列 引数 2 : 主内容となる文字列 (説明など) ・CgiParse (引数なし) フォームに入力された変数の値を、CERN httpd サーバと一緒に配布される cgiparse と同じ規則で環境変数に格納する。 ※ フォームのメソッドは、自動的に判別して処理する。 戻り値 : 変数名のリスト 例) ブラウザでのフォームの入力が以下の通りだとすると、 変数の名前 変数の値 ---------- -------- name 権兵衛 hobby 読書 hobby スポーツ 環境変数の内容は、以下のようになる FORM_name → '権兵衛' FORM_hobby → '読書,スポーツ' 戻り値は 'name,hobby' となる。 ・ConvertCRLF (引数 1) 改行コードをすべて CR+LF に変換する。 引数 1 : 変換対象の文字列 ・GetVarVal (引数 1) CgiParse の実行後、フォームで入力された変数の値を得る。 引数 1 : 変数名 戻り値 : 変数の値 ・HtmlBot (引数なし) HTML 文書の終了文字列 (</BODY></HTML>) を得る。 ・HtmlTop (引数 1) HTML 文書の開始文字列 (<HEAD><TITLE><BODY><H1>) を得る。 引数 1 : 文書のタイトル および 第1レベルの見出し となる文字列 ・HtmlTop2 (引数 1) 背景色として白を指定し、第1レベルの見出しを中央揃えにした HTML 文書の開始文字列 (<HEAD><TITLE><BODY><H1>) を得る。 引数 1 : 文書のタイトル および 第1レベルの見出し となる文字列 ・MyURL (引数なし) cgi スクリプトの URL を得る。 ・PrintDocType (引数 1) HTML 文書のバージョン宣言文字列 (<!DOCTYPE>) を得る。 引数 1 : HTML のバージョン。 以下の文字列のうちの一つを指定する。 'HTML4.0S' または 'Strict' 'HTML4.0T' または 'Transitional' 'HTML4.0F' または 'Frameset' 'HTML3.2' または '3.2' 'HTML2.0' または '2.0' 省略時は HTML 4.0 Transitional の宣言となる。 ・PrintHeader (引数なし) cgi 出力のヘッダ部を得る ※ DateUtil.CMD を外部ルーチンとして使用 ・ReadParse (引数 1) フォームに入力された変数の値を、ステム 'cgi_lib.input.' に格納する 1) 変数の値を 'cgi_lib.input.変数名' に格納する 2) 変数の数を 'cgi_lib.input.0' に格納する。 3) 変数名を 'cgi_lib.input.番号.name' に格納する。 ("番号" は 1 〜 変数の数 までの間の整数) ※ フォームのメソッドは、自動的に判別して処理する。 引数 1 : 同一名の項目に複数の値が入った場合のセパレータ文字。 省略時値は '00'x 戻り値 : 0 または 1 (0:変数なし 1:変数あり) 例) ブラウザでのフォームの入力が以下の通りだとすると、 変数の名前 変数の値 ---------- -------- name 権兵衛 job きこり age 25 ステム変数の内容は以下のようになる cgi_lib.input.name → '権兵衛' cgi_lib.input.job → 'きこり' cgi_lib.input.age → '25' cgi_lib.input.0 → '3' cgi_lib.input.1.name → 'name' cgi_lib.input.2.name → 'job' cgi_lib.input.3.name → 'age' ・SetVarVal (引数 1なし) CgiParse を実行する (cgi-lib.pl のマネ) ・UrlDecode (引数 1) URL エンコードされた文字列を復号する。 同時に、改行コードをすべて CR+LF に変換する。 引数 1 : 復号対象の文字列