home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / progm / assemutl.zip / GETSP.ASM < prev    next >
Assembly Source File  |  1984-05-01  |  4KB  |  162 lines

  1.  ; GETSPACE
  2.  ;
  3.  ; THIS ROUTINE COMPUTES USUABLE SPACE
  4.  ; AVAILABLE ON
  5.  ; DISKETTE OR HARD DISK AND IS CALLED
  6.  ; FROM BASIC
  7.  ;
  8.  ; WRITTEN BY HOWARD GLOSSER
  9.  ;
  10. CSEG                SEGMENT
  11. GETSPACE            PROC FAR
  12.           ASSUME    CS:CSEG
  13.           PUSH      BP
  14.           MOV       BP,SP
  15.           MOV       BX,[BP]+6
  16.           MOV       DI,2[BX]
  17.           MOV       CX,8
  18.           MOV       AL,' '
  19.           CLD
  20.           REP       STOSB
  21.           MOV       BX,[BP+8] 
  22.           MOV       SI,2[BX]
  23.           MOV       AX,[SI]
  24.           AND       AL,0DFH
  25.           CMP       AL,41H
  26.           JGE       CKVER
  27.           JMP       EXITSPC
  28. CKVER: 
  29.           PUSH      AX
  30.           MOV       AH,30H
  31.           INT       21H
  32.           XCHG      AL,AH
  33.           CMP       AX,0200H
  34.           JB        SYSDRV
  35.           JMP       SPACE20
  36. SYSDRV: 
  37.           MOV       AH,19H
  38.           INT       21H
  39.           POP       DX
  40.           XOR       DL,40H
  41.           DEC       DL
  42.           CMP       AL,DL
  43.           JE        GETFAT
  44.           PUSH      AX
  45.           PUSH      DX
  46.           MOV       AH,0EH
  47.           INT       21H
  48.           POP       CX
  49.           POP       DX
  50.           INC       CL
  51.           CMP       CL,AL
  52.           JBE       GETFAT
  53.           JMP       EXITSPC
  54. GETFAT: 
  55.           PUSH      DX
  56.           MOV       AH,1BH
  57.           INT       21H
  58.           POP       AX
  59.           PUSH      DX
  60.           XCHG      AL,DL
  61.           MOV       AH,0EH
  62.           INT       21H
  63.           POP       DX
  64.           MOV       DI,BX
  65.           MOV       AL,BYTE PTR[DI]
  66.           MOV       SI,CX
  67.           CMP       AL,0FEH
  68.           JE        SNGLSIDE
  69.           SHL       SI,1
  70. SNGLSIDE: 
  71.           ADD       DI,3
  72.           MOV       CX,DX
  73.           XOR       AX,AX
  74.           XOR       DX,DX
  75.                                     ;WORD
  76.           PUSH      AX
  77.           PUSH      DX
  78. SCANFAT: 
  79.           MOV       AX,[DI]
  80.           INC       DI
  81.           AND       AX,0FFFH
  82.           CMP       AX,00H
  83.           JNE       NEXTENT
  84.           CLC 
  85.           POP       DX
  86.           POP       AX
  87.           ADD       AX,SI
  88.           JNC       STRSPC1
  89.           INC       DX
  90. STRSPC1:
  91.           PUSH      AX
  92.           PUSH      DX
  93. NEXTENT: 
  94.           DEC       CX
  95.           JCXZ      END1
  96.           MOV       AX,[DI]
  97.           ADD       DI,2
  98.           PUSH      CX
  99.           MOV       CL,4
  100.           SHR       AX,CL
  101.           POP       CX
  102.           CMP       AX,00H
  103.           JNE       NOTAVAIL
  104.           CLC 
  105.           POP       DX
  106.           POP       AX
  107.           ADD       AX,SI
  108.           JNC       STRSPC2
  109.           INC       DX
  110. STRSPC2: 
  111.           PUSH      AX
  112.           PUSH      DX
  113. NOTAVAIL: 
  114.           LOOP      SCANFAT
  115. END1: 
  116.           MOV       AX,ES
  117.           MOV       DS,AX
  118.           JMP       ENDSPC
  119. SPACE20: 
  120.           POP       DX
  121.           XOR       DL,40H
  122.           MOV       AH,36H
  123.           INT       21H
  124.           CMP       AX,0FFFFH
  125.           JE        EXITSPC
  126.           XOR       DX,DX
  127.           MUL       CX
  128.           XCHG      BX,CX
  129.           MUL       CX
  130.           PUSH      AX
  131.           PUSH      DX
  132. ENDSPC: 
  133.           MOV       BX,[BP]+6
  134.           MOV       DI,2[BX]
  135.           ADD       DI,7
  136.           POP       DX
  137.           POP       AX
  138. HEXTODEC: 
  139.           MOV       SI,10
  140.           PUSH      AX
  141.           MOV       AX,DX
  142.           XOR       DX,DX
  143.           DIV       SI
  144.           POP       CX
  145.           PUSH      AX
  146.           MOV       AX,CX
  147.           DIV       SI
  148.           POP       SI
  149.           OR        DL,30H
  150.           MOV       BYTE PTR[DI],DL
  151.           DEC       DI
  152.           XCHG      DX,SI
  153.           OR        AX,AX
  154.           JNZ       HEXTODEC
  155. EXITSPC: 
  156.           POP       BP
  157.           RET       4 
  158.           RET 
  159. GETSPACE            ENDP
  160. CSEG                ENDS
  161. END 
  162.