File: PLOTIT.RA of Tape: Various/Decus/decus-4
(Source file text) 

/	8-MODE SUBROUTINE PLOTIT (UNIT)
/
/BACKGROUND PLOTTING ROUTINE FOR FORTRAN IV.
/
/WRITTEN BY:
/	R. W. PHELPS
/	DEPT. RAD. BIOL. & BIOPHYSICS
/	UNIVERSITY OF ROCHESTER MEDICAL CENTER
/	ROCHESTER, NY  14642
/
/	SEPT., 1974
/
/	MODIFIED 4/75
/	MODIFIED 8/75
/	INTERRUPT DRIVEN DISK HANDLER REMOVED, 4/76
/
/CALLING SEQUENCE:
/	EXTERNAL PLOTIT, PDONE
/	CALL MODE8 (PLOTIT, UNIT)
/
/	DATA WILL BE PLOTTED FROM UNIT <UNIT>
/	<PDONE> WILL BE SET TO NON-ZERO WHEN THE PLOT IS COMPLETE.
/
/
FIELD1	PLOTIT
/
/INITIALIZE AND START PLOTTING FROM UNIT
/
	0
	CLA IAC
	TAD PLOTIT
	DCA PNTR
	RDF		/SET FIELDS FOR RETURN
	TAD #CDFCIF
	DCA EXIT
	RDF
	TAD #CDF
	DCA .+4
	CDF 10
	DCA% #PDONE+1	/INDICATE PLOTTER BUSY
	DCA% #PDONE
	HLT		/CDF CALLING FIELD
	TAD% PNTR	/GET UNIT
	SNA		/IF UNIT = 0, CONTINUE
	JMP CNTU
	CLL RTL		/MULT BY 9
	RAL
	TAD% PNTR
	TAD LDSRN
	DCA PNTR
/
/	MAKE SURE USER DECLARED A UNIT
/
#CDF,	CDF 0
	CLL
	TAD% PNTR	/GET ENTRY POINT
	TAD M7607
	CIF 0
	SNL CLA
	JMP% UE
	CIF 10
INPL1,	TAD% PNTR	/GET EP IF IOF HANDLER
	DCA DISK	/SET ENTRY POINT OF HANDLER
	ISZ PNTR
	ISZ PNTR	/SKIP HANDLER CODE WORD
	ISZ PNTR
	ISZ PNTR	/SKIP CHARACTER POINTER
	ISZ PNTR	/SKIP CHARACTER COUNTER
	TAD% PNTR	/GET STARTING BLOCK
	SNA		/FILE DECLARED?
	HLT		/NO!
	DCA BLOCK
/
	ISZ PNTR
	ISZ PNTR	/SKIP CURRENT BLOCK
	TAD% PNTR	/GET LENGTH OF FILE
	CMA
	DCA NOBLKS
/
	CMA
	DCA KNTR	/SET TO SIGNIFY NO WORDS LEFT
/
/PUT PLOTTER INTERRUPT INTO INTERRUPT CHAIN
/
FIRST0,	SKP
	JMP FIRST1+1
	CDF 10
	JMS% #ONQI+1
	  6501
	  ADDR PLOTINT
/
FIRST1,	DCA FIRST0	/ONLY EXECUTE THIS ONCE
/
/START PLOT
/
	6506		/NOP FOR PLOTTER TO GENERATE FIRST INTERRUPT
EXIT,	HLT		/CIF INSTRUCTION
	JMP% PLOTIT
/
#CDFCI,	CIF CDF
DSRN=4244
LDSRN,	DSRN-11
PNTR,	0
M7607,	-7607		/ENTRY POINT FOR SYS:
K12,	12
K200,	200
NOBLKS,
EXTERN	ONQI
#ONQI,	ADDR ONQI
	EXTERN #UE
DISK,	ADDR #UE
UE=.-1
K7400,	7400
K70,	70
KNTR,	0


M377,	-377
WKNTR,
#X,	ADDR X
BPNTR,
#PLOT,	ADDR PLOT
PLNEXT,	CLA CMA CLL RTL	/-3 => AC
	DCA WKNTR	/WORDS TO READ EACH VECTOR
	TAD #X+1	/LOCATION OF PARAMETERS FOR DISK
	DCA BPNTR
PLL1,	ISZ KNTR	/MORE WORDS IN BUFFER?
	JMP PLL2	/YES
	ISZ NOBLKS	/NO READ MORE - MORE BLOCKS?
	SKP		/YES
	HLT		/PLOT NOT TERMINATED, PROBABLY GARBAGE
		CIF 0
	JMS% DISK	/READ THEM
WORD,	  ADDR PLBUFR
CORE=	  .-1
BLOCK,	  -1
	ORG WORD
	  210
	ORG BLOCK+1
	HLT		/DISK ERROR!
	ISZ BLOCK	/INCREMENT TO NEXT BLOCK
	TAD CORE
	DCA PNTR
	TAD M377	/NUMBER OF WORDS READ
	DCA KNTR
/
PLL2,	
DFLD,	CDF 10		/FIELD OF BUFFER
	TAD% PNTR
	CDF 10		/RESTORE FIELD
	DCA% BPNTR
	ISZ PNTR
	ISZ BPNTR
	ISZ WKNTR
	JMP PLL1
/
	JMS% #PLOT+1	/OUTPUT NEXT COMMAND
X,	  -1
Y,	  -1
PEN,	  -1
	SZA
	DCA KNTR	/SKIP REST OF BLOCK IF AC=7777
	JMP PLNEXT
/
CNTU,	CMA 
	DCA KNTR	/CONTINUE LAST PLOT, 
	CMA		/REREAD LAST BLOCK
	TAD BLOCK
	DCA BLOCK
	CMA
	TAD NOBLKS
	DCA NOBLKS
	JMP FIRST1+1
/
	ORG .+1
#PDONE,	ADDR PDONE
	ORG #PDONE-1
	ADDR PDONE+1
/
	ORG .-1!177+1
/
PLBUFR=.		/TWO PAGE BUFFER
		ORG .+400
/PLOTTER DRIVER
/
/WRITTEN BY:
/	ROBERT PHELPS
/	COLUMBINE CONSULTANTS
/
/	SEPTEMBER, 1972
/
/	MODIFIED FOR THE PDP-12, SEPTEMBER, 1974
/
/
/CALLING SEQUENCE:
/	JMS PLOT
/	  FINAL X COORD
/	  FINAL Y COORD
/	  PEN CONTROL -- 00 MEANS TERMINATE PLOTTING
/			 +1 MEANS RESET (X,Y) TO PARAMETERS (NO MOVE!!)
/			 +2 MEANS PEN DOWN
/			 +3 MEANS PEN UP
/			 NEG MEANS RESET (X,Y) TO (0,0) AFTER MOVE
/			 NEG ALSO MEANS NEW FRAME DEFINITION
/	(RETURN)
/
	ADDR PLNEXT-1
/
PLOT=	.-1
/
/COMPUTE DISTANCE TO MOVE IN X DIRECTION
/
	TAD PLOTX	/GET OLD X
	CLL CIA
	TAD% PLOT	/NZ LINK MEANS MOVE IN + DIR
	SNL SZA		/Z LINK MEANS MOVE IN NEG DIR
	CIA
	DCA PLOTDX	/ABSOLUTE VALUE OF UNITS TO
			/  MOVE IN X DIR.
/
/SET UP CODE FOR + OR - X MOVEMENT
/
	TAD KDD		/DRUM DOWN (+)
	SNL		/CHECK DIRECTION
	RAR		/IF NEG., MAKE IT DRUM UP (-)
	TAD K6510	/MAKE IT PDP-12 INSTRUCTION
	DCA PLOTRX
	TAD% PLOT	/UPDATE PEN LOCATION
	DCA PLOTX
	ISZ PLOT	/BUMP TO Y
/
/COMPUTE DISTANCE TO MOVE IN Y DIRECTION
/
	TAD PLOTY	/GET OLD Y
	CLL CIA		/(TREAT THE SAME AS X ABOVE
	TAD% PLOT
	SNL SZA
	CIA
	DCA PLOTDY	/ABSOLUTE VALUE OF Y UNITS
/
/SET UP CODE FOR + OR - Y MOVEMENT
/
	TAD KPL		/PEN LEFT (+)
	SNL
	RAR	/IF NEG., MAKE IT PEN RIGHT(-)
	TAD K6501	/MAKE IT PDP-12 INSTRUCTION
	DCA PLOTRY
	TAD% PLOT	/UPDATE PEN LOCATION
	DCA PLOTY
	ISZ PLOT	/BUMP TO PEN CONTROL
/
/FIND LARGER OF THE TWO DISTANCES.
/IT CONTROLS NUMBER OF INCREMENTS TO BE MOVED
/
	TAD PLOTDX	/GET X UNITS TO MOVE
	CIA CLL
	TAD PLOTDY	/COMPARE X WITH Y
	SZL CLA
	JMP PLOT1	/X SMALLER - Y LARGER
	TAD PLOTDY	/Y SMALLER, SWITCH PARAMETERS
	DCA PLOTNA
	TAD PLOTDX	/SWITCH DISTANCES
	DCA PLOTDY
	TAD PLOTNA
	DCA PLOTDX
	TAD PLOTRY	/SWITCH MOTION CODES
	DCA PLOTNA
	TAD PLOTRX
	DCA PLOTRY
	TAD PLOTNA
	DCA PLOTRX
/
PLOT1,	TAD PLOTDY	/GET LARGER DISTANCE
	SNA
	JMP PLOTEXT	/RETURN IF NO MOVEMENT
	CMA
	DCA PLOTNB	/SET UP # OF MOVES
	DCA PLOTNA	/INITIATE RUNNING COUNTER
/
/SET PEN AS INDICATED
/
	TAD% PLOT	/FIX PEN - GET PEN CONTROL
	SNA
	JMP #DONE	/DONE IF PEN CONTROL IS ZERO
	TAD PLOTPEN	/CHECK OLD PEN LOCATION
	SNA CLA
	JMP PLOT2	/NO CHANGE REQUESTED
	TAD% PLOT
	SPA
	CIA
	CLL RAR
	SNA CLA		/WAS ORIG. BIT 10 SET?
	JMP PLOTEXT	/NO - NOT 2 OR 3, ASSUME 1, NO MOVE
	6504		/PEN UP
	SNL
	6524		/PEN DOWN
	TAD% PLOT	/SET PEN SOFTWARE SWITCH
	SMA
	CIA
	DCA PLOTPEN
/
/MOVEMENT CONTROL
/
		CIF CDF 10
		JMP% .+1
PLOTINT, 0
	6502	/CLEAR FLAG
/
PLOT2, ISZ PLOTNB	/MORE POINTS TO PLOT?
	JMP PLOT3	/YES
PLOTEXT, TAD% PLOT	/REDEFINE ORIGIN?
	SNA
	JMP #DONE
	SMA CLA
	JMP PLEXT2
	DCA PLOTX
	DCA PLOTY
	CMA		/INCIDATE END OF FRAME (SKIP REST OF BLOCK)
PLEXT2,	ISZ PLOT	/NO - BUMP TO EXIT
	JMP% PLOT
PLOT3,	TAD PLOTDX	/DECREMENT RUNNING COUNTER
	CLL CIA
	TAD PLOTNA
	DCA PLOTNA
	SNL	/OVERFLOW?
PLOTRX,	HLT		/YES - MOVE SHORT DIRECTION
PLOTRY,	HLT		/ALWAYS MOVE LONG DIRECTION
	SNL CLA	/CHECK OVERFLOW AGAIN
	TAD PLOTDY	/RESET COUNTER ONLY IF OVERFLOW
	TAD PLOTNA
	DCA PLOTNA
		JMP PLOTINT-2
/
PLOTPEN, 0	/CURRENT PEN POSITION
PLOTX, 0	/CURRENT POSN COORDINATES
PLOTY, 0
PLOTNA, 0
PLOTNB, -1	/COUNTS TOTAL # OF MOVES
KDD,	4
KPL,	20
K6510,	6510		/PDP-12 DRUM INSTRUCTION + 2 OR 4
K6501,	6501		/PDP-12 PEN INSTRUCTION + 10 OR 20
#DONE,	CLA IAC
	DCA PDONE
	CLL CML RTR
	DCA PDONE+1
	CMA
	DCA% PLOT	/IF RESTARTED, FORCE NEG PEN CONTROL
			/  TO START IT OFF RIGHT
	CMA
	DCA PLOTNB
		JMP PLOTINT-2
/
	ENTRY PDONE
PDONE,	F 1.0
/
PLOTDX,	0
PLOTDY,	0
/
END