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 / SPSTR.Z80 < prev    next >
Text File  |  2000-06-30  |  2KB  |  100 lines

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