Freitag, 25. November 2011

yab - Sound- Karte(n) ermitteln

So, dies soll das letzte Beispiel zum Ermitteln von System- Informationen mit Hilfe des "listdev"- Befehls sein. Alle, und es gibt noch einige, weiteren Informationen lassen sich, wie beschrieben, durch Änderung der Variable "SearchString$" abfragen. So ist es durchaus denkbar "Serial Bus Controller", "Storage Controller", "Bridge's" usw. abzufragen und die gewünschten Informationen zu erhalten.

In diesem Beispiel zeigen wir nun den/die Namen der Multimedia- / Sound- Karte an. Um dies zu erreichen benennen wir das/die Programm/Sub- Routine wieder um und ändern den "SearchString" entsprechend ab.

Der Aufruf der Routine erfolgt dann wieder z.B. so ...

print _GetSoundCard$()

... und als Ergebnis erhalten wir z.B.

Intel Corporation / 82801AA AC'97 Audio Controller


export sub _GetSoundCard$()

  // lokale Variablen definieren
  local SystemInput$
  local NumberOfTokens
  local NumberOfDummyTokens
  local ArrayCounter 
  local SearchString
  local Result$
    
  dim Line$(1)
  dim Dummy$(1)
  dim InfoArray$(1)
 
  SearchString$ = "device Multimedia controller"
  ArrayCounter = 1
  Result$ = ""
 
  // den Befehl "listdev" auf der Kommandozeile und das Ergebnis
  // in SystemInput$ speichern
  SystemInput$ = system$("listdev")

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

  // innerhalb der ermittelten Zeilen den gewünschten String suchen
  // und alle Informationen im Array InfoArray$ speichern
  for i = 1 to NumberOfTokens
 
    if (instr(Line$(i), SearchString$)) then
   
      // Vendor- Name ermitteln
      NumberOfDummyTokens = split(trim$(Line$(i + 1)), Dummy$(), " :")

   
      for k = 4 to NumberOfDummyTokens
   
        InfoArray$(ArrayCounter) = InfoArray$(ArrayCounter) + Dummy$(k) + " "
    
      next k

      // Trennzeichen zwischen Vendor- und Device- Namen einfügen
      InfoArray$(ArrayCounter) = InfoArray$(ArrayCounter) + " / "

      // Device- Name ermitteln
      NumberOfDummyTokens = split(trim$(Line$(i + 2)), Dummy$(), " :")

      for k = 4 to NumberOfDummyTokens
   
        InfoArray$(ArrayCounter) = InfoArray$(ArrayCounter) + Dummy$(k) + " "
    
      next k

      ArrayCounter = ArrayCounter + 1
      Redim InfoArray$(ArrayCounter)

    endif

  next i

  // Informationen in einen durch "\n" (CR) getrennten String schreiben
  // und als Ergebnis zurückliefern
  for i = 1 to arraysize(InfoArray$(), 1) - 1
 
    Result$ = Result$ + InfoArray$(i) + "\n"
  
  next i
 
  return Result$
 
end sub



(getestet mit Haiku R1 Alpha 3 und yab 1.5)



Keine Kommentare:

Kommentar veröffentlichen