[comp.sources.misc] v05i058: A safe comp.mail.maps saver

gore@eecs.UUCP (Jacob Gore) (11/26/88)

Posting-number: Volume 5, Issue 58
Submitted-by: "Jacob Gore" <gore@eecs.UUCP>
Archive-name: savemap.nawk

[Wants the "new" awk.  I'll probably translate it myself later.  ++bsa]

# This is a shell archive.  Remove anything before this line,
# then unpack it by saving it in a file and typing "sh file".
#
# Wrapped by gore at gamma.eecs.nwu.edu on Fri Nov 25 19:32:52 1988
#
# This archive contains:
#	README	savemap	
#

echo x - README
cat >README <<'@EOF'
This sh/awk script can be used to safely save map shars posted to
comp.mail.maps in some directory.  It does not execute the shars, but
extracts the map files from them.

It has hard-wired "knowledge" of what the current official map shars look
like.  On the down side, this means that should the format ever change,
this script will probably have to be changed too.  On the up side, the
worst some joker can do is overwrite your maps with junk or with fake maps.
The script does not even attempt to verify the poster of the shar.

It uses the new awk (as described in whe A., W. & K. book).

To configure it, modify the "Customization:" paragraph near the beginning
of the script.

To use it, just pipe an article from comp.mail.maps into it.  This can be
done automatically, by having your system send news to a fake host (such as
"uumap") and use this script as the command for transmission.

Jacob Gore				Gore@EECS.NWU.Edu
Northwestern Univ., EECS Dept.		{oddjob,gargoyle,att}!nucsrl!gore
@EOF

chmod 644 README

echo x - savemap
cat >savemap <<'@EOF'
#!/bin/sh -
PATH=/bin
IFS=" 	
"

# Saves a map posting from comp.mail.maps in directory MapDir (specified
# below).
#
# Jacob Gore <gore@eecs.nwu.edu> 88/11/25

# Customization:
MapDir=/usr/uumap
Awk=/usr/local/bin/nawk
Cd=cd
Mv=/bin/mv
Rm=/bin/rm

TMP=tmp$$; export TMP

$Cd $MapDir

destination=`$Awk '

BEGIN {
	while ($1 != "cat" && $2 != "<<" && $4 != ">") {
		getline;
	}
	split($3, tmp_array, "'\''");
	end_marker = tmp_array[2];
	destination = $5;
	"echo $TMP" | getline temp_file
	exit_status = 1;
}

$1 == end_marker {
	print destination
	exit_status = 0;
	exit(exit_status);
}

{
	print > temp_file
}

END {
	exit(exit_status);
}
'`
status=$?

if [ $status -eq 0 ]
then
	$Mv -f $TMP $destination
	exit 0

else
	$Rm -f $TMP
	exit $status
fi
@EOF

chmod 755 savemap

exit 0