<<Mind Ver.7 ドキュメント>>              −−−−−−−−−−−−             CGIライブラリ(cgilib)              −−−−−−−−−−−−           ※ Copyright (C) 1995 Rigy Corporation ※           ※ Copyright (C) 2000 Scripts Lab. Inc. ※ ※ 改訂記録 ※ ※ 1997.11.20 新規作成(片桐) ※ 1998.01.10 Windows版対応 ※ 2000.11.06 Ver.7.2対応 ※ 2004.05.09 Ver.7.5対応 ※ 2017.03.08 Ver.8 暫定マニュアル利用のため一部訂正 ※ 改訂終り ※     本マニュアルは旧 Mind Version 7 向けのプレーンテキストの     マニュアルを一部訂正したもので暫定マニュアルとしてお使い     ください。     旧版特有の記述が一部残っていますが、正式マニュアル提供ま     での一時的なこととしてご容赦願います。 __________ 1. オペレーション  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  CGIのオペレーションマニュアルとしてHTML版の第7章をお読みください。 __________ 2. プログラミング  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 2−0 CGIが動く時の環境  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  これはMindとは直接は関係ないことですが少し述べておきます。  CGIが起動された時、環境変数の設定などは必要最低限になっています。すなわち、 Mindを開発していた時に存在していた環境変数 MIND あるいは MLIBPATH はCGI起動時 には存在しません。さらには PATH 環境変数が mind7\bin\ を指していることもあり ません。  しかし、これでもMindで作成したCGIを動かすのに支障はありません。Mindコンパイ ラを使う時には若干の環境を必要としますが、アプリケーション(CGI)を走らせるに は、mind.cgi(Mindランタイム)と、そのアプリケーションのMコードファイル(*.mco) があれば十分です。この二つのファイルを、htmlファイルが置かれているのと同じデ ィレクトリか、あるいは /cgi-bin/ に(WWWサーバの設定によりますが)置いておけ ば起動できます。 2−1 CGIと標準入出力  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  CGIプログラムが起動された時、Webサーバから渡されるデータは(環境変数は別と して)標準入力から読み出し、Webサーバに返すデータは(廻り廻ってWebブラウザに 届くHTMLデータです)標準出力に書き込めばよいようになっています。 ・−−−−−−Webサーバ環境−−−−−−−−−・              |                       |   ・−Webブラウザ-・  | ・−HTTPD−・   ・−−CGI−−・ |   |Netscape   |  | |IIS, Apache  |   |  (Mind)   | |   | Navigatorや | −→ | など | → |標準入力   | |   |Internet   | ←− |       | ← |標準出力   | |   | Explorerなど|  | |       |   |       | |   ・−−−−−−−・  | ・−−−−−−−・   ・−−−−−−−・ |              |                       | ・−−−−−−−−−−−−−−−−−−−−−−−・  Mindでは、標準入力から(キーボード入力でなく)データを受け取るケースはあま り無かったかも知れませんが、標準出力へのデータ送出については「○○を 表示」 で良いわけで、おなじみのものです。  上の図では入力も出力も同じ分量であるかのように書かれていますが、実際のCGI では、圧倒的に(CGIにとって)出力が多くなります。ひんぱんに出力するデータが 単なる「表示」で済むというのはとても好都合なことです。 2−2 エラー処理  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  CGIは、たとえば fileモジュールにリンクするような一般的なアプリケーションに 比べると利用場面がかなり限定されており、走行環境としても特殊です。  CGIを簡単に記述できるようにという理由から、本ライブラリはこれをリンクしてい るアプリケーションに対していくつかの介入をおこなっています。その大きな部分が エラー処理です。 【エラー出力】  「エラー出力」「一行エラー出力」「エラー表示」といった、エラー出力デバイス に出力をおこなう処理単語を実行した時、普通であれば標準エラー出力ハンドルであ る2番に出力が行われるのですが、CGIライブラリにリンクしたアプリケーションにお いては、標準出力(1番)に出力されます。(メインが走行する直前に「エラー出力 を標準出力に切り換え」が実行されています←cgilib.src参照)  この介入の理由は、エラーの様子をWebブラウザ上で確認できるようにするためで す。たとえば、     「スタックがずれています」 というメッセージをブラウザ上で確認できるようにです。  2番(標準エラー出力)への出力は、Webサーバの種類あるいは設定によってはブラウ ザには送られないで消滅するものや、サーバのログファイルに書き込まれるタイプ などがあるようです。これに対処するため、本ライブラリではあえて標準出力に送る ようにしています。  本来の出力先にしたい場合には、「エラー出力を本来の出力に切り換え」を実行し てください。もちろん、「エラー出力を標準出力に切り換え」と合わせて頻繁に切り 換えることも可能です。   【重大エラー】  重大エラー発生時に何がおこなわれるかについては、既に console.docm にて解説 しました。しかし CGIライブラリをリンクしている状態では少し違う処理が行われま す。以下の通りです。 (1) mimeヘッダ,HTMLヘッダが未送出なら強制的に送出(head/title/body) (2)

を表示 (3) プログラム名 : エラー原因 を表示 (4)

を表示 (5) HTMLフッタを出力(/body,/html) (6) 1を終了パラメータに入れて実行終り  上記のように、重大エラーの原因をHTML形式で出力します。何が起こったのかをWeb ブラウザ上で認識できるようにするためです。 ---------------------------------------------------------------     このような工夫をしてはいるものの、場合によってはWebブラウザに何     も表示されないままプロセス終了してしまう可能性もあります。デバッ     クは一般的なアプリケーションよりも慎重におこなう必要があります。 --------------------------------------------------------------- 2−3 文字コード  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  Windows版のMindのCGIライブラリを使って普通にCGIを記述した場合、ShiftJIS コードが出力されます。Linux版ではEUC-JPコードが出力されます。   (1) ブラウザに文字コードを知らせるため、本ライブラリを使 HTMLデータの出力では、一番最初のMIMEヘッダのところに、 「Content-type: text/html; charset=shift_jis」または 「Content-type: text/html; charset=euc-jp」     のようなcharset指定が入ります。     文字コードに限りませんが、このようなデフォルトでの動き     は、cgilib\cgilib.src の中の次の箇所に記載されています。 ---------------------------------------------------------------     CGILIB初期化0とは 本定義      エラー出力を標準出力に切り替え BASE64テーブル初期化0し html4.0をDOCTYPEデータ設定し sjisをcharset設定し   ←文字コードはここ ヘッダ内平仮名を初期設定し 。 ---------------------------------------------------------------     もし、このcharset指定がまずいようでしたら、上記     箇所を抑止してください。(そうやって抑止しておき、同じ     記述を「メイン」の中で−−「htmlヘッダを出力」の前     ぐらいに−−書いても構いません)   (2) うっかりして出力データの中に複数の日本語文字コードを混     在させないように気をつけてください。当然のことですが、     ブラウザの日本語コード判定が混乱してしまいます。たった     1文字が混ざるだけでそうなります。     特に、全角空白のコード違いには注意します。(エディタで     見たぐらいでは分からないことが多い)   (3) 多数の人が読むページでは、必ず Netscape Navigator と Internet Explorer の両方を使って表示確認をおこなってく     ださい。 2−4 ヘッダ/フッタ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ■htmlヘッダ出力 Mindで書くCGIプログラムで唯一必須の処理単語です。     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−     <タイトル文字列>で htmlヘッダ出力 → ・     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−  のように用います。  「1−4 CGIサンプルの実行」の最初に「もっとも小さなCGIプログラム」を示し ましたが、ソースコードは次のようになっていました。 ----------------------------------------------------------------- メインとは 「TEST」で htmlヘッダ出力し 「こんにちは」を 大きく表示すること。 -----------------------------------------------------------------  上記の「htmlヘッダ出力」が要点です。この処理単語はその名前とは裏はらに 複数の処理の集合になっています。下にまとめます。 ----------------------------------------------------------------- 1 (未処理なら)標準CGI変数の取り込み 1-1 標準CGI変数を取り込み 1-2 フォーム中の名前と値を取り込み 1-3 Cookie変数を取り込み 1-4 QUERY_STRINGを起動引数に移動     2 (未出力なら)MIMEヘッダを出力 →「Content-type: text/html; charset=shift_jis」 =======次からが本来のHTMLヘッダ===== 3 (指定が有れば)DOCTYPEを出力 4 (指定が有れば)METAデータを出力 5 (指定が有れば)Set-Cookieデータを出力 6 HTMLタグを出力 7 HEADタグとTITLEタグを出力 8 BODYタグを出力(抑止可能) ----------------------------------------------------------------- 出力のみに注目した場合、普通は次のようになります。 ----------------------------------------------------------------- Content-type: text/html; charset=shift_jis XXXXX  ↑ここにはタイトルが入ります -----------------------------------------------------------------  「htmlヘッダ出力」と書いただけで、上記のようなデータが一気に出力されま す。ほとんどのHTMLドキュメントはこれで間に合うはずです。 (注:静的なHTMLデータでは「Content-type: text/h〜」および        その次の空行は無かったはずです。この場面に限らず、CGI    出力ではこのような違いが少し存在します) ■htmlフッタ出力  HTMLデータの送出機能として必須なものですが、CGIライブラリを使っている限りは 普通は明記する必要はありません。  明記するとしたら、次のような文法によります。     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−     htmlフッタ出力 → ・     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−  出力イメージでは次のようになります。 ----------------------------------------------------------------- -----------------------------------------------------------------  本処理単語は密かに実行されるため、普通はプログラマが明記する必要はありませ ん。正確に言えば、プログラム起動後にMind処理単語を使ってHTMLヘッダが出力され ており、プログラムの終了時点でフッタが未出力であるなら、これを閉じるために本 処理単語が自動的に実行されます。    (注:「ヘッダを出力したのにフッタ無しのまま終わる」・・ことは       普通はあり得ないので、このような自動化が可能になります)    (注:当然ですが、MIMEヘッダやHTMLヘッダを文字列として「表示」       することで低レベルな出力をおこなっている場合にはこの自動       機能は働きません。明に本処理単語を呼んでください) −−  以下、その他のヘッダ/フッタの出力機能についてまとめておきます。 ■mimeヘッダ出力・text/html   (文法)     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−     mimeヘッダ出力・text/html → ・     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−   (出力) ----------------------------------------------------------------- Content-type: text/html; charset=shift_jis                       ←空行です -----------------------------------------------------------------  普通は、「htmlヘッダを出力」の中から自動的に呼ばれていますが、明に呼び 出しても構いません。  内部処理として「標準CGI変数の取り込み」がおこなわれるので注意してくださ い。抑止したいなら「標準CGI変数の取り込み抑止」というフラグをセットしてか ら呼び出してください。     注:標準CGI変数の取り込みが行われる手順は、       (1)「htmlヘッダを出力」        (2)→「mimeヘッダを出力」          (3)→「標準CGI変数の取り込み抑止」を検査            (4)→「標準CGI変数の取り込み」       です。 ■mimeヘッダ出力・text/plain   (文法)     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−     mimeヘッダ出力・text/plain → ・     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−   (出力) ----------------------------------------------------------------- Content-type: text/plain                  ←空行です -----------------------------------------------------------------  すべてがプレーンテキストの形式のデータを送出するのに使えます。このMIMEヘッ ダで始まる場合に限り、HTMLヘッダ/フッタは不要です。  特別な用途としては、「メイン」の最初でこれを実行しておくことで、以後のすべ ての出力を、タグも含めて眺めることができます。つまり、 ----------------------------------------------------------------- Content-type: text/plain      Content-type: text/html; charset=shift_jis     ・・以下略・・ -----------------------------------------------------------------  のようになるわけですが、この場合、3行目「Content-type: text/html〜」から先 のすべてのHTMLタグは「ありのまま」にWebブラウザの中に表示されるのでタグの様子 を確認するのに便利です。(注:このような利用は、Internet Explorer では無意味 になります。text/plain の場合にはタグ部分はすべて隠されてしまうようです)       (htmlヘッダ出力、mimeヘッダ出力共通の事項) □標準CGI変数の取り込み     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− 標準CGI変数の取り込み → ・     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−  文字通りの処理です。 GATEWAY_INTERFACE=CGI/1.1 REQUEST_METHOD=GET SCRIPT_NAME=/mind7cgisample/mind.cgi     ・・以下略・・  のような標準CGI変数を取り込み、同じ名前のMindの変数(文字列実体型)に格納 します。この処理単語は、「mimeヘッダ出力・text/xxxx」の実行時に (さらに言えば、この上位語である「htmlヘッダ出力」実行時に)自動的におこ なわれますので、ソースコードとして明に記述するとはあまり無いはずです。(注: Cookieの処理などで使うことになります)  「xxxxヘッダ出力・xxxx」からの自動起動を抑止したいなら、     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−     標準CGI変数の取り込み抑止を セットし     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− という1行を前に置いてください。 □その他のヘッダ出力用の変数群     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− BODY出力抑止? (数値の変数)     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−  この変数だけが数値変数です。「BODY出力抑止?を セット」のように記述す ることで1をセットしておくと、そのあとの「htmlヘッダ出力」などでBODYタグ の出力が抑止されます。主にフレーム(メインのフレーム)の描画で使われます。  デフォルトはゼロです。     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− METAデータ1 (文字列実体変数)     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−  もし何かの値が設定されていれば、HTMLヘッダの一環として、TITLEタグの前に出 力されます。デフォルトは空列です。       −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− METAデータ2 (文字列実体変数)     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−  先と同じです。デフォルトは空列です。     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− DOCTYPEデータ  (文字列実体変数) html2.0をDOCTYPEデータ設定 (処理単語) (・ → ・) html3.2をDOCTYPEデータ設定 (処理単語) (・ → ・) html4.0をDOCTYPEデータ設定 (処理単語) (・ → ・)     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−   を出力するのに使われます。本ライブラリではデフォルトで と「html4.0をDOCTYPEデータ設定」が実行されています。具体的に は が設定さ れます。     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− BODYデータ           (文字列実体変数) 白背景/黒文字をBODYデータ設定 (処理単語) (・ → ・)     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−  変数「BODYデータ」は、デフォルトは空列です。  何か値が設定されていると、それまで だったものが、 のよ うに出力されます。  BODYタグでは各種のパラメータを指定できます。一番多いものが、背景色と文字色 を指定するものなので、そのための専用機能として、「白背景/黒文字をBODYデ ータ設定」という処理単語を用意しています。これは、 ---------------------------------------------------------------- 「BGCOLOR="#FFFFFF" TEXT="#000000"」を BODYデータに 入れる ---------------------------------------------------------------- で定義された簡単なものです。BODYタグについての詳細は他のHTMLの文献をご覧くだ さい。 2−5 一般機能  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ■標準CGI変数の取り込み     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−     標準CGI変数の取り込み → ・     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−     注:「標準CGI変数の取り込み」は普通は明に記述することは       無く、「htmlヘッダを出力」の中で自動的に行われます。       すなわち、「htmlヘッダを出力」から戻って来た段階か       ら、名前/値を参照できることになります。  以下の処理が行われます。エラーリターンはありません。なお、POSTとGET どちらでCGIが起動されても同じように処理されます。   (1)標準CGI変数を取り込み、同名の大域変数に格納   (2)フォーム中に定義された変数を取り込み「名前と値」のペアに設定 (注:
を記述した場合の multipart形式の受信もおこないます) (3)標準CGI変数の中の「HTTP_COOKIE」が非空列であれば、ここから複 数の名前と値のペアを抽出してライブラリ内部に記憶する   (4)「QUERY_STRING」の値をURLデコードして「起動パラメータ」および 「起動引数」「起動引数個数」に格納     注:CGIではいわゆる起動引数(Cで言うargv)は設定されません。       一方で、CGIを起動する時コマンドライン経由と同様に引数       は渡すことができるようになっています。その引数は QUERY_       STRING に格納されます。本ライブラリを使う場合に限り、       従来通り「起動引数(n)」や「起動パラメータ」を参照で       きます。(したがって、ユーザがQUERY_STRINGを直接見るこ       とは無いでしょう)     注:CGIから何らかの出力をおこなったあとでは正しくCGI変数を       取り込めないことがあります。できるだけプログラムの早い       時期(まだ何も出力していない段階)で本単語を実行してく       ださい。 注:グローバル変数「標準CGI変数の取り込み抑止」に1をセ       ットしておくことで、「htmlヘッダ出力」から自動的に       本単語が実行されることを抑止することができます。 ■標準CGI変数  簡単にするため以下のように文字通りの名前でグローバルな変数として定義されて います。  ・ユーザは値を参照するのみとし変更しないでください  ・個々の変数の意味はここでは解説しません。CGI参考書などを参照願います  ・これらは後述する「標準CGI変数の取り込み」を実行することで確定します  ・「CONTENT_LENGTH」のみ数値、それ以外は文字列です。 ↓注:Version 8 ではもう少し増えます。 GATEWAY_INTERFACEは 文字列実体。 REQUEST_METHODは  文字列実体。 SCRIPT_NAMEは   文字列実体。 QUERY_STRINGは   文字列実体。 SERVER_SOFTWAREは  文字列実体。 SERVER_NAMEは   文字列実体。 SERVER_PROTOCOLは  文字列実体。 SERVER_PORTは   文字列実体。 HTTP_USER_AGENTは  文字列実体。 HTTP_ACCEPTは   文字列実体。 HTTP_COOKIEは   文字列実体 長さ 2048。 PATH_INFOは   文字列実体。 PATH_TRANSLATEDは  文字列実体。 REMOTE_HOSTは   文字列実体。 REMOTE_ADDRは   文字列実体。 REMOTE_USERは   文字列実体。 REMOTE_IDENTは   文字列実体。 AUTH_TYPEは   文字列実体。 CONTENT_TYPEは   文字列実体。 CONTENT_LENGTHは  変数。       ※←これは数値変数 ■このファイルをインクルード     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− <物理ファイル名>を このファイルをインクルード → ・     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−  指定したファイルの内容をそのまま出力します。単に標準出力に送り出すだけの簡 素なものです。  SSI(Server Side Include)機能の一つに、指定したファイルの内容をその場所に 埋めこむものがあります。    のように書くと、そのファイルの内容がここに展開されるものです。HTMLファイルを 部品化して扱うのに便利なのですが、残念ながらCGIの中ではこれが使えません。本 処理単語はそのような機能を代替するものとご理解ください。  なお、文字コードに対する変換は行いませんから、必ずShiftJISコードでファイル を作成しておいてください。     −−−−− ファイルのインクルードでアドバイス −−−−−−     「このファイルをインクルード」で読み出すファイルがプレーンテ     キストの時、単に送出したのでは(最終的にHTMLと解釈されるので)     改行情報が排除され、見ずらいものになってしまいます。こういう     時には、       PRE開始し       ・・を このファイルを置換しながらインクルードし       PRE終りし     と書きます。
タグで囲まれるので、オリジナルの体裁     を維持できます。     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−   〜略〜 ■このファイルをインクルード2  (Ver.7.5以降)   −−−−−−−−−−−−−−−−−−−−−−−−−   <インクルードファイル名>を    <動作指定キー>と     <コールバック語>の Mコードで       このファイルをインクルード2する → ・   −−−−−−−−−−−−−−−−−−−−−−−−−  「このファイルを置換しながらインクルード」の強化版と言えるものです。  多機能であるため、マニュアルを別にしてあります。"senior\include2.docm"を参 照願います。 2−6 フォーム関係  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ■GETとPOSTについて  本ライブラリおよび本マニュアルではPOSTメソッドを通常の使い方として想定し ていますが、Version 7.5 以降はGETメソッドも使えるようになりました。  GET/POSTの違いの詳細は技術解説書を参照していただくとして、ここでは簡単に まとめておきます。  (1) POST     フォーム変数は標準出力を通して(この様子はプログラマには見え     ない)Webサーバーに送られます。多量の変数群を使うことができるメ     リットがあります。     フォーム変数はURL欄には見えません。これは本来は利点でもあるので     すが、まれに、URL欄をブックマークに入れて後日使ったり、あるいは     URLを他人に通知して同じ画面を見せたいといった用途においては、     変数群がURLに反映されないことがデメリットにもなります。     ---------------------------------------------------     (URL例)     http://localhost/path/mind.cgi?application     ---------------------------------------------------  (2) GET     フォーム変数はボタンを押して次の画面(を担当するCGI)に飛ぶ時の     URL中にすべて(特殊なエンコードをして)埋め込まれます。     URLが長くなって読みずらいという欠点がありますが、すべての情報が     URLに入っているため、ブラウザのブックマークに入れたり、他人に     画面のURLアドレスを知らせることができるメリットもあります。     ---------------------------------------------------     (URL例)     http://localhost/path/application.cgi[?名前=値&名前=値..]     ---------------------------------------------------  GETメソッドの使い方はCGIの起動方法の違いに集約されます。  前記に起動時のURLの違いとして書いてありますが、POSTの場合には、明に起動 するプログラムは mind.cgi(実は"mrunt1xx.exe"をリネーム・コピーしたもの) でしたが、GETによる起動では、普通のコンソールアプリケーションと同様に、 アプリケーション名をそのまま記述します。  [単純なCGI初期起動]  (POST)    CGIの起動サンプル  (GET)    CGIの起動サンプル  [フォームからの起動]  (POST)    -------------------------------------↓注目-------        
       
   --------------------------------------------------    上記からCGI起動時のブラウザのURL:      http://localhost/path/mind.cgi?form-submit  (GET)    --------------↓注目-----------------↓注目-------    
   
       
   --------------------------------------------------    上記からCGI起動時のブラウザのURL:      http://localhost/path/form-submit.cgi?address=xxx&send=Send  [フォーム情報の取得]  起動されたCGIの側の処理ですが、POST/GETの区別なく、下記に示す名前と値のセッ トが格納されるため、フォーム情報の取得に関してはプログラミングの違いはありま せん。  [起動引数とURL上フォーム情報との関係]  GETメソッドではフォーム情報はURLに乗せて伝達されます。このURLは最終的には、 CGIから見れば起動引数として渡されるわけですが、CGIライブラリ内部の介入により 次のような処理が密かに行われています。   1 GETメソッドであれば「起動引数(1)」の中にフォーム情報のすべてが    入っていると解釈し、次に解説する「名前と値」のペアに格納すると同時    に、起動引数は無かった(ゼロ個)ことにします。   2 POSTメソッドの場合には、起動引数への介入は行われません。  (例-A)    http://localhost/path/showvars.cgi?action+200 ←通常の引数渡し     ↓ブラウザ表示    〔起動引数〕 ←情報は起動引数(1)に入る    "action" "200"    〔名前と値のリスト〕    action 200= ←ここへの格納は不定  (例-B)    http://localhost/path/showvars.cgi?action=200 ←正しいGET形式     ↓ブラウザ表示    〔起動引数〕 ←起動引数は無かったことになる    無し    〔名前と値のリスト〕 ←情報は"名前と値"のリストに入る    action=200 ■名前と値  「標準CGI変数の取り込み」をおこなった時、フォーム中に定義された(つまり HTML作者が定義した)変数は前記の標準CGI変数ではなく、本項で規定する構造体に格 納されます。正確には構造体なのですが便宜上、配列として説明します。     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−     名前と値数は   変数。     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−  フォーム変数を取り込んだ数が格納されています。     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−     名前は      64個の 文字列。     値は       64個の 文字列。     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−  名前と値は上記のようにペアになって格納されます。  ユーザはこの配列を個別にアクセスしても構いませんが、より簡単に参照するため の処理単語を別に用意しています。     注:「標準CGI変数の取り込み」は普通は明に記述することは       無く、「htmlヘッダを出力」の中で自動的に行われます。       すなわち、「htmlヘッダを出力」から戻って来た段階か       ら、名前/値を参照できることになります。 ■値を参照     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−     <名前>で 値を参照 → [値文字列]、真偽     −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−  名前を指定し、その値を得ます。もし存在すればその値と「真」が、無ければ 単に一つの「偽」がスタックに返されます。(偽の場合には文字列は存在しない こと・・つまり場合によって戻り数が変化すること・・に注意)   (例)     "address"で 値を参照し 真?     ←普通はこのように書きますが..         ならば 住所に 入れ         つぎに     "name"で 値を参照し 真?         ならば 名前に 入れ         つぎに "name"で 値を参照し 偽?      ←このように使うこともあります ならば 「名無しのごんべえさん」を つぎに 名前に 入れ     --------------------------------------------------------------     注:名前や住所など日本語の文字を含む項目がある場合、文字コード       に注意してください。 ルール通りであればJISコードを返すのだそうですが、Netscape/ Explorer共に、そのフォームを記述している日本語のコードで値   を返して来るようです。(たとえば ShiftJISならShiftJISで,EUC で書いているならEUCで)   ということは、本ライブラリが標準で出力するShiftJISコードで       ごく普通にフォームを出力しておけば,同じShiftJISコードで項目 値を返してくれることになります。       フォームを出力する際、(ブラウザが)正しく自動判定してくれる       ような文字(例えば平仮名の文字)をページの最初のほうに置く       と良いようです。CGIライブラリでは