CL

10. EBCDIC/ASCII コードの変換

API QDCXLATE によって、EBCDIC/ASCII の相互変換ができる。
次の例は QDCXLATE によって QSYS の QEBCDIC,QASCII というテーブルを使用して変換しているが、日本語 PC に適用するには、一部これらのテーブルには問題がある。
テーブルはコード表から CRTTBL コマンドで自作するほうが良い。
なお PANEL-WORKER または PANEL-WORKER Chicago が導入されているのであればライブラリーPANELWKR に EBCDIC , ASCII という名前のテーブルが用意されているので、これは直ちに使用可能である。

0001.00              PGM          
0002.00 /*---------------------------------------------------------*/  
0003.00 /*   QDCXLATE による  EBCDIC/ASCII 変換                    */   
0004.00 /*---------------------------------------------------------*/   
0005.00              DCL        VAR(&OUTBUF) TYPE(*CHAR) LEN(5000)  
0006.00              DCL        VAR(&BLANKS) TYPE(*CHAR) LEN(5000)             
0007.00              DCL        VAR(&BUFLEN) TYPE(*CHAR) LEN(3) /* 5 桁 PACK */
0008.00              DCL        VAR(&MAXOTL) TYPE(*CHAR) LEN(3) +  
0009.00                           VALUE(X'05000F') /* 5 桁 PACK */    
0010.00              DCL        VAR(&OUTLEN) TYPE(*CHAR) LEN(3) +   
0011.00                           VALUE(X'00000F') /* 5 桁 PACK */    
0012.00              DCL        VAR(&RCVDTA) TYPE(*CHAR) LEN(5000)   
0013.00              DCL        VAR(&SNDDTA) TYPE(*CHAR) LEN(5000)   
0014.00 /************/                           
0015.00     EBCDIC:        /*  ASCII -> EBCDIC  への変換 */  
0016.00 /************/                                              
0017.00              CHGVAR     VAR(&OUTBUF) VALUE(&BLANKS)            
0018.00              CALL       PGM(QDCXLATE) PARM(&BUFLEN &RCVDTA 'QEBCDIC +
0019.00                           ' 'QSYS    ' &OUTBUF &MAXOTL &OUTLEN +  
0020.00                           '*JPN' 'Y' '*AE       ')                
0021.00              MONMSG     MSGID(CPF2600) EXEC(GOTO CMDLBL(ENDCNV)) 
0022.00 /************/                                                        
0023.00     ASCII:         /*  EBCDIC -> ASCII  への変換 */                   
0024.00 /************/                                                        
0025.00              CALL       PGM(QDCXLATE) PARM(&BUFLEN &SNDDTA 'QASCII  +
0026.00                           ' 'QSYS    ' &OUTBUF &MAXOTL &OUTLEN + 
0027.00                           '*JPN ' 'N' '*EA ')                         
0028.00              CHGVAR     VAR(&OUTBUF) VALUE(&OUTBUF *TCAT &NULL)