home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 06 / heimwerk / si_erw_2.inc < prev    next >
Encoding:
Text File  |  1989-03-29  |  5.0 KB  |  126 lines

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