home *** CD-ROM | disk | FTP | other *** search
- From: Nancy Blachman <decvax!decwrl!sun!idi!resonex!nancy@Ucb-Vax.ARPA>
- To: net.unix, net.unix-wizards, net.sources
- Subject: Actual tricks, shells, csh aliases and the like, 1 of 3
- Date: 16 Oct 84 21:20:53 GMT
- Organization: Resonex Inc., Sunnyvale, CA
-
- > [Know anybody with a GREAT .login or .cshrc?]
-
- > I'm interested in collecting the little tricks, shell scripts, awk
- > hacks, csh aliases, and such that people have built to make their daily
- > life a little easier or more automatic. Being a fairly new system
- > administrator I don't have the big toolbox that years of messing around
- > will leave you with. If you have any hacks you're proud of (or that
- > you aren't proud of, but which work anyway), and you're willing to make
- > them public, mail them to me. I'll collect, collate, shuffle, sort,
- > munge, judge, select and discard them and then "summarize to the net".
-
- This article concentrates on aliases, and .cshrc and .login files I received
- in response to my solicitation. The second article in this series focuses
- shell scripts. The third article centers on C programs and awk scripts.
-
- /\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\/
- > Nancy Blachman {allegra,hplabs,ihnp4,sun}!resonex!nancy (408)720 8600 x37 <
- /\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\/
-
- ::::::::::::::
- aliases/1
- ::::::::::::::
- Date: Thu, 13 Sep 84 07:27:35 est
- From: ihnp4!pur-ee!davy (Dave Curry)
- To: ihnp4!resonex!nancy
- Subject: aliases
-
- Nancy:
-
- Here's a few handy aliases to put your current working
- directory into your prompt:
-
- alias cd chdir \!:\* \; set prompt='${cwd}\[!\]\ ' \; setenv CWD '$cwd'
- alias pd pushd \!:\* \; set prompt='${cwd}\[!\]\ ' \; setenv CWD '$cwd'
- alias pp popd \!:\* \; set prompt='${cwd}\[!\]\ ' \; setenv CWD '$cwd'
-
- These put the current directory into the environment also, this is
- for an editor used here locally which uses this information. You can delete
- that part if you don't need it.
-
- --Dave Curry
- ihnp4!pur-ee!davy
-
-
-
- ::::::::::::::
- aliases/2
- ::::::::::::::
- From: hplabs!sdcrdcf!sdcsvax!greg (Greg Noel)
- Date: Thu, 13 Sep 84 10:57:51 pdt
- Return-Address: ucbvax!sdcsvax!greg or Greg@NOSC
- Organization: NCR Corporation, Torrey Pines
- To: sdcrdcf!hplabs!resonex!nancy
- Subject: Re: Tricks, shell and awk scripts, csh aliases and the like
-
- I have three little gems from my bag of tricks that I'd like to show you,
- all for the C shell. The first is an alias for the `pwd' command:
- alias pwd echo \$cwd
- The built-in variable `cwd' always contains the current working directory,
- and since `echo' is a built-in command, this is MUCH faster than invoking
- a program to calculate the actual location. The only problem (and I don't
- have a solution) is that it gets confused by symbolic links to directories.
-
- The second one is something that turns the directory structure from something
- passive into something active:
- alias come if -e .greg_come source .greg_come
- alias go if -e .greg_go source .greg_go
- alias cd go \; set prev = \$cwd \; chdir \!\* \; \
- echo \$prev ==\\\> \$cwd \; come
- What this does is cause the shell to look for a specific file whenever it
- transfers into a directory, and if it is there, source it. Also, whenever
- you leave a directory, it looks for a different file and sources that before
- leaving. I use this to set up location-specific aliases or to have something
- happen auto-magicly whenever I work in some diretory -- for example, changing
- into my `play' directory invokes a menu that will set up the environment and
- run game programs -- different save files for `rogue' or other stuff that
- I don't want to carry around with me all the time. It's more flexible than
- it seems at first glance; the only thing I can suggest is to try it and you
- will keep finding new ways to use it.
-
- The last one is really a replacement for the `pushd' and `popd' commands --
- I didn't like the way they worked, so I did these. It seperates the action
- of pushing a directory from the action of changing directories. I wanted
- this since I also have a whole bunch of aliases to move between widely-
- seperated portions of the filesystem (something I do a lot) and it was
- easier for me to type `push; u test' (which pushes the current directory
- and takes me into the `test' subdirectory of something interesting) than
- to type `pushd /long/complicated/path/test'. This isn't terribly original,
- but the gem, and something I find VERY useful is the `back' command, which
- takes you to the directory you last left, so you can bouce back and forth
- between two directories -- one is the source location and one the test
- location, for example. Anyway, here's what it looks like:
- alias push set dirstack = \( \$cwd \$dirstack \) \; \
- echo Pushing \\\[\$\#dirstack] \$cwd \; \!\*
- alias pop cd \$dirstack\[1] \; set dirstack = \( \$dirstack\[2-] \)
- alias back set dirstack = \( \$prev \$dirstack \) \; pop
- alias pp set x = \$dirstack\[1] dirstack\[1] = \$cwd \; cd \$x
- Notice that it interacts with the previous alias for `cd' in that it expects
- the variable `prev' to have the previous directory (which is what `cd' leaves
- in it). The `pp' alias is sometimes useful -- it pushes the current directory
- while transfering to the old top of stack, a simultaneous push-pop.
-
- I hope you found these interesting and entertaining.
-
- -- Greg Noel, NCR Torrey Pines Greg@sdcsvax.UUCP or Greg@nosc.ARPA
-
- ::::::::::::::
- cshrc/1
- ::::::::::::::
- From: <hplabs!tektronix!jerryp>
- Date: Thursday, 13 Sep 84 09:48:55 PDT
- To: resonex!nancy, jerryp
- Subject: Re: Tricks, shell and awk scripts, csh aliases and the like
-
- Nancy,
-
- I'll mail you a few .cshrc and .login files. Unfortunately, I'm short on
- time... so I can't comment a lot... but I'd be glad to answer any questions
- you've got about how they work.
-
- A summary of them:
-
- 1) This .cshrc file comes from the tektronix!tekred machine in Redmond,
- Oregon. Its neat feature is that, when a user "su"'s to someone else's
- account, their prompt changes
- from %
- to account>
- where the "su"'d name appears before the >. Very nice, I think.
-
- Also, they do a standard thing around here. The first line [if ($?prompt)]
- checks to see if the .cshrc is being scanned by an interactive shell. If so,
- the commands below are executed. If not (like a shell escape from "vi"), the
- commands aren't executed. This really speeds up shell escapes! (I do the
- same thing, in a different way, in my .cshrc file.)
-
-
- 2) This is my .login file. I should mention that I've got my own calendar
- system that's updated every morning at 1 AM by "at". It sits in my
- ".calendar" directory. You'll see a lot of that stuff in the .login file.
-
-
- 3 & 4) I have *two* .cshrc files. One, ".cshrc", is the standard file. It
- contains a limited list of aliases and setup commands. The other, ".cshrc2",
- is one I source when I'll be logged on for a long time and doing a lot of
- work. The .cshrc2 has time-saving aliases like "alias m more" in it.
-
- At login, the .cshrc is always read. This sets my prompt to something like
- <directory,#>
- where # is the C-shell history number. Also, since my system is so busy, I
- have a "quick login" setup in .cshrc to let me see my mail immediately and
- logout without doing anything else, if I want to. This quick-login has a
- $
- prompt set... the Bourne-shell prompt.
-
- If I want an extended login, I execute the alias "res" (from .cshrc). It sets
- alarms automatically (for meetings, etc... from my .calendar directory) and
- re-sets my prompt to something like
- [directory,#]
- That way, I know that I've got all my aliases available.
-
- Since my system is overloaded, this dual-.cshrc system saves me time and
- hassle... .cshrc2 takes a long time to source.
-
-
- --Jerry Peek, UNIX Training Instructor, Tektronix, Inc.
- US Mail: MS 76-036, P.O. Box 500, Beaverton, OR 97077
- uucp: {allegra,decvax,hplabs,ihnp4,mit-eddie,ucbvax}!tektronix!jerryp
- CSnet: jerryp@tek
- ARPAnet: jerryp.tek@csnet-relay
- Phone: 503/627-1603
-
-
- ---------------------------------------------------------------------------
- FILE #1 (.cshrc):
-
- if ($?prompt) then
- set history=20
- set path=(. $home/bin /usr/local /usr/tek /usr/public /usr/ucb /bin /usr/bin)
- set mail=(300 /usr/spool/mail/$home:t /etc/motd)
- source ~/.aliases
-
- set prompt=`whoami | sed -e 's/ .*//' -e 's/user=//'`
- if ($prompt == $user || $prompt == "") then
- set prompt="% "
- else
- set prompt="$prompt> "
- endif
- endif
- ---------------------------------------------------------------------------
- FILE #2 (.login):
- uptime # show system load
- set ignoreeof # do not logout on EOF (^D)
- set noclobber # do not overwrite files with > or >>
- cp ~/.exrc8 ~/.exrc # set up vi/ex to environment in ~/.exrc8
- setenv EDIT /usr/ucb/vi # set default editor to vi
- setenv PRINTER uph # if type "man -Tlpr", use "uph" to store for printing
- setenv NEWSBOX ~ # save news (readnews "s") in home directory or beneath
-
- set noglob; eval `tset -srQm 'plugboard:?4025'`; unset noglob
-
- stty new crt # new tty driver, crt terminal, see newtty(4)
- stty tostop hup # stop background jobs on output, hangup hw on logout
- limit filesize 2000 # do not write file > 2,000,000 bytes
- limit coredumpsize 0 # prevent core dumps when csh bombs
- touch .llog # set correct last login time for finger
- if ($TERM == 'tek4023' || $TERM =~ aaa*inv ) then
- # KEEP more FROM USING THE ul OPTION AND MESSING UP DISPLAY:
- setenv MORE -u
- else if (($TERM == qume5) || ($TERM == dumb)) then
- mesg n
- exit 0
- endif
-
- # immediate notification (every 60 seconds) of mail:
- set mail = (60 /usr/spool/mail/$user /etc/motd)
-
- # check /etc/motd for changes; if any, show them and (maybe) add to calendar:
- diff ~/.calendar/last.motd /etc/motd >! /tmp/motd.diff
- if ( $status != 0 ) then
- echo "< = old MOTD ... > = new MOTD"
- more /tmp/motd.diff
- echo "To read the new MOTD into the calendar, answer y. To ignore it, answer q."
- echo -n "Otherwise, hit RETURN: "
- set ans = $<
- if ($ans == "y") then
- cat /etc/motd | tee -a ~/.calendar/calendar >! ~/.calendar/last.motd
- vi + ~/.calendar/calendar
- echo "To reset *today's* calendars, type 'calendar.set -F'."
- else if ($ans == "q") then
- cat /etc/motd >! ~/.calendar/last.motd
- endif
- endif
-
- echo "--------------------"
- inc # put new mail, if any, in ~/.mail/inbox
-
- echo "--------------------"
-
- set time = 10 # for jobs that take longer than 10, show how long
- # IF THERE ARE LOGIN MESSAGES, SHOW THEM:
- if !(-z ~/.calendar/mesg.login) then
- echo "Here are the login messages, "`date '+%a %D'`
- echo ""
- doublespace ~/.calendar/mesg.login
- endif
-
- echo "For an uptime graph, type 'upgr'."
- ---------------------------------------------------------------------------
- FILE #3 (.cshrc):
- # if this is a non-interactive shell, quit.
- if ( ! $?prompt) exit 0
-
- # save login system search path, removing leading "." (thanx to tekig!danr):
- if ( ! $?SYSPATH ) setenv SYSPATH "$path[2-]"
-
- # set default places to find commands (put current and .bin directories first):
- set path=(. ~/.bin $SYSPATH /usr/public{,/texthelp} /usr3/{barbaraz/.,tcomm/}bin)
-
- # CHECK FOR QUICK LOGIN:
- if (! $?LOGGEDIN) then
- echo -n "For quick login (Bourne shell), answer y; otherwise, press RETURN: "
- if ( "$<" =~ y* ) then
- echo "To continue with login, press control-D; to logout, type 'stty 0'"
- /bin/sh -i
- echo "Continuing with standard login..."
- endif
- endif
- setenv LOGGEDIN x
-
- # set cd search path for directory names which aren't sub-directories:
- set cdpath=(~ `finddirs ~/training{,/*} /usr3/tcomm/unix{,/*}` ~/.bin ~/.log ~/.mail ~/stuff ~/tape*)
-
- set history=1000 # keep the last 1000 commands in history
-
- # use /usr/public/prompt to get massaged directory name for prompt-setting:
- set prompt = "<`prompt ~ $cwd`,"{\!}"> "
-
- # edit my calendar:
- alias calen 'vi ~/.calendar/calendar; echo '"To reset today\'s calendars, type calendar.set -F"''
-
- # change directory, reset prompt:
- alias cd 'chdir \!*; set prompt = "<`prompt ~ $cwd`,"{\!}"> "'
-
- # add to specified .log directory
- alias log 'echo "Put a .ze at end of file, unless last log of this set.";vi + ~/.log/`cat ~/.log/latestlog`/\!*'
-
- # create newterm command to allow terminal-type change
- alias newterm 'set noglob;eval `tset -srQ \!*`;unset noglob'
-
- # sets alarms (if any) and sources '.cshrc2' (my other alias list)
- alias res '~/.bin/alarm.set ; source ~/.cshrc2'
-
- alias todo 'vi ~/todo\!*' # change one of the "to do" lists
- ---------------------------------------------------------------------------
- FILE #4 (.cshrc2):
-
- # notify immediately when background jobs are finished
- set notify
-
- # prompt with current directory name, history number:
- alias s_p 'set prompt = "[`prompt ~ $cwd`,"{\!}"] "'
- s_p
-
- # set 'vi' for 4-character tabs/shifts:
- alias 4vi 'cp ~/.exrc{4,}; echo "MODE: programming"'
-
- # set 'vi' for 8-character tabs/shifts:
- alias 8vi 'cp ~/.exrc{8,}; echo "MODE: text"'
-
- # set 'vi' for quick work (no .exrc file):
- alias qvi 'rm ~/.exrc; echo "MODE: quick"'
-
- # easy way to compile "C" programs (ring bell if filename ends with ".c"):
- alias C 'if ("\!*" =~ *.c) yes ;mv \!* ,\!*;echo \!*.c" SENT TO cc";cc \!*.c -o \!*;if (-e \!*) chmod 311 \!*'
-
- # show alarms that (may be) set... and message explaining them:
- alias alarms 'echo "These alarms have been set:";cat ~/.calendar/mesg.alarm; \ps | fgrep ".bin/nleave"'
-
- # change back to previous directory:
- alias c- 'set x=$cwd; chdir $lastdir; s_p; set lastdir=$x'
-
- # edit my calendar:
- alias calen 'v8 ~/.calendar/calendar; echo '"To reset today\'s calendars, type calendar.set -F"''
-
- # see today's calendars:
- alias cals 'cat ~/.calendar/mesg.*'
-
- # save current directory for 'c-', change directory, reset prompt:
- alias cd 'set lastdir=$cwd; chdir \!*; s_p'
-
- # see mail without inc'ing it:
- alias checkm 'see /usr/spool/mail/jerryp'
-
- # same as 'cd', but lists directory, too:
- alias cl 'set lastdir=$cwd; chdir \!*; ls -F; s_p'
-
- # same as 'cl', but gives long list:
- alias cll 'set lastdir=$cwd; chdir \!*; ls -l; s_p'
-
- alias f 'grep "^\!*" /etc/passwd' # quick version of "finger -s"
-
- alias H 'history -r | fgrep "\!*"' # find something in history list
- alias h history 5 # show last five lines
- alias hi history 10 # show last ten lines
- alias his history 20 # show last twenty lines
- alias hist 'history 40|m' # show last forty lines; pipe to 'more'
- alias histo 'history 70|m' # show last seventy lines; pipe to 'more'
-
- # send output of command to 'pr' (with command as header), then to uph:
- alias hpr '\!* | pr -h "\!*" | uph'
-
- alias j 'jobs -l >! /tmp/j$$; pushin /tmp/j$$; rm /tmp/j$$'
- # show job status (process numbers, too) squeezed onto one line each
-
- alias lc 'ls *.c' # list all C source code in this directory
-
- # add to specified .log directory
- alias log 'echo "Put a .ze at end of file, unless last log of this set.";v8 + ~/.log/`cat ~/.log/latestlog`/\!*'
-
- # list executable files, 5 columns, sorted across 80-wide line:
- alias lx 'lf -1 | fgrep \* | pr -t -5 -l1 -w80'
-
- alias m more # shortened form of 'more' command
-
- # faster pwd (singlequotes prevent expansion before it's executed):
- alias pwd 'echo $cwd'
-
- # re-start inverse video on Ann Arbors:
- alias reinv 'echo "[7m";clear'
-
- # lock terminal until ^C and login password are entered:
- alias somb /usr3/jos/bin/somb
-
- alias showm 'inc;show' # get new mail
-
- # give more info (how much time I've used) when using "status":
- alias status 'source ~/.bin/status'
-
- alias tcpr 'tcprint -p12 -m5 -ff \!* &' # typical quick "tcprint" use
-
- alias todo 'v8 ~/todo\!*' # change one of the "to do" lists
-
- alias up uptime
-
- # make uptime graph:
- alias upgr '(nohup uptime_graph ~/,up`date +%m%d.%H%M` &)'
-
- # show uptime today's graph:
- alias upsh 'uptime_show -20 ~/,up`date +%m%d`*'
-
- # 'vi' for programming:
- alias v4 '4vi;vi \!*'
-
- # 'vi' for standard text:
- alias v8 '8vi;vi \!*'
-
- # call 'vi' with a search (must use 8vi because search requires a 'wrapscan')
- alias vs '8vi; vi +/\!*'
-
- alias write '/usr4/danr/bin/rite -c \!*' # show each character as it's typed
-
- #UNUSED ALIASES:
- #alias cd 'set lastdir=$cwd;chdir \!*;set prompt="`~/.bin/prompt`"'
- # change to maps directory:
- #alias maps 'cd /usr/spool/news/lib/maps;echo "switching to newsa";su newsa;set $user=jerryp;c-'
- # keep "at" job from dying because of long EXINIT:
- #alias niterun 'setenv EXINIT "set sw=8";\niterun \!*;8vi'
- #alias du ~danr/bin/du # improved version of "directory usage" query
- # format text, save in file".ty", then show it on the crt:
- #alias typeup '~/.bin/type \!* >! \!*:r; more \!*:r'
- # give description of 'ps' codes before doing the 'ps':
- #alias ps 'cat ~/.ps.man;\ps \!*'
- # easy way to compile and run "C" programs
- # (ring bell if filename ends with ".c"):
- #alias c 'if ("\!*" =~ *.c) yes ;mv \!* ,\!*;echo \!*.c" SENT TO cc";cc \!*.c -o \!*;echo "press ^C to stop execution";sleep 2;./\!*'
- # easy way to change editor environment files:
- #alias adde 'vi ~/.exrc\!*; set ex=(`cat ~/.exrc\!*`); setenv EXINIT "$ex"'
- #alias rmm '\rmm \!* &' # remove mail in background
- # faster "man" listings:
- #alias man 'echo "man -q:"; \man -q \!*'
- # improved spell routine (write-protected dictionary):
- #alias spel 'chmod +w ~/.misspell; /usr/public/spel \!*;chmod -w ~/.misspell'
- # show whether using ~/.exrc4 or ~/.exrc8:
- #alias vi 'echo "MODE: "$EXSTAT;/usr/ucb/vi \!*'
- #alias comp '8vi;\comp \!*' # set 'vi' for text before doing the 'comp'
- # show last ten users of "tcprint" program:
- #alias tcp tail /usr3/tcomm/.tcprint/log
- # favorite "ps" (gives PID, PPID, STAT, TT, TIME, and long description):
- #alias p 'ps lwx | cut -c12-22,53- | nfold'
-
- ::::::::::::::
- cshrc/2
- ::::::::::::::
- Date: Thu, 13 Sep 84 02:16:31 edt
- From: ihnp4!seismo!umcp-cs!chris (Chris Torek)
- To: ihnp4!resonex!nancy
- Subject: Re: Tricks, shell and awk scripts, ...
-
- Actually Re: [Know anybody with a GREAT .login or .cshrc?]:
-
- I don't know about *great*, but I'm probably one of the candidates for
- *slowest* . . . . FYA (For Your Amusement), here's my .login and .cshrc
- on this machine (they're not the same on tove, gyre, gymble, and eneevax).
-
- Chris
-
- : Run this shell script with "sh" not "csh"
- PATH=:/bin:/usr/bin:/usr/ucb
- export PATH
- all=FALSE
- if [ $1x = -ax ]; then
- all=TRUE
- fi
- /bin/echo 'Extracting .cshrc'
- sed 's/^X//' <<'//go.sysin dd *' >.cshrc
- #
- if ($?prompt) then
- echo -n '['
- set path=(. ~chris/bin ~chris/sys /usr/local/bin /g/local /usr/ucb /bin /usr/bin /usr/games /etc /usr/hosts)
- echo -n 'cshrc]'
- set ignoreeof history=100 time=2 mail=(10 /usr/spool/mail/chris) cdpath=(~ /g/VOTRAX ~/bin /g/chris ..) S=/usr/spool/uucp CICO=/usr/lib/uucp/uucico
- alias hh history;alias h 'history 20';alias j jobs;alias o popd
- alias status 'echo $status';alias so source;alias bye logout
- alias p pushd;alias done 'echo ';alias kb "rm -i .*.bak *.bak .*.CKP *.CKP"
- alias kc "rm -i .*.CKP *.CKP";alias e emacs;alias @@term 'kill -9 $$'
- alias af ~chris/af/af;alias cdl "cd \!:1;ls \!:2*";alias lsl "ls -li"
- alias lsa "ls -A";alias lsla "ls -lai";alias up "cd ..";alias upl "cd ..;ls"
- alias cdll "cd \!:1;lsl \!:2*";alias lsld "lsl -d";alias lslg "lsl -g"
- alias upll "cd ..;lsl";alias pl "pushd \!:1;ls \!:2*";alias z logout
- alias pll "pushd \!:1;lsl \!:2*";alias ol "popd;ls";alias oll "popd;lsl"
- alias cdla "cd \!:1;lsla \!:2*";alias v80 'echo -n "[?2l";set term=VT52'
- alias v132 'echo -n "[?2l";set term=VT52.132';alias ansi 'echo -n "<"'
- alias fix 'stty newcrt erase kill ';alias ca 'ex "+1,.|q"'
- alias own 'cp \!:1 /tmp/own$$;rm -f \!:1;mv /tmp/own$$ \!:1'
- alias save 'cp \!:1 \!:1.old;chmod a-w \!:1.old;chmod +w \!:1'
- alias c80 'echo -n "[?3l";set term=DT80';alias suspend 'suspend;dirs'
- alias col80 'echo -n "[?3l";colnum 80';alias a alias
- alias c132 'echo -n "[?3h";set term=DT80.132'
- alias col132 'echo -n "[?3h";colnum 132'
- alias hold 'echo -n "[H[J[12;20H[5mI'"'"'ll be right back[m[20H";lock;echo -n "[H[J"'
- alias feed '(sleep 3000;echo Feeding time\\!)&'
- alias open 'set noglob;eval `/usr/chris/bin/open \!:*`;unset noglob'
- alias loav /usr/mark/bin/load
- setenv VISUAL /usr/ucb/vi;setenv EDITOR /usr/local/bin/emacs
- setenv EPATH :/usr/chris/emacs:/usr/israel/emacs:/usr/emacs/loclib:/usr/emacs/maclib
- alias dir ls;alias era rm;alias printman /usr/man/printman;alias d dirs
- alias clx 'rm -f /tmp/X_lock.\!:1 /usr/spool/uucp/LCK..\!:1'
- alias aasize 'set noglob;eval `/usr/local/bin/aasize \!:1`;unset noglob'
- alias aasave 'set noglob;eval `/usr/local/bin/aasave \!:1`;unset noglob'
- alias down 'cd `echo */|awk '\''{print $1}'\''`;echo $cwd'
- alias downl 'down;ls';alias downll 'down;lsl';alias mark 'set \!:1=$cwd'
- alias lso 'lsla | sort +4 -rn';alias edenv 'source ~chris/bin/edenv'
- alias aibib 'echo \!*|lookbib -n -p /usr/randy/papers/airefs|page'
- alias checkque /usr/lib/mmdf/checkque;alias sum-dial /usr/lib/mmdf/sum-dial
- alias deliver 'sh -c "HOME=/ /usr/lib/mmdf/deliver \!:*"'
- alias ll 'ls -l';alias tm 'telnet 128.8.0.8'; alias uptime
- endif
- umask 22
- if ($?prompt) then
- set prompt='[\!] '
- echo ''
- endif
- //go.sysin dd *
- made=TRUE
- if [ $made = TRUE ]; then
- /bin/chmod 644 .cshrc
- /bin/echo -n ' '; /bin/ls -ld .cshrc
- fi
- /bin/echo 'Extracting .login'
- sed 's/^X//' <<'//go.sysin dd *' >.login
- #
- stty erase ^H kill ^X intr decctlq nl0 cr0 ff0
- cd;setenv TERMCAP /usr/chris/.termcap
- # cp .exrc1 .exrc
- # Set up the terminal
- # 4025=Tek4025 sd=dialup x1=Xer 1750 GG=Gigi d4=GT40 aaa=AAA else DT80
- # if (`slowtty` == y) then
- # cp .mailrc2 .mailrc
- # else
- # cp .mailrc1 .mailrc
- # endif
- set wantbaud=0
- top:
- switch ($TERM)
- case su:
- case network:
- set wantbaud=1
- case sd:
- case unknown:
- set term=`/ful/chris/bin/selterm`
- goto top
- case 4025:
- stty crt tabs;tabset.tek
- breaksw
- case h6:
- case hp:
- case hp2623:
- case hp2626:
- stty tabs crt
- breaksw
- case v550:
- stty crt;set prompt='[7m[\!][m '
- breaksw
- case GG:
- stty crt;unsetenv TERMCAP;set prompt='[7m[\!][m '
- breaksw
- case d4:
- set term=gt40;stty crt
- breaksw
- case aaa:
- case aaa-60:
- set term=aaa prompt='[7m[\!][m ';stty tabs crt;unsetenv TERMCAP
- aakey -f /ful/chris/.aakeys
- if (`tty` =~ /dev/tty*) then
- echo -n 'Lines? [30] '
- set lines=$<
- if ($lines != ) then
- aasize $lines
- endif
- endif
- breaksw
- case h19:
- case h19a:
- case kb:
- set term=h19a prompt='[7m[\!][m ';stty tabs crt crtkill
- breaksw
- case Dq:
- case DT80:
- case D5:
- case vt100:
- set term=DT80 prompt='[7m[\!][m '
- echo -n '[?4l';stty crt
- breaksw
- default:
- unsetenv TERMCAP;echo "Wonder what $TERM is?"
- breaksw
- endsw
- if ($wantbaud == 1) then
- selbaud
- endif
- unset wantbaud lines
- # mailcount
- checknews
- setenv ROGUEOPTS 'jump,ask,terse,flush,passgo,fruit=hregfx'
- setenv PAGER /usr/ucb/page
- setenv SPELL_LISTS /ful/chris/.splist
- alias logout 'source /ful/chris/.logout.';alias exit logout
- # /usr/games/fortune
- w; # calend; /usr/chris/bin/ac 22:00
- echo ----------------------------------------------------------
- # rehist .history
- //go.sysin dd *
- made=TRUE
- if [ $made = TRUE ]; then
- /bin/chmod 644 .login
- /bin/echo -n ' '; /bin/ls -ld .login
- fi
-
- ::::::::::::::
- cshrc/3
- ::::::::::::::
- Date: Fri, 14 Sep 84 14:59:01 pdt
- From: hplabs!sdcrdcf!sdcsvax!sdcc6!loral!hlb (Howard Brandell)
- To: sdcc6!sdcsvax!sdcrdcf!hplabs!resonex!nancy
- Subject: .cshrc
-
- I am sending my entire .cshrc file because I have some things in it
- that help me out.
-
- Firstly, note the aliases that allow me to selectively read those
- newsgroups of interest. Aha! You may say I can put it all in the
- .newsrc file and have the system inform me when there is news and
- read it out simultaneously. But, sometimes we get news during the
- course of the day and I like to check my favorites continuously.
-
- Also, not the aliases for tip. These allow me to dial my remote
- locations with both spped and accuracy. As an aside, I have
- created a .tiprc file which logs all my remote host conversation
- into a file. In this way, nothing is lost. Note the 'rt' command
- which allows me to purge tiplog.
-
- alias a alias
- a sd "msg,gju,glw,kay,sdi"
- a ds "chmod 600 .signature"
- a es "chmod 640 .signature"
- a vc "ccalc"
- a m "mail"
- a p "more"
- a rk "readnews -n net.kids"
- a ra "readnews -n net.micro.apple"
- a ri "readnews -n net.micro.pc"
- a rs "readnews -n sdnet.computing"
- a rb "readnews -n net.sport.baseball"
- a rn "readnews -n net.columbia"
- a rw "readnews -n net.wanted"
- a rl "readnews -n net.legal"
- a r "readnews"
- a logs "readnews -n net.sources -l>sources.log"
- a motd "cat /etc/motd|more"
- a h "history -r \!*|more"
- a t1 "tip 561-7271"
- a t2 "tip 452-1869"
- a t3 "tip 283-1538"
- a t4 "tip 692-1961"
- a t5 "tip 270-1166"
- a t6 "tip 217-1900"
- a rt "rm tiplog"
- a bye logout
- a cd "cd \!* ; dirs"
- a term 'set noglob; eval `tset -n -s \!*`'
- a wat "ps -au | more"
- a pv printenv
- a j "jobs -l"
- a f "finger|more"
- a l ls -F
-
- if ( $?prompt == 1 ) then
- set prompt="\!: "
- set mail=(60 /usr/spool/mail/$USER)
- endif
- set history = 24
- set cdpath = (. ~)
-
- Also note the aliases for the more mundane commands, like mail
- and more -c.
-
- Hope this has been of some help. Please disregard my earlier
- transmission as I had some operational difficulties. Thx.
-
- ::::::::::::::
- cshrc/4
- ::::::::::::::
- From: sun!dagobah!mike
- Date: Mon, 17 Sep 84 23:27:05 pdt
- To: sun!resonex!nancy
- Subject: .cshrc
-
- set mail=(10 /usr/spool/mail/$user)
- set path=(. ~/bin /usr/lfl/bin /usr/ucb /bin /usr/bin /usr/hosts /usr/suntool)
- set cdpath = ( . .. ~ /usr /u0 /u1 /audio)
- set mail=(10 /usr/spool/mail/$user)
- set msgs=(10 /usr/msgs/bounds)
- set history = 50
-
- source ~/.aliases
- set D = /net/dagobah/u0/mike
- set d = /net/dim/u0/mike
- set k = /net/kessel/u0/mike
- set n = /net/nellybell/u0/mike
- if (! $?HOST) setenv HOST `hostname`
- alias s_prompt 'set prompt = "[$HOST\\\!$cwd]\\
- % "'
- alias cd 'cd \!*; s_prompt'
- s_prompt
-
-
- ::::::::::::::
- cshrc/5
- ::::::::::::::
- From: sun!dagobah!mike
- Date: Mon, 17 Sep 84 23:27:19 pdt
- To: sun!resonex!nancy
- Subject: .aliases
-
- alias alice cu -s 1200 2016654115
- alias rabbit cu -s 1200 2016654150
- alias yale cu -s 1200 2034323510
- alias ajax cu -s 1200 2015828265
-
- alias ts 'setenv TERM `tset - \!* -Q`;set term = $TERM;unsetenv TERMCAP;'
- alias aa "ts aaa-26; aaapf"
- alias aaa aa
-
- alias h history
- alias l 'ls -Fa'
- alias lp l -t
- alias ll 'ls -laF | more'
- alias wo /u0/td/bin/who
- alias m 'make \!* >>& errors &'
- alias mail Mail
- alias ml /bin/mail
- alias lm ml
- alias rml 'rm -f /usr/spool/mail/mike'
- alias RM '/bin/rm -rf'
- alias clean 'rm *.o core errors a.out'
- alias CLEAN 'RM *.o core errors a.out ~/.REMOVED; mkdir ~/.REMOVED'
- alias die 'clear; kill -HUP $$'
- alias tlog tail -f /usr/spool/uucp/LOGFILE
- alias ter tail -f errors
-
- #
- # For job control:
- # Use 'fg' to bring job into the foreground, 'bg' to run job in background.
- # 'v', to restart vi editor
- # 'W', to restart ice editor
- # 'j', to list out jobs
- # 'k', to kill jobs; 'k 2' kills job [2]; 'k' kills the most recent job (+).
- alias v %vi
- alias j jobs
- alias k 'kill %\!*'
- alias sysline ~/bin/sysline -Dhmrj
-
-
- ::::::::::::::
- cshrc/6
- ::::::::::::::
- Date: Fri, 21 Sep 84 01:17:43 cdt
- From: ihnp4!uiucdcs!liberte (Daniel LaLiberte)
- To: sun!resonex!nancy
- Subject: .cshrc trick
-
- I like my recursive prompt that shows the depth of shell calls with added
- ">"s. It also gives a different prompt for my superuser which has the same
- home. Additionally, we have several vaxes, uiucdcs*, networked with
- ethernet. Upgrades are easier with the same .cshrc on all machines.
-
-
- ...
- if (! $?PROMPT) setenv PROMPT "" # initialize
- setenv PROMPT "$PROMPT>" # add ">"
- if ($?prompt) then
- set sys = `hostname`
- if ("$prompt" == "% ") then # regular user
- set prompt = `echo $sys | sed s/uiucdcs//`
- else if ("$prompt" == "# ") then # super user
- set prompt = "$sys#"
- endif
- set prompt = "$prompt\!$PROMPT "
- endif
-
-
- My login prompt (on uiucdcs) is:
-
- 1>
-
- A csh call will produce:
-
- 1>>
-
- Remote login to uiucdcsb, for example:
-
- b1>
-
- Superuser on uiucdcsb:
-
- uiucdcsb#1>>
-
-
- I have an alarm script and a spooled rcp that both use `at`.
-
- Daniel LaLiberte
- ihnp4!uiucdcs!liberte
-
-
- ::::::::::::::
- cshrc/7
- ::::::::::::::
- Date: Sun, 7 Oct 84 20:35:02 pdt
- From: Ken Greer <hplabs!kg>
- To: resonex!nancy
- Subject: Xmas is early this year...
-
- Here's what I thought were the most interesting things in my
- csh profile.
-
- 1. Prompt is (curdir hist#), or [curdir hist#] if running as su.
- The brackets stack, so if I login as kg and su to kgsu, my prompt
- is [(curdir hist#)] indicating my previous shell was non-su.
- In both cases, the current directory always appears in prompt.
-
- 2. On that subject, I heartily recommend a separate su login
- for each su-er on a system. This lets everyone have their
- own profile, and when they quit you don't have to change the su passwd,
- just remove their su.
-
- 3. The directory stuff. (I prefer it to pushd/popd.)
- ds - displays directory stack (set to length DSSIZE below).
- go # - go to directory item number #
- back - go to previous directory.
- cd - stack current directory and go to a new one. Oldest directories
- fall off end of stack (whose size is DSSIZE).
-
- 4. The "e" and "ec" commands let you edit the last or any command.
- If works with a special program. Would you like that?
-
- 5. Delete/Undelete - special program. Lets you recover deleted
- files up to three days (user selectable).
-
- 6. Do you know about my tcsh? Not sure how it fits in with tricks though.
-
- -Ken
-
-
- # Fancy prompt...
- if ($?prompt) then
- if (! $?LEFTPROMPT) setenv LEFTPROMPT ""
- if (! $?RIGHTPROMPT) setenv RIGHTPROMPT ""
- if (`whoami` == root) then
- setenv LEFTPROMPT '['"$LEFTPROMPT"
- setenv RIGHTPROMPT "$RIGHTPROMPT"']'
- set path=(~/bin /usr/local/etc /etc /usr/local/bin /usr/ucb /bin /usr/bin .)
- else
- setenv LEFTPROMPT '('"$LEFTPROMPT"
- setenv RIGHTPROMPT "$RIGHTPROMPT"')'
- set path=(~/bin /usr/local/bin /usr/ucb /bin /usr/bin .)
- endif
- alias setprompt 'set prompt = "${LEFTPROMPT}${cwd} \\!${RIGHTPROMPT} "'
- setprompt
- alias a alias
-
- # directory manipulation...
- set DSSIZE = 10
- if (! $?DS) set DS = (~)
- a back 'set xx=$DS[$#DS] DS[$#DS]=$cwd; chdir $xx; unset xx; setprompt'
- a go 'set xx=$DS[\!*] DS[\!*]=$cwd; chdir $xx; unset xx; setprompt'
- a ds 'echo $DS | tr " " "\012" | cat -n'
- a cd 'if ($#DS >= $DSSIZE) shift DS; set DS = ($DS $cwd);chdir \!*; setprompt'
-
- # virtual remove...
- a rm del
- a rm! /bin/rm
-
- # edit command...
- a e '/usr/local/bin/ec \!-1:q'
- a ec '/usr/local/bin/ec "\!*:q"'
-
- # misc...
- a j jobs
- a ls '/usr/ucb/ls -F'
- a tag '/usr/ucb/vi -ta \!*'
- a ts 'set noglob;eval `tset -s -Q \!*`'
- a wd 'echo $cwd'
- endif
-
-
- ::::::::::::::
- cshrc/8
- ::::::::::::::
- Date: Thu, 13 Sep 84 08:36:47 edt
- From: sun!decvax!genrad!teddy!dls (Diana L. Syriac)
- To: genrad!decvax!decwrl!sun!idi!resonex!nancy
- Subject: Re: Tricks, shell and awk scripts, csh aliases and the like
-
- I'm sorry, I don't really have any "tricks" to make life easier, I'm also
- a rather new Unix user....except for one:
- I use setenv a lot to define a bunch of directories that I use
- a lot. For example, I have in my .cshrc:
- setenv obc ~doc/rts/obc
- So anytime I want to get to that directory (or just look at it), I
- just type: ls $obc/filename
- These environment variables work inside of mail as well as inside of
- emacs.
- I suppose you already have that one from other people.
-
- We also have on our system some "local" programs that make life a lot easier:
- We have an "lf" and "dir" that replaces "ls" and "ls -l", but with an added
- feature: directories are displayed in bold letter, executables are displayed
- in reverse video and special files are displayed in flashing letters. It's
- quite easy to see at a glance what the files are or where you want to go.
-
- We also have a "pushd" and "popd" which replace the "cd" command.
- pushd directory
- will pushd a directory onto the "stack", and change to it. After you're
- finished with that directory, just typing
- popd
- will put you back to where you were. There is a "dirs" command to
- allow you to look at the "stack" to see where you are, where you've been.
- If you use "cd" instead, it's smart enough to change your stack and replace
- the current directory with the one specified in "cd". And if you just say
- "pushd" by itself, it will SWAP the current directory with the last directory
- you were in, making it very easy to toggle between two directories.
-
- Other things that we've done:
- Built a script for the nroff command that is used by most people
- on the system, including macros and some "local" filters to make it look
- nice on terminal, line printer, and diablo. I have also created a little
- program which can be used in conjunction with nroff to produce "change bars"
- at the left margin of documents. We used the change bars quite a lot under
- vms rno.
- We have a set of programs that produce "C" listings, with a table
- of contents showing all files AND routines, page numbered and file numbered,
- each file has a line number at left margin indicating file and line number
- (eg: 3.41 refers to file 3, line 41), and at the very end of listing, there
- is a cross-reference of all tokens, giving file.line references. Part of
- this set of programs was taken directly off the net and modified for our
- own use.
-
- Well, that's all that I can think of for now. BUT what I really mailed
- to you was for something that I want. At the last DECUS, one of the speakers
- demonstrated a little program that he wrote that allowed him to keep a
- running log of what he did every day. The program started up when he logged
- on, and ran in the background. Every 15 minutes, it would beep at him,
- asking him to input a line telling what he was currently doing. If ignored,
- it would beep at him every minute until he input something to it. I don't
- know who the guy was, and I lost his business card, but I'd sure like to
- get that program if you have it. Thanks much.
-
- Diana L. Syriac
- GenRad, Concord, Ma.
- decvax!genrad!teddy!dls
-
-
- ::::::::::::::
- logins/1
- ::::::::::::::
- From: sun!dagobah!mike
- Date: Mon, 17 Sep 84 23:26:53 pdt
- To: sun!resonex!nancy
- Subject: .login
-
- #tset -m dialup:aaa-60 -Q
- tset -m dialup:c100-4p -Q
- setenv TERM $term
- switch ($TERM)
- case dialup:
- set term = aaa-60; setenv TERM $term
- ~/bin/aaapf
- breaksw
- case c100-4:
- case c108-4p:
- sysline
- case c100-4p:
- setkeys
- endsw
- stty new erase "^?"
-
- biff y
- setenv notify true
- setenv CWD $cwd
- setenv SHELL /bin/csh
- setenv MAIL ~/Mail
- setenv MANPATH /u0/pn/man:/u0/mike/Man:/usr/lfl/man:/usr/man
- setenv INCPATH /usr/lfl/include:/usr/include:/u0/mike/Include
- setenv LIBPATH /usr/lfl/lib:/lib:/usr/lib:/u0/mike/Lib
- setenv LOADPATH /usr/src/lfl/bin/emacs.unipress/emacs4.2/maclib
- setenv EDITOR /usr/ucb/vi
- uupoll ucbvax
- msgs
-
-
- ::::::::::::::
- logins/2
- ::::::::::::::
- Date: Fri, 14 Sep 84 10:42:43 edt
- From: Jay Weber <amd!mordor!ut-sally!seismo!rochester!jay>
- To: ut-sally!mordor!dual!amd!resonex!nancy
- Subject: Re: Tricks, shell and awk scripts, csh aliases and the like
-
- I use the hold option in my .mailrc, which keeps messages around
- until you explicitly delete them. That's a popular option since
- it makes it easy to keep around descriptions of things to do, but
- it gets hard to tell when you have new mail and how much. So, I
- have this in my .login:
-
- @ newmail= `from $mail[$#mail] |awk 'END{print NR}'` - `cat .mailsize`
- if ($newmail == 1) then
- echo "(There is one new mail message.)"
- else
- if ($newmail > 1) echo "(There are $newmail new mail messages.)"
- endif
- ------------
- and this in my .logout:
-
- if (-r $mail[$#mail]) then
- from $mail[$#mail] | awk 'END{print NR}' >~/.mailsize
- endif
- ------------
-
- Jay Weber
- ..!seismo!rochester!jay
- jay@rochester.arpa
-
-
- ::::::::::::::
- logins/3
- ::::::::::::::
- Date: Fri, 14 Sep 84 15:16:00 cdt
- To: ctvax!convex!allegra!resonex!nancy
- From: allegra!convex!trsvax!gm (George Moore)
- Subject: neat .login's
-
- Nancy,
- Here is some of the aliases I use, as well as part of my .login
- file: (We are running 4.1BSD on a 11/780)
-
- alias back 'set back=$old; set old=$cwd; cd $back; unset back'
- alias cd 'set old=$cwd; chdir \!*; sp'
- alias sp 'set prompt="$cwd> "'
- Those aliases allow my prompt to always be my current directory.
- You never have to run "pwd" again. Looks kindof strange when you
- are in a low directory like /g/usr/src/local/csh, but you get used
- to it. It also allows you to cd to some low dir, and then type
- "back" and you are back in the directory you started in.
-
- I have this line in my .login:
- sh -c "$HOME/bin/firstlog &"
- This line allows you to spin off a background job without the
- "[1] 22934" message messing up your screen. Firstlog is done
- below. I have a security program which goes out and checks a few
- key files and directories (/etc/passwd, /etc/group, /usr/lib/crontab,
- /etc). If anything has changed, it sends me mail informing me of the
- fact. But I only wish it run once a day, at the time I first login for
- the day. (I don't want it run from crontab, that makes things too
- predictable for the users)
-
- ---------------------------------------------------------------------
- #! /bin/csh
- # Firstlog -- finds out if this is the first time I have logged in
- # today and start-up all sorts of neat stuff if it is.
-
- set date=`/bin/date`
- set now=`/usr/ucb/last $user`
- if ($date[2] != $now[13] || $date[3] != $now[14]) then
- sh -c "$HOME/personal/security/secure &"
- endif
- ---------------------------------------------------------------------
-
- I hope this helps. George Moore
- gm@trsvax.UUCP
-
-
- From: Nancy Blachman <decvax!decwrl!sun!idi!resonex!nancy@Ucb-Vax.ARPA>
- To: net.unix,net.unix-wizards,net.sources
- Subject: Actual Tricks, shells, csh aliases and the like, 2 of 3
- Date: 16 Oct 84 21:22:55 GMT
- Organization: Resonex Inc., Sunnyvale, CA
-
- > [Know anybody with a GREAT .login or .cshrc?]
-
- > I'm interested in collecting the little tricks, shell scripts, awk
- > hacks, csh aliases, and such that people have built to make their daily
- > life a little easier or more automatic. Being a fairly new system
- > administrator I don't have the big toolbox that years of messing around
- > will leave you with. If you have any hacks you're proud of (or that
- > you aren't proud of, but which work anyway), and you're willing to make
- > them public, mail them to me. I'll collect, collate, shuffle, sort,
- > munge, judge, select and discard them and then "summarize to the net".
-
- This article focuses shell scripts I received in response to my solicitation.
- The first article of this series concentrates on aliases, and .cshrc and
- .login files. The third article centers on C programs and awk scripts.
-
- /\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\/
- > Nancy Blachman {allegra,hplabs,ihnp4,sun}!resonex!nancy (408)720 8600 x37 <
- /\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\/
-
- ::::::::::::::
- shells/1
- ::::::::::::::
- Date: Thu, 13 Sep 84 12:49:57 edt
- From: allegra!vax135!cornell!tesla!mac (Michael Mc Namara)
- To: cornell!vax135!houxm!mhuxl!ulysses!allegra!resonex!nancy
- Subject: Cute cshell - sh scripts
-
- If your are like most UNIX systems, you have a plethora of different
- terminals that your system is supposed to support. Sure, with termcap
- and terminfo, and programs written to use them, the interface gets easier.
- If you only ever login to one particular terminal, you can
-
- set term = "vt131"
-
- or
-
- TERM=vt131
- export TERM
-
- in your .login or .profile.
-
- But what if you, or some of your users, drift around using different
- terminal types-- You have a terminal room with many different terminals.
-
- Here is a set of shell scripts & C programs that use the "echo terminal
- type" command that many terminals support, to do automatic terminal type
- identification and setting: (of course I've only made it work for the
- terminals we have here at Cornell, and some day I should write more of it
- in C...)
-
- This one is written for cshell:
-
- ##########################################
- # Identify and set terminal type (csh)#
- ##########################################
- set noglob
- echo Please wait...
- stty cbreak -echo
- # this sequence will cause all terminals we have to echo something
- # except for adm's; those users are told to hit 'a' when they see
- # please wait
- echo ' CZ[c'
- sleep 1
- # this calls a c program to grab the id string from the terminal
- # program is included later...
- set type = `/usr/new/rin.login`
- stty -cbreak echo new crt
- #########################
- # the or in the vt100 terminal type is because vt100's respond
- # to both ^[Z and ^[[c, but DEC threatens to eliminate one of
- # the responces (I forget which).. The extra stty back you see
- # with DG terminals (Data General) is because their backspace is
- # ^Y instead of ^H ( Home on DG terminals) This involves a modification
- # of stty, which you would care about only if you have them--Write to me.
- ##################
- if ( $type == "[?1;0c" || $type == "[?1;0c[?1;0c" ) then
- set term = vt100
- echo "VT101"
- else if ( $type == "[?1;2c" || $type == "[?1;2c[?1;2c" ) then
- set term = vt100
- echo "VT100"
- else if ( $type == "[?1;11c[?1;11c") then
- set term = ct500
- echo "[7mCIT - 500[m"
- else if ( $type == "[?12;5;0;102c" ) then
- set term = vt100
- echo "VT125"
- else if ($type == "[?1;2c[?1;2c") then
- set term = vt100
- echo "VT100, with Selenar Graphics"
- else if ( $type == "o#\!R" ) then
- set term = dg200
- stty stop undef start undef back
- echo "DDG200E"
- else if ( $type == "o#'C3" ) then
- set term = dg450
- stty back
- echo "FS11BFS00 DATA GENERAL DASHER D450"
- else if ( $type == "o#'K3" ) then
- set term = dg450
- stty back
- echo "FS11BFS00 DATA GENERAL DASHER D450"
- else if ( $type == "/K" ) then
- set term = vt52
- echo "Visual 50"
- else if ( $type =~ "\\4*" ) then
- set term = hp2621
- echo HP2621
- else if ( $type =~ "a" ) then
- set term = adm3a
- echo "adm3a"
- else if ($type == "50" ) then
- set term = w50
- echo "WYSE50"
- else
- # Ask user for terminal type -- for some reason the above didn't work
- set no_name_yet=1
- set no_name_yet = 1;
- while( $no_name_yet )
- echo -n "Please enter terminal type (hit return for menu) "
- set ttyname = ($< );
- switch( $ttyname )
- case d450:
- case dg450:
- set term=dg450;
- stty back
- set no_name_yet = 0;
- breaksw;
- case vt100:
- set term=vt100;
- set no_name_yet = 0;
- breaksw;
- case v50:
- case vt52:
- set term=vt52;
- set no_name_yet = 0;
- breaksw;
- case hp2621:
- case hp:
- set term=hp2621;
- set no_name_yet = 0;
- breaksw;
- case wyse50:
- set term=w100;
- set no_name_yet = 0;
- breaksw;
- case adm5:
- set term=adm5;
- set no_name_yet = 0;
- breaksw;
- case adm3+:
- case adm3:
- case adm3a:
- set term=adm3+;
- set no_name_yet = 0;
- case d200:
- case dg200:
- set term=dg200;
- stty stop undef start undef back ;
- set no_name_yet = 0;
- breaksw;
- case other:
- echo -n "Enter terminal name: "
- set term=($< );
- set no_name_yet = 0;
- breaksw;
- case '':
- echo Terminal abbreviations are:
- echo "Dasher 450 : dg450"
- echo "Dasher 200 : dg200"
- echo "Visual 50 : v50"
- echo "VT100 : vt100"
- echo "HP 2621 : hp2621"
- echo "ADM5 : adm5"
- echo "ADM3+ : adm3+"
- echo "Use 'other' to specify terminals not on this menu"
- breaksw;
- default:
- echo "I didn't understand that. Hit return for a menu."
- endsw
- end
- unset no_name_yet
- unset ttyname
- endif
- stty -cbreak
- stty echo
- unset noglob
-
- Ok, This one is used for Bourne shell lovers: (I used /bin/test because
- one user had an executable file called test somewhere in his path ahead
- of where this program lived...That one took days to track down...)
-
-
- echo "Please Wait..."
- stty start stop crt new back -echo cbreak
- echo ' CZ[c'
- sleep 1
- TYPE=`/usr/new/rin.login`
- stty echo -cbreak
- if ( /bin/test \( $TYPE = "[?1;0c" \) -o \( $TYPE = "[?1;0c[?1;0c" \) ) then
- TERM=vt100
- echo "[7mVT101[m"
- elif ( /bin/test \( $TYPE = "[?1;2c" \) -o \( $TYPE = "[?1;2c[?1;2c" \) ) then
- TERM=vt100
- echo "#3[7mVT100[m"
- echo "#4?[7mVT100[m"
- elif ( /bin/test $TYPE = "[?1;11c[?1;11c") then
- TERM=ct500
- echo "CT 500"
- elif ( /bin/test $TYPE = "o#!R" ) then
- TERM=dg200
- stty stop undef
- stty start undef
- stty crt
- stty back
- echo "D DATA GENERAL DASHER D200E"
- elif ( /bin/test $TYPE = "o#'C3" ) then
- TERM=dg450
- stty crt
- stty back
- echo "FS11BFS00 DATA GENERAL DASHER D450"
- elif ( /bin/test $TYPE = "/K" ) then
- TERM=vt52
- echo "UVisual 50T"
- elif ( /bin/test $TYPE = "50" ) then
- TERM=w50
- clear
- echo "WYSE 50"
- elif ( /bin/test $TYPE = "\4088000" ) then
- TERM=hp2621
- echo HP2621
- elif ( /bin/test $TYPE = "a" ) then
- TERM=adm3a
- echo ADM3a
- else
- stty start
- stty stop
- stty new crt
- set no_name_yet=1
- echo
- while ($no_name_yet) do {
- echo
- echo Which terminal do you have?
- echo Hit return for a menu.
- read INP
- case $INP
- in
- 100 | v | vt100) {
- TERM=vt100
- break
- } ;;
- adm5) {
- TERM=adm5
- break
- } ;;
- adm3+) {
- TERM=adm3+
- break
- } ;;
- 450 | dg450 | d450) {
- TERM=dg450
- stty back
- break
- } ;;
- 200 | dg200 | d200) {
- TERM=dg200
- stty stop undef
- stty start undef
- stty back
- break
- } ;;
- 50 | vt52 | v50) {
- TERM=vt52
- break
- } ;;
- 2621 | hp2621 | hp) {
- TERM=hp2621
- break
- } ;;
- other) {
- echo -n Enter terminal name:
- read tname
- TERM=$tname
- break
- } ;;
- ''|?|help) { echo Terminal abbreviations are:
- echo
- echo Dasher 450: dg450
- echo Dasher 200: dg200
- echo Visual 50: vt52
- echo VT100 : vt100
- echo HP 2621 : hp2621
- echo ADM3+ : adm3+
- echo ADM5 : adm5
- echo "Use 'other' to specify other terminals."
- echo
- } ;;
- * ) { echo "I did not understand that."
- } ;;
- esac
- }
- done
- fi
- export TERM
-
- *********
- And here is the c program that read's in the terminal ID string:
-
-
- /* rin -- read in a char string which may not be terminated */
- char buf[256];
- int n;
- main ()
- {
- n = read(0,buf,256);
- write(1,buf,n);
- printf("\n");
- }
-
- ***************
-
-
- Use them, abuse them. Of course you have to paw through
- your terminal manuanls to discover what (if any) string they respond to,
- and test for the response accordingly...
-
- ---MAC
-
-
-
- ::::::::::::::
- shells/2
- ::::::::::::::
- From: hplabs!azure!billp
- To: tektronix!hplabs!resonex!nancy
- Date: Thursday, 13 Sep 84 09:23:49 PDT
- Subject: Re: Tricks, shell and awk scripts, csh aliases and the like
-
- Here are some that I like and use a lot. 'del' and 'undelete' are just two
- links to the same file. This way if somebody copies one, they get the
- other too
- -------------------------------------------------------------------------------
- ::::::::::::::
- : mv
- ::::::::::::::
- : 'prompts if the destination file already exists'
- /bin/mv -i $*
- -------------------------------------------------------------------------------
- ::::::::::::::
- : cp
- ::::::::::::::
- : 'prompts if the destination file already exists'
- /bin/cp -i $*
- -------------------------------------------------------------------------------
- ::::::::::::::
- : del, undelete
- ::::::::::::::
- : '"del" throws files into the waste basket'
- : 'files preceded by "," are automagically removed after 7 days'
- : '"undelete" pulls files out of the waste basket'
- : 'if invoked without an argument, both commands list the contents of the'
- : 'waste basket.'
-
- case $0 in
- *del)
- if test -z "$1"
- then
- ls -lus $HOME/.waste_basket
- else
- for i
- do
- echo -n "deleting "
- tmp=`basename $i`
- /bin/mv -i $i $HOME/.waste_basket/,$tmp
- echo $i
- done
- fi;;
-
- *undelete)
- if test -z "$1"
- then
- ls -lus $HOME/.waste_basket
- else
- for i
- do
- echo -n "recovering "
- tmp=`basename $i`
- /bin/mv -i $HOME/.waste_basket/,$tmp $i
- echo $i
- done
- fi;;
- esac
- -------------------------------------------------------------------------------
- ::::::::::::::
- : vi
- ::::::::::::::
- : 'backs up file(s) before editing them'
- : 'files preceded by "," are automagically removed after 7 days'
- for i
- do
- if test -f $i
- then
- echo -n "backing up "
- tmp=`basename $i`
- /bin/cp -i $i $HOME/.vi_backup/,$tmp
- echo $i
- fi
- done
- /usr/ucb/vi $*
- -------------------------------------------------------------------------------
-
- Bill Pfeifer
- {ucbvax,decvax,ihnp4,allegra,uw-beaver,hplabs} !tektronix!tekmdp!billp
-
- ::::::::::::::
- shells/3
- ::::::::::::::
- Date: Thu, 13 Sep 84 13:58:09 pdt
- From: turtlevax!ken (Ken Turkowski)
- To: resonex!nancy
- Subject: Re: Tricks, shell and awk scripts, csh aliases and the like
-
- You asked for it, you've got it! Here's ALL of my personal nifties:
- Ken
- **************************************************
-
- echo x - bin
- mkdir bin
- echo x - bin/CC
- cat >bin/CC <<'!Funky!Stuff!'
- #
- set outname=a.out
- foreach file ($argv)
- if ("$file" =~ *.[cso]) then
- set outname=$file:r
- break
- endif
- end
- echo cc -o $outname $*
- exec cc -o $outname $*
- !Funky!Stuff!
- echo x - bin/appt
- cat >bin/appt <<'!Funky!Stuff!'
- #
- set notetype=$0
- set notetype=$notetype:t
- set notefile=~/.$notetype
- # if ($notetype == appt) then
- # set notetype=appointment
- # set notefile=~/calendar
- # endif
-
- if ($#argv == 0) then
- test -t 0 && echo Please enter your $notetype entry '(^D to end):'
- echo ' ' >> $notefile
- exec cat >> $notefile
- endif
-
- switch ($1)
- case -:
- exec vi $notefile
- case -rm:
- cat /dev/null > $notefile
- exec echo The ${notetype}s are removed.
- case -what:
- exec cat $notefile
- default:
- echo '' >> $notefile
- echo "$*" >> $notefile
- endsw
- !Funky!Stuff!
- echo x - bin/asfix
- cat >bin/asfix <<'!Funky!Stuff!'
- case $# in
- 0)
- file=/tmp/afix$$
- trap "cat $file; rm $file; exit" 0
- trap "rm $file; exit" 3 9
- cat > $file ;;
- 1)
- file=$1 ;;
- *)
- echo Usage `basename $0` ' [ <file> ]' ;;
- esac
- ed - $file << EOF
- v/[:\.]/s/^/ /
- g/:./s/:/: /
- wq
- EOF
- !Funky!Stuff!
- echo x - bin/atcat
- cat >bin/atcat <<'!Funky!Stuff!'
- #
- if ($#argv < 2) then
- set cmd=$0
- echo Usage: "$cmd:t <time> <word> [ <word> ... ]"
- exit
- endif
- set atcmd="echo $argv[2-] > `tty`"
- at $1 << EOF
- $atcmd
- EOF
- !Funky!Stuff!
- echo x - bin/atecho
- cat >bin/atecho <<'!Funky!Stuff!'
- #
- if ($#argv < 2) then
- set cmd=$0
- echo Usage: "$cmd:t <time> <word> [ <word> ... ]"
- exit
- endif
- set atcmd="echo $argv[2-] > `tty`"
- at $1 << EOF
- $atcmd
- EOF
- !Funky!Stuff!
- echo x - bin/beautify
- cat >bin/beautify <<'!Funky!Stuff!'
- #
- set TMP=/tmp/cb$$
- foreach file (argv)
- echo Beautifying $file:
- cb < $file > $TMP
- cat $TMP > $file
- end
- rm $TMP
- !Funky!Stuff!
- echo x - bin/blankclean
- cat >bin/blankclean <<'!Funky!Stuff!'
- sed -e 's/^ $//' -e 's/ *$//' $*
- !Funky!Stuff!
- echo x - bin/bphone
- cat >bin/bphone <<'!Funky!Stuff!'
- phonefile=$HOME/.`basename $0`s
-
- echo ' '
-
- case $# in
- 0)
- ed - $phonefile << EOF
- g/./s/$/\\
- /
- g/ /s//\\
- /g
- g/;/s// /g
- 1,\$p
- q
- EOF
- exit ;;
- esac
-
- case $1 in
- -)
- chmod 644 $phonefile
- vi $phonefile
- chmod 444 $phonefile
- exit ;;
- esac
-
- trap "rm /tmp/data$$; exit" 0 2
- for name
- do
- grep -y "$name" $phonefile >> /tmp/data$$
- done
- ed - /tmp/data$$ << EOF
- g/./s/$/\\
- /
- g/ /s//\\
- /g
- g/;/s// /g
- 1,\$p
- q
- EOF
- !Funky!Stuff!
- echo x - bin/catalog
- cat >bin/catalog <<'!Funky!Stuff!'
- # catalog - produce complete file structure list from directory
- #
- # Parameters: 1: directory name (optional)
- # 2: indentation string (empty on first call)
- #
- # Produces on standard output the file structure emanating from
- # the current directory. Each descent into a subdirectory
- # is indicated by further indentation. Directories are indicated
- # by surrounding [], and executable files are prefaced with a *.
- #
- if ( $#argv == 0) then
- echo "file structure from directory `pwd`"
- date
- echo ''
- else
- cd $1
- endif
- foreach i ( * )
- if ( -d $i ) then
- echo "${2}[ $i ]"
- $0 $i "$2 . "
- endif
- if ( "$i" != '*' ) then
- if ( -x $i ) then
- echo "${2} *$i "
- else
- echo "${2} $i "
- endif
- endif
- endif
- end
- !Funky!Stuff!
- echo x - bin/circum
- cat >bin/circum <<'!Funky!Stuff!'
- there=$1
- shift
- otherstuff="$*"
- back=`whoami`
- last=`hostname`
- IFS=' !
- '
- for link in $there
- do
- back="$last!$back"
- last=$link
- done
- IFS='
- '
- echo mail $there!$back
- (date; echo "$otherstuff") | mail -s "Circumlocution to $last" $there!$back
- !Funky!Stuff!
- echo x - bin/comfmt
- cat >bin/comfmt <<'!Funky!Stuff!'
- exec fmt | \
- sed -e '1s/^\([ ]*\)/\1\/\* /' -e '2,$s/^\([ ]*\)/\1 \* /' -e '${P
- s/\*.*/*\//
- }'
- !Funky!Stuff!
- echo x - bin/comstrip
- cat >bin/comstrip <<'!Funky!Stuff!'
- exec sed -e 's/\/\*//' -e 's/\*\///' -e 's/^[ ]*\** *//'
- !Funky!Stuff!
- echo x - bin/decvert
- cat >bin/decvert <<'!Funky!Stuff!'
- #
- if ($#argv == 0) then
- set args=`cat`
- if ($#args != 0) $0 $args
- exit
- endif
-
- foreach hexnum ($argv)
- dc << EOF
- 16i
- ${hexnum}p
- EOF
- end
- !Funky!Stuff!
- echo x - bin/f77
- cat >bin/f77 <<'!Funky!Stuff!'
- PATH=/usr/bin
- SPECLIB=/usr/ken/cmd/lib/libc.a
- exec f77 "$@" $SPECLIB
- !Funky!Stuff!
- echo x - bin/famove
- cat >bin/famove <<'!Funky!Stuff!'
- #
- if ($#argv != 2) then
- echo Usage: $0 '<source family root> <destination family root>'
- exit
- endif
- foreach file ($1.*)
- set suffix=`expr $file : "$1\.\(.*\)"`
- echo mv $file $2.$suffix
- mv $file $2.$suffix
- end
- if (-e $1) then
- echo mv $1 $2
- mv $1 $2
- endif
- !Funky!Stuff!
- echo x - bin/gredit
- cat >bin/gredit <<'!Funky!Stuff!'
- #
- set CAESAR=/mnt/cad/bin/caesar
- set SEARCHPATH=(-p ::/usr/ken/caesar/symlib)
- set COLORMAP=(-c mumap.cmap)
- set GRTERM=ttyh7
- set caesarfile=()
- foreach parm ($argv)
- if ($?flag) then
- switch ($flag)
- case g:
- set GRTERM=$parm
- breaksw
- case p:
- set SEARCHPATH=(-p "$parm")
- breaksw
- case R:
- set SEARCHPATH=($SEARCHPATH:$parm)
- breaksw
- case c:
- set COLORMAP=(-c $parm)
- breaksw
- endsw
- unset flag
- continue
- endif
- if ($parm =~ -*) then
- switch ($parm)
- case -g:
- set flag=g
- continue
- case -p:
- set flag=p
- continue
- case -P:
- set SEARCHPATH=()
- continue
- case -R:
- set flag=R
- continue
- case -C:
- set COLORMAP=()
- continue
- case -c:
- set flag=c
- continue
- endsw
- else
- set caesarfile=($caesarfile $parm)
- endif
- end
- onintr -
- $CAESAR -g $GRTERM $SEARCHPATH $COLORMAP $caesarfile
- !Funky!Stuff!
- echo x - bin/grindall
- cat >bin/grindall <<'!Funky!Stuff!'
- #
- set flags=
- set fileargs=
- onintr cleanup
- foreach file ($argv)
- if ($file =~ -*) then
- if ($file == -t) then
- set stdout
- else
- set flags=($flags $file)
- endif
- else
- set fileargs=($fileargs $file)
- endif
- end
-
- if ($?stdout) then
- foreach file ($fileargs)
- vgrind -t $flags $file
- end
- else
- foreach file ($fileargs)
- vgrind -t $flags $file >> /usr/tmp/grind$$
- end
- vpr -T $fileargs[1] -t /usr/tmp/grind$$
- endif
-
- cleanup:
- rm /usr/tmp/grind$$
- !Funky!Stuff!
- echo x - bin/hardasm
- cat >bin/hardasm <<'!Funky!Stuff!'
- #
- grasm -1 -l -x $* |& pr -f -h "grasm -l -x $*" | vpr -l
- !Funky!Stuff!
- echo x - bin/hexvert
- cat >bin/hexvert <<'!Funky!Stuff!'
- #
- if ($#argv == 0) then
- set args=`cat`
- if ($#args != 0) $0 $args
- exit
- endif
-
- foreach decnum ($argv)
- dc << EOF
- 16o
- ${decnum}p
- EOF
- end
- !Funky!Stuff!
- echo x - bin/job
- cat >bin/job <<'!Funky!Stuff!'
- PATH=/usr/ken/cmd/bin:/usr/ucb:/bin:/usr/bin
- case $# in
- 0)
- exec echo Usage: `basename $0` '-;' or $0 '<job description>' ;;
- esac
- case $1 in
- -)
- exec ex $HOME/.joblog ;;
- -h | -hr | -hrs)
- shift
- hrs=$1
- shift
- exec echo ' job:' $hrs hours # $* >> $HOME/.joblog ;;
- -tail)
- exec tail -22 $HOME/.joblog ;;
- -today)
- {
- while read line
- do
- case $line in
- *login*)
- login="$line" ;;
- esac
- done
- echo -n "$login" "for "
- diffdate "$login" "`date`"
- } < $HOME/.joblog ;;
- -login)
- echo ' login:' "`date`" >> $HOME/.joblog ;;
- -summary)
- cat $HOME/.joblog |
- while read line
- do
- case $line in
- *login*)
- login="$line" ;;
- *logout*)
- logout="$line"
- echo -n "$login" "for "
- diffdate "$login" "$logout"
- esac
- done ;;
- *)
- exec echo ' job:' "`date`" # $* >> $HOME/.joblog ;;
- esac
- !Funky!Stuff!
- echo x - bin/ledger
- cat >bin/ledger <<'!Funky!Stuff!'
- #
- set notetype=$0
- set notetype=$notetype:t
- set notefile=~/.$notetype
- # if ($notetype == appt) then
- # set notetype=appointment
- # set notefile=~/calendar
- # endif
-
- if ($#argv == 0) then
- test -t 0 && echo Please enter your $notetype entry '(^D to end):'
- echo ' ' >> $notefile
- exec cat >> $notefile
- endif
-
- switch ($1)
- case -:
- exec vi $notefile
- case -rm:
- cat /dev/null > $notefile
- exec echo The ${notetype}s are removed.
- case -what:
- exec cat $notefile
- default:
- echo '' >> $notefile
- echo "$*" >> $notefile
- endsw
- !Funky!Stuff!
- echo x - bin/lstree
- cat >bin/lstree <<'!Funky!Stuff!'
- #
- if ($#argv == 0) then
- set root=.
- else
- set root=($*)
- endif
- exec find $root -print | sort | sed -e 's/[^ \/]*\// /g'
- !Funky!Stuff!
- echo x - bin/match
- cat >bin/match <<'!Funky!Stuff!'
- cat $2 |
- while read x
- do
- for word in $x
- do
- case $word in
- $1)
- echo $word ;;
- esac
- done
- done
- !Funky!Stuff!
- echo x - bin/narrow
- cat >bin/narrow <<'!Funky!Stuff!'
- echo \!
- !Funky!Stuff!
- echo x - bin/outmesg
- cat >bin/outmesg <<'!Funky!Stuff!'
- #
- set notetype=$0
- set notetype=$notetype:t
- set notefile=~/.$notetype
- # if ($notetype == appt) then
- # set notetype=appointment
- # set notefile=~/calendar
- # endif
-
- if ($#argv == 0) then
- test -t 0 && echo Please enter your $notetype entry '(^D to end):'
- echo ' ' >> $notefile
- exec cat >> $notefile
- endif
-
- switch ($1)
- case -:
- exec vi $notefile
- case -rm:
- cat /dev/null > $notefile
- exec echo The ${notetype}s are removed.
- case -what:
- exec cat $notefile
- default:
- echo '' >> $notefile
- echo "$*" >> $notefile
- endsw
- !Funky!Stuff!
- echo x - bin/path
- cat >bin/path <<'!Funky!Stuff!'
- IFS="${IFS}:"
- for cmddir in $PATH
- do
- test -s $cmddir/$1 && echo " $cmddir/$1"
- done
- !Funky!Stuff!
- echo x - bin/pphone
- cat >bin/pphone <<'!Funky!Stuff!'
- phonefile=$HOME/.`basename $0`s
-
- echo ' '
-
- case $# in
- 0)
- ed - $phonefile << EOF
- g/./s/$/\\
- /
- g/ /s//\\
- /g
- g/;/s// /g
- 1,\$p
- q
- EOF
- exit ;;
- esac
-
- case $1 in
- -)
- chmod 644 $phonefile
- vi $phonefile
- chmod 444 $phonefile
- exit ;;
- esac
-
- trap "rm /tmp/data$$; exit" 0 2
- for name
- do
- grep -y "$name" $phonefile >> /tmp/data$$
- done
- ed - /tmp/data$$ << EOF
- g/./s/$/\\
- /
- g/ /s//\\
- /g
- g/;/s// /g
- 1,\$p
- q
- EOF
- !Funky!Stuff!
- echo x - bin/progression
- cat >bin/progression <<'!Funky!Stuff!'
- last=
- for backup in $1_??
- do
- case $last in
- "")
- last=$backup
- continue;
- esac
- echo ''
- echo From $last to $backup:
- diff $last $backup
- last=$backup
- done
- echo ''
- echo From $last to $1:
- diff $last $1
- !Funky!Stuff!
- echo x - bin/query
- cat >bin/query <<'!Funky!Stuff!'
- #
- set notetype=$0
- set notetype=$notetype:t
- set notefile=~/.$notetype
- # if ($notetype == appt) then
- # set notetype=appointment
- # set notefile=~/calendar
- # endif
-
- if ($#argv == 0) then
- test -t 0 && echo Please enter your $notetype entry '(^D to end):'
- echo ' ' >> $notefile
- exec cat >> $notefile
- endif
-
- switch ($1)
- case -:
- exec vi $notefile
- case -rm:
- cat /dev/null > $notefile
- exec echo The ${notetype}s are removed.
- case -what:
- exec cat $notefile
- default:
- echo '' >> $notefile
- echo "$*" >> $notefile
- endsw
- !Funky!Stuff!
- echo x - bin/releave
- cat >bin/releave <<'!Funky!Stuff!'
- #
- set tty=`tty`
- set tty=`expr $tty : '.*tty\(.*\)'`
- set leaveproc=`ps gt$tty | grep -w leave`
- kill -9 $leaveproc[1]
- date
- leave $*
- !Funky!Stuff!
- echo x - bin/reminder
- cat >bin/reminder <<'!Funky!Stuff!'
- #
- set notetype=$0
- set notetype=$notetype:t
- set notefile=~/.$notetype
- # if ($notetype == appt) then
- # set notetype=appointment
- # set notefile=~/calendar
- # endif
-
- if ($#argv == 0) then
- test -t 0 && echo Please enter your $notetype entry '(^D to end):'
- echo ' ' >> $notefile
- exec cat >> $notefile
- endif
-
- switch ($1)
- case -:
- exec vi $notefile
- case -rm:
- cat /dev/null > $notefile
- exec echo The ${notetype}s are removed.
- case -what:
- exec cat $notefile
- default:
- echo '' >> $notefile
- echo "$*" >> $notefile
- endsw
- !Funky!Stuff!
- echo x - bin/reremind
- cat >bin/reremind <<'!Funky!Stuff!'
- #
- set tty=`tty`
- set tty=`expr $tty : '.*tty\(.*\)'`
- set leaveproc=`ps gt$tty | awk '$5 ~ /^remind$/ { print $1 }'`
- if ($#leaveproc > 1) echo $#leaveproc reminds were running
- kill -9 $leaveproc
- date
- if ($#argv <= 1) then
- remind $*
- else
- set time=$1
- shift
- remind $time "$*"
- endif
- !Funky!Stuff!
- echo x - bin/restore
- cat >bin/restore <<'!Funky!Stuff!'
- # Truncate filename if necessary
- set file=$1
- if (`expr $file:t : '.*'` >= 11) then
- set savename=`expr $file : '\(.*\)'$file:t`
- set savename=$savename`expr $file:t : '\(...........\)'`
- else
- set savename=$file
- endif
-
- switch ($#argv)
- case 1:
- set nonomatch
- set backup=(${savename}_[0-9][0-9])
- if ("$backup" == "${savename}_[0-9][0-9]") then
- echo Error: No backups found for $file
- exit
- endif
- set backup=$backup[$#backup]
- echo No backup number specified. Using latest: $backup
- breaksw
- case 2:
- set backup=${savename}_$2
- breaksw
- default:
- exec echo Usage: `basename $0` '<file>' '[<backup number>]'
- endsw
-
- if ( { cp $backup $file } ) then
- echo $file restored from $backup.
- echo -n Do you wish to keep "$backup? "
- set response=$<
- if ($response !~ y*) then
- rm $backup
- endif
- endif
- !Funky!Stuff!
- echo x - bin/rot13
- cat >bin/rot13 <<'!Funky!Stuff!'
- tr "A-Za-z" "N-ZA-Mn-za-m"
- !Funky!Stuff!
- echo x - bin/shufcol
- cat >bin/shufcol <<'!Funky!Stuff!'
- trap 'rm /tmp/$$.*; exit' 0 2
- cat > /tmp/$$.0
- i=1
- for cols
- do
- cut -f$cols < /tmp/$$.0 > /tmp/$$.$i
- filelist="$filelist /tmp/$$.$i"
- i=`expr $i + 1`
- done
- paste $filelist
- !Funky!Stuff!
- echo x - bin/signature
- cat >bin/signature <<'!Funky!Stuff!'
- PATH=/bin:/usr/bin
- cat
- echo --
- cat $HOME/.signature
- !Funky!Stuff!
- echo x - bin/swab
- cat >bin/swab <<'!Funky!Stuff!'
- #
- if ($#argv == 0) then
- dd conv=swab
- else
- onintr cleanup
- foreach file ($argv)
- cp $file /tmp/swab$$
- dd if=/tmp/swab$$ of=$file conv=swab
- end
- cleanup:
- rm /tmp/swab$$
- endif
- !Funky!Stuff!
- echo x - bin/what
- cat >bin/what <<'!Funky!Stuff!'
- cat $HOME/.query
- echo -n 'save? (n or d to delete, e to edit) '
- read response
- case $response in
- n | no | d | delete)
- rm $HOME/.query && echo The query is removed. ;;
- "" | y | yes | s | save)
- exit ;;
- e | edit)
- exec vi $HOME/.query < /dev/tty
- exit ;;
- *)
- echo Bad response: "$response"
- exec $0 ;;
- esac
- !Funky!Stuff!
- echo x - bin/whereis
- cat >bin/whereis <<'!Funky!Stuff!'
- N=$#
- command=echo
- case "$1" in
- -*)
- command=`expr "$1" : '-\(.*\)'`
- shift
- N=`expr $N - 1` ;;
- esac
- case $N in
- 0)
- exec echo Usage: `basename $0` [ -command ] pattern file ... ;;
- 1)
- files=`fgrep -l "$1" *` ;;
- *)
- files=`fgrep -l "$@"` ;;
- esac
- case $files in
- "")
- echo $1 not found in any files.
- exit ;;
- esac
- exec $command $files
- !Funky!Stuff!
- echo x - bin/wide
- cat >bin/wide <<'!Funky!Stuff!'
- echo \"
- !Funky!Stuff!
- echo x - bin/xprint
- cat >bin/xprint <<'!Funky!Stuff!'
- case $# in
- 1)
- eval $1 | eval pr -f -h \"$1\" | vpr -l ;;
- *)
- command='cat $file'
- for file
- do
- case $file in
- -*)
- command=`expr "$file" : '-\(.*\)'`
- case $command in
- *\$file*)
- ;;
- *)
- command="$command \$file" ;;
- esac ;;
- *)
- eval $command | eval pr -f -h \"$command\" | vpr -l ;;
- esac
- done
- esac
- !Funky!Stuff!
- echo x - bin/archives
- mkdir bin/archives
- echo x - bin/archives/newsweed
- cat >bin/archives/newsweed <<'!Funky!Stuff!'
- #
- cd
- if ($#argv == 0) then
- if (-e .newsweed) then
- set WEEDGROUPS=`cat .newsweed`
- else
- set WEEDGROUPS=
- endif
- else
- set WEEDGROUPS=$*
- endif
- if ($#WEEDGROUPS == 0) then
- onintr
- echo Searching for articles in all newsgroups
- readnews -l | \
- grep Subject | \
- sed -e 's/Subject: *//' -e 's/^[rR][eE]:* *//' | \
- sort -u > /tmp/weed$$a
- if (-z /tmp/weed$$a) then
- echo No news.
- else
- cp /tmp/weed$$a /tmp/weed$$b
- echo Please remove article titles which you do not wish to read
- sleep 1
- onintr -
- vi /tmp/weed$$b
- onintr cleanup
- comm -23 /tmp/weed$$a /tmp/weed$$b > /tmp/weed$$c
- echo Removing unwanted articles
- newsec -f /tmp/weed$$c
- endif
- else
- foreach group ($WEEDGROUPS)
- echo Searching for articles in group\(s\):
- echo $group
- readnews -l -n $group | \
- grep Subject | \
- sed -e 's/Subject: *//' -e 's/^[rR]e:* *//' | \
- sort -u > /tmp/weed$$a
- if (-z /tmp/weed$$a) then
- echo in newsgroups $group.
- else
- cp /tmp/weed$$a /tmp/weed$$b
- echo Please remove article titles which you do not wish to read
- sleep 1
- onintr -
- vi /tmp/weed$$b
- onintr cleanup
- comm -23 /tmp/weed$$a /tmp/weed$$b > /tmp/weed$$c
- echo Removing unwanted articles
- newsec -f /tmp/weed$$c
- endif
- end
- endif
-
- cleanup:
- rm /tmp/weed$$?
- !Funky!Stuff!
- echo x - bin/archives/pk_01
- cat >bin/archives/pk_01 <<'!Funky!Stuff!'
- : Roff, nroff, or eqn input text
- for file in `file $* | sed -n '/eqn input text$/s/:[^:]*$//p'`
- do
- echo "echo x - $file"
- echo "sed 's/^x//' >$file <<'!Funky!Stuff!'"
- sed 's/^/x/' $file; echo "!Funky!Stuff!"
- done
- : Text files
- for file in `file $* | sed -n -e '/commands text$/s/:[^:]*$//p' -e '/ascii text$/s/:[^:]*$//p'`
- do
- echo "echo x - $file"
- echo "cat >$file <<'!Funky!Stuff!'"
- cat $file; echo "!Funky!Stuff!"
- done
- : Directories, recursively
- for dir in `file $* | sed -n '/directory$/s/:.*//p'`
- do
- echo "echo x - $dir"
- echo "mkdir $dir"
- file=`echo $dir/*`
- test "$file" != "$dir/*" && $0 $file
- done
- !Funky!Stuff!
- echo x - bin/archives/pkf
- cat >bin/archives/pkf <<'!Funky!Stuff!'
-
- for dir
- do
- echo "echo x - $dir"
- echo "mkdir $dir";
- for file in `file $dir/* | sed -n '/text$/s/:[^:]*$//p'`
- do
- echo "echo x - $file"
- echo "cat >$file <<'!Funky!Stuff!'"
- cat $file; echo "!Funky!Stuff!"
- done
- $0 `file $dir/* | sed -n '/directory$/s/:.*//p'`
- done
- !Funky!Stuff!
- echo x - bin/archives/pkg
- cat >bin/archives/pkg <<'!Funky!Stuff!'
- for file
- do
- echo "echo x - $file"
- echo "cat >$file <<'!Funky!Stuff!'"
- cat $file; echo "!Funky!Stuff!"
- done
- !Funky!Stuff!
- echo x - bin/archives/pkn
- cat >bin/archives/pkn <<'!Funky!Stuff!'
-
- for dir
- do
- echo "echo x - $dir"
- echo "mkdir $dir";
- for file in `file $dir/* | sed -n '/text$/s/:[^:]*$//p'`
- do
- echo "echo x - $file"
- echo "sed 's/^x//' >$file <<'!Funky!Stuff!'"
- sed 's/^/x/' $file; echo "!Funky!Stuff!"
- done
- $0 `file $dir/* | sed -n '/directory$/s/:.*//p'`
- done
- !Funky!Stuff!
- echo x - bin/archives/prod
- cat >bin/archives/prod <<'!Funky!Stuff!'
- #
- set flags=()
- set syslist=()
- foreach arg ($argv)
- switch ($arg)
- case -s*:
- if (`expr $arg : '.*'` > 9) then
- rm -f /usr/spool/uucp/STST.`expr $arg : '-s\(.......\)'`
- else
- rm -f /usr/spool/uucp/STST.`expr $arg : '-s\(.*\)'`
- endif
- set syslist=($syslist $arg)
- breaksw
- case -*:
- set flags=($flags $arg)
- breaksw
- default:
- if (`expr $arg : '.*'` > 7) then
- rm -f /usr/spool/uucp/STST.`expr $arg : '\(.......\)'`
- else
- rm -f /usr/spool/uucp/STST.$arg
- endif
- set syslist=($syslist -s$arg)
- breaksw
- endsw
- end
- foreach sys ($syslist)
- /usr/lib/uucp/uucico -r1 $flags $sys
- end
- !Funky!Stuff!
- echo x - bin/bourne_scripts
- mkdir bin/bourne_scripts
- echo x - bin/bourne_scripts/lookdoc
- sed 's/^x//' >bin/bourne_scripts/lookdoc <<'!Funky!Stuff!'
- xtrap exit 2
- xcase $# in
- x 0)
- x ul | more
- x exit ;;
- xesac
- xfor names
- xdo
- x case $names in
- x -n)
- x default=n ;;
- x -t)
- x default=t ;;
- x -m*)
- x macros="$macros $names" ;;
- x *.n | *.nr)
- x nroff $macros $names | ul | more ;;
- x *.t | *.tbl)
- x soelim $names | tbl | nroff $macros - | ul | more ;;
- x *)
- x case $default in
- x n)
- x nroff $macros $names | ul | more ;;
- x t)
- x soelim $names | tbl | nroff $macros - | ul | more ;;
- x "")
- x ul $names | more ;;
- x esac
- x esac
- xdone
- !Funky!Stuff!
- echo x - bin/bourne_scripts/CC
- cat >bin/bourne_scripts/CC <<'!Funky!Stuff!'
- outname=a.out
- for argv
- do
- case $argv in
- *.[cos])
- outname=`expr $argv : '\(.*\)\.'`
- break ;;
- esac
- done
- cc -o $outname $*
- !Funky!Stuff!
- echo x - bin/bourne_scripts/appt
- cat >bin/bourne_scripts/appt <<'!Funky!Stuff!'
- case $0 in
- appt)
- notetype=appointment
- notefile=$HOME/calendar ;;
- *)
- notetype=$0
- notefile=$HOME/.$0 ;;
- esac
-
- case $# in
- 0)
- test -t 0 && echo Please enter your $notetype '(^D to end):'
- echo '' >> $notefile
- exec cat >> $notefile ;;
- esac
- case $1 in
- -)
- exec vi $notefile ;;
- -rm)
- cat /dev/null > $notefile
- exec echo The ${notetype}s are removed. ;;
- -what)
- exec cat $notefile ;;
- *)
- echo '' >> $notefile
- exec echo "$*" >> $notefile ;;
- esac
- !Funky!Stuff!
- echo x - bin/bourne_scripts/beautify
- cat >bin/bourne_scripts/beautify <<'!Funky!Stuff!'
- for files
- do
- echo $files:
- cb < $files > /tmp/cb$$
- cat /tmp/cb$$ > $files
- done
- rm /tmp/cb$$
- !Funky!Stuff!
- echo x - bin/bourne_scripts/format
- cat >bin/bourne_scripts/format <<'!Funky!Stuff!'
- case $# in
- 0)
- echo "Usage: `basename $0` [-flags] <filename> [ <filename> ... ]"
- exit 1 ;;
- esac
- for names
- do
- case $names in
- -*)
- flags="$flags $names" ;;
- *.t)
- outfile=`expr $names : '\(.*\)\.'`.d
- soelim $names | tbl | nroff $flags - > $outfile ;;
- *.tbl)
- outfile=`expr $names : '\(.*\)\.'`.doc
- soelim $names | tbl | nroff $flags - > $outfile ;;
- *.n)
- outfile=`expr $names : '\(.*\)\.'`.d
- nroff $flags $names > $outfile ;;
- *.nr)
- outfile=`expr $names : '\(.*\)\.'`.doc
- nroff $flags $names > $outfile ;;
- *)
- echo Don\'t know what to do with $names ;;
- esac
- done
- !Funky!Stuff!
- echo x - bin/bourne_scripts/print
- cat >bin/bourne_scripts/print <<'!Funky!Stuff!'
- PATH=/avsd/ava/turk/bin:/usr/local/bin:/usr/bin
- indent=0
- for names
- do
- case $names in
- -i)
- indent=1 ;;
- *)
- args="$args $names" ;;
- esac
- done
- case $indent in
- 0)
- pr $args | lpr ;;
- *)
- pr $args | indent | lpr ;;
- esac
- !Funky!Stuff!
- echo x - bin/bourne_scripts/repeat
- cat >bin/bourne_scripts/repeat <<'!Funky!Stuff!'
- case $1 in
- -[0-9]*)
- number=`expr $1 : '-\(.*\)'`
- shift
- while test $number -gt 0
- do
- eval $*
- number=`expr $number - 1`
- done
- exit ;;
- *)
- echo Executing forever: $* 1>&2
- number=0
- trap 'echo Executed $number times.; exit' 2
- while true
- do
- eval $*
- number=`expr $number + 1`
- done ;;
- esac
- !Funky!Stuff!
- echo x - bin/bourne_scripts/restore
- cat >bin/bourne_scripts/restore <<'!Funky!Stuff!'
- case $# in
- 2) ;;
- *)
- exec echo Usage: `basename $0` '<file>' '<version>' ;;
- esac
- : Truncate filename if necessary
- if test `expr $1 : '.*'` -gt 11
- then
- savename=`expr $1 : '\(...........\)'`
- else
- savename=$1
- fi
- savename=${savename}_$2
- cp $savename $1 && rm $savename && echo $1 restored from $savename
- !Funky!Stuff!
- echo x - bin/bourne_scripts/save
- cat >bin/bourne_scripts/save <<'!Funky!Stuff!'
- for file
- do
- if test `expr $file : '.*'` -gt 11
- then
- savename=`expr $file : '\(...........\)'`
- else
- savename=$file
- fi
- for copy in ${savename}_??
- do
- latest=$copy
- done
- if test $latest = "${savename}_??"
- then
- latest=${savename}_01
- else
- latest=`expr $latest : '.*_\([0123456789]*\)$' + 1`
- case $latest in
- ?)
- latest=0$latest
- ;;
- esac
- latest=${savename}_$latest
- fi
- cp $file $latest && echo $file saved as $latest
- done
- !Funky!Stuff!
- echo x - bin/csh_scripts
- mkdir bin/csh_scripts
- echo x - bin/csh_scripts/newsweed
- cat >bin/csh_scripts/newsweed <<'!Funky!Stuff!'
- #
- set TEMP=/tmp/weed$$
- set NEWSRC=~/.newsrc
- set AWKFILE=/usr/ken/cmd/lib/newsweed.awk
- onintr
- echo Searching for articles in all newsgroups
- readnews -l $* | sort -o ${TEMP}a
- if (-z ${TEMP}a) then
- echo No news.
- else
- cp ${TEMP}a ${TEMP}b
- echo Please remove article titles which you do not wish to read
- sleep 1
- onintr -
- vi ${TEMP}b
- onintr cleanup
- if ( { cmp -s ${TEMP}a ${TEMP}b } ) then
- echo No articles deleted.
- else
- comm -23 ${TEMP}a ${TEMP}b | sed 's/ .*//' > ${TEMP}c
- echo Removing unwanted articles
- cp $NEWSRC $NEWSRC.old
- awk -f $AWKFILE $NEWSRC.old ${TEMP}c > ${TEMP}d
- cp ${TEMP}d $NEWSRC
- endif
- endif
- cleanup:
- rm ${TEMP}?
- !Funky!Stuff!
- echo x - bin/csh_scripts/pathname
- cat >bin/csh_scripts/pathname <<'!Funky!Stuff!'
- #
- foreach cmddir ($path)
- if ( -e $cmddir/$1 ) echo " $cmddir/$1"
- end
- !Funky!Stuff!
- echo x - bin/local
- mkdir bin/local
- echo x - bin/local/format
- cat >bin/local/format <<'!Funky!Stuff!'
- #
- if ($#argv == 0) then
- set progname=$0
- set progname=$progname:t
- echo 'Usage:' $progname '[-v] [-n] [-print] [-troffflags] <filename> [ <filename> ... ]'
- exit (1)
- endif
- set flags
- set formatter="vtroff -t"
- set eqnsetter=eqn
- set docsuf=v
- set longdocsuf=vpr
- set more=0
- foreach name ($argv)
- if ($more > 0) then
- set flags="$flags $name"
- @ more--
- continue
- endif
- switch ($name)
- case -*:
- switch ($name)
- case -print:
- set print
- continue
- case -v:
- set formatter="vtroff -t"
- set eqnsetter=eqn
- set docsuf=v
- set longdocsuf=vpr
- continue
- case -n:
- set formatter=nroff
- set eqnsetter=neqn
- set docsuf=d
- set longdocsuf=doc
- continue
- case -[F123]:
- set more=1
- default:
- set flags="$flags $name"
- endsw
- continue
- case *.et:
- set outfile=$name:r.$docsuf
- eval soelim $name | tbl | $eqnsetter | $formatter $flags > $outfile
- breaksw
- case *.t:
- set outfile=$name:r.$docsuf
- eval soelim $name | tbl | $formatter $flags > $outfile
- breaksw
- case *.tbl:
- set outfile=$name:r.$longdocsuf
- eval soelim $name | tbl | $formatter $flags > $outfile
- breaksw
- case *.e:
- set outfile=$name:r.$docsuf
- eval $eqnsetter $name | $formatter $flags > $outfile
- breaksw
- case *.eqn:
- set outfile=$name:r.$longdocsuf
- eval $eqnsetter $name | $formatter $flags > $outfile
- breaksw
- case *.n:
- set outfile=$name:r.$docsuf
- eval $formatter $flags $name > $outfile
- breaksw
- case *.nr:
- set outfile=$name:r.$longdocsuf
- eval $formatter $flags $name > $outfile
- breaksw
- default:
- echo Don\'t know what to do with $name
- continue
- endsw
- if ($?print) then
- if ("$formatter" == nroff) then
- vpr $outfile
- else
- vpr -t $outfile
- endif
- endif
- end
- !Funky!Stuff!
- echo x - bin/local/lntree
- cat >bin/local/lntree <<'!Funky!Stuff!'
- PATH=/usr/local/bin:/usr/ucb:/bin:/usr/bin
- if test $1 = -v
- then
- verbose=1
- shift
- else
- verbose=0
- fi
- case $2 in
- /*)
- target=$2 ;;
- *)
- target=`pwd`/$2 ;;
- esac
- if test -f $2
- then
- echo Error: $2 is not a directory
- exit 1
- fi
- cd $1
- source=`pwd`
- if test `expr $target : $source/` != 0
- then
- echo Error: $2 may be a subdirectory of $1
- echo Try using the full path name of $2 \(no ..\'s\)
- exit 1
- fi
- if test $verbose = 1
- then
- set -x
- fi
- files=`type -f`
- case $files in
- "") ;;
- *)
- ln $files $target ;;
- esac
- for directory in `find '' -type d -a -print`
- do
- mkdir $target$directory
- cd $source$directory
- files=`type -f`
- case $files in
- "") ;;
- *)
- ln $files $target$directory ;;
- esac
- done
- !Funky!Stuff!
- echo x - bin/local/lookdoc
- cat >bin/local/lookdoc <<'!Funky!Stuff!'
- #
- if ($#argv == 0) then
- more
- exit
- endif
- set macros pipespec args
- foreach name ($argv)
- switch ($name)
- case -n:
- set pipespec=n
- breaksw
- case -t:
- set pipespec=t
- breaksw
- case -m*:
- set macros="$macros $name"
- breaksw
- case *.n:
- case *.nr:
- if ($pipespec != t) set pipespec=n
- set args="$args $name"
- breaksw
- case *.t:
- case *.tbl:
- set pipespec=t
- set args="$args $name"
- breaksw
- default:
- set args="$args $name"
- endsw
- end
-
- switch ($pipespec)
- case n:
- nroff $macros $args | more
- breaksw
- case t:
- soelim $args | tbl | nroff $macros - | col | more
- breaksw
- default:
- more $name
- breaksw
- endsw
- !Funky!Stuff!
- echo x - bin/local/newsweed
- cat >bin/local/newsweed <<'!Funky!Stuff!'
- TEMP=/tmp/weed$$
- NEWSRC=$HOME/.newsrc
- AWKFILE=/usr/local/lib/newsweed.awk
- trap 'rm ${TEMP}?; exit' 0 2
- echo Making list of article titles
- readnews -l $* | sort -o ${TEMP}a
- if test -s ${TEMP}a
- then
- cp ${TEMP}a ${TEMP}b
- echo Please remove article titles which you do not wish to read
- sleep 1
- reset # So that vi's CRLF doesn't get trashed by another vi
- ${EDITOR-vi} ${TEMP}b
- if cmp -s ${TEMP}a ${TEMP}b
- then
- echo No articles deleted.
- else
- comm -23 ${TEMP}a ${TEMP}b | sed 's/ .*//' > ${TEMP}c
- echo Removing unwanted articles
- cp $NEWSRC $NEWSRC.old
- awk -f $AWKFILE $NEWSRC.old ${TEMP}c > ${TEMP}d
- cp ${TEMP}d $NEWSRC
- fi
- else
- echo No news.
- fi
- !Funky!Stuff!
- echo x - bin/local/nmail
- cat >bin/local/nmail <<'!Funky!Stuff!'
- #/bin/csh
- set found = 0
- set arg = 1
- while($arg <= $#argv)
- if(`echo $argv[$arg] | grep \!` != "") then
- set tuple = `echo $argv[$arg] | sed s/\\!/\ /`
- set upath = `uupath $tuple[1]`
- set found = $status
- set argv[$arg] = "$upath\!$tuple[2]"
- else
- set found = 0
- endif
- if($found != 0) then
- set argv[$arg]
- endif
- @ arg = $arg + 1
- end
- echo "mail $argv"
- mail $argv
-
- !Funky!Stuff!
- echo x - bin/local/peopledata
- cat >bin/local/peopledata <<'!Funky!Stuff!'
- peoplefile=$HOME/.peopledata
-
- echo ' '
-
- case $# in
- 0)
- ed - $peoplefile << EOF
- g/./s/$/\\
- /
- g/ /s//\\
- /g
- 1,\$p
- q
- EOF
- exit ;;
- esac
-
- case $1 in
- -)
- chmod 600 $peoplefile
- vi $peoplefile
- chmod 400 $peoplefile
- exit ;;
- esac
- trap "rm /tmp/data$$; exit" 0 2
- for name
- do
- grep -y "$name" $peoplefile >> /tmp/data$$
- done
- ed - /tmp/data$$ << EOF
- g/./s/$/\\
- /
- g/ /s//\\
- /g
- 1,\$p
- q
- EOF
- !Funky!Stuff!
- echo x - bin/local/phone
- cat >bin/local/phone <<'!Funky!Stuff!'
- peoplefile=$HOME/.peopledata
-
- case $# in
- 0)
- ed - $peoplefile << EOF
- v/-/d
- g/./s/\([^ ]*\)[^-]* \(.*-.*\)/\1 \2/
- 1,\$p
- EOF
- exit ;;
- esac
-
- case $1 in
- -)
- chmod 600 $peoplefile
- vi $peoplefile
- chmod 400 $peoplefile
- exit ;;
- esac
-
- trap "rm /tmp/data$$; exit" 0 2
- for name
- do
- grep -y "$name" $peoplefile >> /tmp/data$$
- done
- ed - /tmp/data$$ << EOF
- g/./s/\([^ ]*\)[^-]* \(.*-.*\)/\1 \2/
- 1,\$p
- q
- EOF
- !Funky!Stuff!
- echo x - bin/local/pk
- cat >bin/local/pk <<'!Funky!Stuff!'
- for dir
- do echo "mkdir $dir";
- for file in `file $dir/* | sed -n '/text$/s/:[^:]*$//p'`
- do echo "echo x - $file"
- echo "cat >$file <<'#EOF#'"
- cat $file; echo "#EOF#"
- done
- pk `file $dir/* | sed -n '/directory$/s/:.*//p'`
- done
- !Funky!Stuff!
- echo x - bin/local/save
- cat >bin/local/save <<'!Funky!Stuff!'
- #
- if ("$1" =~ -*) then
- set suffix=`expr $1 : '-\(.*\)'`
- shift
- foreach file ($argv)
- if (`expr $file:t : '.*'` >= 11) then
- set savename=`expr $file : '\(.*\)'$file:t`
- set savename=$savename`expr $file:t : '\(...........\)'`
- else
- set savename=$file
- endif
- cp $file ${savename}_$suffix && \
- echo $file saved as ${savename}_$suffix
- end
- exit
- endif
- foreach file ($argv)
- if (`expr $file:t : '.*'` >= 11) then
- set savename=`expr $file : '\(.*\)'$file:t`
- set savename=$savename`expr $file:t : '\(...........\)'`
- else
- set savename=$file
- endif
-
- set nonomatch
- set latest=(${savename}_[0-9][0-9])
- if ("$latest" == "${savename}_[0-9][0-9]") then
- set latest=${savename}_01
- else
- set latest=$latest[$#latest]
- set latest=`expr $latest : '.*_\([0123456789]*\)$' + 1`
- if ($latest < 10) set latest=0$latest
- set latest=${savename}_$latest
- endif
- cp $file $latest && echo $file saved as $latest
- end
- !Funky!Stuff!
- echo x - bin/local/shar
- cat >bin/local/shar <<'!Funky!Stuff!'
- : Roff, nroff, or eqn input text
- for file in `file $* | sed -n '/eqn input text$/s/:[^:]*$//p'`
- do
- echo "echo x - $file"
- echo "sed 's/^x//' >$file <<'!Funky!Stuff!'"
- sed 's/^/x/' $file; echo "!Funky!Stuff!"
- done
- : Text files
- for file in `file $* | sed -n -e '/eqn input text$/d' -e '/text$/s/:[^:]*$//p'`
- do
- echo "echo x - $file"
- echo "cat >$file <<'!Funky!Stuff!'"
- cat $file; echo "!Funky!Stuff!"
- done
- : Directories, recursively
- for dir in `file $* | sed -n '/directory$/s/:.*//p'`
- do
- echo "echo x - $dir"
- echo "mkdir $dir"
- file=`echo $dir/*`
- test "$file" != "$dir/*" && $0 $file
- done
- !Funky!Stuff!
- echo x - bin/local/uuhosts
- cat >bin/local/uuhosts <<'!Funky!Stuff!'
- #!/bin/sh
- # '@(#) uuhosts.sh 1.22 84/08/07'
-
- # PATH will have to be adjusted for non-BSD systems.
- PATH=/usr/local/bin:/usr/ucb:/bin:/usr/bin
- LIB=/usr/lib
-
- # Routing information produced by pathalias.
- paths=$LIB/nmail.paths
-
- # The directory $NEWSMAP should contain the USENET news map information
- # from newsgroup net.news.map that is posted about once a month from
- # cbosgd!map, extracted by a line like this in $LIB/news/sys:
- #
- # newsmap:net.news.map:B:/usr/local/uuhosts -x
- #
- # Locally-known information should go in $LIB/news/net.news.map/Local.
- # The directory $MAILMAP is extracted by the same command from the
- # UUCP mail information posted to the same newsgroup.
- NEWSMAP=$LIB/news/net.news.map
- MAILMAP=$LIB/news/net.mail.map
- cd $NEWSMAP
-
- case $1 in
- -x)
- # extract a new map piece into the map directory
- temphead=/tmp/maphead.$$
- temptext=/tmp/maptext.$$
- awk '
- BEGIN {
- temphead = "'$temphead'";
- isnewsmap = 0; ismailmap = 0;
- shead = 0; stext = 1; snews = 2; smail = 3; scat = 4; scatting = 5;
- state = shead;
- print "Reply-To: news" >> temphead;
- }
- state == shead && /^From: / {
- print "Original-" $0 >> temphead;
- }
- state == shead && /^Subject: / {
- if ($2 != "Re:")
- for (x = 2; x <= NF; x++) {
- if ($x == "UUCPmap" || $x == "uucpmap" || $x == "UUCPMAP") {
- ismailmap = 1;
- break;
- }
- if ($x == "map" || $x == "Map" || $x == "MAP") {
- if (x <= 2)
- continue;
- x--;
- if ($x == "USENET") {
- isnewsmap = 1;
- break;
- }
- if ($x == "UUCP") {
- ismailmap = 1;
- break;
- }
- x++;
- }
- }
- if (!isnewsmap && !ismailmap) {
- print "Subject: not a map update" >> temphead;
- print "Original-" $0 >> temphead;
- } else
- print $0 >> temphead;
- }
- state == shead && /^$/ {
- if (isnewsmap != 0)
- state = snews;
- else if (ismailmap != 0) {
- state = scat;
- } else
- state = stext;
- next;
- }
- state == scat {
- if ($1 != "cat")
- state = scatting;
- else
- state = smail;
- }
- state == scatting {
- if ($1 == ":")
- state = smail;
- else
- print;
- }
- state == smail {
- print | "uuhosts -u";
- }
- state == snews {
- print | "/bin/sh";
- }
- state == stext {
- print;
- }
- ' > $temptext 2>&1
- cat $temphead $temptext | /bin/mail news
- rm -f $temphead $temptext
- exit 0
- ;;
-
- -u)
- # extract a UUCP map piece
- cd $MAILMAP
- /bin/sh
- for f in *map*.a *map*.ar
- do
- ar xv $f
- rm $f
- done
- ;;
-
- -g)
- # by geographical region
- shift
- if test $# -eq 0
- then
- exec ls
- exit 1
- fi
- exec cat $*
- exit 1
- ;;
-
- -k)
- # by keyword
- shift
- exec awk '
- BEGIN { inside = 1; outside = 0; state = outside; }
- /^Name:/ { state = inside; count = 0; useit = 0; }
- state == inside { block[count++] = $0; }
- /'"$*"'/ { useit = 1; }
- /^$/ && state == inside {
- if (useit == 1) {
- for (i = 0; i < count; i++) {
- print block[i];
- }
- }
- state = outside;
- }
- ' *
- exit 1
- ;;
-
- -*)
- # unknown option
- ;;
-
- "")
- # no arguments
- ;;
-
- *)
- # by site name
- for arg in $*
- do
- echo 'UUCP mail path:'
- grep '^'${arg} $paths
- echo '
- UUCP mail host information:'
- cat $MAILMAP/${arg}* | tr % '\012'
- echo '
- USENET news host information:'
- sed -n -e "/^Name:[ ]*${arg}/,/^$/p" *
- done
- exit 0
- ;;
- esac
-
- echo 'Usage: 'uuhosts' hostname ...
- for information about a particular UUCP or USENET host or hosts, or
-
- 'uuhosts' -g geographical-region
- for information about USENET news sites in a geographical region, or
-
- 'uuhosts' -g
- for a list of known USENET geographical-regions.
- '
- exit 1
- !Funky!Stuff!
-
- ::::::::::::::
- shells/4
- ::::::::::::::
- Date: Fri, 14 Sep 84 15:06:07 pdt
- From: hplabs!sdcrdcf!sdcsvax!celerity!barto (David Barto)
- To: sdcsvax!sdcrdcf!hplabs!resonex!nancy
- Subject: Re: Tricks, shell and awk scripts, csh aliases and the like
-
- Hi Nancy,
- I too am a 'new' system admin, and belive me, it won't take
- you too long to get quite a bag of tricks put together.
-
- Most of mine relate to source programs put together in
- shell scripts to keep track of things.
-
- I have 1 for news (at the end of the article) which keeps
- the active list up to date.
-
- Another nice program is one I call '#'. It is owned by root
- and setuid/setgid to root/daemon. I use it to 'become' root
- while doing 1 command
- # mv file1 file2
- which requires root permission. It checks to see the normal
- userid is 'me' and then allows the command. I will send it
- along if you want it.
-
- I have shell scripts for doing things such as 'rootedit'
- a file. This is an alias for "alias re '# vi -v \!*'"
-
- I too would love to see the things you get back from the
- net. As well I have a sendmail config setup for making
- your configuration a breeze. If you want it I can send
- it under seperate cover.
-
-
- barto (david barto) Tele : (619) 271 9940
- uucp : {decvax || ucbvax || ihnp4}!sdcsvax!celerity!barto
- uucp : akgua!celerity!barto
- arpa : sdcsvax!celerity!barto@NOSC
-
-
- : This is a shar archive. Extract with sh, not csh.
- echo x - Mkactive
- cat > Mkactive << '!Funky!Stuff!'
- #!/bin/sh
- # see Update.active for this usage
- #
- sed -e '1,/---/d'\
- -e '1,/---/d'\
- -e 's/^[ ]//'\
- -e 's/ \(.*\)//'\
- active.current | sort | sed -e '1,/Newsgroup/d' > current
- sed -e 's/ \(.*\)//' /usr/new/lib/news/active | sort > active
- diff active current > /tmp/active.diff
- echo "# active newsgroups not in local active file:"
- fgrep ">" /tmp/active.diff
- echo "# defunct newsgroups still in active file (also local groups):"
- fgrep "<" /tmp/active.diff
- /bin/rm current active /tmp/active.diff
- !Funky!Stuff!
- echo x - Mkdead
- cat > Mkdead << '!Funky!Stuff!'
- #!/bin/sh
- # see Update.active for usage
- # change all groups that we have (but shouldn't) to be removed,
- # and change all groups that we dont have (but sould) to be a comment
- sed -e '/general/d'\
- -e '/control/d' \
- -e '/junk/d' \
- -e 's/</rmgroup/' \
- -e 's/>/#/'
- !Funky!Stuff!
- echo x - rmgroup
- cat > rmgroup << '!Funky!Stuff!'
- #! /bin/sh
- # from : sdcsvax!sdcrdcf!hplabs!hao!seismo!rlgvax!cvl!umcp-cs!eneevax!chris
- #
- # @(#)rmgroup.sh (U of Maryland) FLB 28-Jun-1983
- # Bug fixes 5 June 1984 Chris Torek
- #
- # Delete a newsgroup
-
- lib=/usr/new/lib/news
- spool=/usr/spool/news
-
- group=$*
-
- for group
- do
- qgrp="`echo $group | sed 's/\./\\\./g'`"
- if
- grep -s "^$qgrp [0-9][0-9][0-9][0-9][0-9]$" $lib/active
- then
- ed - $lib/active << xxxFOOxxx
- /^$qgrp [0-9][0-9][0-9][0-9][0-9]$/d
- w
- q
- xxxFOOxxx
- else
- echo "$0: $group: no such active line" 2>&1
- fi
-
- dir=$spool/"`echo $group | sed 's/\./\//g'`"
- if
- [ -d "$dir" ]
- then
- /bin/rm -fr "$dir"
- else
- echo "$0: $dir: no spool directory" 2>&1
- fi
- done
- exit 0
- !Funky!Stuff!
-
- ::::::::::::::
- shells/5
- ::::::::::::::
- Date: Thu, 20 Sep 84 01:20:29 pdt
- From: turtlevax!ken (Ken Turkowski)
- To: resonex!nancy
- Subject: Handy new uucp utility: uuque
-
- cat << EOF
- I just completed a new useful uucp utility which lets you know what kind
- of uucp work is in progress. While uusnap just tells you the number of
- files to be processed, uuque tells you exactly what kind of work is to
- be performed. I've only tried it on three kinds of work, namely mail,
- news, and standard uucp transfers. Give it a try, and see if it breaks
- on any new types of uucp work.
- Ken
- P.S. This really should be a C program.
- EOF
- echo x - uuque
- cat >uuque <<'!Funky!Stuff!'
- #! /bin/sh
- # uusnap
- cd /usr/spool/uucp
- LUUNAME=`uuname -l`
-
- # Check for outgoing work
- for cmdfile in C./*
- do
- test -f $cmdfile || continue
- othersys=`expr $cmdfile : 'C./C.\(.*\).....'`
- cmd=
- dfile=
- xfile=
- ufile=
- cat $cmdfile | {
- while read cmd arg1 arg2 arg3 extra
- do
- case $cmd in
- S) ;;
- *) echo Bad cmd in $cmdfile: $cmd $arg1 $arg2 $arg3 $extra
- exit ;;
- esac
- case $arg1 in
- D.${LUUNAME}X????) # Remote execute file
- xfile=$arg1
- ;;
- D.${LUUNAME}?????) # Data file ref'd by the execute file
- dfile=$arg1
- ;;
- *) # Just a uucp
- dfile=$arg1
- ufile=$arg2
- from=$arg3
- ;;
- esac
- done
- case $xfile in
- "") # uucp transfer
- echo `wc -c < $dfile`\ uucp $dfile $othersys!$ufile \($from\)
- ;;
- *) # complex transfer
- cat D.${LUUNAME}X/$xfile | {
- while read xcmd arg1 arg2 extra
- do
- case $xcmd in
- U)
- from=$arg2!$arg1
- ;;
- F)
- ;;
- I)
- ;;
- C)
- echo `wc -c < D.${LUUNAME}/$dfile`\ $arg1 $othersys!$arg2 \($from\)
- ;;
- *)
- echo Unknown xcmd in $xfile: $xcmd $arg1 $arg2
- exit
- ;;
- esac
- done
- }
- ;;
- esac
- }
- done
-
- # Check for incoming work
- for cmdfile in X./*
- do
- test -f $cmdfile || continue
- othersys=`expr $cmdfile : 'X./X.\(.*\).....'`
- cat $cmdfile | {
- while read cmd arg1 arg2 extra
- do
- case $cmd in
- U)
- from=$arg2!$arg1
- ;;
- Z)
- ;;
- F)
- if test -f D./$arg1
- then
- dfile=D./$arg1
- elif test -f D./$arg2
- then
- dfile=D./$arg2
- else
- continue 2
- fi
- ;;
- C)
- xcmd=$arg1
- ;;
- *) echo Bad cmd in $cmdfile: $cmd $arg1 $arg2 $extra
- exit ;;
- esac
- done
- echo `wc -c < $dfile`\ $xcmd $dfile \($from\)
- }
- done
- !Funky!Stuff!
-
- ::::::::::::::
- shells/6
- ::::::::::::::
- Date: Sat, 22 Sep 84 01:22:39 pdt
- From: turtlevax!ken (Ken Turkowski)
- To: resonex!nancy
- Subject: Re: uuque
-
- I've updated uuque to the point where it should probably instead be called
- uusnoop. Of course, it's not that interesting unless there are others on
- your system that use uucp and net mail.
-
- Ken
-
- echo x - uuque
- cat >uuque <<'!Funky!Stuff!'
- #! /bin/sh
- # The user must have access to the /usr/spool/uucp/* directories and files.
- # This can be easily done by making certain users members of the daemon
- # and/or uucp groups, or by becoming super-user.
- # uusnap
- cd /usr/spool/uucp
- LUUNAME=`uuname -l`
-
- # Check for outgoing work
- for cmdfile in C./*
- do
- test -f $cmdfile || continue
- othersys=`expr $cmdfile : 'C./C.\(.*\).....'`
- cmd=
- dfile=
- xfile=
- ufile=
- cat $cmdfile | {
- while read cmd arg1 arg2 arg3 extra
- do
- case $cmd in
- S) # uucp send
- case $arg1 in
- D.${LUUNAME}X????) # Remote execute file
- xfile=$arg1
- ;;
- D.${LUUNAME}?????) # Data file ref'd by xfile
- dfile=D.${LUUNAME}/$arg1
- ;;
- *) # Just a uucp -- no intertpretation
- echo `wc -c < $arg1`\ uucp $arg1 $othersys!$arg2 \($arg3\)
- ;;
- esac
- ;;
- R) # uucp receive
- echo ' ' uucp $othersys!$arg1 $arg2 \($arg3\)
- ;;
- *) echo Bad cmd in $cmdfile: $cmd $arg1 $arg2 $arg3 $extra
- continue ;;
- esac
- done
- case $xfile in
- "") # uucp transfer
- continue
- ;;
- esac
- cat D.${LUUNAME}X/$xfile | { # complex transfer -- interpret xfile
- while read xcmd arg1 arg2 extra
- do
- case $xcmd in
- U)
- from=$arg2!$arg1
- ;;
- F)
- ;;
- I)
- ;;
- Z)
- ;;
- C)
- case $arg1 in
- rmail)
- from=`head -1 $dfile | ( read arg1 arg2 extra; echo $arg2 )`
- echo `wc -c < $dfile`\ $arg1 $othersys!$arg2 \($from\)
- echo -n ' '
- grep '^Subject:' $dfile || echo ''
- ;;
- rnews)
- echo `wc -c < $dfile`\ $arg1 $othersys \($from\)
- echo -n ' '
- grep '^Newsgroups:' $dfile
- echo -n ' '
- grep '^Subject:' $dfile
- ;;
- *)
- echo `wc -c < $dfile`\ $arg1 $arg2 $extra [$othersys $dfile] \($from\)
- ;;
- esac
- ;;
- *)
- echo Unknown xcmd in $xfile: $xcmd $arg1 $arg2
- exit
- ;;
- esac
- done
- }
- }
- done
-
- # Check for incoming work
- for cmdfile in X./*
- do
- test -f $cmdfile || continue
- othersys=`expr $cmdfile : 'X./X.\(.*\).....'`
- comment=
- cat $cmdfile | {
- while read cmd arg1 arg2 extra
- do
- case $cmd in
- U)
- from=$arg2!$arg1
- ;;
- Z)
- ;;
- I)
- ;;
- F)
- if test -f D./$arg1
- then
- dfile=D./$arg1
- elif test -f XTMP/$arg2
- then
- dfile=XTMP/$arg2
- comment="(EXECUTING)"
- else
- continue 2
- fi
- ;;
- C)
- xcmd=$arg1
- xargs="$arg2 $extra"
- case $arg1 in
- rmail)
- from=$othersys!`head -1 $dfile | ( read arg1 arg2 extra; echo $arg2 )`
- echo -n ' '
- grep '^Subject:' $dfile || echo ''
- ;;
- esac
- ;;
- *) echo Bad cmd in $cmdfile: $cmd $arg1 $arg2 $extra
- continue ;;
- esac
- done
- echo `wc -c < $dfile`\ $xcmd $xargs $comment \($from\)
- }
- done
- !Funky!Stuff!
-
-
-
- From: Nancy Blachman <decvax!decwrl!sun!idi!resonex!nancy@Ucb-Vax.ARPA>
- To: net.unix, net.unix-wizards, net.sources
- Subject: Actual tricks, shells, csh aliases and the like, 3 of 3
- Date: 16 Oct 84 21:24:32 GMT
- Organization: Resonex Inc., Sunnyvale, CA
-
- > [Know anybody with a GREAT .login or .cshrc?]
-
- > I'm interested in collecting the little tricks, shell scripts, awk
- > hacks, csh aliases, and such that people have built to make their daily
- > life a little easier or more automatic. Being a fairly new system
- > administrator I don't have the big toolbox that years of messing around
- > will leave you with. If you have any hacks you're proud of (or that
- > you aren't proud of, but which work anyway), and you're willing to make
- > them public, mail them to me. I'll collect, collate, shuffle, sort,
- > munge, judge, select and discard them and then "summarize to the net".
-
- This article centers on C programs and awk scripts I received in response to
- my solicitation. The first article concentrates on aliases, and .cshrc and
- .login files. The second article in this series focuses shell scripts.
-
- /\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\/
- > Nancy Blachman {allegra,hplabs,ihnp4,sun}!resonex!nancy (408)720 8600 x37 <
- /\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\/
-
- ::::::::::::::
- programs/1
- ::::::::::::::
- Date: Sat, 15 Sep 84 02:45:08 pdt
- From: <hplabs!intelca!t4test!chip>
- To: intelca!hplabs!resonex!nancy
- Subject: Re: Tricks, shell and awk scripts, csh aliases and the like
-
- One thing I've put together is a bunch of scripts which give you a
- status line on a DEC type terminal. The thing is hardwired into VTxxx
- type stuff rather than termcap for two reasons. First, the cursor
- save/restore function isn't part of termcap. Secondly, the set
- scrolling region is part of termcap, but it is for VT100 type
- terminals. Since we only have DEC terminals, it doesn't hurt us too
- much.
-
- Some history: I used to like to display my current working directory
- on my prompt line. Later I wanted my terminal line there too. (That
- was in case a terminal I was on locked up, I could quickly tell what
- terminal to kill.) Later, when I had four accounts on the machine I
- thought it would be nice to display my login name in my prompt. The
- straw which broke the camel's back was that we bought another VAX, and
- I wanted to be able to see which machine I was logged on. As you might
- imagine, my prompt now extended about 60 columns across the screen. My
- answer was to take everything out of my prompt except the history
- number and stick it at a status line at the bottom of my screen.
-
- Below is a shar archive of the status line files. You do a `source
- stat.init' to get stuff initialized. Then `son' and `soff' (which are
- aliased to source the two other scripts) turn the status line on and
- off. These also define a bunch of aliases which help you work with
- programs which don't like the status line. So, I put a `source
- /usr/public/stat.init' followed by a `son' in my `.login'. (I don't
- turn it on with my `.cshrc', my shell escapes would then get awfully
- sloooooow.)
-
- Also, you would need to add `vt100s' and `vt131s' to /etc/termcap.
- This is to keep screen stuff (e.g. more, vi, etc.) happy if you run
- them with the status line on. This is what I use:
-
- ################ VT131 with 24th line reserved
- ################ d13s|vt131s|VT131S|vt-131s|pt131s|pt-131s|dec
- vt131s:\
- :li#23:tc=vt131
-
- You will definately want to change the terminal identification stuff in
- `stat.init'. We run Eunice, so I use the `grep' to convert the Unix
- style terminal line identification to a VMS terminal port.
-
- You can redefine `statin' in the `stat.init' script to put whatever you
- want on the status line.
-
- Well...after all this, I hope you use VT1xx/VT2xx terminals.
- Otherwise, this won't be real exciting. (Unless you want to rewrite
- `statterm.c')
-
- ---
-
- Chip Rosenthal, Intel/Santa Clara
- { idi|intelca|icalqa|kremvax|qubix|ucscc } ! t4test ! { chip|news }
-
- ----- cut here -----------------------------------------------------------
-
- : This is a shar archive. Extract with sh, not csh.
- : This archive contains the following files
- : Makefile stat.init stat.on stat.off statterm.c
- : Total number of files: 5
- echo x - Makefile [file 1 of 5]
- sed 's/^|//' > Makefile << '!-FUNKY-STUFF-!'
- |BIN= /usr/public
- |OBJS= statterm
- |
- |IOBJS= $(BIN)/statterm \
- | $(BIN)/stat.init \
- | $(BIN)/stat.on \
- | $(BIN)/stat.off
- |
- |SOURCES=Makefile \
- | stat.init \
- | stat.on \
- | stat.off \
- | statterm.c
- |
- |all: $(OBJS)
- |install: $(IOBJS)
- |shar: stat.shar
- |
- |statterm: statterm.c
- | cc -O statterm.c -o statterm
- |
- |$(BIN)/statterm: statterm
- | cp $? $@
- | chmod 755 $@
- |
- |$(BIN)/stat.init: stat.init
- | cp $? $@
- | chmod 755 $@
- |
- |$(BIN)/stat.on: stat.on
- | cp $? $@
- | chmod 755 $@
- |
- |$(BIN)/stat.off: stat.off
- | cp $? $@
- | chmod 755 $@
- |
- |stat.shar: $(SOURCES)
- | shar $(SOURCES) > $@
- |
- |
- !-FUNKY-STUFF-!
- echo x - stat.init [file 2 of 5]
- sed 's/^|//' > stat.init << '!-FUNKY-STUFF-!'
- |alias a 'alias'
- |
- |# run statterm to verify terminal can do status line
- |statterm
- |if $status then
- | # status line not available on this terminal -- see if a
- | # baseterm is defined. if so, then maybe $TERM is just
- | # messed up from earlier invocation of stat.init.
- | if $?baseterm then
- | # baseterm has been defined -- see if it will work
- | set temp=$TERM
- | setenv TERM $baseterm
- | statterm
- | if $status then
- | # nope -- baseterm will not work either
- | setenv TERM $temp
- | unset temp
- | goto failed
- | else
- | # yes -- baseterm will work
- | echo "changing terminal type from $temp to $TERM"
- | unset temp
- | endif
- | else
- | # no baseterm defined
- | goto failed
- | endif
- |endif
- |
- |# status line will work with this terminal
- |set baseterm=$TERM
- |set ignoreeof
- |
- |# find user's system (ick)
- |set system=`tr '[A-Z]' '[a-z]' < /usr/include/whoami`
- |
- |# find user's tty (ick ick ick)
- |set temp=`tty`'$'
- |set tty=`grep "$temp" /etc/dev.com | sed -e 's/^.*_\(.*\):.*/\1/'`
- |unset temp
- |
- |# setup terminal strings
- |set statin="`statterm in '${system}\\!${user}' '(${tty})'`"
- |set statout="`statterm out`"
- |set statoff="`statterm off`"
- |echo -n "$statoff"
- |
- |# setup status commands
- |# son - turn on status mode
- |# soff - turn off status mode
- |# stat - draw status line
- |# nostat - erase status line
- |# termstat - setenv the terminal with status line protected
- |# termnorm - setenv the terminal without a status line
- |# ns - execute a command without a status line
- |a son 'source /usr/public/stat.on'
- |a soff 'source /usr/public/stat.off'
- |a stat ';'
- |a nostat ';'
- |a termstat ';'
- |a termnorm ';'
- |a ns 'nostat ; termnorm ; \!* ; termstat ; stat ; echo ""'
- |
- |# alias the commands which maintain the status line
- |a cd 'chdir \!* ; stat'
- |a popd 'popd ; stat'
- |a pushd 'pushd \!* ; stat'
- |
- |# alias the commands which (might) munch the status line
- |a clear 'clear \!* ; stat'
- |a mail 'mail \!* ; stat'
- |a more 'more \!* ; stat'
- |
- |# alias the commands which should be done with the status line off
- |a lo 'ns logout \!*'
- |a LO 'ns logout \!*'
- |a rn 'ns /local/bin/rn \!*'
- |a pn 'ns /local/bin/pn \!*'
- |a reply 'ns /local/bin/reply \!*'
- |a sus 'ns suspend \!*'
- |a vi 'ns /usr/ucb/vi \!*'
- |a view 'ns /usr/ucb/view \!*'
- |
- |# that is all folks. the status stuff is initialized
- |# now all you need is a 'son' to turn it on
- |exit 0
- |
- |failed:
- |set baseterm=$TERM
- |set temp="status line is not available for terminal type $TERM"
- |echo $temp
- |set statin=";"
- |set statout=";"
- |if $?statoff == 0 then
- | set statoff=";"
- |endif
- |alias son echo "$temp"
- |alias off 'source /usr/public/stat.off'
- |unset temp
- |soff
- |exit 1
- |
- !-FUNKY-STUFF-!
- echo x - stat.on [file 3 of 5]
- sed 's/^|//' > stat.on << '!-FUNKY-STUFF-!'
- |a stat 'echo -n "${statin}${cwd}${statout}"'
- |a nostat 'echo -n "$statoff"'
- |a termstat 'setenv TERM ${baseterm}s'
- |a termnorm 'setenv TERM $baseterm'
- |termstat
- |stat
- |echo ""
- |set statmode
- !-FUNKY-STUFF-!
- echo x - stat.off [file 4 of 5]
- sed 's/^|//' > stat.off << '!-FUNKY-STUFF-!'
- |setenv TERM $baseterm
- |echo -n "$statoff"
- |unset statmode
- |a termstat ';'
- |a termnorm ';'
- |a stat ';'
- |a nostat ';'
- !-FUNKY-STUFF-!
- echo x - statterm.c [file 5 of 5]
- sed 's/^|//' > statterm.c << '!-FUNKY-STUFF-!'
- |/*
- | * FILE: statterm
- | * VERSION: V0.01 [preliminary]
- | * DATE: Mon Aug 27 16:43:13 PDT 1984
- | * AUTHOR: Chip Rosenthal/Intel Corporation
- | * ADDRESS: t4test!chip
- | * PACKAGE: 'stat' terminal status line package
- | * DESCRIPTION: produces terminal escape sequences to implement status line
- | * COMPILATION: cc -C statterm.c -o statterm
- | *
- | * REVISION NOTES:
- | *
- | * V1.00 Original program.
- | *
- | *
- | * USAGE:
- | *
- | * statterm
- | * Verifies that the status line will work with current terminal.
- | * Returns a zero exit status if it will, nonzero if it won't.
- | *
- | * statterm in [arg ...]
- | * Creates a string which opens up the status line. Any
- | * arguments are placed at the beginning of the status
- | * line, and the cursor is left there.
- | *
- | * statterm out
- | * Create string which closes the status line and returns
- | * cursor to position it was in prior to the last execution
- | * of a 'statterm in' string.
- | *
- | * statterm off
- | * Creates a string which removes the status line.
- | *
- | *
- | * EXAMPLE:
- | * # this is a cshell script
- | * statterm
- | * if $status then
- | * echo "status line will not work on this terminal"
- | * exit
- | * endif
- | * echo -n `statterm in $user`
- | * echo -n `pwd`
- | * echo `statterm out`
- | *
- | *
- | * BUGS:
- | *
- | * This program is hardwired into the DEC VT100 terminal escape sequences.
- | * This is done because (unfortunately) 'termcap' doesn't offer a cursor
- | * position save/restore feature.
- | *
- | */
- |
- |#include <stdio.h>
- |#define strmatch(A,B) (strcmp((A),(B))==0)
- |
- |/*
- | * VT100 Terminal Escape Definitions -- all parameters are strings
- | */
- |#define ESC putchar(27); /* escape character */
- |#define CSI ESC;putchar('['); /* command string */
- |#define DECSC ESC;putchar('7'); /* save cursor position */
- |#define DECRC ESC;putchar('8'); /* restore cursor position */
- |#define CUP(L,C) CSI;printf("%s;%sH",L,C); /* set cursor to line/col */
- |#define CUU1 CSI;printf("1A"); /* cursor up one line */
- |#define CUD1 CSI;printf("1B"); /* cursor down one line */
- |#define EL(MODE) CSI;printf("%sK",MODE); /* erase line */
- |#define ED(MODE) CSI;printf("%sJ",MODE); /* erase display */
- |#define DECSETBM(T,B) CSI;printf("%s;%sr",T,B); /* top/bot of scroll area */
- |/*
- | * erasing modes:
- | * mode "0" - from cursor to end
- | * mode "1" - from beginning to cursor
- | * mode "2" - entire
- | */
- |
- |
- |main(argc,argv)
- |int argc;
- |char *argv[];
- |{
- | char *term, *getenv();
- | int i;
- |
- | if ( argc == 1 ) {
- | term=getenv("TERM");
- | if ( term == NULL )
- | exit(1);
- | if ( strmatch(term,"vt100") || strmatch(term,"vt131") )
- | exit(0);
- | else
- | exit(1);
- | }
- |
- | if ( strmatch(argv[1],"in") ) {
- | /*
- | * Save cursor position, go to line 24, print out the arguments, and
- | * erase the rest of the status line. Cursor remains in status line.
- | */
- | DECSC;
- | CUP("24","1");
- | for ( i=2 ; i<argc ; ++i )
- | printf("%s ",argv[i]);
- | EL("0");
- | } else if ( strmatch(argv[1],"out") ) {
- | /*
- | * Protect status line from scrolling and restore cursor to location
- | * prior to the last 'in' call. Move the cursor up and down one line.
- | * This will keep it out of the status line area if it was there when
- | * 'in' was called.
- | */
- | DECSETBM("1","23");
- | DECRC;
- | CUU1;
- | CUD1;
- | } else if ( strmatch(argv[1],"off") ) {
- | /*
- | * Save the current cursor position, unprotect the status line, erase
- | * the status line, and restore the cursor position.
- | */
- | DECSC;
- | DECSETBM("1","24");
- | CUP("24","1");
- | EL("2");
- | DECRC;
- | } else
- | exit(1);
- |
- |}
- !-FUNKY-STUFF-!
- exit
-
-
-
- ::::::::::::::
- programs/2
- ::::::::::::::
- From: ihnp4!mcnc!malloy@ittral
- Date: Thu, 13 Sep 84 21:35:18 edt
- To: ihnp4!resonex!nancy@mcnc
- Subject: Tricks
-
- Well it depends upon what you mean. The big problem with having lots of aliases
- and such is they start taking up large amounts of memory. Take it from someone
- who knows. But here's a few things. Some you no doubt already have, and most
- are trivial, but it's better to be complete then to leave anything out. You
- can always just delete this. == William P. Malloy (ittral!malloy}
- ---------------------------------------------------------------------
- In a .cshrc, a warning and a work around. Apparently not known by most people
- but obvious to people have who been around. Our users keep bumping into it
- about once a year like clock work.
- # reason for setting variables only if a prompt already exists
- # If it sets prompt in a non-interactive shell, for instance vi(1)
- # firing up a sub-shell to expand shell meta-characters, the set prompt
- # will stomp on alot of shell variables used for the expansion (like ~)
- #
- if ( $?prompt ) then
- set mail=/usr/spool/mail/malloy
- set prompt=\`
- set histchars=",;"
- endif
- Note the setting of histchars. A little known, but for me much loved feature
- of csh is the ability to change the history characters "!^" from their default
- values. The pair `,;' are easier to reach, don't require shifting, and don't
- appear in mail paths. Typing `mail mcnc\!ihnp4\!resonex\!nancy' gets to be
- a pain every time you want to mail someone.
-
- alias , 'redo \,* ~/.cmd ~/.cmd1 ; source ~/.cmd1 '
-
- This little alias allows you to have command editing in the csh. It's quite
- useful, particularly when you've got a LONG painful command line. The , is
- just the history character and is ! for most people. The command redo is a
- simple C program.
- --------------- redo.c -------------------
- #include <stdio.h>
-
- /* redo -- outputs a command file (last arg )used to edit and
- re-ex a command. Next to last arg is dest file of the command.
-
- NOTE: if you use a non-standard history character, i.e. not !
- then you must `setenv HISTCHARS $histchars' in your .login
- If you do not `set histchars=",;"' for instance then it will
- automagically default to ! -- 12/2/83 wpm
-
- First arg is the history ref . To use:
- alias , 'redo \,* ~/cmd ~/cmd1 ; source ~/cmd1 '
- , 25 to edit & re-execute ,25
- , , or , to edit & re-execute ,,
- , v to edit & re-execute ,v ,etc.
-
- */
-
- main(argc, argv)
- int argc;
- char *argv[];
- {
- FILE *fp;
- char *t, *getenv();
-
- fp = fopen(argv[argc-1], "w");
- if ((t = getenv("HISTCHARS")) != NULL)
- t[1] = '\0';
- else
- t = "!";
- fprintf(fp, "echo \"%s", t);
- if ( (argc < 4) || (strcmp(argv[1], t) == 0) )
- fputs("-2", fp);
- else
- fputs(argv[1], fp);
- fputs(":q\" >! ", fp);
- fputs(argv[argc-2], fp);
- putc('\n', fp);
- fputs("ex +open ", fp);
- fputs(argv[argc-2], fp);
- putc('\n', fp);
- fputs("/usr/local/typein2 < ", fp);
- fputs(argv[argc-2], fp);
- putc('\n', fp);
- fclose(fp);
- exit(0);
- }
- ------------------ (end of redo.c, begining of typein2.c) --------------------
- #include <stdio.h>
- #include <sgtty.h>
-
- main(argc, argv)
- int argc;
- char **argv;
- {
- register char *cp;
- struct sgttyb stb, stb2;
- int pendin = LPENDIN;
- int c,i,j;
- char buff[2];
- char buff2[256];
-
- i=0;
- while ((c=getchar()) != EOF) {
- buff2[i++]=c;
- }
- ioctl(2, TIOCGETP, &stb);
- stb2 = stb;
- stb.sg_flags &= ~ECHO;
- ioctl(2, TIOCSETN, &stb);
- for (j=0; j<i; j++) {
- ioctl(2, TIOCSTI, &buff2[j]);
- putchar(buff2[j]);
- }
- ioctl(2, TIOCSETN, &stb2);
- ioctl(2, TIOCLBIS, &pendin);
- exit(0);
- }
- ---------------------------- (end of typein2.c) ------------------------
- A couple of oldies but still the simplest. cd and back aliases.
- alias back 'set back=$old; set old=$cwd; cd $back; unset back; dirs'
- alias cd 'set old=$cwd; chdir \,*; set prompt = "< $cwd:t > "'
-
- # this is a useful feature for vi
- setenv EXINIT 'map #1 Gi/\<A\>"add@a|map #2 1G\!Gvispell|set ai sw=3'
-
- You f2 key will run a file through the spell program, and put the words it
- doesn't find in the dictionary at the bottom of the file. Then typing f1 will
- cause it to delete the last line in the file, and search for the string in
- the rest of the file.
- ------------------------------ (source for vispell) -------------
- #! /bin/sh
- #
- tee /tmp/vis$$
- echo SpellingList
- spell /tmp/vis$$
- rm /tmp/vis$$
- ------------------------------- (end of vispell) ------------------
- Stuff from our /.cshrc file. psa lets you see what's going on in the system
- and what people are doing. Useful to see if people are hanging themselves.
- alias psa 'ps axu | sed "/getty/d" | sort -f | more'
-
- A simple alias to compile C programs (C adm.c expands to cc adm.c -o adm).
- alias C 'cc \,:* -o \,^:r'
-
- Useful to see what's going on in the system without those !@#$% bells.
- alias moremsgs "tr -d '\07' </usr/adm/messages | more"
-
- Like fg.
- alias pj '%-'
-
- A feature we use in our root .cshrc allowing indivual superusers to get their
- own enviornment. Useful if people want their own enviornment anywhere people
- share an account.
- if ( $user == "malloy" ) then
- source /t/malloy/.root
- endif
-
- --------------- (here's some things I picked up off the net) --------------
- From: ittvax!decvax!harpo!utah-cs!seismo!hao!denelcor!udenva!koala!aburt
- Date: Fri Aug 10 09:19:37 1984
- Subject: Perversions of source -h and other csh aliases
- Newsgroups: net.unix,net.unix-wizards,net.sources
-
- For your enjoyment, here are some interesting lunch hour csh aliases that
- I've created.
- {this is to slow, my version is a little faster}
- My personal favorite is the "history editor" -- allows you to edit
- you csh history. The alias:
-
- alias hed history -h !* > $hed; vi + $hed; source -h $hed
-
- will allow you to invoke 'vi' on your current history. (If, for
- instance, you typed in a long, tedious line and put in an extra space,
- among other things. The ^...^... mechanism to remove it can be quite
- tedious; 'hed's is easy.) Before anyone starts flaming that vi is too
- slow, history can do it (even if it's tough to type and you're prone to
- more typos doing the history), etc. -- if you don't like it, don't use it.
-
- Hed works particularly well if you move the command in question to the
- end of the file; then '!!' will execute it after you ZZ from vi. The
- only drawback to this is that it trashes your current event numbers
- (they get incremented during the source -h). By using 'hed 10' you
- only edit the last 10 entries in your history. A temp file, which I
- keep in $hed (set to /tmp/hed.$$ from my .login), is used each time for
- the history. Obvious changes to this are to use /tmp/hed.$$ straight
- out and add "rm /tmp/hed.$$" to the end of the list. If you don't like
- waiting for the rm, and your /tmp doesn't get cleared out periodically,
- put a # in front of the name to make it a disposable file.
-
- This may be slower than the vi/emacs mode in the ksh I keep hearing about, but
- it does give the functionality.
-
- A slight modification to 'hed'...
-
- alias hedf history -h !-0:1 > !-0:2; vi + !-0:2; source -h !-0:2
-
- allows you to specify a file to place the history into instead of a temp
- file.
-
- Another modification yields:
-
- alias heh echo \!* > $hed; vi + $hed; source -h $hed
-
- Which lets you edit then add to your history a specific history sequence.
- 'Heh' for History edit history.
-
- By inserting a 'source \!-0:2' before the source -h in any of the
- above has the effect of executing the commands AND placing them on the
- history list (from which we may conclude that 'alias so source \!* ;
- source -h \!*' is a useful item: it sources a file then places each line
- into your history).
-
- On rare occasions you'll have to put extra quotes/escapes around things
- when editing the temp file so it gets sourced right. Particularly around
- aliases with raw history substitutions in them (the \!* type of thing).
- The easiest is to try it first; if it fails, edit it again. After all,
- two 'hed's are better than one...
-
- Regarding the use of !-0:1 instead of !:1 for the first argument to the
- current command -- At least one csh is known to accept the former but not
- the latter. (The same csh dumps core (therefore logging you out) on receipt
- of the !# history selector. This is version 1.0 of 4.2BSD csh on a Sun-2.
- The 1.1 csh exhibits this behavior:
-
- echo a !#
- a echo a echo
-
- adding an extra arg 0 to the end. Is this common to other cshs out there?)
-
- So, for those whose csh's allow !:1, use that where I have !-0:1, etc.
-
- Another interesting perversion is an alias'd whereis:
-
- alias wheres ls -l \{'`echo $path | sed "s/ /,/g"`'\}/'`echo \!-0:1 | sed "s/^./[&]/"`'
-
- It does an ls -l on every file (passed as arg 1) in any directory on
- your current path. (No aliases, though adding an if at the front
- should do the trick.) The idea is to turn your $path list into a comma
- separates list, stick that between {}, and append / and arg 1 to that.
- Alas, if the file doesn't exist in one of the directories, you get
- errors from ls saying it doesn't exist in a given directory. So, arg 1
- is turned into a pattern, which is allowed to fail; the pattern is,
- e.g., foo --> [f]oo. So the second arg to ls only expands to the
- existing files.
- ---------------------------- (end of net article) ------------------------
- --
- Address: William P. Malloy, ITT Telecom, B & CC Engineering Group, Raleigh NC
- {ihnp4!mcnc, burl, ncsu, decvax!ittvax}!ittral!malloy
-
-
- ::::::::::::::
- awk/1
- ::::::::::::::
- Date: Wed, 19 Sep 84 11:44:38 CST
- From: David Chase <hplabs!ucbvax!rbbb@rice.ARPA>
- Subject: Re: Tricks, shell and awk scripts, csh aliases and the like
- To: resonex!nancy@BERKELEY
-
- Here is my favorite awk script. It turns a list of csrc's from memory
- errors on an 11/780 (with MS780C controller) into board and chip position
- for certain Mostek memory boards. This script saved me many headaches,
- because the tables in the appendix of the technical manual were hard to read
- and contained errors (errors that were noticed as deviations from a pattern
- when entering this script).
-
- #
- # Incredible sleazy awk file to attack memory errors
- # Included here is the local configuration, because some decoding
- # is board specific
- #
- BEGIN {
- # Boards understood by this program
-
- # mk4118 = mostek mk8016 fully populated with mk4116 chips (512k)
- known["mk4118"] = 1
-
- # mk4116 = mostek mk8016 half populated with mk4116 chips (256k)
- known["mk4116"] = 1
-
- # mk8016 = mostek mk8016 fully populated with mk4108 chips (256k)
- known["mk4108"] = 1
-
- # m8210 = DEC 256k board; don't know how to decode this guy (256k)
- known["m8210"] = 0
-
- # To add different boards, (i.e., not conforming to this system)
- # append to the "pos" map, and make "keys[<array><bank><new board>]"
- # reference the appended chip addresses.
-
- # Local configuration
- # boards is indexed by slot number
- boards["0"] = "m8210"
- boards["1"] = "m8210"
- boards["2"] = "m8210"
- boards["3"] = "m8210"
- boards["4"] = "m8210"
- boards["5"] = "m8210"
- boards["6"] = "mk4116"
- boards["7"] = "mk4116"
- boards["8"] = "mk4116"
- boards["9"] = "mk4116"
- boards["a"] = "mk4116"
- boards["b"] = "mk4116"
- boards["c"] = "mk4118"
- boards["d"] = "mk4118"
- boards["e"] = "mk4118"
- boards["f"] = "mk4118"
-
- # bit in error for a given CRC calculation
- # bits are identified by "u" (upper), "l" (lower), and "c" (check)
- # folowed by the bit number.
-
- bit["01"] = "c0"
- bit["02"] = "c1"
- bit["04"] = "c2"
- bit["08"] = "c3"
- bit["10"] = "c4"
- bit["19"] = "l01"
- bit["1a"] = "l02"
- bit["1c"] = "l04"
- bit["1f"] = "l07"
- bit["20"] = "c5"
- bit["38"] = "l00"
- bit["3b"] = "l03"
- bit["3d"] = "l05"
- bit["3e"] = "l06"
- bit["40"] = "c6"
- bit["49"] = "l09"
- bit["4a"] = "l10"
- bit["4c"] = "l12"
- bit["4f"] = "l15"
- bit["51"] = "l17"
- bit["52"] = "l18"
- bit["54"] = "l20"
- bit["57"] = "l23"
- bit["58"] = "l24"
- bit["5b"] = "l27"
- bit["5d"] = "l29"
- bit["5e"] = "l30"
- bit["68"] = "l08"
- bit["6b"] = "l11"
- bit["6d"] = "l13"
- bit["6e"] = "l14"
- bit["70"] = "l16"
- bit["73"] = "l19"
- bit["75"] = "l21"
- bit["76"] = "l22"
- bit["79"] = "l25"
- bit["7a"] = "l26"
- bit["7c"] = "l28"
- bit["7e"] = "l31"
- bit["80"] = "c7"
- bit["89"] = "u01"
- bit["8a"] = "u02"
- bit["8c"] = "u04"
- bit["8f"] = "u07"
- bit["91"] = "u09"
- bit["92"] = "u10"
- bit["94"] = "u12"
- bit["97"] = "u15"
- bit["98"] = "u16"
- bit["9b"] = "u19"
- bit["9d"] = "u21"
- bit["9e"] = "u22"
- bit["a8"] = "u00"
- bit["ab"] = "u03"
- bit["ad"] = "u05"
- bit["ae"] = "u06"
- bit["b0"] = "u08"
- bit["b3"] = "u11"
- bit["b5"] = "u13"
- bit["b6"] = "u14"
- bit["b9"] = "u17"
- bit["ba"] = "u18"
- bit["bc"] = "u20"
- bit["bf"] = "u23"
- bit["c1"] = "u25"
- bit["c2"] = "u26"
- bit["c4"] = "u28"
- bit["c7"] = "u31"
- bit["e0"] = "u24"
- bit["e3"] = "u27"
- bit["e5"] = "u29"
- bit["e6"] = "u30"
-
- # binary decoding of hex digits
-
- hex["0"] = "0000"
- hex["1"] = "0001"
- hex["2"] = "0010"
- hex["3"] = "0011"
- hex["4"] = "0100"
- hex["5"] = "0101"
- hex["6"] = "0110"
- hex["7"] = "0111"
- hex["8"] = "1000"
- hex["9"] = "1001"
- hex["a"] = "1010"
- hex["b"] = "1011"
- hex["c"] = "1100"
- hex["d"] = "1101"
- hex["e"] = "1110"
- hex["f"] = "1111"
-
- # chip positions for a given bit, collected across all possible
- # boards. Each group of 3 letters represents a position.
- # See keys for a better description.
-
- pos["u31"] = "i01h01g01f01"
- pos["u30"] = "e01d01c01b01"
- pos["u29"] = "i02h02g02f02"
- pos["u28"] = "e02d02c02b02"
- pos["u27"] = "i03h03g03f03"
- pos["u26"] = "e03d03c03b03"
- pos["u25"] = "i04h04g04f04"
- pos["u24"] = "e04d04c04b04"
- pos["u23"] = "a01a02a03a04"
- pos["u22"] = "i05h05g05f05"
- pos["u21"] = "e05d05c05b05"
- pos["u20"] = "i06h06g06f06"
- pos["u19"] = "e06d06c06b06"
- pos["u18"] = "i07h07g07f07"
- pos["u17"] = "e07d07c07b07"
- pos["u16"] = "i08h08g08f08"
- pos["u15"] = "e08d08c08b08"
- pos["u14"] = "a05a06a07a08"
- pos["u13"] = "i09h09g09f09"
- pos["u12"] = "e09d09c09b09"
- pos["u11"] = "i10h10g10f10"
- pos["u10"] = "e10d10c10b10"
- pos["u09"] = "i11h11g11f11"
- pos["u08"] = "e11d11c11b11"
- pos["u07"] = "i12h12g12f12"
- pos["u06"] = "e12d12c12b12"
- pos["u05"] = "a09a10a11a12"
- pos["u04"] = "i13h13g13f13"
- pos["u03"] = "e13d13c13b13"
- pos["u02"] = "i14h14g14f14"
- pos["u01"] = "e14d14c14b14"
- pos["u00"] = "i15h15g15f15"
- pos["c7"] = "e15d15c15b15"
- pos["c6"] = "i16h16g16f16"
- pos["c5"] = "e16d16c16b16"
- pos["c4"] = "a13a14a15a16"
- pos["l31"] = "i17h17g17f17"
- pos["l30"] = "e17d17c17b17"
- pos["l29"] = "i18h18g18f18"
- pos["l28"] = "e18d18c18b18"
- pos["l27"] = "i19h19g19f19"
- pos["l26"] = "e19d19c19b19"
- pos["l25"] = "i20h20g20f20"
- pos["l24"] = "e20d20c20b20"
- pos["l23"] = "a17a18a19a20"
- pos["l22"] = "i21h21g21f21"
- pos["l21"] = "e21d21c21b21"
- pos["l20"] = "i22h22g22f22"
- pos["l19"] = "e22d22c22b22"
- pos["l18"] = "i23h23g23f23"
- pos["l17"] = "e23d23c23b23"
- pos["l16"] = "i24h24g24f24"
- pos["l15"] = "e24d24c24b24"
- pos["l14"] = "a21a22a23a24"
- pos["l13"] = "i25h25g25f25"
- pos["l12"] = "e25d25c25b25"
- pos["l11"] = "i26h26g26f26"
- pos["l10"] = "e26d26c26b26"
- pos["l09"] = "i27h27g27f27"
- pos["l08"] = "e27d27c27b27"
- pos["l07"] = "i28h28g28f28"
- pos["l06"] = "e28d28c28b28"
- pos["l05"] = "a25a26a27a28"
- pos["l04"] = "i29h29g29f29"
- pos["l03"] = "e29d29c29b29"
- pos["l02"] = "i30h30g30f30"
- pos["l01"] = "e30d30c30b30"
- pos["l00"] = "i31h31g31f31"
- pos["c3"] = "e31d31c31b31"
- pos["c2"] = "i32h32g32f32"
- pos["c1"] = "e32d32c32b32"
- pos["c0"] = "a29a30a31a32"
-
- # keys is indexed by <board #> <bank> <board type>
- # and yields an index into a particular pos string
- # for example, board 0, bit 0 on an mk4118 board
- # gives a key of 4. If the bit in error was c0, then
- # the chip in error is a32 (from the 4th group of 3
- # in pos["c0"]. To change this map, create new keys
- # and (if necessary) append to the pos entries.
- # If it could be more than one chip, then use a multiple
- # digit key (e.g, see the keys for the mk4108 board).
-
- keys["00mk4118"] = "4"
- keys["20mk4118"] = "4"
- keys["40mk4118"] = "4"
- keys["60mk4118"] = "4"
- keys["80mk4118"] = "4"
- keys["a0mk4118"] = "4"
- keys["c0mk4118"] = "4"
- keys["e0mk4118"] = "4"
- keys["01mk4118"] = "2"
- keys["21mk4118"] = "2"
- keys["41mk4118"] = "2"
- keys["61mk4118"] = "2"
- keys["81mk4118"] = "2"
- keys["a1mk4118"] = "2"
- keys["c1mk4118"] = "2"
- keys["e1mk4118"] = "2"
- keys["10mk4118"] = "3"
- keys["30mk4118"] = "3"
- keys["50mk4118"] = "3"
- keys["70mk4118"] = "3"
- keys["90mk4118"] = "3"
- keys["b0mk4118"] = "3"
- keys["d0mk4118"] = "3"
- keys["f0mk4118"] = "3"
- keys["11mk4118"] = "1"
- keys["31mk4118"] = "1"
- keys["51mk4118"] = "1"
- keys["71mk4118"] = "1"
- keys["91mk4118"] = "1"
- keys["b1mk4118"] = "1"
- keys["d1mk4118"] = "1"
- keys["f1mk4118"] = "1"
-
- keys["00mk4116"] = "4"
- keys["20mk4116"] = "4"
- keys["40mk4116"] = "4"
- keys["60mk4116"] = "4"
- keys["80mk4116"] = "4"
- keys["a0mk4116"] = "4"
- keys["c0mk4116"] = "4"
- keys["e0mk4116"] = "4"
- keys["01mk4116"] = "2"
- keys["21mk4116"] = "2"
- keys["41mk4116"] = "2"
- keys["61mk4116"] = "2"
- keys["81mk4116"] = "2"
- keys["a1mk4116"] = "2"
- keys["c1mk4116"] = "2"
- keys["e1mk4116"] = "2"
- keys["10mk4116"] = "4"
- keys["30mk4116"] = "4"
- keys["50mk4116"] = "4"
- keys["70mk4116"] = "4"
- keys["90mk4116"] = "4"
- keys["b0mk4116"] = "4"
- keys["d0mk4116"] = "4"
- keys["f0mk4116"] = "4"
- keys["11mk4116"] = "2"
- keys["31mk4116"] = "2"
- keys["51mk4116"] = "2"
- keys["71mk4116"] = "2"
- keys["91mk4116"] = "2"
- keys["b1mk4116"] = "2"
- keys["d1mk4116"] = "2"
- keys["f1mk4116"] = "2"
-
- keys["00mk4108"] = "34"
- keys["20mk4108"] = "34"
- keys["40mk4108"] = "34"
- keys["60mk4108"] = "34"
- keys["80mk4108"] = "34"
- keys["a0mk4108"] = "34"
- keys["c0mk4108"] = "34"
- keys["e0mk4108"] = "34"
- keys["01mk4108"] = "12"
- keys["21mk4108"] = "12"
- keys["41mk4108"] = "12"
- keys["61mk4108"] = "12"
- keys["81mk4108"] = "12"
- keys["a1mk4108"] = "12"
- keys["c1mk4108"] = "12"
- keys["e1mk4108"] = "12"
- keys["10mk4108"] = "34"
- keys["30mk4108"] = "34"
- keys["50mk4108"] = "34"
- keys["70mk4108"] = "34"
- keys["90mk4108"] = "34"
- keys["b0mk4108"] = "34"
- keys["d0mk4108"] = "34"
- keys["f0mk4108"] = "34"
- keys["11mk4108"] = "12"
- keys["31mk4108"] = "12"
- keys["51mk4108"] = "12"
- keys["71mk4108"] = "12"
- keys["91mk4108"] = "12"
- keys["b1mk4108"] = "12"
- keys["d1mk4108"] = "12"
- keys["f1mk4108"] = "12"
- }
-
- {csrc = $1
- syndrome = substr (csrc,7,2)
- board = substr (csrc,2,1)
- boardtype = boards[board]
- bank = substr (hex [substr (csrc,3,1)],1,1)
- chips = bit[syndrome]
- if (known[boardtype])
- { where = pos[chips]
- key = keys[board bank boardtype]
- sbegin = 3 * (substr(key,1,1) - 1) + 1
- thechip = substr(where,sbegin,3)
- if (length(key) > 1)
- { sbegin = 3 * (substr(key,2,1) - 1) + 1
- thechip = thechip " and/or " substr(where,sbegin,3)
- }
- # printf "\n"
- # print "csrc = " csrc
- # print "syndrome = " syndrome
- # print "board = " board
- # print "bank = " bank
- # print "chips = " chips
- # print "locations = " where
- # print "boardtype = " boardtype
- # print "key = " key
- # print "the chip is " thechip
- errors[board "-" thechip]++;
- }
- else
- {
- # printf "\n"
- # print "Board type " boardtype " is unknown"
- errors["unknown-unknown"]++;
- }
- }
-
- END { for (i in errors) {
- n = split(i,list,"-");
- printf "%d errors for board %s, chip %s\n",errors[i],list[1],list[2];
- }
- }
-
-