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 でこれをバインドする必要がある。