*DECK NXTNUMA 
          IDENT  T8.NNA 
          TITLE  ROUTINES NEXTNUMA,GETZSN 
 NXTNUMA  TITLE  SUBROUTINE NXTNUMA, NXTNUMC - GET NEXT NUMERIC CHAR.   026700
**
* NXTNUMA - GET NEXT NUMERIC -A- CHARACTER   FOR USE WITH -GETNUM-      026720
* NXTNUMC - GET NEXT NUMERIC -C- CHARACTER   FROM -INTERNAL- CODES      026730
*                                                                       026740
*         INPUT  -  B1 = 1                                              026750
*                   X1 = SOURCE POINTER                                 026760
*                   B5 = RETURN ADDRESS                                 026770
*                                                                       026780
*         OUTPUT -  X1 = UPDATED SOURCE POINTER                         026790
*                   X6 = RETURN CHARACTER                               026800
*                                                                       026810
*         PRESERVED  --, --, --, --, --, --, --, --                     026820
*                    A0, A1, --, --, --, --, --, --                     026830
*                        B1, --, --, --, B5, B6, B7                     026840
*                                                                       026850
*         NOTES..   THIS ROUTINE IS DESIGNED TO BE USED IN              026860
*                CONJUNCTION WITH THE -GETNUM- ROUTINE.  THE CHARACTER  026870
*                RETURNED IN X6 IS REDUCED TO THE RANGE (0D TO 9D) IF   026880
*                IT IS NUMERIC.  IN THE CASE OF A NON-NUMERIC CHARACTER 026890
*                (OR END OF STRING), A CODE WILL BE RETURNED IN         026900
*                 ACCPRDANCE WITH THE FOLLOWING TABLE..                 026910
*                                                                       026920
*                      +           -4                                   026930
*                      -           -3                                   026940
*                      .           -2                                   026950
*                      E           -1                                   026960
*                     OTHER        -0                                   026970
*                                                                       026980
*                BLANKS ARE IGNORED (SKIPPED)                           026990
*                                                                       027000
*         TEMPORARY CELLS USED..                                        027010
*                                                                       027020
*                T.CHR       COPY OF RETURN VALUE                       027030
*                                                                       027040
          SPACE  1
*CALL COM2
          SPACE  4                                                      027060
 NXTNUMA  SX5    TR.ATOX     ENTRY -A-                                  027070
          SX2    SIZE.A                                                 027080
          EQ     NXTN.J                                                 027090
*                                                                       027100
 NXTNUMC  SX5    TR.CTOX     ENTRY -C-                                  027110
          SX2    SIZE.C                                                 027120
 NXTN.J   SX6    B6                                                     027130
          SA6    T.CHR       SAVE B6                                    027140
          SB6    NXTN.2                                                 027150
          EQ     NXBITS      GET THE CHARACTER                          027160
 NXTN.2   SA4    A6          RESTORE B6                                 027170
          SB6    X4 
          ZR     X0,NXTN.X   NO MORE CHARACTERS                         027180
          SA3    X5          GET TRANSLATE INFO                         027190
          SB3    X6          CHARACTER IN X6                            027200
          SA5    X3+B3       TRANSLATED CHAR-WORD                       027220
          AX3    18                                                     027230
          SB2    X3          SHIFT COUNT                                027240
          AX3    18          MASK                                       027250
          AX5    X5,B2                                                  027260
          BX6    X5*X3       CHARACTER NOW IN X6                        027270
          SB2    X6-SPACE.X  CHECK FOR BLANK                            027280
          SX5    A3          RESTORE X5                                 027290
          NZ     B2,NEXTN.X  NOT BLANK, JOIN -NEXTNUM- FOR TESTING      027300
          EQ     NXTN.J      GET ANOTHER IF BLANK                       027310
*                                                                       027320
 NXTN.X   BX6    -X6-X6      OUT OF STRING (-0)                         027330
          JP     B5          RETURN                                     027340
 GETZSN   TITLE  GETZSN - PICK UP Z, S, OR N TYPE NUMERIC FIELD         028000
*                                                                       028010
**    GETZSN - PICK UP Z, S OR N TYPE NUMERIC FIELD 
*                                                                       028030
*         INPUT  -  B1 = 1                                              028040
*                   X1 = SOURCE POINTER                                 028050
*                   B6 = RETURN ADDRESS                                 028060
*                   B7 = LOCATION OF NXDIGIT ROUTINE                    028070
*                                                                       028080
*         OUTPUT -  NONE IN REGISTERS                                   028090
*                                                                       028100
*         PRESERVED  --, --, --, --, --, X5, --, --                     028110
*                    A0, --, --, --, --, --, --, --                     028120
*                        B1, --, --, --, --, B6, B7                     028130
*                                                                       028140
*     TEMPORARY CELLS USED                                              028150
*                                                                       028160
*                   T.MSG  -  TEMPORARY, HOLDS SIGN OF RESULT           028170
*                   T.NUM  -  TRIPLE PRECISION RESULT GOES HERE,        028180
*                              AND IN T.NUM+1, T.NUM+2                  028190
*                                                                       028200
*         NOTES..   THE NXDIGIT ROUTINE IS USED TO PICK UP A DIGIT AND  028210
*                 PLACE IT IN X6, REDUCED TO THE RANGE (0D TO 9D).  IF  028220
*                 THE CHARACTER IS NOT NUMERIC, A CODE SHOULD BE PLACED 028230
*                 IN X6 ACCORDING TO THE FOLLOWING TABLE..              028240
*                                                                       028250
*                    BLANK         -0                                   028260
*                      -          -1                                    028270
*                      +          -2                                    028280
*                    OTHER        -3                                    028290
*                                                                       028300
*                 THE NXDIGIT ROUTINE, WHEN USED FOR -S- CONVERSION,    028310
*                 MAY ENCOUNTER A SIGN-OVERPUNCH NUMERIC CODE. IF IT    028320
*                 DOES, THIS ROUTINE EXPECTS THE DIGIT CODE FIRST,      028330
*                 FOLLOWED BY THE SIGN ON A SUBSEQUENT CALL.            028340
*                                                                       028350
*                 WHEN NO MORE CHARACTERS CAN BE SENT, NXDIGIT SHOULD   028360
*                 SET X1=0.                                             028370
*                                                                       028380
*                 B5 IS USED FOR LINKAGE TO NXDIGIT. B5, B6, B7, A0     028390
*                AND B1 SHOULD BE PRESERVED.  X1 SHOULD BE UPDATED.     028400
*                                                                       028410
          SPACE  4                                                      028420
 GETZSN.Z SB5    GETZ.1      ENTRY Z TYPE 
 GETZ.ZS  SX6    B0                                                     028450
 GETZ.ZSN SX7    0                                                      028460
          SA6    T.MSG       PRESET SIGN                                028470
          SA7    T.NUM       PRE-ZERO RESULT                            028480
          SX6    B0                                                     028490
          SA6    A7+B1                                                  028500
          SA7    A6+B1                                                  028510
          JP     B7          PICK UP FIRST CHARACTER                    028520
*                                                                       028530
 GETZ.1   ZR     X1,GETZ.X   SKIP BLANKS UNTIL SIGN OR DIGIT (Z-TYPE)   028540
          PL     X6,GETZ.5   JP DIGIT                                   028550
          NZ     X6,GETZ.2   JP NOT BLANK                               028560
          JP     B7          GET NEXT CHAR.                             028570
*                                                                       028580
 GETZ.2   SX6    X6+2                                                   028590
          NG     X6,GETZ.E1  ERROR, NOT A SIGN, BLANK, OR DIGIT         028600
          SA6    T.MSG       SAVE SIGN                                  028610
 GETZ.3   SB5    GETZ.4      LOOK FOR DIGITS
          JP     B7                                                     028630
*                                                                       028640
*                                                                       028650
 GETZSN.S SB5    GETZ.4 
          BX6    -X6-X6                                                 028670
          EQ     GETZ.ZSN                                               028680
*                                                                       028690
 GETZSN.N SB5    GETZ.4      SET UP DIGIT GATHERING RETURN
          EQ     GETZ.ZS     ENTRY - N TYPE                             028710
*                                                                       028720
*                                                                       028730
 GETZ.4   ZR     X1,GETZ.X   DONE                                       028740
          NG     X6,GETZ.8   JP NOT DIGIT                               028750
 GETZ.5   SA2    T.NUM+2     DIGIT, ADD IT IN                           028760
          SA3    A2-B1                                                  028770
          SA4    A3-B1                                                  028780
          IX0    X2+X2       *2                                         028790
          LX2    3           *8                                         028800
          IX6    X0+X6                                                  028810
          IX6    X6+X2       *10 + NEW DIGIT                            028820
          UX6    X6,B2                                                  028830
          SA6    A2                                                     028840
          SX7    B2+1777B    OVERFLOW 
          ZR     X3,GETZ.6                                              028860
          IX0    X3+X3       *2                                         028870
          LX3    3           *8                                         028880
          IX7    X0+X7                                                  028890
          IX7    X7+X3       *10 + PREVIOUS OVERFLOW                    028900
 GETZ.6   UX7    X7,B2                                                  028910
          SA7    A3                                                     028920
          SX6    B2+1777B     OVERFLOW
          ZR     X4,GETZ.7                                              028940
          IX0    X4+X4       *2                                         028950
          LX4    3           *8                                         028960
          IX6    X0+X6                                                  028970
          IX6    X6+X4       *10 + PREVIOUS OVERFLOW                    028980
 GETZ.7   UX6    X6,B2                                                  028990
          SA6    A4                                                     029000
          SB2    B2+1777B    OVERFLOW 
          NZ     B2,GETZ.E2  OVERFLOW OF TRIPLE PRECISION               029020
          JP     B7          GET NEXT DIGIT                             029030
*                                                                       029040
*                                                                       029050
 GETZ.8   SA2    T.MSG       NON-DIGIT, MUST BE +-,  BUT ONLY IF S-TYPE 029060
          ZR     X6,GETZ.E3  TRAILING BLANK ILLEGAL                     029070
          SX6    X6+2                                                   029080
          PL     X2,GETZ.E4  TRAILING SIGN ILLEGAL                      029090
          NG     X6,GETZ.E5  ILLEGAL CHARACTER                          029100
          SA6    A2 
          SB5    GETZ.9 
          JP     B7                                                     029120
 GETZ.9   NZ     X1,GETZ.E6  SIGN MUST BE FINAL CHARACTER               029130
*                                                                       029140
 GETZ.X   SA2    T.MSG       DONE, FIX UP T.NUM AND EXIT                029150
          NZ     X2,GETZ.XA 
          SX2    B0          FORCE -0 TO +0 
 GETZ.XA  BSS    0
          SA3    T.NUM       PACK INTO FLOATING FORM                    029160
          SA4    A3+B1                                                  029170
          SA5    A4+B1                                                  029180
          SB2    48                                                     029190
          LX2    59                                                     029200
          PX5    X5,B0                                                  029210
          AX2    59          +0 IF +, -0 IF -                           029220
          BX5    X5-X2                                                  029230
          PX4    X4,B2                                                  029240
          SB2    B2+B2                                                  029250
          BX4    X4-X2                                                  029260
          PX3    X3,B2                                                  029270
          BX3    X3-X2                                                  029280
          NX5    X5          NORMALIZE AND ADD TO ADJUST EXPONENTS      029290
          NX4    X4                                                     029300
          FX0    X5+X4                                                  029310
          NX3    X3                                                     029320
          DX2    X5+X4                                                  029330
          FX6    X0+X3                                                  029340
          DX0    X0+X3                                                  029350
          SA6    A3          T.NUM                                      029360
          FX7    X0+X2                                                  029370
          DX6    X0+X2                                                  029380
          SA7    A4                                                     029390
          SA6    A5                                                     029400
*                                                                       029410
          JP     B6          EXIT                                       029420
          SPACE  2
**    ERROR ACTIONS 
*                                                                       029450
 GETZ.E1  SA2    GETZ.EM1    ILLEGAL CHARACTER IN FIELD                 029460
          EQ     ERR.CON                                                029470
 GETZ.E2  SA2    GETZ.EM2    TRIPLE PRECISION OVERFLOW                  029480
          EQ     ERR.CON                                                029490
 GETZ.E3  EQU    GETZ.E1                                                029500
 GETZ.E4  EQU    GETZ.E1                                                029510
 GETZ.E5  EQU    GETZ.E1                                                029520
 GETZ.E6  EQU    GETZ.E1                                                029530
****
*                                                                       029550
 GETZ.EM1 VFD    12/0,18/E.CON,12/0,18/*+1
          DATA   C/BAD SYNTAX IN Z,S,N OR P FIELD/                      029570
 GETZ.EM2 VFD    12/0,18/E.CON,12/0,18/*+1
          DATA   C/TOO MANY DIGITS IN Z,S,N OR P FIELD -- OVERFLOW/     029590
****
          END 
