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

Reply via email to