*DECK NCHAR 
          IDENT  T8.NCH 
          TITLE  ROUTINES NCHAR, GETINT 
 NCHAR    TITLE  SUBROUTINES NCHAR, NNBL, PCHAR - 6 BIT CHARACTERS      050200
*                                                                       050210
**    NCHAR, NNBL, PCHAR  - 6-BIT CHARACTER PICKUP
* 
*  THESE ROUTINES ARE USED WHEN SCANNING 6-BIT STRINGS, LIKE THE        050220
*   CONVERSION-SPEC AND FILE-STRING.  THEY AMOUNT TO EFFICIENT          050230
*   VERSIONS OF =NXBITS=.                                               050240
*                                                                       050250
*  NCHAR - GETS THE NEXT CHARACTER, ADVANCES POINTER                    050260
*                                                                       050270
*  NNBL  - GETS THE NEXT NON-BLANK CHARACTER, ADVANCES POINTER          050280
*                                                                       050290
*  PCHAR - GETS THE PREVIOUS CHAR, DOES NOT ADVANCE POINTER             050300
*          (USED FOR RE-SCANNING A CHARACTER)                           050310
*                                                                       050320
*         INPUT  -  B1 = 1                                              050330
*                   X1 = SOURCE POINTER                                 050340
*                   B6 = RETURN ADDRESS                                 050350
*                                                                       050360
*         OUTPUT -  X6 = CHARACTER, RIGHT ADJUSTED AND ZERO FILLED      050370
*               X1, X7 = UPDATED POINTER WORD (NCHAR, NNBL ONLY)        050380
*                                                                       050390
*                X6 WILL BE -1 IF THERE ARE NO MORE CHARACTERS          050400
*                                                                       050410
*         PRESERVED  X0, --, X2, --, X4, X5, --, --                     050420
*                    A0, A1, A2, --, A4, A5, A6, A7                     050430
*                        B1, --, --, B4, B5, B6, B7                     050440
*                                                                       050450
*                X1 IS ALSO PRESERVED BY PCHAR                          050460
*                                                                       050470
          SPACE  1
*CALL COM2
          SPACE  4                                                      050490
 NCHAR    SA3    X1          PICK UP WORD TO USE                        050500
          AX1    18                                                     050510
          MX6    6                                                      050520
          SB3    X1          U VALUE                                    050530
          SX7    6                                                      050540
          AX1    18          REMAINING COUNT IN X1                      050550
          LX3    X3,B3       CHARACTER TO HIGH END OF X3                050560
          IX7    X1-X7       NEW REMAINDER                              050570
          BX6    X3*X6       ISOLATE CHARACTER                          050580
          NG     X7,NCH.2    OVERFLOW, FIX UP NEEDED                    050590
          SX3    B3-54                                                  050600
          LX7    18                                                     050610
          SX1    A3                                                     050620
          NG     X3,NCH.1    STILL MORE IN THIS WORD
          SX3    -60         MOVE TO NEXT WORD                          050640
          SX1    X1+B1                                                  050650
 NCH.1    SX3    X3+60                                                  050660
          BX7    X7+X3                                                  050670
          LX7    18                                                     050680
          BX7    X7+X1       NEW POINTER WORD                           050690
          LX6    6           CHARACTER                                  050700
          BX1    X7                                                     050710
          JP     B6          EXIT                                       050720
*                                                                       050730
 NCH.2    SX7    B3          FIXUP OVERFLOW                             050740
          SX6    A3                                                     050750
          LX7    18                                                     050760
          BX7    X6+X7       POINTER WORD                               050770
          MX6    59          VALUE (-1)                                 050780
          BX1    X7                                                     050790
          JP     B6                                                     050800
* **                                                                    050810
 NNBL     SPACE  4                                                      050820
 NNBL     SB2    B6          GET NEXT NON BLANK CHARACTER               050830
          SB6    NNB.1                                                  050840
          EQ     NCHAR       NEXT CHARACTER                             050850
 NNB.1    SB3    X6-1R                                                  050860
          ZR     B3,NCHAR    BLANK
 NNB.2    SB6    B2          GOT IT, LEAVE                              050890
          JP     B6                                                     050900
* **                                                                    050910
 PCHAR    SPACE  4                                                      050920
 PCHAR    BX3    X1          GET PREVIOUS CHARACTER                     050930
          AX3    18          BIT COUNT                                  050940
          SB3    X3                                                     050950
          MX6    54                                                     050960
          ZR     B3,PCH.2    JP IF IN PREVIOUS WORD                     050970
          SA3    X1          GET WORD                                   050980
          LX3    X3,B3                                                  050990
 PCH.1    BX6    -X6*X3                                                 051000
          JP     B6                                                     051010
*                                                                       051020
 PCH.2    SA3    X1-1        LAST CHARACTER OF PREVIOUS WORD            051030
          EQ     PCH.1                                                  051040
 GETINT   TITLE  SUBROUTINE GETINT - GET INTEGER FROM SOURCE            026320
*                                                                       026330
**    GETINT - PICK UP A DISPLAY CODED INTEGER FROM SOURCE FIELD
*         USED BY PARSER                                                026350
*                                                                       026360
*         INPUT  -  B1 = 1                                              026370
*                   X1 = SOURCE POINTER                                 026380
*                   X6 = FIRST CHARACTER                                026390
*                   B6 = RETURN ADDRESS                                 026400
*                                                                       026410
*         OUTPUT -  X5 = RESULT (-0 IF NO INTEGER)                      026420
*                   X6 = NEXT CHARACTER (NON-BLANK) AFTER NUMBER        026430
*                   X7 = UPDATED SOURCE POINTER                         026440
*                                                                       026450
*     PRESERVED      X0, --, X2, --, X4, --, --, --                     026460
*                    A0, A1, A2, --, A4, A5, A6, A7                     026470
*                        B1, --, --, B4, --, B6, B7                     026480
*                                                                       026490
*         CALLS  -  NNBL                                                026500
*                                                                       026510
          SPACE  4                                                      026530
 GETINT   BX5    -X5-X5      PRESET NO INTEGER                          026540
          BX7    X1          IN CASE NONE TO GET                        026550
          SB5    B6          SAVE ADDRESS                               026560
          SB6    GETI.1                                                 026570
 GETI.1   SB2    X6-1R9-1                                               026580
          SX6    X6-1R0                                                 026590
          PL     B2,GETI.2   DONE, NOT A DIGIT                          026600
          NG     X6,GETI.2         NOT A DIGIT                          026610
          NZ     X5,GET.I3
          SX5    B0           FORCE -0 TO +0
 GET.I3   BSS    0
          IX3    X5+X5       DIGIT, ADD IT IN (*2)                      026620
          LX5    3           *8                                         026630
          IX5    X5+X6       *8 + DIGIT                                 026640
          IX5    X3+X5       *10 + DIGIT                                026650
          EQ     NNBL        GET NEXT CHARACTER                         026660
*                                                                       026670
 GETI.2   SB6    B5          DONE, RESTORE B6 AND EXIT                  026680
          SX6    X6+1R0      RESTORE X6 
          JP     B5                                                     026690
          END 
