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 / STEST.LBR / STEST007.Z80 < prev    next >
Text File  |  2000-06-30  |  5KB  |  234 lines

  1. ;
  2. ;  Program:  STEST007
  3. ;  Author:  Richard Conn
  4. ;  Date:  16 Jan 84
  5. ;  Version:  1.0
  6. ;  Previous Versions:  None
  7. ;
  8.  
  9. ;
  10. ;    The purpose of STEST007 is to exercise and test the SFXIO routines.
  11. ; STEST007 creates a file, allows the user to type lines into it, and
  12. ; then closes it.  It then reopens it and prints it back to the user.
  13. ;
  14.  
  15. ;
  16. ;  Constants
  17. ;
  18. cr    equ    0dh
  19. lf    equ    0ah
  20. ctrlz    equ    'Z'-'@'
  21.  
  22. ;
  23. ;    Library Routines Used
  24. ;
  25.     ext    fx$get,fx$put,fxi$close,fxi$open,fxo$close,fxo$open
  26.     ext    fname,bbline
  27.     ext    version
  28.     ext    pafdc    ; print A as floating decimal chars
  29.     ext    phlfdc    ; print HL as floating decimal chars
  30.     ext    safdc
  31.     ext    shlfdc
  32.     ext    print
  33.     ext    cin,cout,caps,crlf
  34.     ext    csout,sprint,sctlfl,sout
  35.     ext    codend
  36.     ext    fillb
  37.  
  38. ;
  39. ;  Beginning of Program -- Print banner
  40. ;
  41.     call    print
  42.     db    'STEST007 using SYSLIB Version ',0
  43.     call    version
  44.     ld    a,h
  45.     call    pafdc        ; print major version number
  46.     ld    a,'.'
  47.     call    cout
  48.     ld    a,l
  49.     call    pafdc        ; print minor version number
  50.     call    print
  51.     db    cr,lf,'    -- Testing SFXIO and SCTLFL Output',cr,lf,0
  52. ;
  53. ;  Get name of file
  54. ;
  55. mainloop:
  56.     call    print
  57.     db    'Name of File (RETURN to Exit)? ',0
  58.     ld    a,0ffh        ; capitalize line
  59.     call    bbline        ; get response from user
  60.     or    a        ; any chars?
  61.     ret    z
  62.     call    crlf
  63.     ld    de,iocfcb    ; pt to fcb of file
  64.     call    fname        ; extract file name
  65.     call    codend        ; get first byte of free space to use for
  66.     ex    de,hl        ; ... buffer in DE
  67.     ld    hl,ioctl    ; set user-provided I/O Control Values
  68.     ld    (hl),16        ; 16 128-byte blocks (2K)
  69.     ld    bc,6        ; skip 6 bytes
  70.     add    hl,bc
  71.     ld    (hl),e        ; store I/O Buffer address
  72.     inc    hl
  73.     ld    (hl),d
  74.     ld    de,ioctl    ; pt to I/O Control Block
  75.     call    fxo$open    ; open file for output
  76.     jp    nz,ml0        ; no error
  77.     call    print
  78.     db    'Error -- Cannot Create File',0
  79.     ret
  80.  
  81. ;
  82. ;  Set for printer and console or just console output
  83. ;
  84. ml0:
  85.     ld    a,1        ; set just console
  86.     ld    (sctlfl),a    ; set SYSLIB flag
  87.     call    print
  88.     db    'Do you want output to go to the printer as well (Y/N)? ',0
  89.     call    cin        ; get response
  90.     call    caps        ; capitalize
  91.     call    cout        ; echo
  92.     call    crlf        ; new line
  93.     cp    'Y'        ; yes?
  94.     jp    nz,ml1
  95.     ld    a,81h        ; set printer and console
  96.     ld    (sctlfl),a
  97. ;
  98. ;  Prompt for input
  99. ;
  100. ml1:
  101.     call    print
  102.     db    'Input Lines (End with just RETURN) --',cr,lf,0
  103.     ld    hl,0        ; set line counter
  104.     ld    (lcount),hl
  105. ;
  106. ;  Get lines from User
  107. ;
  108. ml2:
  109.     ld    hl,(lcount)    ; increment and print line number
  110.     inc    hl
  111.     ld    (lcount),hl
  112.     call    phlfdc        ; print with floating decimal
  113.     call    print
  114.     db    '.  ',0
  115.     xor    a        ; no caps
  116.     call    bbline        ; get input from user
  117.     or    a        ; any input?
  118.     jp    z,ml4
  119.     call    crlf
  120. ;
  121. ;  Copy Line into Output File
  122. ;
  123.     ld    de,ioctl    ; DE pts to I/O Control Block
  124. ml3:
  125.     ld    a,(hl)        ; get byte
  126.     or    a        ; done?
  127.     jp    z,ml3a
  128.     call    fx$put        ; put byte (I/O Control Block pted to by DE)
  129.     jp    z,werr
  130.     inc    hl        ; pt to next
  131.     jp    ml3
  132. ml3a:
  133.     ld    a,cr        ; put <CRLF> to file
  134.     call    fx$put
  135.     jp    z,werr
  136.     ld    a,lf
  137.     call    fx$put
  138.     jp    z,werr
  139.     jp    ml2
  140. ;
  141. ;  Error in writing to file
  142. ;
  143. werr:
  144.     call    print
  145.     db    cr,lf,'Error -- FX$PUT can''t write to file',0
  146.     ret
  147.  
  148. ;
  149. ;  Close Output File
  150. ;
  151. ml4:
  152.     ld    de,ioctl    ; pt to I/O Control Block
  153.     call    fxo$close    ; close file
  154.     jp    nz,ml4a
  155.     call    print
  156.     db    cr,lf,'Error -- FXO$CLOSE can''t close output file',0
  157.     ret
  158. ;
  159. ;  Open file and print to user
  160. ;
  161. ml4a:
  162.     ld    hl,0
  163.     ld    (lcount),hl    ; set line count
  164.     call    sprint        ; print to console and/or printer
  165.     db    cr,lf,'---------------------',cr,lf,0
  166.     call    sprint
  167.     db    'STEST007 using SYSLIB ',0
  168.     call    version
  169.     ld    a,h
  170.     call    safdc
  171.     ld    a,'.'
  172.     call    sout
  173.     ld    a,l
  174.     call    safdc
  175.     call    sprint
  176.     db    cr,lf,0
  177.     ld    de,ioctl    ; open file
  178.     call    fxi$open
  179.     jp    nz,ml5
  180.     call    print
  181.     db    cr,lf,'Error -- FXI$OPEN can''t open input file',0
  182.     ret
  183. ;
  184. ;  Read from file until end
  185. ;
  186. ml5:
  187.     call    sprint
  188.     db    'File output --',cr,lf,0
  189. ml5a:
  190.     ld    hl,(lcount)    ; increment and print line count
  191.     inc    hl
  192.     ld    (lcount),hl
  193.     call    shlfdc        ; print as floating
  194.     call    sprint
  195.     db    '.  ',0
  196. ml5b:
  197.     call    fx$get        ; get next byte
  198.     jp    z,ml6        ; past EOF?
  199.     cp    ctrlz        ; check for CTRLZ also
  200.     jp    z,ml6        ; at EOF
  201.     call    csout        ; send char to console/printer with tab exp
  202.     cp    lf        ; new line?
  203.     jp    z,ml5a
  204.     jp    ml5b
  205. ;
  206. ;  Done with read
  207. ;
  208. ml6:
  209.     call    fxi$close    ; close file
  210.     jp    nz,ml7
  211.     call    print
  212.     db    cr,lf,'Error -- FXI$CLOSE can''t close input file',0
  213.     ret
  214. ml7:
  215.     call    sprint
  216.     db    cr,lf,cr,lf,'--> End of Output <--',cr,lf,cr,lf,0
  217.     jp    mainloop
  218.  
  219. ;
  220. ;  Buffers
  221. ;
  222. lcount:
  223.     ds    2        ; line count
  224.  
  225. ;
  226. ;  I/O Control Block
  227. ;
  228. ioctl:
  229.     ds    8        ; 8 bytes for basic overhead
  230. iocfcb:
  231.     ds    36        ; 36 bytes for FCB
  232.  
  233.     end
  234.