allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc) (08/25/89)
Posting-number: Volume 8, Issue 14 Submitted-by: wsinrobg@urc.tue.nl (Rob Gerth) Archive-name: wrap IBM is still firmly committed to Holerith cards as BIT/EARNnet users can testify. Here is a shell script that wraps long lines in a file so that they can be reconstituted by piping thru sh---see the comments in the script. This script uses sed and has been tested on SUNs and ULTRIX vaxen. The ULTRIX sed is buggy, so I had to rewrite the wrap script. The original unwrap script worked on both systems. In other words: there may be surprises. Enjoy, # Rob Gerth # # # # uucp: wsinrobg@eutrc3.urc.tue.nl | Eindhoven University of Technology # # bitnet: wsdcrobg@heitue5 | 5600 MB Eindhoven, The Netherlands # #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of shell archive." # Contents: wrap # Wrapped by wsinrobg@eutrc3 on Thu Aug 24 18:11:49 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'wrap' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'wrap'\" else echo shar: Extracting \"'wrap'\" \(2087 characters\) sed "s/^X//" >'wrap' <<'END_OF_FILE' X: !/bin/sh X# NAME X# wrap X# SYNOPSIS X# wrap [-nnn] [-s] [file] X# DESCRIPTION X# Wrap wraps lines to nnn chars (default 80): BITNET does not like X# lines longer than that. X# It reads file (standard input if no file is specified) and X# writes lines of specified maximal length to standard output, X# embedded in a shell script running of which restores the original. X# If file is specified, wrap checks if it is a shar file (by searching X# for the string "# This is a shell archive" at the start of a line) X# and, if so, adapts the surrounding shell script appropriately. X# Specifying -s makes wrap behave as if it were wrapping a shar file X# without checking. X# Recommended use: shar foo ... | wrap -s >bar X# to be restored with sh bar X# VERSION X# 1.1 X# BUGS X# This should of course be an option of shar. X# AUTHOR X# Rob Gerth, Eindhoven University of Technology X# wsinrobg@eutrc3.urc.tue.nl or WSDCROBG@HEITUE5.BITNET X# X# XFILE= XSHAR= XDEFAULT=79 XLEN=$DEFAULT XLINE= XCL="+" XLL="-" X Xfor i Xdo X case $i in X -[0-9] | -[0-9][0-9] | -[0-9][0-9][0-9]) LEN=`expr $i : '-\(.*\)'`;; X -s) SHAR=1;; X -*) echo "Usage: wrap [-nnn] [-s] [file]" 1>&2; exit 1;; X *) FILE="$i"; break;; X esac Xdone X Xtest \( -z "$SHAR" \) -a \( -n "$FILE" \) && X SHAR=`egrep '^# This is a shell archive' $FILE` X Xif test $LEN -eq 0 Xthen echo "Linelength ($LEN) set to default: `expr $DEFAULT + 1`" 1>&2; X LEN=$DEFAULT Xfi X XLINE=`yes | sed " X H X $LEN { g X s/\\n//g X y/y/./ X q X } X d" 2>/dev/null` X Xcat <<\EOF X: !/bin/sh X# Remove everything before the previous line and pipe through sh. X# XEOF Xif test "$SHAR" Xthen echo "{ sed '" Xelse echo "sed '" Xfi Xcat <<EOF X s/^$LL// X x X t last X /^$CL/ { X x X s/^$CL// X H X } X d X : last X /^$CL/ { X x X H X s/^.*$// X } X x X s/^$CL// X s/\n//g X' <<"EOF_CUT" XEOF X# X# ULTRIX sed has buggy code for the t function X# X#sed " X# : start X# h X# s/^\($LINE\)..*/$CL\1/p X# t large X# s/^/$LL/ X# b X# : large X# g X# s/^$LINE// X# t start X#" $FILE X# Xsed " X : start X h X s/^\($LINE\)..*/$CL\1/p X /^$CL$LINE/ !{ X s/^/$LL/ X b X } X g X s/^$LINE// X b start X" $FILE Xecho EOF_CUT Xtest "$SHAR" && echo '} | sh' END_OF_FILE if test 2087 -ne `wc -c <'wrap'`; then echo shar: \"'wrap'\" unpacked with wrong size! fi chmod +x 'wrap' # end of 'wrap' fi echo shar: End of shell archive. exit 0