Metropoli BBS
VIEWER: diskinfo.bas MODE: TEXT (ASCII)
10 '----- DiskInfo.Bas 
20 DEFINT A-Z : CLS                         'SYSINT requires integers
30 DIM REG.IN(7), REG.OUT(7)                'dim register arrays
40 AX=0:BX=1:CX=2:DX=3:SI=4:DI=5:DS=6:ES=7  'define register elements
50 SYSINT$ = SPACE$(116)                    'load SYSINT into a string
60 FOR X=1 TO 116
70     READ A$ : MID$(SYSINT$, X, 1) = CHR$(VAL("&H" + A$))
80 NEXT
90 '
100 INPUT "Which drive - <Enter> for default"; D$
110 IF D$ = "" THEN DRIVE = 0 : GOTO 140    '0 = default drive
120 IF D$ < "A" OR D$ > "Z" THEN 100
130 DRIVE = ASC(D$) - 64                    '1 = A, 2 = B, etc.
140 REG.IN(AX) = 256 * &H36                 'Function 36h goes in AH
150 REG.IN(DX) = DRIVE                      'drive number goes in DL
160 INT.NO = &H21                           'Int 21h for DOS
170 '
180 DEF SEG : X = VARPTR(SYSINT$)           'get SYSINT address
190 SYSINT! = PEEK(X+1) + 256 * PEEK(X+2)
200 CALL SYSINT!(INT.NO, REG.IN(0), REG.OUT(0))
210 IF REG.OUT(AX) = -1 THEN PRINT "Invalid drive" : GOTO 100  'AX = FFFFh
220 SPC = REG.OUT(AX) : FRC = REG.OUT(BX)   'sectors/clusters, free clusters
230 BPS = REG.OUT(CX) : CPD = REG.OUT(DX)   'bytes/sector, clusters/disk
240 '
250 PRINT : PRINT "Logical Disk Setup"
260 PRINT "------------------------------"
270 PRINT "Bytes per sector    :" BPS
280 PRINT "Sectors per cluster :" SPC
290 PRINT "Clusters per disk   :" CPD
300 PRINT "------------------------------"
310 PRINT "Total disk space    : ";: PRINT USING "#########,"; BPS * SPC * CPD
320 PRINT "Disk free space     : ";: PRINT USING "#########,"; BPS * SPC * FRC
330 '
1000 DATA  55, 8B, EC, 8B, 5E, 0A, 8B, 07, 8B, 5E, 06, 8B, CB
1010 DATA  8B, 5E, 08, 06, 1E, E8, 05, 00, 00, 00, CD, 00, C3
1020 DATA  5D, 88, 46, 03, 89, 4E, 00, 8B, 4F, 04, 8B, 57, 06
1030 DATA  8B, 77, 08, 8B, 7F, 0A, 8B, 47, 0E, 3D, FF, FF, 74
1040 DATA  02, 8E, C0, 8B, 47, 0C, 3D, FF, FF, 74, 02, 8E, D8
1050 DATA  36, 8B, 07, 36, 8B, 5F, 02, E8, CC, FF, 53, 8B, 5E
1060 DATA  00, 36, 89, 07, 36, 8F, 47, 02, 8C, D8, 36, 89, 47
1070 DATA  0C, 1F, 8C, C0, 89, 47, 0E, 07, 89, 4F, 04, 89, 57
1080 DATA  06, 89, 77, 08, 89, 7F, 0A, 5D, CA, 06, 00, 00

[ RETURN TO DIRECTORY ]