Donnerstag, 17. November 2011

yab - Grafik- Karte(n) ermitteln

Wie ich in meinem letzten Post bereits geschrieben habe läßt sich mit dem Befehl "listdev", unter Anderem, herausfinden welche Grafik- Karte(n) im System verbaut bzw. von Haiku erkannt werden. Natürlich läßt sich dies auch mit yab, Dank dem "system$"- Befehl, ebenfalls bewerkstelligen.

Der untenstehende Quelltext sollte ausreichend mit Kommentaren versehen sein, sodaß die prinzipielle Arbeitsweise nachvollzogen werden kann. Im Prinzip ist das ja auch nicht wirklich schwer. Die Informationen mit dem "system$"- Befehl holen und dann ein wenig mit den Strings jonglieren, é voilà, schon hat man das gewünschte Ergebnis.

Der Aufruf der "sub"- Routine erfolgt z.B. in der Form

print _GetGraphicCard$()

Als Ergebnis wird dann z.B. folgendes zurückgeliefert

Intel Corporation  / Mobile 4 Series Chipset Integrated Graphics Controller
ATI Technologies Inc  / RV635 [Mobility Radeon HD 3650]

Da yab leider keine Arrays aus "sub"- Routinen zurückgeben kann, außer man definiert sie bereits im Hauptprogramm, habe ich mich entschieden, einen durch "CR" geteilten String zurück zu geben. Dies trifft aber auch nur dann zu, wenn mehr als eine Grafik- Karte im System vorhanden ist bzw. gefunden wird.


export sub _GetGraphicCard$()

  // 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 Display 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)


1 Kommentar:

  1. Hi Chaotic,

    hast du List deine Tutorials der BeSly beizufügen?

    AntwortenLöschen