あるファイルがソース・ファイルであるかどうかを判別するのは
実は簡単ではない。
DSPFD を使えば簡単に判別することができるが
大量のファイルを処理する場合はDSPFDでファイルに
出力していたのでは処理も大変だし時間がかかる。
それでは APIを使ってパフォーマンス良くソース・ファイルを判別するには
どのようにすれば良いのだろうか?
実はAPIを使って判断する方法をAI: Microsoft のCopilotに相談してみた。
結論から言うと Copilot でも何回も間違っていた。
これはAPIの公開資料にはサンプル・ソースはほとんどないことに
原因していると思われる。
APIの使用は経験豊かな開発者を対象としているため
サンプル・ソースはほとんど公開されていない。
国内でもソフトウェア製品を製作販売している会社でも
APIの使用は苦手なようでほとんど使用する技術力が
ないようである。
それはともかく結論としてのサンプル・ソースを
以下に示す。
[CLP: TESTSRC ]
ソースはこちらから
0001.00 PGM
0002.00 DCL VAR(&FORMATBUF) TYPE(*CHAR) LEN(32727)
0003.00 DCL VAR(&FORMATLEN) TYPE(*CHAR) LEN(4) +
0004.00 VALUE(X'7FFF') /* =32767 */
0005.00 DCL VAR(&FLAG) TYPE(*CHAR) LEN(1)
0006.00 DCL VAR(&HEX08) TYPE(*CHAR) LEN(1) VALUE(X'08')
0007.00 DCL VAR(&SRCFILLIB) TYPE(*CHAR) LEN(20)
0008.00 DCL VAR(&APIERR) TYPE(*CHAR) LEN(116) +
0009.00 VALUE(X'0000007400000000') /* 2 進数 */
0010.00
0011.00 CHGVAR VAR(&SRCFILLIB) VALUE('QDSPSRC QTRSRC ')
0012.00 /*( API: QDBRTVFD の実行 )*/
0013.00 CALL PGM(QDBRTVFD) PARM(&FORMATBUF &FORMATLEN +
0014.00 &SRCFILLIB 'FILD0100' &SRCFILLIB +
0015.00 '*FIRST ' '0' '*FILETYPE ' '*EXT ' +
0016.00 &APIERR)
0017.00 CHGVAR VAR(&FLAG) VALUE(%SST(&FORMATBUF 9 1))
0018.00 IF COND(&FLAG = &HEX08) THEN(DO)
0019.00 SNDPGMMSG MSG('*SRCF です ') MSGTYPE(*DIAG)
0020.00 ENDDO
0021.00 ELSE CMD(DO)
0022.00 SNDPGMMSG MSG('*SRCF ではありません。 ') MSGTYPE(*DIAG)
0023.00 ENDDO
0024.00 ENDPGM
[解説]
API: QDBRTVFD はファイルAPIであってその9バイト目にソース・ファイルを
判別できるビットが隠されている。
このCLプログラムはそのビットを判別している。
_
参考URL : QDBRTVFD
※ API: QDBRTVFD とはファイル構造を調べるための莫大な構造から成るAPIである。
DSPF, PRTF, PF, LFなどの構造を調べることができるAPIであり
ファイルのレコード構造やフィールド構造、選択などのすべての構造を
参照することができる。解説文だけでも数10ページのマニュアルで説明されている。
AutoWebではリアル・タイムで QDBRTVFDを使ってDSPFのオブジェクト構造を
調べるのに使われている。
