home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Oakland CPM Archive
/
oakcpm.iso
/
cpm
/
zcpr33
/
syslbsrc.lbr
/
SDIR04.ZY0
/
SDIR04.ZY0
Wrap
Text File
|
1989-09-17
|
2KB
|
94 lines
; TITLE "SDIR04 - Syslib 4.0"
NAME ('FSIZE')
;=================================================================
; The Libraries, Version 4, (C) 1989 by Alpha Systems Corp.
;-----------------------------------------------------------------
; Author : Harold F. Bower
; Derived from SDIR04.Z80 Ver 1.6 by Richard Conn
; Date : 17 Sep 89
; Version : 1.7
; Module : SDIR04
; Abstract: This module contains the routine FSIZE which will
; compute the size of the file whose last extent is add-
; ressed. The file size is returned in K. Files in
; excess of 512K are reported via overflow information.
; Revision:
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Module Entry Points
PUBLIC FSIZE
; From SYSLIB Get..
EXT BLKMSK
.Z80
CSEG
;===============================================================
; NAME - FSIZE
; Entry: HL - Points to A Filename in FCB format
; Exit : DE - Contains file size in K
; Uses : DE
; Special Requirements: The DPARAMS routine MUST be called
; before using this routine
;===============================================================
FSIZE: PUSH BC ; Save regs
PUSH HL
PUSH AF
LD DE,12 ; Point to Extent
ADD HL,DE
LD E,(HL) ; Get Extent #
LD D,0
INC HL ; Skip S1
INC HL ; Skip S2
PUSH HL ; Save Ptr to S2
INC HL ; HL pts to record count field
LD A,(HL) ; Get record count of last extent
EX DE,HL
ADD HL,HL ; Number of extents times 16K
ADD HL,HL
ADD HL,HL
ADD HL,HL
EX DE,HL ; Total size pf previous extents in DE
POP HL ; Get ptr to S2 S.K.
PUSH AF ; Save A
LD A,(HL) ; Get S2
OR A ; Overflow
JR Z,NOVFL
EX DE,HL
LD DE,512
LP: ADD HL,DE
DEC A
JR NZ,LP
EX DE,HL
NOVFL: POP AF ; Get A back End S.K.
LD HL,BLKMSK
ADD A,(HL) ; Round last extent to block size
RRCA
RRCA ; Convert from records to K
RRCA
AND 1FH
LD L,A ; Add size of last extent to total of previous
LD H,0 ; HL=Size of last Extent, DE=Total of previous
ADD HL,DE ; HL = Total File Size in Blocks
LD A,(BLKMSK) ; Get Records/BLK-1
RRCA
RRCA ; Convert to K/BLK
RRCA
AND 1FH
CPL ; Use to finish rounding
AND L
LD L,A ; HL now equals the size of the file in K Incr.
EX DE,HL ; DE = File size in K
POP AF ; Restore regs
POP HL
POP BC
RET
END