File: TECNUM.MA of Disk: V50/Source/Source-Listing-MAC-2
(Source file text) 

/4 TECO NUMBER PROCESSOR V50

/ 08-APR-79	FIXED 8BIT BUG

	.ENABLE 7BIT

	.MACRO	.ERROR	ERNUM
	.GLOBAL ERR'ERNUM
ERR'ERNUM:	ERR
	.ENDM

	.MACRO	.SORT	ARG1,ARG2
	SORT;	ARG1;	ARG2-ARG1
	.ENDM

	.GLOBAL CCPR,COPR,CDOT,TSTD,VT05A,NMBR
	.GLOBAL CAMP,CNBS,CVIR,CAST,CMIN,CPLS
	.GLOBAL CTL.UA,CTL.CB,NCOMCL,CCLN,ESCAPE,CHR.F
	.GLOBAL NCOM,NRET,NMBR2,NMRBAS,NP,SCHTAB

	.EXTERNAL ERR,NCHK,POPL,GETNUM,PUSHL,POPJ,PUTT,SORT
	.ZTERNAL CHAR,ZM60,NMT,N,NLINK,Z11,NFLG
	.ZTERNAL P,ZM12,Z7770,CLNF,CAAM
	.EXTERNAL SCAN,MQLDVI,SCANUP
	.EXTERNAL SCHINV,SCHSEP,CSWT1,SCHCTQ,SCHCTE,SCHUPA
	.EXTERNAL CHR.FN,CHR.FS,CHR.FB

	MTWO=STA CLL RAL
	MTHREE=STA CLL RTL

	.SBTTL	Cmd 0
	.SBTTL	Cmd 1
	.SBTTL	Cmd 2
	.SBTTL	Cmd 3
	.SBTTL	Cmd 4
	.SBTTL	Cmd 5
	.SBTTL	Cmd 6
	.SBTTL	Cmd 7
	.SBTTL	Cmd 8
	.SBTTL	Cmd 9

	.ASECT TECNUM

	*1200

NMBR,	TAD	CHAR	/NUMBER FOUND IN COMMAND STRING
	TAD	ZM60
NMBR2,	DCA	NMT
	CLL
	NCHK		/CHECK NUMBER FLAG
	JMP	NNEW	/NOT UP, NEW OPERAND
	TAD	DOPR
	DCA	NOPR	/USE SAME OPERATOR AS FOR THE PREVIOUS DIGITS
	TAD	NP	/MULTIPLY PREV DIGITS BY 10
	CLL RTL
NMRBAS,	TAD	NP	/REPLACED BY "NOP" FOR OCTAL
	CLL RAL		/** COULD CHECK FOR OVERFLOW IN THIS AREA
NNEW,	TAD	NMT
NCOM,	DCA	NP	/CURRENT NUMBER
	TAD	NP

NOPR,	SKP		/DISPATCH JUMP FOR OPERATOR
	CML CIA
	TAD	NACC	/CURRENT EXPRESSION VALUE
	DCA N
	RAL
	TAD	NACCLK	/ADD IN OLD LINK
	RAR
NSKIP,	SKP		/*WM
NRET,	DCA	N
	CLA RAL		/*WM
	DCA	NLINK	/SAVE LINK FOR POSSIBLE COMPARISON TEST
	TAD	NOPR
	DCA	DOPR
	TAD	NULLOP
	DCA	NOPR	/SET OPERATOR TO NULL OP
	STA
	JMP	DCPOPJ	/SET NUMBER FLAG AND EXIT

	.SBTTL	Cmd )

CCPR,	STL CLA RTL	/2
	POPL
		NOPR
		NACC
		NACCLK
	GETNUM
	JMP	NCOM	/COMBINE OLD NUMBER AND PARENTHESIZED RESULT

	.SBTTL	Cmd (

COPR,	MTHREE
	PUSHL
		NACCLK
		NACC
		NOPR
	DCA	N
	DCA	NLINK
	JMP	CPLS	/CLEAN OUT INSIDE PARENS

	.SBTTL	Cmd .

CDOT,	TAD	P	/COMMAND .
/** COULD CAUSE ERROR IF NFLG SET
	JMP	NCOMCL
/NEWLNK,	0

/SKIP IF DIGIT

TSTD,	0
	TAD	ZM60
	CLL
	TAD	ZM12
	SNL CLA
	ISZ	TSTD
	JMP I	TSTD


	.SBTTL	Cmd &
	.SBTTL	Cmd #
	.SBTTL	Cmd /
	.SBTTL	Cmd *
	.SBTTL	Cmd -
	.SBTTL	Cmd +

CAMP,	MTWO				/*K* LOGICAL AND **
CNBS,	TAD	(NIOR-NDIV		/LOGICAL OR
CVIR,	TAD	Z11			/DIVISION
CAST,	TAD	(NMPY&177+5200-7400	/MULTIPLICATION
CMIN,	TAD	Z7770			/SUBTRACTION
CPLS,	TAD	NSKIP			/ADDITION
	DCA	NOPR	/COMMON TO ALL NUMERIC OPERATORS
	TAD	N
	DCA	NACC
	TAD	NLINK
	DCA	NACCLK
	DCA	NP
DCPOPJ,	DCA	NFLG	/CLEAR NUMBER FLAG
	POPJ

NAND,	AND	NACC	/BITWISE AND OF BINARY NUMBERS
	JMP	NRET	/** KEEP THESE TWO OPNS TOGETHER
NIOR,	CMA		/BITWISE OR OF BINARY VALUES
	AND	NACC
	TAD	NP
NULLOP,	JMP	NRET

NACCLK,	0		/LINK OF EXPRESSION WITHOUT NP
NMPY,	CIA		/*** REALLY OUGHT TO IMPLEMENT 13-BIT MULTIPLY
	DCA	ND
	TAD	NACCLK
	CLL RAR		/SET UP OLD LINK
	TAD	NACC
	ISZ	ND
	JMP	.-2
	JMP	NRET
NACC,	0		/VALUE OF EXPRESSION WITHOUT NP
NDIV,	DCA	ND
	TAD	NACC
	MQLDVI
ND,	0
	JMP	NRET

CTL.UA,	SCAN		/^^ COMMAND - VALUE OF NEXT CHAR IN COMMAND LINE
NCOMCL,	CLL
	JMP	NCOM	/GO INTO NUMBER PROCESSOR

DOPR,	0		/PREVIOUS OPERATOR
NP,	0		/VALUE OF CURRENT NUMBER

/SEARCH STRING MODIFIERS ^N,^Q,^S, AND ^X

	S.NOT==SCHINV&177+5200
	S.SEP==SCHSEP&177+5200
	S.ANY==CSWT1&177+5200

SCHTAB,	S.NOT		/^N: ANYTHING BUT
	SCHCTQ		/^Q: LITERALLY
	S.SEP		/^S: ANY SEPARATOR
	S.ANY		/^X: ANYTHING
	SCHCTQ		/^R
	SCHCTE		/^E
	SCHUPA		/^	(MUST BE LAST ENTRY)

	.SBTTL	Cmd :

CCLN,	STA
	DCA	CLNF
	POPJ

ESCAPE,	0
	TAD	CAAM	/TYPE ESCAPE
VT05A,	PUTT
	TAD I	ESCAPE
	PUTT		/TYPE ARGUMENT
	JMP I	ESCAPE	/OK TO RETURN TO ARGUMENT

	.SBTTL	Cmd ^]	*WM

CTL.CB,	KSF		/IS THERE INPUT WAITING? *VT52 CIF CDF 30
	STL STA		/IF NO INPUT -1		 *VT52 JMP I .+1
	JMP	NCOM	/IF INPUT =0		 *VT52 VTCCB

	.SBTTL	Cmd F

FTAB,	CHR.FN
	CHR.FS
	CHR.FB
FLST,	"N		/FN
	"S		/FS
	"_		/F_

CHR.F,	SCANUP		/COMMAND F
	.SORT	FLST,FTAB
	.ERROR	31	/BAD F COMMAND
	PAGE