sjs@jcricket.ctt.bellcore.com (Stan Switzer) (10/04/88)
The following is a little ditty I threw together when I was learning NeWS. I'm particularly fond of "RunIt eye", but most people prefer "RunIt race". Please exercise discression with the "@" and "@@" options. Stan Switzer sjs@ctt.bellcore.com ---------------------------------------------- #!/bin/sh # # runit: animate an icon sequence across the bottom of the screen # # Copyright (C) 1988 by Stan Switzer. All rights reserved. # This program is provided for unrestricted use, provided that this # copyright message is preserved. There is no warranty, and no author # or distributer accepts responsibility for any damage caused by this # program. # # Stan Switzer sjs@ctt.bellcore.com # # This program is an elaboration on a theme by Randy Jackson. # It was one of my first NeWS programs, so don't look for any elegant # hacks in here. # # usage: # runit [options] [thing] # options: # +<n>, -<n> a bit faster or slower # -y<n> how high up the screen # @<system> run it on someone else's system # @@<system> a sneakier way to do the same # things: # horse (default), race, man, boy, eye, trek, and # other more boring things that you can find at # the end of the file THING=horse SPEED=0 SYS= Y= CMD=psh N=/usr/NeWS/bin for ARG do case "$ARG" in [+\-][0123456789]* ) SPEED="$ARG";; -y* ) Y="{ `expr "$ARG" : '-y\(.*\)'` } setY";; @@* ) SYS=`expr "$ARG" : '..\(.*\)'` CMD="rsh $SYS sh -c 'NEWSSERVER=\"`setnewshost $SYS`\" $N/psh'";; @* ) SYS=`expr "$ARG" : '.\(.*\)'`;; * ) THING="$ARG";; esac done if test "X$THING" = Xrace then for THING in "horse -y'1.5 in'" "horse -y'1 in' -2" \ "horse -y'2 in' +3" "horse -y'0 in' +7" \ "horse -y'.5 in' +3" "boy +10" do eval $0 $THING; sleep 1 done exit fi if test -z "$NEWSHOME"; then NEWSHOME=/usr/NeWS; fi case $PATH in */NeWS/bin ) ;; * ) PATH=$PATH:$NEWSHOME/bin; export PATH;; esac if test -n "$SYS" then if NEWSSERVER=`setnewshost $SYS` then export NEWSSERVER else exit 1 fi fi { cat <<-! ; echo "$Y $SPEED /$THING runit"; } | $CMD /fillbox {DefaultRootGrayOrColor setshade fill} def /runnergray DefaultRootGrayOrColor setshade currenthsbcolor exch pop exch pop .5 lt 1 0 ifelse def /setY { stopped { (bad Y spec) == exit } if /Y exch def } def /in { 72 mul } def /inch { 72 mul } def /cm { in 2.54 div } def /Y 4 def /X 0 def /intrst null def /delay { intrst null eq { /intrst createevent def intrst begin /Name /DelayOver def currentdict end dup expressinterest createevent copy begin /TimeStamp currenttime delayamt add def currentdict end sendevent } if awaitevent begin % /TimeStamp TimeStamp delayamt add def % Makes up for lost time /TimeStamp currenttime delayamt add def % Accepts its loss currentdict end sendevent } def /tostring { 1 string dup 0 icondict 5 -1 roll get put } def /onestep { % icon-string -> - dup /X X Xinc add def X Y moveto runnergray setgray show delay X Y moveto stringbbox 4 -2 roll rmoveto rect fillbox } def /steps { % [icon-strings] -> { onestep } forall } def /tostrings { [ exch //tostring forall ] } def /iconfont (Icon) findfont 12 scalefont def /runthing { % Iter [ iconnames ] delay Incr -> /Xinc exch def 6000 div /delayamt exch def gsave iconfont setfont tostrings exch { dup steps } repeat grestore } def /runit { % speedinc thing -> - dup runners exch known not { (unknown runner: ) print == pop } { runners exch get /icondesc exch def neg % negate speec inc icondesc 1 get add % add default speed /speed exch def getcanvasshape setpath pathbbox pop exch pop exch sub % frame width icondesc 0 get length icondesc 2 get mul div 1 add % repeat count icondesc 0 get speed icondesc 2 get { runthing } fork pop } ifelse } def /runners 100 dict def runners begin /horse [ [ /horse1 /horse2 /horse3 /horse4 /horse5 ] 10 8 ] def /man [ [ /man1 /man2 /man3 /man4 /man5 ] 10 3.5 ] def /boy [ [ /boy1 /boy2 /boy3 /boy4 ] 20 7 ] def /eye [ [ /eye1 /eye1 /eye2 /eye3 /eye4 /eye_bld3 /eye_bld2 /eye_bld1 /eye_bld2 /eye_bld3 /eye4 /eye3 /eye2 /eye1 ] 10 3 ] def /bulb [ [ /bulb ] 5 4 ] def /sun [ [ /client ] 10 3 ] def /rip [ [ /dead ] 10 3 ] def /trek [ [ /trek ] 6 4 ] def /logo [ [ /sun30 ] 10 3 ] def /biglogo [ [ /sun ] 10 3 ] def /bozo [ [ /no_bozos ] 10 3 ] def /nuke [ [ /nuke ] 10 3 ] def end ! # --- if anything follows this line, it is not part of the program ---