Subroutine XXXXHEXI:
100 TITLE 'XXXXHEXI' 00010001 * PUNCH ' CATALR XXXXHEXI' 00020001 XXXXHEXI CSECT 00030001 **--> MODULE : XXXXHEXI EXTENDED HEXADECIMAL INPUT CONVERSION MODULE * 00040001 * XXXXHEXI IS CALLED BY MACRO XHEXI TO SCAN THE INPUT STRING * 00050001 * AND CONVERT IT TO HEXADECIMAL INPUT. * 00060001 * ENTRY CONDITIONS : * 00070001 * R14= ADDRESS OF XHEXIB DSECT CREATED BY XHEXI * 00080001 * R15= ENTRY POINT ADDRESS =V(XXXXHEXI) * 00090001 * R0= ADDRESS OF STRING TO BE SCANNED * 00100001 * EXIT CONDITIONS : * 00110001 * VALUE OF CONVERTED STRING IN STORAGE, POINTED TO BY R14, * 00120001 * STORED IN 16 PAST R14, OR IN XHEXINUM. * 00130001 * R1= ENDING ADDRESS OF STRING, I.E. FIRST NON-HEXADECIMAL DIGIT. * 00140001 * CC= 3 IF ERROR * 00150001 * USES DSECT: XHEXIB * 00160001 * NAMES: XXHI---- * 00170001 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00180001 USING *,15 SET UP BASE REG 00190001 USING XHEXIB,14 DSECT OVERLAP 00200001 STM 14,6,XXHEXISA SAVE USED REGISTERS 00210001 LR 1,0 START SCAN OF STRING 00220001 LA 3,1 ODD VALUE USED IN BXH INSTR 00230001 XXHILP CLI 0(1),C' ' SEARCH FOR FIRST NON-BLANK 00240001 BNE XXHIBGN BRANCH WHEN FOUND TO START TRT 00250001 BXH 1,3,XXHILP KEEP LOOPING UNTIL FIRST NON-BLANK 00260001 XXHIBGN LR 3,1 FIRST BYTE OF STRING IN R3 00270001 LR 4,3 VALUE ALSO IN R4 00280001 LR 6,1 VALUE ALSO IN R6 00290001 LA 1,8(1) R1 NOW HAS MAX ADDRESS IN IT 00300001 * IF TRT DOESN'T STOP BEFORE 8TH TIME, R1 WON'T CHANGE * 00310001 TRT 0(8,6),XXHITAB2 FIND LAST BYTE-8 MAXIMUM 00320001 LR 6,1 SAVE END ADDRESS 00330001 SR 1,3 FIND NUMBER OF CHARACTERS 00340001 BZ XXHIERR IF LENGTH 0, SET CC = 3 00350001 LR 3,1 R3 ALSO HAS LENGTH 00360001 MVI XXHIDOUB,X'F0' ZERO OUT FIRST BYTE 00370001 MVC XXHIDOUB+1(7),XXHIDOUB ZERO OUT THE REST OF THE AREA 00380001 LA 5,8 R5 CONTAINS MAX FIELD SIZE 00390001 SR 5,3 R5 CONTAINS AMT OF SKIP DIGITS 00400001 LA 5,XXHIDOUB(5) R5 POINTS TO ADDRESS OF AREA CONV. 00410001 BCTR 3,0 SUBTRACT 1 FROM LENGTH 00420001 EX 3,XXHIMOVE MOVE THE STRING 00430001 TR XXHIDOUB(8),XXHITAB3 CONVERT C1-C6 TO FA-FF 00440001 PACK XXHIOUT(5),XXHIDOUB(9) DO FUNNY PACK TO MAKE RIGHT LETS 00450001 L 0,XXHIOUT CONVERTED NUMBER IN R0 00460001 ST 0,XHEXINUM STORE CONVERTED NUMBER 00470001 B XXHIARND BRANCH AROUND CONSTANTS 00480001 XXHIMOVE MVC 0(0,5),0(4) MOVE FOR STRING TO BE CONVERTED 00490001 XXHIDOUB DS D,C STORAGE AREA 00500001 XXHIOUT DS F,C STORAGE AREA 00510001 SPACE 1 00520001 ** TAB2 STOPS ON ANYTHING BUT VALID HEX DIGITS. * 00530001 XXHITAB2 DC 256X'01' SET ALL VALUES BAD 00540001 ORG XXHITAB2+C'A' SET A-F GOOD 00550001 DC 6X'00' 00560001 ORG XXHITAB2+C'0' SET 0-9 GOOD 00570001 DC 10X'00' 00580001 ORG 00590001 SPACE 1 00600001 ** TAB3 USED IN TR CONVERTS FA-FF FROM C1-C6 00610001 XXHITAB3 EQU *-C'A' CONVERT FA-FF FROM C1-C6 00620001 DC X'FAFBFCFDFEFF' 00630001 ORG XXHITAB3+C'0' 00640001 DC X'F0F1F2F3F4F5F6F7F8F9' 00650001 ORG 00660001 XXHIERR TM *+1,1 SET CONDITION CODE 00670001 XXHIARND LM 14,15,XXHEXISA RESTORE THE REGISTERS 00680001 LR 1,6 ENDING ADDRESS OF STRING 00690001 LM 2,6,XXHEXISA+16 RESTORE THE REST OF THE REGS 00700001 B XHEXIRET RETURN TO CALLER 00710001 XXHEXISA DS 9F SAVE AREA 00720001 DROP 14,15 DROP BASE REGISTERS 00730001 EJECT 00740001 XHEXIB DSECT 00750001 **--> DSECT : XHEXIB CONTROL BLOCK CREATED BY XHEXI MACRO * * * * * 00760001 * AN XHEXIB IS CREATED FOR EACH XHEXI CALL, AND CONTAINS THE * 00770001 * @ XXXXHEXI MODULE, SAVEWORDS R14,R15,R0, AND A WORD VALUE * 00780001 * THAT HAS BEEN CONVERTED. * 00790001 * THIS DSECT IS USED ONLY IN MODULE XXXXHEXI. * 00800001 * GENERATION: XHEXI * 00810001 * NAMES: XHEXI--- * 00820001 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00830001 DS V(XXXXHEXI) STORAGE FOR ADCON 00840001 DS 3F STORAGE FOR REGISTERS 00850001 XHEXINUM DS F STORAGE FOR CONVERTED NUMBER 00860001 XHEXIRET LM 14,0,4(14) RESTORE REGISTERS 00870001 END , 00880001