CGI の開発が面倒であるのは標準入力の解析である。標準入力を各フィールド値に分割して(PARSE)、 コード化されている文字列を元のコードに戻す(デコード)作業が面倒なことになる。その後にデータベースなどをアクセスしてから結果としてHTMLを標準出力する。
HTMLを出力するだけのプログラムでも CGIとしては成立する。
実用レベルではないが、HTMLを標準出力するだけの最もカンタンな CGI の例を紹介しよう。
#include <stdio.h> #include <stdlib.h> int main(void){ printf("Content-type: text/html\n\n"); printf("Hello World\n"); fflush(stdout); }
***************** データの始め ************************************** D HTML S 80 DIM(4) PERRCD(1) CTDATA D RECBUF S 512A D OUTLEN S 9B 0 INZ(512) D CRLF C X'15' /COPY QSYSINC/QRPGLESRC,QUSEC C 1 DO 4 N 4 0 C MOVEL HTML(N) RECBUF C CAT CRLF:0 RECBUF C ' ' CHECKR RECBUF OUTLEN C*----------------------------------------------------+ C CALLB 'QtmhWrStout' C PARM RECBUF C PARM OUTLEN C PARM QUSEC C*----------------------------------------------------+ C END ** CTDATA HTML CONTENT TYPE: TEXT/HTML <HTML><HEAD><TITLE>TEST</TITLE></HEAD><BODY> HELLO WORLD </BODY></HTML>
この例でわかるように RPG では ILE-RPG を使って QtmhWrStout API で標準出力しなければならない。
コンパイルは
CRTRPGMOD MODULE(MYLIB/MYRPG) SRCFILE(MYSRCLIB/QRPGLESRC) CRTPGM PGM(MYLIB/MYRPG) BNDSRVPGM(QTCP/QTMHCGI)
として 2段階の作業が要る。
QTCP/QTMHCGI は QtmhWrStout API を提供する IBM のサービス・プログラムであり CRTPGM でこれをバインドする必要がある。