home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume23 / rc / part01 / EXAMPLES < prev    next >
Text File  |  1991-10-18  |  5KB  |  269 lines

  1. There is no repository for useful rc code snippets as yet, so I'm including
  2. a (short) file in the distribution with some helpful/intriguing pieces of
  3. rc code.
  4.  
  5. A sample .rcrc
  6. --------------
  7. Here is the .rcrc I use on archone:
  8.  
  9. umask 022 
  10. path=(/bin /usr/bin /usr/ucb)
  11. ht=`/usr/arch/bin/hosttype
  12. h=$home
  13. history=$h/.history
  14. bin=$h/bin/$ht
  15. lib=$h/lib/$ht
  16. sh=$h/bin/sh
  17. include=$h/lib/include
  18.  
  19. switch ($ht) {
  20. case sun*
  21.     OBERON='. '$h/other/oberon
  22.     p=/usr/ucb
  23.     compiler='gcc -Wall -O -g'
  24.     MANPATH=$h/man:/usr/arch/man:/usr/man
  25.     if (! ~ $TERM ()) {
  26.         stty dec
  27.         /usr/arch/bin/msgs -q
  28.     }
  29. case next
  30.     p=(/usr/ucb /usr/bin /NextApps)
  31.     compiler='cc -Wall -O -g -DNODIRENT'
  32.     MANPATH=$h/man:/usr/arch/man:/usr/man
  33.     if (! ~ $TERM ())
  34.         stty dec
  35. case sgi
  36.     p=(/usr/ucb /usr/sbin /usr/bin)
  37.     compiler='gcc -Wall -O -g -DNOSIGCLD'
  38.     MANPATH=$h/man:/usr/arch/man:/usr/catman
  39.     if (!{~ $TERM () || ~ $TERM *iris*})
  40.         stty line 1 intr '' erase '' kill ''
  41. case *
  42.     echo .rcrc not configured for this machine
  43. }
  44.  
  45. path=(. $sh $bin /usr/arch/bin $p /bin /usr/bin/X11 /etc /usr/etc)
  46. cdpath=(. .. $h $h/src $h/misc $h/other $h/adm)
  47. RNINIT=-d$h' -t -M -2400-h -2400+hfrom'; DOTDIR=$h/misc/news
  48. PRINTER=lw
  49.  
  50. fn s {
  51.     echo $status
  52. }
  53. fn cd {
  54.     builtin cd $1 && \
  55.     switch ($1) {
  56.     case ()
  57.         dir=$home
  58.     case *
  59.         dir=()
  60.     }
  61. }
  62. fn pwd {
  63.     if (~ $dir ())
  64.         dir=`/bin/pwd
  65.     echo $dir
  66. }
  67. fn x {
  68.     if (~ `tty /dev/console)
  69.         clear_colormap
  70.     clear
  71.     exit
  72. }
  73. fn p {
  74.     if (~ $history ()) {
  75.         echo '$history not set' >[1=2]
  76.         return 1
  77.     }
  78.  
  79.     if (! ~ $#* 0 1 2) {
  80.         echo usage: $0 '[egrep pattern] [sed command]' >[1=2]
  81.         return 1
  82.     }
  83.  
  84.     command=`{
  85.         egrep -v '^[     ]*p([     ]+|$)' $history | switch ($#*) {
  86.         case 0
  87.             cat
  88.         case 1
  89.             egrep $1
  90.         case 2
  91.             egrep $1 | sed $2
  92.         } | tail -1
  93.     }
  94.  
  95.     echo $command
  96.     eval $command
  97. }
  98.  
  99. if (~ $TERM dialup network) {
  100.     TERM=vt100
  101.     biff y
  102. }
  103.  
  104. A front-end to NeXT's "openfile"
  105. --------------------------------
  106.  
  107. Named after the sam "B" command for opening a file, this script was written
  108. by Paul Haahr. (Assumes the "pick" command from Kernighan and Pike is also
  109. in your path.)
  110.  
  111. #!/bin/rc
  112. if (~ $#* 0)
  113.         exec openfile
  114. create = ()
  115. files = ()
  116. for (i in $*)
  117.         if (test -f $i) {
  118.                 files = ($files $i)
  119.         } else {
  120.                 create = ($create $i)
  121.     }
  122. create = `{ pick $create }
  123. files = ($files $create)
  124. for (i in $create)
  125.         > $i
  126. if (! ~ $#files 0)
  127.     openfile $files
  128.  
  129. A read function
  130. ---------------
  131.  
  132. Unlike sh, rc doesn't have a read. This clever alternative returns an
  133. exit status as well as fetch a variable. Use as
  134.  
  135.     read foo
  136.  
  137. to set $foo to a single line from the terminal.
  138.  
  139. (due to John Mackin <john@syd.dit.csiro.au>)
  140.  
  141. fn read {
  142.         x=() {
  143.                 x = `` ($nl) { awk '{print; print 0; exit}' ^ $nl ^ \
  144.                                    'END {print 1; print 1}' }
  145.                 $1 = $x(1)
  146.                 return $x(2)
  147.         }
  148. }
  149.  
  150. From cs.wisc.edu!dws Fri Aug  2 18:16:14 1991
  151.  
  152. #-------
  153. # ls front end
  154. #-------
  155. fn ls    \
  156. {
  157.     test -t 1 && * = (-FCb $*)
  158.     builtin ls $*
  159. }
  160. #-------
  161. # nl - holds a newline, useful in certain command substitutions
  162. #-------
  163. nl='
  164. '
  165. #-------
  166. # show - tell me about a name
  167. #
  168. # Runs possibly dangerous things through cat -v in order to protect
  169. # me from the effects of control characters I might have in the
  170. # environment.
  171. #-------
  172. fn show    \
  173. {
  174.     * = `` $nl {whatis -- $*}
  175.     for(itis)
  176.     {
  177.         switch($^itis)
  178.         {
  179.         case 'fn '*    ; echo $itis | cat -v -t
  180.         case builtin*    ; echo $itis
  181.         case /*        ; file $itis; ls -ld $itis
  182.         case *'='*    ; echo $itis | cat -v -t
  183.         case *        ; echo $itis: UNKNOWN: update show
  184.         }
  185.     }
  186.     itis = ()
  187. }
  188. #-------
  189. # Tell me automatically when a command has a nonzero status.
  190. #-------
  191. fn prompt    \
  192. {
  193.     Status = $status
  194.     ~ $Status 0 || echo '[status '$Status']'
  195. }
  196.  
  197. #-------
  198. # chop - echo the given list, less its final member
  199. #
  200. # e.g. chop (a b c) -> (a b)
  201. #-------
  202. fn chop {
  203.     ~ $#* 0 1 && return 0
  204.     ans = '' {    # local variable
  205.         ans = ()
  206.         while(! ~ $#* 1)
  207.         {
  208.             ans = ($ans $1)
  209.             shift
  210.         }
  211.         echo $ans
  212.     }
  213. }
  214.  
  215. From arnold@audiofax.com Thu May 30 08:49:51 1991
  216.  
  217. # cd.rc --- souped up version of cd
  218.  
  219. # this is designed to emulate the fancy version of cd in ksh,
  220. # so if you're a purist, feel free to gag
  221.  
  222. _cwd=$home
  223. _oldcwd=$home
  224.  
  225. fn cd {
  226.     if (~ $#* 0) {
  227.         if (~ $_cwd $home) {    # do nothing
  228.         } else {
  229.             builtin cd && { _oldcwd=$_cwd ; _cwd=$home }
  230.         }
  231.     } else if (~ $#* 1) {
  232.         if (~ $1 -) {
  233.             _t=$_cwd
  234.             builtin cd $_oldcwd && {
  235.                 _cwd=$_oldcwd
  236.                 _oldcwd=$_t
  237.                 echo $_cwd
  238.             }
  239.             _t=()
  240.         } else {
  241.             # if a cd happens through the cdpath, rc echos
  242.             # the directory on its own.  all we have to do
  243.             # is track where we end up
  244.             _dopwd = 1
  245.             { ~ $1 /* } && _dopwd = 0    # absolute path
  246.             builtin cd $1 && {
  247.                 _oldcwd=$_cwd
  248.                 _cwd=$1
  249.                 { ~ $_dopwd 1 } && _cwd=`/bin/pwd
  250.             }
  251.             _dopwd=()
  252.         }
  253.     } else if (~ $#* 2) {
  254.         _t=`{ echo $_cwd | sed 's<'$1'<'$2'<' }
  255.         builtin cd $_t && {
  256.             _oldcwd=$_cwd
  257.             _cwd=$_t
  258.             echo $_cwd
  259.         }
  260.         _t=()
  261.     } else {
  262.         echo cd: takes 0, 1, or 2 arguments >[1=2]
  263.         builtin cd $1 && { _oldcwd=$_cwd ; _cwd=`/bin/pwd ; echo $_cwd }
  264.     }
  265. }
  266.  
  267. fn pwd { echo $_cwd }
  268.  
  269.