home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / zcpr33 / syslbsrc.lbr / SDIR04.ZY0 / SDIR04.ZY0
Text File  |  1989-09-17  |  2KB  |  94 lines

  1. ;    TITLE    "SDIR04 - Syslib 4.0"
  2.     NAME    ('FSIZE')
  3. ;=================================================================
  4. ;   The Libraries, Version 4, (C) 1989 by Alpha Systems Corp.
  5. ;-----------------------------------------------------------------
  6. ; Author  : Harold F. Bower
  7. ;        Derived from SDIR04.Z80 Ver 1.6 by Richard Conn
  8. ; Date    : 17 Sep 89
  9. ; Version : 1.7
  10. ; Module  : SDIR04
  11. ; Abstract: This module contains the routine FSIZE which will
  12. ;    compute the size of the file whose last extent is add-
  13. ;    ressed.  The file size is returned in K.  Files in
  14. ;    excess of 512K are reported via overflow information.
  15. ; Revision:
  16. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  17. ; Module Entry Points
  18.  
  19.     PUBLIC        FSIZE
  20.  
  21. ; From SYSLIB Get..
  22.  
  23.     EXT        BLKMSK
  24.  
  25.     .Z80
  26.     CSEG
  27. ;===============================================================
  28. ; NAME - FSIZE
  29. ; Entry: HL - Points to A Filename in FCB format
  30. ; Exit : DE - Contains file size in K
  31. ; Uses : DE
  32. ; Special Requirements: The DPARAMS routine MUST be called
  33. ;             before using this routine
  34. ;===============================================================
  35.  
  36. FSIZE:    PUSH    BC        ; Save regs
  37.     PUSH    HL
  38.     PUSH    AF
  39.     LD    DE,12        ; Point to Extent
  40.     ADD    HL,DE
  41.     LD    E,(HL)        ; Get Extent #
  42.     LD    D,0
  43.     INC    HL        ; Skip S1
  44.     INC    HL        ; Skip S2
  45.     PUSH    HL        ; Save Ptr to S2
  46.     INC    HL        ; HL pts to record count field
  47.     LD    A,(HL)        ; Get record count of last extent
  48.     EX    DE,HL
  49.     ADD    HL,HL        ; Number of extents times 16K
  50.     ADD    HL,HL
  51.     ADD    HL,HL
  52.     ADD    HL,HL
  53.     EX    DE,HL        ; Total size pf previous extents in DE
  54.  
  55.     POP    HL        ; Get ptr to S2        S.K.
  56.     PUSH    AF        ; Save A
  57.     LD    A,(HL)        ; Get S2
  58.     OR    A        ; Overflow
  59.     JR    Z,NOVFL
  60.     EX    DE,HL
  61.     LD    DE,512
  62.  
  63. LP:    ADD    HL,DE
  64.     DEC    A
  65.     JR    NZ,LP
  66.     EX    DE,HL
  67.  
  68. NOVFL:    POP    AF        ; Get A back        End S.K.
  69.  
  70.     LD    HL,BLKMSK
  71.     ADD    A,(HL)        ; Round last extent to block size
  72.     RRCA
  73.     RRCA            ; Convert from records to K
  74.     RRCA
  75.     AND    1FH
  76.     LD    L,A        ; Add size of last extent to total of previous
  77.     LD    H,0        ; HL=Size of last Extent, DE=Total of previous
  78.     ADD    HL,DE        ; HL = Total File Size in Blocks
  79.     LD    A,(BLKMSK)    ; Get Records/BLK-1
  80.     RRCA
  81.     RRCA            ; Convert to K/BLK
  82.     RRCA
  83.     AND    1FH
  84.     CPL            ; Use to finish rounding
  85.     AND    L
  86.     LD    L,A        ; HL now equals the size of the file in K Incr.
  87.     EX    DE,HL        ; DE = File size in K
  88.     POP    AF        ; Restore regs
  89.     POP    HL
  90.     POP    BC
  91.     RET
  92.  
  93.     END
  94.