|
Scripting - Scriptprogrammierung mit BeOS System: BeOS, Haiku, Zeta Es muss nicht immer C/C++ sein um ein Programm zu erstellen. Programme sind eigentlich dafür da um Arbeitsabläufe zu vereinfachen. Sicherlich ist C/C++ die richtige Wahl um ein komplexes Programm zu schreiben aber für statische Abläufe von Arbeitsaufträgen eignen sich andere Sprachen erheblich besser. Auch Python ist eine perfekte Scriptsprache für viele Aufgaben, aber das muss man - so man es noch nicht getan hat - erstmal installieren. Was wir benötigen: 1. Einen Texteditor (StyleEdit) oder eine Entwicklungsumgebung (BeIDE...) 2. Ein Terminalfenster zum testen 3. CVS 4. Einen guten Willen Das Problem das es zu lösen gilt: Es gibt sehr viele Sourcen für BeOS Programme. Die meisten werden über sourceforge.net angeboten. Entwickler schließen sich dort zusammen um gemeinsam an Projekten zu programmieren. Einige der populärsten dürften derzeit OpenBeOS, Vision oder BeBochs sein. Nun möchten Sie gerne einmal täglich sehen ob die Sourcen der einzelnen Projekte sich auch auf dem gleichen Stand wie die auf dem Server befinden. Dazu nutzt man CVS. Mit CVS und den benötigten Befehlen können Sie dann jeweils die neuesten Sourcen abgleichen. Arbeitsvorbereitung: 1. Laden Sie sich CVS 1.11 von BeBits herunter und installieren Sie das Binary nach /boot/home/config/bin. Damit haben sie den ersten Grundstein gelegt. 2. Legen Sie sich einen Ordner an in /boot/home und nennen Sie diesen "Sourcecodes". 3. In diesem Ordner legen Sie sich die Ordner "bochs", "OpenBeOS" und "Vision" an. Achten Sie bitte genau auf die Schreibweise da in BeOS vision nicht gleich Vision ist. Das sind zwei unterschiedliche Namen! 4. Legen Sie in /boot/home eine Textdatei mit dem Namen ".cvspass" an. Diese Datei wird eigentlcih automatisch erzeugt wenn man das erstemal etwas mit CVS runtergeladen hat und beinhaltet die Login-Kennung. Da wir das ganze hier besprechen wollen bereiten wir die Datei selber vor. Folgende Zeilen fügen Sie in diese Datei ein:
Damit haben wir das Login auf den jeweiligen Server automatisiert. So, nun haben wir auch diesen Punkt abgeschlossen! Unser Programm: 1. Öffnen Sie Ihren Editor mit dem Sie das Script erzeugen wollen (ich verwende dafür die BeIDE) 2. Ihr Script sollte mit #!/bin/sh beginnen. Damit weiss das Terminal sofort das es sich hier um ein Script handelt und auch Sie bzw. andere wissen sofort um was es sicht handelt. 3. Zunächst erzeugen wir eine main() Funktion. Diese hilft uns beim Abschluss jedes Updates auf das nächste zu wechseln und wir müssen so nicht immer das gesamte Script von neuem durchlaufen.
main() ist eien Funktion (bitte nicht mit main() aus C/C++ verwechseln). Es ist einfach übersichtlicher, richtige aussagekräftige Namen zu verwenden. Eine Funktion führt alles aus was sich zwischen den beiden Klammern {} befinden und ist auch NACH der } Klammer abgeschlossen. Um das ganze eher Ereignisorientiert zu handhaben habe ich mich dafür entschlossen. bebochs_update ruft also einfach die Funktion bebochs_update auf... 4. Nun erzeugen wir unsere nächste Funktion do_compile. Hier teilen wir dem Computer mit das wir bei Bedarf auch compilieren wollen nachdem die Sourcen runtergeladen wurden.
echo gibt einfach einen Befehl im Terminal aus, hier die Worte "Doing compile". app_compile ruft eine Funktion auf die ich als nächstes beschreiben werde. Hier sehen wie schon einmal wie einfach es ist in Bash eine Funktion zu erzeugen und diese auch irgendwo einzubinden 5. Nun wird es etwas komplizierter! Nachdem ein Update der Sourcen erfolgt ist möchte ich evtl. diese auch gleich compilieren. Dazu habe ich eine weitere Funktion erzeugt, update_alert. Durch diese Funktion werde ich gefragt ob ich ein Update machen oder zum nächsten Update springen möchte.
if [ $next_app = 0 ]: Zunächst einmal muss eine Art Index erzeugt werden damit das Script weiss welches Programm gerade aktuallisiert wird. $next_app ist dafür zuständig. Jeder Button in einem Alertfenster gibt einen Wert zurück (0, 1, 2). 0= button 1, 1=button2 (bzw. bei 3 buttons der in der Mitte) und 2=button3 (bzw. bei 3 buttons der Rechte). then bedeuten, WENN (IF) eine Sacher erfüllt, DANN. Hier wird dann alles unter then aufgerufen bis diese thenabfrage abgeschlossen ist. alert "Thank You for using this program!" "Who cares" ruft wieder ein Abfragefenster auf. Der Text zwischen den ersten beiden "..." wird als Titel angesehen. Die weiteren ".." ".." geben den Text in den Buttons aus. exit: Da hier schon die Entscheidung gefalllen ist das wir das Programm beenden wollen (sonst wäre diese Funktion nicht aufgerufen worden - erklärt sich nicht später) ist hier nur noch eine Antwort möglich und das Programm wandert nach dem Drücken auf den "Who Cares" button sofort in die nächste Zeile. exit beendet das Programm. alert "Would you like to update $app_name?" "Yes" "Goto $next_app" "Exit" wieder ein Alert. Hier ist nun wieder eines interessant. In jedem Text kann eine Variable genutzt werden um den Text zu füllen. $app_name ist ein Wert den wir nachher in den Funktionen der einzelnen Programmen wiederfinden werden und gibt einfach den Namen des Programmes aus welches wir gerade bearbeiten (BeBochs, OpenBeOS oder Vision). button=$?: Um die einzelnen Buttons mit realen Abfragen zu belegen müssen wir diesen eine Variable zuweisen. [ $button = 2 ] && exit: Nun bestimmen wir was passiert wenn wir eine der Buttons drücken (die Nummern haben wir ja schon besprochen). Beim drücken von Exit wird das Programm einfach beendet. Bei Goto $next_app (der Name wird von den einzelnen Funktionen zurückgegeben -BeBochs...-). wird die Funktion aufgerufen die das nächste Programm aktuallisiert. Bei Yes Wird die Funktion yes_compile auf ja gesetzt und diese aufgerufen. fi beendet eine IF....Then....FI Abfrage. 6. Nun müssen wir dem Computer auch mitteilen das er wenn man sich für das Compilieren entschieden hat das richtige Programm zum Compilieren vorbereitet und danach auch ein ausführbares Programm erstellt. Dies geschieht durch die Funktion compile_alert()
Ich werde nun nur die geänderten Funktionen/Aufrufe beschreiben. alert "Would you like to compile $app_name?" "Yes" "Update $next_app" "Exit" Startet wieder eine Abfrage in einem Alertfenster. Wie Sie hier sehen können habe ich den Button 1 (Update $next_app) nicht definiert sondern eine else eingebaut. Was soviel bedeutet wie "Alles was nicht in den steht wird über else abgefangen". Da Update nicht in der Deklaration do_com=$? ist fällt es da raus und wird in else abgearbeitet. 7. So nun haben wir wichtigsten Funktionen abgearbeitet und wollen endlich auch die Sourcen runterladen. Dies geschieht über die einzelnen Funktionserzeugungen. Ich werde hier nur die Funktion von BeBochs besprechen und nachher das gesamte Sript abdrucken.
app_name="BeBochs": Sie erinnern sich sicherlich an $next_app. Um diese Variable überhaupt nutzen zu können muss erstmal jedem Programm, dass wir runterladen wollen ein Name zugewiesen werden. next_app="Vision": Genau hier ist es nun nämlich sehr wichtig. In jeder der eigentlichen Updatefunktionen, teilen wir schon vorher mit welches Programm als nächstes aktuallisiert werden soll. Hier teilen wir dem Programm mit der wir, wenn nachher die Funktion update_alert aufgerufen wird, dass Programm VISION aktuallisiert werden soll. update_alert Ruft die Funktion update_alert auf. echo "....." gibt uns einfach eine Information im Terminal aus. cd /boot/home/Sourcecodes/bochs: Sie erinnern sich sicherlich daran als wir in den Vorbereitungen Ordner erstellt hatten. Hier wechseln wir nun in genau diese um den Sourcecode an der richtigen Stelle abzuspeichern. cvs up: Der Befehl CVS (auch hier sei nochmal die Vorbereitung benannt die wir Anfangs mit CVS gefüttert haben). "UP" ist eine sehr nette Funktion in CVS die es dem Computer erlaubt, auf den Server des jeweiligen Programmes zuzugreifen und ALLE darin befindlichen Dateien mit denen auf unserem PC zu vergleichen und neuere bei Bedarf zu aktuallisieren. app_compile(): Sollten wir uns entschlossen haben das Programm zu compilieren so wird diese Funktion nun aufgerufen und gibt uns damit ein Alertfenster als Info zurück. compile_alert: Nun wird die eigentliche Funktion aufgerufen um das jeweilige Programm zu compilieren. 8. Da hier überall bisher Funktionen erzeugt worden sind kann das Programm noch gar nicht arbeiten. Um das möglich zu machen muss man dem Programm erstmal mitteilen mit was es eigentlich anfangen soll. In unserem Fall ist es die Funktion main().
main: Ja, mehr ist es in der Tat nicht mehr. Hiermit wird die Funktion main() aufgerufen und der Stein erst wirklich ins Rollen gebracht. Diesen Funktionsaufruf habe ich bewusst als allerletztes geschrieben, dies gibt mir nämlich die Gewähr das wirklich alle Programmzeilen beim ersten Start einmal durchlaufen wurden. So, nun haben wir eigentlich ersteinmal alles besprochen und der Übersichthalber hier noch einmal das Gesamte Programm im Überlick:
Dies ist mein erstes Script mit BeOS. Ich hoffe daher das es bei Euch auch klappt. Bei mir läuft es perfekt und erspart mir sehr viel Arbeit. Ich hoffe, ich konnte mal einen Enblick in die Mächtigkeit von Scriptsprachen geben und Ihr findet gefallen daran. Bereitgestellt durch BeSly, der BeOS & Zeta Wissensbasis. |