SPL,L,M,O,T,C 
!  11/14/75 REV C 
       NAME SCNMN(8)
! 
! SCANNER MAIN MODULE, CONTAINING:
!   SCAN: SCAN FUNCTION CALLED BY COMPILER EXEC 
!   INCC,DECC,GENRT,DELET ROUTINES TOBE PASSED TO 
!     THE PARSING ALGORITHM (NOT GLOBAL). 
! 
       LET P.ARS,STPRG,DIAG,EXEC BE SUBROUTINE, EXTERNAL
       LET ISTR,DCP,SEG BE FUNCTION, EXTERNAL 
       LET IWP,ICP,STAK BE PSEUDO, EXTERNAL 
       LET SCGRM,CCPTR,CHAR,SOURC,SPTR BE INTEGER,EXTERNAL
SCAN:  SUBROUTINE GLOBAL
       CCPTR_ISTR(CCODE)
       P.ARS(@SCGRM,@GENRT,@INCC,@DECC) \ 
                    ?[GO TO FAIL] 
       CALL STPRG(SOURC)
       RETURN 
! 
FAIL:  CHAR_ICP(SPTR); GOTO DIAG5 
       END SCAN 
! 
INCC:  SUBROUTINE GLOBAL
       CHAR_ICP(SPTR)?(0) 
       RETURN 
       END INCC 
  
!  DIAGNOSTIC CODE 5: ILLEGAL CHARACTER, OR NO CR/LF
DIAG5: CALL DIAG(5,CHAR)
! 
DECC:  SUBROUTINE GLOBAL
       CHAR_DCP(SPTR,SOURC) 
       RETURN 
       END DECC 
! 
GENRT: SUBROUTINE(STKP,P,G,V) 
       LET STKP,P,G,V BE INTEGER
       S_STKP 
       ASTR_0 
       STAK(ASTR)_100000K 
       ALWAYS DO[PTOP_STAK(S);GTOP_STAK(S); \ 
                 VTOP_STAK(S); \
                 IFNOT P=PTOP THEN GO TO GENR1; \ 
                 STAK(ASTR)_VTOP] 
GENR1: $(SEG($GTOP))(ASTR,CCODE,V)
       P_PTOP 
       G_GTOP 
       STKP_S 
       RETURN 
       END GENRT
! 
       END
       END$ 
                                                                                                                              