TITLE 'IFDOLT10 CONVERT MODULE' 00010000 TITLE 'IFDOLT10 CONVERT MODULE' 00020000 LCLA &T,&SPN 0002 00030000 .@001 ANOP 0002 00040000 IFDOLT10 CSECT , 0002 00050000 ST @E,12(0,@D) 0002 00060000 STM @0,@C,20(@D) 0002 00070000 BALR @4,0 0002 00080000 @PSTART DS 0H 0002 00090000 USING @PSTART+00000,@4 0002 00100000 * R5=FROMADDR; /* GET FROM ADDRESS INTO REG. 5.*/ 00110000 L @5,0(0,@1) 0024 00120000 * R6=TOADDR; /* GET TO ADDRESS INTO REG. 6. */ 00130000 L @6,4(0,@1) 0025 00140000 * R7=FLGCOUNT; /* GET COUNT IN REG. 7. */ 00150000 MVC @TEMP2+2(2),14(@1) 0026 00160000 L @7,@TEMP2 0026 00170000 * R7=R7&LOW15; 00180000 N @7,LOW15 0027 00190000 * IF R7=0 THEN /* IF COUNT IS ZERO, RETURN TO */ 00200000 LTR @7,@7 0028 00210000 * GO TO CNVERT06; /* CALLER. OTHERWISE CONVERT. */ 00220000 BC 08,CNVERT06 0029 00230000 * AXFLGA='00'X; /* CLEAR FLAG. */ 00240000 MVI AXFLGA,X'00' 0030 00250000 * ENDADDR=R5+R7; /* FIND END OF CONVERSION DATA. */ 00260000 LR @2,@7 0031 00270000 AR @2,@5 0031 00280000 * R3=ADDR(AXATBL); /* SET POINTER TO CHAR TABLE. */ 00290000 LA @3,AXATBL 0032 00300000 * IF HEXBIT='1'B THEN /* IS CONVERSION HEX TO EBCDIC. */ 00310000 TM 14(@1),B'10000000' 0033 00320000 * GO TO CNVERT05; /* YES, GO TO HEX TO EBCDIC */ 00330000 BC 01,CNVERT05 0034 00340000 * /* ROUTINE. */ 00350000 * CNVERT01: /* EBCDIC TO HEX CONVERSION */ 00360000 * DO I=16 TO 1 BY -1; /* SEE IF INPUT CHAR HAS A VALID*/ 00370000 CNVERT01 LA @9,16 0035 00380000 * IF INBUF=AXATBL(I) THEN /* HEX NUMBER EQUIVALENT. */ 00390000 @DO9FF LR @8,@9 0036 00400000 LA @E,AXATBL-1(@8) 0036 00410000 CLC 0(1,@5),0(@E) 0036 00420000 * GO TO CNVERT02; /* YES, CONVERT IT. */ 00430000 BC 08,CNVERT02 0037 00440000 * END; 00450000 * RC=INBUF; /* PUT BAD CHARACTER IN REG. 15 */ 00460000 BCT @9,@DO9FF 0038 00470000 SR @F,@F 0039 00480000 IC @F,0(0,@5) 0039 00490000 * GO TO CNVERT07; /* AND RETURN TO CALLER. */ 00500000 BC 15,CNVERT07 0040 00510000 * CNVERT02: 00520000 * R11=I-1; /* SAVE EQUIVALENT HEX CHAR. */ 00530000 CNVERT02 LH @B,@D1 0041 00540000 AR @B,@9 0041 00550000 * IF AXFLGA^='00'X THEN /* IF 2ND BYTE, GO TO ROUTINE */ 00560000 CLI AXFLGA,X'00' 0042 00570000 * GO TO CNVERT03; /* THAT WILL OUTPUT HEX EQUIV. */ 00580000 BC 07,CNVERT03 0043 00590000 * R12=R11*16; /* PUT 1ST HEX CHAR IN R12 TFF001* 00600000 LR @F,@B 0044 00610000 SLA @F,4 0044 00620000 LR @C,@F 0044 00630000 * AXFLGA='F0'X; /* SET FLAG TO NON-ZERO TO */ 00640000 MVI AXFLGA,X'F0' 0045 00650000 * /* INDICATE ONLY ONE CHARACTER */ 00660000 * /* HAS BEEN CONVERTED. */ 00670000 * GO TO CNVERT04; /* GO TO ROUTINE THAT DETERMINES*/ 00680000 BC 15,CNVERT04 0046 00690000 * /* IF MORE CONVERSION MUST BE */ 00700000 * /* DONE */ 00710000 * CNVERT03: /* OUTPUT ROUTINE FOR EBCDIC TO HEX CONVERSION */ 00720000 * R12=R12|R11; /* COMBINE TWO HEX CHARACTERS. */ 00730000 CNVERT03 OR @C,@B 0047 00740000 * GEN(STC R12,0(R6)); /* PUT CHAR IN OUTPUT AREA. */ 00750000 STC R12,0(R6) 00760000 DS 0H 00770000 * R6=R6+1; /* STEP TO ADDRESS BY 1. */ 00780000 LA @6,1(0,@6) 0049 00790000 * AXFLGA='00'X; /* SET FLAG TO ZERO. */ 00800000 MVI AXFLGA,X'00' 0050 00810000 * CNVERT04: /* IS MORE CONVERSION NECESSARY */ 00820000 * R5=R5+1; /* STEP FROM ADDRESS BY 1. */ 00830000 CNVERT04 LA @5,1(0,@5) 0051 00840000 * IF R5