home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol172 / epsprtr.asm < prev    next >
Encoding:
Assembly Source File  |  1985-02-10  |  9.9 KB  |  301 lines

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