Donnerstag, 17. Mai 2012

yab - Anzahl der Partitionen ermitteln

Nachdem ich Euch in meinem letzten Beitrag "yab - den Inhalt der Partitions- Tabelle ermitteln" gezeigt habe wie man die Partitions- Tabelle einer Festplatte auslesen kann, möchte ich Euch heute ein praktisches Beispiel zeigen, was man mit den gewonnenen Informationen anstellen kann.

Ich möchte an dieser Stelle aber darauf hinweisen, das die hier gezeigten Beispiele nur mit "MBR- Partitions- Tabellen" funktionieren und auch nur mit den ersten vier, sprich primären, Partitionen. Erweiterte Partitionen werden an dieser Stelle (noch) nicht berücksichtigt.

Um nun die Anzahl der Partitionen zu ermitteln, verarbeiten wir die, aus der Sub- Routine "_GetPartitionTable$()" gewonnenen Informationen wie folgt.

Zunächst rufen wir die Sub- Routine "_GetPartitionTable$()" auf um die benötigten Informationen zu bekommen. Danach rufen wir die Sub- Routine "_GetPartitionCount()" und übergeben dieser die entsprechendenen Informationen als Parameter. Im Beispiel würde dies wie folgt aussehen.


import GetPartitionTable
import GetPartitionCount

PartitionTable$ = _GetPartitionTable$("/dev/disk/ata/0/master/raw")

print "Anzahl Partitionen: ", _GetPartitionCount(PartitionTable$)


So, nachdem wir nun wissen wieviele Partitionen unsere Festplatte hat, hier noch der Quell- Text der Sub- Routine.


// benötigt das Ergebnis aus _GetPartitionTable$() als Parameter

export sub _GetPartitionCount(PartitionTable$)
 
  // lokale Variablen Definition
  local NumberOfTokens
  local i
  local PartitionCount

  PartitionCount = 0 
    
  // nimmt die einzelnenen Hex- Werte aus dem PartitionTable$ auf
  dim PTable$(1)
 
  // nimmt die einzelnen Dezimal- Werte aus PTable$() auf
  dim PTable(64)
 
  // den PartitionTable- String wieder auftrennen und die Hex- Werte
  // in PTable$ speichern
  NumberOfTokens = split(PartitionTable$, PTable$(), chr$(124))

  // die gespeicherten Hex- Werte wieder in Dezimal- Werte umwandeln
  for i = 1 to NumberOfTokens - 1
 
    PTable(i) = dec(PTable$(i))
  
  next i

  // an diesen Stellen steht der Wert für den Partitionstyp,
  // ist dieser ungleich 0 dann ist eine Partition vorhanden
  for i = 0 to 3
 
    // den jeweils 5. Wert aus den den 4 x 16 Byte lesen
    if PTable(5 + i * 16) <> 0 then
  
      // wenn ungleich 0, Zähler um eins erhöhen
      PartitionCount = PartitionCount + 1
   
    endif
 
  next i
 
  // Ergebnis zurückliefern
  return PartitionCount
  
end sub


(getestet mit Haiku R1 Alpha 3 und yab 1.5)

Keine Kommentare:

Kommentar veröffentlichen