Dienstag, 21. Februar 2012

yab - installierte "OptionalPackages" ermitteln

Heute möchte ich Euch, an Hand zweier Beispiele, zeigen wie man die installierten "OptionalPackages", welche mit Hilfe des Befehls "installoptionalpackage" installiert werden können, per "yab" ermitteln kann. Bei meinen Experimenten zu diesem Thema ist mir aufgefallen, das der Schalter "-s", welcher eine Liste der installierten Pakete anzeigen soll, leider einen Fehler Produziert. Doch auch dafür habe ich einen Workaround gefunden.

In ersten Beispiel verwende ich zum Auflisten der installierten Pakete den Befehl "installoptionalpackage -l" und suche mir dann in der Ausgabe die Zeile mit dem Inhalt "Optional Packages that have been installed:". Die nachvollgende Zeile enthält dann die gewünschten Informationen. Diese werden gelesen und die Suche wird abgebrochen. Anschließend werden noch die Leerzeichen durch "\n" ersetzt, sodaß wir einen durch "LineFeed" getrennten String erhalten, fertig. Zu beachten ist an dieser Stelle das, eine Internet- Verbindung bestehen muß, da der Befehl "installoptionalpackage -l" auch die die Pakete ermittelt, welche noch installiert werden können.


Der Aufruf der Sub- Routine kann dabei folgendermaßen geschehen:


InstalledPackages$ = _GetInstalledOptionalPackages$()
print InstalledPackages$


export sub _GetInstalledOptionalPackages$()

  // Variablen definieren
  local SystemInput$
  local NumberOfTokens
  local OP$
  local Result$

  dim Line$(1)

  // den Befehl "installoptionalpackage -l" aufrufen
  // und Ausgabe in SystemInput$ speichern
  SystemInput$ = system$("installoptionalpackage -l")

  // alles in einzelne Zeilen zerlegen
  NumberOfTokens = split(SystemInput$, Line$(), "\n")

  // die einzelnen Zeilen durchgehen und auswerten    
  for i = 1 to NumberOfTokens

    // wenn diese Zeile gefunden wird, stehen in der nächsten Zeile
    // die gewünschten Daten
    if (Line$(i) = "Optional Packages that have been installed:") then

      // Daten übernehmen und Suchvorgang beenden
      OP$ = Line$(i + 1)
      break

    endif


  next i

  // den erhaltenen String wieder zerlegen und die
  // Leerzeichen gegen "\n" (LineFeed) austauschen
  NumberOfTokens = split(OP$, Line$(), " ")

  for i = 1 to NumberOfTokens

    Result$ = Result$ + Line$(i) + "\n"

  next i

  // Ergebnis zurückliefern
  return Result$

end sub


Eine andere Möglichkeit die gewünschten Informationen zu erhalten ist Folgende. Alle installierten, optionalen Pakete werden zeilenweise in der Datei "/boot/common/data/optional-packages/InstalledPackages" festgehalten. Damit ist es aus sehr einfache Weise möglich diese zu erfragen. Auch ist es für diesen Weg nicht erforderlich eine bestehende Internet- Verbindung zu haben. Das untenstehende Beispiel soll dies verdeutlichen.

Zunächst öffnen wir die genannte Datei zum Lesen und holen alle Informationen bis das Ende der Datei erreicht ist und schreiben diese, getrennt durch "\n" in einen String. Das war es dann auch schon. Anschließend können wir uns das Ergebnis wie folgt ansehen.


InstalledPackages$ = _GetInstalledOptionalPackages$()
print InstalledPackages$


export sub _GetInstalledOptionalPackages$()

  // Variablen definieren
  local Result$
  local Line$

  // in der Datei "/boot/common/data/optional-packages/InstalledPackages"
  // finden sich die Einträge aller installierten Pakete, diese einfach
  // Zeilenweise auslesen
  open "/boot/common/data/optional-packages/InstalledPackages" for reading as #1

    // bis das Ende der Datei erreicht ist ...
    while(not eof(1)) 

      // jede Zeile lesen ...
      line input #1 Line$ 

      // in Result$ speichern und ein "\n" anfügen
      Result$ = Result$ + Line$ + "\n"

    wend 

  // Datei wieder schließen ...
  close #1

  // und Ergebnis zurückgeben
  return Result$

end sub


(getestet mit Haiku R1 Alpha 3 und yab 1.7)

Keine Kommentare:

Kommentar veröffentlichen