home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol172 / setoki.asm < prev    next >
Encoding:
Assembly Source File  |  1984-05-30  |  8.7 KB  |  250 lines

  1.  
  2. TITLE 'SETOKI.ASM'
  3.  
  4. ************************************************************
  5. *                                                          *
  6. *  SETOKI is a menu-driven utility to set printer options  *
  7. *  for the Okidata Microline 92 printer.   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. *  Version 1.2 by Steve Leon, 02/12/84 for Okidata         *
  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. ESC     EQU  1BH        ;ESCAPE CHARACTER                  
  34. RS      EQU  1EH        ;10 CPI
  35. FS      EQU  1CH        ;12 CPI
  36. GS      EQU  1DH        ;17 CPI
  37. US      EQU  1FH        ;DOUBLE WIDTH
  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  '6'        ;6 LINES PER INCH
  68.         JZ   V6
  69.         CPI  '8'        ;8 LINES PER INCH
  70.         JZ   V8
  71.         CPI  '1'        ;10 CPI              
  72.         JZ   LARGE   
  73.         CPI  '2'        ;12 CPI             
  74.         JZ   MED
  75.         CPI  '7'        ;17 CPI
  76.         JZ   SMALL
  77.     CPI  '^'    ;CANCEL UNDERLINE
  78.     JZ   VM
  79.         CPI  'F'        ;FORM FEED
  80.         JZ   FMFD
  81.         CPI  'L'        ;LINE FEED
  82.         JZ   LINEF
  83.         CPI  'W'        ;DOUBLE WIDTH
  84.         JZ   DBLE
  85.         CPI  '-'        ;SUBSCRIPT
  86.         JZ   V9
  87.         CPI  '+'        ;SUPERSCRIPT
  88.         JZ   V0
  89.         CPI  'C'        ;CORRESPONDENCE QUALITY
  90.         JZ   VS
  91.         CPI  'R'        ;CANCEL CORRESPONDENCE QUALITY
  92.         JZ   VR
  93.         CPI  'E'        ;EMPHASIZED
  94.         JZ   V9
  95.         CPI  'N'        ;ENHANCED
  96.         JZ   V0
  97.         CPI  'Z'        ;CANCEL EMPHASIZED & ENHANCED
  98.         JZ   VZ
  99.     CPI  'U'    ;UNDERLINE
  100.     JZ   VU                                         
  101.         CPI  'Q'        ;QUIT
  102.         JZ   QUIT
  103.         CPI  'T'        ;TEST
  104.         JZ   TEST
  105.  
  106.         ;PRINT ERROR MESSAGE
  107.  
  108.         MVI  C,PRTSTR   ;PREPARE BDOS TO OUTPUT THE ERROR
  109.             ;MESSAGE STRING
  110.         LXI  D,ERRMSG   ;POINT TO ERROR MESSAGE
  111.         CALL BDOS       ;PRINT IT AND
  112.         JMP  MENU       ; GO BACK TO MENU
  113.  
  114.         ;STORE ESCAPE CODES FOR PROCESSING AT 
  115.         ;LABEL VERT:, JUMP TO SET UP ESCAPE STRING.
  116.         ;NOTE THAT SINCE ESCAPE CODES ARE VARIABLE
  117.         ;IN LENGTH, E. G. [ESC 'T'][ESC 'A'18],
  118.         ;SINGLE ESCAPE CODES ARE PADDED WITH A '$'.
  119.  
  120. V6:     MVI  A,'6'    ;ESC '6' 
  121.         MVI  B,'$'    ;RESET TO 6 LINES PER INCH
  122.         JMP  VERT
  123. V8:     MVI  A,'8'    ;ESC 'A'  
  124.         MVI  B,'$'    ;SET FOR 8 LINES PER INCH
  125.         JMP  VERT
  126. V9:     MVI  A,'J'    ;ESC 'J'  
  127.         MVI  B,'$'      ;SET SUPERSCRIPT, CANCEL SUBSCRIPT
  128.         JMP  VERT
  129. V0:     MVI  A,'L'    ;ESC 'L'  
  130.         MVI  B,'$'      ;SET SUBSCRIPT, CANCEL SUPER 
  131.         JMP  VERT
  132. VU:     MVI  A,'C'    ;ESC 'C'
  133.         MVI  B,'$'    ;UNDERLINE
  134.         JMP  VERT
  135. VM:     MVI  A,'D'    ;ESC 'D'
  136.         MVI  B,'$'    ;CANCEL UNDERLINE
  137.         JMP  VERT
  138. VS:     MVI  A,'1'    ;ESC '1'  
  139.         MVI  B,'$'      ;CORRESPONDENCE QUALITY
  140.         JMP  VERT
  141. VR:     MVI  A,'0'    ;ESC '0'
  142.         MVI  B,'$'    ;CANCEL CORRESPONDENCE QUALITY    
  143.         JMP  VERT
  144. VE:     MVI  A,'T'    ;ESC 'T'
  145.         MVI  B,'$'    ;EMPHASIZED
  146.         JMP  VERT
  147. VF:     MVI  A,'H'    ;ESC 'H'
  148.         MVI  B,'$'    ;ENHANCED  
  149.         JMP  VERT
  150. VZ:     MVI  A,'I'    ;ESC 'I'
  151.         MVI  B,'$'    ;CANCEL EMPHASIZED & ENHANCED
  152.         JMP  VERT
  153.  
  154.         ;STORE ESCAPE SEQUENCE CODE CHARACTERS AT
  155.         ;LABEL VSTR: FOR LATER OUTPUT THRU TEST1
  156.  
  157. VERT:   STA  VSTR+1     ;STORE 1st ESCAPE CHARACTER
  158.             ;ESC (1BH) IS PROVIDED AT VSTR + 0
  159.         MOV  A,B        ;STORE 2nd CHARACTER OR THE
  160.         STA  VSTR+2     ; PADDING '$' TERMINATOR     
  161.     MVI  A,'$'    ;HERE IS THE OTHER '$' YOU MAY NEED 
  162.     STA  VSTR+3    ; TERMINATE THE ESCAPE STRING 
  163.         LXI  H,VSTR     ;SET PC TO ESCAPE SEQUENCE STRING
  164.         JMP  TEST1      ;TEST FOR CHARACTERS & TERMINATOR
  165.  
  166.         ;SET  UP CONTROL CODES FOR OUTPUT
  167.  
  168. LARGE:  MVI  E,RS       ;10 CPI    
  169.         JMP  OUTPUT
  170. MED:    MVI  E,FS       ;12 CPI    
  171.         JMP  OUTPUT
  172. SMALL:  MVI  E,GS       ;17 CPI    
  173.         JMP  OUTPUT
  174. LINEF:  MVI  E,LF       ;LINE FEED
  175.         JMP  OUTPUT
  176. FMFD:   MVI  E,TOF      ;FORM FEED
  177.         JMP  OUTPUT
  178. DBLE:   MVI  E,US       ;DOUBLE WIDTH
  179.         JMP  OUTPUT
  180.  
  181.         ;OUTPUT CONTROL CODES TO PRINTER
  182.  
  183. OUTPUT: MVI  C,LSTOUT   ;PREPARE BDOS TO OUTPUT TO LST:
  184.         CALL BDOS       ; MOVE CHARACTER OUT TO PRINTER
  185.         MVI  E,CR       ;DUMP THE PRINTER
  186.         CALL BDOS       ; BUFFER (EMPTY IT WITH <CR>)
  187.         JMP  MENU       ;GO BACK TO THE MENU FOR ANOTHER
  188.  
  189. TEST:   LXI  H,TSTR     ;POINT TO THE BEGINNING OF THE   
  190.             ;PRINTER TEST STRING
  191.  
  192.         ;THE ESCAPE CODES ARE PROCESSED HERE
  193.  
  194. TEST1:  SHLD INDEX      ;STORE THE V-STRING ADDRESS INTO STORAGE
  195.         MOV  E,M        ;PUT CHARACTER TO PRINT INTO E FOR OUTPUT
  196.         MOV  A,E        ;MOVE CHAR INTO REG 'A' TO LOOK FOR '$'
  197.         CPI  '$'        ;IS IT STRING TERMINATOR '$'?
  198.         JZ   MENU       ;IF SO, END TEST AND GOTO MENU
  199.         MVI  C,LSTOUT   ;PRINT
  200.         CALL BDOS       ; CHARACTER
  201.         LHLD INDEX      ;GO BACK TO STORAGE FOR STRING ADDRESS
  202.         INX  H          ;INCREMENT PC TO NEXT CHARACTER
  203.         JMP  TEST1      ;PRINT IT
  204.  
  205. QUIT:   MVI  C,0        ;BACK TO
  206.         CALL BDOS       ; OPERATING SYSTEM
  207.  
  208.         ;SET UP MENU TABLE AND STRING OUTPUT DATA
  209.  
  210. MENDAT  DB   CR,LF,'                       PRINTER OPTIONS MENU',CR,LF   
  211.         DB   '                FOR OKIDATA MICROLINE 92 PRINTER',CR,LF,LF,LF
  212.         DB   '           1 = 10 CPI         2 = 12 CPI    7 = 17 CPI        ',CR,LF,LF
  213.         DB   '           W = DOUBLE WIDTH                         ',CR,LF
  214.         DB   '           8 = EIGHT LINES PER INCH         6 = SIX PER INCH',CR,LF   
  215.         DB   '           F = FORM FEED                    L = LINE FEED',CR,LF,LF
  216.         DB   '                                            TO CANCEL OPTION',CR,LF
  217.         DB   '           C = CORRESPONDENCE QUALITY              R',CR,LF
  218.         DB   '           E = EMPHASIZED                          Z',CR,LF       
  219.         DB   '           N = ENHANCED                            Z',CR,LF
  220.         DB   '           - = SUBSCRIPT                           +',CR,LF
  221.         DB   '           + = SUPERSCRIPT                         -',CR,LF
  222.     DB   '           U = UNDERLINE                           ^',CR,LF,LF
  223.         DB   '           T = TEST PRINTER                 Q = QUIT',CR,LF,LF    
  224.         DB   '     ENTER OPTION  ','$'
  225.  
  226. ERRMSG: DB   CR,LF,'         NO SUCH OPTION - TRY AGAIN!'
  227.     DB   CR,LF,'$'
  228.  
  229. VSTR:   DB   ESC     ;PROVIDE THE 1B HEX CHARACTER HERE
  230.         DS   3          ;RESERVE SPACE FOR THE NEXT 2 OR 3
  231.  
  232. TSTR:   DB   CR,LF,'ABCDEFGHIJKLMNOPQRSTUVWXYZ',CR,LF
  233.         DB   'abcdefghijklmnopqrstuvwxyz',CR,LF
  234.         DB   '1234567890-=`!@#%^&*()_+~',CR,LF
  235.         DB   '[]\|/;:''"{},.?<>',CR,LF,'$'
  236.             
  237.         ;RESERVE MEMORY FOR DATA AND STACK    
  238.  
  239. CHAR:   DS   1        ;RESERVE MEMORY FOR INPUT 
  240.             ;OF THE OPTION CHARACTER 
  241. INDEX:  DS   2        ;RESERVE MEMORY FOR "VSTR"     
  242.             ;ADRESS WHEN STORED AT TEST1
  243.         DS   32         ;DEFINE STACK - 16 LEVEL
  244. STACK:                  ;TOP OF STACK
  245.         END
  246. ....................................................................
  247.  
  248. ;David J. Raibert, CPA   D J Raibert & Associates, PA
  249. ;10 Wilsey Square, Ridgewood, NJ  07450
  250.