File XXNEXSYM

Directory of image this file is from
This file as a plain text file

*20
/NEXTCH ROUTINE: READS IN NEXT CHAR
/FROM SOURCE TAPE, ENTERING NEW TBLK
/AS NEEDED; SKIPS CONT MARK (47)
/SOURCE FILE BUFFERED IN 17000-17377
/B-REG. 17=HALF-WORD POINTER TO TEXT
/RETURNS WITH CHAR IN AC; CHAR CAN ALSO
/BE HAD AFTER RETURN VIA LDH 17
	PMODE
	*20
	LMODE
NEXTCH,	LDF 7
	LDA
	0
	STC RTRN1	/SET RETURN JUMP
/CHECK FOR CTRL/A: INTERRUPT IF FOUND
	KST
	JMP .+7
	IOB
	6036		/KRB
	SAE I
	201
	SKP
	JMP SYSTEM	/SYSTEM MONITOR
/CHECK FOR END OF SOURCE BUFFER - IF
/FOUND, READ IN NEXT TAPE BLOCK
	LDA
	17
	SAE I
	7377
	JMP TBLK+1
	LDA I		/NEW TBLK NEEDED
	6000
	ADD TBLK
	STC .+2		/2ND LTAPE INSTR
	RDC		/RDC OR RDC U
	0
	SET I 17	/RESET POINTER
	6777
	LDA I
	1
	ADM I		/INCR TBLK
TBLK,	0
	LDH I 17	/NEXT CHAR
	AZE I		/0=FILE END
	JMP EOFILE
	SAE I
	47		/CON"T MARK?
	JMP RTRN1-1	/CHAR O.K.
	LDA I
	1
	ADM I
SGMNT,	0		/INCR SEGMENT
	SNS 5		/PRINT IF SW 5
	JMP NEXTCH+4
	PDP
	PMODE
	JMS I CRLF
	JMS I TAB
	LINC
	LMODE
	JMP NEXTCH+4	/IGNORE CON"T
	SNS 5		/PRINT CHAR?
RTRN1,	HLT		/RETURN JUMP
	PDP
	PMODE
	TAD M40
	SPA
	TAD C100
	TAD C240
	JMS I TIPE
	LINC
	LMODE
	LDH 17		/RESTORE CHAR
	JMP RTRN1
/INITIALIZATION REQUIRED:
/SET TBLK=STARTING TAPE BLOCK OF SOURCE
/SET 17=6001 AND READ IN FIRST TBLK
/SET RDC OR RDC U AT TBLK-7
/
/TEMPORARY CHECKOUT SECTION BELOW
SYSTEM,	HLT
EOFILE,	HLT
	PMODE
M40,	-40
C100,	100
C240,	240
TIPE,	TYPE
TYPE,	0
	TLS
	TSF
	JMP .-1
	CLA
	JMP I TYPE
CRLF,	CARRET
CARRET,	0
	CLA
	TAD C212
	JMS I TIPE
	TAD C215
	JMS I TIPE
	JMP I CARRET
C212,	212
C215,	215
TAB,	TABOUT
TABOUT,	0
	CLA
	TAD C311
	JMS I TIPE
	JMP I TABOUT
C311,	311
/NEXSYM SUBR: READS NEXT SYMBOL FROM
/SOURCE (VIA NEXTCH) AND LEAVES IT IN
/SYMBUF ON UP IN PACKED ASCII FORM WITH
/A TRAILING 00.  A SYMBOL IS EITHER AN
/IDENTIFIER (SYMCOD=1), A SINGLE CHAR OP/(+-,:*^/><;)( ETC SYMCOD=0), A NUMERICL
/CONSTANT (NOT EVALUATED BY NEXSYM, JUST
/SAVED AS CHAR STRING, SYMCOD=-2,-3,-4)
/TEXT CONSTANT (".....", SYMCOD=-1)
/DEPENDING ON WHETHER THE TERMINATOR FOR
/THE SYMBOL WAS (POSSIBLY) PART OF THE
/NEXT SYMBOL, IN WHICH CASE IT MUST BE
/SAVED (SAVECH>0 VIA EXIT2) OR NOT
/(SAVECH=0 VIA EXIT1)
	LMODE
NEXSYM,	LDA
	0
	STC RTRN2	/SETUP RET.JUMP
	SET I 10
	SYMBUF-4000	/AD-1/2 SYMBOL
	LDA I
SAVECH,	0		/LEAD CHAR YET
	AZE I		/DECODED?
	JMP NEXTCH	/NO: FETCH IT
	ADA I
LM32,	-32
	APO I		/=LETTER?
	JMP RTRN2+1	/NOT LEAD LETTER
	ADA I
C32,	32		/RESTORE CHAR
	SKP		/SYMBOL IS IDENT
ID,	LDH 17		/RESTORE CHAR
	JMP STOSYM	/SAVE IT
	JMP NEXTCH	/GET NEXT CHAR
	ADD LM32
	APO		/LETTER?
	JMP ID		/YES:STILL IN ID
	ADA I
LM26,	-26
	APO		/DIGIT? TEST 1
	JMP EXIT2-2	/NO END OF ID
	ADA I
LM10,	-10
	APO		/DIGIT?TEST 2
	JMP ID		/YES:STILL IN ID
/END OF IDENT.:STORE SYMCOD=1 AND RETURN/VIA EXIT2, SAVING CURRENT CHAR AS LEAD
/CHAR FOR NEXT SYMBOL IN SAVECH
	LDA I
C1,	1
EXIT2,	STC SYMCOD
	LDH 17
	STC SAVECH
	JMP STOSYM	/SAVE TRAILING 0
RTRN2,	HLT		/RETURN JUMP
/LEAD CHAR NOT LETTER: NOT AN IDENT.
/CHECK FOR NUMERICAL CONSTANT, TEXT
/CONSTANT, OR SINGLE CHAR OP
	ADD LM26
	APO		/DIGIT TEST 1
	JMP  C60-1
	ADD LM10	/TEST 2
	APO
	JMP CONST-2	/DIGIT:ENCODE
/STILL MIGHT BE CONST IF LEADING "."
	ADA I		/RESTORE AC
C10,	10		/AFTER TEST 2
	ADA I
C60,	60		/AFTER TEST 1
	SHD I
	5600		/PERIOD?
	JMP CONST
/NOT A NUM. CONST;WILL BE TEXT CONS IF "
	SAE I
	42		/QUOTE
	JMP OPCHAR	/MUST BE OP CHAR
/ITS A TEXT CONSTANT;STORE EVERYTHING
/BETWEEN QUOTES (BUT NOT QUOTES)
EQUOTE,	JMP NEXTCH
	SHD I
	4200		/QUOTE
	JMP EXIT1-2
	JMP STOSYM
	JMP EQUOTE
	LDA I
	-1		/QUOTE CODE
EXIT1,	STC SYMCOD
	JMP RTRN2-2	/SAVECH=0,EXIT
/SECTION ENCODES (BUT DOES NOT EVALUATE)
/NUMERICAL CONSTANTS.  ENTER AT CONST-2
/OCCURS WITH LEAD DIGIT, AT CONST WITH
/LEAD "." STRING OF DIGITS FOLLOWED BY
/"O" = OCTAL INTEGER; COSTANT FOLLOWED
/BY "E" IS INTERPRETED IN EXP. FORMAT
	ADA I		/RESTORE AC
C70,	70
CONST,	JMP STOSYM	/SAVE CHAR
	JMP NEXTCH
	ADA I
LM60,	-60
	APO		/DIGIT TEST 1
	JMP .+6	
	ADD LM10
	APO I		/TEST 2
	JMP .+3
	LDH 17		/IS DIGIT:RESTOR
	JMP CONST
	LDH 17		/RESORE CHAR
	SHD I		/NOT DIGIT:="."?
	5600
	JMP CONST
	SHD I		/= "E"?
	0500
	JMP LM3-1	/EXP. FORM. CON.
	SHD I
	1700		/= "O"?
	JMP LM4-1	/OCTAL INTEGER
/CHAR NOT DIGIT,".","O","E":MUST BE END
/OF SYMBOL;MUST TAKE EXIT2 (SAVECH>0)
/WITH SYMCOD=-2 (NORMAL CONSTANT)
	LDA I
LM2,	-2
	JMP EXIT2
/EXPONENTIALLY FORMATTED CONSTANT;EXP.
/PART READ UNDER SUBSEQUENT CONTROL
	LDA I
LM3,	-3
	JMP EXIT1	/DONT SAVECH
/OCTAL CONSTANT (INTEGER): SYMCOD=-3
	LDA I
LM4,	-4
	JMP EXIT1	/DONT SAVECH
/PROGRAM GETS HERE ONLY IF SYMBOL IS
/SINGLE-CHAR OPERATOR
OPCHAR,	JMP STOSYM	/SAVE IT
	CLR		/SYMCOD=0
	JMP EXIT1	/DONT SAVECH
/SUBR STORES PACKED ASCII CHAR AS PART
/OF CURRENT SYMBOL ARRAY. POINTER IS
/B-REG 10
STOSYM,	STH I 10
	LDA
	10
	SAE I
	SYMBUF+20	/CURRENT LIMIT
	JMP		/ON CHARS/SYMBOL
	DJR		/SAVE TRACE
	JMP SYMERR	/TOO MANY CHARS
/NOTE: SYMBUF+20 MEANS LIMIT=40 CHARS/
SYMERR,	HLT
SYMCOD,	0
SYMBUF,	0
/
/
/
/FOLLOWING SECTION IS TEMPORARY FOR
/DEBUGGING PURPOSES
	*SYMBUF+100
START,	CLR
	LDF 7
	RSW
	ADA I
	6000
	STC .+2
	RDC U
	0
	SET I 17
	7001
	RSW
	ADA I
	1
	STC TBLK
SYMBOL,	JMP NEXSYM
	PDP
	PMODE
	JMS I CRLF
	LINC
	LMODE
	SET I 10
	SYMBUF-4000
CHR,	LDA I
	JMP CHTEST
	STC RTRN1
	LDH I 10
	JMP RTRN1+1
CHTEST,	LDH 10
	AZE
	JMP CHTEST-2
	ADD C240
	STC 1
	ADD SYMCOD
	ADA I
C265,	265
	STC 2
	PDP
	PMODE
	TAD 1
	JMS I TIPE
	TAD 2
	JMS I TIPE
	LINC
	LMODE
	JMP SYMBOL



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search