diff options
Diffstat (limited to 'EXAMPLES')
| -rw-r--r-- | EXAMPLES | 749 |
1 files changed, 0 insertions, 749 deletions
diff --git a/EXAMPLES b/EXAMPLES deleted file mode 100644 index 90bd8df..0000000 --- a/EXAMPLES +++ /dev/null @@ -1,749 +0,0 @@ -There is no repository for useful rc code snippets as yet, so I'm including -a (short) file in the distribution with some helpful/intriguing pieces of -rc code. - -A sample .rcrc --------------- -Here is the .rcrc I use on archone: - -umask 022 -path=(/bin /usr/bin /usr/ucb) -ht=`/usr/arch/bin/hosttype -h=$home -history=$h/.history -bin=$h/bin/$ht -lib=$h/lib/$ht -sh=$h/bin/sh -include=$h/lib/include - -switch ($ht) { -case sun* - OBERON='. '$h/other/oberon - p=/usr/ucb - compiler='gcc -Wall -O -g' - MANPATH=$h/man:/usr/arch/man:/usr/man - if (! ~ $TERM ()) { - stty dec - /usr/arch/bin/msgs -q - } -case next - p=(/usr/ucb /usr/bin /NextApps) - compiler='cc -Wall -O -g -DNODIRENT' - MANPATH=$h/man:/usr/arch/man:/usr/man - if (! ~ $TERM ()) - stty dec -case sgi - p=(/usr/ucb /usr/sbin /usr/bin) - compiler='gcc -Wall -O -g -DNOSIGCLD' - MANPATH=$h/man:/usr/arch/man:/usr/catman - if (!{~ $TERM () || ~ $TERM *iris*}) - stty line 1 intr '' erase '' kill '' -case * - echo .rcrc not configured for this machine -} - -path=(. $sh $bin /usr/arch/bin $p /bin /usr/bin/X11 /etc /usr/etc) -cdpath=(. .. $h $h/src $h/misc $h/other $h/adm) -RNINIT=-d$h' -t -M -2400-h -2400+hfrom'; DOTDIR=$h/misc/news -PRINTER=lw - -fn s { - echo $status -} -fn cd { - builtin cd $1 && \ - switch ($1) { - case () - dir=$home - case * - dir=() - } -} -fn pwd { - if (~ $dir ()) - dir=`/bin/pwd - echo $dir -} -fn x { - if (~ `tty /dev/console) - clear_colormap - clear - exit -} -fn p { - if (~ $history ()) { - echo '$history not set' >[1=2] - return 1 - } - - if (! ~ $#* 0 1 2) { - echo usage: $0 '[egrep pattern] [sed command]' >[1=2] - return 1 - } - - command=`{ - egrep -v '^[ ]*p([ ]+|$)' $history | switch ($#*) { - case 0 - cat - case 1 - egrep $1 - case 2 - egrep $1 | sed $2 - } | tail -1 - } - - echo $command - eval $command -} - -if (~ $TERM dialup network) { - TERM=vt100 - biff y -} - -A front-end to NeXT's "openfile" --------------------------------- - -Named after the sam "B" command for opening a file, this script was written -by Paul Haahr. (Assumes the "pick" command from Kernighan and Pike is also -in your path.) - -#!/bin/rc -if (~ $#* 0) - exec openfile -create = () -files = () -for (i in $*) - if (test -f $i) { - files = ($files $i) - } else { - create = ($create $i) - } -create = `{ pick $create } -files = ($files $create) -for (i in $create) - > $i -if (! ~ $#files 0) - openfile $files - -A read function ---------------- - -Unlike sh, rc doesn't have a read. This clever alternative returns an -exit status as well as fetch a variable. Use as - - read foo - -to set $foo to a single line from the terminal. - -(due to John Mackin <john@syd.dit.csiro.au>) - -fn read { - x=() { - x = `` ($nl) { awk '{print; print 0; exit}' ^ $nl ^ \ - 'END {print 1; print 1}' } - $1 = $x(1) - return $x(2) - } -} - -From cs.wisc.edu!dws Fri Aug 2 18:16:14 1991 - -#------- -# ls front end -#------- -fn ls \ -{ - test -t 1 && * = (-FCb $*) - builtin ls $* -} -#------- -# nl - holds a newline, useful in certain command substitutions -#------- -nl=' -' -#------- -# show - tell me about a name -# -# Runs possibly dangerous things through cat -v in order to protect -# me from the effects of control characters I might have in the -# environment. -#------- -fn show \ -{ - * = `` $nl {whatis -- $*} - for(itis) - { - switch($^itis) - { - case 'fn '* ; echo $itis | cat -v -t - case builtin* ; echo $itis - case /* ; file $itis; ls -ld $itis - case *'='* ; echo $itis | cat -v -t - case * ; echo $itis: UNKNOWN: update show - } - } - itis = () -} -#------- -# Tell me automatically when a command has a nonzero status. -#------- -fn prompt \ -{ - Status = $status - ~ $Status 0 || echo '[status '$Status']' -} - -#------- -# chop - echo the given list, less its final member -# -# e.g. chop (a b c) -> (a b) -#------- -fn chop { - ~ $#* 0 1 && return 0 - ans = '' { # local variable - ans = () - while(! ~ $#* 1) - { - ans = ($ans $1) - shift - } - echo $ans - } -} - -From arnold@audiofax.com Thu May 30 08:49:51 1991 - -# cd.rc --- souped up version of cd - -# this is designed to emulate the fancy version of cd in ksh, -# so if you're a purist, feel free to gag - -_cwd=$home -_oldcwd=$home - -fn cd { - if (~ $#* 0) { - if (~ $_cwd $home) { # do nothing - } else { - builtin cd && { _oldcwd=$_cwd ; _cwd=$home } - } - } else if (~ $#* 1) { - if (~ $1 -) { - _t=$_cwd - builtin cd $_oldcwd && { - _cwd=$_oldcwd - _oldcwd=$_t - echo $_cwd - } - _t=() - } else { - # if a cd happens through the cdpath, rc echos - # the directory on its own. all we have to do - # is track where we end up - _dopwd = 1 - { ~ $1 /* } && _dopwd = 0 # absolute path - builtin cd $1 && { - _oldcwd=$_cwd - _cwd=$1 - { ~ $_dopwd 1 } && _cwd=`/bin/pwd - } - _dopwd=() - } - } else if (~ $#* 2) { - _t=`{ echo $_cwd | sed 's<'$1'<'$2'<' } - builtin cd $_t && { - _oldcwd=$_cwd - _cwd=$_t - echo $_cwd - } - _t=() - } else { - echo cd: takes 0, 1, or 2 arguments >[1=2] - builtin cd $1 && { _oldcwd=$_cwd ; _cwd=`/bin/pwd ; echo $_cwd } - } -} - -fn pwd { echo $_cwd } - -From vlsi.cs.caltech.edu!drazen Tue Jan 21 16:03:14 1992 - -# A kill builtin. - -#ifdef B_KILL -#include <ctype.h> -static void b_kill(char **av) -{ - int signal = SIGTERM; - int n = 1; - pid_t pid; - boolean res; - - if (!av[1]) { - set(TRUE); - return; - } -#undef STRCMP -#define STRCMP strcmp - if ( '-' == av[1][0]) { - char *p = 1+av[1]; - if (0 == strcmp(av[1], "-l")){ - int r; const int nsig = NUMOFSIGNALS; - const int C = 4, R = 1 + (int)((nsig-2)/C); - for (r=1; r<=R; r++){ - int j; - for (j=r; j<nsig; j+=R){ - fprint(1, "%s%d. %s\t", j<10?" ":"", j, signals[j][0]); - } - fprint(1,"\n"); - } - set(TRUE); - return; - } - n++; - if ( (signal=a2u(p)) < 0){ - int i; - for (i = 1; i < NUMOFSIGNALS; i++){ - char UPPER[31], *u=UPPER, *q; - for (q=signals[i][0]; *q; q++, u++) *u = toupper(*q); - *u = '\0'; - - if (*signals[i][0] && - (!STRCMP(signals[i][0], p) || !STRCMP(3+signals[i][0],p) - || !STRCMP(UPPER, p) || !STRCMP(3+UPPER, p) ) ) - { - signal = i; - break; - } - } - if (signal < 0){ - fprint(2,"kill: bad signal %s\n", av[1]); - set(FALSE); - return; - } - } - } -#undef STRCMP - - for (res=TRUE; av[n]; n++){ - if( (pid = (pid_t) a2u(av[n])) < 0){ - fprint(2, "kill: bad process number %s\n", av[n]); - res = FALSE; - continue; - } - if (kill(pid,signal)){ - uerror("kill"); - res = FALSE; - continue; - } - } - set(res); -} -#endif -From acc.stolaf.edu!quanstro Thu Apr 2 02:51:10 1992 -Received: from thor.acc.stolaf.edu ([130.71.192.1]) by archone.tamu.edu with SMTP id <45339>; Thu, 2 Apr 1992 02:50:56 -0600 -Received: by thor.acc.stolaf.edu; Thu, 2 Apr 92 02:49:31 -0600 -Date: Thu, 2 Apr 1992 02:49:31 -0600 -From: quanstro@acc.stolaf.edu -Message-Id: <9204020849.AA26566@thor.acc.stolaf.edu> -To: byron@archone.tamu.edu -Subject: EXAMPLES in 1.4beta -Status: RO - - -I have a little bit of code which might be a little more general than -the souped-up version that is already there. Here it is, if you are -interested. - -# directory functions ################################################### -fn pwd { echo $PWD; } - -fn pushd { - dirs = ($PWD $dirs); - builtin cd $*; - PWD = `{builtin pwd}; -} - -fn popd { - switch ($#*) - { - case 0 - ; - case 1 - echo 'popd: argument '^$1^' ignored.' >[1=2]; - case * - echo 'popd: usage: popd [n].'; - } - - if (! ~ $dirs ()) - { - builtin cd $dirs(1); - PWD = $dirs(1); - echo $PWD; - * = $dirs; - shift - dirs = $*; - } -} - -fn cd { - ~ $* () && * = $home; - !~ $#* 1 && echo 'cd: too many arguments' >[1=2] && return 1; - - if (test -r $* ) { - pushd $*; - } else { - echo cd: $* does not exist. >[1=2] - return 1; - } -} - -fn back { popd $*; } - -fn Back { - cd $home; - PWD = $home; - dirs = (); -} - -fn dirs { - echo $dirs; -} - -PWD = `{builtin pwd} ; dirs = $PWD # kickstart - - - - - -From acc.stolaf.edu!quanstro Thu Apr 2 02:53:40 1992 -Received: from thor.acc.stolaf.edu ([130.71.192.1]) by archone.tamu.edu with SMTP id <45339>; Thu, 2 Apr 1992 02:53:38 -0600 -Received: by thor.acc.stolaf.edu; Thu, 2 Apr 92 02:51:46 -0600 -Date: Thu, 2 Apr 1992 02:51:46 -0600 -From: quanstro@acc.stolaf.edu -Message-Id: <9204020851.AA26573@thor.acc.stolaf.edu> -To: byron@archone.tamu.edu -Subject: EXAMPLES -Status: RO - - -Little yp hack which act's like ~ w/o syntatic sugar (for those who do -not have the luxury of seting up symbolic links to all user's homes - -# user function ######################################################### -fn u user { - info = () - info = `` (':') {ypmatch $1 passwd >[2] /dev/null } - - if (~ $info ()) { - echo user $1 unknown >[1=2]; - return 1; - } else { - echo $info(6) - if (~ $0 user) - cd $info(6) - } -} - - -From stolaf.edu!quanstro Sun Apr 5 04:53:34 1992 -Date: Sun, 5 Apr 1992 04:53:08 -0500 -From: quanstro@stolaf.edu (Erik Quanstrom) -To: byron@archone.tamu.edu -Subject: man written in rc -Status: RO - -I whipped this up because the NeXTs here insist on using MANPAGER -instead of PAGER and otherwise being obnoxious . . . - -Anyway ... I hope you approve - -#!/bin/rc -######################################################################### -# file: man # -# # -# object: display man pages # -# # -# bugs: * slow # -# * does not know about fmt files # -# # -# Erik Quanstrom # -# 11. Februar 1992 # -######################################################################### -PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:$PATH ; -TROFF = (nroff -hq -Tcrt); -macros=an; -sections=(cat1 cat2 cat3 cat4 cat5 cat6 cat7 cat8 catl man1 man2 man3 man4 \ - man5 man6 man7 man8 manl) -$nl=' -' -fn sigint sighup sigquit sigalrm sigterm { rm -f $Bat; exit 2;} - -fn usage { - echo usage: $0 [-] [-t] [-M path] [-T macros] [[section] title] ...>[1=2]; - exit 1; -} - -n=(); -fn shiftn { - n=($n 1) -} - -~ $PAGER () && test -t 1 && PAGER=more; #default pager - -while (~ $1 -*) - { - switch ($1) - { - case - - if (~ $PAGER troff) - echo bad combination of flags >[1=2] && usage; - PAGER=cat; - case -t - ~ TROFF () && TROFF = (troff -t); - ~ TCAT () && PAGER=(lpr -t); - case -M - shift; - ~ $1 () && usage; - - MANPATH=$1; - case -T - shift; - ~ $1 () && usage; - macros=$1; - case -k - fflag=(); kflag=1; - shift; - break; - case -f - # locate related too filenames - kflag=(); fflag=1; - shift; - break; - case -* - echo bad flag '`'^$1^'''' >[1=2]; - usage; - } - shift; - } - -if (!~ $#* 1) { - ~ $1 [l1-8] && { sname=$1 ; sections=(cat man)^$1 ; shift } - #hack for sun-style man pages - ~ $1 [l1-8]? && { sname=$1 ; sections=(cat man)^`{echo $1| cut -c1} ; shift } -} - -if (~ 1 $fflag $kflag) { - dirlist=(); - for (d in ``(:$nl) {echo $MANPATH}) - test -s $d^/whatis && dirlist=($dirlist $d^/whatis); - - ~ $1 () && usage; - - if (~ $fflag 1) { - while (!~ $1 ()) { - cmd=`{echo $1 | sed 's/^.*\///g'} - egrep -h '^'^$cmd' ' $dirlist; - shift; - } - } else { - while (!~ $1 ()) { - grep -h $1 $dirlist; - shift; - } - } - exit 0; -} - -s=0; -while (!~ $1 ()) { - for (dir in ``(:$nl) {echo $MANPATH}) { - filelist=($filelist `{echo $dir/^$sections^/$1^.* |\ - tr ' ' '\12' | grep -v '*'}) - - # coment this out if you don't care about speed, but - # would rather find all the pages. - ~ $filelist () || break; - } - - if (~ $filelist ()) { - if (~ $#sections 2) { - echo no entry for $1 in section '`'$sname'''' of the manual >[1=2]; - } else { - echo no entry for '`'$1'''' found. >[1=2]; - } - s=1; - } else { - - echo $filelist '(' $#filelist ')' >[1=2]; - - for (file in $filelist) { - if (~ $file */cat[1-8l]/*) { - Cat = ($Cat $file); - } else { - # search for dups - dont=() - for (x in $Cat) { - if (~ `{echo $x | sed 's/\/[mc]a[nt][1-8l]//'} \ - `{echo $file | sed 's/\/[mc]a[nt][1-8l]//'}) { - dont=1; - break; - } - } - - if (~ $dont ()) { - cd `{echo $file | sed 's/man[1-8].*//'} - echo -n Formatting ... - $TROFF -m^$macros $file > /tmp/man^$pid^$#n && \ - Bat = ($Bat /tmp/man^$pid^$#n) - - shiftn; - echo ' 'done. - } - } - } - } - shift; -} - -{ !~ () $Cat || !~ () $Bat } && $PAGER $Cat $Bat; - -rm -f $Bat; -~ $s () || exit $s; - -exit 0; - - - -From osf.org!rsalz Thu Apr 23 16:22:32 1992 -Date: Thu, 23 Apr 1992 16:22:07 -0500 -From: rsalz@osf.org -To: byron@archone.tamu.edu -Subject: One for your EXAMPLES file -Status: RO - -Use - trimhist [-#lines] -trims your history file back; useful for folks with dis quota's :-) -fn trimhist { p1=-100 { - cp $history $history^'~' - ~ $#* 1 && p1=$1 - tail $p1 <$history^'~' >$history - rm $history^'~' -} } - -From Pa.dec.com!uucp Mon Apr 27 12:25:02 1992 -Date: Mon, 27 Apr 1992 12:15:18 -0500 -From: haahr@adobe.com -To: Byron Rakitzis <byron@archone.tamu.edu> -Subject: a neat little rc script - -what you have to know to understand this: - $md for me is usually obj.$machine - my mkfiles build *.o, *.a, and the a.outs in $md - this is my acc script, which i use for compiling adobe routines ---- -#! /user/haahr/bin/next/rc - -cc = cc -proto = '-DPROTOTYPES=1' - -switch ($md) { -case noproto.$machine; proto = '-DPROTOTYPES=0' -case gprof.$machine; cc = ($cc -pg) -case prof.$machine; cc = ($cc -p) -case lcomp.$machine; cc = lcomp -} -exec $cc $proto '-DPACKAGE_SPECS="package.h"' '-DISP=isp_mc68020' '-DOS=os_mach' $* - -From rc-owner Tue May 12 14:54:10 1992 -Received: from postman.osf.org ([130.105.1.152]) by archone.tamu.edu with SMTP id <45337>; Tue, 12 May 1992 14:38:16 -0500 -Received: from earth.osf.org by postman.osf.org (5.64+/OSF 1.0) - id AA14480; Tue, 12 May 92 13:25:03 -0400 -Received: by earth.osf.org (5.64/4.7) id AA03499; Tue, 12 May 92 13:25:02 -0400 -Date: Tue, 12 May 1992 12:25:02 -0500 -From: rsalz@osf.org -Message-Id: <9205121725.AA03499@earth.osf.org> -To: rc@archone.tamu.edu -Subject: Useful function -Status: R - -It looks like line noise, but it turns things like - /home/rsalz/foo/bar -into - ~/foo/bar - -Useful for when you put your current directory up in your icon title. -By duplicating the $home section you can make things like - /project/dce/build/dce1.0.1/src/rpc -become - $MYBT/src/rpc - -## If a pathname starts with $home, turn $home into ~. Uses all built-ins. -fn tildepath { p1=() i=() { - p1=$1 - switch ($p1) { - case $home $home/* - # Split arg into components - *=`` (/) { echo -n $p1 } - # Shift down by number of components in $home - for (i in `` (/) { echo -n $home } ) shift - # Glue back together - p1='~' - for (i) p1=$p1 ^ '/' ^ $i - echo $p1 - case * - echo $p1 - } - return 0 -} } - -From osf.org!rsalz Tue May 12 15:47:12 1992 -Received: from postman.osf.org ([130.105.1.152]) by archone.tamu.edu with SMTP id <45316>; Tue, 12 May 1992 15:47:06 -0500 -Received: from earth.osf.org by postman.osf.org (5.64+/OSF 1.0) - id AA21070; Tue, 12 May 92 16:46:58 -0400 -Received: by earth.osf.org (5.64/4.7) id AA09396; Tue, 12 May 92 16:46:56 -0400 -Date: Tue, 12 May 1992 15:46:56 -0500 -From: rsalz@osf.org -Message-Id: <9205122046.AA09396@earth.osf.org> -To: byron@archone.tamu.edu -Subject: Re: Useful function -Status: R - ->wow. thanks, i'll add it to EXAMPLES. -Glad you like. Getting something added to EXAMPLES has been a goal of mine... - -I've been thinking, a bit, about a more general way of doing it. I want -a "prefix-sub" function, like this - prefix $some_path var1 var2 var3 var4 var5 -That would take some_path and replace any leading $var1 (etc) values -with the variable name. Return on the first match. - -Hmm -- come to think of it, that's very easy to do: - -# Use pathprefix filename var1 var2 var3 -# returns filename, with leading prefixes (in $var1...) turned into the -# string $var1... -fn pathprefix { p1=() i=() j=() { - p1=$1 ; shift - for (i) { - ~ $p1 $$i $$i^/* && { - *=`` (/) { echo -n $p1 } - for (j in `` (/) { echo -n $$i } ) shift - p1='$'^$i - for (j) p1=$p1 ^ '/' ^ $j - echo $p1 - return 0 - } - } - echo $p1 - return 0 -} } - -home=/user/users/rsalz -z=/usr/users -pathprefix /usr/users/rsalz home usr # --> $home -pathprefix /usr/users/rsalz z # --> $z/rsalz -pathprefix /usr/users/rsalz/foo z home # --> $z/rsalz/foo -pathprefix /usr/users/rsalz/foo home # --> $home/foo - |