パラメータPITYPEに'2'を渡すと、PBCHR1にセットされた1バイトを、2バイトのPBCHR2に16進数形式文字として返します。
パラメータPITYPEに'1'を渡すと、PBCHR2にセットされた2バイトの16進数形式文字を、1バイトのPBCHR1に返します。
1998/5/11短くしてみました。前のと、結果は同じです。CHAR→HEXと、HEX→CHARの両方を含んでいますので、必要な方だけ使う手もあります。
1998/11/23さらに短くしました。配列を止めて、固定情報にSCANをしました。従って、0を1番目と取りだすので、-1をします。また、割り算と余りを求める方が、ステップ数が短いので、そちらを採用しました。割り算を好まない方は、かけ算とその値から、余りを計算で求めて下さい。
H 1 Y/ 1
I******************************************************
I* D E F I N E C O N S T A N T *
I******************************************************
I '0123456789ABCDEF' C #HEX
I******************************************************
I* D E F I N E D A T A - S T R U C T U R E *
I******************************************************
I DS
I I 0 B 1 20DSBIN
I I ' ' 2 2 DSNBL
IBYTE IDS
I 1 1 UPPER
I 2 2 LOWER
C******************************************************
C* DEFINITION MODULE ( PLIST FIELD KLIST ) *:
C******************************************************
C *ENTRY PLIST :
C PARM PITYPE 1 :1=CC>C, 2=C>CC
C PARM PBCHR1 1 :C
C BYTE PARM BYTE PBCHR2 2 :CC
C******************************************************
C* M A I N - R O U T I N E :
C******************************************************
B001 C PITYPE CASEQ'1' @CC2C :CC TO C
+001 C PITYPE CASEQ'2' @C2CC :C TO CC
E001 C END :
C* :
C MOVE *ON *INLR :
C******************************************************
C* S U B - R O U T I N E :
C******************************************************
C*----------------------------------------------------*
C @CC2C BEGSR :CC->C
C*----------------------------------------------------*
C MOVE *LOVAL PBCHR1 :
C LOWER SCAN #HEX:1 W1 30 70:1-16
C 70 UPPER SCAN #HEX:1 W2 30 70:1-16
C* :
B001 C *IN70 IFEQ *ON :
001 C SUB 1 W1 :0-15
001 C SUB 1 W2 :0-15
001 C MULT 16 W2 :
001 C W1 ADD W2 DSBIN :
001 C MOVE DSNBL PBCHR1 :
E001 C END :
C* :
C ENDSR :
C*----------------------------------------------------*
C @C2CC BEGSR :C->CC
C*----------------------------------------------------*
C MOVE PBCHR1 DSNBL :
C DSBIN DIV 16 W1 :
C MVR W2
C* :
C ADD 1 W1 :
C ADD 1 W2 :
C* :
C 1 SUBST#HEX:W1 UPPER :
C 1 SUBST#HEX:W2 LOWER :
C* :
C ENDSR : |
|