home *** CD-ROM | disk | FTP | other *** search
- '* ------------------------------------------------------- *
- '* SI-ERW-2.INC *
- '* ------------------------------------------------------- *
- SUB DiskInformation
- LOCAL ax, al, al$, ah, bx, cx, cx!, dx, dx!, ds, i, j, check
- LOCAL x$, xL, hk$, id.byte, aktiv$,kap!, sx$, h$, v$
- SHARED dosversion$
- sx$ = ": " : hk$ = CHR$(34) ' Anführungszeichen
- v$ = "5 " + CHR$(172) + " " + hk$ + " Disk" ' 5 1/4 "
- h$ = "3 " + CHR$(171) + " " + hk$ ' 3 1/2 "
- CALL ClrScr
- CALL TitelBild
- CALL QPrint(12,22,"Bitte legen Sie in alle Laufwerke",15)
- CALL QPrint(13,25,"des Systems Disketten ein !",15)
- CALL Taste
- COLOR 7,0
- CALL ClrScr
- aktiv$ = FN akt.laufwerk$ ' Aktives Laufwerk festhalten
- j = FN Max.Laufwerk ' Zahl der vom DOS unter-
- DEF SEG = 0 ' stützten Laufwerke
- IF PEEK(1040) AND 1 > 0 THEN ' mindestens ein Laufwerk?
- IF((PEEK(1040) AND 192)/64) + 1 = 1 THEN
- ' nur 1 Disk.-Laufwerk
- xL = PEEK(&H504) ' ist aktuelles Laufwerk A oder B ?
- check = 1 ' Testvariable: nur ein Laufwerk !
- END IF
- END IF
- DEF SEG
- FOR i = 1 TO j ' 0=aktuell!, 1=A, 2=B, 3=C ...
- IF check = 1 THEN ' Wenn nur ein Diskettenlaufwerk:
- IF xl = 0 AND i = 2 THEN INCR i
- ' Laufwerk B ist aktiv, A übergehen
- IF xl = 1 AND i = 1 THEN INCR i
- ' Laufwerk A ist aktiv, B übergehen
- END IF
- REG 1,&H1C00 ' DOS Funktion 1C (für beliebiges LW)
- REG 4,i ' Laufwerksnummer anwählen in DL
- CALL INTERRUPT &H21 ' DOS Interrupt aufrufen
- ax = REG(1) ' Register auslesen und umwandeln
- al$ = RIGHT$(HEX$(ax), 2) ' AL = Sektoren je Cluster
- al = VAL("&H" + al$)
- bx = REG(2) ' BX = ID-Byte-Adr. in Segment DS
- cx = REG(3) ' CX = Bytes pro Cluster
- dx = REG(4) ' DX = Cluster pro Disk
- ds = REG(8) ' DS = Segment für FAT-ID
- DEF SEG = ds
- id.byte = PEEK(bx) ' ID-Byte auslesen
- DEF SEG
- CALL TitelBild
- CALL SubMen("Disketteninfo")
- LOCATE 5,1 : PRINT "Ihr Betriebssystem (";dosversion$;
- PRINT ") unterstützt";j;" Laufwerke." : LOCATE 7,1
- PRINT "Nummer der Laufwerkseinheit: "; i-1
- PRINT "Laufwerkskennbuchstabe.....: ";CHR$(i+64)" ";
- IF check = 1 THEN ' Wenn nur ein Laufwerk vorhanden,
- IF i=1 THEN PRINT "= B"; ' anzeigen, daß es noch ein
- IF i=2 THEN PRINT "= A"; ' virtuelles Laufwerk gibt
- END IF
- IF al <> 255 THEN
- PRINT : PRINT
- PRINT "Clustergröße"; STRING$(15,46); sx$;
- PRINT USING "##### Bytes"; cx*al
- PRINT "Sektorgröße"; STRING$(16,46); sx$;
- PRINT USING "##### Bytes"; cx
- PRINT "Sektoren pro Cluster"; STRING$(7,46); sx$;
- PRINT USING "#####"; al
- PRINT "Verfügbare Cluster"; STRING$(9,46); sx$;
- PRINT USING "#####"; dx-1
- PRINT "Adresse des ID-Bytes (hex): ";HEX$(ds);":";
- PRINT HEX$(bx)
- PRINT "ID-Byte des Laufwerks (hex): ";HEX$(id.byte)
- dx! = dx : cx!=cx
- kap! = CSNG(dx! * cx! *al / 1024)
- PRINT : PRINT "Nettokapazität";STRING$(13,46);sx$;
- IF kap! < 1024 THEN
- PRINT USING "#####.# kByte"; kap!
- ELSE
- PRINT USING "#####.## MByte"; kap!/1024
- END IF
- kap! = FN FreeSpace!(i)
- PRINT "Freie Kapazität"; STRING$(12,46); sx$;
- IF kap! < 1024 THEN
- PRINT USING "#####.# kByte"; kap!
- ELSE
- PRINT USING "#####.## MByte"; kap!/1024
- END IF
- SELECT CASE id.byte
- CASE 255
- x$ = v$ + " doppelseitig: 8 Sektoren, 40 Spuren."
- CASE 254
- x$ = v$ + " einseitig: 8 Sektoren, 40 Spuren."
- CASE 253
- x$ = v$ + " doppelseitig: 9 Sektoren, 40 Spuren."
- CASE 252
- x$ = v$ + " einseitig: 9 Sektoren, 40 Spuren."
- CASE 251
- x$ = h$ + " / " + v$ + " doppelseitig: 8 " +_
- " Sektoren, 80 Spuren."
- CASE 250
- x$ = h$ + " / " + v$ + " einseitig: " +_
- "8 Sektoren, 80 Spuren."
- CASE 249
- x$ = h$ + " / " + v$ + "doppels.: 9 Sekt." +_
- " 80 Sp. / 15 Sekt. 80 Sp."
- CASE 248
- x$ = "nicht herausnehmbarer Datenträger: " +_
- "Festplatte oder RAM-Disk."
- CASE ELSE
- x$ = "unbekannter Diskettentyp"
- END SELECT
- PRINT : PRINT "Diskettentyp"; sx$; x$
- ELSE
- PRINT " nicht belegt!" ' oder Diskettenfehler !
- ' Wenn keine Diskette ein-
- ' gelegt ist, stürzt das Programm nicht ab !
- END IF
- IF i < j THEN
- CALL Taste : COLOR 7,0 : CALL ClrScr
- END IF
- NEXT i
- ' Ursprünglich aktives Laufwerk wieder anmelden:
- CALL AktivesLW(aktiv$)
- END SUB
- '* -------------------------------------------------------- *
- '* SI-ERW-2.INC *