Google
 

Trailing-Edge - PDP-10 Archives - decuslib10-12 - 43,50547/pltqum.mac
There is 1 other file named pltqum.mac in the archive. Click here to see a list.
SUBTTL	QUM driver -- PPDATA macro expansion

PRINTX	%PLTQUM not finished

	PPDATA	(QUM)

QUMNAM:	DEC	830
	ASCII /AJ830/	;Anderson Jacobsen
	ASCII /GENCO/	;GENCOM
	ASCII /QUME/	;QUME
	ASCII /XEROX/	;XEROX
	ASCII /DIABL/	;DIABLO
SUBTTL	QUM driver -- Daisy-wheel printers

;	  These routines drive the QUME, XEROX, DIABLO, GENCOM, or AJ830
;	hard-copy terminals.  Plotting is done in 1/48 inch increments
;	vertically and 1/60 inch increments horizontally.  The "pen" is the
;	period character, struck so as to make a "continuous" line.


	COMMENT	&
Char	GENCOM				DIABLO
^@ NUL
^A SOH
^B STX
^C ETX					Sends a ^F when buffer empty
^D EOT	Sends a ^F when buffer is empty
^E ENQ	Reverse linefeed
^F ACK	Sent when buffer is empty	Sent when buffer is empty
^G BEL	Bell				Bell
^H BS 	Backspace, cancels an escape	Backspace (can be reverse)
^I HT 	Horizontal tab			Horizontal tab
^J LF 	Linefeed, reverse after an escape for both
^K VT 	Vertical tab
^L FF 	Formfeed, reverse after an escape for both
^M CR	Carraige return			Carriage return
^W CAN 	Prints "not" sign
^Y EM 	Unlocks keyboard, locked by $O
^Z SUB	Print without spacing
^[ ESC	ESCAPE				ESCAPE
^\ GS 	Disable escapes
^] GS 	Print "cent"
^^ RS 	Enable escapes (toggle)
^_ US
SPACE	Space				Space (can be reverse)
$BS	Nothing (cancelled ESCAPE)
$HT					Absolute horizontal tab (1 char, 1-127)
$VT					Absolute vertical tab (1 char, 1-66)
$LF	Negative linefeed		Negative linefeed
$FF	Negative top of form		Negative top of from
$RS					Vertical motion index (1 char)
$US					Horizontal motion index (1 char)
$@ 	Clear vertical tab
$A	Enable lowercase		Red ribbon
$B	Subscript			Black ribbon
$C	Clear auto linefeed
$D	Enable auto linefeed		Negative half linefeed
$E	10 cpi, 6 lpi
$F	12 cpi, 8 lpi
$G
$H	Absolute horizontal tab (3 digits)
$I	Set form length (3 digits)
$J	6 lpi
$K	8 lpi
$L	Single space
$M	Toggle auto linefeed
$N	Set vertical tab
$O	Lock keyboard, unlocked by ^Y
$P	Double space
$Q	Set page length (3 digits)
$R
$S	Superscript
$T	Set top of form
$U	Disable lower case		Half linefeed
$V	Absolute vertical tab (3 digits)
$W	Toggle proportional text
$X	Set horizontal motion index (4 digits, leading minus)
$Y	Set vertical motion index (4 digits, leaging minus)
$Z
$0	Negative half linefeed		Set right margin
$1	Set tab stop			Set tab stop
$2	Clear tab stop			Clear all tabs
$3	Clear all tab stops		Graphics on
$4	Toggle basic plot mode		Graphics off
$5	Toggle true plot mode		Forward print
$6	Set left margin			Backward print
$7	Set right margin
$8	Clear both margins		Clear single tab
$9	Half linefeed			Set left margin
$:	Disable ribbon lift
$;	Enable ribbon lift
$.lt.	Reset
$=	Disable auto CRLF
$.gt.	Call user program
$?

  GENCOM TRUE PLOT mode
In TRUE PLOT mode, the characters 0 through ? set the quadrant for
movement, and whether to move in single or double increments.

	single down  2	!  single down  3
	single up    6	!  single up    7
	double down  :	!  double down  ;
	double up  .gt.	!  double up    ?
	----------------+-----------------
	single down  1	!  single down  0
	single up    5	!  single up    4
	double down  9	!  double down  8
	double up    =  !  double up  .lt.

Alphabetical characters @ through DEL move in TRUE PLOT mode.  The
low order 3 bits specify the Y increments, the next 3 bits specify the X
increment.
&  ;End of COMMENT

SUBTTL	QUM driver -- QUMMOV

DIANAM:	ASCII	/QUME/	;Data for PLOTS
	ASCII	/DIABL/
	ASCII	/GENCO/
QUMLEN==.-QUMNAM


	PPDATA	(QUM)		;Expand data area

;  Subroutine QUMMOV (QUMDWN) - move the pen with the pen up (down)

;  Calling sequence:
;	DMOVE	X,(delta X of the movement)
;	PUSHJ	P,QUMMOV		;For up (or	PUSHJ	P,QUMDWN	;For down)
;	 *return*

QUMMOV:	TLOA	T1,1UP		;Set for pen up
QUMDWN:	TLZ	T1,1UP		;Set for pen down
	SKIPN	X		;Test for X = 0	
	 JUMPE	Y,SLADON	; and Y = 0, do not move
	MOVE	T2,RMOV		;Get the chars to move right
	SKIPGE	X		;Check the X direction
	 MOVE	T2,LMOV		;We go left
	MOVEM	T2,XMOV		;Save them
	MOVE	T2,UMOV		;Get the chars to move up
	SKIPGE	Y		;Check the Y direction
	 MOVE	T2,DMOV		;We go down
	MOVEM	T2,YMOV		;Save them
	MOVMS	T2,X		;Get abs of X
	MOVMS	T3,Y		;Get abs of Y
	MOVE	T1,X		;Preset the counter
	SUB	T1,Y		; to (X-Y)/2
	ASH	T1,-1		; ...
	CAIN	X,1		;Special case X=1, Y=0
	JUMPE	T1,OUTX		; since 1/2 is not positive

SLA:	TLNN	T1,1UP		;Is the pen up?
	 OUTCHR	DOT		;No, make a mark
	JUMPG	T1,OUTX		;Send X movement if positive
	OUTSTR	YMOV		;Output movement
	ADD	T1,X		;Set count for X movement next
	SOJG	T3,SLA		;Loop for all Y increments
	JUMPLE	T2,SLADON	;Done if both X and Y counts are zero

OUTX:	OUTSTR	XMOV		;Output the X movement
	SUB	T1,Y		;Set count for Y movement next
	SOJG	T2,SLA		;Loop for all X increments
	JUMPG	T3,SLA		;Not done until both X and Y are both zero
SLADON:	TLNN	T1,1UP		;Is the pen up?
	 OUTCHR	DOT		;No, make a mark
	POPJ	P,		;Return to caller
XMOV:	0		;Characters used to move in the X direction
YMOV:	0		;Characters used to move in the Y direction
DOT:	PEN1		;Printing character
IFN FTGEN,<
CLRSCN:	BYTE (7)CR,FF,ESCOFF,ESCON,PLUSY,PLUSY,PLUSY,0	;New page, up 3 lines
HOME:	BYTE (7)ESC,PLOTON,CR,FF,0	;Turn off plotting, start a new page
ORIGIN:	BYTE (7)ESCOFF,ESCON,ESC,PLOTON,0 ;Enable escapes, turn on plotting
ANMODE==ORIGIN		;Alphanumeric mode, same as ORIGIN (toggle plot off)
PLTMOD==ORIGIN		;Turn on plotting without moving
UMOV:	BYTE (7)PLUSY			;Move up
>  ;End of IFN FTGEN
IFE FTGEN,<
CLRSCN:	BYTE (7)CR,FF,ESC,LF,ESC,LF,ESC,LF,0	;New page, up 3 lines
HOME:	BYTE (7)ESC,PLOTOF,CR,FF,0	;Start a new page
ORGIN:	BYTE (7)ESC,PLOTON,0		;Turn on plotting
UMOV:	BYTE (7)ESC,MINUSX		;Move up
>  ;End of IFE FTGEN
;Common to both DIABLO and GENCOM

BEEP:	BYTE (7)7,0			;Control-G
LMOV:	BYTE (7)MINUSX			;Move left
RMOV:	BYTE (7)PLUSX			;Move right
DMOV:	BYTE (7)MINUSY			;Move down


LITQUM:	LIT		;End of PLTQUM.MAC