home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 05 / heimwerk / si_erw_2.inc < prev    next >
Encoding:
Text File  |  1989-03-01  |  4.7 KB  |  122 lines

  1. SUB DiskInformation
  2. LOCAL ax, al, al$, ah, bx, cx, cx!, dx, dx!, ds, i, j, check
  3. LOCAL x$, xL, hk$, id.byte, aktiv$,kap!, sx$, h$, v$
  4. SHARED dosversion$
  5.   sx$ = ": "  :  hk$ = CHR$(34)          ' Anführungszeichen
  6.   v$  = "5 " + CHR$(172) + " " + hk$ + " Disk"     ' 5 1/4 "
  7.   h$  = "3 " + CHR$(171) + " " + hk$               ' 3 1/2 "
  8.   CALL ClrScr
  9.   CALL TitelBild
  10.   CALL QPrint(12,22,"Bitte legen Sie in alle Laufwerke",15)
  11.   CALL QPrint(13,25,"des Systems Disketten ein !",15)
  12.   CALL Taste
  13.   COLOR 7,0
  14.   CALL ClrScr
  15.   aktiv$ = FN akt.laufwerk$    ' Aktives Laufwerk festhalten
  16.   j = FN Max.Laufwerk          ' Zahl der vom DOS unter-
  17.   DEF SEG = 0                  ' stützten Laufwerke
  18.   IF PEEK(1040) AND 1 > 0 THEN ' mindestens ein Laufwerk?
  19.     IF((PEEK(1040) AND 192)/64) + 1 = 1 THEN
  20.                                ' nur 1 Disk.-Laufwerk
  21.       xL = PEEK(&H504)   ' ist aktuelles Laufwerk A oder B ?
  22.       check = 1          ' Testvariable: nur ein Laufwerk !
  23.     END IF
  24.   END IF
  25.   DEF SEG
  26.   FOR i = 1 TO j             ' 0=aktuell!, 1=A, 2=B, 3=C ...
  27.     IF check = 1 THEN      ' Wenn nur ein Diskettenlaufwerk:
  28.       IF xl = 0 AND i = 2 THEN INCR i
  29.                          ' Laufwerk B ist aktiv, A übergehen
  30.       IF xl = 1 AND i = 1 THEN INCR i
  31.                          ' Laufwerk A ist aktiv, B übergehen
  32.     END IF
  33.     REG 1,&H1C00       ' DOS Funktion 1C (für beliebiges LW)
  34.     REG 4,i                ' Laufwerksnummer anwählen in DL
  35.     CALL INTERRUPT &H21    ' DOS Interrupt aufrufen
  36.     ax = REG(1)            ' Register auslesen und umwandeln
  37.     al$ = RIGHT$(HEX$(ax), 2)  ' AL = Sektoren je Cluster
  38.     al = VAL("&H" + al$)
  39.     bx = REG(2)            ' BX = ID-Byte-Adr. in Segment DS
  40.     cx = REG(3)            ' CX = Bytes pro Cluster
  41.     dx = REG(4)            ' DX = Cluster pro Disk
  42.     ds = REG(8)            ' DS = Segment für FAT-ID
  43.     DEF SEG = ds
  44.     id.byte = PEEK(bx)     ' ID-Byte auslesen
  45.     DEF SEG
  46.     CALL TitelBild
  47.     CALL SubMen("Disketteninfo")
  48.     LOCATE 5,1  :  PRINT "Ihr Betriebssystem (";dosversion$;
  49.     PRINT ") unterstützt";j;" Laufwerke."  :  LOCATE 7,1
  50.     PRINT "Nummer der Laufwerkseinheit:    "; i-1
  51.     PRINT "Laufwerkskennbuchstabe.....:     ";CHR$(i+64)" ";
  52.     IF check = 1 THEN     ' Wenn nur ein Laufwerk vorhanden,
  53.       IF i=1 THEN PRINT "= B";   ' anzeigen, daß es noch ein
  54.       IF i=2 THEN PRINT "= A";   ' virtuelles Laufwerk gibt
  55.     END IF
  56.     IF al <> 255 THEN
  57.       PRINT  :  PRINT
  58.       PRINT "Clustergröße"; STRING$(15,46); sx$;
  59.       PRINT USING "##### Bytes"; cx*al
  60.       PRINT "Sektorgröße"; STRING$(16,46); sx$;
  61.       PRINT USING "##### Bytes"; cx
  62.       PRINT "Sektoren pro Cluster"; STRING$(7,46); sx$;
  63.       PRINT USING "#####"; al
  64.       PRINT "Verfügbare Cluster"; STRING$(9,46); sx$;
  65.       PRINT USING "#####"; dx-1
  66.       PRINT "Adresse des ID-Bytes  (hex):  ";HEX$(ds);":";
  67.       PRINT HEX$(bx)
  68.       PRINT "ID-Byte des Laufwerks (hex):   ";HEX$(id.byte)
  69.       dx! = dx  :  cx!=cx
  70.       kap! = CSNG(dx! * cx! *al / 1024)
  71.       PRINT  :  PRINT "Nettokapazität";STRING$(13,46);sx$;
  72.       IF kap! < 1024 THEN
  73.         PRINT USING "#####.# kByte"; kap!
  74.       ELSE
  75.         PRINT USING "#####.## MByte"; kap!/1024
  76.       END IF
  77.       kap! = FN FreeSpace!(i)
  78.       PRINT "Freie Kapazität"; STRING$(12,46); sx$;
  79.       IF kap! < 1024 THEN
  80.         PRINT USING "#####.# kByte"; kap!
  81.       ELSE
  82.         PRINT USING "#####.## MByte"; kap!/1024
  83.       END IF
  84.       SELECT CASE id.byte
  85.         CASE 255
  86.           x$ = v$ + " doppelseitig: 8 Sektoren, 40 Spuren."
  87.         CASE 254
  88.           x$ = v$ + " einseitig: 8 Sektoren, 40 Spuren."
  89.         CASE 253
  90.           x$ = v$ + " doppelseitig: 9 Sektoren, 40 Spuren."
  91.         CASE 252
  92.           x$ = v$ + " einseitig: 9 Sektoren, 40 Spuren."
  93.         CASE 251
  94.           x$ = h$ + " / " + v$ + " doppelseitig: 8 " +_
  95.                     " Sektoren, 80 Spuren."
  96.         CASE 250
  97.           x$ = h$ + " / " + v$ + " einseitig: " +_
  98.                     "8 Sektoren, 80 Spuren."
  99.         CASE 249
  100.           x$ = h$ + " / " + v$ + "doppels.: 9 Sekt." +_
  101.                     " 80 Sp. / 15 Sekt.  80 Sp."
  102.         CASE 248
  103.           x$ = "nicht herausnehmbarer Datenträger: " +_
  104.                "Festplatte oder RAM-Disk."
  105.         CASE ELSE
  106.           x$ = "unbekannter Diskettentyp"
  107.       END SELECT
  108.       PRINT  :  PRINT "Diskettentyp"; sx$; x$
  109.     ELSE
  110.       PRINT " nicht belegt!"     ' oder Diskettenfehler !
  111.                                  ' Wenn keine Diskette ein-
  112.                ' gelegt ist, stürzt das Programm nicht ab !
  113.     END IF
  114.     IF i < j THEN
  115.       CALL Taste  :  COLOR 7,0  :  CALL ClrScr
  116.     END IF
  117.   NEXT i
  118.             ' Ursprünglich aktives Laufwerk wieder anmelden:
  119.   CALL AktivesLW(aktiv$)
  120. END SUB
  121.  
  122.