home *** CD-ROM | disk | FTP | other *** search
- ; ----------------------------------------------------------------
- ; FILENAME: DISKSIZE.ASM
- ;
- ; FUNCTION: DISKSIZE -- Returns formatted size of disk in drive
- ; ----------------------------------------------------------------
- ; Copyright(c) 1991 - James Occhiogrosso
-
- INCLUDE DEVELOP.MAC ; Include Developer's Library macro file
-
- PUBLIC DISKSIZE ; Declare function
- ; and Clipper externals
- EXTRN __RETNL:FAR ; Return long number to Clipper
- EXTRN __PARINFO:FAR ; Get parameter info
- EXTRN __PARNI:FAR ; Get numeric integer parameter
-
- CODESEG SEGMENT 'CODE'
- ASSUME CS:CODESEG ; Define code segment
-
- DISKSIZE PROC FAR
-
- PUSH_REGS ; Save Clipper registers
- P_COUNT ; Get number of parameters in AX
- MOV DL, 0 ; Default drive for Int 36h
- CMP AX, 0 ; Was any parameter passed?
- JE DISK_INFO ; No! Get information for default
- P_TYPE 1 ; Yes! Check parameter type
- CMP AX, 2 ; Is it numeric?
- JE GET_DRIVE ; Yes! Get selected drive number
- MOV DX, 0FFFFh ; No! Set DX:AX to -1 (error),
- MOV AX, 0FFFFh ; and return to Clipper
- JMP EXIT
-
- GET_DRIVE:
- GET_PARNI 1 ; Get value of parameter 1 and
- MOV DX, AX ; put in DX (DL = drive code)
-
- DISK_INFO:
- MOV AH, 36h ; DOS - disk free space function
- INT 21h ; Interrupt DOS
-
- ; Return is:
- ; AX = sectors per cluster, BX = unused clusters
- ; CX = bytes per sector, DX = clusters per drive
-
- CMP AX, 0FFFFh ; Did an error occur?
- JNE CALC_SIZE ; No! Calculate the size
- MOV DX, 0FFFFh ; Yes! Set DX:AX to -1 (error)
- JMP EXIT ; and return to Clipper
-
- CALC_SIZE: ; Calculate disk size
- MOV BX, DX ; Temporarily save DX
- MUL BX ; Totalspace = AX * BX * CX
- MUL CX ; DX:AX is formatted size of disk
-
- EXIT:
- POP_REGS ; Restore Clipper registers
- RET_LONG ; Return DX:AX long integer
-
- DISKSIZE ENDP ; End of procedure
- CODESEG ENDS ; End of code segment
- END ; End of assembly
-
-