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 / SLIB2.LBR / SFSIZE.Z80 < prev    next >
Text File  |  2000-06-30  |  2KB  |  89 lines

  1. ;
  2. ;  SYSLIB Module Name:  SFSIZE
  3. ;  Author:  Richard Conn
  4. ;  SYSLIB Version Number:  3.6
  5. ;  Module Version Number:  1.1
  6.  
  7.     public    f$size
  8.  
  9. ;
  10. ;  BDOS FUNCTION
  11. ;
  12. GETFSIZ    EQU    35    ; GET FILE SIZE
  13.  
  14. ;
  15. ;  SYSLIB UTILITIES
  16. ;
  17.     EXT    MOVEB,INITFCB,BDOS,SHFTRH
  18.  
  19. ;
  20. ;  MACROS
  21. ;
  22. PUTRG    MACRO
  23.     PUSH    AF
  24.     PUSH    BC
  25.     PUSH    DE
  26.     ENDM
  27.  
  28. GETRG    MACRO
  29.     POP    DE
  30.     POP    BC
  31.     POP    AF
  32.     ENDM
  33.  
  34. ;
  35. ;  F$SIZE -- COMPUTE SIZE OF FILE WHOSE FIRST 12 FCB BYTES ARE PTED TO BY DE
  36. ;    THIS ROUTINE ASSUMES THE FILE IS LESS THAN THE MAX SIZE
  37. ;
  38. ;  ON INPUT, DE PTS TO FIRST 12 BYTES OF FCB (NO MORE IS NECESSARY)
  39. ;  ON OUTPUT, HL CONTAINS FILE SIZE IN K
  40. ;
  41. F$SIZE:
  42.     PUTRG
  43.     LD    HL,FCB        ; COPY THEIR 12 BYTES INTO LOCAL FCB
  44.     EX    DE,HL
  45.     LD    B,12        ; 12 BYTES
  46.     CALL    MOVEB
  47.     LD    DE,FCB        ; PT TO FCB
  48.     CALL    INITFCB        ; INIT IT
  49.     LD    C,GETFSIZ    ; GET FILE SIZE USING BDOS FUNCTION
  50.     CALL    BDOS
  51.     LD    D,0        ; SET NO OVERFLOW
  52.     LD    HL,(RANREC)    ; GET RANDOM RECORD NUMBER
  53.     CALL    SETOVER        ; SET FLAG IF OVER THIS K
  54.     CALL    SHFTRH        ; /2
  55.     CALL    SETOVER
  56.     CALL    SHFTRH        ; /4
  57.     CALL    SETOVER
  58.     CALL    SHFTRH        ; /8 FOR K
  59.     LD    A,D        ; CHECK FOR OVERFLOW
  60.     OR    A        ; 0=OK
  61.     JP    Z,FS1
  62.     INC    HL        ; ADD 1K SINCE OVERFLOW
  63. FS1:
  64.     GETRG
  65.     RET
  66.  
  67. ;
  68. ;  SET D=1 IF OVERFLOW OF EVEN BOUNDARY
  69. ;
  70. SETOVER:
  71.     LD    A,L        ; CHECK LSB
  72.     AND    1
  73.     RET    Z
  74.     LD    D,1        ; SET OVERFLOW INDICATOR
  75.     RET
  76.  
  77. ;
  78. ;  FCB BUFFER
  79. ;
  80. FCB:
  81.     DS    32
  82.     DB    0    ; SEQ RECORD
  83. RANREC:
  84.     DW    0    ; RANDOM RECORD NUMBER
  85. OVFL:
  86.     DB    0    ; OVERFLOW BYTE
  87.  
  88.     END
  89.