; 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