home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / amiga / utility / cli / csh519f.lha / demo.sh < prev    next >
Text File  |  1991-12-04  |  13KB  |  452 lines

  1. # Ceci est un commentaire
  2. # --------------------------- Menu principal ------------------------------
  3.  
  4. # vΘrifie si on fait tourner csh 5.16 ou au-dessus. $_version contient la
  5. # version courante, et la commande return finit un fichier script.
  6.  
  7. if $_version < 516
  8.  echo "DΘsolΘ, version 5.16 de csh requise";return 0
  9. endif
  10.  
  11.  
  12.  
  13. cls  # efface l'Θcran
  14.  
  15. # La commande echo est utilisΘe pour imprimer des lignes α l'Θcran. Notez qu'une
  16. # apostrophe α la fin n'est pas nΘcesaire.
  17.  
  18. echo "Voici un script d'exemple pour csh. Il contient quelques alias assez utiles
  19. echo "que vous pourriez vouloir garder de faτon permanente, mais son but
  20. echo "principal est d'Ωtre utilisΘ comme tutorial. Regardez-le et modifiez-le.
  21. echo
  22.  
  23.  
  24.  
  25. # Toutes les commandes csh acceptent les codes de contr⌠le dans leur ligne de
  26. # commande , ex. ^A est la mΩme chose que CTRL-A, qui est le code ASCII 1. Ceci
  27. # peut Ωtre utilisΘ pour gΘnΘrer des sΘquences d'Θchappement.
  28.  
  29. echo -n ^[[30m^[[41m                    # inverse vidΘo, par de retour charriot
  30. echo -n @center( " C H O I X " 76 ) # affichage centrΘ
  31. echo    ^[[0m
  32. echo
  33. echo "[1] Nombres premiers
  34. echo "[2] Afficheur de textes 'More'
  35. echo "[3] Jeu de labyrinthe
  36. echo "[4] Jeu de tours de Hanoi
  37. echo "[5] SystΦme de contr⌠le Backup/Version
  38. echo "[6] Alias utiles
  39. echo "[7] Mansplit, explose votre csh.doc
  40.  
  41.  
  42.  
  43. # La commande input lit une ligne sur la console et la stoque dans la variable
  44. # indiquΘe.
  45.  
  46.  
  47. echo -n "> "
  48. input choice
  49.  
  50. goto Start$choice   # Saute aux Θtiquettes Start1 ou Start2 et ainsi de suite
  51.  
  52.  
  53.  
  54.  
  55.  
  56. # ------------------------- Nombres premier -----------------------------
  57. # L'intΘressant au sujet de ce rpogramme est l'utilisation de la commande
  58. # fornum et les trucs utilisΘs pour gΘnΘrer les tableaux. L'information si
  59. # 93 est premier ou non est stoquΘe dans la variable $prime93.
  60.  
  61. label Start1    # point d'entrΘe... on arrive ici aprΦs le goto
  62.  
  63. set max 100     # le nombre le plus haut testΘ s'il est premier
  64. echo "Calcul des nombres premiers depuis 1 α "$max
  65. fornum i 2 $max "set prime$i 1
  66.  
  67. # Voici un bloc de contr⌠le. Tout va Ωtre concatΘnΘ en une ligne en interne,
  68. # sΘparΘs par un point-virgule. Ainsi les guillemets finals sont obligatoires
  69. # et les commentaires sont interdits.
  70. fornum i 2 $max {
  71.  exec "set bool $prime"$i
  72.  if $bool
  73.   echo -n $i^i
  74.   fornum -s j $i $max $i "set prime$j 0"
  75.  endif
  76. }
  77. echo
  78.  
  79. return 0
  80.  
  81.  
  82.  
  83.  
  84. # ------------------------------ More -------------------------------
  85. # Ce script fait α peu prΦs ce que fait le programme 'more'. I est supposΘ
  86. # dΘmontrer les commandes d'entrΘes/sorties de fichiers et les fonctions
  87. # de gestion des fichiers.
  88.  
  89. label Start2
  90.  
  91. # L'Θcran d'aide de 'more', dΘfini comme un alias
  92. alias morehelp {
  93.  echo "  espace    page suivante"
  94.  echo "  entrΘe    ligne suivante"
  95.  echo "  backspace page prΘcΘdente"
  96.  echo "  <         haut du fichier"
  97.  echo "  >         bas du fichier"
  98.  echo "  ESC, q    quitter"
  99.  echo "  h         aide"
  100. }
  101.  
  102. echo "Voici une approche simple de la programation d'un afficheur de textes"
  103. echo "en script csh. Fonctions:"
  104. echo
  105. morehelp
  106. echo
  107.  
  108. echo -n "Entrez le nom du fichier de texte α afficher:"
  109. input text
  110. #set text test
  111. if -nf $text;echo "Fichier non trouvΘ";return 20;endif
  112.  
  113. # Ceci lit le fichier en mΘmoire. Chaque ligne sera un 'mot', mΩme si elle
  114. # contient des espaces. Pour le dΘfinition du mot, rΘfΘrez-vous α csh.doc.
  115. readfile file $text
  116. # Chaque utilisation de $file gΘnΦrera α partir de maintenant une ENORME
  117. # ligne de commande
  118. set pos    1
  119. set page   @rpn( @winrows( ) 1 - )
  120. set lines  @flines( file )
  121. set bottom @rpn( $lines $page - 1 + )
  122.  
  123.  
  124. label Disp
  125.  
  126. cls
  127. set screen @subfile( file $pos $page )   # stoque l'Θcran entier dans $screen
  128. writefile screen
  129.                                            # calcule & affiche le pourcentage
  130. set perc @rpn( $pos $page + 1 - 100 \* $lines / 100 MIN )
  131. echo -n ^[[3m^[[30m^[[41m "-- More -- ("$perc"%)"^[[0m ""
  132.  
  133.  
  134. input -r c    # saisit une simple pression de touche sans attendre le retour
  135. set c x$c     # charriot. empΩche '<' d'Ωtre mal interprΘtΘ dans 'if'
  136.  
  137. if $c = x" ";if $pos = $bottom;unset file;return 0;endif;endif
  138. if $c = x" ";inc pos $page;if $pos > $bottom;set pos $bottom;endif;endif
  139. if $c = x^m ;inc pos   1  ;if $pos > $bottom;set pos $bottom;endif;endif
  140. if $c = x^h ;dec pos $page;if $pos < 1;set pos 1;endif;endif
  141. if $c = x"<";set pos 1;endif
  142. if $c = x">";set pos $bottom;endif
  143. if $c = xq  ;unset file;return 0;endif
  144. if $c = x^[ ;unset file;return 0;endif
  145. if $c = xh  ;cls;morehelp;echo "Appuyez sur une touche";input -r a;endif
  146. #if $c = x/  ;set char xf;endif
  147. #if $c = xf
  148. # echo -n "Cherche la chaεne: ";input str;search -fq $text $str | input found;
  149. # set found @subwords( $found 2 1000 );set c xn
  150. #endif
  151. #if $c = xn
  152. # set hop 0
  153. # foreach i ( $found ) "if $i > $pos;if $hop = 0;set hop $i;endif;endif
  154. # if $hop;set pos $hop;endif
  155. #endif
  156.  
  157. goto Disp
  158.  
  159.  
  160.  
  161.  
  162.  
  163. # ---------------------------- Labyrinthe -------------------------------
  164. # J'ai toujours voulu faire un jeu d'action avec un script :-)
  165. # Le labyrithe est stoquΘ en une seule chaεne, avec chaque ligne un mot.
  166. # Modifiez-le librement, La taille est dΘtectΘe automatiquement. N'utilisez
  167. # pas la rΘpΘtition de touches automatique en jouant, τa peut produire des
  168. # problΦmes avec la console.
  169.  
  170. label Start3
  171.  
  172. set lab      "#########################"
  173. set lab $lab "#   #     #   #     #   #"
  174. set lab $lab "# # # ### ### ### # ### #"
  175. set lab $lab "# #   # #   #     # #   #"
  176. set lab $lab "# ##### ### ### ### # ###"
  177. set lab $lab "#   #   #   #   # #     #"
  178. set lab $lab "### # ### ### # # ##### #"
  179. set lab $lab "#       #     #   #      "
  180. set lab $lab "#########################"
  181.  
  182. cls
  183. writefile lab
  184. echo -n ^j"8=up 2=down 4=left 6=right "^j^[[2A
  185. set x 2
  186. set y 2
  187. set wid @strlen( @word( $lab 1 ) )
  188. set up  @words( $lab )
  189. echo -n ^[[$up\A^[[B^[[C.^[[D
  190. alias test "%a%b set xx @rpn( $x $a + );set yy @rpn( $y $b + );\
  191.  set f @strmid( @word( $lab $yy ) $xx 1 )
  192.  
  193.  
  194. date -s
  195.  
  196. label Loop
  197.  
  198. input -r c
  199. if $c = 8;test 0 -1;if -n $f = "#";echo -n " "^H^[[A.^H;dec y;endif;endif
  200. if $c = 2;test 0  1;if -n $f = "#";echo -n " "^H^[[B.^H;inc y;endif;endif
  201. if $c = 6;test  1 0;if -n $f = "#";echo -n " "^H^[[C.^H;inc x;endif;endif
  202. if $c = 4;test -1 0;if -n $f = "#";echo -n " "^H^[[D.^H;dec x;endif;endif
  203. if $x >= $wid;cls;echo FΘlicitations, ΘchappΘ en `date -r` secondes.;return 0;endif
  204. goto Loop
  205.  
  206. return 0
  207.  
  208.  
  209.  
  210. # ------------------------------ Tours de hanoi -----------------------------
  211. # Ce jeu a ΘtΘ optimisΘ pour la vitesse, et est ainsi peu agrΘable α regarder
  212.  
  213. label Start4
  214.  
  215. set height 7 # mettez-la α un nombre impair infΘrieur α 7
  216.  
  217. set h2 $height;inc h2
  218. cls
  219. unset t
  220. set t1 "9"; set t2 "9"; set t3 "9"   # Les trois tours
  221. fornum -s i $h2 2 -1 "set t1 $i$t1
  222. set done $t1
  223.  
  224. #prΘpare l'affichage
  225. set im "x";set h @rpn( $height 2 \* 1 + )
  226. fornum -s i 1 $h 2 "set im $im @center( @strleft( XXXXXXXXXXXXXXX $i ) $h )
  227. fornum i $height 10 "set im $im \"               \"
  228.  
  229. cls
  230. echo
  231. echo " T O U R S  D E  H A N O I
  232. echo "---------------------------
  233. echo
  234. echo "Ce jeu n'est pas trΦs confortable, mais il fonctionne bien. Vous devez
  235. echo "dΘplacer une pile de disques depuis la premiΦre de trois bases vers la
  236. echo "troisiΦme sans jamais mettre un disque plus large sur un plus petit. Pour
  237. echo "dΘplacer un disque au sommet de la pile 1 vers la pile 3, pressez d'abord
  238. echo "'1' puis '3'. Quand c'est fait, le temps que τa vous a pris est affichΘ,
  239. echo "et vous devez presser CTRL-C pour finir le jeu. Vous ne verrez aucune
  240. echo "sortie α part les piles lorsque le jeu fonctionne.
  241. echo
  242. echo "PS: Signalez-moi si vous faεtes moins de 60 secondes pour une partie :-)
  243. echo
  244. echo "Pressez une touche lorsque vous Ωtes prΩt...
  245.  
  246. input -r x
  247. date -s
  248. cls
  249.  
  250. #Affichage de la pile
  251. fornum  i 2 $h2 "echo \" \" @word( $im $i )
  252. echo
  253.  
  254. set m1 1;set m2 17;set m3 33
  255.  
  256. forever {
  257.  label Disp
  258.  input -r x;input -r y
  259.  exec "set src $t"$x";set dst $t"$y";set rt1 $m"$x";set rt2 $m"$y
  260.  strleft move $src 1
  261.  if a$move""a >= a$dst""b
  262.   echo -n ^g
  263.  else
  264.   strlen up1 $src; strlen up2 $dst; inc up2
  265.   echo -n \233$up1""A\233$rt1""C"                "^m\233$up1""B\
  266. \233$up2""A\233$rt2""C @word( $im $move ) ^m\233$up2""B
  267.   set t$y $move$dst
  268.   strmid t$x $src 2
  269.  endif
  270.  if $t3 = $done;echo ^j^j;date -r;endif
  271. }
  272.  
  273. return 0
  274.  
  275.  
  276.  
  277.  
  278. # ---------------------- contr⌠le Backup/Version -------------------------------
  279. # Maintenant, voici un script que vous voudrez utiliser rΘguliΦrement.
  280. # il fait un backup d'un jeu de fichiers vers un rΘpertoire diffΘrent,
  281. # gardant n'importe quel nombre de vielles versions. Extrayez ce script et
  282. # appelez-le depuis votre .login ou chaque fois que vous lancez votre systΦme
  283. # de dΘveloppement C. En fixant un dΘlai de zΘro vous Ωtes s√r que chaque fois
  284. # qu'il s'exΘcute, un backup est fait.
  285.  
  286. label Start5
  287.  
  288. set versions 3         # Nombre maximum de versions d'un fichier conservΘes
  289. set delay    1         # Nombre minimum de jours entre les backups
  290. set dest     bak       # Le sous-rΘpertoire de destination du backup
  291. set pattern  "*.c *.h" # Le motif des fichiers α sauvegarder
  292. set exlude   "x.c y.c" # Les fichiers α NE PAST recopier
  293.  
  294.  
  295. #----- mise en place de l'environement -----
  296. if -nd $dest
  297.  echo -n "RΘpertoire "$dest" non prΘsent... le crΘer? o/n: ";input x
  298.  if $x = o;mkdir $dest;else;echo "StoppΘ...";return 0;endif
  299. endif
  300.  
  301. if -f $dest/timestamp
  302.  set last @age( $dest/timestamp )
  303.  if $last < $delay
  304.   echo "Aucun backup effectuΘ... le dernier backup date d'il y a "$last" jour(s)."
  305.   return 0
  306.  endif
  307. else
  308.  echo >$dest/timestamp
  309. endif
  310.  
  311.  
  312. #----- dΘtermine les fichiers altΘrΘs ----
  313. echo "VΘrification des fichiers...."
  314. exec set all $pattern              # l'expansion des motifs se fait ici
  315.  
  316. set cp ""                          # Les fichiers α copier
  317. foreach i ( $all ) "if -nt $i $dest/$i;set cp $cp $i;endif
  318.  
  319. exec set exclude $exclude          # L'expansion des motifs se fait ici
  320. set cp @without( $cp , $exclude )
  321.  
  322. if $cp = "";echo "Fini.";touch $dest/timestamp;return 0;endif
  323. echo "Les fichiers α copier:"
  324. echo $cp
  325. # Sortez le commentaire sur la ligne suivante si vous voulez un test de s√retΘ...
  326. # set cp @confirm( Backup $cp )
  327. if $cp = "";echo "Fini.";touch $dest/timestamp;return 0;endif
  328.  
  329.  
  330. #------ Faire le backup -------
  331. alias name "%a set n $dest/$i;if $a;set n $n.$a;endif
  332.  
  333. foreach i ( $cp ) {
  334.  set v $versions;dec v
  335.  name $v;dec v
  336.  if -f $n;rm $n;endif
  337.  fornum -s j $v 0 -1 "set hi $n;name $j;if -f $n;mv $n $hi;endif"
  338.  cp $i $dest
  339. }
  340.  
  341. touch $dest/timestamp
  342. echo "Fini."
  343.  
  344. return 0
  345.  
  346.  
  347.  
  348.  
  349.  
  350. # ---------------------- Les alias utiles -------------------------------
  351. # Lisez les commentaires de chaque alias pour choisir ceux que vous prΘfΘrez
  352. # Copiez-les dans votre login.
  353.  
  354. label Start6
  355.  
  356. # d'abord quelques alias utiles pour dir
  357. alias  d   "*a dir @pickopts( $a ) -ze \"%6s %-.12n%m\" @pickargs( $a )
  358. alias  lst "*a ls -t $a"    # trie par date d'accΦs
  359. alias  lsl "*a ls -l $a"    #átrie suiavnt la longueur
  360. alias  move "cp -m
  361.  
  362. # sc cherche les *.c, mΩme 'sc -c main()' marche
  363. alias  sc "%a search @pickopts( $a ) *.c @pickargs( $a )
  364.  
  365. # edf edite une fonction dans CygnusEd si le nom commence en premiΦre colonne:
  366. alias  edf {
  367. %func
  368.  set b ""
  369.  search -afl *.c $func | inp b
  370.  if $b
  371.   split b file line
  372.   lced $file
  373.   waitforport rexx_ced
  374.   inc line 1
  375.   rxsend rexx_ced "jump to file "$file "jumpto "$line" 0"
  376.  else
  377.   echo Pas trouvΘ.
  378.  endif
  379. }
  380.  
  381. # ces alias suppriment l'expansion des motifs pour certaines commandes
  382. alias  zoo     "*a Zoo $a
  383. alias  lharc   "*a Lharc $a
  384. alias  lz      "*a Lz $a
  385. alias  newlist "*a Newlist $a
  386. alias  eval    "*a Eval $a
  387.  
  388.  
  389. # Celui-ci affichera toutes les images, les plus rΘcentes d'abord
  390. alias  newpix  "ls -nt | forline i STDIN \"ShowIFF $i
  391.  
  392. # si vous voulez lancer des commandes internes csh en arriΦre plan, utilisez rs
  393. alias  rs      "rback csh -c
  394.  
  395. # certains alias pour compatibilitΘ avec UNIX
  396.  
  397. # ceci crΘe une commande chmod qui attend les bits d'abord et les fichiers aprΦs
  398. alias ias chmod "%a protect @subwords( $a 2 9999 ) @first( $a )
  399.  
  400. # la mΩme chose avec grep:
  401. alias ias grep "%a search @subwords( $a 2 9999 ) @first( $a )
  402.  
  403. set stk ""
  404. # pushd met le rΘpertoire courant sur une pile
  405. alias  pushd "%a set stk $_cwd @subwords( $stk 1 10 );\\cd $a;e $stk
  406.  
  407. # popd  l'en retire
  408. alias  popd  "\\cd @first( $stk );set stk @subwords( $stk 2 10 );e $stk
  409.  
  410. echo "Les alias utiles sont dΘfinis. Lisez ce fichier script pour connaεtre
  411. echo "leurs noms et ce qu'ils font.
  412.  
  413. return 0
  414.  
  415.  
  416.  
  417.  
  418.  
  419. # ----------------------- Mansplit.sh - explose votre csh.doc ------------------
  420. # Explose votre csh.doc en petits fichiers, un par entrΘe dans le manuel. Donc
  421. # les programmes de manuel externes peuvent marcher avec, ce qui est souvent
  422. # plus rapide que la mΘthode propre de csh.
  423.  
  424. label Start7
  425.  
  426. echo Patience...
  427. set dest ram:cshdoc/           # mettez votre rΘpertoire de destinaton ici
  428. if -nd ram:cshdoc;mkdir ram:cshdoc;endif   # ...et ici
  429. set mode skip
  430. forline i csh:csh.doc {
  431.  if $mode = write
  432.   if @strleft( $i^a 1 ) < " "
  433.    echo >>$dest$file $i
  434.   else
  435.    set mode skip
  436.   endif
  437.  endif
  438.  if $mode = skip
  439.   if "    " = @strleft( $i 4 )
  440.    set mode write
  441.    set a @index( $i "(" )
  442.    if $a > 0;dec a 1;strleft i $i $a;endif
  443.    set file $i
  444.    echo >$dest$file $i
  445.    echo $file
  446.   endif
  447.  endif
  448. }
  449. echo "csh.doc explosΘ et Θcrit dans "$dest
  450.  
  451. return 0
  452.