home *** CD-ROM | disk | FTP | other *** search
- TITLE COFREE - Diskette Contents List - Get Free Space
- SUBTTL Version 1.0 - June 1983
- PAGE 81,132
- ;
- CODE SEGMENT PARA PUBLIC 'CODE'
- ASSUME CS:CODE,DS:CODE
- ;
- EXTRN VERS:BYTE,FREE:BYTE
- X10000 DW 10000 ;Conversion constants
- X1000 DW 1000,100,10
- ;
- PUBLIC GETFRE
- GETFRE PROC NEAR
- TEST VERS,1
- JZ VERS1
- XOR DL,DL ;Set for default drive
- MOV AH,36H
- INT 21H ;v2.0 - get free space
- MUL BX
- MUL CX ;AX,DX contains bytes free
- JMP VCOM ;Enter common code
- VERS1: PUSH DS
- MOV AH,1BH
- INT 21H ;v1.x - get FAT
- XOR AH,AH
- XCHG CX,DX ;CX has number of units
- MUL DX ;Bytes/allocation unit
- PUSH AX ;Save
- XOR AX,AX
- MOV SI,2 ;First FAT entry
- FAT2: MOV DI,SI
- SHR DI,1
- ADD DI,SI ;Compute 1 1/2 bytes
- MOV DI,WORD PTR [BX+DI] ;Load FAT entry
- TEST SI,1 ;See if odd or even
- JZ FAT3
- SHR DI,1
- SHR DI,1
- SHR DI,1 ;Adjust for 12 bits
- SHR DI,1
- FAT3: AND DI,0FFFH ;Three nibbles
- JNZ FAT4 ;In use, so don't count
- INC AX
- FAT4: INC SI ;Step to next entry
- LOOP FAT2 ;Loop through FAT
- POP CX ;Restore bytes/allocation unit
- MUL CX ;Compute total free bytes
- POP DS ;Restore program seg reg
- VCOM: MOV DI,OFFSET FREE ;Point to output area
- CALL CONVRT ;Convert size to ASCII
- RET
- GETFRE ENDP
- ;
- PUBLIC CONVRT
- CONVRT PROC NEAR ;Converts 6 digits, zero surpressed
- PUSH DI ;Save pointer for later use
- DIV X10000 ;Result range 0-99
- AAM
- OR AX,'00' ;Make ASCII
- XCHG AH,AL
- STOSW ;Place in image
- MOV CX,3 ;Convert last four digits
- MOV SI,OFFSET X1000
- DIVLP: MOV AX,DX ;Remainder becomes dividend
- XOR DX,DX
- DIV WORD PTR [SI] ;Power of 10 divide
- OR AL,'0' ;Result range 0-9
- STOSB
- ADD SI,2
- LOOP DIVLP
- OR DL,'0' ;Last digit in remainder
- MOV AL,DL
- STOSB
- MOV CX,5 ;Now zero surpress 5 digits
- POP DI
- MOV AL,' '
- SUPLP: CMP BYTE PTR [DI],'0'
- JNZ DNECVT ;Conversion complete
- STOSB ;Replace leading zero with blank
- LOOP SUPLP
- DNECVT: RET
- CONVRT ENDP
- ;
- CODE ENDS
- ;
- END