home *** CD-ROM | disk | FTP | other *** search
- FUNCTION FREE_BYTES(UNIT : CHAR) : REAL;
-
- TYPE REG_PACK = RECORD
- AX,BX,CX,DX,BO,SI,DI,DS,ES,FLAGS : INTEGER
- END;
-
- VAR REGISTERS : REG_PACK;
- UNIT_BYTE : BYTE;
- R,A,B,C : REAL;
-
- BEGIN
- UNIT := UPCASE(UNIT);
- IF UNIT IN ['A'..'D'] THEN { A=1; B=2; C=3; D=4 else 0 }
- UNIT_BYTE := ORD(UNIT)-64
- ELSE UNIT_BYTE := 0;
- REGISTERS.DX := UNIT_BYTE;
- REGISTERS.AX := $36 * 256; { Call # must go in hi byte }
- MSDOS(REGISTERS);
- { Call $36 returns # of bytes per sector in CX; }
- { # of sectors per cluster in AX, and # of free }
- { clusters in BX, so free space in bytes is }
- { AX * BX * CX. This must be done in reals to }
- { avoid integer overflow. }
- A := REGISTERS.AX; B := REGISTERS.BX; C := REGISTERS.CX;
- R := A * B * C;
- FREE_BYTES := R
- END;