Google
 

Trailing-Edge - PDP-10 Archives - decuslib10-01 - 43,50075/scan.mac
There are 38 other files named scan.mac in the archive. Click here to see a list.
00100	TITLE SCAN -- GENERAL PURPOSE ADAPTER FOR LISP SCANNER
00200	
00300	;		MODIFIED JULY 6,1972 TO PERMIT:
00400	;		  1)  SLASHIFIED COMMENT-CHAR.
00500	;		  2)  COMMENT-CHAR AS LETTER W/I STRING.
00600	
00700	
00800	A=1
00900	B=2
01000	C=3
01100	T=6
01200	R=13
01300	P=14
01400	
01500	CR=15
01600	LF=12
01700	TAB=11
01800	
01900	IGCRLF=32
02000	INUM0=577777
02100	
02200	EXTERNAL CHRTAB,IGSTRT,RATOM,OLDCH,FIX1A,NOINFG,SCNVAL,TYI
02300	
02400	INTERNAL SCAN,UNTYI,SCANSET,SCANRESET,SCANINIT,LETTER,IGNORE,DISIGNORE
02500	
02600	
02700	TYID=	TYI+11
02800	RATAB=	RATOM+7
02900	IDTAB=	RATOM+60
03000	RDFLD=	IGSTRT+7
03100	
03200	
03300	OLDSCN:	IGCRLF			;IGSTRT
03400		LF			;IGEND
03500		POINT 4,CHRTAB(A),5	;RATFLD
03600		POINT 2,CHRTAB(A),10	;STRFLD
03700		POINT 3,CHRTAB(A),13	;IDFLD
03800	
03900	IGST2:	0			;IGSTRT
04000	IGEND2:	0			;IGEND
04100	RATF2:	POINT 4,CHRTAB(A),29	;RATFLD
04200	STRF2:	POINT 2,CHRTAB(A),31	;STRFLD
04300	IDF2:	POINT 3,CHRTAB(A),34	;IDFLD
04400	
04500	SCANINIT: SUBI	A,INUM0
04600		SUBI	B,INUM0
04700		SUBI	C,INUM0
04800		SUBI	C+1,INUM0
04900		SUBI	C+2,INUM0
05000		MOVEM	A,IGST2		;IGSTRT
05100		MOVEM	B,IGEND2	;IGEND
05200		PUSH	P,C		;STRBEG
05300		PUSH	P,C+1		;STREND
05400		PUSH	P,C+2		;SLASHIFY
05500		MOVEI	B,2
05600		MOVEI	C,3
05700		MOVEI	A,176
05800		DPB	B,RATF2
05900		DPB	C,STRF2
06000		DPB	B,IDF2
06100		SOJG	A,.-3
06200		MOVE	A,[XWD	"A"-"Z"-1,"A"]
06300		MOVEI	B,5
06400		MOVEI	C,4
06500		DPB	B,RATF2
06600		DPB	C,IDF2
06700		AOBJN	A,.-2
06800		MOVE	A,[XWD	"a"-"z"-1,"a"]
06900		DPB	B,RATF2
07000		DPB	C,IDF2
07100		AOBJN	A,.-2
07200		MOVE	A,[XWD	"0"-"9"-1,"0"]
07300		MOVEI	B,8
07400		DPB	B,RATF2
07500		DPB	C,IDF2
07600		AOBJN	A,.-2
07700		POP	P,A		;SLASHIFY
07800		MOVEI	B,3
07900		DPB	B,IDF2
08000		DPB	C,RATF2
08100		POP	P,A		;STREND
08200		MOVEI	B,2
08300		DPB	B,STRF2
08400		POP	P,A		;STRBEG
08500		MOVEI	B,9
08600		DPB	B,RATF2
08700		MOVE	A,IGST2		;COMMENT-CHAR REMAINS A LETTER IN STRING.
08800		MOVEI	B,0
08900		DPB	B,RATF2
09000		DPB	B,IDF2
09100		MOVEI	A,0		;NULL
09200		MOVEI	B,1
09300		DPB	B,RATF2
09400		DPB	B,IDF2
09500		DPB	B,STRF2
09600		MOVEI	A,"."
09700		MOVEI	B,7
09800		DPB	B,RATF2
09900		JRST	FALSE
10000	
10100	SCANSET:
10200		MOVE	A,[XWD IGST2,IGSTRT]
10300		MOVE	B,[PUSHJ P,TYID]
10400		JRST	..SET
10500	SCANRESET:
10600		MOVE	A,[XWD OLDSCN,IGSTRT]
10700		MOVE	B,[PUSHJ P,TYI]
10800	..SET:	MOVEM	B,RATAB+4	;MODIFY RATAB &
10900		MOVEM	B,IDTAB+3	;	IDTAB.
11000		BLT	A,IGSTRT+4
11100	FALSE:	MOVEI	A,0
11200		POPJ	P,
11300	
11400	
11500	LETTER:	SUBI	A,INUM0
11600		MOVEI	B,5
11700		MOVEI	C,4
11800		DPB	C,IDF2
11900	LET2:	DPB	B,RATF2
12000		JRST	FALSE
12100	
12200	
12300	DISIGNORE:
12400		SKIPA	B,[2]		;A DELIMITER, NOT A LETTER.
12500	IGNORE:	 MOVEI	B,3
12600		SUBI	A,INUM0
12700		JRST	LET2
12800	
12900	
13000	SCAN:	SETOM	NOINFG
13100		PUSHJ	P,RATOM
13200		 SKIPA
13300		  PUSHJ	P,FIX1A
13400		MOVEM	A,SCNVAL
13500		MOVEI	A,INUM0(R)
13600		POPJ	P,
13700	
13800	UNTYI:	SUBI	A,INUM0
13900		MOVEM	A,OLDCH
14000		JRST	FIX1A
14100	
14200	END