home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a013 / 1.ddi / SOURCE.EXE / DISKSIZE.ASM < prev    next >
Encoding:
Assembly Source File  |  1991-01-25  |  2.4 KB  |  63 lines

  1. ; ----------------------------------------------------------------
  2. ; FILENAME:  DISKSIZE.ASM
  3. ;
  4. ; FUNCTION:  DISKSIZE -- Returns formatted size of disk in drive
  5. ; ----------------------------------------------------------------
  6. ; Copyright(c)  1991 - James Occhiogrosso
  7.  
  8. INCLUDE DEVELOP.MAC      ; Include Developer's Library macro file
  9.  
  10. PUBLIC   DISKSIZE            ; Declare function
  11.                              ;   and Clipper externals
  12. EXTRN    __RETNL:FAR         ; Return long number to Clipper
  13. EXTRN    __PARINFO:FAR       ; Get parameter info
  14. EXTRN    __PARNI:FAR         ; Get numeric integer parameter
  15.  
  16. CODESEG  SEGMENT 'CODE'
  17.          ASSUME CS:CODESEG   ; Define code segment
  18.  
  19. DISKSIZE PROC  FAR
  20.  
  21.          PUSH_REGS           ; Save Clipper registers
  22.          P_COUNT             ; Get number of parameters in AX
  23.          MOV DL, 0           ; Default drive for Int 36h
  24.          CMP AX, 0           ; Was any parameter passed?
  25.          JE DISK_INFO        ; No! Get information for default
  26.          P_TYPE  1           ; Yes! Check parameter type
  27.          CMP AX, 2           ; Is it numeric?
  28.          JE GET_DRIVE        ; Yes! Get selected drive number
  29.          MOV DX, 0FFFFh      ; No! Set DX:AX to -1 (error),
  30.          MOV AX, 0FFFFh      ;     and return to Clipper
  31.          JMP EXIT
  32.  
  33. GET_DRIVE:
  34.          GET_PARNI 1         ; Get value of parameter 1 and
  35.          MOV DX, AX          ; put in DX (DL = drive code)
  36.  
  37. DISK_INFO:
  38.          MOV AH, 36h         ; DOS - disk free space function
  39.          INT 21h             ; Interrupt DOS
  40.  
  41.          ; Return is:
  42.          ; AX = sectors per cluster,  BX = unused clusters
  43.          ; CX = bytes per sector,     DX = clusters per drive
  44.  
  45.          CMP AX, 0FFFFh      ; Did an error occur?
  46.          JNE CALC_SIZE       ; No! Calculate the size
  47.          MOV DX, 0FFFFh      ; Yes! Set DX:AX to -1 (error)
  48.          JMP EXIT            ;   and return to Clipper
  49.  
  50. CALC_SIZE:                   ; Calculate disk size
  51.          MOV BX, DX          ; Temporarily save DX
  52.          MUL BX              ; Totalspace = AX * BX * CX
  53.          MUL CX              ; DX:AX is formatted size of disk
  54.  
  55. EXIT:
  56.          POP_REGS            ; Restore Clipper registers
  57.          RET_LONG            ; Return DX:AX long integer
  58.  
  59. DISKSIZE ENDP                ; End of procedure
  60. CODESEG  ENDS                ; End of code segment
  61.          END                 ; End of assembly
  62.  
  63.