odysseus schreef op 04 January 2003 @ 23:19:
Je kunt met functie 44, code 0DH, CL=40H bij de hardware-informatie komen. Daar heb je een word voor het aantal cylinders en een berg words die de layout van elke sector aangeven. Als je het wilt gebruiken dan zul je wel met assembler aan de slag moeten lijkt het

.
* odysseus denkt dat er in DOS 6.2 wel iets zit dat het makkelijker maakt
.
Met een Call Interrupt moet het werken in QB4.5. (moet je wel een obj laden), dus asm heb je niet echt nodig..
Dacht zelf dat het functie 21Hex was....maar kan me vergissen..
Ff zoeken..
[edit]
Quickbasic 4.5 laden met QB/L dan wordt de QB.QLB geladen die interrupt calls kan uitvoeren..
[edit2]
Gelijk maar even wat code om de schijfruimte uit te lezen... verdiep je in de wereld die interrupt heet en bouw heel PcTools na, incl "grafische mode" in textmode; heb ik heel wat uurtjes in gestopt
Ik zou het niet met shells gaan doen, is niet netjes en foutafhandeling heb je bijna niet en vooral: Het is traag! (maarja; dat maakt tegenwoordig ook niets meer uit)
DECLARE FUNCTION freediskspace& (dr$)
DEFINT A-Z
CONST true = -1, false = 0
$INCLUDE: 'qbx.bi'
DEFSNG A-Z
FUNCTION freediskspace& (dr$)
' Returns free disk space on drive dr$
'Define registers.
DIM regs AS RegType
Curd$ = CURDIR$
CHDRIVE dr$
'Get current drive info; set up input and do system call.
regs.ax = &H1900
CALL Interrupt(&H21, regs, regs)
'Convert drive info to readable form.
Drive$ = CHR$((regs.ax AND &HFF) + 65) + ":"
'Get disk free space; set up input values and do system call.
regs.ax = &H3600
regs.dx = ASC(UCASE$(Drive$)) - 64
CALL Interrupt(&H21, regs, regs)
'Decipher the results.
SectorsInCluster = regs.ax
BytesInSector = regs.cx
IF regs.dx >= 0 THEN
ClustersInDrive = regs.dx
ELSE
ClustersInDrive = regs.dx + 65536
END IF
IF regs.bx >= 0 THEN
ClustersAvailable = regs.bx
ELSE
ClustersAvailable = regx.bx + 65536
END IF
'CHDRIVE Curd$
freediskspace& = ClustersAvailable * SectorsInCluster * BytesInSector
END FUNCTION
[
Voor 67% gewijzigd door
Krypt op 05-01-2003 02:14
]