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 / STEST013.Z80 < prev    next >
Text File  |  2000-06-30  |  3KB  |  136 lines

  1. ;
  2. ;  PROGRAM: STEST013
  3. ;  AUTHOR: RICHARD CONN
  4. ;  PURPOSE: TO TEST THE F$APPL FUNCTION OF SYSLIB.  STEST012 IS EXECUTED
  5. ;  WITH COMMANDS LIKE:
  6. ;    STEST013 FILE
  7. ;  THE USER WILL BE PROMPTED FOR TEXT TO INPUT, AND THIS TEST WILL BE
  8. ;  APPENDED AFTER THE LAST PIECE OF TEXT IN THE FILE.
  9. ;
  10.  
  11. ;
  12. ;  Externals
  13. ;
  14.     ext    initfcb
  15.     ext    print,bbline
  16.     ext    f$exist,f$make,f$write,f$close,eval10
  17.     ext    f$appl
  18.  
  19. ;
  20. ;  Equates
  21. ;
  22. fcb    equ    5ch
  23. fcb2    equ    6ch
  24. tbuff    equ    80h
  25. cr    equ    0dh
  26. lf    equ    0ah
  27. ctrlz    equ    'Z'-'@'
  28.  
  29. ;
  30. ;  Test program
  31. ;
  32.     call    print
  33.     db    'STEST013 - Text Append file test for SYSLIB',0
  34.     ld    a,(fcb+1)        ; check for help
  35.     cp    '/'
  36.     jp    z,help
  37.     cp    ' '
  38.     jp    nz,go
  39. ;
  40. ;  Print help message
  41. ;
  42. help:
  43.     call    print
  44.     db    cr,lf,'Syntax: STEST013 file cn'
  45.     db    cr,lf,'  "file" is the name of a file to append to'
  46.     db    cr,lf,'  The user is prompted for text to input'
  47.     db    0
  48.     ret
  49. ;
  50. ;  Start
  51. ;
  52. go:
  53.     ld    de,fcb        ; pt to fcb
  54.     call    initfcb        ; init for possible MAKE
  55.     call    f$exist        ; does file exist?
  56.     jp    nz,start
  57.     call    f$make        ; create file if not
  58.     ld    a,ctrlz        ; mark file as empty
  59.     ld    (tbuff),a
  60.     call    f$write        ; write 1 record
  61.     call    f$close        ; close it
  62. start:
  63.     call    f$appl        ; open file for append on last record
  64.     jp    z,start1
  65.     cp    3        ; empty file?
  66.     jp    z,start1
  67.     call    print
  68.     db    cr,lf,'File Append Error',0
  69.     ret
  70. start1:
  71.     ld    hl,tbuff    ; find continuation point
  72. start2:
  73.     ld    a,(hl)        ; get char
  74.     inc    hl        ; pt to next
  75.     cp    ctrlz        ; done?
  76.     jp    nz,start2
  77.     dec    hl        ; pt to ctrlz
  78. loop:
  79.     ld    (hl),ctrlz    ; store ctrlz as if done
  80.     push    hl        ; save ptr
  81.     call    print
  82.     db    cr,lf,'Input Line (CR to End)> ',0
  83.     xor    a        ; no caps
  84.     call    bbline        ; get line from user
  85.     pop    de        ; ptr to buffer in DE
  86.     ld    a,(hl)        ; get first char
  87.     or    a        ; none?
  88.     jp    z,done
  89.     ex    de,hl        ; HL pts to dest, DE to source
  90. loop1:
  91.     ld    a,(de)        ; get next char
  92.     or    a        ; done?
  93.     jp    z,loop2
  94.     call    putch        ; put char to disk
  95.     jp    loop1
  96. loop2:
  97.     ld    a,cr        ; put CRLF
  98.     call    putch
  99.     ld    a,lf
  100.     call    putch
  101.     jp    loop
  102.  
  103. ;
  104. ;  Put char in A to disk
  105. ;
  106. putch:
  107.     ld    (hl),a        ; store it
  108.     inc    hl        ; pt to next
  109.     inc    de
  110.     ld    a,h        ; record full?
  111.     or    a        ; 0=no
  112.     ret    z
  113.     push    de        ; save ptr to source
  114.     ld    de,fcb        ; write record
  115.     call    f$write
  116.     pop    de        ; get ptr to source
  117.     ld    hl,tbuff    ; pt to tbuff as dest
  118.     ret            ; continue
  119. ;
  120. ;  Fill last record with ^Z
  121. ;  DE pts to next char in record
  122. ;
  123. done:
  124.     ld    a,ctrlz        ; write ^Z
  125.     ld    (de),a
  126.     inc    de        ; pt to next
  127.     ld    a,d        ; done?
  128.     or    a        ; 0=no
  129.     jp    z,done
  130.     ld    de,fcb        ; write last record
  131.     call    f$write
  132.     call    f$close        ; close file
  133.     ret
  134.  
  135.     end
  136.