home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol090 / spstr.mac < prev    next >
Encoding:
Text File  |  1984-04-29  |  1.6 KB  |  91 lines

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