File: PXSYMB.SB of Tape: Sources/Other/new-14
(Source file text) 

/	SUBROUTINE SYMBOL(ISYMB)

	ENTRY SYMBO

\JPLOT,	COMMN 3000
\JEXTR,	COMMN 2600	/*KLUDGE* \JPLOT REALLY STARTS AT 10000
\JCHRS,	COMMN 1400
\ICOMM,	COMMN 1
\FNAME,	COMMN 3
\IGREC,	COMMN 1
\IGCHR,	COMMN 1
\IDUDS,	COMMN 33
\IDASH,	COMMN 1
\IDSHC,	COMMN 1
\IDSHP,	COMMN 1
\X0,	COMMN 3
\Y0,	COMMN 3
\FAKTX,	COMMN 3
\FAKTY,	COMMN 3
\IFONT,	COMMN 1
\DXW,	COMMN 3
\DYW,	COMMN 3
\DXH,	COMMN 3
\DYH,	COMMN 3

	OPDEF TADI 1400
	LAP
PFONT,	\JCHRS		/ADDRESS OF SYMBOL TABLE
SCHAR,	BLOCK 1		/SYMBOL NUMBER
SPNT,	BLOCK 1		/POINTER TO SYMBOL
SWORD,	BLOCK 1		/CURRENT X,Y PAIR
\ISX,	BLOCK 1		/X SYMBOL VECTOR
\ISY,	BLOCK 1		/Y SYMBOL VECTOR
\IPEN,	BLOCK 1		/PENUP/PENDOWN
\ISXS,	BLOCK 1		/X VECTOR SIGN
\ISYS,	BLOCK 1		/Y VECTOR SIGN

	DUMMY \ISYMB
\ISYMB,	BLOCK 2
SYMBO,	BLOCK 2		/ENTRY SYMBOL
	TAD I SYMBO
	DCA \ISYMB
	INC SYMBO#	/GET ARG
	TAD I SYMBO
	DCA \ISYMB#
	INC SYMBO#
	TAD I \ISYMB
	CMA
	DCA SCHAR	/- SYMBOL -1
	DCA SKLUD	/RESET FLAG
	TAD \IFONT
	SZA CLA		/LOWER CASE FONT11 ?
	JMP SNLOC
	TAD (40
	TAD SCHAR	/LEGAL SYMBOL ?
	SMA
	JMP SBUG	/NO, MAKE BUG
	DCA SCHAR	/SHIFT TO LOWER END
SNLOC,	TAD \IFONT
	SPA SNA CLA	/CENTEREDS FONT3 ?
	JMP SNCENT
	TAD (33
	TAD SCHAR	/LEGAL SYMBOL ?
	SPA CLA
	JMP SBUG
SNCENT,	CLA IAC
	TAD \IFONT	/-1: FONT 1, 0:FONT 11, 1:FONT 3
	TAD PFONT	/SETS COMMON FIELD
	DCA SPNT	/POINTER TO FONT POINTERS
	TADI SPNT	/GET POINTER
	DCA SPNT	/SET POINTER TO FONT X
SFLP,	ISZ SCHAR
	SKP
	JMP SFND	/FOUND SYMBOL POSITION
EFLP,	TADI SPNT	/SCAN FOR END
	ISZ SPNT	/IF END FOUND, POINT AT START OF NEXT
	SMA CLA		/END = 4000
	JMP EFLP	/NOT YET
	JMP SFLP	/FOUND, RIGHT CHAR ?

SFND,	6211		/IN COMMON FIELD
	TADI SPNT	/GET XY ELEMENT
	ISZ SPNT	/AND GO TO NEXT
	DCA SWORD	/KEEP
	TAD SWORD
	TAD (-6000	/SPECIAL CENT.KLUDGE ?
	SZA CLA
	JMP SNKLU
	ISZ SKLUD	/SET FLAG FOR FINAL DOT
	JMP SFND	/AND TO NEXT CHAR
SNKLU,	TAD SWORD
	7002		/BSW
	AND (17
	DCA \ISX	/ABS X-VALUE
	TAD SWORD
	AND (17
	DCA \ISY	/ABS Y-VALUE
	TAD SWORD
	AND (40		/PEN DOWN ?
	SZA CLA
	IAC		/YES MAKE IPEN=3
	TAD (2		/NO  MAKE IPEN=2
	DCA \IPEN
	TAD SWORD
	CLL RTL		/X MINUS ?
	CLA RAR
	DCA \ISXS	/SET X SIGN
	TAD SWORD
	7002		/BSW
	CLL RTL
	CLA RAR
	DCA \ISYS	/SET Y SIGN
	TAD \IFONT
	SMA SZA CLA	/CENTEREDS ?
	JMP SCENT	/YES
	TAD \ISX	/NO, NORMAL SYMBOLS
	SPA		/X NEGATIVE ?
	CIA		/MAKE X POSITIVE ALWAYS
	DCA \ISX
SXPOS,	TAD \ISYS
	SMA CLA		/Y NEGATIVE ?
	JMP SPLOT	/NO, GO TO PLOT
	TAD \ISY
	CIA		/YES, MAKE Y -
	DCA \ISY
	JMP SPLOT
SCENT,	TAD (-7		/CENTS ARE OFFSET TO 07!07
	TAD \ISX
	DCA \ISX
	TAD (-7
	TAD \ISY
	DCA \ISY
	JMP SPLOT

	PAGE
\1000,	5063		/TEST FORMAT STATEMENT
	1165
	5100
]A,	BLOCK 3		/TEMP
IA1,	BLOCK 1
IA2,	BLOCK 1		/ARGS FOR PLOT

SPLOT,	TAD \ISX	/      SX=ISX
	CALL 0,FLOT
	CALL 1,STO
	ARG \SX

	TAD \ISY	/      SY=ISY
	CALL 0,FLOT
	CALL 1,STO
	ARG \SY

	CALL 1,FAD	/      IA1=X0+SX*DXW+SY*DXH
	ARG \DXW
	CALL 1,FMP
	ARG \SX
	CALL 1,STO
	ARG ]A
	CALL 1,FAD
	ARG \DXH
	CALL 1,FMP
	ARG \SY
	CALL 1,FAD
	ARG ]A
	CALL 1,FAD
	ARG \X0
	CALL 0,FIX
	DCA IA1

	CALL 1,FAD	/      IA2=Y0+SX*DYW+SY*DYH
	ARG \DYW
	CALL 1,FMP
	ARG \SX
	CALL 1,STO
	ARG ]A
	CALL 1,FAD
	ARG \DYH
	CALL 1,FMP
	ARG \SY
	CALL 1,FAD
	ARG ]A
	CALL 1,FAD
	ARG \Y0
	CALL 0,FIX
	DCA IA2

/	CALL 2,WRITE	/      WRITE(1,1000) IPEN,IA1,IA2
/	ARG (1
/	ARG \1000
/	CALL 1,IOH
/	ARG \IPEN
/	CALL 1,IOH	/ DEBUG WRITE ROUTINE
/	ARG IA1
/	CALL 1,IOH
/	ARG IA2
/	CALL 1,IOH
/	ARG 0
	JMP SEND
	PAGE
S15,	2047		/FOR MOVE TO NEXT POSITION
	4000
	0000
SKLUD,	0		/CENTER DOT FLAG
\SX,	BLOCK 3
\SY,	BLOCK 3

SEND,	CALL 3,PLOT	/      CALL PLOT(IPEN,IA1,IA2))
	ARG \IPEN
	ARG IA1
	ARG IA2
	TAD SWORD	/END OF SYMBOL ?
	SMA CLA
	JMP SFND	/NO, NEXT X,Y PAIR
	TAD \IFONT
	SPA SNA CLA	/CENTS ?
	JMP SNORM	/NO, ADJUST NORMALS TO NEXT CHAR
	TAD \ISYS	/YES, WAS Y - ?
	SPA CLA
	IAC		/YES, PEN DOWN
SFIN,	TAD (2		/NO, PEN UP FOR FINAL MOVE TO X0,Y0
	DCA \IPEN
	CALL 1,FAD
	ARG \X0
	CALL 0,FIX
	DCA IA1
	CALL 1,FAD
	ARG \Y0
	CALL 0,FIX
	DCA IA2
	CALL 3,PLOT
	ARG \IPEN
	ARG IA1
	ARG IA2
	TAD SKLUD	/FLAG SET ?
	SNA CLA
	JMP SRET
	TAD (3		/YES, MAKE FINAL DOT
	DCA \IPEN
	CALL 3,PLOT
	ARG \IPEN
	ARG IA1
	ARG IA2
SRET,	RETRN SYMBO

SNORM,	CALL 1,FAD	/      X0=X0+FAKTX*DXW
	ARG \DXW
	CALL 1,FMP
	ARG S15
	CALL 1,FAD
	ARG \X0
	CALL 1,STO
	ARG \X0

	CALL 1,FAD	/      Y0=Y0+FAKTY*DYW
	ARG \DYW
	CALL 1,FMP
	ARG S15
	CALL 1,FAD
	ARG \Y0
	CALL 1,STO
	ARG \Y0
	DCA SKLUD	/FORCE PENUP
	JMP SFIN

SBUG,	CLA
	TAD PFONT
	TAD (3		/SPECIAL BUG AT START OF TABLE
	DCA SPNT
	JMP SFND	/DRAW A BUG

	END