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;