*DECK PARSE 
          IDENT  T8.PARS
          TITLE  ROUTINES PARSE, SKIPPAR, GETNUM, NEXTNUM, CONA 
 PARSE    TITLE  SUBROUTINE PARSE - PARSE CONVERSION STRING             020590
*                                                                       020600
**    PARSE - PARSE CONVERSION STRING 
*                                                                       020620
*         INPUT  -  B1 = 1                                              020630
*                   X1 = POINTER TO CONVERSION STRING                   020640
*                   A0 = ADDRESS OF WSA (SEE BELOW)                     020650
*                   B6 = RETURN ADDRESS                                 020660
*                                                                       020670
*         OUTPUT -  X5 = ERROR FLAG (STATUS) WORD                       020680
*                                                                       020690
*         PRESERVED  --, --, --, --, --, --, --, --                     020700
*                    A0, --, --, --, --, --, --, --                     020710
*                        B1, --, --, --, --, B6, --                     020720
*                                                                       020730
*         TEMPORARY CELLS TO BE SET ON ENTRY..                          020740
*                                                                       020750
*                T.INREC     POINTER TO SOURCE RECORD AREA              020760
*                T.OUTREC    POINTER TO DESTINATION RECORD AREA         020770
*                                                                       020780
*         TEMPORARY CELLS USED..                                        020790
*                                                                       020800
*                T.SAVECT    TEMPORARY (CONVERSION ADDRESS)             020810
*                T.PSAVB6    TEMPORARY                                  020820
*                T.SAVEX1    TEMPORARY                                  020830
*                T.STACK     PUSH DOWN FOR NESTED CONVERSIONS           020840
*                              (LENGTH = 2*L.STACK)                     020850
*                T.STKPTR    POINTER TO NEXT AVAILABLE STACK CELL       020860
*         ...                                                           020870
*                T.REL1      FLAG AND SIGN FOR RELATIVE BYTE NUMBER (1) 020880
*                T.I1        BYTE NUMBER (FIRST ITEM)                   020890
*                T.W1        BIT NUMBER  (FIRST ITEM)                   020900
*                T.T1        TYPE IDENTIFIER (FIRST ITEM)               020910
*                T.M1        ITEM SIZE   (FIRST ITEM)                   020920
*         ...                                                           020930
*                T.REL2      FLAG AND SIGN FOR RELATIVE BYTE NUMBER (2) 020940
*                T.I2        BYTE NUMBER (SECOND ITEM)                  020950
*                T.W2        BIT NUMBER  (SECOND ITEM)                  020960
*                T.T2        TYPE IDENTIFIER (SECOND ITEM)              020970
*                T.M2        ITEM SIZE   (SECOND ITEM)                  020980
*         ...                                                           020990
*                T.COND      CONDITION CODE FOR RELATIONAL              021000
*         ...                                                           021010
*                T.NUM       NUMERIC STORAGE AREA (3 WORDS)             021020
*                T.STRING    STRING STORAGE AREA (LENGTH = 8 WORDS)     021030
*         ...                                                           021040
*         (T.I1) T.COUNT     REPEAT COUNT FOR MULTIPLE ITEM CONVERSION  021050
*                                                                       021060
*         NOTES..   IT IS NOT THE CASE THAT ALL OF THE ABOVE ARE IN     021070
*                 SEPARATE LOCATIONS, BUT WE CODE AS THOUGH IT WAS.     021080
*                                                                       021090
*                   ON ENTRY, A0 MUST POINT TO A WORD (USUALLY -WSA-)   021100
*                 CONTAINING POINTERS TO THE TEST AND JUMP TABLES AS    021110
*                 FOLLOWS ..                                            021120
*                             BITS 18-35  = TEST TABLE                  021130
*                             BITS 36-53  = CONV TABLE                  021140
*                                                                       021150
*                   ON EXIT, THE ERROR STATUS WORD MAY BE FOUND IN X5   021160
*                 NON-ZERO STATUS INDICATES AN ERROR.                   021180
*                                                                       021190
          SPACE  1
*CALL COM2
          SPACE  4                                                      021210
 PARSE    SX6    B6          SAVE B6                                    021220
          SX7    T.STACK     INITIALIZE STACK                           021230
          SA5    T.INREC
          SA6    T.PSAVB6                                               021240
          SA7    T.STKPTR                                               021250
          BX6    X5          SAVE INITIAL POINTER 
          SA6    T.RECORD     FOR TESTING 
          SB6    PARS.0                                                 021260
          EQ     NNBL        GET FIRST NON-BLANK CHARACTER              021270
 PARS.0   SX6    X6-1R(      IS IT -(-                                  021280
          BX2    -X2-X2      REPEAT COUNT                               021290
          NZ     X6,PARS.E1  ERROR, INITIAL CHARACTER NOT -(-           021300
*                                                                       021310
 PARS.C   SA3    T.STKPTR    NEXT ENTRY IN STACK                        021320
          BX6    X2          REPEAT COUNT                               021330
          SB3    X3 
          SB6    T.STACK+2*L.STACK
          GE     B3,B6,PARS.E2     STACK OVERFLOW 
          BX7    X1          STRING PTR 
          SA6    X3          SAVE COUNT 
          SA7    A6+B1           SAVE POINTER                           021370
          SX6    A7+B1                                                  021380
          SA6    A3              SAVE NEW STKPTR                        021390
*                                                                       021400
* BEGIN SCAN OF AN ALTERNATIVE CONDITION                                021410
*                                                                       021420
 PARS.C1  MX6    60          ZERO ALL POINTERS                          021430
          BX7    -X7-X7                                                 021440
          SA6    T.REL1                                                 021450
          SA7    T.REL2                                                 021460
          SA6    T.I1                                                   021470
          SA7    T.I2                                                   021480
          SA6    T.W1                                                   021490
          SA7    T.W2                                                   021500
          SA6    T.T1                                                   021510
          SA7    T.T2                                                   021520
          SA6    T.M1                                                   021530
          SA7    T.M2                                                   021540
*                                                                       021550
          SB6    PARS.1                                                 021560
          EQ     NNBL                                                   021570
 PARS.1   SA2    PARS.M1     MASK FOR +, -, ,, ), ;                     021580
          SB2    X6-10                                                  021590
          NG     B2,PARS.2   JP NOT ONE OF THE ABOVE                    021600
          AX2    X2,B2                                                  021610
          LX2    59                                                     021620
          PL     X2,PARS.2   JP IF NOT ONE OF THE ABOVE                 021630
          CX2    X2                                                     021640
          SB3    X2                                                     021650
          JP     B3+PARS.J1-1                                           021660
 PARS.M1  LETMASK R,(+-,;),52B,10                                       021670
 PARS.J1  SB6    PARS.D      ;                                          021680
          EQ     SKIPPAR                                                021690
 +        EQ     PARS.A      ,                                          021700
 +        EQ     PARS.D      )                                          021710
 +        SX6    B1          -                                          021720
          EQ     PARS.3                                                 021730
+         SX6    0           +                                          021740
 PARS.3   SB6    PARS.4                                                 021750
          SA6    T.REL1      SAVE REL SIGN                              021760
          EQ     NNBL                                                   021770
*                                                                       021780
 PARS.2   SB5    X6-COLON    NOT ONE OF THE ABOVE CHARACTERS            021790
          ZR     X6,PARS.A    COLON (64 CH. SET)
          ZR     B5,PARS.A    COLON, RESULT = TRUE                      021800
 PARS.4   SB6    PARS.5                                                 021810
          EQ     GETINT      GET I1                                     021820
 PARS.5   BX7    X5                                                     021830
          SB5    X6-1R/      IS THIS A /BIT POSITION                    021840
          SA7    T.I1 
          ZR     B5,PARS.6A   BR IF / 
          SA7    T.COUNT
          EQ     PARS.8 
 PARS.6A  BSS    0
          SB6    PARS.6      YES, GET IT                                021870
          EQ     NNBL                                                   021880
 PARS.6   SB6    PARS.7                                                 021890
          EQ     GETINT                                                 021900
 PARS.7   BX7    X5                                                     021910
          SA7    T.W1                                                   021920
*                                                                       021930
 PARS.8   SB5    X6-1RA      HAVE I1/W1, LOOK FOR T1                    021940
          SB6    X6-1RZ                                                 021950
          LT     B5,B0,PARS.9  NOT ALPHA                                021960
          LE     B6,B0,PARS.10     ALPHA                                021970
 PARS.9   SA2    T.REL1      NOT ALPHA                                  021980
          SA3    T.W1                                                   021990
          PL     X2,PARS.E3  ERROR, CAN-T BE CONV-TYPE IF REL           022000
          NG     X3,PARS.B1  CONV                                       022010
          EQ     PARS.E3     ERROR, CAN-T BE CONV-TYPE IF /W GIVEN      022020
*                                                                       022030
 PARS.10  SA6    T.T1        ALPHA, SAVE T1                             022040
          SB6    PARS.10B    RETURN ADDR FOR NNBL 
          EQ     NNBL        GET NEXT CHR IN X6 
 PARS.10B SB6    PARS.10A    GET M1 
          EQ     GETINT                                                 022060
 PARS.10A BX7    X5 
          SA7    T.M1        SAVE M1                                    022080
*                                                                       022090
*  AT THIS POINT WE HAVE I1/W1-T1-M1.  LOOK FOR RELATIONAL OPERATOR.    022100
*                                                                       022110
          SB5    X6-1RA                                                 022120
          SB6    X6-1RZ                                                 022130
          LT     B5,B0,PARS.11 NOT ALPHA                                022140
          LE     B6,B0,PARS.12     ALPHA                                022150
 PARS.11  SA2    T.REL1      NOT ALPHA                                  022160
          SA3    T.W1                                                   022170
          PL     X2,PARS.E4  ERROR, CAN-T BE CONV-TYPE IF REL           022180
          NG     X3,PARS.B3  CONV                                       022190
          EQ     PARS.E4     ERROR, CAN-T BE CONV-TYPE IF /W GIVEN      022200
*                                                                       022210
 PARS.12  SA6    T.T2        SAVE T2                                    022220
          SB6    PARS.13                                                022230
          EQ     NNBL                                                   022240
 PARS.13  SB5    X6-1RA                                                 022250
          SB6    X6-1RZ                                                 022260
          LT     B5,B0,PARS.14 NOT ALPHA                                022270
          LE     B6,B0,PARS.15     ALPHA                                022280
 PARS.14  SA2    T.REL1                                                 022290
          SA3    T.W1                                                   022300
          PL     X2,PARS.E5  ERROR, CAN-T BE CONV-TYPE IF REL           022310
          NG     X3,PARS.B2  CONV                                       022320
          EQ     PARS.E5     ERROR, CAN-T BE CONV-TYPE IF /W GIVEN      022330
*                                                                       022340
 PARS.15  SA5    T.T2        LOOK UP RELATIONAL                         022350
          SA4    RELTAB      TABLE OF LEGAL RELATIONS                   022360
          LX5    6                                                      022370
          BX6    -X5-X6                                                 022380
          SB5    X6                                                     022390
 PARS.16  SB4    X4+B5       TEST                                       022400
          ZR     B4,PARS.17  GOT IT                                     022410
          SA4    A4+B1       GET NEXT                                   022420
          NZ     X4,PARS.16                                             022430
          EQ     PARS.E6     ERROR, UNRECOGNIZED                        022440
*                                                                       022450
 PARS.17  AX4    30                                                     022460
          BX6    X4                                                     022470
          SB6    PARS.18                                                022480
          SA6    T.COND      SAVE RELATION CONDITION                    022490
          EQ     NNBL                                                   022500
*                                                                       022510
*  WE ARE DEFINITELY IN A TEST...  PICK UP SECOND ITEM                  022520
*                                                                       022530
 PARS.18  SA2    PARS.M2     MASK FOR $, *, /                           022540
          SB7    X6                                                     022550
          AX2    X2,B7                                                  022560
          LX2    59                                                     022570
          PL     X2,PARS.25  NOT ONE OF THE ABOVE                       022580
          CX2    X2                                                     022590
          SB3    X2                                                     022600
          JP     B3+PARS.J2-1                                           022610
 PARS.M2  LETMASK  R,(*/$)
 PARS.J2  EQ     PARS.19     $                                          022630
 +        EQ     PARS.27     /                                          022640
 PARS.19  SX7    S.STRING    * -- PICK UP A STRING                      022650
          SA7    T.T2                                                   022660
*                                                                       022670
* PICK UP A LITERAL STRING, SAVE SIZE IN T.I2                           022680
*                                                                       022690
          SB6    PARS.21                                                022700
          SX2    T.STRING    FIRST STORE ADDRESS                        022710
          SB4    0           BIT COUNTER                                022720
 PARS.20  SB5    60          RESIDUAL SHIFT                             022730
          SX5    0           WORD TO BUILD UP                           022740
          EQ     NCHAR                                                  022750
 PARS.21  SB3    X6                                                     022760
          NG     X6,PARS.E7  ERROR, END OF CONV-STRING                  022770
          EQ     B3,B7,PARS.23  JP IF THIS IS A DELIMITER               022780
 PARS.22  SB5    B5-6        SHIFT 6 LESS                               022790
          LX5    6                                                      022800
          SB4    B4+6        COUNT 6 MORE                               022810
          BX5    X5+X6       ADD IN CHARACTER                           022820
          NZ     B5,NCHAR    GET NEXT CHAR IF WORD NOT FULL             022830
*                                                                       022840
          SB2    X2 
          SB3    T.STRING+L.STRING
          GE     B2,B3,PARS.E8     STRING TOO LONG
          BX7    X5          OK, STORE IT                               022870
          SA7    X2                                                     022880
          SX2    X2+1                                                   022890
          EQ     NCHAR                                                  022900
*                                                                       022910
 PARS.23  SB6    PARS.24     DELIMITER ENCOUNTERED                      022920
          EQ     NCHAR                                                  022930
 PARS.24  SB3    X6                                                     022940
          SB6    PARS.21                                                022950
          EQ     B3,B7,PARS.22  JP IF A DOUBLE (COUNT AS A CHAR)        022960
*                                                                       022970
          SB3    B4-60*L.STRING DONE                                    022980
          SX7    B4                                                     022990
          GT     B3,B0,PARS.E9
          SA7    T.I2        SAVE COUNT                                 023010
          SB3    B5-60                                                  023020
          ZR     B3,PARS.37                                             023030
          LX7    X5,B5                                                  023040
          SA7    X2          SAVE LAST WORD, PROPERLY SHIFTED           023050
          EQ     PARS.37                                                023060
*                                                                       023070
* CONTINUE WITH MAIN LINE TESTS FOR SECOND ITEM .  NOT STRING.          023080
*                                                                       023090
 PARS.25  SB5    X6-1RA      CHECK FOR ALPHA                            023100
          SB6    X6-1RZ                                                 023110
          LT     B5,B0,PARS.26  NOT ALPHA                               023120
          LE     B6,B0,PARS.31      ALPHA, SAVE T2                      023130
          SB5    X6-1R0      CHECK FOR NUMERIC                          023140
          SB6    X6-1R9                                                 023150
          LT     B5,B0,PARS.35  NOT NUMERIC, TRY FOR +,-, ETC.          023160
          GT    B6,B0,PARS.35A
          SB6    PARS.26                                                023180
          SA7    T.SAVEX1    HOLD X1 IN CASE RESCAN IS NEEDED           023190
          EQ     GETINT                                                 023200
 PARS.26  SB3    X6-1R.                                                 023210
          SB4    X6-COLON                                               023220
          ZR     B3,PARS.34  JP IF WE NEED TO RESCAN A NUMERIC          023230
          ZR     B4,PARS.34                                             023240
          ZR     X6,PARS.34  COLON (64 CH. SET) 
          BX7    X5          SAVE I2                                    023250
          SB3    X6-1R/      CHECK FOR I/W TYPE                         023260
          SA7    T.I2                                                   023270
          NZ     B3,PARS.30  JP IF NO                                   023280
*                                                                       023290
 PARS.27  SB6    PARS.28     PICK UP W2 FIELD                           023300
          EQ     NNBL                                                   023310
 PARS.28  SB6    PARS.29                                                023320
          EQ     GETINT                                                 023330
 PARS.29  BX7    X5                                                     023340
          SA7    T.W2                                                   023350
*                                                                       023360
 PARS.30  SB5    X6-1RA      GET T2                                     023370
          SB6    X6-1RZ                                                 023380
          LT     B5,B0,PARS.E11  NOT ALPHA                              023390
          GT     B6,B0,PARS.E11                                         023400
 PARS.31  SA6    T.T2        SAVE T2                                    023410
          SB6    PARS.32     GET M2                                     023420
          EQ     NNBL                                                   023430
 PARS.32  SB6    PARS.33                                                023440
          EQ     GETINT                                                 023450
 PARS.33  BX7    X5          SAVE M2                                    023460
          SA7    T.M2                                                   023470
          EQ     PARS.37                                                023480
 PARS.M6  LETMASK  R,(+-) 
 PARS.35A SA2    PARS.M6
          SB2    X6 
          AX2    X2,B2
          LX2    59 
          PL     X2,PARS.35  BR IF NOT + OR - 
          CX2    X2 
          SB3    X2 
          JP     B3+PARS.J5-1 
 PARS.J5  SX6    B1          -
          EQ     PARS.35B 
+         SX6    0           +
 PARS.35B SB6    PARS.35C 
          SA6    T.REL2 
          SA7    T.SAVEX1    HOLD X1 IN CASE RESCAN IS NEEDED 
          EQ     NNBL 
 PARS.35C SB6    PARS.26     PICK UP I2 OR NUMBER 
          EQ     GETINT 
*                                                                       023490
* RESCAN NUMERIC FIELD                                                  023500
*                                                                       023510
 PARS.34  SA1    T.SAVEX1    BACK UP POINTER                            023520
          BX7    -X7-X7 
          SA7    T.REL2 
          SB6    PARS.35                                                023530
          EQ     PCHAR       GET PRIOR CHARACTER UNDER SCAN             023540
 PARS.35  SB6    PARS.36                                                023550
          SB7    NEXTNUM     TO GET NEXT DIGIT
          SB5    GETNUM      INITIAL RETURN FROM NEXTNUM                023560
          EQ     NEXTN.X      ALTERNATE ENTRY TO NEXTNUM                023570
 PARS.36  SX7    S.NUM       FLAG NUMERIC                               023580
          SA7    T.T2                                                   023590
          SB6    PARS.37                                                023600
          EQ     PCHAR       RESTORE NEXT CHARACTER                     023610
*                                                                       023620
* AT THIS POINT WE SHOULD HAVE THE WHOLE THING                          023630
*                                                                       023640
 PARS.37  SB3    X6-COLON                                               023650
          ZR     X6,PARS.371  COLON (64 CH. SET)
          NZ     B3,PARS.E12  ERROR, NO TERMINAL COLON                  023660
*                                                                       023670
* OK, NOW BRANCH TO CODE TO DO THE TEST.  THIS CODE IS ALSO USED BY     023680
*  THE CONVERT PARSER.                                                  023690
*                                                                       023700
 PARS.371 SB2    S.TST       OFFSET OF TEST VECTOR POINTER IN WSA WORD
          SB6    PARS.A0     RETURN POINT                               023720
*                                                                       023730
 PARS.X   SA2    A0          GET VECTOR ADDRESS                         023740
          SA5    T.T1                                                   023750
          AX2    X2,B2                                                  023760
          SA2    X2          BRING T1 BIT MASK TO X2. A2 IS JUMP BASE   023770
          SB5    X5                                                     023780
          MX0    60-2                                                   023790
          AX2    X2,B5                                                  023800
          LX2    59                                                     023810
          PL     X2,PARS.E13  ERROR, T1 ILLEGAL TYPE                    023820
          CX2    X2                                                     023830
          BX4    -X0*X2      QUARTER WORD OFFSET                        023840
          AX2    2           WORD OFFSET (FROM (A2))                    023850
          BX5    X4                                                     023860
          SB2    X2+B1                                                  023870
          LX4    4           Q*16                                       023880
          SA3    A2+B2       WORD POINTING TO T2 VECTOR                 023890
          IX4    X4-X5       Q*15                                       023900
          SB4    X4                                                     023910
          LX3    X3,B4       POINTER IN HIGH 15 BITS                    023920
          AX3    60-15                                                  023930
          SB2    X3                                                     023940
          SA5    T.T2                                                   023950
          SA2    A2+B2       BIT VECTOR FOR T2 AND NEW JUMP BASE        023960
          SB5    X5                                                     023970
          AX2    X2,B5                                                  023980
          LX2    59                                                     023990
          PL     X2,PARS.E14  ERROR, T2 ILLEGAL TYPE                    024000
          CX2    X2                                                     024010
          BX4    -X0*X2      QUARTER WORD OFFSET                        024020
          AX2    2           WORD OFFSET (FROM(A3))                     024030
          BX5    X4                                                     024040
          SB2    X2+B1                                                  024050
          LX4    4           Q*16                                       024060
          SA3    A2+B2       WORD POINTING TO TEST ROUTINE              024070
          IX5    X4-X5       Q*15 
          SB4    X5 
          LX3    X3,B4       POINTER IN HIGH 15 BITS                    024100
          BX7    X1                                                     024110
          AX3    60-15                                                  024120
          SB2    X3                                                     024130
          SA7    T.SAVEX1                                               024140
          SB2    A2+B2                                                  024150
*                                                                       024160
          SX6    B2                                                     024170
          SA6    T.SAVECT    SAVE IN CASE OF REPEAT CONVERSION          024180
*                                                                       024190
          JP     B2          GO TO TEST OR CONVERSION                   024200
*                                                                       024210
* COME HERE WHEN DONE WITH TEST                                         024220
*                                                                       024230
 PARS.A0  SA1    T.SAVEX1    RESTORE X1                                 024240
          ZR     X0,PARS.A   TEST=TRUE                                  024250
*                                                                       024260
 PARS.38  SB6    PARS.39     TEST=FALSE, SKIP TO ; OR )                 024270
          EQ     NNBL                                                   024280
*                                                                       024290
 PARS.39  NG     X6,PARS.E15  ERROR, END OF STRING                      024300
          SA2    PARS.M3     MASK FOR SPECIAL CHARACTERS                024310
          SB2    X6-10                                                  024320
          NG     B2,NNBL     JP NOT SPECIAL                             024330
          AX2    X2,B2                                                  024340
          LX2    59                                                     024350
          PL     X2,NNBL     JP IF NOT SPECIAL                          024360
          CX2    X2                                                     024370
          SB3    X2                                                     024380
          JP     B3+PARS.J3-1                                           024390
 PARS.M3  LETMASK R,(*$;),(51B,52B),10                                  024400
 PARS.J3  EQ     PARS.C1     ;                                          024410
 +        EQ     PARS.40     $                                          024420
 +        EQ     PARS.D      )                                          024430
 +        SB6    PARS.38     (                                          024440
          EQ     SKIPPAR                                                024450
 PARS.40  SB6    PARS.41     *  SKIP OVER LITERAL STRING                024460
          SB4    X6          SAVE DELIMITER 
          SB4    -B4
          EQ     NNBL                                                   024470
 PARS.41  SB3    X6+B4
          NG     X6,PARS.E16                                            024500
          NZ     B3,NNBL     JP IF NOT MATCHING DELIMITER               024510
          EQ     PARS.38     RETURN TO MAIN LOOP                        024520
*                                                                       024530
* PICK UP NEXT CONVERSION SPECIFICATION                                 024540
*                                                                       024550
 PARS.A   SB6    PARS.42                                                024560
          EQ     NNBL                                                   024570
*                                                                       024580
 PARS.42  SA2    PARS.M4     TEST CHAR FOR ,;)                          024590
          SB6    PARS.43                                                024600
          SB2    X6-10                                                  024610
          NG     B2,GETINT   JP NOT ONE OF THE ABOVE                    024620
          AX2    X2,B2                                                  024630
          LX2    59                                                     024640
          PL     X2,GETINT   NONE OF THE ABOVE, GET REPEAT COUNT        024650
 PARS.B   CX2    X2                                                     024660
          SB3    X2                                                     024670
          JP     B3+PARS.J4-1                                           024680
 PARS.M4  LETMASK R,(,;),52B,10                                         024690
 PARS.J4  SB6    PARS.D      ;                                          024700
          EQ     SKIPPAR                                                024710
 +        EQ     PARS.A      ,                                          024720
 +        EQ     PARS.D      )                                          024730
*                                                                       024740
 PARS.43  SB5    X6-1RA                                                 024750
          BX7    X5                                                     024760
          SB6    X6-1RZ                                                 024770
          SA7    T.COUNT     SAVE REPEAT COUNT                          024780
          LT     B5,B0,PARS.B1  JP IF NEXT CHAR NOT ALPHA               024790
          GT     B6,B0,PARS.B1                                          024800
          SA6    T.T1        ALPHA, SAVE T1                             024810
          BX7    -X7-X7 
          SB6    PARS.44                                                024820
          SA7    T.T2        REINITIALIZE T.T2 TO -0
          SA7    T.M2        INIT. M2 TO -0 
          EQ     NNBL                                                   024830
 PARS.44  SB6    PARS.45                                                024840
          EQ     GETINT      GET M1                                     024850
*                                                                       024860
 PARS.B1  SB6    X6-1R(      NOT ALPHA, CHECK FOR (                     024870
          SA2    T.COUNT     REPEAT COUNT                               024880
          NG     X2,PARS.XA    BR IF NONE 
          NZ     X2,PARS.XA  BR IF NON-ZERO REPEAT COUNT
          SX2    B1         SET +0 REPEAT COUNT TO 1                    0007   5
 PARS.XA  BSS    0
          ZR     B6,PARS.C   YES, CRACK NESTED CONDITION                024890
          EQ     PARS.E17    NO, UNRECOGNIZED                           024900
*                                                                       024910
 PARS.45  SB5    X6-1RA      SAVE M1                                    024920
          BX7    X5                                                     024930
          SB6    X6-1RZ                                                 024940
          SA7    T.M1                                                   024950
          LT     B5,B0,PARS.B3  JP IF T2 MISSING                        024960
          GT     B6,B0,PARS.B3                                          024970
          SA6    T.T2        SAVE T2                                    024980
          SB6    PARS.B2                                                024990
          EQ     NNBL                                                   025000
 PARS.B2  SB6    PARS.46                                                025010
          EQ     GETINT      GET M2                                     025020
 PARS.46  BX7    X5                                                     025030
          SA7    T.M2        SAVE M2                                    025040
*                                                                       025050
* NOW DO THE CONVERSION                                                 025060
*                                                                       025070
 PARS.B3  SB6    PARS.47     RETURN ADDRESS                             025080
          SB2    S.CON       OFFSET OF CONV-POINTER IN WSA WORD 
          EQ     PARS.X                                                 025100
*                                                                       025110
 PARS.47  SA1    T.INREC     REMAINING SOURCE 
          MX0    36 
          BX2    X0*X1       IS THERE ANY SOURCE LEFT 
          ZR     X2,PARS.XIT  NO, EXIT
          SA1    T.SAVEX1    RESTORE REGISTERS
          SA2    T.COUNT                                                025130
          SB6    PARS.B4                                                025140
          SX6    X2-2        CHECK FOR REPEATED ITEM                    025150
          NG     X6,PCHAR     NO                                        025160
          SX6    X6+B1       YES, DO REPEAT                             025170
          SA3    T.SAVECT                                               025180
          SA6    A2                                                     025190
          SB2    X3                                                     025200
          SB6    PARS.47                                                025210
          JP     B2          DO IT                                      025220
*                                                                       025230
*                                                                       025240
 PARS.B4  SA2    PARS.M4     TEST CHAR FOR ,;)                          025250
          SB2    X6-10       PREVIOUS CHR - PARS.M4 OFFSET
          NG     B2,PARS.E18     NOT )
          AX2    X2,B2                                                  025270
          LX2    59                                                     025280
          NG     X2,PARS.B   YES                                        025290
          EQ     PARS.E18    NO, MISSING SEPARATOR                      025300
*                                                                       025310
*  THIS SECTION HANDLES A RIGHT PAREN                                   025320
*                                                                       025330
 PARS.D   SA3    T.STKPTR                                               025340
          SA4    X3-2        BRING UP COUNT WORD                        025350
          SB6    X4                                                     025360
          SX6    B6-B1       NEW COUNT                                  025370
          LE     B6,B1,PARS.48  COUNT EXHAUSTED                         025380
          SA6    A4          MORE, D.S. AL FINE                         025390
          SA1    A4+B1       BRING UP POINTER                           025400
          EQ     PARS.C1                                                025410
*                                                                       025420
 PARS.48  SX7    A4          POP STACK                                  025430
          SA7    A3                                                     025440
          SB6    A4                CHECK FOR LAST ONE 
          SB7    T.STACK
          EQ     B6,B7,PARS.XIT    YES, DONE
          SB6    PARS.B4     NO, CONTINUE                               025470
          EQ     NNBL                                                   025480
*                                                                       025490
* DONE, RESTORE B6 AND ERROR FLAGS AND EXIT                             025500
*                                                                       025510
 CONA..Q  BSS    0           JUMP HERE TO QUIT CONVERSION               025520
*                                                                       025530
 PARS.XIT SA4    T.PSAVB6    NO ERRORS                                  025540
          SX5    B0                                                     025560
          SB6    X4                                                     025580
          JP     B6          EXIT                                       025590
*                                                                       025600
* TABLES AND DATA USED BY PARSE                                         025610
*                                                                       025620
 RELTAB   BSS    0
* 
*         THE VALUES FOR SYMBOLS ARE CRITICAL TO T8.COM.
*         MOST FREQUENTLY USED OPERATORS OCCUR FIRST IN LIST
* 
          ECHO   1,OPV=(6,1,4,5,2,3,1,4,5,2,3),OPC=(EQ,NE,GE,GT,LE,LT,NQ
,,GQ,GR,LQ,LS)
          VFD    30/OPV,30/2R_OPC 
          DATA   0           END OF TABLE                               025690
          SPACE 2 
**    ERROR ACTIONS 
*                                                                       025720
 PARS.E1  SA2    PARS.EM1    ERROR, FIRST CHAR OF CONV. STRING NOT (    025730
          EQ     ERR.CON                                                025740
 PARS.E2  SA2    PARS.EM2    ERROR, STACK OVERFLOW                      025750
          EQ     ERR.CON                                                025760
 PARS.E3  SA2    PARS.EM3    ERROR, FIRST ITEM IN TEST MUST BE ALPHA    025770
          EQ     ERR.CON                                                025780
 PARS.E4  SA2    PARS.EM4    ERROR, MISSING RELATIONAL                  025790
          EQ     ERR.CON                                                025800
 PARS.E5  EQU    PARS.E4                                                025810
 PARS.E6  SA2    PARS.EM6    ERROR, RELATIONAL NOT IN TABLE             025820
          EQ     ERR.CON                                                025830
 PARS.E7  SA2    PARS.EM7    ERROR, STRING PICKUP HIT END OF CONV-STRING025840
          EQ     ERR.CON                                                025850
 PARS.E8  SA2    PARS.EM8    ERROR, LITERAL STRING TOO LONG             025860
          EQ     ERR.CON                                                025870
 PARS.E9  EQU    PARS.E8                                                025880
 PARS.E10 SA2    PARS.EMA    ERROR, SECOND ITEM UNRECOGNIZED IN TEST    025890
          EQ     ERR.CON                                                025900
 PARS.E11 EQU    PARS.E10                                               025910
 PARS.E12 SA2    PARS.EMC    ERROR, MISSING COLON AFTER SELECTOR        025920
          EQ     ERR.CON                                                025930
 PARS.E13 SA2    PARS.EMD    ERROR, T1 NOT IN BIT VECTOR                025940
          EQ     ERR.CON                                                025950
 PARS.E14 SA2    PARS.EME    ERROR, T2 NOT IN BIT VECTOR                025960
          EQ     ERR.CON                                                025970
 PARS.E15 SA2    PARS.EMF    ERROR, MISSING ) OR ; IN SKIP AFTER TEST   025980
          EQ     ERR.CON                                                025990
 PARS.E16 EQU    PARS.E7                                                026000
 PARS.E17 EQU    PARS.E13                                               026010
 PARS.E18 SA2    PARS.EN2    ERROR, MISSING ,;) AFTER CONVERSION        026020
          EQ     ERR.CON                                                026030
****
*                                                                       026050
 PARS.EM1 VFD    12/0,18/E.SCN,12/0,18/*+1
          DATA   C/FIRST CHARACTER OF CONVERSION-STRING IS NOT -(-/     0003   9
 PARS.EM2 VFD    12/0,18/E.SCN,12/0,18/*+1
          DATA    C/CONVERSION STRINGS NESTED TOO DEEPLY/               026090
 PARS.EM3 VFD    12/0,18/E.SCN,12/0,18/*+1
          DATA    C/FIRST ITEM IN SELECTOR-EXPRESSION NOT RECOGNIZED/   026110
 PARS.EM4 VFD    12/0,18/E.SCN,12/0,18/*+1
          DATA    C/MISSING RELATIONAL OPERATOR IN SELECTOR-EXPRESSION/ 026130
 PARS.EM6 VFD    12/0,18/E.SCN,12/0,18/*+1
          DATA    C/RELATIONAL OPERATOR NOT RECOGNIZED/                 026150
 PARS.EM7 VFD    12/0,18/E.SCN,12/0,18/*+1
          DATA    C/MISSING STRING DELIMITER/                           026170
 PARS.EM8 VFD    12/0,18/E.SCN,12/0,18/*+1
          DATA    C/LITERAL STRING IS TOO LONG/                         026190
 PARS.EMA VFD    12/0,18/E.SCN,12/0,18/*+1
          DATA    C/SECOND SELECTOR-EXPRESSION ITEM NOT RECOGNIZED/     026210
 PARS.EMC VFD    12/0,18/E.SCN,12/0,18/*+1
          DATA    C/SELECTOR-EXPRESSION NOT TERMINATED BY COLON/        026230
 PARS.EMD VFD    12/0,18/E.SCN,12/0,18/*+1
          DATA    C/ILLEGAL FIRST ITEM TYPE/                            026250
 PARS.EME VFD    12/0,18/E.SCN,12/0,18/*+1
          DATA    C/ILLEGAL SECOND ITEM TYPE/                           026270
 PARS.EMF VFD    12/0,18/E.SCN,12/0,18/*+1
          DATA    C/MISSING RIGHT PARENTHESIS OR SEMICOLON/             026290
 PARS.EN2 VFD    12/0,18/E.SCN,12/0,18/*+1
          DATA    C/MISSING SEPARATOR AFTER CONVERSION ITEM/            026310
****
 SKIPPAR  TITLE  SUBROUTINE SKIPPAR - SKIP TO MATCHING RIGHT PAREN      019940
*                                                                       019950
**    SKIPPAR - SKIP TO MATCHING RIGHT PARENTHESIS
*                                                                       019970
*         INPUT  -  B1 = 1                                              019980
*                   X1 = SOURCE POINTER                                 019990
*                   B6 = RETURN ADDRESS                                 020000
*                                                                       020010
*         OUTPUT -  X7 = UPDATED POINTER WORD (ALSO PUT IN X1)          020020
*                                                                       020030
*         PRESERVED  X0, --, --, --, X4, X5, --, --                     020040
*                    A0, A1, --, --, A4, A5, A6, A7                     020050
*                        B1, --, --, --, --, --, B7                     020060
*                                                                       020070
*         THIS ROUTINE IS USED BY THE PARSER TO SKIP TO AN OUTER        020080
*       LEVEL RIGHT PAREN AFTER REACHING A SEMICOLON, OR DURING A       020090
*       SKIP TO SEMICOLON.                                              020100
*                                                                       020110
          SPACE  4                                                      020130
 SKIPPAR  SB5    B6          SAVE RETURN ADDRESS                        020140
          SB4    B0          INITIAL PAREN COUNT                        020150
          SB6    SKIPP.1     RETURN POINT FROM NNBL                     020160
          EQ     NNBL                                                   020170
*                                                                       020180
 SKIPP.1  SA2    SKPMSK      SKIP MASK                                  020190
          SB2    X6          CHARACTER                                  020200
          NG     X6,SKIPP.E1 ERROR, END OF STRING                       020210
          AX2    X2,B2                                                  020220
          LX2    59                                                     020230
          PL     X2,NNBL     JUMP IF NOT A KEY CHARACTER                020240
          CX2    X2                                                     020250
          SB3    X2                                                     020260
          JP     SKIPP.J-1+B3  PROCESS KEY CHARACTER                    020270
*                                                                       020280
 SKIPP.J  EQ     SKIPP.2     $  - STRING DELIMITER                      020290
 +        NZ     B4,SKIPP.4  )                                          020300
          JP     B5            DONE IF FOUND AT OUTER LEVEL             020310
 +        SB4    B4+B1       (  - INCREASE PCOUNT                       020320
          EQ     NNBL                                                   020330
 SKIPP.2  SB6    SKIPP.3     *  - STRING DELIMITER                      020340
          SB7    -B2         SAVE COMPLEMENT OF DELIMITER 
          EQ     NNBL                                                   020350
 SKIPP.3  SB3    X6+B7
          NG     X6,SKIPP.E2                                            020380
          NZ     B3,NNBL     JP IF NOT A DELIMITER                      020390
          SB6    SKIPP.1     RETURN TO OUTER LOOP                       020400
          EQ     NNBL                                                   020410
*                                                                       020420
 SKIPP.4  SB4    B4-B1       PROCESS LOWER LEVEL RT. PAREN              020430
          EQ     NNBL                                                   020440
          SPACE  2
**    ERROR ACTIONS 
*                                                                       020470
 SKIPP.E1 SA2    SKIPP.N1    ERROR, UNMATCHED LEFT PAREN.               020480
          EQ     ERR.CON                                                020490
 SKIPP.E2 SA2    SKIPP.N2    ERROR, UNMATCHED STRING DELIMITER          020500
          EQ     ERR.CON                                                020510
****
*                                                                       020520
 SKIPP.N1 VFD    12/0,18/E.SCN,12/0,18/*+1
          DATA    C/MISSING RIGHT PARENTHESIS/                          020540
 SKIPP.N2 VFD    12/0,18/E.SCN,12/0,18/*+1
          DATA    C/MISSING RIGHT STRING DELIMITER/                     020560
****
 SKPMSK   LETMASK R,(*$),(51B,52B)   (51B,52B)= (,)                     020580
 GETNUM   TITLE  SUBROUTINE GETNUM - CONVERT STRING TO NUMBER           046960
*                                                                       046970
**    GETNUM - CONVERT A STRING TO A TRIPLE PRECISION NUMBER
*                                                                       046990
*         INPUT  -  B1 = 1                                              047000
*                   X1 = SOURCE POINTER                                 047010
*                   X6 = FIRST BCD CHARACTER (IN RANGE 0D TO 9D)        047020
*                   B6 = RETURN ADDRESS                                 047030
*                   B7 = ADDRESS OF ROUTINE TO PICK UP NEXT CHARACTER   047040
*                                                                       047050
*         OUTPUT -  X1 = UPDATED SOURCE POINTER                         047060
*                                                                       047070
*         PRESERVED  --, --, --, --, --, --, --, --                     047080
*                    A0, --, --, --, --, --, --, --                     047090
*                        B1, --, --, --, --, B6, B7                     047100
*                                                                       047110
*         NOTES..   THE ROUTINE TO PICK UP NEXT CHARACTER MUST LEAVE    047120
*                 THE CHARACTER IN X6 AND AN UPDATED POINTER WORD IN    047130
*                 X1.  IF THE CHARACTER IS NOT NUMERIC (OR IF THE END   047140
*                 OF THE STRING IS REACHED), A CODE SHOULD BE RETURNED  047150
*                 IN ACCORDANCE WITH THE FOLLOWING TABLE..              047160
*                      +           -4                                   047170
*                      -           -3                                   047180
*                      .           -2                                   047190
*                      E           -1                                   047200
*                     OTHER        -0                                   047210
*                                                                       047220
*                   THE NEXTCHAR ROUTINE IS ALSO AN EXCEPTION IN THAT   047230
*                 IT USES B5 AS THE LINKAGE REGISTER FOR RETURNS        047240
*                                                                       047250
*                                                                       047260
*                   THE NEXTCHARACTER ROUTINE SHOULD PRESERVE           047270
*                 THE FOLLOWING REGISTERS.. A0, A1, B1, B5, B6, B7      047280
*                                                                       047290
*                   THE SOURCE STRING IS CONVERTED TO A TRIPLE          047300
*                 PRECISION QUANTITY BY AN ALGORITHM WHICH IS INTENDED  047310
*                 TO BE IDENTICAL TO THE ONE USED BY FORTRAN EXTENDED   047320
*                 (IN KRAKER).                                          047330
*                                                                       047340
*         TEMPORARY CELLS USED..                                        047350
*                                                                       047360
*                T.NUM       CONVERTED                                  047370
*                     +1      TRIPLE PRECISION                          047380
*                     +2       VALUE                                    047390
*                T.PER       FLAG AND COUNT AFTER DECIMAL POINT         047400
*                T.NSIG      COUNT OF SIGNIFICANT DIGITS                047410
*                T.EXP       EXPONENT (ABSOLUTE) VALUE                  047420
*                T.ESG       EXPONENT SIGN                              047430
*                T.MSG       MANTISSA SIGN                              047440
*                                                                       047450
          SPACE  4                                                      047470
 GETNUM   BX7    -X7-X7      PRESET ALL CELLS TO -0                     047480
          SA7    T.NUM                                                  047490
          SA7    A7+B1                                                  047500
          SA7    A7+B1                                                  047510
          SA7    T.PER                                                  047520
          SA7    T.NSIG                                                 047530
          SA7    T.EXP                                                  047540
          SA7    T.ESG                                                  047550
          SA7    T.MSG                                                  047560
          SB5    GETN.R1     FIRST RETURN POINT                         047570
*                                                                       047580
 GETN.R1  NG     X6,GETN.P1  JP IF NOT A DIGIT                          047590
          SA2    T.PER                                                  047600
          SA3    T.NSIG                                                 047610
          NG     X2,GETN.1   JP IF NO (.) ENCOUNTERED YET               047620
          SX7    X2+B1        COUNT DIGITS AFTER (.)                    047630
          SA7    A2                                                     047640
 GETN.1   ZR     X6,GETN.Z1  JP IF DIGIT = 0                            047650
 GETN.2   SX7    X3+B1        COUNT OF SIGNIFICANT DIGITS               047660
          SB2    X3-43D                                                 047670
          SA7    A3 
          PL     B2,GETN.Z2  IGNORE AFTER 43 SIGNIFICANT DIGITS         047690
          SA2    T.NUM                                                  047700
          SB2    X3-14D                                                 047710
          IX7    X2+X2       OLD * 2                                    047720
          LX2    3           OLD * 8                                    047730
          IX7    X7+X6       OLD * 2 + NEW                              047740
          MX0    12                                                     047750
          IX7    X7+X2       OLD * 10 + NEW                             047760
          PL     B2,GETN.3   JP IF MORE THAN 14 DIGITS SIGNIFICANT      047770
          SA7    A2           14 OR LESS IS SINGLE PRECISION            047780
          JP     B7           GET NEXT DIGIT                            047790
*                                                                       047800
 GETN.3   BX6    X0*X7       DOUBLE PRECISION (OR MORE)                 047810
          SA4    A2+B1       T.NUM+1                                    047820
          BX7    -X0*X7                                                 047830
          LX6    12          OVERFLOW FROM LOW ORDER WORD               047840
          SA7    A2                                                     047850
          SB2    X3-28D                                                 047860
          LX4    1           OLD * 2                                    047870
          IX7    X4+X6       OLD * 2 + OVERFLOW                         047880
          LX4    2           OLD * 8                                    047890
          IX7    X4+X7       OLD * 10 + OVERFLOW                        047900
          PL     B2,GETN.4   JP IF MORE THAN 28 DIGITS SIGNIFICANT      047910
          SA7    A4           28 OR LESS IS DOUBLE PRECISION            047920
          JP     B7           GET NEXT DIGIT                            047930
*                                                                       047940
 GETN.4   SA2    A4+B1       T.NUM+2                                    047950
          BX6    -X0*X7 
          AX7    60-12                                                  047960
          LX2    1           OLD * 2                                    047970
          SA6    A4 
          IX7    X2+X7       OLD * 2 + OVERFLOW                         047980
          LX2    2           OLD * 8                                    047990
          IX7    X2+X7       OLD * 10 + OVERFLOW                        048000
          SA7    A2                                                     048010
          JP     B7           GET NEXT DIGIT                            048020
*                                                                       048030
 GETN.Z1  NZ     X3,GETN.2   COME HERE IF DIGIT = 0, JP IF NOT LEADING  048040
          SX7    B0          HANDLE LEADING 0                           048050
          SA7    A3          FLAG THAT LEADING 0 FOUND (T.NSIG = +0)    048060
 GETN.Z2  JP     B7          GET NEXT DIGIT                             048070
*                                                                       048080
*PROCESS FIRST OCCURENCE OF NON-DIGIT                                   048090
*                                                                       048100
 GETN.P1  SB4    X6                                                     048110
          JP     GETN.P1A+B4                                            048120
 +        EQ     GETN.P2     -4  (+)                                    048130
 +        EQ     GETN.P2     -3  (-)                                    048140
 +        EQ     GETN.A      -2  (.)                                    048150
 +        EQ     GETN.E      -1  (E)                                    048160
 GETN.P1A SA2    T.MSG       -0  (OTHER), COMPLETE CONVERSION           048170
          SA3    T.NSIG                                                 048180
          BX0    -X0-X0      =-0                                        048190
          NZ     X2,GETN.5                                              048200
          SX0    B0          X0 HAS MASK TO SET SIGN OF RESULT          048210
 GETN.5   NG     X3,GETN.RT  IMMEDIATE RETURN (-0) IF NO DIGITS         048220
          ZR     X3,GETN.Z3  SPECIAL CASE ZERO MANTISSA (NSIG = 0)      048230
          SA4    T.ESG                                                  048240
          SA5    T.EXP                                                  048250
          SA2    T.PER                                                  048260
          SB4    X3-43       EXCESS DIGITS OVER 43                      048270
          ZR     X4,GETN.6
          BX5    -X5         SET EXP VALUE NEGATIVE                     048290
 GETN.6   IX5    X5-X2       EXP-DIGITS AFTER (.)                       048300
          NG     B4,GETN.7                                              048310
          SX5    X5+B4       + EXCESS DIGITS NOT INCLUDED IN VALUE
*                                                                       048330
 GETN.7   SB4    B4+43-14-1  NOW FLOAT THE RESULT                       048340
          SA2    T.NUM                                                  048350
          PL     B4,GETN.8   JP IF NOT SINGLE PRECISION                 048360
          PX6    X2                                                     048370
          BX6    X6-X0                                                  048380
          NX6    X6                                                     048390
          SA6    A2                                                     048400
          BX2    X6-X6       ZERO 
          DX7    X2+X6
          BX2    X2-X0       SET SIGN 
          SA7    A2+B1       T9NUM+1
          DX6    X7+X2
          SA6    A7+B1       T9NUM+2
          EQ     GETN.10                                                048410
 GETN.8   SA3    A2+B1       HERE IF DOUBLE OR TRIPLE PRECISION         048420
          SB4    B4+14-28                                               048430
          PX2    X2                                                     048440
          SB3    48                                                     048450
          BX2    X2-X0                                                  048460
          PX3    X3,B3                                                  048470
          BX3    X3-X0                                                  048480
          NX2    X2                                                     048490
          NX3    X3                                                     048500
          FX6    X2+X3                                                  048510
          PL     B4,GETN.9   JP IF TRIPLE PRECISION                     048520
          SA6    A2                                                     048530
          DX7    X2+X3                                                  048540
          SA7    A3                                                     048550
          BX2    X6-X6
          DX6    X2+X7
          SA6    A7+B1       T.NUM+2
          EQ     GETN.10                                                048560
 GETN.9   SA4    A3+B1       HERE IF TRIPLE PRECISION                   048570
          SB3    B3+B3                                                  048580
          DX2    X2+X3       LOW ORDER PAIR NOW IN X6,X2                048590
          PX4    X4,B3                                                  048600
          BX4    X4-X0                                                  048610
          NX4    X4                                                     048620
          FX7    X4+X6                                                  048630
          SA7    A2                                                     048640
          DX3    X4+X6                                                  048650
          FX6    X3+X2                                                  048660
          SA6    A3                                                     048670
          DX7    X3+X2                                                  048680
          SA7    A4                                                     048690
*                                                                       048700
 GETN.10  ZR     X5,GETN.RT  DONE IF NO SCALING NEEDED                  048710
*                                                                       048720
          SB4    TEN.BIG-3   LOCATION OF POSITIVE (.GE. 16) POWERS      048730
          MX0    60-4                                                   048740
          BX6    X1                                                     048750
          PL     X5,GETN.11  JP IF POSITIVE SCALE FACTOR                048760
          BX7    -X0         =15
          IX5    X7-X5
          SB4    TEN.LIL-3                                              048780
          BX5    X5-X7
 GETN.11  SA6    T.MSG       SAVE X1                                    048800
          BX7    -X0*X5      LOW 4 BITS OF SCALE FACTOR                 048810
          AX5    4                                                      048820
          SA1    T.NUM                                                  048830
          SB5    X5          SAVE NEXT SCALE BITS                       048840
          AX5    5                                                      048850
          NZ     X5,GETN.ER1 ERROR, SCALE FACTOR .GE. 512               048860
          SA2    A1+B1                                                  048870
          SA3    A2+B1                                                  048880
          SB2    X7+TEN.ONE 
          SB7    B6 
          SB6    GETN.12
          NZ     X7,T3=MUL1  SCALE BY SMALL FACTOR
* 
 GETN.12  ZR     B5,GETN.13  SCALING COMPLETE 
          SX6    B5 
          SX4    B1 
          SB4    B4+3 
          BX7    X4*X6
          SB2    B4 
          AX6    1
          SB5    X6 
          ZR     X7,GETN.12  JP BIT ZERO
          EQ     T3=MUL3     FACTOR IN THIS POWER-OF-TEN
* 
 GETN.13  BX6    X1          SAVE RESULT
          SA6    A1 
          BX7    X2 
          SA7    A2 
          BX6    X3 
          SA6    A3 
          SB6    B7          RESTORE B6 
          SA1    T.MSG       RESTORE X1 
*                                                                       049450
 GETN.RT  JP     B6          RETURN                                     049460
*                                                                       049470
*                                                                       049480
 GETN.Z3  BX6    X0          ZERO MANTISSA, SPECIAL CASE                049490
          SA6    T.NUM                                                  049500
          SA6    A6+B1                                                  049510
          SA6    A6+B1                                                  049520
          JP     B6          DONE                                       049530
*                                                                       049540
* ACTION TO HANDLE INITIAL + OR -                                       049550
*                                                                       049560
 GETN.P2  SA2    T.NSIG                                                 049570
          SA3    T.MSG                                                  049580
          PL     X2,GETN.P1A  JP IF WE HAVE SEEN A DIGIT                049590
          PL     X3,GETN.P1A  JP IF WE HAVE SEEN A SIGN                 049600
          SX6    X6+4                                                   049610
          SA6    A3          SAVE SIGN                                  049620
          JP     B7          GET NEXT CHARACTER                         049630
*                                                                       049640
* ACTION TO HANDLE (.)                                                  049650
*                                                                       049660
 GETN.A   SA2    T.PER                                                  049670
          PL     X2,GETN.P1A  JP IF WE ALREADY HAVE A (.)               049690
          SX6    B0                                                     049710
          SA6    A2          FLAG                                       049720
          JP     B7          GET NEXT CHARACTER                         049730
*                                                                       049740
* ACTION TO HANDLE (E)                                                  049750
*                                                                       049760
 GETN.E   SA2    T.PER       MUST HAVE A (.) AHEAD OF (E)               049770
          SB5    GETN.30     RETURN ADDRESS FOR NEXTCHAR                049780
          SA3    T.NSIG      MUST HAVE SOME DIGITS, ALSO
          NG     X2,GETN.P1A  NO (.)                                    049790
          NG     X3,GETN.P1A  NO DIGITS 
          JP     B7          GET CHARACTER                              049800
*                                                                       049810
* CODE TO PICK UP EXPONENT FIELD                                        049820
*                                                                       049830
 GETN.30  SB5    GETN.31     NEXT RETURN ALLOWS NUMERICS ONLY           049840
          PL     X6,GETN.31  DIGIT                                      049850
          SX6    X6+2        NON-DIGIT, CHECK FOR SIGN                  049860
          PL     X6,GETN.ER3 NOT SIGN, ERROR                            049870
          SX6    X6+2        SAVE SIGN                                  049880
          SA6    T.ESG                                                  049890
          JP     B7          GET NEXT CHARACTER                         049900
*                                                                       049910
 GETN.31  SA2    T.EXP                                                  049920
          NG     X6,GETN.32  NOT A DIGIT                                049930
          LX2    1           *2                                         049940
          IX6    X2+X6       *2 + DIGIT                                 049950
          LX2    2           *8                                         049960
          IX6    X2+X6       *10 + DIGIT                                049970
          SA6    A2                                                     049980
          JP     B7          GET NEXT CHARACTER                         049990
*                                                                       050000
 GETN.32  ZR     X6,GETN.P1A  DONE GATHERING EXPONENT 
          EQ     GETN.ER3    ERROR, NO DIGITS AFTER (E)                 050020
          SPACE 2 
**    ERROR ACTIONS 
*                                                                       050060
 GETN.ER1 SA2    GETN.EM1    ERROR, EXPONENT .GE. 512 (ABSOLUTE VALUE)  050070
          EQ     ERR.CON                                                050080
 GETN.ER2 SA2    GETN.EM2    ERROR, RESULT OUT OF RANGE                 050090
          EQ     ERR.CON                                                050100
 GETN.ER3 SA2    GETN.EM3    ERROR, BAD SYNTAX IN NUMERIC LITERAL       050110
          EQ     ERR.CON                                                050120
****
*                                                                       050130
 GETN.EM1 VFD    12/0,18/E.CON,12/0,18/*+1
          DATA    C/NUMERIC LITERAL EXPONENT .GE. 512/                  050150
 GETN.EM2 VFD    12/0,18/E.CON,12/0,18/*+1
          DATA    C/NUMERIC LITERAL OUT OF RANGE (INFINITE)/            050170
 GETN.EM3 VFD    12/0,18/E.CON,12/0,18/*+1
          DATA    C/SYNTAX.. NO DIGIT AFTER -E- IN NUMERIC LITERAL/     050190
****
 NEXTNUM  TITLE  SUBROUTINE NEXTNUM - GET NEXT NUMERIC CHARACTER        027350
*                                                                       027360
**    NEXTNUM - GET NEXT NUMERIC CHARACTER
*                                                                       027380
*         INPUT  -  B1 = 1                                              027390
*                   X1 = SOURCE POINTER                                 027400
*          (NOTE=)  B5 = RETURN ADDRESS                                 027410
*                                                                       027420
*         OUTPUT -  X1 = UPDATED SOURCE POINTER                         027430
*                   X6 = RETURN CHARACTER                               027440
*                                                                       027450
*         PRESERVED  --, --, --, --, --, --, --, --                     027460
*                    A0, A1, --, --, --, --, --, --                     027470
*                        B1, --, --, --, B5, B6, B7                     027480
*                                                                       027490
*         NOTES..   THIS ROUTINE IS DESIGNED TO BE USED IN              027500
*                 CONJUNCTION WITH THE -GETNUM- ROUTINE.  THE CHARACTER 027510
*                 RETURNED IN X6 IS REDUCED TO THE RANGE 00B(0) TO      027520
*                 11B(9) IF IT IS NUMERIC.  IN THE CASE OF A NON-       027530
*                 NUMERIC CHARACTER (OR END OF STRING), A CODE WILL     027540
*                 BE RETURNED IN ACCORDANCE WITH THE FOLLOWING TABLE..  027550
*                                                                       027560
*                      +           -4                                   027570
*                      -           -3                                   027580
*                      .           -2                                   027590
*                      E           -1                                   027600
*                     OTHER        -0                                   027610
*                                                                       027620
*                BLANKS ARE IGNORED (SKIPPED).                          027630
*                                                                       027640
*                NOTE THAT THIS ROUTINE USES B5 FOR LINKAGE (NOT B6)    027650
*                                                                       027660
*         TEMPORARY CELLS USED..                                        027670
*                                                                       027680
*                T.CHR       COPY OF RETURN VALUE                       027690
*                                                                       027700
          SPACE  4                                                      027720
 NEXTNUM  SB4    B6          SAVE B6 RETURN                             027730
          SB6    NEXTN.1                                                027740
          EQ     NNBL        GET NEXT (NON-BLANK) CHARACTER             027750
 NEXTN.1  SB6    B4                                                     027760
 NEXTN.X  SB4    X6-1R9-1    ALTERNATE ENTRY IF WE ALREADY HAVE CHAR.   027770
          SX6    X6-1R0                                                 027780
          PL     B4,NEXTN.2  NOT NUMERIC                                027790
          NG     X6,NEXTN.4  NOT NUMERIC                                027800
 NEXTN.E  SA6    T.CHR       SAVE VALUE                                 027810
          JP     B5          RETURN                                     027820
*                                                                       027830
 NEXTN.2  SB4    B4+1R9+1-1R+  CHECK FOR +,-,.
          SX6    -4                                                     027850
          ZR     B4,NEXTN.E   +                                         027860
          SB4    B4+1R+-1R-                                             027870
          SX6    X6+B1                                                  027880
          ZR     B4,NEXTN.E  -                                          027890
          SX6    X6+B1                                                  027900
          SB4    B4+1R--1R.                                             027910
          ZR     B4,NEXTN.E   .                                         027920
 NEXTN.3  BX6    -X0-X0                                                 027930
          EQ     NEXTN.E     OTHER                                      027940
*                                                                       027950
 NEXTN.4  SB4    B4+1R9+1-1RE  CHECK FOR E
          SX6    -1                                                     027970
          ZR     B4,NEXTN.E  E                                          027980
          EQ     NEXTN.3                                                027990
 CONA     TITLE  CONA - COMMON SOURCE CONVERSION ROUTINES               008440
*                                                                       008450
**    CONA - ROUTINES TO PICK UP COMMON MODE SOURCE FIELDS (NUMERIC)
*                                                                       008470
*         INPUT  -  B1 = 1                                              008480
*                   X1 = SOURCE POINTER                                 008490
*                   B5 = RETURN ADDRESS                                 008500
*                                                                       008510
*         OUTPUT -  NONE IN REGISTERS                                   008520
*                                                                       008530
*         PRESERVED  --, --, --, --, --, --, --, --                     008540
*                    A0, --, --, --, --, --, --, --                     008550
*                        B1, --, --, --, B5, B6, B7                     008560
*                                                                       008570
*         TEMPORARY CELLS USED..                                        008580
*                                                                       008590
*                T.NUM,+1,+2    RESULT, A TRIPLE PRECISION NUMBER       008600
*                T.TEMP1     TEMPORARY                                  008610
*                                                                       008620
*         NOTES..   THE ROUTINES THAT FOLLOW ARE NAMED -CONA.Q.-,       008630
*                WHERE -Q- IS A VALID SOURCE TYPE.                      008640
*                                                                       008650
*                   THESE ROUTINES ARE FOR NUMERIC PICKUP ONLY, AND     008660
*                LEAVE A TRIPLE PRECISION REAL NUMBER IN T.NUM.         008670
*                                                                       008680
          SPACE  4                                                      008700
*                                                                       008710
* BIT FIELDS                                                            008720
*                                                                       008730
 CONC.B.  BSS    0           THESE ARE ALL
 CONT.B.  BSS    0            REALLY THE SAME 
 CON6.B.  BSS    0             CODE... SO COME HERE DIRECTLY
* 
 CONA.B.  SX7    B6          BIT ITEM                                   008740
          SX6    B0                                                     008750
          SA7    T.TEMP1     SAVE RETURN ADDRESS                        008760
          SA6    T.NUM       ZERO RESULT AREA                           008770
          SX7    B0                                                     008780
          BX5    X1                                                     008790
          SA7    A6+B1                                                  008800
          AX5    36          REMAINING BITS                             008810
          SX2    48                                                     008820
          SA6    A7+B1                                                  008830
          SX7    43                                                     008840
          SB6    CONA.2                                                 008850
          SA7    T.P                                                    008860
 CONA.3   NZ     X5,NXBITS                                              008870
 CONA.1   SA5    T.TEMP1     NO MORE BITS                               008880
          SB6    X5                                                     008890
          JP     B5          EXIT                                       008900
*                                                                       008910
 CONA.2   PX6    X6,B0       SAVE FIRST BITS, DETECT A ZERO FIELD       008920
          IX5    X5-X2                                                  008930
          NX6    X6                                                     008940
          ZR     X6,CONA.3                                              008950
          SA6    T.NUM                                                  008960
          SX7    B0                                                     008970
          DX7    X6+X7                                                  008980
          SA7    A6+B1                                                  008990
          SX6    B0 
          DX6    X6+X7
          SA6    A7+B1                                                  009010
          ZR     X5,CONA.1   JP IF NO MORE BITS                         009020
          SB6    CONA.4                                                 009030
          EQ     NXBITS      GET SECOND GROUP OF BITS                   009040
*                                                                       009050
 CONA.4   SA4    T.NUM                                                  009060
          PX6    X6                                                     009070
          SB2    X2                                                     009080
          NX3    X6                                                     009090
          UX4    X4,B3                                                  009100
          SB3    B3+B2                                                  009110
          PX4    X4,B3       ADJUSTED EXPONENT                          009120
          FX6    X3+X4                                                  009130
          SA6    A4                                                     009140
          DX7    X3+X4                                                  009150
          SA7    A6+B1                                                  009160
          IX5    X5-X2                                                  009170
          SX3    B0                                                     009180
          DX6    X3+X7                                                  009190
          SA6    A7+B1                                                  009200
          ZR     X5,CONA.1   JP IF NO MORE BITS                         009210
          SB6    CONA.5                                                 009220
          EQ     NXBITS      GET THIRD GROUP OF BITS                    009230
*                                                                       009240
 CONA.5   SA4    T.NUM                                                  009250
          PX6    X6                                                     009260
          SB2    X2                                                     009270
          NX0    X6                                                     009280
          SA3    A4+B1                                                  009290
          UX4    X4,B3                                                  009300
          SB3    B3+B2                                                  009310
          PX6    X4,B3       ADJUSTED EXPONENT                          009320
          SB3    B3-48                                                  009330
          SA6    A4                                                     009340
          PX3    X3,B3       ADJUSTED EXPONENT                          009350
          IX5    X5-X2                                                  009360
          FX7    X0+X3                                                  009370
          SA7    A6+B1                                                  009380
          DX6    X0+X3                                                  009390
          SA6    A7+B1                                                  009400
          ZR     X5,CONA.1   JP IF NO MORE BITS                         009410
          SB6    CONA.6                                                 009420
          EQ     NXBITS      GET FOURTH GROUP OF BITS AND FINAL         009430
*                             OFFSET (IF ANY)                           009440
 CONA.6   SA5    T.NUM+2                                                009450
          SB2    X5                                                     009460
          SA4    A5-B1                                                  009470
          PX6    X6,B2                                                  009480
          SA3    A4-B1                                                  009490
          UX5    X5,B3                                                  009500
          SB4    48                                                     009510
          SB3    B3+B2                                                  009520
          PX5    X5,B3                                                  009530
          SB3    B3+B4                                                  009540
          RX5    X5+X6       LAST GROUP GOES IN ROUNDED                 009550
          PX4    X4,B3       PROPOGATE CARRY UP, IF NECESSARY           009560
          SB3    B3+B4                                                  009570
          FX0    X4+X5                                                  009580
          PX3    X3,B3                                                  009590
          DX5    X4+X5                                                  009600
          FX6    X0+X3                                                  009610
          DX7    X0+X3                                                  009620
          SA6    A3                                                     009630
          FX7    X7+X5                                                  009640
          SA7    A4                                                     009650
          DX6    X7+X5                                                  009660
          SA6    A5                                                     009670
          EQ     CONA.1      DONE                                       009680
*                                                                       009690
          SPACE  2                                                      009700
*                                                                       009710
* PART OF STRING CONVERSION                                             009720
*                                                                       009730
* 
*         SAVE B5, B6, AND B7 IN T.TEMP1
* 
 CONA.X   MX5    -18         (X5) = 42/77...7B,18/0 
          SX6    B5-0 
          SX7    B6-0 
          BX6    -X5*X6 
          BX7    -X5*X7 
          LX6    18 
          BX6    X6+X7       (X6) = 24/0,18/B5,18/B6
          SX7    B7-0 
          BX7    -X5*X7 
          LX6    18 
          BX6    X6+X7       (X6) = 6/0,18/B5,18/B6,18/B7 
          SA6    T.TEMP1     SAVE REGISTERS 
          SA4    T.M1                                                   009790
          SB5    GETNUM                                                 009810
          SB7    B4                                                     009830
          BX7    X4                                                     009840
          SB6    CONA.R                                                 009860
          SA7    T.P                                                    009870
          JP     B7          CONVERT STRING                             009880
*                                                                       009890
 CONA.R   AX1    36                                                     009900
          SA5    T.TEMP1     RESTORE -B- REGISTERS
          SB7    X5-0 
          NZ     X1,CONA.E1  ERROR, NOT ALL OF SOURCE USED              009930
          AX5    18                                                     009940
          SB6    X5-0 
          AX5    18                                                     009960
          SB5    X5-0 
          JP     B5          EXIT                                       009980
*                                                                       009990
          SPACE  2                                                      010000
**    ERROR ACTIONS 
*                                                                       010030
 CONA.E1  SA2    CONA.EM1    GETNUM RETURNED BEFORE END OF FIELD        010040
          EQ     ERR.CON                                                010050
****
*                                                                       010070
 CONA.EM1 VFD    12/0,18/E.CON,12/0,18/*+1
          DATA   C/STRING NOT IN NUMERIC SYNTACTIC FORM/                010090
****
          END 
