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 / ZCPR3 / COMMENT.MAC < prev    next >
Text File  |  2000-06-30  |  4KB  |  196 lines

  1. ;  PROGRAM:  COMMENT
  2. ;  AUTHOR:  Richard Conn
  3. ;  VERSION:  2.0
  4. ;  DATE:  18 MAY 84
  5. ;  PREVIOUS VERSIONS:  1.0 (18 APR 83)
  6.  
  7. vers    equ    20
  8. z3env    set    0f400h
  9.  
  10. ;
  11. ;    COMMENT echoes lines, with simple character editing, to the user's
  12. ; console.  This program is designed to facilitate communication between
  13. ; two users who see the same console via redirectable I/O.  They can chat
  14. ; freely to each other by using this program.
  15. ;
  16.  
  17. llen    equ    65    ;number of chars allowed before auto newline
  18.  
  19. fcb    equ    5ch    ;FCB
  20.  
  21. ctrlc    equ    'C'-'@'    ;Abort Character
  22. esc    equ    1bh    ;Escape (Abort Character)
  23. cr    equ    0dh    ;New Line
  24. lf    equ    0ah    ;Line Feed
  25. bs    equ    8    ;Back Space
  26. del    equ    7fh    ;Delete Char
  27. ctrlp    equ    'P'-'@'    ;^P
  28. ctrlu    equ    'U'-'@'    ;^U
  29. ctrlx    equ    'X'-'@'    ;^X
  30.  
  31. ;
  32. ; Externals
  33. ;
  34.     ext    z3init
  35.     ext    cin,cout,crlf,eprint,lout,lcrlf
  36.  
  37. ;
  38. ; Environment Definition
  39. ;
  40.     if    z3env ne 0
  41. ;
  42. ; External ZCPR3 Environment Descriptor
  43. ;
  44.     jmp    start
  45.     db    'Z3ENV'    ;This is a ZCPR3 Utility
  46.     db    1    ;External Environment Descriptor
  47. z3eadr:
  48.     dw    z3env
  49. start:
  50.     lhld    z3eadr    ;pt to ZCPR3 environment
  51. ;
  52.     else
  53. ;
  54. ; Internal ZCPR3 Environment Descriptor
  55. ;
  56.     MACLIB    Z3BASE.LIB
  57.     MACLIB    SYSENV.LIB
  58. z3eadr:
  59.     jmp    start
  60.     SYSENV
  61. start:
  62.     lxi    h,z3eadr    ;pt to ZCPR3 environment
  63.     endif
  64.  
  65. ;
  66. ; Start of Program -- Initialize ZCPR3 Environment
  67. ;
  68.     call    z3init    ;initialize the ZCPR3 Env and the VLIB Env
  69.     call    eprint
  70.     db    'COMMENT, Version '
  71.     db    (vers/10)+'0','.',(vers mod 10)+'0',0
  72.     lda    fcb+1    ;check for help request
  73.     cpi    '/'    ;help?
  74.     jnz    cmt
  75. ;
  76. ;  Help for COMMENT
  77. ;
  78.     call    eprint
  79.     db    cr,lf,'   COMMENT'
  80.     db    cr,lf,'Internal Commands:'
  81.     db    cr,lf,'  ^C or ESC - Abort'
  82.     db    cr,lf,'     ^P     - Toggle Print'
  83.     db    cr,lf,'  BS or DEL - Delete Prev Char'
  84.     db    cr,lf,'  ^U or ^X  - Delete Line'
  85.     db    0
  86.     ret
  87. ;
  88. ;  Beginning of Comment Routine
  89. ;
  90. cmt:
  91.     call    eprint
  92.     db    cr,lf,'Strike ^C or ESC to Abort, ^P to Toggle Print'
  93.     db    cr,lf,0
  94.     xra    a    ;clear print flag
  95.     sta    prflag
  96.     call    comment    ;print first prompt and set char count
  97. ;
  98. ;  Main Character Input Loop
  99. ;
  100. loop:
  101.     call    cin    ;input char
  102.     ani    7fh    ;mask MSB
  103.     cpi    ctrlc
  104.     rz
  105.     cpi    esc
  106.     rz
  107.     cpi    ctrlp    ;toggle print flag
  108.     jz    prtog
  109.     cpi    cr    ;new line?
  110.     jz    newline
  111.     cpi    bs    ;back up?
  112.     jz    back
  113.     cpi    del    ;back up?
  114.     jz    back
  115.     cpi    ctrlu    ;erase line?
  116.     jz    eraln
  117.     cpi    ctrlx    ;erase line?
  118.     jz    eraln
  119.     call    cout
  120.     cpi    ' '    ;printable char?
  121.     jc    loop
  122.     mov    b,a    ;save char in B
  123.     lda    prflag    ;print?
  124.     ora    a    ;0=no
  125.     mov    a,b    ;get char to print
  126.     cnz    lout    ;print char if PRFLAG is NZ
  127.     inr    c    ;increment char count
  128.     mvi    a,llen    ;check for nearing end of line
  129.     cmp    c
  130.     cz    comment
  131.     jmp    loop
  132. ;
  133. ;  Toggle print flag
  134. ;
  135. prtog:
  136.     lda    prflag    ;flip flag
  137.     cma
  138.     sta    prflag
  139.     ora    a    ;new line to printer if print flag now off
  140.     cz    lcrlf
  141.     jmp    loop
  142. ;
  143. ;  Routine to begin a new line
  144. ;
  145. newline:
  146.     call    comment    ;new line, print prompt, set char count to zero
  147.     jmp    loop
  148. ;
  149. ;  Back up one character
  150. ;
  151. back:
  152.     mov    a,c    ;check for no chars
  153.     ora    a
  154.     jz    loop
  155.     call    back1    ;backup routine
  156.     jmp    loop    ;continue
  157. ;
  158. ;  General Routine for backing up
  159. ;
  160. back1:
  161.     dcr    c    ;count down
  162.     mvi    a,bs    ;backspace
  163.     call    cout
  164.     mvi    a,' '    ;space
  165.     call    cout
  166.     mvi    a,bs    ;backspace
  167.     jmp    cout
  168. ;
  169. ;  Erase Current Line
  170. ;
  171. eraln:
  172.     mov    a,c    ;done?
  173.     ora    a
  174.     jz    loop
  175.     call    back1    ;backup
  176.     jmp    eraln
  177. ;
  178. ;  Print User Prompt
  179. ;
  180. comment:
  181.     call    eprint
  182.     db    cr,lf,'Comment> ',0
  183.     lda    prflag    ;new line to printer if print flag on
  184.     ora    a
  185.     cnz    lcrlf
  186.     mvi    c,0    ;set char count
  187.     ret
  188.  
  189. ;
  190. ;  Buffers
  191. ;
  192. prflag:
  193.     ds    1    ;print flag (0=off, 0FFH=on)
  194.  
  195.     end
  196.