home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / zsys / znode-12 / a / chrs.lbr / CHRS.ASM next >
Encoding:
Assembly Source File  |  1993-06-12  |  2.1 KB  |  125 lines

  1. ;
  2. ; CHRS.ASM 02/24/83 J B PALMER
  3. ; WILL SEND HEX CHARS IN COMMAND TAIL TO PRINTER
  4. ;
  5. ; 03/31/84 - LEE BRADLEY - MAINTAINED FUNCTION TABLE  
  6. ;
  7. WBOOT    EQU    0
  8. BDOS    EQU    5
  9. DFB    EQU    80H
  10. LST    EQU    5
  11. PSTR    EQU    9
  12.  
  13.     ORG    100H
  14. CHRS:    JMP    START
  15.  
  16. HELMSG:                  ;  EXAMPLES FOR MX-80
  17.     DB 13,10,'CHRS.COM 3/31/84',13,10
  18.     DB 13,10
  19.     DB 'CHRS 09       => HORIZONTAL TAB',13,10
  20.     DB 'CHRS 0A       => LINE FEED',13,10
  21.     DB 'CHRS 0C       => FORM FEED',13,10
  22.     DB 'CHRS 0D       => CARRIAGE RETURN',13,10
  23.     DB 'CHRS 0F       => COMPRESSED',13,10
  24.     DB 'CHRS 1B 2D 01 => UNDERLINE',13,10
  25.     DB 'CHRS 1B 30    => LINE SPACING TO 1/8"',13,10
  26.     DB 'CHRS 1B 34    => ITALIC',13,10
  27.     DB 'CHRS 1B 38    => IGNORE PAPER OUT SENSOR',13,10
  28.     DB 'CHRS 1B 40    => RESET ALL',13,10
  29.     DB 'CHRS 1B 45    => EMPHASIZED',13,10
  30.     DB 'CHRS 1B 47    => OVERSTRIKE',13,10
  31.     DB 'CHRS 1B 4E 02 => SKIP PERF',13,10
  32.     DB 'CHRS 1B 57 01 => DOUBLE WIDE',13,10
  33.     DB 13,10
  34.     DB '$'
  35. HELP:
  36.     LXI    D,HELMSG
  37.     MVI    C,PSTR
  38.     CALL    BDOS
  39.     JMP    WBOOT
  40. START:
  41.     LXI    SP,DFB
  42.     LXI    H,DFB    ; DEFAULT BUFFER
  43.     MOV    C,M    ; NUMBER OF BYTES
  44.     INX    H
  45.     SHLD    PTR    ; START OF COMMAND TAIL
  46.     MOV    A,C
  47.     CPI    3    ; AT LEAST 3 BYTES
  48.     JC    HELP    ; SHORT OR MISSING TAIL
  49. LOOP:
  50.     MOV    A,C
  51.     ORA    A    ; TEST FOR END
  52.     JZ    ALLOK
  53.     CALL    GETBYTE
  54.     CALL    LSTOUT
  55.     JMP    LOOP
  56.  
  57. PTR:    DW    0
  58. ALLOK:
  59.     LHLD    PTR
  60.     MVI    M,'$'
  61.     MVI    C,PSTR
  62.     LXI    D,ISENT
  63.     CALL    BDOS
  64.     MVI    C,PSTR
  65.     LXI    D,DFB + 2
  66.     CALL    BDOS
  67.     MVI    C,PSTR
  68.     LXI    D,TOPRINT
  69.     CALL    BDOS
  70.     JMP    WBOOT    ; WARM BOOT
  71. ISENT:
  72.     DB 'I SENT $'
  73. TOPRINT:
  74.     DB ' TO PRINTER.$'
  75. LSTOUT:
  76.     PUSH    B
  77.     MVI    C,LST
  78.     MOV    E,A
  79.     CALL    BDOS
  80.     POP    B
  81.     RET
  82. GETBYTE:
  83.     LHLD    PTR
  84.     MOV    A,M
  85.     CPI    ' '    ; IF SPACE, SKIP
  86.     JNZ    GETBY1
  87.     INX     H
  88.     DCR    C
  89.     JM    ERROR    ; WENT TOO FAR !
  90.     RZ        ; ALLOW ONE LAST SPACE.
  91. GETBY1:
  92.     CALL    GETNIBL
  93.     RAL
  94.     RAL
  95.     RAL
  96.     RAL
  97.     MOV    B,A
  98.     CALL    GETNIBL
  99.     ORA    B
  100.     SHLD    PTR
  101.     RET
  102. GETNIBL:
  103.     MOV    A,M
  104.     INX    H
  105.     DCR    C
  106.     JM     ERROR
  107.     SUI    '0'
  108.     JC    ERROR
  109.     CPI    10
  110.     CMC
  111.     RNC        ; WAS < 10
  112.     SUI    07    ; A TO 10, F TO 15
  113.     JC    ERROR    ; ERROR IF CARRY
  114.     CPI    16
  115.     CMC
  116.     RNC        ; ERROR IF CARRY
  117. ERROR:
  118.     LXI    D,ERRMESS
  119.     MVI    C,PSTR
  120.     CALL    BDOS
  121.     JMP    WBOOT    ; WARM BOOT
  122. ERRMESS:
  123.     DB 'INVALID CODE ! $'
  124.     END     CHRS
  125.