Current Path : /bin/ |
Current File : //bin/precat |
#!/bin/sh # Copyright (c) 2004 # Kevin Atkinson # # Permission to use, copy, modify, distribute and sell this software # and its documentation for any purpose is hereby granted without # fee, provided that the above copyright notice appear in all copies # and that both that copyright notice and this permission notice # appear in supporting documentation. Kevin Atkinson makes no # representations about the suitability of this software for any # purpose. It is provided "as is" without express or implied # warranty. cmd=`basename "$0"` warn () { if test -z "$quiet"; then echo "$cmd: $1" >&2 ; fi } error () { echo "$cmd: $1" >&2 errors=t } zip2 () { case $1 in d) prezip-bin -d "$cmd: $2" ;; z) if test "$sort" then LC_COLLATE=C sort -u | prezip-bin -z "$cmd: $2" else prezip-bin -z "$cmd: $2" fi ;; esac if test $? -eq 0 then return 0 else errors=t return 1 fi } zip () { if test -e "$3" -a ! "$force" then error "Output file $3 already exists." return 1 fi zip2 $1 "$2: " < "$2" > "$3" if test $? -eq 0 then if test -z "$keep"; then rm "$2"; fi return 0 else rm "$3" return 1 fi } case $cmd in prezip) mode=z ;; preunzip) mode=d ;; precat) mode=d; stdout=t ;; *) mode=h ;; esac num=0 for p do case $p in --*) parm=`expr "x$p" : '...\(.*\)'` case $parm in decompress ) mode=d ;; compress ) mode=z ;; keep ) keep=t ;; force ) force=t ;; stdout ) stdout=t ;; sort ) sort=t ;; nocwl ) nocwl=t ;; license ) mode=L ;; version ) mode=V ;; help ) mode=h ;; quiet ) quiet=t ;; * ) error "invalid option -- $parm";; esac ;; -* ) p=`expr "x$p" : '..\(.*\)'` while test "$p" do parm=`expr "$p" : '\(.\)'` p=`expr "$p" : '.\(.*\)'` case $parm in d ) mode=d ;; z ) mode=z ;; k ) keep=t ;; f ) force=t ;; c ) stdout=t ;; s ) sort=t ;; S ) nocwl=t ;; L ) mode=L ;; V ) mode=V ;; h ) mode=h ;; q ) quiet=t ;; * ) error "invalid option -- $parm";; esac done ;; * ) num=`expr $num + 1` ;; esac done if test "$errors" then mode=h fi case $mode in h ) prezip-bin -V cat <<EOF usage $0 [-dzhLV] [-cfksSq] [file ...] -h --help display help -d --decompress force decompression -z --compress dorce compression -L --license display software license -V --version display version -c --stdout decompress to standard output -f --force force -k --keep keep input files -s --sort sort and remove duplicates before compressing -S --nocwl do not rename .wl suffix to .cwl (use .wl.pz instead) -q --quiet suppress all warnings If invoked as "prezip" the default action is to compress. as "preunzip" the default action is to decompress. as "precat" the default action is to decompress to stdout. If no file names are given then prezip will compress or decompress from the standard input to the standard output. Short flags can be combined so that "-c -s" is the same as "-cs". Prezip is _not_ a general purpose compressor. It should only be used on sorted word lists or other similar text files. It will likely _increase_ the size of binary data. EOF ;; L ) prezip-bin -V cat <<EOF Copyright (c) 2004 Kevin Atkinson Permission to use, copy, modify, distribute and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. Kevin Atkinson makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. EOF ;; V ) prezip-bin -V ;; d | z ) if test $num -gt 0 then for f do case $f in -* ) ;; * ) if test \( -f "$f" -a ! -L "$f" \) \ -o \( \( "$stdout" -o "$force" \) -a -L "$f" \) then if test "$stdout" then zip2 $mode "$f: " < "$f" else case $mode in d ) dir=`dirname "$f"` file=`basename "$f"` base=`basename "$f" .pz` base2=`basename "$f" .cwl` if test "$file" != "$base" then out="$dir/$base" zip d "$f" "$out" elif test "$file" != "$base2" then out="$dir/$base2.wl" zip d "$f" "$out" elif test "$force" then out="$f.out" warn "can't guess original name - using \"$out\"" zip d "$f" "$out" else warn "$f does not end in .pz or .cwl - ignored" fi ;; z ) dir=`dirname "$f"` file=`basename "$f"` base=`basename "$f" .wl` if test "$nocwl" -o "$file" = "$base" then zip z "$f" "$f.pz" else zip z "$f" "$dir/$base.cwl" fi ;; esac fi elif test -e "$f" then warn "$f is not a regular file - ignored" else error "$f: No such file" fi ;; esac done else case $mode in d ) zip2 d ;; z ) zip2 z ;; esac fi ;; esac if test "$errors" then exit 1 else exit 0 fi