home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol125 / sepstr.mqc / SEPSTR.MAC
Encoding:
Text File  |  1985-02-10  |  1.9 KB  |  92 lines

  1. ;
  2. ; SYSLIB Module Name:  SEPSTR
  3. ; Author:  Richard Conn
  4. ; SYSLIB Version Number:  2.0
  5. ; Module Version Number:  1.0
  6. ; Module Entry Points:
  7. ;    EPSTR
  8. ; Module External References:
  9. ;    COUT
  10. ;
  11.  
  12. ;
  13. ;  EPSTR -- 
  14. ;    PRINT STRING PTED TO BY HL
  15. ;    AFFECT ONLY HL -- WHEN DONE, HL PTS TO BYTE AFTER STRING
  16. ;    PERFORM NO CONTROL CHARACTER EXPANSION EXCEPT FOR <TAB>
  17. ;    INTERPRET <CR>, <LF>, <BEL>, <BS>
  18. ;
  19.     EXT    COUT
  20.  
  21. EPSTR::
  22.     PUSH    D    ; SAVE REGS
  23.     PUSH    B
  24.     PUSH    PSW    ; SAVE REG A AND FLAGS
  25.     MVI    C,0    ; SET POSITION COUNT
  26. PSL:    MOV    A,M    ; GET BYTE
  27.     INX    H    ; PT TO NEXT
  28.     ORA    A    ; 0=DONE
  29.     JZ    PSD
  30.     CPI    TAB    ; EXPAND <TAB>
  31.     JZ    PST
  32. ;  PRINT CHAR
  33.     INR    C    ; INCR POSITION
  34.     CALL    COUT    ; PRINT IT ON CON:
  35.     CPI    CR    ; CHECK FOR <CR>
  36.     JZ    PCR
  37.     CPI    LF    ; CHECK FOR <LF>
  38.     JZ    PLF
  39.     CPI    BEL    ; CHECK FOR <BEL>
  40.     JZ    PLF
  41.     CPI    BS    ; CHECK FOR <BS>
  42.     JZ    PBS
  43.     JMP    PSL
  44. ;  <CR> -- RESET POSITION COUNT
  45. PCR:    MVI    C,0    ; RESET
  46.     JMP    PSL
  47. ;  <LF>, <BEL>, <NULL> -- CURSOR DIDN'T ADVANCE
  48. PLF:    DCR    C    ; BACK UP COUNT BY 1
  49.     JMP    PSL
  50. ;  <BS> -- CURSOR WENT BACKWARD, MAYBE
  51. PBS:    MOV    A,C    ; CHECK FOR ZERO
  52.     ORA    A
  53.     JZ    PSL
  54.     DCR    C    ; BACK UP COUNT BY 2
  55.     DCR    C
  56.     JMP    PSL
  57. ;  EXPAND <TAB>
  58. PST:    MOV    A,C    ; GET COUNT
  59.     ANI    7    ; MASK FOR SUB FROM 8
  60.     MOV    B,A    ; STORE TEMPORARILY
  61.     MVI    A,8    ; SUBTRACT FROM 8 FOR <SP> COUNT
  62.     SUB    B
  63.     MOV    B,A    ; COUNT IN B
  64.     ADD    C    ; ADD TO POSITION COUNT
  65.     MOV    C,A
  66.     MVI    A,' '    ; PRINT <SP>
  67. PSTL:    CALL    COUT
  68.     DCR    B    ; COUNT DOWN
  69.     JNZ    PSTL
  70.     JMP    PSL
  71. ;  EPSTR DONE
  72. PSD:    POP    PSW    ; RESTORE REG A AND FLAGS
  73.     POP    B    ; RESTORE REGS
  74.     POP    D
  75.     RET
  76.  
  77. ;
  78. ;  ASCII SPECIAL CHARACTER EQUATES
  79. ;
  80. NULL    EQU     0    ; NULL
  81. BEL    EQU     7    ; BELL
  82. BS    EQU     8    ; BACKSPACE
  83. TAB    EQU     9    ; TAB
  84. LF    EQU    10    ; LINE FEED
  85. CR    EQU    13    ; CARRIAGE RETURN
  86. CTRLR    EQU    'R'-40H    ; CTRL-R
  87. CTRLU    EQU    'U'-40H    ; CTRL-U
  88. CTRLX    EQU    'X'-40H    ; CTRL-X
  89. DEL    EQU    7FH    ; DELETE CHAR
  90.  
  91.     END
  92.