home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / utils / txtutl / qt11.asm < prev    next >
Encoding:
Assembly Source File  |  1994-07-13  |  11.6 KB  |  404 lines

  1. ;************************************
  2. ;*                    *
  3. ;*  QUICK TYPE II            *
  4. ;*  VERSION (see below)         *
  5. ;*  A TYPEWRITER UTILITY        *
  6. ;*  BY ROGER GAGNON  04/01/85        *
  7. ;*  LANSING TECHNICAL DOWNLOAD        *
  8. ;*  (517) 694-8650 (RB)         *
  9. ;*                    *
  10. ;************************************
  11. ;
  12. PREFIX    EQU    '1'    ;major version number
  13. SUFFIX    EQU    '1'    ;minor revision number
  14. ;
  15. ;   v 1.1  4/18/84  Added NEC-8023A codes and slightly
  16. ;   modified some comments to make it easier for other
  17. ;   adaptations.  Changed max line length from 80 to 136
  18. ;   to allow smaller type sizes to be used to their full
  19. ;   extent.  Robert J. Sandel
  20. ;
  21. ;
  22. ; THIS PROGRAM ENABLES THE CONSOLE TO OPERATE AS A DIRECT
  23. ; OUTPUT TYPEWRITER. LINES CAN BE EDITED BEFORE PRINTING.
  24. ; PRINTER SETUP CODES CAN ALSO BE PASSED BY SIMPLY TYPING
  25. ; THE CONTROL KEYS AT THE KEYBOARD AND PRESSING RETURN. A
  26. ; HANDY UTILITY FOR NOTES, ENVELOPES, AND LABELS.
  27. ;
  28.     ORG    100H
  29.     JMP    PROGRAM
  30. ;
  31. ; **** GENERAL EQUATES ****
  32. ;
  33. maxbuf    equ    136        ;was originally 80
  34. BDOS    EQU    05H        ;STANDARD CALL TO OPERATING SYSTEM
  35. INSTR    EQU    0AH        ;READ CONSOLE BUFFER
  36. OUTSTR    EQU    09H        ;PRINT STRING
  37. OUTCHR    EQU    02H        ;CONSOLE OUTPUT
  38. CR    EQU    0DH        ;ASCII CODE FOR CR
  39. LF    EQU    0AH        ;ASCII CODE FOR LF
  40. TRUE    EQU    01H        ;VALUE FOR TRUE
  41. FALSE    EQU    00H        ;VALUE FOR FALSE
  42. TEMP    DS    1        ;TEMPORARY STORAGE SPACE
  43. ;
  44. ; **** PRINTER TAB INITIALIZATION ****
  45. ;
  46. ; THE FOLLOWING EQUATES SELECT ANY NECESSARY PRINTER TAB CODES
  47. ; AND SCREEN MESSAGES. SOME PRINTERS DON'T REQUIRE ANY SPECIAL
  48. ; CODES. SET PRINTER TO TRUE THEN SET SELECTED PRINTER TO TRUE.
  49. ; ALSO SET THE POINTER TO THE CORRECT PRINTER MESSAGE IN THE
  50. ; 'DISPLAY CODES' SECTION.
  51. ;
  52. PRINTER    EQU    TRUE        ;SET TO TRUE IF  A PRINTER IS SELECTED
  53. PROWRTR    EQU    FALSE        ;SET TO TRUE FOR C.ITOH PRINTERS
  54. NEC8023    EQU    TRUE        ;SET TO TRUE FOR NEC-8023A PRINTER
  55. GEMINI    EQU    FALSE        ;SET TO TRUE FOR GEMINI 10X PRINTERS
  56. ;
  57. ; **** MAIN PROGRAM ****
  58. ;
  59. PROGRAM    CALL    CRLF        ;PRINT CARRIAGE RETURN & LINEFEED
  60.     MVI    C,OUTSTR    ;PUT FUNCTION # IN C REG
  61.     LXI    D,MSG1        ;POINTER TO MESSAGE
  62.     CALL    BDOS        ;PRINT IT!
  63.     CALL    CRLF        ;PRINT A BLANK LINE ON CONSOLE
  64. ;
  65. ; **** ROUTINE TO INSTALL PRINTER TAB CODES ****
  66. ;
  67. IF    PRINTER
  68. ;
  69.     LXI    H,INITSTR+2    ;SET UP HL PAIR AND B
  70.     LDA    INITSTR+1    ;GET LENGTH OF SET UP STRING
  71.     MOV    B,A        ;GOES IN B
  72. OVER    MVI    C,05H        ;SEND CHARACTER TO PRINTER
  73.     MOV    E,M        ;GET CHARACTER FROM BUFFER
  74.     INX    H        ;INCREMENT POINTER
  75.     PUSH    H        ;SAVE H REGISTER
  76.     PUSH    B        ;SAVE B REG.
  77.     CALL    BDOS        ;DO IT!
  78.     POP    B        ;RESTORE B
  79.     POP    H        ;RESTORE H
  80.     DCR    B        ;CHECK IF DONE. DECREMENT COUNT
  81.     JNZ    OVER        ;NOT DONE, GET ANOTHER CHARACTER
  82.     JMP    GETCHR        ;GET ON WITH THE PROGRAM
  83. ;
  84. ENDIF
  85. ;
  86. ;
  87. IF    PROWRTR
  88. ;
  89. INITSTR    DB    42,39,27,40,48,48,56,',',48,49,54,',',48,50,52,','
  90.     DB    48,51,50,',',48,52,48,',',48,52,56,',',48,53,54,','
  91.     DB    48,54,52,',',48,55,50,'.',CR
  92. ;
  93. ENDIF
  94. ;
  95. ;
  96. IF    NEC8023
  97. ;
  98. INITSTR    DB    INEND-$-1    ;max number of bytes in string
  99.     DB    INEND-$        ;actual number of bytes
  100.     DB    11H        ;select code
  101.     DB    1BH,5BH,1BH,'E'    ;incremental and Elite
  102.         ;:::Tab settings below:::
  103.     DB    27,40,         48,48,56,',',48,49,54,',',48,50,52,','
  104.     DB    48,51,50,',',48,52,48,',',48,52,56,',',48,53,54,','
  105.     DB    48,54,52,',',48,55,50,',',48,56,48,',',48,56,56,','
  106.     DB    48,57,54,',',49,48,52,',',49,49,50,',',49,50,48,','
  107.     DB    49,50,56,'.'
  108. INEND    DB    CR
  109.  
  110. ;
  111. ENDIF
  112. ;
  113. IF    GEMINI
  114. ;
  115. INITSTR    DB    0,0,0,0,0,0    ;ECT........
  116. ;
  117. ENDIF
  118. ;
  119. ; **** INPUT AND RESPONSE LOOP ****
  120. ;
  121. GETCHR    MVI    A,maxbuf    ;SET MAX BUFFER LENGTH TO xx COLUMNS
  122.     STA    INBUF        ;STICK IT IN BUFFER
  123.     MVI    A,CR        ;SEED BUFFER WITH A CARRIAGE RETURN
  124.     STA    INBUF+2
  125.     MVI    A,00H        ;INITIALIZE STORAGE AREA
  126.     STA    TEMP
  127.     MVI    C,INSTR        ;CALL READ CONSOLE BUFFER
  128.     LXI    D,INBUF        ;BUFFER ADDRESS
  129.     CALL    BDOS
  130. ;
  131. ; **** CHECK IF INPUT IS A SPECIAL COMMAND CODE ****
  132. ;
  133.     LXI    H,INBUF+2    ;GET THE INPUT CHARACTER ADDRESS
  134.     MOV    A,M        ;MOVE IT INTO A REG
  135.     CPI    0DH        ;IS IT A CARRIAGE RETURN?
  136.     JZ    NEWLINE        ;DO A LINEFEED
  137.     CPI    3FH        ;IS IT A QUESTION MARK?
  138.     JZ    HELP        ;PRINT HELP MESSAGE
  139.     CPI    19H        ;IS IT FOR CLEAR SCREEN?
  140.     JZ    CLRSCRN        ;CLEAR THE SCREEN
  141.     CPI    01H        ;IS IT FOR RULER LINE?
  142.     JZ    RULER        ;PRINT RULER
  143. ;
  144. IF    PRINTER
  145. ;
  146.     CPI    1AH        ;IS IT FOR PRINTER CODES DISPLAY?
  147.     JZ    CODES        ;DISPLAY PRINTER CODES
  148. ;
  149. ENDIF
  150. ;
  151.     CPI    09H        ;IS IT A TAB CHARACTER?
  152.     JZ    TYPE        ;PROCEEDE TO PRINT IF SO
  153.     MVI    B,1FH        ;IS INPUT A PRINTER CODE?
  154.     ORA    B        ;MASK FOR CONTROL CODES
  155.     CPI    1FH
  156.     JNZ    TYPE        ;SKIP IF NOT
  157.     MVI    A,01H        ;OTHERWISE STORE YES INTO TEMP
  158.     STA    TEMP
  159. ;
  160. ; **** SEND INPUT STRING TO PRINTER ****
  161. ;
  162. TYPE    LXI    H,INBUF+2    ;SET UP HL PAIR AND B
  163.     LDA    INBUF+1        ;NUMBER OF CHARACTERS TYPED
  164.     CPI    00H        ;ANYTHING TYPED?
  165.     JZ    NEWLINE        ;IF NOT, DO A LINEFEED
  166.     MOV    B,A        ;GOES IN B
  167. AGAIN    MVI    C,05H        ;SEND CHARACTER TO PRINTER
  168.     MOV    E,M        ;GET CHARACTER FROM BUFFER
  169.     INX    H        ;INCREMENT POINTER
  170.     PUSH    H        ;SAVE H REGISTER
  171.     PUSH    B        ;SAVE B REG.
  172.     CALL    BDOS        ;DO IT!
  173.     POP    B        ;RESTORE B
  174.     POP    H        ;RESTORE H
  175.     DCR    B        ;CHECK IF DONE. DECREMENT COUNT
  176.     JNZ    AGAIN        ;NOT DONE, GET ANOTHER CHARACTER
  177.     LDA    TEMP        ;WAS IT A PRINTER SETUP STRING?
  178.     CPI    01H        ;COMPARE TO YES
  179.     JZ    ERALINE        ;ERASE INPUT LINE
  180. NEWLINE    MVI    C,5        ;DONE. TYPE LINEFEED
  181.     MVI    E,LF
  182.     CALL    BDOS
  183.     ;
  184. IF NEC8023
  185.     MVI    C,5        ;TYPE CARRIAGE RETURN
  186.     MVI    E,CR        ;NEC PRINT COMMAND &
  187.     CALL BDOS        ;CARRIAGE RETURN
  188. ENDIF
  189.     ;
  190.     CALL    CRLF        ;PRINT CR, LF ON CONSOLE
  191.     JMP    GETCHR        ;GO ANOTHER ROUND
  192. ;
  193. ; **** PRINT CHARACTERS TO CONSOLE ****
  194. ;
  195. PUTCHR    MVI    C,OUTCHR    ;BDOS FUNCTION #2
  196.     MOV    E,A        ;MOVE CHAR. TO E REG
  197.     CALL    BDOS        ;PRINT IT
  198.     RET
  199. ;
  200. ; **** CARRIAGE RETURN AND LINEFEED TO CONSOLE ****
  201. ;
  202. CRLF    MVI    A,CR
  203.     CALL    PUTCHR
  204.     MVI    A,LF
  205.     CALL    PUTCHR
  206.     RET
  207. ;
  208. ; **** DISPLAY HELP MESSAGE ****
  209. ;
  210. HELP    MVI    C,OUTSTR    ;PUT FUNCTION # IN C REG
  211.     LXI    D,MSG2        ;POINTER TO HELP MESSAGE
  212.     CALL    BDOS        ;PRINT IT!
  213.     CALL    CRLF        ;PRINT A BLANK LINE ON CONSOLE
  214.     JMP    GETCHR        ;BACK TO INPUT LOOP
  215. ;
  216. ; **** DISPLAY PRINTER CODES ****
  217. ;
  218. IF    PRINTER
  219. ;
  220. CODES    MVI    C,OUTSTR    ;PUT FUNCTION # IN C REG
  221.     LXI    D,PWRT        ;**** SET TO CORRECT PRINTER MESSAGE ****
  222.     CALL    BDOS        ;PRINT IT!
  223.     JMP    GETCHR        ;BACK TO INPUT LOOP
  224. ;
  225. ENDIF
  226. ;
  227. ; **** DISPLAY RULER LINE ON CONSOLE ****
  228. ;
  229. RULER    MVI    C,OUTSTR    ;PUT FUNCTION # IN C REG
  230.     LXI    D,MSG5        ;POINTER TO RULER
  231.     CALL    BDOS        ;PRINT IT!
  232.     JMP    GETCHR        ;BACK TO INPUT LOOP
  233. ;
  234. ; **** PRINT A BLANK LINE ON CONSOLE ****
  235. ;
  236. ERALINE    MVI    C,OUTSTR    ;PUT FUNCTION # IN C REG
  237.     LXI    D,MSG6        ;POINTER TO BLANK LINE
  238.     CALL    BDOS        ;DO IT!
  239.     JMP    GETCHR        ;BACK TO DOIN' IT
  240. ;
  241. ; **** CLEAR SCREEN SEQUENCE ****
  242. ;
  243. CLRSCRN    MVI    C,OUTSTR    ;PUT FUNCTION # IN C REG
  244.     LXI    D,MSG3        ;POINTER TO CLEAR SCREEN
  245.     CALL    BDOS        ;DO IT!
  246.     JMP    GETCHR        ;BACK TO DOIN' IT
  247. ;
  248. ; **** MESSAGES ****
  249. ;
  250. ; SIGN ON MESSAGE
  251. ;
  252. MSG1    DB    'Quick Type II   Version ',prefix,'.',suffix,CR,LF
  253.     DB    'Use CTL-C to exit, ? for HELP',CR,LF
  254.     DB    '$'
  255. ;
  256. ; HELP MESSAGE
  257. ;
  258. MSG2    DB    CR,LF,LF,LF,LF,LF
  259.     DB    '                 Quick Type II',CR,LF
  260.     DB    '                 Version  ',prefix,'.',suffix
  261.     DB    CR,LF,LF,LF
  262.     DB    '    This program allows the use of the console',CR,LF
  263.     DB    'as a direct output typewriter. Lines are typed',CR,LF
  264.     DB    'after each  <RETURN>.  Input line length is 136',CR,LF
  265.     DB    'characters maximum.',CR,LF
  266.     DB    LF,LF
  267.     DB    'Command Keys:'
  268.     DB    CR,LF,LF
  269.     DB    '  Ctrl - A     Display ruler line',CR,LF
  270.     DB    '  Ctrl - C     Exit to CP/M',CR,LF
  271.     DB    '  Ctrl - H     <BS> Backspace one character',CR,LF
  272.     DB    '  Ctrl - I     <TAB> Tab 8 spaces',CR,LF
  273.     DB    '  Ctrl - X     Erase line and start over',CR,LF
  274.     DB    '  Ctrl - Y     Clear screen',CR,LF
  275. ;
  276. IF    PRINTER
  277. ;
  278.     DB    '  Ctrl - Z     Display printer setup codes',CR,LF
  279. ;
  280. ENDIF
  281. ;
  282.     DB    '    ?          Display this help',CR,LF,LF,LF
  283.     DB    '$'
  284. ;
  285. MSG3    DB    LF,LF,LF,LF,LF,LF,LF,LF,LF,LF,LF,LF
  286.     DB    LF,LF,LF,LF,LF,LF,LF,LF,LF,LF,LF,LF,LF    ;good for 25 l.
  287.     DB    '$'
  288. ;
  289. ; RULER LINE DISPLAY
  290. ;
  291. MSG5    DB    ' ------^-1-----^---2---^-----3-^-------^'
  292.     DB    '-------^-5-----^---6---^-----7-^-------^'
  293.     DB    '-------^-9-----^---A---^-----B-^-------^-------^-D------'
  294.     DB    CR,LF
  295.     DB    '$'
  296. ;
  297. ; BLANK LINE
  298. ;
  299. MSG6    DB    CR,'                              ',CR,'$'
  300. ;
  301. ; PROWRITER CONTROL CODE DISPLAY MESSAGE
  302. ;
  303. IF    PROWRTR
  304. ;
  305. PWRT    DB    'Prowriter control codes:                '
  306.     DB    '        - Quick Type II - vers. ',prefix,'.',suffix
  307.     DB    CR,LF,LF
  308.     DB    '    ESC - N    Pica  (10 / inch)',CR,LF
  309.     DB    '    ESC - E    Elite (12 / inch)',CR,LF
  310.     DB    '    ESC - p    Pica  Proportional',CR,LF
  311.     DB    '    ESC - P    Elite Proportional',CR,LF
  312.     DB    '    ESC - n    Extended (9 / inch)',CR,LF
  313.     DB    '    ESC - q    Condensed (15 / inch)',CR,LF
  314.     DB    '    ESC - Q    Ultracondensed (17 / inch)',CR,LF,LF
  315.     DB    '    CTL - N    Headline on              '
  316.     DB    '    ESC - >    Left to right printing',CR,LF
  317.     DB    '    CTL - O    Headline off             '
  318.     DB    '    ESC - <    Bidirectional printing',CR,LF,LF
  319.     DB    '    ESC - !    Boldface on              '
  320.     DB    '    ESC - f    Forward linefeed',CR,LF
  321.     DB    '    ESC - "    Boldface off             '
  322.     DB    '    ESC - r    Reverse linefeed',CR,LF,LF
  323.     DB    '    ESC - X    Underline on             '
  324.     DB    '    ESC - A    6 Lines / inch',CR,LF
  325.     DB    '    ESC - Y    Underline off            '
  326.     DB    '    ESC - B    8 Lines / inch',CR,LF
  327.     DB    '                                        '
  328.     DB    '    ESC - Tnn  (distance = nn/144 inch)',CR,LF
  329.     DB    '    ESC - D    Slashed Zeros',CR,LF
  330.     DB    '    ESC - Z    Unslashed Zeros          '
  331.     DB    '    CTL - L    Form Feed',CR,LF,LF
  332.     DB    '$'
  333. ;
  334. ENDIF
  335. ;
  336. ; NEC-8023A CONTROL CODE DISPLAY MESSAGE
  337. ;
  338. IF    NEC8023
  339. ;
  340. PWRT    DB    CR,LF,LF,LF
  341.     DB    'NEC 8023A control codes:                '
  342.     DB    '        - Quick Type II - vers. ',prefix,'.',suffix
  343.     DB    CR,LF,LF
  344.     DB    '    ESC - N    Pica  (10 / inch)',CR,LF
  345.     DB    '    ESC - E    Elite (12 / inch)',CR,LF
  346.     DB    '    ESC - P    Elite Proportional',CR,LF
  347.     DB    '    ESC - Q    Ultracondensed (17 / inch)',CR,LF,LF
  348.     DB    '    CTL - N    Headline on              '
  349.     DB    '    ESC - Lnnn   Left Margin Offset  ',CR,LF
  350.     DB    '    CTL - O    Headline off             '
  351.     DB    '    ESC - 2      Clear(kill) all TABS',CR,LF,LF
  352.     DB    '    ESC - !    Boldface on              '
  353.     DB    '    ESC - f    Forward linefeed',CR,LF
  354.     DB    '    ESC - "    Boldface off             '
  355.     DB    '    ESC - r    Reverse linefeed',CR,LF,LF
  356.     DB    '    ESC - X    Underline on             '
  357.     DB    '    ESC - A    6 Lines / inch',CR,LF
  358.     DB    '    ESC - Y    Underline off            '
  359.     DB    '    ESC - B    8 Lines / inch',CR,LF
  360.     DB    '                                        '
  361.     DB    '    ESC - Tnn  (distance = nn/144 inch)',CR,LF
  362.     DB    '    CTL - L    Form Feed',CR,LF,LF
  363.     DB    '$'
  364. ;
  365. ENDIF
  366.  
  367.  
  368. IF    GEMINI
  369. ;
  370. GEMINI    DB    'Gemini control codes:                    '
  371.     DB    '        - Quick Type II - vers. ',prefix,'.',suffix
  372.     DB    CR,LF,LF
  373.     DB    '        -      Pica  (10 / inch)',CR,LF
  374.     DB    '        -      Elite (12 / inch)',CR,LF
  375.     DB    '        -      Pica  Proportional',CR,LF
  376.     DB    '        -      Elite Proportional',CR,LF
  377.     DB    '        -      Extended (9 / inch)',CR,LF
  378.     DB    '        -      Condensed (15 / inch)',CR,LF
  379.     DB    '        -      Ultracondensed (17 / inch)',CR,LF,LF
  380.     DB    '        -      Headline on              '
  381.     DB    '        -      Left to right printing',CR,LF
  382.     DB    '        -      Headline off             '
  383.     DB    '        -      Bidirectional printing',CR,LF,LF
  384.     DB    '        -      Boldface on              '
  385.     DB    '        -      Forward linefeed',CR,LF
  386.     DB    '        -      Boldface off             '
  387.     DB    '        -      Reverse linefeed',CR,LF,LF
  388.     DB    '        -      Underline on             '
  389.     DB    '        -      6 Lines / inch',CR,LF
  390.     DB    '        -      Underline off            '
  391.     DB    '        -      8 Lines / inch',CR,LF
  392.     DB    '                                        '
  393.     DB    '        -      (distance = nn/144 inch)',CR,LF
  394.     DB    '        -      Slashed Zeros',CR,LF
  395.     DB    '        -      Unslashed Zeros          '
  396.     DB    '        -      Form Feed',CR,LF,LF
  397.     DB    '$'
  398. ;
  399. ENDIF
  400. ;
  401. INBUF    DS    1        ;CONSOLE BUFFER STORAGE
  402. ;
  403.     END
  404.