*DECK,INIT16
          IDENT  INIT16 
          TITLE  INIT16 - CALL SYMPL SYNTAX ANALYZER
          COMMENT  INIT16 - CALL SYMPL SYNTAX ANALYZER
          SST 
          LIST   F
          SPACE  4
          SPACE  4
          ENTRY  INIT16 
 INIT16   BSS    0
          RJ     =XANZS 
          WRITER =XF.ILN,,R 
          WRITER =XF.PST,,R 
          WRITER =XF.CRF,,R 
          JP     =XAFTPH16   RETURN TO PHASE10
*CALL PUTIL 
          TITLE  PTCRF - PUT TO CROSS REFERENCE FILE (CRF)
**        PTCRF - PUT TO CROSS REFERENCE FILE (CRF) 
* 
*         THIS IS THE INTERFACE ROUTINE THROUGH WHICH A SYMPL PROGRAM 
*         WRITES FROM A WORKING STORAGE BUFFER TO CRF.  THE SYMPL 
*         CALLING SEQUENCE IS-
*                XREF PTCRF;
*                PTCRF (BUF,NWDS);
*                WHERE
*                BUF = WORKING STORAGE BUFFER 
*                NWDS = NUMBER OF WORDS IN BUF
*         HENCE THE REGISTER SETUP ON ENTRY IS- 
*                A1 = POINTER TO APLIST 
*                X1 = FWA OF BUF
* 
  
          PUTSQ  CRF
          SPACE  4
**        PTPST - PUT TO PRESET FILE (PST)
* 
*         THIS IS THE INTERFACE ROUTINE THROUGH WHICH A SYMPL PROGRAM 
*         WRITES FROM A WORKING STORAGE BUFFER TO PST.  THE SYMPL 
*         CALLING SEQUENCE IS-
*                XREF PTPST;
*                PTPST (BUF,NWDS);
*                WHERE
*                BUF = WORKING STORAGE BUFFER 
*                NWDS = NUMBER OF WORDS IN BUF
*         HENCE THE REGISTER SETUP ON ENTRY IS- 
*                A1 = POINTER TO APLIST 
*                X1 = FWA OF BUF
* 
  
          PUTSQ  PST
          TITLE  NXTCHR - GET NEXT CHAR FROM SOURCE CARD
**        NXTCHR - GET NEXT CHAR FROM SOURCE CARD 
* 
* 
*  THE GENERAL REGISTER ALLOCATION IS AS FOLLOWS
* 
*        A                   X                   B
* 
*  0                         -6                  0
*  1                                             1
*  2     _CWORDP             (CWORDP) 
*  3
*  4
*  5                         (BLANKC) 
*  6                         (CCHAR)             6
*  7                         (CSTAKP)            FNEXT=0,SNEXT=1
* 
* 
 NXTCHR   ENTRY. ** 
          RJ     SNEXT
 AAA      SA1    CSTAKP 
          SX7    X1+1        SET UP FOR RESCAN
          SA7    A1 
          EQ     NXTCHR 
          SPACE  4
 RSNEXT   BSS    0
          SA6    CCHAR
          SA7    CSTAKP 
 SNEXT    ENTRY. **          THIS ENTRY DOES NOT THROW AWAY BLANKS
          SB7    1
          EQ     FN0
          SPACE  4
 RFNEXT   BSS    0
          SA6    CCHAR
          SA7    CSTAKP 
 FNEXT    ENTRY. **          THIS ENTRY THROWS AWAY ALL BLANKS
          SA5    BLANKC 
          SB7    B0 
* 
 FN0      BSS    0
          SA1    CSTAKP 
          SB1    1
 AAAA     BSS    0
          ZR     X1,WRDNXT   IF CHAR STACK EMPTY
          SX7    X1-1 
* 
 FNXT1    BSS    0
          SA3    X7+CSTAK    PICK UP NEXT CHAR
          MI     X3,FNXT1.5  TEST IF CHAR FROM DEF, SET DEFCHR
          MX6    0           NOT FROM DEF, CLEAR DEFCHR 
          EQ     FNXT2       STORE AT FNXT2 
 FNXT1.5  BSS    0
          MX6    1           MASK OFF DEF BIT 
          BX3    -X6*X3 
          LX6    1           SET DEFCHR 
 FNXT2    BSS    0
          SA6    DEFCHR 
          BX6    X3 
 AAAB     BSS    0
          EQ     B7,B1,RSNEXT 
          BX4    X6-X5       CHECK FOR BLANK
          NZ     X4,RFNEXT
          SX1    X7 
          EQ     AAAA        THROW AWAY BLANK 
  
*         UNPACK NEXT WORD FROM SOURCE CARD IMAGE INTO CHAR STACK 
  
 WRDNXT   BSS    0           GET NEXT WORD
          SB6    6
          SA2    CWORDP 
          SX0    -B6
 AAAC     BSS    0
          IX3    X2+X0
          SX2    X2+B1       INCREMENT WORD POINTER 
          PL     X3,CCC      IF WORD 8 OF CARD IMAGE (COLS. 71-72)
* 
 WRDTST   BSS    0
          SA3    X2+CWORDV
          EQ     B7,B1,BBB
          SA4    BLANKW      CHECK FOR WORD OF BLANKS 
          BX4    X4-X3
          ZR     X4,AAAC     THROW AWAY WORD OF BLANKS
 BBB      BSS    0
          MX4    6
          BX6    X2          SAVE CWORDP
          LX4    X4,B6
          SA6    A2 
          BX7    X3*X4       STORE AWAY CHARACTERS
          AX3    X3,B6
          SA7    CSTAK
          BX6    X3*X4
          AX3    X3,B6
          SA6    A7+B1
          BX7    X3*X4
          AX3    X3,B6
          SA7    A6+B1
          BX6    X3*X4
          AX3    X3,B6
          SA6    A7+B1
          BX7    X3*X4
          AX3    X3,B6
          SA7    A6+B1
          BX6    X3*X4
          AX3    X3,B6
          SA6    A7+B1
          BX7    X3*X4
          AX3    X3,B6
          SA7    A6+B1
          BX6    X3*X4
          AX3    X3,B6
          SA6    A7+B1
          BX7    X3*X4
          AX3    X3,B6
          SA7    A6+B1
          BX6    X3*X4
          SX7    9
          SA6    A7+B1
          EQ     AAAB 
  
 CCC      BSS    0           LAST WORD OF LINE
          NZ     X3,EEE 
          SA3    X2+CWORDV
          EQ     B7,B1,DDD
          SA4    BLANK2C
          MX6    12 
          BX3    X3*X6
          BX4    X4-X3       CHECK FOR TWO BLANKS 
          ZR     X4,EEE      THROW AWAY THE BLANKS
 DDD      BSS    0
          MX4    6
          BX7    X2          SAVE CWORDP
          LX3    X3,B6
          SA7    A2 
          LX4    X4,B6
          BX6    X3*X4
          LX3    X3,B6       STORE AWAY CHARACTERS
          BX7    X3*X4
          SA7    CSTAK
          SA6    A7+B1
          SX7    B1 
          EQ     AAAB 
  
 EEE      BSS    0           END OF LINE
          SA1    PARML
          SX7    B7 
          MX6    59 
          SA7    SAVEB7 
          SA6    CWORDP 
          RJ     =XGTSRC
          SA3    SAVEB7 
          SB1    1
          SB7    X3 
          SA5    BLANKC 
          EQ     WRDNXT 
          SPACE  4
          USE    /SYMPL/
 CCHAR    BSS    1
 CSTAKP   BSS    1
 CWORDP   BSS    1
 CSTAK    BSS    1
          USE    *
          USE    /CRDCOM/ 
          BSS    2
 CWORD    BSS    0
 CWORDV   BSS    1
          USE    *
 DEFCHR   ENTRY. 0                 F/SNEXT SETS TRUE IF CSTAKD TRUE      INIT16C
 DEFINT   ENTRY. 0                 SPRECG SETS TRUE IF DEFCHR TRUE       INIT16C
 BLANKC   DATA   1R 
 BLANKW   DATA   10H
 BLANK2C  DATA   2L 
 SAVEB7   BSS    0
 PARML    VFD    60/CWORD 
          VFD    60/=XFNEOF+1       .SKIP RJ WORD OF FNEOF
          END    INIT16 
