From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from fw.softwell.se ([193.15.236.45]) by hawkwind.utcs.utoronto.ca with SMTP id <25860>; Wed, 1 Mar 2000 13:08:32 -0500 Received: from trillian.softwell.se (IDENT:bengt@trillian.softwell.se [192.42.172.11]) by fw.softwell.se (8.9.3/8.9.3) with ESMTP id QAA10613; Wed, 1 Mar 2000 16:03:12 +0100 Received: (from bengt@localhost) by trillian.softwell.se (8.8.7/8.8.7) id QAA08517; Wed, 1 Mar 2000 16:03:13 +0100 From: Bengt Kleberg Message-Id: <200003011503.QAA08517@trillian.softwell.se> To: sam-fans@hawkwind.utcs.toronto.edu, wilyfans@jli.com Subject: ssam, script Date: Wed, 1 Mar 2000 10:04:04 -0500 #! /usr/local/plan9/bin/rc cmd_name = $0 fn usage { echo Usage: $cmd_name [-n] [-e script ] [-f sfile ] [ script ] [--] [ file ] ... } # directory for saving all text to be edited # use /tmp or TMPDIR if set tmp_dir=/tmp if (! ~ $TMPDIR ()) { tmp_dir=$TMPDIR } # file for saving all text to be edited tmp_file = $tmp_dir/ssam.$pid.XXXXXXXX # if OpenBSD mktemp exist, use it if (test -x /usr/bin/mktemp) { tmp_file = `{/usr/bin/mktemp $tmp_file} } # clean up on signals fn sighup { rm $tmp_file exit 3 } fn sigint { rm $tmp_file exit 3 } fn sigquit { rm $tmp_file exit 3 } # default values for variables printall = 1 edit_script = () edit_type = () # parse command line arguments while ({~ $1 -*} && {! ~ $1 --}) { switch ($1) { case -n printall = 0 shift case -e shift edit_script = ($edit_script $1) edit_type = ($edit_type e) shift case -f shift if (test -f $1) { edit_script = ($edit_script $1) edit_type = ($edit_type f) shift } else { echo $0: No such sfile: $1 exit 2 } case * usage exit 1 } } # anything left that is not a file is a (single) edit script if (! test -f $1) { edit_script = ($edit_script $1) edit_type = ($edit_type e) shift } # anything left is file(s) to be edited, otherwise use stdin if (~ $#* 0) { cat >> $tmp_file } else { cat $* >> $tmp_file } # send edit scripts to sam and contents of edit files # then print contents, unless -n argument # quit (twice since file has probably not been saved) i = 1 max = `{expr $#edit_script + 1} { while (! ~ $i $max) { switch ($edit_type($i)) { case e echo $edit_script($i) case f cat $edit_script($i) } i = `{expr $i + 1} } if (~ $printall 1) { echo '1,$ p' } echo q echo q } | sam -d $tmp_file >[2] /dev/null #} rm $tmp_file exit 0