;*************************** AMUS Program Label ******************************
; Filename: OKI393.M68 Date: 08/02/89
; Category: Printer Driver Hash Code: 542-147-247-706 Version: 1.1(107)
; Initials: AODP/AM Name: GARY D. CHESSER
; Company: EMERGITECH Telephone #: 61488666712
; Related Files: OKI393.WRT shows usage of printer driver from within write
; Min. Op. Sys.: 1.3 Expertise Level: BEG
; Special: Need to know how to set up in WRITE.INI. Call me for help.9-5 EST.
;
; Description: This is a printer Driver for the Okidata 393.
; It will make use of a number of the features of the OKIDATA 393 printer.
; Triple high, Triple wide, Italics, ect. Print OKI393.WRT from within
; ALPHA WRITE to find all the characteristics of this PDV.
;
; This will also work with OKIDATA 390 & 320 but they don't support all the
; function of the 393.
;*****************************************************************************
;***************************************************************************
;*
;* Printer Driver for Okidata 393 AS OF 11/7/88
;* [1] MAKE CALLS MACRO CALLS FOR MARGIN BLOCKS
;***************************************************************************
; ASL- -
; NOTICE
;
;All rights reserved. This software is the property of Alpha Microsystems
;and the material contained herein is the proprietary property and trade
;secrets of Alpha Microsystems, embodying substantial creative efforts and
;confidential information, ideas and expressions, no part of which may be
;reproduced or transmitted in any form or by any means, electronic,
;mechanical, or otherwise, including photocopying or input into any
;information storage or retrieval system without the express written
;permission of Alpha Microsystems.
;
;CAUTION: Unauthorized distribution or reproduction of this material may
;subject you to legal action.
;
;Copyright (C) 1983,1984 - Alpha Microsystems
;
SEARCH SYS
SEARCH SYSSYM
COPY PDVSYM
OBJNAM .PDV
VMAJOR=1.
VMINOR=1.
VEDIT=107.
;Edit History:
;[AO4] 06/30/88 AO/GDC CHANGE RIBBON COLORS TO BELOW
;[AO3] 06/07/88 AO/GDC SET THE CODES FOR OKI39300
;[A02] 12/29/87 AO/GSA Added LPI 6/8
;[AO1] 06/19/86 AO/GSA
; ADDED OKIDATA 84 CODES AS FOLLOWS:
; 10cpi, 12cpi, 17cpi,
; Primary Ribbon Color = HIGH SPEED DRAFT
; Secondary Ribbon Color = LETTER QUALITY
; Third Ribbon Color = UTILITY PRINTING MODE
; Fourth Ribbon Color = NEAR LETTER QUALITY
; Fifth Ribbon Color = ITALICS ON
; Sixth Ribbon Color = ITALICS OFF
;
;[107] 5 August 1984
; Fix problem with leaving bold, underscore or strikeout on across
; multiple lines when left paper offset was non-zero. /RBC
;[106] 8 June 1984
; Make use PDVSYM for all symbols. /RBC
;[105] 3 June 1984
; Output both CR's and LF's to make .LST files VUE compatible. /RBC
;[104] 15 May 1984
; Update impure area definition. /RBC
;[103] 21 April 1984
; Make PDLF output CRLF's instead of just line feeds. /RBC
;[102] 01 Dec 1983
; Major rewrite of module. /PPJ
;[101] 20 February 1983
; Handle special print position code. /RBC
;[100] 12 January 1983
; Created. /RBC
;
PAGE
;************************
;* PDV entry *
;************************
;Define the entry points of the .PDV
;
; CAUTION: Do Not Change the order or size of the entry points.
; If any of the functions are not implemented replace the entry
; point with 'JMP IGNORE'.
;
; A3 indexes the impure area defined above on entry to the driver.
;
PDV: PHDR -1,0,PH$REE!PH$REU
LWORD PD$FED ; SUPPORTS SHEET FEEDER
JMP PDINI ; PDINI, initialize printer
JMP IGNORE ; PDCLS, shut down printer
JMP PDCHR ; PDCHR, output a character in D1
JMP PDCTL ; PDCTL, output control string indexed by D1
JMP PDSPL ; PDSPL, output special string & character
JMP PDMNLN ; PDMNLN, move to next line & start new line
JMP PDMTOF ; PDMTOF, move to Top of Form & setup for new page
JMP IGNORE ; PDPSON, enable proportional
JMP IGNORE ; PDSOF, disable proportional
JMP PDUNDR ; PDUNDR, toggle underscore
JMP PDBOLD ; PDBOLD, toggle bold
JMP PDSTRK ; PDSTRK, toggle strikeout
JMP IGNORE ; PDBAR, toggle over-bar
JMP IGNORE ; PDSLPI, set Lines Per Inch
JMP IGNORE ; PDSHMI, set Horizontal Motion Index
JMP PDSCPI ; PDSCPI, set Characters Per Inch
JMP PDSTM ; PDSTM, set Top Margin
JMP PDMTM ; PDMTM, move to Top Margin
JMP PDSLPO ; PDSLPO, set Left Paper Offset
JMP PDMLPO ; PDMLPO, move to Left Paper Offset
JMP PDSLPP ; PDSLPP, set Lines per Page
JMP PDSLSP ; PDSLSP, set line spacing (in 1/2 lines)
JMP PDOVRP ; PDOVRP, setup to overprint last char.
JMP PDLF ; PDLF, output LFs per count in D2
JMP IGNORE ; ENTRY RESERVED FOR ALPHA MICRO
JMP IGNORE ; ENTRY RESERVED FOR ALPHA MICRO
JMP IGNORE ; ENTRY RESERVED FOR ALPHA MICRO
JMP IGNORE ; ENTRY RESERVED FOR ALPHA MICRO
JMP IGNORE ; ENTRY RESERVED FOR ALPHA MICRO
JMP IGNORE ; ENTRY RESERVED FOR ALPHA MICRO
JMP IGNORE ; ENTRY RESERVED FOR ALPHA MICRO
JMP IGNORE ; ENTRY RESERVED FOR ALPHA MICRO
JMP IGNORE ; ENTRY RESERVED FOR USER DEFINITION
JMP IGNORE ; ENTRY RESERVED FOR USER DEFINITION
JMP IGNORE ; ENTRY RESERVED FOR USER DEFINITION
JMP IGNORE ; ENTRY RESERVED FOR USER DEFINITION
JMP IGNORE ; ENTRY RESERVED FOR USER DEFINITION
JMP IGNORE ; ENTRY RESERVED FOR USER DEFINITION
JMP IGNORE ; ENTRY RESERVED FOR USER DEFINITION
JMP IGNORE ; ENTRY RESERVED FOR USER DEFINITION
PAGE
;************************
;* PDSPL *
;************************
; Output a control string & then the byte in D2
; String number is in D1.
;
PDSPL: BCALL PDCTL ; output the string
MOVB D2,D1
ORB #^H80,D1 ; make sure it gets thru TRMSER
FILOTB PTDDB(A3) ; output it
IGNORE: RTN ; just return to caller of .PDV
PAGE
;************************
;* PDCTL *
;************************
; Output a control string.
; String index is in D1
;
PDCTL: CMPB D1,#MAXCDE ; valid special code ?
BHI 99$ ; no, ignore it
ADDW D1,D1 ; make index into word offset
MOVW CTLTBL[~D1],D1 ; get string offset
LEA A6,CTLTBL[~D1]
JMP STROUT ; go output it
99$: RTN
; Printer control string table
; CAUTION: Do Not Change the order of the string table.
; If the string is not implemented put a length of zero at the label.
;
DEFINE STRING TAG
WORD TAG-CTLTBL
ENDM
CTLTBL: STRING CHOME ; 00 return carriage home
STRING MOVAHT ; 01 move to absolute horizontal tab
STRING ROLUP ; 02 roll up a partial line
STRING ROLDWN ; 03 roll down a partial line
STRING NEGLF ; 04 output negative line feed
STRING SPLPT0 ; 05 special print position 0
STRING SPLPT1 ; 06 special print position 1
STRING RIBSC1 ; 07 print in Secondary ribbon color 1
STRING RIBSC2 ; 08 print in Secondary ribbon color 2
STRING RIBSC3 ; 09 print in Secondary ribbon color 3
STRING RIBPRM ; 10 print in Primary ribbon color
STRING FEDTR1 ; 11 select Feeder tray 1
STRING FEDTR2 ; 12 select Feeder tray 2
STRING FEDTR3 ; 13 select Feeder tray 3
STRING FEDTR4 ; 14 select Feeder tray 4
STRING FEDTGL ; 15 select Feeder tray 1 & then tray 2
STRING FEDEJT ; 16 select Feeder eject
STRING USR1 ; 17 user function 1
STRING USR2 ; 18 user function 2
STRING USR3 ; 19 user function 3
STRING USR4 ; 20 user function 4
TBLEND: ; end of table
MAXCDE = <<TBLEND-CTLTBL>/2.> ; maximum special code
PAGE
;************************
;* PDCHR *
;************************
; Output the character in D1
;
PDCHR: FILOTB PTDDB(A3)
ADDW #1,CURCOL(A3) ; advance to next column
BTST #FM%BLD,FM.FLG(A3) ; bold active ?
BEQ 99$ ; no, just return
MOV BLDPTR(A3),A6 ; yes, save this character
MOVB D1,(A6)+
MOV A6,BLDPTR(A3)
99$: RTN
PAGE
;************************
;* STROUT *
;************************
; Output string indexed by A6 to DDB indexed by A3
;
STROUT: SAVE A0,D1,D2 ; save registers
MOV A6,A0
CLR D2
MOVB (A0)+,D2 ; get string length
BR 20$ ; and enter loop at end
10$: MOVB (A0)+,D1 ; get byte from string
FILOTB PTDDB(A3) ; output it
20$: DBF D2,10$ ; loop until all characters output
REST A0,D1,D2 ; restore registers
RTN
PAGE
;************************
;* PDINI *
;************************
; Initialize the printer
;
PDINI: MOVW #-1,HMISAV(A3) ; no HMI yet
MOVW #-1,LPISAV(A3) ; no LPI yet
MOVW #-1,CPISAV(A3) ; no CPI yet
MOVW #-1,TPMSAV(A3) ; no top margin yet
MOVW #-1,LPOSAV(A3) ; no left paper offset yet
CLRW CURCOL(A3) ; at column 0
CLR CURLIN(A3) ; at start of page
RTN
;************************
;* PDCLS *
;************************
; Shut down the printer
;
PDCLS: ; not needed since nothing is altered
PAGE
;************************
;* PDSTM *
;************************
; Set Top Margin from value in D2
; D2 contains the number of lines required in the Top Margin
;
PDSTM: MOVW D2,TPMSAV(A3) ; save top margin value
RTN
;************************
;* PDMTM *
;************************
; Move to Top Margin
;
PDMTM: PUSHW D2 ; save register
MOVW TPMSAV(A3),D2 ; get offset value
BCALL PDLF ; go output line feeds
POPW D2
RTN
;************************
;* PDLF *
;************************
; Output Line feeds per count in D2
;
PDLF: PUSHB D1
BR 15$ ; and enter loop at end
10$: MOVB #$CR,D1 ; output a carriage return [103]
FILOTB PTDDB(A3) ; [103]
MOVB #$LF,D1 ; then a line feed [103]
FILOTB PTDDB(A3) ; output a single space
ADD #2,CURLIN(A3) ; bump number of 1/2 lines
15$: DBF D2,10$ ; and loop until all done
POPB D1
RTN
PAGE
;************************
;* PDSLPO *
;************************
; Set Left Paper Offset
; D2 contains the number of 1/10 inch units required
;
PDSLPO: MOVW D2,LPOSAV(A3) ; save left paper offset
RTN
;************************
;* PDMLPO *
;************************
; Move to Left Paper Offset
;
PDMLPO: SAVE D1,D2
MOVW LPOSAV(A3),D2 ; get offset value
MOVW D2,BLDCOL(A5) ; set bold column in case it is on [107]
MOVW D2,UNDCOL(A5) ; set underline column in case it is on [107]
MOVW D2,STKCOL(A5) ; set strikeout column in case it is on [107]
MOVB #32.,D1 ; [AO3] get a space
BR 15$ ; and enter loop at end
10$: ADDW #1,CURCOL(A3) ; bump current column
FILOTB PTDDB(A3) ; output a single space
15$: DBF D2,10$ ; and loop until all done
REST D1,D2
RTN
PAGE
;************************
;* PDSLPP *
;************************
; Set lines per page
; D2 contains the form length in number of lines
;
PDSLPP: MOVW D2,LPPSAV(A3) ; save for later
RTN
PAGE
;************************
;* PDSLSP *
;************************
; Set line spacing
; D2 contains the number of 1/2 lines
;
PDSLSP: MOVW D2,LSPSAV(A3) ; save for later
RTN
PAGE
;************************
;* PDMTOF *
;************************
; Move to Top of Form and setup for new page
;
PDMTOF: CLR D7
MOVW LPPSAV(A3),D7 ; get lines per page
ADD D7,D7 ; convert to number of 1/2 lines
CMP D7,CURLIN(A3) ; are we already at new page ?
BEQ 10$ ; yes, don't output a Form Feed
PUSHB D1 ; save register
MOVB #$FF,D1
FILOTB PTDDB(A3) ; output a Form Feed
POPB D1 ; restore register
10$: CLR CURLIN(A3) ; at start of page
RTN
PAGE
;************************
;* PDMNLN *
;************************
; Move to Next Line and setup for new line
;
PDMNLN: SAVE D1,D2
CALL BLDTST ; go output bold (if any)
;[AO1] CALL UNDTST ; go output underline (if any)
CALL STKTST ; go output strikout (if any)
;[105] MOVB #$CR,D1
;[105] FILOTB PTDDB(A3) ; output the CR
CLRW CURCOL(A3) ; back to column 0
MOVW LSPSAV(A3),D2 ; get current line spacing
ADDW #1,D2 ; round it up
LSRW D2,#1 ; convert to number of whole LFs
BR 20$ ; enter at end of loop
10$: ADD #2.,CURLIN(A3) ; bump current line number by full line
MOVB #$CR,D1 ; output a carriage return [105]
FILOTB PTDDB(A3) ; [105]
MOVB #$LF,D1 ; [105]
FILOTB PTDDB(A3) ; output the LF
20$: DBF D2,10$ ; and loop until done
REST D1,D2
RTN
PAGE
;************************
;* PDUNDR *
;************************
; Toggle Underscore [AO1] Modified
;
PDUNDR: LEA A6,UNDON ; assume we are enabling underscore
BCHG #FM%UND,FM.FLG(A3) ; toggle underscore
BEQ UNDR1 ; and go do it if end of field
LEA A6,UNDOFF ; turn it off
UNDR1: JMP STROUT
; Enable Auto Underscore [AO3]
UNDON: BYTE 3.
BYTE 27.,45.,1.
EVEN
; Disable Auto Underscore [A03]
UNDOFF: BYTE 3.
BYTE 27.,45.,0.
EVEN
PAGE
;************************
;* PDBOLD *
;************************
; Toggle Bold
;
PDBOLD: BCHG #FM%BLD,FM.FLG(A3) ; bold enabled ?
BNE BLDOUT ; and go do it if end of field
MOVW CURCOL(A3),BLDCOL(A3) ; or set field start
LEA A6,BLDBUF(A3) ; index the bold buffer
MOV A6,BLDPTR(A3) ; and save
RTN
; Test of bold and output it if true
;
BLDTST: BTST #FM%BLD,FM.FLG(A3) ; bold active ?
BEQ BLDOTX ; no, just return
; Setup to do bold & then do it
;
BLDOUT: SAVE A2,D1-D2
MOV BLDPTR(A3),A2 ; index the buffer
CLRB @A2 ; terminate the bold string
CALL BLDIT ; output bold string
CALL BLDIT ; output bold string
REST A2,D1-D2
BLDOTX: LEA A6,BLDBUF(A3) ; index the start of the buffer
MOV A6,BLDPTR(A3)
CLRW BLDCOL(A3)
RTN
; Do the actual bold output
;
BLDIT: MOVB #$CR,D1 ; get a carriage return
FILOTB PTDDB(A3) ; and output it
; Output leading spaces until start of bold field
;
MOVW BLDCOL(A3),D2 ; get start of bold field
MOVB #32.,D1 ; [AO3]get a space
BR 15$ ; and enter loop at end
10$: FILOTB PTDDB(A3) ; output a space
15$: DBF D2,10$ ; loop until start of bold field
; Output the required bold string
;
LEA A2,BLDBUF(A3) ; index the bold buffer
20$: MOVB (A2)+,D1 ; get a character from bold string
BEQ 99$ ; terminate on null
FILOTB PTDDB(A3) ; output a character
BR 20$ ; loop until null
99$: RTN
PAGE
;************************
;* PDSTRK *
;************************
; Toggle strikeout
;
PDSTRK: BCHG #FM%STK,FM.FLG(A3) ; toggle strikeout flag
BNE STKOUT ; and go do it if end of field
MOVW CURCOL(A3),STKCOL(A3) ; or set field start
MOVB D1,STKCHR(A3) ; save strikeout character
RTN
; Test for strikeout and output it if true
;
STKTST: BTST #FM%STK,FM.FLG(A3) ; strikeout active ?
BEQ STKOTX ; no, just return
; Output everything up to here & return the carriage home
;
STKOUT: SAVE D1,D2
MOVB #$CR,D1 ; get a carriage return
FILOTB PTDDB(A3) ; and output it
; Output leading spaces until start of strikeout field
;
MOVW STKCOL(A3),D2 ; get start of strikeout field
MOVB #32.,D1 ; [AO3]get a space
BR 15$ ; and enter loop at end
10$: FILOTB PTDDB(A3) ; output a space
15$: DBF D2,10$ ; loop until start of strikeout field
; Output the required number of strikeout
;
MOVW CURCOL(A3),D2 ; get field end
SUBW STKCOL(A3),D2 ; and calculate field length
MOVB STKCHR(A3),D1 ; get strikeout character
BR 25$ ; and enter loop at end
20$: FILOTB PTDDB(A3) ; output an strikeout
25$: DBF D2,20$ ; loop until end of strikeout field
REST D1,D2
STKOTX: CLRW STKCOL(A3)
RTN
PAGE
;************************
;* PDSCPI *
;************************
; Set Characters Per Inch (added [AO1])
; D2 contains the numbers of characters per inch (pitch)
;
PDSCPI: CMPW D2,CPISAV(A3) ; new CPI the same as old ?
JEQ CPIOK ;CHANGE BRANCH TO JUMP[A03]
MOVW D2,CPISAV(A3) ; Save new CPI
CMPW D2,#1. ; [AO3] IF 1 THEN SINGLE HEIGHT
JEQ NORM1 ; AND SINGLE WIDTH @ 10 PITCH
CMPW D2,#2. ; [AO3] IF 2 THEN DOUBLE WIDTH
JEQ DOUB1 ; AND SINGLE HEIGHT
CMPW D2,#3. ; [AO3] IF 3 THEN TRIPLE WIDTH
JEQ TRIP1 ; AND SINGLE HEIGHT
CMPW D2,#4. ; [AO3] IF 4 THEN SINGLE WIDTH
JEQ NORM2
; AND DOUBLE HEIGHT
CMPW D2,#5. ; [AO3] IF 5 THEN DOUBLE WIDTH
JEQ DOUB2 ; AND DOUBLE HEIGHT
CMPW D2,#6. ; [AO3] IF 6 THEN TRIPLE WIDTH
JEQ TRIP2 ; AND DOUBLE HEIGHT
CMPW D2,#7. ; [AO3] IF 7 THEN SINGLE WIDTH
JEQ NORM3 ; AND TRIPLE HEIGHT
CMPW D2,#8. ; [AO3] IF 8 THEN DOUBLE WIDTH
JEQ DOUB3 ; AND TRIPLE HEIGHT
CMPW D2,#9. ; [AO3] IF 8 THEN TRIPLE WIDTH
JEQ TRIP3 ; AND TRIPLE HEIGHT
; CMPW D2,#13. ; [AO3] IF 13 THEN SUPER SCRIPT IS ON
; JEQ ITAON
; CMPW D2,#14. ; [AO3] IF 14 THEN SUB SCRIPT IS ON
; JEQ ITAOFF
; CMPW D2,#15. ; [AO3] IF 15 THEN SUPER/SUB SCRIPT OFF
; JEQ PITC15
CMPW D2,#16. ; [AO3] IF 16 THEN 17PITCH IS OFF
JEQ OFF17
CMPW D2,#17. ; [AO3] IF 16 THEN 17PITCH IS OFF
JEQ ON17
CMPW D2,#18. ; [AO3] IF 18 THEN HIGH SPEED ON
JEQ HS
CMPW D2,#19. ; [AO3] IF 19 THEN NEAR LETTER QUALITY
JEQ NLQ
CMPW D2,#20. ; [AO3] IF 20 THEN UTILIY MODE IS ON
JEQ UTILIT
CMPW D2,#21. ; [AO3] IF 21 THEN LQ MODE IS ON
JEQ LQ
CMPW D2,#22. ; [AO3] IF 22 THEN emphasized ON
JEQ EMPHAS
CMPW D2,#23. ; [AO3] IF 23 THEN EMPHASIZED OFF
JEQ EMPOFF
CMPW D2,#24. ; [AO3] IF 24 THEN RESIDENT IS ON
JEQ RESID
CMPW D2,#25. ; [AO3] IF 25 THEN COURIER PRESTIGE ON
JEQ PREST
CMPW D2,#26. ; [AO3] IF 26 THEN COURIER LETTER ON
JEQ LETTER
CMPW D2,#27. ; [AO3] IF 27 THEN GOTHIC RESIDENT ON
JEQ GRESID
CMPW D2,#28. ; [AO3] IF 28 THEN GOTHIC IS ON
JEQ GOTHIC
CMPW D2,#30. ; [AO3] IF 30 THEN NORMAL IS ON
JEQ SUB ; 10PITCH,SINGLE SPACING/HEIGHT
CMPW D2,#31. ; [AO3] IF 30 THEN NORMAL IS ON
JEQ SUPER ; 10PITCH,SINGLE SPACING/HEIGHT
CMPW D2,#32. ; [AO3] IF 30 THEN NORMAL IS ON
JEQ SUBOFF ; 10PITCH,SINGLE SPACING/HEIGHT
CMPW D2,#33. ; [AO3] IF 30 THEN NORMAL IS ON
JEQ BUZZER ; 10PITCH,SINGLE SPACING/HEIGHT
CMPW D2,#34. ; [AO3] IF 30 THEN NORMAL IS ON
JEQ RESET ; 10PITCH,SINGLE SPACING/HEIGHT
LEA A6,CPI10 ; [AO3] Index 10CPI string
CMPW D2,#10.
JEQ CPISTR ; was 10 CPI
; MOVW #$SO,D1 ; [AO3]Double Width Printing
; CMPW D2,#9. ; If 9 or lower, just go into double wide
; JLOS CPIDO ; 9 or lower
LEA A6,CPI12
CMPW D2,#12. ; 12 CPI?
JLOS CPISTR ; yes, was 11 or 12
ON17: MOVB #$SI,D1 ; [AO3]Default for 17 CPI
CPIDO: FILOTB PTDDB(A3)
CPIOK: RTN
CPISTR: JMP STROUT ; [AO3] Send string out
;THIS IS MY CHUMP CHANGE MACRO SECTION I WOULD HAVE DONE THIS EARLIER BUT
;I DIDN'T KNOW ENOUGH OF THIS ASSEMLBY STUFF TO DOIT SO I WILL NOWWWWWWW
;
;SHOULD ONE WANT TO MAKE A CHANGE [GOD FORBID] MAKE A MACRO AND CALL IT
;JUST LIKE I DID .....................................................
DEFINE CANWID
MOVB #^D27,D1 ; DIGIT!!!!!!!!!!!
FILOTB PTDDB(A3) ; THIS WILL CANCEL
MOVB #^D87,D1 ; DOUBLE /TRIPLE WIDE
FILOTB PTDDB(A3) ; CHARACTER DISPLAY
MOVB #^D0,D1 ; LAST BYTE TO PRINTER
FILOTB PTDDB(A3)
ENDM
DEFINE TENPIT
MOVB #^D27,D1 ; SET UP PICA
FILOTB PTDDB(A3) ; 10 PITCH
MOVB #^D80,D1 ; RIGHT HERE
FILOTB PTDDB(A3) ;
ENDM
DEFINE QUALIT
MOVB #^D27,D1 ; [AO3] 1ST NORMAL BYTE IS
FILOTB PTDDB(A3) ; FILE OUT TO PRINTER
MOVB #^D120,D1 ; THIS IS LETTER QUALITY
FILOTB PTDDB(A3) ; RIGHT DOWN
MOVB #^D1,D1 ; HERE; PUMP IT UP SHLOMEBOY
FILOTB PTDDB(A3)
ENDM
;SET=0 {NORMAL HEIGHT}; SET=1 {DOUBLE HEIGHT}; SET=2 {TRIPLE HEIGHT}
DEFINE HEIGHT SET
MOVB #^D27,D1 ; [AO3] 1ST NORMAL BYTE IS
FILOTB PTDDB(A3) ; FILE OUT TO PRINTER
MOVB #^D31,D1 ; NORMAL HIEGHT IS WHAT THIS
FILOTB PTDDB(A3) ; MACRO IS ALL ABOUT
MOVB SET,D1 ; WOW!!!!!!!!!!!!!!!!!!!
FILOTB PTDDB(A3)
ENDM
DEFINE SETDOU
MOVB #^D27,D1 ; [AO3] 1ST NORMAL BYTE IS
FILOTB PTDDB(A3) ; FILE OUT TO PRINTER
MOVB #^D87,D1 ; SET DOULBE WIDTH SHLOMES
FILOTB PTDDB(A3) ; PRINTER
MOVB #^D1,D1 ; WE'RE HERE?????????????
FILOTB PTDDB(A3)
ENDM
DEFINE SETTRI
MOVB #^D27,D1 ; SET TRIPLE WIDTH
FILOTB PTDDB(A3) ; YEA THAT'S RIGHT
MOVB #^D109,D1 ; 2ND NORMAL BYTE OUT TO
FILOTB PTDDB(A3) ; PRINTER
ENDM
;PITCH = 1
;SINGLE HEIGHT SPACING WITH 10PITCH
NORM1:
CANWID ; CANCEL DOUBLE/TRIPLE WIDE
TENPIT ; TEN PITCH
;GDC QUALIT ;SPECIFY ME SEPERATLY ; LETTER QUALITY
HEIGHT #^D0 ; NORMAL HIEGHT; NO WHAT I'M SAYING?
RTN
;PITCH = 2
;SINGLE HEIGHT / DOUBLE WIDTH SPACING
DOUB1:
CANWID ; CANCEL THAT NASTY OL' DOUBLE/TRIPLE
SETDOU ; SET DOUBLE WIDTH
;GDC QUALIT ;SPEICFIY SEPERATLY ; LETTER QUALITY
HEIGHT #^D0 ; NORMAL HEIGHT; WHATEVER NORMAL IS?
RTN
;PITCH = 3
;SINGLE HEIGHT / TRIPLE WIDTH
TRIP1:
CANWID ; CANCEL DOUBLE/TRIPLE
SETTRI ; SET TRIPLE WIDTH
;GDC QUALIT ; LETTER QUALITY
HEIGHT #^D0 ; NORMAL HEIGHT
RTN
;PITCH = 4
;DOUBLE HEIGHT / SINGLE WIDTH SPACING
NORM2:
CANWID ; CANCEL DOUBLE/TRIPLE WIDTH
HEIGHT #^D1 ; DOUBLE HEIGHT ;HOW DOES HE DOIT?
;GDC QUALIT ; LETTER QUALITY
TENPIT ; SINGLE WIDTH
RTN
ITAON: MOVB #^D27,D1 ; [AO3] 1ST ITALIC BYTE IS
FILOTB PTDDB(A3) ; FILE OUT TO PRINTER
MOVB #^D52,D1 ; 2ND ITALIC BYTE OUT TO
FILOTB PTDDB(A3) ; PRINTER
RTN
ITAOFF: MOVB #^D27,D1 ; [AO3] 1ST ITALIC OFF BYTE IS
FILOTB PTDDB(A3) ; FILE OUT TO PRINTER
MOVB #^D53,D1 ; 2ND ITALIC OFF BYTE OUT TO
FILOTB PTDDB(A3) ; PRINTER
RTN
SUPER: MOVB #^D27,D1 ; [AO3] 1ST DOUBLE BYTE IS
FILOTB PTDDB(A3) ; FILE OUT TO PRINTER
MOVB #^D83,D1 ; 2ND DOUBLE BYTE OUT TO
FILOTB PTDDB(A3) ; PRINTER
MOVB #^D0,D1 ; LAST BYTE TO PRINTER
FILOTB PTDDB(A3)
RTN
SUB: MOVB #^D27,D1 ; [AO3] 1ST DOUBLE BYTE IS
FILOTB PTDDB(A3) ; FILE OUT TO PRINTER
MOVB #^D83,D1 ; 2ND DOUBLE BYTE OUT TO
FILOTB PTDDB(A3) ; PRINTER
MOVB #^D1,D1 ; LAST BYTE TO PRINTER
FILOTB PTDDB(A3)
RTN
SUBOFF: MOVB #^D27,D1 ; [AO3] 1ST DOUBLE BYTE IS
FILOTB PTDDB(A3) ; FILE OUT TO PRINTER
MOVB #^D84,D1 ; 2ND DOUBLE BYTE OUT TO
FILOTB PTDDB(A3) ; PRINTER
RTN
OFF17: MOVB #^D18,D1 ; [AO3] 1ST ITALIC OFF BYTE IS
FILOTB PTDDB(A3) ; FILE OUT TO PRINTER
RTN
HS: MOVB #^D27,D1 ; [AO3] 1ST DOUBLE BYTE IS
FILOTB PTDDB(A3) ; FILE OUT TO PRINTER
MOVB #^D40,D1 ; 2ND DOUBLE BYTE OUT TO
FILOTB PTDDB(A3) ; PRINTER
MOVB #^D0,D1 ; LAST BYTE TO PRINTER
FILOTB PTDDB(A3)
RTN
NLQ: MOVB #^D27,D1 ; [AO3] 1ST DOUBLE BYTE IS
FILOTB PTDDB(A3) ; FILE OUT TO PRINTER
MOVB #^D40,D1 ; 2ND DOUBLE BYTE OUT TO
FILOTB PTDDB(A3) ; PRINTER
MOVB #^D2,D1 ; LAST BYTE TO PRINTER
FILOTB PTDDB(A3)
RTN
UTILIT: MOVB #^D27,D1 ; [AO3] 1ST DOUBLE BYTE IS
FILOTB PTDDB(A3) ; FILE OUT TO PRINTER
MOVB #^D120,D1 ; 2ND DOUBLE BYTE OUT TO
FILOTB PTDDB(A3) ; PRINTER
MOVB #^D0,D1 ; LAST BYTE TO PRINTER
FILOTB PTDDB(A3)
RTN
LQ:
QUALIT ; LETTER QUALITY MACRO
RTN
EMPHAS: MOVB #^D27,D1 ; [AO3] 1ST DOUBLE BYTE IS
FILOTB PTDDB(A3) ; FILE OUT TO PRINTER
MOVB #^D69,D1 ; 2ND DOUBLE BYTE OUT TO
FILOTB PTDDB(A3) ; PRINTER
RTN
EMPOFF: MOVB #^D27,D1 ; [AO3] 1ST DOUBLE BYTE IS
FILOTB PTDDB(A3) ; FILE OUT TO PRINTER
MOVB #^D70,D1 ; 2ND DOUBLE BYTE OUT TO
FILOTB PTDDB(A3) ; PRINTER
RTN
RESID: MOVB #^D27,D1 ; [AO3] 1ST DOUBLE BYTE IS
FILOTB PTDDB(A3) ; FILE OUT TO PRINTER
MOVB #^D107,D1 ; 2ND DOUBLE BYTE OUT TO
FILOTB PTDDB(A3) ; PRINTER
MOVB #^D2,D1 ; LAST BYTE TO PRINTER
FILOTB PTDDB(A3)
RTN
PREST: MOVB #^D27,D1 ; [AO3] 1ST DOUBLE BYTE IS
FILOTB PTDDB(A3) ; FILE OUT TO PRINTER
MOVB #^D107,D1 ; 2ND DOUBLE BYTE OUT TO
FILOTB PTDDB(A3) ; PRINTER
MOVB #^D3,D1 ; LAST BYTE TO PRINTER
FILOTB PTDDB(A3)
RTN
LETTER: MOVB #^D27,D1 ; [AO3] 1ST DOUBLE BYTE IS
FILOTB PTDDB(A3) ; FILE OUT TO PRINTER
MOVB #^D107,D1 ; 2ND DOUBLE BYTE OUT TO
FILOTB PTDDB(A3) ; PRINTER
MOVB #^D6,D1 ; LAST BYTE TO PRINTER
FILOTB PTDDB(A3)
RTN
GRESID: MOVB #^D27,D1 ; [AO3] 1ST DOUBLE BYTE IS
FILOTB PTDDB(A3) ; FILE OUT TO PRINTER
MOVB #^D107,D1 ; 2ND DOUBLE BYTE OUT TO
FILOTB PTDDB(A3) ; PRINTER
MOVB #^D126,D1 ; LAST BYTE TO PRINTER
FILOTB PTDDB(A3)
RTN
GOTHIC: MOVB #^D27,D1 ; [AO3] 1ST DOUBLE BYTE IS
FILOTB PTDDB(A3) ; FILE OUT TO PRINTER
MOVB #^D107,D1 ; 2ND DOUBLE BYTE OUT TO
FILOTB PTDDB(A3) ; PRINTER
MOVB #^D127,D1 ; LAST BYTE TO PRINTER
FILOTB PTDDB(A3)
RTN
BUZZER: MOVB #^D7,D1 ; [AO3] 1ST DOUBLE BYTE IS
FILOTB PTDDB(A3) ; FILE OUT TO PRINTER
RTN
RESET: MOVB #^D27,D1 ; [AO3] 1ST DOUBLE BYTE IS
FILOTB PTDDB(A3) ; FILE OUT TO PRINTER
MOVB #^D64,D1 ; 2ND DOUBLE BYTE OUT TO
FILOTB PTDDB(A3) ; PRINTER
RTN
;************************
;* PDOVRP *
;************************
; Setup to overprint the last character
;
PDOVRP: SAVE D1,D2
MOVB #$CR,D1 ; get a carriage return
FILOTB PTDDB(A3) ; and output it
; Output leading spaces until positioned over last character
;
MOVW CURCOL(A3),D2 ; get start position of last char.
BEQ 5$
SUBW #1,D2 ; adjust to actual column number
MOVW D2,CURCOL(A3)
5$: MOVB #32.,D1 ; get a space[AO3]
BR 15$ ; and enter loop at end
10$: FILOTB PTDDB(A3) ; output a space
15$: DBF D2,10$ ; loop until positioned over last char
REST D1,D2
RTN
PAGE
;*********************
;* Carriage Movement *
;*********************
; Move to Absolute Horizontal Tab
;
MOVAHT: BYTE 0