home *** CD-ROM | disk | FTP | other *** search
- # Ceci est un commentaire
- # --------------------------- Menu principal ------------------------------
-
- # vΘrifie si on fait tourner csh 5.16 ou au-dessus. $_version contient la
- # version courante, et la commande return finit un fichier script.
-
- if $_version < 516
- echo "DΘsolΘ, version 5.16 de csh requise";return 0
- endif
-
-
-
- cls # efface l'Θcran
-
- # La commande echo est utilisΘe pour imprimer des lignes α l'Θcran. Notez qu'une
- # apostrophe α la fin n'est pas nΘcesaire.
-
- echo "Voici un script d'exemple pour csh. Il contient quelques alias assez utiles
- echo "que vous pourriez vouloir garder de faτon permanente, mais son but
- echo "principal est d'Ωtre utilisΘ comme tutorial. Regardez-le et modifiez-le.
- echo
-
-
-
- # Toutes les commandes csh acceptent les codes de contr⌠le dans leur ligne de
- # commande , ex. ^A est la mΩme chose que CTRL-A, qui est le code ASCII 1. Ceci
- # peut Ωtre utilisΘ pour gΘnΘrer des sΘquences d'Θchappement.
-
- echo -n ^[[30m^[[41m # inverse vidΘo, par de retour charriot
- echo -n @center( " C H O I X " 76 ) # affichage centrΘ
- echo ^[[0m
- echo
- echo "[1] Nombres premiers
- echo "[2] Afficheur de textes 'More'
- echo "[3] Jeu de labyrinthe
- echo "[4] Jeu de tours de Hanoi
- echo "[5] SystΦme de contr⌠le Backup/Version
- echo "[6] Alias utiles
- echo "[7] Mansplit, explose votre csh.doc
-
-
-
- # La commande input lit une ligne sur la console et la stoque dans la variable
- # indiquΘe.
-
-
- echo -n "> "
- input choice
-
- goto Start$choice # Saute aux Θtiquettes Start1 ou Start2 et ainsi de suite
-
-
-
-
-
- # ------------------------- Nombres premier -----------------------------
- # L'intΘressant au sujet de ce rpogramme est l'utilisation de la commande
- # fornum et les trucs utilisΘs pour gΘnΘrer les tableaux. L'information si
- # 93 est premier ou non est stoquΘe dans la variable $prime93.
-
- label Start1 # point d'entrΘe... on arrive ici aprΦs le goto
-
- set max 100 # le nombre le plus haut testΘ s'il est premier
- echo "Calcul des nombres premiers depuis 1 α "$max
- fornum i 2 $max "set prime$i 1
-
- # Voici un bloc de contr⌠le. Tout va Ωtre concatΘnΘ en une ligne en interne,
- # sΘparΘs par un point-virgule. Ainsi les guillemets finals sont obligatoires
- # et les commentaires sont interdits.
- 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 -------------------------------
- # Ce script fait α peu prΦs ce que fait le programme 'more'. I est supposΘ
- # dΘmontrer les commandes d'entrΘes/sorties de fichiers et les fonctions
- # de gestion des fichiers.
-
- label Start2
-
- # L'Θcran d'aide de 'more', dΘfini comme un alias
- alias morehelp {
- echo " espace page suivante"
- echo " entrΘe ligne suivante"
- echo " backspace page prΘcΘdente"
- echo " < haut du fichier"
- echo " > bas du fichier"
- echo " ESC, q quitter"
- echo " h aide"
- }
-
- echo "Voici une approche simple de la programation d'un afficheur de textes"
- echo "en script csh. Fonctions:"
- echo
- morehelp
- echo
-
- echo -n "Entrez le nom du fichier de texte α afficher:"
- input text
- #set text test
- if -nf $text;echo "Fichier non trouvΘ";return 20;endif
-
- # Ceci lit le fichier en mΘmoire. Chaque ligne sera un 'mot', mΩme si elle
- # contient des espaces. Pour le dΘfinition du mot, rΘfΘrez-vous α csh.doc.
- readfile file $text
- # Chaque utilisation de $file gΘnΦrera α partir de maintenant une ENORME
- # ligne de commande
- 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 ) # stoque l'Θcran entier dans $screen
- writefile screen
- # calcule & affiche le pourcentage
- set perc @rpn( $pos $page + 1 - 100 \* $lines / 100 MIN )
- echo -n ^[[3m^[[30m^[[41m "-- More -- ("$perc"%)"^[[0m ""
-
-
- input -r c # saisit une simple pression de touche sans attendre le retour
- set c x$c # charriot. empΩche '<' d'Ωtre mal interprΘtΘ dans 'if'
-
- 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 "Appuyez sur une touche";input -r a;endif
- #if $c = x/ ;set char xf;endif
- #if $c = xf
- # echo -n "Cherche la chaεne: ";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
-
-
-
-
-
- # ---------------------------- Labyrinthe -------------------------------
- # J'ai toujours voulu faire un jeu d'action avec un script :-)
- # Le labyrithe est stoquΘ en une seule chaεne, avec chaque ligne un mot.
- # Modifiez-le librement, La taille est dΘtectΘe automatiquement. N'utilisez
- # pas la rΘpΘtition de touches automatique en jouant, τa peut produire des
- # problΦmes avec la console.
-
- 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=up 2=down 4=left 6=right "^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 FΘlicitations, ΘchappΘ en `date -r` secondes.;return 0;endif
- goto Loop
-
- return 0
-
-
-
- # ------------------------------ Tours de hanoi -----------------------------
- # Ce jeu a ΘtΘ optimisΘ pour la vitesse, et est ainsi peu agrΘable α regarder
-
- label Start4
-
- set height 7 # mettez-la α un nombre impair infΘrieur α 7
-
- set h2 $height;inc h2
- cls
- unset t
- set t1 "9"; set t2 "9"; set t3 "9" # Les trois tours
- fornum -s i $h2 2 -1 "set t1 $i$t1
- set done $t1
-
- #prΘpare l'affichage
- 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 O U R S D E H A N O I
- echo "---------------------------
- echo
- echo "Ce jeu n'est pas trΦs confortable, mais il fonctionne bien. Vous devez
- echo "dΘplacer une pile de disques depuis la premiΦre de trois bases vers la
- echo "troisiΦme sans jamais mettre un disque plus large sur un plus petit. Pour
- echo "dΘplacer un disque au sommet de la pile 1 vers la pile 3, pressez d'abord
- echo "'1' puis '3'. Quand c'est fait, le temps que τa vous a pris est affichΘ,
- echo "et vous devez presser CTRL-C pour finir le jeu. Vous ne verrez aucune
- echo "sortie α part les piles lorsque le jeu fonctionne.
- echo
- echo "PS: Signalez-moi si vous faεtes moins de 60 secondes pour une partie :-)
- echo
- echo "Pressez une touche lorsque vous Ωtes prΩt...
-
- input -r x
- date -s
- cls
-
- #Affichage de la pile
- 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
-
-
-
-
- # ---------------------- contr⌠le Backup/Version -------------------------------
- # Maintenant, voici un script que vous voudrez utiliser rΘguliΦrement.
- # il fait un backup d'un jeu de fichiers vers un rΘpertoire diffΘrent,
- # gardant n'importe quel nombre de vielles versions. Extrayez ce script et
- # appelez-le depuis votre .login ou chaque fois que vous lancez votre systΦme
- # de dΘveloppement C. En fixant un dΘlai de zΘro vous Ωtes s√r que chaque fois
- # qu'il s'exΘcute, un backup est fait.
-
- label Start5
-
- set versions 3 # Nombre maximum de versions d'un fichier conservΘes
- set delay 1 # Nombre minimum de jours entre les backups
- set dest bak # Le sous-rΘpertoire de destination du backup
- set pattern "*.c *.h" # Le motif des fichiers α sauvegarder
- set exlude "x.c y.c" # Les fichiers α NE PAST recopier
-
-
- #----- mise en place de l'environement -----
- if -nd $dest
- echo -n "RΘpertoire "$dest" non prΘsent... le crΘer? o/n: ";input x
- if $x = o;mkdir $dest;else;echo "StoppΘ...";return 0;endif
- endif
-
- if -f $dest/timestamp
- set last @age( $dest/timestamp )
- if $last < $delay
- echo "Aucun backup effectuΘ... le dernier backup date d'il y a "$last" jour(s)."
- return 0
- endif
- else
- echo >$dest/timestamp
- endif
-
-
- #----- dΘtermine les fichiers altΘrΘs ----
- echo "VΘrification des fichiers...."
- exec set all $pattern # l'expansion des motifs se fait ici
-
- set cp "" # Les fichiers α copier
- foreach i ( $all ) "if -nt $i $dest/$i;set cp $cp $i;endif
-
- exec set exclude $exclude # L'expansion des motifs se fait ici
- set cp @without( $cp , $exclude )
-
- if $cp = "";echo "Fini.";touch $dest/timestamp;return 0;endif
- echo "Les fichiers α copier:"
- echo $cp
- # Sortez le commentaire sur la ligne suivante si vous voulez un test de s√retΘ...
- # set cp @confirm( Backup $cp )
- if $cp = "";echo "Fini.";touch $dest/timestamp;return 0;endif
-
-
- #------ Faire le backup -------
- 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 "Fini."
-
- return 0
-
-
-
-
-
- # ---------------------- Les alias utiles -------------------------------
- # Lisez les commentaires de chaque alias pour choisir ceux que vous prΘfΘrez
- # Copiez-les dans votre login.
-
- label Start6
-
- # d'abord quelques alias utiles pour dir
- alias d "*a dir @pickopts( $a ) -ze \"%6s %-.12n%m\" @pickargs( $a )
- alias lst "*a ls -t $a" # trie par date d'accΦs
- alias lsl "*a ls -l $a" #átrie suiavnt la longueur
- alias move "cp -m
-
- # sc cherche les *.c, mΩme 'sc -c main()' marche
- alias sc "%a search @pickopts( $a ) *.c @pickargs( $a )
-
- # edf edite une fonction dans CygnusEd si le nom commence en premiΦre colonne:
- 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 Pas trouvΘ.
- endif
- }
-
- # ces alias suppriment l'expansion des motifs pour certaines commandes
- 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
-
-
- # Celui-ci affichera toutes les images, les plus rΘcentes d'abord
- alias newpix "ls -nt | forline i STDIN \"ShowIFF $i
-
- # si vous voulez lancer des commandes internes csh en arriΦre plan, utilisez rs
- alias rs "rback csh -c
-
- # certains alias pour compatibilitΘ avec UNIX
-
- # ceci crΘe une commande chmod qui attend les bits d'abord et les fichiers aprΦs
- alias ias chmod "%a protect @subwords( $a 2 9999 ) @first( $a )
-
- # la mΩme chose avec grep:
- alias ias grep "%a search @subwords( $a 2 9999 ) @first( $a )
-
- set stk ""
- # pushd met le rΘpertoire courant sur une pile
- alias pushd "%a set stk $_cwd @subwords( $stk 1 10 );\\cd $a;e $stk
-
- # popd l'en retire
- alias popd "\\cd @first( $stk );set stk @subwords( $stk 2 10 );e $stk
-
- echo "Les alias utiles sont dΘfinis. Lisez ce fichier script pour connaεtre
- echo "leurs noms et ce qu'ils font.
-
- return 0
-
-
-
-
-
- # ----------------------- Mansplit.sh - explose votre csh.doc ------------------
- # Explose votre csh.doc en petits fichiers, un par entrΘe dans le manuel. Donc
- # les programmes de manuel externes peuvent marcher avec, ce qui est souvent
- # plus rapide que la mΘthode propre de csh.
-
- label Start7
-
- echo Patience...
- set dest ram:cshdoc/ # mettez votre rΘpertoire de destinaton ici
- if -nd ram:cshdoc;mkdir ram:cshdoc;endif # ...et ici
- 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 explosΘ et Θcrit dans "$dest
-
- return 0
-