home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD2.bin / bbs / util / csh-5.39.lha / Csh / demo.sh < prev    next >
Text File  |  1993-05-22  |  12KB  |  447 lines

  1. # This is a comment:
  2. # --------------------------- Main menu ------------------------------
  3.  
  4. # check if we're running a csh 5.16 or above. $_version contians the current
  5. # version, and the return command returns from a batch file.
  6.  
  7. if $_version < 516
  8.  echo "Sorry, csh version 5.16 needed";return 0
  9. endif
  10.  
  11.  
  12.  
  13. cls  # clears the screen
  14.  
  15. # The echo command is used for printing lines to the screen.  Note that a
  16. # trailing quote is not necessary
  17.  
  18. echo "This is a sample script for csh. It contains quite a few useful
  19. echo "aliases you might want to keep permanently, but its main purpose
  20. echo "is to be used as a tutorial. Look at it and modify it.
  21. echo
  22.  
  23.  
  24.  
  25. # Every csh command accepts ^-codes in its command line, e.g. ^A is 
  26. # the same as CTRL-A, which is ASCII code 1. This can be used to gene-
  27. # rate escape sequences.
  28.  
  29. echo -n ^[[30m^[[41m                    # reverse video, no CR
  30. echo -n @center( " C H O I C E S " 76 ) # centered display
  31. echo    ^[[0m
  32. echo
  33. echo "[1] Prime numbers
  34. echo "[2] 'More' text viewer
  35. echo "[3] Labyrinth game
  36. echo "[4] Towers of Hanoi game
  37. echo "[5] Backup/Version control system
  38. echo "[6] Useful aliases
  39. echo "[7] Mansplit, split up your csh.doc
  40.  
  41.  
  42.  
  43. # The input command reads a line from the console and stores it in
  44. # the indicated variable.
  45.  
  46. echo -n "> "
  47. input choice
  48.  
  49. goto Start$choice   # Jumps to label Start1 or Start2 and so on
  50.  
  51.  
  52.  
  53.  
  54.  
  55. # ------------------------- Prime number -----------------------------
  56. # Interesting about this program is the use of the 'fornum' command
  57. # and the tricks used the generate arrays. The information whether
  58. # 93 is prime or not is stored in variable $prime93 .
  59.  
  60. label Start1    # entrypoint... here we get from the goto
  61.  
  62. set max 100     # highest number checked for prime
  63. echo "Computing prime numbers from 1 to "$max
  64. fornum i 2 $max "set prime$i 1
  65.  
  66. # This is a statement block. Everything will be concatted on one line
  67. # internally, separated by semicolons. Therefore, ending quotes are
  68. # mandatory and comments are forbidden.
  69. fornum i 2 $max {
  70.  exec "set bool $prime"$i
  71.  if $bool
  72.   echo -n $i^i
  73.   fornum -s j $i $max $i "set prime$j 0"
  74.  endif
  75. }
  76. echo
  77.  
  78. return 0
  79.  
  80.  
  81.  
  82.  
  83. # ------------------------------ More -------------------------------
  84. # This script does about what the program 'more' does. It is supposed
  85. # to demonstrate the file I/O commands and the file handling functions.
  86.  
  87. label Start2
  88.  
  89. # the help screen for 'more', defined as an alias
  90. alias morehelp {
  91.  echo "  space     down one page"
  92.  echo "  enter     down one line"
  93.  echo "  backspace up one page"
  94.  echo "  <         top of file"
  95.  echo "  >         bottom of file"
  96.  echo "  ESC, q    quit"
  97.  echo "  h         help"
  98. }
  99.  
  100. echo "This is a simple approach to programming a text viewer as a csh script.
  101. echo "Functions:"
  102. echo
  103. morehelp
  104. echo
  105.  
  106. echo -n "Enter name of text file to view: "
  107. input text
  108. #set text test
  109. if -nf $text;echo "File not found";return 20;endif
  110.  
  111. # This reads the file into memory. Every line will be one 'word', even
  112. # if it contains blanks. For definition of word, refer to csh.doc.
  113. readfile file $text
  114. # Every use of $file will from now one generate a HUGE command line.
  115. set pos    1
  116. set page   @rpn( @winrows( ) 1 - )
  117. set lines  @flines( file )
  118. set bottom @rpn( $lines $page - 1 + )
  119.  
  120.  
  121. label Disp
  122.  
  123. cls
  124. set screen @subfile( file $pos $page )   # store screenful in $screen
  125. writefile screen
  126.                                            # compute & display percentage
  127. set perc @rpn( $pos $page + 1 - 100 \* $lines / 100 MIN )
  128. echo -n ^[[3m^[[30m^[[41m "-- More -- ("$perc"%)"^[[0m ""
  129.  
  130.  
  131. input -r c    # inputs one single keystroke without waiting for CR
  132. set c x$c     # prevents '<' from being misinterpreted in 'if'
  133.  
  134. if $c = x" ";if $pos = $bottom;unset file;return 0;endif;endif
  135. if $c = x" ";inc pos $page;if $pos > $bottom;set pos $bottom;endif;endif
  136. if $c = x^m ;inc pos   1  ;if $pos > $bottom;set pos $bottom;endif;endif
  137. if $c = x^h ;dec pos $page;if $pos < 1;set pos 1;endif;endif
  138. if $c = x"<";set pos 1;endif       
  139. if $c = x">";set pos $bottom;endif 
  140. if $c = xq  ;unset file;return 0;endif
  141. if $c = x^[ ;unset file;return 0;endif
  142. if $c = xh  ;cls;morehelp;echo "Press any key";input -r a;endif
  143. #if $c = x/  ;set char xf;endif
  144. #if $c = xf
  145. # echo -n "Search string: ";input str;search -fq $text $str | input found;
  146. # set found @subwords( $found 2 1000 );set c xn
  147. #endif
  148. #if $c = xn
  149. # set hop 0
  150. # foreach i ( $found ) "if $i > $pos;if $hop = 0;set hop $i;endif;endif
  151. # if $hop;set pos $hop;endif
  152. #endif
  153.  
  154. goto Disp
  155.  
  156.  
  157.  
  158.  
  159.  
  160. # ---------------------------- Labyrinth -------------------------------
  161. # I always wanted to do an action game as a script :-)
  162. # The laby is stored as one single string, with every line one word.
  163. # Feel free to modify it, the size is detected automatically. Don't
  164. # use auto key repeat when playing, this can cause console trouble.
  165.  
  166. label Start3
  167.  
  168. set lab      "#########################"
  169. set lab $lab "#   #     #   #     #   #"
  170. set lab $lab "# # # ### ### ### # ### #"
  171. set lab $lab "# #   # #   #     # #   #"
  172. set lab $lab "# ##### ### ### ### # ###"
  173. set lab $lab "#   #   #   #   # #     #"
  174. set lab $lab "### # ### ### # # ##### #"
  175. set lab $lab "#       #     #   #      "
  176. set lab $lab "#########################"
  177.  
  178. cls
  179. writefile lab
  180. echo -n ^j"8=up 2=down 4=left 6=right "^j^[[2A
  181. set x 2
  182. set y 2
  183. set wid @strlen( @word( $lab 1 ) )
  184. set up  @words( $lab )
  185. echo -n ^[[$up\A^[[B^[[C.^[[D
  186. alias test "%a%b set xx @rpn( $x $a + );set yy @rpn( $y $b + );\
  187.  set f @strmid( @word( $lab $yy ) $xx 1 )
  188.  
  189.  
  190. date -s
  191.  
  192. label Loop
  193.  
  194. input -r c
  195. if $c = 8;test 0 -1;if -n $f = "#";echo -n " "^H^[[A.^H;dec y;endif;endif
  196. if $c = 2;test 0  1;if -n $f = "#";echo -n " "^H^[[B.^H;inc y;endif;endif
  197. if $c = 6;test  1 0;if -n $f = "#";echo -n " "^H^[[C.^H;inc x;endif;endif
  198. if $c = 4;test -1 0;if -n $f = "#";echo -n " "^H^[[D.^H;dec x;endif;endif
  199. if $x >= $wid;cls;echo Congrats, escaped in `date -r` seconds.;return 0;endif
  200. goto Loop
  201.  
  202. return 0
  203.  
  204.  
  205.  
  206. # ------------------------------ Towers of hanoi -----------------------------
  207. # This game has been optimized for speed, and is therefore not very nice
  208. # to look at.
  209.  
  210. label Start4
  211.  
  212. set height 7 # set to uneven numbers up to 7
  213.  
  214. set h2 $height;inc h2
  215. cls
  216. unset t
  217. set t1 "9"; set t2 "9"; set t3 "9"   # the three towers
  218. fornum -s i $h2 2 -1 "set t1 $i$t1
  219. set done $t1
  220.  
  221. #prepare imaging
  222. set im "x";set h @rpn( $height 2 \* 1 + )
  223. fornum -s i 1 $h 2 "set im $im @center( @strleft( XXXXXXXXXXXXXXX $i ) $h )
  224. fornum i $height 10 "set im $im \"               \"
  225.  
  226. cls
  227. echo
  228. echo "T O W E R S   O F   H A N O I
  229. echo "-----------------------------
  230. echo
  231. echo "This game is not very comfortable, but it works fine. You have to move
  232. echo "a pile of disks from the first of three poles to the third one without
  233. echo "ever putting a larger disk on a smaller one. To move the disk at the 
  234. echo "top of pile one to pile three, first press '1' and then '3'. When you're 
  235. echo "done, the time it took you will be printed, and you have to press 
  236. echo "CTRL-C to end the game. You won't see any output but the stacks while
  237. echo "the game is running.
  238. echo
  239. echo "PS: Tell me if you get below 60 seconds for one go...   *grin*
  240. echo
  241. echo "Press any key when ready...
  242.  
  243. input -r x
  244. date -s
  245. cls
  246.  
  247. #display stack
  248. fornum  i 2 $h2 "echo \" \" @word( $im $i )
  249. echo
  250.  
  251. set m1 1;set m2 17;set m3 33
  252.  
  253. forever {
  254.  label Disp
  255.  input -r x;input -r y
  256.  exec "set src $t"$x";set dst $t"$y";set rt1 $m"$x";set rt2 $m"$y
  257.  strleft move $src 1
  258.  if a$move""a >= a$dst""b
  259.   echo -n ^g
  260.  else
  261.   strlen up1 $src; strlen up2 $dst; inc up2
  262.   echo -n \233$up1""A\233$rt1""C"                "^m\233$up1""B\
  263. \233$up2""A\233$rt2""C @word( $im $move ) ^m\233$up2""B
  264.   set t$y $move$dst
  265.   strmid t$x $src 2
  266.  endif
  267.  if $t3 = $done;echo ^j^j;date -r;endif
  268. }
  269.  
  270. return 0
  271.  
  272.  
  273.  
  274.  
  275. # ---------------------- Backup/Version control -------------------------------
  276. # Now this is a script you'd really want to use regularly. It backs up
  277. # a set of files to a different directory, keeping any number of old
  278. # old versions. Extract this script and call it from your .login or
  279. # whenever you start your C development system. By setting a delay of
  280. # zero you make sure that every time this script a backup is done.
  281.  
  282. label Start5
  283.  
  284. set versions 3         # maximum number of versions kept per fi