 |
Who's Online |
Zur Zeit sind 12 Gäste und 0
Mitglied(er) online.
Du bist anonymer Benutzer. Du
kannst Dich hier
anmelden | |
|
 |
Scriptprogrammierung mit
BeOS Geschrieben am Donnerstag,
25.April. @ 11:30:26 CEST von bernd | |
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.
Daher habe ich mich entschlossen mal ein Script mit
den Standards von BeOS in Bash/Shell zu schreiben. Dieser
Artikel soll einen kurzen Enblick geben in die Welt der
Scripte.
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 www.sourceforge.net
angeboten. Entwickler schließen sich dort zusammen um
gemeinsam an Projekten zu programmieren. Einige der
populärsten dürften derzeit OpenBeOS und 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: :pserver:anonymous@cvs.vision.sourceforge.net:/cvsroot/vision :pserver:anonymous@cvs.open-beos.sourceforge.net:/cvsroot/open-beos
A :pserver:anonymous@cvs.bochs.sourceforge.net:/cvsroot/bochs
A
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 BeIDE) 2. Ihr Script sollte mit #!/bin/sh
beginnen. Damit weiss das Terminal sofort das es sich hier um
einscript 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() { bebochs_update vision_update openbeos_update }
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 do_compile() { echo Doing
Compile... app_compile }
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
update_alert() { if [ $next_app = 0
] then alert "Thank You for using this program!" "Who
cares" exit else alert "Would you like to update
$app_name?" "Yes" "Goto $next_app" "Exit" button=$? [
$button = 2 ] && exit [ $button = 1 ] &&
$next [ $button = 0 ] &&
yes_compile=1 fi }
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"alert 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 nich
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 ies
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 Nummers 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 die Funktion aufgerufen
die das nächste Programm aktuallisiert. Bei YesWird die
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()
compile_alert() { if [
$yes_compile = 1 ] then alert "Would you like to compile
$app_name?" "Yes" "Update $next_app" "Exit" do_com=$? [
$do_com -eq 0 ] && do_compile [ $do_com -eq 2 ]
&& exit else sleep 0 #goto next
app fi }
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 Funktionserzeugung. Ich werde hier nur die
Funktion von BeBochs besprechen und nachher das gesamte Sript
abdrucken
bebochs_update() { app_name="BeBochs" next_app="Vision" next=vision_update update_alert echo
"Your choice was update BeBochs," echo "Updating BeBochs,
please wait..." cd /boot/home/Sourcecodes/bochs cvs
up
app_compile() { alert "We would compile
now..." } compile_alert }
app_name="BeBochs"
Sie erinnern sich sicherlich an $next_app. Um diese Variable
überhaupt nutzen zu können muss erstmal jedem Programmdas 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 das wir wenn nachher die Funktion
update_alert aufgerufen wird das 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
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:
main() { bebochs_update vision_update openbeos_update }
do_compile() { echo
Doing
Compile... app_compile }
update_alert() { if
[ $next_app = 0 ] then alert "Thank You for using this
program!" "Who cares" exit else alert "Would you like
to update $app_name?" "Yes" "Goto $next_app"
"Exit" button=$? [ $button = 2 ] && exit [
$button = 1 ] && $next [ $button = 0 ] &&
yes_compile=1 fi }
compile_alert() { if [
$yes_compile = 1 ] then alert "Would you like to compile
$app_name?" "Yes" "Update $next_app" "Exit" do_com=$? [
$do_com -eq 0 ] && do_compile [ $do_com -eq 2 ]
&& exit else sleep 0 #goto next
app fi }
bebochs_update() { app_name="BeBochs" next_app="Vision" next=vision_update update_alert echo
"Your choice was update BeBochs," echo "Updating BeBochs,
please wait..." cd /boot/home/Sourcecodes/bochs cvs
up
app_compile() { alert "We would compile
now..." } compile_alert }
vision_update() { app_name=$next_app next_app="OpenBeOS" next=openbeos_update update_alert echo
"Your choice was update Vision," echo "Updating Vision,
please wait..." cd /boot/home/Sourcecodes/Vision cvs
up app_compile() { alert "We would compile
now..." } compile_alert }
openbeos_update() { app_name=$next_app next_app="NetOptimist" next=netoptimist_update update_alert echo
"Your choice was update OpenBeOS," echo "Updating OpenBeOS,
please wait..." cd /boot/home/Sourcecodes/OpenBeOS cvs
up app_compile() { alert "We would compile
now..." } compile_alert }
main
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.
Bernd
Korz
|
|
|
|
Re: Scriptprogrammierung mit BeOS (_SCORE 0) von Unbekannter Fremder am Donnerstag,
25.April. @ 20:25:44 CEST |
Super Workshop! Weiter so! |
[ _REPLY
]
Re: Scriptprogrammierung mit BeOS (_SCORE 1) von Laplace
(michael.pfeiffer@utanet.at) am Freitag, 26.April. @ 08:39:51
CEST (_USERINFO
| _SENDAMSG)
http://bepdf.sourceforge.net/
|
Super Artikel!
Einige Anmerkungen:
- falls cvs
sich nicht beendet, dann ist der Parameter -z3 hilfreich (cvs -z3 up
...).
- globale Variablen sind ein "Bad Thing" TM. Es
können auch Parameter an Funktion übergeben werden, auf die
innerhalb der Funktion mit $1, $2, ... zugegriffen werden kann.
- Link zum Quellcode wäre gut.
- Funktioniert "cvs
up" wirklich, auch wenn das cvs Modul noch nicht ausgechecked ist?
(cvs co module). Oder hab ich etwas überlesen?
Michael |
[ _REPLY
]
Re: Scriptprogrammierung mit BeOS (_SCORE 0) von Unbekannter Fremder am Samstag,
27.April. @ 15:21:36 CEST |
Hallo Bernd,
schöner Artikel! Muss ich mal ausprobieren.
Grüße Charlie |
[
_REPLY
]
|
|