Willkommen bei DeBUG - Die Topadresse rund um BeOS
Search
Topics
 
  Create an account Home Topics Downloads Your Account Submit News Top 10  
 
Hauptmenü
· Startseite
· Themen
· Links
· Downloads
· Empfehle uns weiter
· Dein Benutzerkonto
· News vorschlagen

 
Who's Online
Zur Zeit sind 12 Gäste und 0 Mitglied(er) online.

Du bist anonymer Benutzer. Du kannst Dich hier anmelden

 
User's Login
Benutzername

Passwort

Kostenlos registrieren!. Gestalte diese Seite mit und passe das Seitenlayout Deinen Wünschen an

 
BeBochs - The PC Emulator
Forum
Wöchentliches Update
Tipps rund um BeBochs
Treiber / Tools
Vorkonfigurierte Startsysteme
Screenshots

 
BeBits
·DVDRip 0.1a
·JPEGTranslator 1.0b
·SynthScan 0.04 alpha
·YASRT version 0.1 beta 14
·DVDRip 0.1
·BeShare 2.15
·NoIP Update Client 1.0
·SpicyKeys 1.27
·SynthScan 0.03 alpha
·WorkBetter 1.0

mehr...

Scriptprogrammierung mit BeOS
Geschrieben am Donnerstag, 25.April. @ 11:30:26 CEST von bernd

Tips & Tricks - Skripting 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

 
 
_RELATED
· _MOREABOUT Tips & Tricks - Skripting
· _NEWSBY bernd
· SourceForge
· HotScripts
· BeOS


_MOSTREAD Tips & Tricks - Skripting:
Scriptprogrammierung mit BeOS


_PRINTER  _FRIEND

_THRESHOLD
  
_COMMENTSWARNING
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 ]

     


    All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001 by me

    You can syndicate our news using the file backend.php or ultramode.txt