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 / SLIB1.LBR / SDIR04.Z80 < prev    next >
Text File  |  2000-06-30  |  2KB  |  85 lines

  1. ;
  2. ; SYSLIB Module Name:  SDIR04
  3. ; Author:  Richard Conn
  4. ; Part of SYSLIB3 SDIR Series
  5. ; SYSLIB Version Number:  3.6
  6. ; Module Version Number:  1.6
  7.  
  8.     public    fsize
  9.  
  10.     MACLIB    SDIRHDR.LIB
  11.  
  12. ;*
  13. ;*  COMPUTE SIZE OF FILE WHOSE LAST EXTENT IS POINTED TO BY HL
  14. ;*    FILE SIZE IS RETURNED IN DE IN K
  15. ;*  NOTE THAT THE ROUTINE DPARAMS MUST HAVE BEEN CALLED BEFORE THIS ROUTINE
  16. ;*    IS USED
  17. ;*
  18. ;*    Version 1.5 includes a fix proposed by Sigi Kluger in 6/3/84 which
  19. ;*    recognized overflow extents in S1.  Now files >512K in size are
  20. ;*    correctly recognized
  21. ;*
  22. FSIZE:
  23.     PUSH    BC    ; SAVE REGS
  24.     PUSH    HL
  25.     PUSH    AF
  26.     LD    DE,12    ; POINT TO EXTENT
  27.     ADD    HL,DE
  28.     LD    E,(HL)    ; GET EXTENT #
  29.     LD    D,0
  30.     INC    HL    ; SKIP S1
  31.     INC    HL    ; SKIP S2
  32.     PUSH    HL    ; SAVE PTR TO S2
  33.     INC    HL    ; HL PTS TO RECORD COUNT FIELD
  34.     LD    A,(HL)    ; GET RECORD COUNT OF LAST EXTENT
  35.     EX    DE,HL
  36.     ADD    HL,HL    ; NUMBER OF EXTENTS TIMES 16K
  37.     ADD    HL,HL
  38.     ADD    HL,HL
  39.     ADD    HL,HL
  40.     EX    DE,HL    ; TOTAL SIZE OF PREVIOUS EXTENTS IN DE
  41. ;
  42. ; SK
  43. ;
  44.     POP    HL    ; GET PTR TO S2
  45.     PUSH    AF    ; SAVE A
  46.     LD    A,(HL)    ; GET S2
  47.     OR    A    ; OVERFLOW
  48.     JP    Z,NOVFL
  49.     EX    DE,HL
  50.     LD    DE,512
  51. LP:
  52.     ADD    HL,DE
  53.     DEC    A
  54.     JP    NZ,LP
  55.     EX    DE,HL
  56. NOVFL:
  57.     POP    AF    ; GET A BACK
  58. ;
  59. ;END SK
  60. ;
  61.     LD    HL,BLKMSK
  62.     ADD    A,(HL)    ; ROUND LAST EXTENT TO BLOCK SIZE
  63.     RRCA
  64.     RRCA        ; CONVERT FROM RECORDS TO K
  65.     RRCA
  66.     AND    1FH
  67.     LD    L,A    ; ADD SIZE OF LAST EXTENT TO TOTAL OF PREVIOUS EXTENTS
  68.     LD    H,0    ; HL=SIZE OF LAST EXTENT, DE=TOTAL OF PREVIOUS EXTENTS
  69.     ADD    HL,DE    ; HL=TOTAL FILE SIZE IN BLOCKS
  70.     LD    A,(BLKMSK)    ; GET RECORDS/BLK-1
  71.     RRCA
  72.     RRCA        ; CONVERT TO K/BLK
  73.     RRCA
  74.     AND    1FH
  75.     CPL        ; USE TO FINISH ROUNDING
  76.     AND    L
  77.     LD    L,A    ; HL NOW EQUALS THE SIZE OF THE FILE IN K INCREMENTS
  78.     EX    DE,HL        ; DE=FILE SIZE IN K
  79.     POP    AF    ; RESTORE REGS
  80.     POP    HL
  81.     POP    BC
  82.     RET
  83.  
  84.     END
  85.