home *** CD-ROM | disk | FTP | other *** search
- # Dies hier ist ein Kommentar.
- # --------------------------- Hauptmenu ------------------------------
-
- # Nachsehen, ob wir hier eine Csh 5.16 ode rh÷her am Werke haben.
- # Die Variable $_version enthΣlt die aktuelle Version, ein 'return'
- # Kommando beendet eine Stapeldatei.
-
- if $_version < 516
- echo "Schade, Csh Version 5.16 wird ben÷tigt!";return 0
- endif
-
-
-
- cls # l÷scht Schirm.
-
- # Das Echo Kommando wird benutzt eine Zeile auf den Schirm zu schreiben.
- # Achtung, ein schliessendes Anfⁿhrungszeichen ist nicht notwendig.
-
- echo "Das ist eine Beispiel Stapeldatei der Csh. Sie enthΣlt eine Menge
- echo "nⁿtzlicher Aliase die Sie vielleicht fest installieren wollen,
- echo "aber der Hauptzweck ist es, als Anleitung zu dienen. Sehen Sie sich
- echo "um und verΣndern Sie nach belieben.
- echo
-
-
- # Jedes Csh KOmmando akzeptiert ^-Kode in seiner Kommandozeile, z.B.
- # ist ^A dasselbe wie CTRL-A, welches den ASCII Kode 1 reprΣsentiert.
- # Das kann benutzt werden, um z.B. ESC-Sequenzen zu generieren.
-
- echo -n ^[[30m^[[41m # reverse Schrift, kein CR
- echo -n @center( " C H O I C E S " 76 ) # zentrierte Ausgabe
- echo ^[[0m
- echo
- echo "[1] Primzahlen
- echo "[2] 'More' Textanzeiger
- echo "[3] Labyrinth Spiel
- echo "[4] Tⁿrme von Hanoi Spiel
- echo "[5] Backup/Versions Kontroll System
- echo "[6] Sinnvolle Aliase
- echo "[7] Mansplit, trennt ihre Csh-Anleitung auf.
-
-
- # Das 'input' Kommando liest eine Zeile von der Konsole und speichert
- Σ diese in der angegebenen Variablen.
-
- echo -n "> "
- input wahl
-
- goto Start$wahl# Springt zu den Marken Start1, Start2, etc.
-
-
-
-
-
- # ------------------------- Primzahlen -----------------------------
- # Das interessante an diesem Programm ist die Nutzung des 'fornum'
- # Kommandos und der Trick eine Matrix zu generieren. Die Information
- # ob 93 eine Primzahl ist, wird in der Variablen $prime93 gespeichert.
-
- label Start1 # Startpunkt... Hierhin wird vom obigen Goto gesprungen
-
- set max 100 # H÷chste Zahl die auf Prim getestet werden soll
- echo "Berechne Primzahlen von 1 bis"$max
- fornum i 2 $max "set prime$i 1
-
- # Jetzt folgt ein Kommandoblock. Alles wird intern zu einer Kommandozeile
- # verknⁿpft, getrennt durch Semikola. Deshalb sind schliessende
- # Anfⁿhrungszeichen Pflicht, und Kommentare verboten.
-
- fornum i 2 $max {
- exec "set bool $prime"$i
- if $bool
- echo -n $i^i
- fornum -s j $i $max $i "set prime$j 0"
- endif
- }
- echo
-
- return 0
-
-
-
-
- # ------------------------------ More -------------------------------
- # Diese Stapeldatei macht in etwa das, was auch das Programm 'More' tut.
- # Es demonstriert die Datei Ein- und Ausgabe-Kommandos und Datei
- # Behandlungsfunktionen.
-
- label Start2
-
- # Der Hilfstext fⁿr 'More', als Alias definiert.
- alias morehelp {
- echo " Leertaste Eine Seite weiter"
- echo " Enter Eine Zeile weiter"
- echo " Backspace Eine Seite zurⁿck"
- echo " < An Anfang der Datei"
- echo " > An Ende der Datei"
- echo " ESC, q Ende"
- echo " h Hilfe"
- }
-
- echo "Das ist eine AnnΣherung eines Textanzeiger als Csh Stapeldatei.
- echo "Funktionen:"
- echo
- morehelp
- echo
-
- echo -n "Geben Sie den Namen der anzusehenden Datei ein:"
- input text
- #set text test
- if -nf $text;echo "Datei nicht gefunden.";return 20;endif
-
- # Hier wird die Datei in den Speicher eingeladen. Jede Zeile wird als
- # ein 'Wort' eingelesen, selbst wenn sie Leerzeichen beinhΣlt. Fⁿr die
- # Wort-Definierung bitte in der csh.doc Anleitung nachsehen.
- readfile file $text
- # Jeder Gebrauch von $file wird von nun an eine GROSSE Kommandozeile
- # erbeben.
- set pos 1
- set page @rpn( @winrows( ) 1 - )
- set lines @flines( file )
- set bottom @rpn( $lines $page - 1 + )
-
-
- label Disp
-
- cls
- set screen @subfile( file $pos $page ) # Schirmposition in $screen absichern
- writefile screen
- # Berechnung, Anzeige der Prozent
- set perc @rpn( $pos $page + 1 - 100 \* $lines / 100 MIN )
- echo -n ^[[3m^[[30m^[[41m "-- More -- ("$perc"%)"^[[0m ""
-
-
- input -r c # Wartet auf einen einfachen Tastenduck ohne CR
- set c x$c # HΣlt das 'if' davon ab ein '<' misszuverstehen.
-
- if $c = x" ";if $pos = $bottom;unset file;return 0;endif;endif
- if $c = x" ";inc pos $page;if $pos > $bottom;set pos $bottom;endif;endif
- if $c = x^m ;inc pos 1 ;if $pos > $bottom;set pos $bottom;endif;endif
- if $c = x^h ;dec pos $page;if $pos < 1;set pos 1;endif;endif
- if $c = x"<";set pos 1;endif
- if $c = x">";set pos $bottom;endif
- if $c = xq ;unset file;return 0;endif
- if $c = x^[ ;unset file;return 0;endif
- if $c = xh ;cls;morehelp;echo "Bitte Taste drⁿcken.";input -r a;endif
- #if $c = x/ ;set char xf;endif
- #if $c = xf
- # echo -n "Zeichenkette: ";input str;search -fq $text $str | input found;
- # set found @subwords( $found 2 1000 );set c xn
- #endif
- #if $c = xn
- # set hop 0
- # foreach i ( $found ) "if $i > $pos;if $hop = 0;set hop $i;endif;endif
- # if $hop;set pos $hop;endif
- #endif
-
- goto Disp
-
-
-
-
-
- # ---------------------------- Labyrinth -------------------------------
- # Ich wollte schon immer mal ein Action Game als Stapeldatei schreiben :-)
- # Das Labyrinth ist als eine Zeichenkette abgespeichert, jede Zeile als
- # ein Wort. ─ndern Sie es nach Ihrem belieben, die Gr÷▀e wird automatisch
- # angepasst. Bitte keine automatische Tastenwiederholung einsetzen.
-
- label Start3
-
- set lab "#########################"
- set lab $lab "# # # # # #"
- set lab $lab "# # # ### ### ### # ### #"
- set lab $lab "# # # # # # # #"
- set lab $lab "# ##### ### ### ### # ###"
- set lab $lab "# # # # # # #"
- set lab $lab "### # ### ### # # ##### #"
- set lab $lab "# # # # "
- set lab $lab "#########################"
-
- cls
- writefile lab
- echo -n ^j"8=hoch 2=runter 4=links 6=rechts "^j^[[2A
- set x 2
- set y 2
- set wid @strlen( @word( $lab 1 ) )
- set up @words( $lab )
- echo -n ^[[$up\A^[[B^[[C.^[[D
- alias test "%a%b set xx @rpn( $x $a + );set yy @rpn( $y $b + );\
- set f @strmid( @word( $lab $yy ) $xx 1 )
-
-
- date -s
-
- label Loop
-
- input -r c
- if $c = 8;test 0 -1;if -n $f = "#";echo -n " "^H^[[A.^H;dec y;endif;endif
- if $c = 2;test 0 1;if -n $f = "#";echo -n " "^H^[[B.^H;inc y;endif;endif
- if $c = 6;test 1 0;if -n $f = "#";echo -n " "^H^[[C.^H;inc x;endif;endif
- if $c = 4;test -1 0;if -n $f = "#";echo -n " "^H^[[D.^H;dec x;endif;endif
- if $x >= $wid;cls;echo Glⁿckwunsch, freigekommen in `date -r` Sekunden.
- return 0
- endif
- goto Loop
-
- return 0
-
-
-
- # ------------------------------ Tⁿrme von Hanoi -----------------------
- # Dieses Spiel wurde auf Geschwindigkeit optimiert, es sieht daher nicht
- # so toll aus.
-
- label Start4
-
- set height 7 # Setze auf ungerade Zahlen bis 7
-
- set h2 $height;inc h2
- cls
- unset t
- set t1 "9"; set t2 "9"; set t3 "9" # die drei Tⁿrme
- fornum -s i $h2 2 -1 "set t1 $i$t1
- set done $t1
-
- #Anzeige vorbereiten
- set im "x";set h @rpn( $height 2 \* 1 + )
- fornum -s i 1 $h 2 "set im $im @center( @strleft( XXXXXXXXXXXXXXX $i ) $h )
- fornum i $height 10 "set im $im \" \"
-
- cls
- echo
- echo "T ▄ R M E V O N H A N O I
- echo "---------------------------
- echo
- echo "Das Spiel ist nicht sehr komfortable, aber es funktioniert ganz gut.
- echo "Sie mⁿssen einen Stapel von Scheiben von dem ersten Turm auf den
- echo "dritten Umlegen, ohne dabei eine gr÷ssere Scheibe auf eine kleinere
- echo "zu legen. Um eine Scheibe von Turm 1 auf den Turm 3 zu bewegen, drⁿcken
- echo "Sie erst '1' dann '3'. Sind Sie fertig, wird die ben÷tigte Zeit
- echo "ausgegeben, nach CTRL-C wird das Spiel beendet. Sie werden keine
- echo "andere Ausgabe als die Tⁿrme sehen, solange das Spiel lΣuft.
- echo
- echo "PS: Teilen Sie mir mit, wenn Sie unter 60 Sekunden bleiben *grins*
- echo
- echo "Bitte eine Taste drⁿcken, wenn fertig."
-
- input -r x
- date -s
- cls
-
- #display stack
- fornum i 2 $h2 "echo \" \" @word( $im $i )
- echo
-
- set m1 1;set m2 17;set m3 33
-
- forever {
- label Disp
- input -r x;input -r y
- exec "set src $t"$x";set dst $t"$y";set rt1 $m"$x";set rt2 $m"$y
- strleft move $src 1
- if a$move""a >= a$dst""b
- echo -n ^g
- else
- strlen up1 $src; strlen up2 $dst; inc up2
- echo -n \233$up1""A\233$rt1""C" "^m\233$up1""B\
- \233$up2""A\233$rt2""C @word( $im $move ) ^m\233$up2""B
- set t$y $move$dst
- strmid t$x $src 2
- endif
- if $t3 = $done;echo ^j^j;date -r;endif
- }
-
- return 0
-
-
-
-
- # ---------------------- Backup/Version control -------------------------------
- # Das ist eine Stapeldatei, die Sie vielleicht wirklich regelmΣ▀ig
- # anwenden wollen. Sie kopiert (backup) eine Menge von Dateien in einen
- # anderen Ordner, dabei werden alte Versionen nicht ⁿberschrieben.
- # Trennen Sie diese Stapeldatei heraus, und rufen Sie es aus .login
- # oder woher auch immer aufm wenn Sie ihre C-Programmierumgebung
- # installieren. Wird die Verz÷gerung auf 0 gesetzt, stellen Sie sicher
- # das diese Stapeldatei immer ausgefⁿhrt wird.
-
- label Start5
-
- set versions 3 # Maximale Anzahl alter zu behaltender Versionen
- set delay 1 # Minimale Anzahl Tage zwischen den Kopien
- set dest bak # Der Zielordner der Kopien
- set pattern "*.c *.h" # Das Suchmuster fⁿr zu kopierende Dateien
- set exlude "x.c y.c" # Nicht zu kopierende Dateien
-
-
- #----- Umgebung setzen -----
- if -nd $dest
- echo -n "Ordner "$dest" existiert nicht... erstellen? y/n: ";input x
- if $x = y;mkdir $dest;else;echo "Beendet...";return 0;endif
- endif
-
- if -f $dest/timestamp
- set last @age( $dest/timestamp )
- if $last < $delay
- echo "Keine Kopie erstellt... Letze erstelle Kopie ist "$last" Tag(e) alt."
- return 0
- endif
- else
- echo >$dest/timestamp
- endif
-
-
- #----- Teste auf geΣnderte Dateien ----
- echo "Teste Dateien...."
- exec set all $pattern # Hier wird das Suchmuster expandiert
-
- set cp "" # Zu kopierende Dateien
- foreach i ( $all ) "if -nt $i $dest/$i;set cp $cp $i;endif
-
- exec set exclude $exclude # Die exklusiven Dateien werden expandiert
- set cp @without( $cp , $exclude )
-
- if $cp = "";echo "Fertig.";touch $dest/timestamp;return 0;endif
- echo "Zu kopierende Dateien:"
- echo $cp
- # L÷schen Sie das Kommentarzeichen um einen Sicherheitscheck erfolgen zu
- # lassen.
- # set cp @confirm( Backup $cp )
- if $cp = "";echo "Fertig.";touch $dest/timestamp;return 0;endif
-
-
- #------ Kopien erstellen -------
- alias name "%a set n $dest/$i;if $a;set n $n.$a;endif
-
- foreach i ( $cp ) {
- set v $versions;dec v
- name $v;dec v
- if -f $n;rm $n;endif
- fornum -s j $v 0 -1 "set hi $n;name $j;if -f $n;mv $n $hi;endif"
- cp $i $dest
- }
-
- touch $dest/timestamp
- echo "Fertig."
-
- return 0
-
-
-
-
-
- # ---------------------- Hilfsreiche Aliase --------------------------
- # Lesen Sie die Kommentare eines jeden Alias, um herauszufinden, ob
- # das Alias fⁿr Sie hilfsreich ist. Kopieren Sie es dann in die login
- # Datei.
-
- label Start6
- # Ein paar nⁿtzliche Aliase fⁿr das dir Kommando
- alias d "*a dir @pickopts( $a ) -ze \"%6s %-.12n%m\" @pickargs( $a )
- alias lst "*a ls -t $a" # sortiert nach Alter
- alias lsl "*a ls -l $a" #ásortiert nach LΣnge
- alias move "cp -m
-
- # sc searches *.c, even 'sc -c main()' works
- alias sc "%a search @pickopts( $a ) *.c @pickargs( $a )
-
- # edf editiert eine Funktion im CygnusEd wenn der Name in der ersten
- # Zeile angegeben wird:
- alias edf {
- %func
- set b ""
- search -afl *.c $func | inp b
- if $b
- split b file line
- lced $file
- waitforport rexx_ced
- inc line 1
- rxsend rexx_ced "jump to file "$file "jumpto "$line" 0"
- else
- echo Not found
- endif
- }
-
- # Diese Aliase unterdrⁿcken Suchmuster Expandierng in einigen Kommandos
- alias zoo "*a Zoo $a
- alias lharc "*a Lharc $a
- alias lz "*a Lz $a
- alias newlist "*a Newlist $a
- alias eval "*a Eval $a
-
- # Dieses hier wird alle Bilder anzeigen, das neueste zuerst.
- alias newpix "ls -nt | forline i STDIN \"ShowIFF $i
-
- # Wollen Sie ein Csh Kommando mit 'run' im Hintergrund starten, benutzen
- # sie dieses Alias:
- alias rs "rback csh -c
-
- # Ein paar Aliase fⁿr die UNIX Freunde unter uns
-
- # Dieses Alias ahmt das chmod Kommando nach, welches die Bits zuerst und
- # dann erst die Dateien erwartet:
- alias chmod "%a protect @subwords( $a 2 9999 ) @first( $a )
-
- # Genauso bei grep:
- alias grep "%a search @subwords( $a 2 9999 ) @first( $a )
-
- # pushd schiebt den aktuellen Ordner auf den Stack
- set stk ""
- alias pushd "%a set stk $_cwd @subwords( $stk 1 10 );\\cd $a;e $stk
-
- # popd holt den mit pushd erzeugten Ordner, und wechselt dorthin
- alias popd "\\cd @first( $stk );set stk @subwords( $stk 2 10 );e $stk
-
- echo "Hilfsreiche Aliase erzeugt. Lesen Sie diese Stapeldatei um
- echo "herauszufinden ob ein paar fⁿr Sie sinnvolle dabei sind.
-
- return 0
-
-
-
-
-
- # ----------------------- Mansplit.sh - Trennt das csh.doc -------------
- # Trennt das csh.doc in kleine Dateien auf, eins pro Hilfseintrag.
- # So k÷nnen externe 'Man' Kommandos mit ihnen arbeiten, diese sind normal
- # schneller als das interne.
-
- label Start7
-
- echo "Ein wenig Geduld...
- set dest ram:cshdoc/ # Setzen Sie hier Ihren Ordner ein
- if -nd ram:cshdoc;mkdir ram:cshdoc;endif # ...und hier
- set mode skip
- forline i csh:csh.doc {
- if $mode = write
- if @strleft( $i^a 1 ) < " "
- echo >>$dest$file $i
- else
- set mode skip
- endif
- endif
- if $mode = skip
- if " " = @strleft( $i 4 )
- set mode write
- set a @index( $i "(" )
- if $a > 0;dec a 1;strleft i $i $a;endif
- set file $i
- echo >$dest$file $i
- echo $file
- endif
- endif
- }
- echo "csh.doc auftrennung erfolgt im Ordner "$dest
-
- return 0
-