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 / ENTERPRS / CPM / UTILS / F / PTXT10.ARC / PTXT10.MAC < prev    next >
Text File  |  1993-03-28  |  4KB  |  182 lines

  1. TITLE PTXT10.COM -- TEXT DISPLAY UTILITY
  2. ;
  3. ; 24 Jan 86    v1.0
  4. ;    PTXT10.MAC is a derivative of TEXT50.ASM.  It has
  5. ;    been improved to add a local stack (vital under some
  6. ;    condtitions), to use an ASCII Form Feed as a page break
  7. ;    character, to accept Control-S as a scroll pause
  8. ;    character, and to accept only Control-S or Control-Q
  9. ;    as scroll resume characters.
  10. ;    Control-X, Control-K, or Control-C will abort.
  11. ;    Intel mnemonics and 8080 code have been converted
  12. ;    to Zilog code/mnemonics. (Neither Intel mnemonics nor
  13. ;    ANY Intel CPU's will be supported in the future.)
  14. ;                    -Jim Sinning
  15. ;
  16. ;--------------------------------------------------------
  17. ;
  18. ;    **  ASCII Character Equates  **
  19. ;
  20. LF    EQU 0AH        ;ASCII Line Feed
  21. AFF    EQU 0CH        ;ASCII Form Feed
  22. CR    EQU 0DH        ;ASCII Carriage Return
  23. CTLC    EQU 'C'-40H    ;Control-C
  24. CTLK    EQU 'K'-40H    ;Control-K
  25. CTLQ    EQU 'Q'-40H    ;Control-Q
  26. CTLS    EQU 'S'-40H    ;Control-S
  27. CTLX    EQU 'X'-40H    ;Control-X
  28. EOF    EQU 1AH        ;END-OF-FILE Marker
  29. ESC    EQU 1BH        ;Escape Character
  30. ;
  31. ;
  32. ;    **  CP/M Equates  **
  33. ;
  34. BDOS    EQU 0005H    ;BDOS entry point
  35. ;
  36. DIRIO    EQU 6        ;direct console I/O
  37. ;
  38. ;=================================================
  39. ;
  40.     ORG    100H
  41. ;
  42. ;=================================================
  43. START:
  44.     LD (STACK),SP
  45.     LD SP,STACK
  46.     LD HL,BUFFER    ;point to text
  47. ;
  48. PLP:
  49.     LD A,(HL)    ;get a byte
  50.     INC HL        ;INC pointer
  51.     AND 7FH        ;Mask off hi-bit
  52.     OR A        ;done if 0
  53.     JR Z,DONE    ;YES, exit
  54.     CP AFF        ;page break ?
  55.     JR Z,PAGE    ;YES, break page
  56.     CALL PCHAR    ;NO, just print the char
  57.     CALL CKBRK    ;Check for abort
  58.     JR PLP        ;Loop
  59. ;
  60. DONE:
  61.     LD SP,(STACK)    ;Restore CP/M's Stack
  62.     RET        ;Return to CP/M
  63. ;
  64. PAGE:
  65.     PUSH HL        ;Save Text pointer
  66.     LD HL,PMSG    ;Point CR message
  67. PAGE2:
  68.     LD A,(HL)    ;Get message byte
  69.     INC HL        ;INC message pointer
  70.     OR A        ;Done if 0
  71.     JR Z,PAUSE    ;Yes, wait for CR
  72.     CALL PCHAR    ;No, type message char
  73.     JR PAGE2    ;Loop
  74. ;
  75. PAUSE:
  76.     LD E,0FFH    ;Direct Console Input
  77.     LD C,DIRIO
  78.     CALL BDOS
  79.     OR A        ;0 if nothing
  80.     JR Z,PAUSE
  81.     CP CR        ;Got a char; CR ?
  82.     JR Z,CONT    ;Yes, continue
  83.     CALL CKBK2
  84.     JR Z,DONE
  85.     JR PAUSE    ;No, loop till CR
  86. ;
  87. CONT:
  88.     CALL BLANK    ;Overwrite the Cont message
  89.     POP HL        ;Recover text pointer
  90.     JR PLP        ;and jump back to text loop
  91. ;
  92. BLANK:
  93.     LD HL,BLANKM
  94. BLNK2:
  95.     LD A,(HL)    ;Get a byte
  96.     OR A        ;Quit if 0
  97.     RET Z        ;and return to caller
  98.     INC HL        ;INC pointer
  99.     CALL PCHAR    ;Print the byte
  100.     JR BLNK2    ;Loop
  101. ;
  102. PCHAR:
  103.     PUSH HL        ;Save the pointer
  104.     LD E,A        ;byte into E for BDOS
  105.     LD C,DIRIO    ;Direct Console I/O
  106.     CALL BDOS
  107.     POP HL        ;Get out pointer back
  108.     RET
  109. ;
  110. CKBRK:
  111.     PUSH HL        ;Save the pointer
  112.     LD E,0FFH    ;Direct Console Input
  113.     LD C,DIRIO
  114.     CALL BDOS
  115.     POP HL        ;Recover the pointer
  116.     OR A        ;0 if nothing
  117.     RET Z        ;so just return
  118.     CALL CKBK2    ;Returns Z if abort requested
  119.     JR Z,DONE
  120.     CP CTLS        ;not abort, pause ?
  121.     JR Z,WAIT    ;yes, wait
  122.     RET        ;no, ignore anything else
  123. ;
  124. CKBK2:
  125.     CP CTLC        ;Got something, is ^C ?
  126.     RET Z        ;yes, quit
  127.     CP CTLX        ;^X then ?
  128.     RET Z        ;yes, quit
  129.     CP CTLK        ;^K maybe ?
  130.     RET        ;Return Z or NZ flag
  131. ;
  132. WAIT:
  133.     PUSH HL        ;Save the pointer
  134.     LD E,0FFH    ;Direct Console Input
  135.     LD C,DIRIO
  136.     CALL BDOS
  137.     POP HL        ;Recover the pointer
  138.     OR A        ;0 if nothing
  139.     JR Z,WAIT    ;so loop till something
  140.     CP CTLS        ;got something, ^S ?
  141.     RET Z        ;Yes, return
  142.     CP CTLQ        ;^Q then ?
  143.     JR NZ,WAIT    ;No, wait some more
  144.     RET
  145. ;
  146. ;=================================================
  147. ;   **  MESSAGES AND STACK AND TEXT BUFFER  **
  148. ;
  149. PMSG:
  150.     DEFB '<CR> to Continue...',0
  151. ;
  152. ; The following message is used to blank out the
  153. ; "<CR> to Continue..." message.  It is a variation
  154. ; of the backspace,space,backspace technique, and the
  155. ; length of spaces must equal the length of the PMSG:
  156. ; message above.  You could also use backspaces, but
  157. ; I prefer not to introduce control characters into
  158. ; someone's attempt to capture text sent via this program
  159. ; from an RBBS. (It is much easier to edit out a line
  160. ; of text and spaces than control chars.)
  161. BLANKM:
  162.     DEFB CR,'                   ',CR,0
  163. ;
  164. ; The following message will BE the stack...
  165.     DEFB CR,LF,'INSERT YOUR TEXT BETWEEN THE "->" '
  166.     DEFB 'AND THE "^@''s"',CR,LF
  167. STACK:
  168.     DEFB '->'    ;This is run-time stack pointer
  169.             ;storage as well as indicator for
  170.             ;text placement.
  171. ;
  172. ;
  173. BUFFER:            ;Text goes here
  174.     DEFB CR,LF,0,0    ;0's mark end of text
  175. ;
  176. ;
  177.     ;Now pad with EOF's to an even page boundary
  178.     DEFS (($+100H) AND 0FF00H)-$,1AH
  179. ;
  180.     END
  181. ;
  182.