home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ZSYS / SIMTEL20 / SYSLIB / SLIB3.LBR / SSPSTR.Z80 < prev    next >
Text File  |  2000-06-30  |  2KB  |  99 lines

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