home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol172 / epsprtr.a86 < prev    next >
Encoding:
Text File  |  1984-05-30  |  8.5 KB  |  304 lines

  1.  
  2. M    EQU    Byte Ptr 0[BX]
  3.     TITLE    'EPSPRTR.A86'
  4. ;
  5. ;       USE ASM86 TO ASSEMBLE
  6. ;       THEN GENCMD EPSPRTR 8080
  7. ;
  8. ;***********************************************************
  9. ;                                                          *
  10. ;  EPSPRTR is a menu-driven utility to set printer op-     *
  11. ;  tions for MX printers with Graftrax +.  This program    *
  12. ;  is derived from the October 1983 Microsystems article   *
  13. ;  "Write a Menu-Driven Utility to Set Printer Options"    *
  14. ;  written by Robert L. LaFara of Castle Oaks Computer     *
  15. ;  Services, Indianapolis, IN.  Assemble with MAC or ASM.  *                  
  16. ;                                                          *
  17. ;  ------------------------------------------------------  *
  18. ;                                                          *
  19. ;  Version 1.1 by David J. Raibert, December 3, 1983       *
  20. ;  XLT86 translation by Steve Leon, March 16, 1984         *
  21. ;***********************************************************
  22. ;SET EQUATES FOR CP/M BDOS FUNCTION & CALLS
  23. CONOUT    EQU    2            ;OUTPUT TO CONSOLE
  24. BDOS    EQU    5
  25. LST    EQU    5            ;OUTPUT TO THE LST: DEVICE
  26. CONDIR    EQU    6            ;DIRECT INPUT FROM THE CONSOLE
  27. PRTSTR    EQU    9            ;OUTPUT A STRING TO THE CONSOLE
  28. ;SET EQUATES FOR CONTROL CODE   
  29. ;(NON ESCAPE SEQUENCE) OUTPUTS
  30. LF    EQU    8AH            ;LINE FEED
  31. TOF    EQU    0CH            ;FORM FEED       
  32. CR    EQU    0DH            ;CARRIAGE RETURN
  33. SM    EQU    8FH            ;COMPRESSED PRINT
  34. DC2    EQU    92H            ;TURN OFF COMPRESSED PRINT
  35. ESC    EQU    1BH            ;ESCAPE CHARACTER                  
  36. ;INITIALIZE PROGRAM & SET STACK COUNTER
  37.     ORG    100H
  38.     MOV    SP,(Offset STACK)    ;SET STACK COUNTER
  39. ;PRINT THE MENU
  40. MENU:    MOV    CL,PRTSTR        ;PREPARE BDOS TO OUTPUT MENU STRING
  41.     MOV    DX,(Offset MENDAT)    ;POINT TO BEGINNING OF MENU STRING
  42.     INT    224            ;PRINT THE MENU STRING
  43. ;INPUT THE CHARACTER FROM THE MENU
  44. ;STORE IT, ECHO IT TO CONSOLE
  45. CHARIN:    MOV    CL,CONDIR        ;PREPARE BDOS
  46.     MOV    DL,0FFH            ; FOR DIRECT CON-
  47.     INT    224            ;  SOLE INPUT
  48.     CMP    AL,0            ;CHARACTER RECEIVED?
  49.     JZ    CHARIN            ;IF NOT, LOOP BACK AND TRY AGAIN
  50.     MOV    Byte Ptr CHAR,AL    ;SAVE IT FOR LATER    
  51.     MOV    CL,CONOUT        ;ECHO 
  52.     MOV    DL,AL            ; IT TO
  53.     INT    224            ;  CONSOLE
  54. ;TEST FOR MENU OPTION SELECTED & JUMP TO ES-
  55. ;CAPE OR CONTROL CODE. OTHER CHARACTERS CAN
  56. ;BE USED IF < + ^ > OR @ ARE NOT AVAILABLE
  57.     MOV    AL,Byte Ptr CHAR    ;GET OPTION CHARACTER STORED AT CHAR:
  58.     CMP    AL,'3'            ;3 LINES PER INCH
  59.     JNZ    L_1    
  60.     JMP    V3
  61. L_1:
  62.     CMP    AL,'4'            ;4 LINES PER INCH
  63.     JNZ    L_2    
  64.     JMP    V4
  65. L_2:
  66.     CMP    AL,'6'            ;6 LINES PER INCH
  67.     JNZ    L_3    
  68.     JMP    V6
  69. L_3:
  70.     CMP    AL,'8'            ;8 LINES PER INCH
  71.     JNZ    L_4    
  72.     JMP    V8
  73. L_4:
  74.     CMP    AL,'>'            ;CANCEL COMPRESSED
  75.     JNZ    L_5    
  76.     JMP    CANCEL
  77. L_5:
  78.     CMP    AL,'<'            ;CANCEL DOUBLE WIDTH
  79.     JNZ    L_6    
  80.     JMP    VV
  81. L_6:
  82.     CMP    AL,'^'            ;CANCEL UNDERLINE
  83.     JNZ    L_7    
  84.     JMP    VM
  85. L_7:
  86.     CMP    AL,'@'            ;RESET TO POWER UP INCL TOF
  87.     JNZ    L_8    
  88.     JMP    V@
  89. L_8:
  90.     CMP    AL,'+'            ;CANCEL UNIDIRECTIONAL
  91.     JNZ    L_9    
  92.     JMP    VB
  93. L_9:
  94.     AND    AL,5FH            ;DISCARD LOWER CASE BIT
  95.     CMP    AL,'F'            ;FORM FEED
  96.     JNZ    L_10    
  97.     JMP    FMFD
  98. L_10:
  99.     CMP    AL,'K'            ;SKIP OVER PERF
  100.     JNZ    L_11    
  101.     JMP    VK
  102. L_11:
  103.     CMP    AL,'L'            ;LINE FEED
  104.     JNZ    L_12    
  105.     JMP    LINEF
  106. L_12:
  107.     CMP    AL,'C'            ;COMPRESSED PRINT 
  108.     JNZ    L_13    
  109.     JMP    CPRD
  110. L_13:
  111.     CMP    AL,'W'            ;DOUBLE WIDTH
  112.     JNZ    L_14    
  113.     JMP    VW
  114. L_14:
  115. ;DO NOT IMPLEMENT ITALICS OR SUBSCRIPT IF
  116. ; GRAFTRAX+ IS NOT INSTALLED IN THE PRINTER
  117.     CMP    AL,'I'            ;ITALICS
  118.     JZ    VI
  119.     CMP    AL,'J'            ;CANCEL ITALICS
  120.     JZ    VJ
  121.     CMP    AL,'S'            ;SUBSCRIPT 
  122.     JZ    VS
  123.     CMP    AL,'R'            ;CANCEL SUBSCRIPT
  124.     JZ    VR
  125.     CMP    AL,'D'            ;DOUBLESTRIKE
  126.     JNZ    L_15    
  127.     JMP    VD
  128. L_15:
  129.     CMP    AL,'H'            ;CANCEL DOUBLESTRIKE & SUBSCRIPT
  130.     JNZ    L_16    
  131.     JMP    VH
  132. L_16:
  133.     CMP    AL,'E'            ;EMPHASIZED
  134.     JNZ    L_17    
  135.     JMP    VE
  136. L_17:
  137.     CMP    AL,'Z'            ;CANCEL EMPHASIZED
  138.     JNZ    L_18    
  139.     JMP    VZ
  140. L_18:
  141.     CMP    AL,'U'            ;UNDERLINE
  142.     JNZ    L_19    
  143.     JMP    VU
  144. L_19:
  145.     CMP    AL,'V'            ;UNIDIRECTIONAL
  146.     JNZ    L_20    
  147.     JMP    VA
  148. L_20:
  149.     CMP    AL,'Q'            ;QUIT
  150.     JNZ    L_21    
  151.     JMP    QUIT
  152. L_21:
  153.     CMP    AL,'T'            ;TEST
  154.     JNZ    L_22    
  155.     JMP    TES
  156. L_22:
  157. ;PRINT ERROR MESSAGE
  158.     MOV    CL,PRTSTR        ;PREPARE BDOS TO OUTPUT THE ERROR
  159. ;MESSAGE STRING
  160.     MOV    DX,(Offset ERRMSG)    ;POINT TO ERROR MESSAGE
  161.     INT    224            ;PRINT IT AND
  162.     JMP    MENU            ; GO BACK TO MENU
  163. ;STORE ESCAPE CODES FOR PROCESSING AT 
  164. ;LABEL VERT:, JUMP TO SET UP ESCAPE STRING.
  165. ;NOTE THAT SINCE ESCAPE CODES ARE VARIABLE
  166. ;IN LENGTH, E. G. [ESC 'T'][ESC 'A'18],
  167. ;SINGLE ESCAPE CODES ARE PADDED WITH A '$'.
  168. V3:    MOV    AL,'A'            ;ESC 'A' 24 (/72nds)
  169.     MOV    CH,24            ;3 LINES PER INCH
  170.     JMP    VERT
  171. V4:    MOV    AL,'A'            ;ESC 'A' 18 (/72nds)
  172.     MOV    CH,18            ;4 LINES PER INCH
  173.     JMPS    VERT
  174. V6:    MOV    AL,'2'            ;ESC '2' 
  175.     MOV    CH,'$'            ;RESET TO 6 LINES PER INCH
  176.     JMPS    VERT
  177. V8:    MOV    AL,'0'            ;ESC 'A' 0
  178.     MOV    CH,'$'            ;SET FOR 8 LINES PER INCH
  179.     JMPS    VERT
  180. VK:    MOV    AL,'N'            ;ESC 'N' 6
  181.     MOV    CH,06            ;SET SKIP OVER PERF - 6 LINES
  182.     JMPS    VERT
  183. VI:    MOV    AL,'4'            ;ESC '4'
  184.     MOV    CH,'$'            ;ITALICS
  185.     JMPS    VERT
  186. VJ:    MOV    AL,'5'            ;ESC '5'
  187.     MOV    CH,'$'            ;CANCEL ITALICS
  188.     JMPS    VERT
  189. VS:    MOV    AL,'S'            ;ESC 'S' 1
  190.     MOV    CH,01            ;SUBSCRIPT
  191.     JMPS    VERT
  192. VR:    MOV    AL,'T'            ;ESC 'T'
  193.     MOV    CH,'$'            ;CANCEL SUBSCRIPT & UNIDIRECTIONAL
  194.     JMPS    VERT
  195. VW:    MOV    AL,'W'            ;ESC 'W' 1
  196.     MOV    CH,01            ;DOUBLE WIDTH
  197.     JMPS    VERT
  198. VV:    MOV    AL,'W'            ;ESC 'W' 0
  199.     MOV    CH,00            ;CANCEL DOUBLE WIDTH
  200.     JMPS    VERT
  201. VD:    MOV    AL,'G'            ;ESC 'G'
  202.     MOV    CH,'$'            ;DOUBLESTRIKE
  203.     JMPS    VERT
  204. VH:    MOV    AL,'H'            ;ESC 'H'
  205.     MOV    CH,'$'            ;CANCEL DOUBLESTRIKE & SUBSCRIPT
  206.     JMPS    VERT
  207. VE:    MOV    AL,'E'            ;ESC 'E'
  208.     MOV    CH,'$'            ;EMPHASIZED
  209.     JMPS    VERT
  210. VZ:    MOV    AL,'F'            ;ESC 'F'
  211.     MOV    CH,'$'            ;CANCEL EMPHASIZED
  212.     JMPS    VERT
  213. VU:    MOV    AL,'-'            ;UNDERLINE
  214.     MOV    CH,01
  215.     JMPS    VERT
  216. VM:    MOV    AL,'-'            ;CANCEL UNDERLINE
  217.     MOV    CH,00
  218.     JMPS    VERT
  219. VA:    MOV    AL,'U'            ;UNIDIRECTIONAL
  220.     MOV    CH,01
  221.     JMPS    VERT
  222. VB:    MOV    AL,'U'            ;CANCEL UNIDIRECTIONAL
  223.     MOV    CH,00
  224. V@:    MOV    AL,'@'            ;ESC '@'
  225.     MOV    CH,'$'            ;RESET ALL
  226.     JMPS    VERT
  227. ;STORE ESCAPE SEQUENCE CODE CHARACTERS AT
  228. ;LABEL VSTR: FOR LATER OUTPUT THRU TEST1
  229. VERT:    MOV    Byte Ptr VSTR+1,AL    ;STORE 1st ESCAPE CHARACTER
  230. ;ESC (1BH) IS PROVIDED AT VSTR + 0
  231.     MOV    AL,CH            ;STORE 2nd CHARACTER OR THE
  232.     MOV    Byte Ptr VSTR+2,AL    ; PADDING '$' TERMINATOR     
  233.     MOV    AL,'$'            ;HERE IS THE OTHER '$' YOU MAY NEED 
  234.     MOV    Byte Ptr VSTR+3,AL    ; TERMINATE THE ESCAPE STRING 
  235.     MOV    BX,(Offset VSTR)    ;SET PC TO ESCAPE SEQUENCE STRING
  236.     JMPS    TES1            ;TEST FOR CHARACTERS & TERMINATOR
  237. ;SET  UP CONTROL CODES FOR OUTPUT
  238. LINEF:    MOV    DL,LF            ;LINE FEED
  239.     JMPS    OUTPUT
  240. FMFD:    MOV    DL,TOF            ;FORM FEED
  241.     JMPS    OUTPUT
  242. CPRD:    MOV    DL,SM            ;COMPRESSED
  243.     JMPS    OUTPUT
  244. CANCEL:    MOV    DL,DC2            ;CANCEL COMPRESSED
  245.     JMPS    OUTPUT
  246. ;OUTPUT CONTROL CODES TO PRINTER
  247. OUTPUT:    MOV    CL,LST            ;PREPARE BDOS TO OUTPUT TO LST:
  248.     INT    224            ; MOVE CHARACTER OUT TO PRINTER
  249.     MOV    DL,CR            ;DUMP THE PRINTER
  250.     INT    224            ; BUFFER (EMPTY IT WITH <CR>)
  251.     JMP    MENU            ;GO BACK TO THE MENU FOR ANOTHER
  252. TES:    MOV    BX,(Offset TSTR)    ;POINT TO THE BEGINNING OF THE   
  253. ;PRINTER TEST STRING
  254. ;THE ESCAPE CODES ARE PROCESSED HERE
  255. TES1:    MOV    Word Ptr INDEX,BX    ;STORE THE V-STRING ADDRESS INTO STORAGE
  256.     MOV    DL,M            ;PUT CHARACTER TO PRINT INTO E FOR OUTPUT
  257.     MOV    AL,DL            ;MOVE CHAR INTO REG 'A' TO LOOK FOR '$'
  258.     CMP    AL,'$'            ;IS IT STRING TERMINATOR '$'?
  259.     JNZ    L_23    
  260.     JMP    MENU            ;IF SO, END TEST AND GOTO MENU
  261. L_23:
  262.     MOV    CL,LST            ;PRINT
  263.     INT    224            ; CHARACTER
  264.     MOV    BX,Word Ptr INDEX    ;GO BACK TO STORAGE FOR STRING ADDRESS
  265.     INC    BX            ;INCREMENT PC TO NEXT CHARACTER
  266.     JMPS    TES1            ;PRINT IT
  267. QUIT:    MOV    CL,0            ;BACK TO
  268.     INT    224            ; OPERATING SYSTEM
  269. ;SET UP MENU TABLE AND STRING OUTPUT DATA
  270. MENDAT    DB    CR,LF,'PRINTER OPTIONS MENU',CR,LF,LF
  271.     DB    ' 3 = THREE (3) LINES PER INCH     4 = FOUR (4) LINES',CR,LF
  272.     DB    ' 8 = EIGHT (8) LINES PER INCH     6 = RESET LINES',CR,LF,LF
  273.     DB    ' F = FORM FEED                    L = LINE FEED',CR,LF
  274.     DB    ' K = SKIP (SIX) OVER PERF',CR,LF
  275.     DB    '                                  TO CANCEL OPTION',CR,LF
  276.     DB    ' C = COMPRESSED PRINT-17 CPI ##          >',CR,LF
  277.     DB    ' W = DOUBLE WIDTH-5 CPI (+C=8.5)         <',CR,LF
  278.     DB    ' I = ITALICS                             J',CR,LF
  279.     DB    ' S = FINE PRINT##                        R & H',CR,LF
  280.     DB    ' D = DOUBLESTRIKE                        H',CR,LF
  281.     DB    ' E = EMPHASIZED**                        Z',CR,LF
  282.     DB    ' U = UNDERLINE                           ^',CR,LF
  283.     DB    ' V = UNIDIRECTIONAL L ->R                +',CR,LF
  284.     DB    ' @ = RESET TO POWER-UP INCL TOF',CR,LF
  285.     DB    '** > DO NOT USE WITH "C" OR "S" SEE ## ABOVE',CR,LF,LF
  286.     DB    ' T = TEST PRINTER                 Q = QUIT',CR,LF,LF
  287.     DB    'ENTER OPTION  ','$'
  288. ERRMSG    DB    CR,LF,'NO SUCH OPTION - TRY AGAIN!'
  289.     DB    CR,LF,'$'
  290. VSTR    DB    ESC            ;PROVIDE THE 1B HEX CHARACTER HERE
  291.     RS    3            ;RESERVE SPACE FOR THE NEXT 2 OR 3
  292. TSTR    DB    CR,LF,'ABCDEFGHIJKLMNOPQRSTUVWXYZ',CR,LF
  293.     DB    'abcdefghijklmnopqrstuvwxyz',CR,LF
  294.     DB    '1234567890-=`!@#%^&*()_+~',CR,LF
  295.     DB    '[]\|/;:''"{},.?<>',CR,LF,'$'
  296. ;RESERVE MEMORY FOR DATA AND STACK    
  297. CHAR    RS    1            ;RESERVE MEMORY FOR INPUT 
  298. ;OF THE OPTION CHARACTER 
  299. INDEX    RS    2            ;RESERVE MEMORY FOR "VSTR"     
  300. ;ADRESS WHEN STORED AT TES1
  301.     RS    32            ;DEFINE STACK - 16 LEVEL
  302. STACK:                    ;TOP OF STACK
  303.     END
  304.