PRTFを使用して、印刷スプールを作ってみましょう。
H Y/ 1
H*------------------------------------------------------------*
H* PROGRAM-ID : PRT1R *
H* REMARKS : 印刷のプログラム
H* AUTHOR : Y.IDE *
H* DATE-WRITEN : 98/09/23 *
H* VERSION : 01.00 ORIGINAL *
H*------------------------------------------------------------*
FQPRINT O F 132 OF PRINTER
C*
C MOVE *ALL'=' LINE 50
C*印刷出力
C EXCPTP#HDR
C 1 DO 5 X 30
C EXCPTP#DTL
C ENDDO
C*
C SETON LR
C RETRN
OQPRINT E 0305 P#HDR
O 45 'CLABサンプル'
O UDATE Y 70
OQPRINT E 2 P#DTL
O X 10
O 14 '行'
O LINE +001
|
[プログラムの解説]
内部記述でPRTFを定義してあります。EXCPT命令で、まずヘッダーを出力してから、
1行から5行のラインを出力してプログラム終了します。
出力結果は以下のようになります
スプール・ファイルの表示
ファイル . . . : QPRINT ページ/行 1/3
制御 . . . . . . 桁 1 - 75
検索 . . . . . .
*...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+
CLABサンプル 98/09/23
001 行 ==================================================
002 行 ==================================================
003 行 ==================================================
004 行 ==================================================
005 行 ==================================================
|
C言語で書き直してみましょう!
/*---------------------------------------------------------------*/
/* PROGRAM-ID : PRT1C */
/* REMARKS : 印刷PGM */
/* AUTHOR : Y.Ide */
/* DATE-WRITEN : 98/09/23 */
/* VERSION : 01.00 ORIGINAL */
/*---------------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <recio.h>
#include <errno.h>
_RIOFB_T *rfb;
/*----------------------------------------*/
void main(){
/*----------------------------------------*/
char outbuf[99999];
char line[51];
_RFILE *fp;
size_t size = 133;
int i;
memset(line,'=',50);
/* PRINT File Open */
if ((fp = _Ropen("QPRINT","wr riofb=N lrecl=132")) == NULL)
{
printf("OPEN FAILED\n");
exit(1);
}
memset(outbuf,' ',132);
memcpy(&outbuf[29],"CLABサンプル",18);
rfb = _Rwrite( fp, outbuf, size);
for (i=1;i<=5;i++){
memset(outbuf,' ',132);
sprintf(outbuf," %d行%s",i,line);
rfb = _Rwrite( fp, outbuf, size);
}
_Rclose(fp);
}
|
[プログラムの解説]
RPGでは、出力仕様書に行スキップがありましたが、Cでは、行間隔はPGMでコントロールが必要です。
日付/ページなども、RPGでは予約語/編集語などがあり、簡単に日付印刷などが可能ですが、Cでは、
それらもプログラムで行う必要があります。(多くのサービス関数が提供されているので利用可能です)
上記Cプログラムは、細かい位置合わせ,日付の表示、数値編集などについては省略しています。
もし、気が向いた方は、ご自分で追加してみてください。
|
|