#!/bin/sh ## Copyright (C) 2003 Commonwealth Scientific and Industrial Research ## Organisation (CSIRO) Australia ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## - Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## - Redistributions in binary form must reproduce the above copyright ## notice, this list of conditions and the following disclaimer in the ## documentation and/or other materials provided with the distribution. ## ## - Neither the name of CSIRO Australia nor the names of its ## contributors may be used to endorse or promote products derived from ## this software without specific prior written permission. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ## ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ## PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ORGANISATION OR ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ## PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ## PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ## LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ## NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ## SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. version () { echo >&2 "oggz-diff version "1.1.1 exit 1 } usage () { echo >&2 "oggz-diff, diff oggz-dumps of two Ogg files." echo >&2 echo >&2 "Usage: oggz-diff [options] [OGGZDUMP_OPTIONS] [DIFF_OPTIONS] file1.ogg file2.ogg" echo >&2 echo >&2 "options: [--verbose] [-v | --version] [-h | --help]" echo >&2 echo >&2 "Supported oggz-dump and diff options:" echo >&2 echo >&2 "OGGZDUMP_OPTIONS: [-b | --binary] [-x | --hexadecimal]" echo >&2 " [-O | --hide-offset] [-S | --hide-serialno] [-G | --hide-granulepos]" echo >&2 " [-P | --hide-packetno] [-s serialno | --serialno serialno]" echo >&2 " [-c content-type | --content-type content-type]" echo >&2 echo >&2 "DIFF_OPTIONS: [-q | --brief] [-C NUM | --context[=NUM]]" echo >&2 " [-u | -U NUM | --unified[=NUM]] [-e | -ed] [--normal] [--rcs]" echo >&2 " [-y | --side-by-side] [-l | --paginate]" echo >&2 exit 1 } GETOPTEST=`getopt --version` case $GETOPTEST in getopt*) # GNU getopt GETOPTARGS="-l verbose -l version -l brief -l context:: -l unified:: -l ed -l normal -l rcs -l side-by-side -l paginate -l binary -l hexadecimal -l serialno: -l content-type: -l hide-offset -l hide-serialno -l hide-granulepos -l hide-packetno -l help -- +qC:uU:eylbxs:c:OSGPhv" QARGS="--verbose --version --brief --context --unified --ed --normal --rcs --side-by-side --paginate --binary --hexadecimal --serialno --content-type --hide-offset --hide-serialno --hide-granulepos --hide-packetno --help -q -C -u -U -e -y -l -b -x -s -c -O -S -G -P -h -v" ;; *) # POSIX getopt ? GETOPTARGS="qC:uU:eylbxs:c:OSGPhv" QARGS="-q -C -u -U -e -y -l -b -x -s -c -O -S -G -P -h -v" ;; esac # First check for -? option if test "X$1" = "X-?"; then exit 0 fi TEMP=`getopt $GETOPTARGS "$@"` if test "$?" != "0"; then usage fi eval set -- "$TEMP" DIFFOPTS="-w" # -w, --ignore-all-space DUMPOPTS="" VERBOSE="" while test "X$1" != "X--"; do case "$1" in -q|--brief) DIFFOPTS=$DIFFOPTS" -q" ;; -C) shift DIFFOPTS=$DIFFOPTS" -C $1" ;; --context) shift if test "x$1" = "x"; then DIFFOPTS=$DIFFOPTS" --context" else DIFFOPTS=$DIFFOPTS" --context=$1" fi ;; -u) DIFFOPTS=$DIFFOPTS" -u" ;; -U) shift DIFFOPTS=$DIFFOPTS" -U $1" ;; --unified) shift if test "x$1" = "x"; then DIFFOPTS=$DIFFOPTS" --unified" else DIFFOPTS=$DIFFOPTS" --unified=$1" fi ;; -e|--ed) DIFFOPTS=$DIFFOPTS" -e" ;; --normal) DIFFOPTS=$DIFFOPTS" --normal" ;; --rcs) DIFFOPTS=$DIFFOPTS" --rcs" ;; -y|--side-by-side) DIFFOPTS=$DIFFOPTS" -y" ;; -l|--paginate) DIFFOPTS=$DIFFOPTS" -l" ;; -b|--binary) DUMPOPTS=$DUMPOPTS" -b" ;; -x|--hexadecimal) DUMPOPTS=$DUMPOPTS" -x" ;; -s|--serialno) shift DUMPOPTS=$DUMPOPTS" -s $1" ;; -c) shift DUMPOPTS=$DUMPOPTS" -c $1" ;; -O|--hide-offset) DUMPOPTS=$DUMPOPTS" -O" ;; -S|--hide-serialno) DUMPOPTS=$DUMPOPTS" -S" ;; -G|--hide-granulepos) DUMPOPTS=$DUMPOPTS" -G" ;; -P|--hide-packetno) DUMPOPTS=$DUMPOPTS" -P" ;; --verbose) VERBOSE="y" ;; -v|--version) version ;; -h|--help) usage ;; esac shift done # Check that all options parsed ok if test "x$1" != "x--"; then usage fi shift #get rid of the '--' if test "x$1" = "x"; then usage fi if test "x$2" = "x"; then usage fi if test "x$VERBOSE" != "x"; then echo >&2 "OGGZDUMP_OPTIONS: " $DUMPOPTS echo >&2 "DIFF_OPTIONS: " $DIFFOPTS fi FIFO1="${TMPDIR:-/tmp}/`basename $1`.dump-1-$$" FIFO2="${TMPDIR:-/tmp}/`basename $2`.dump-2-$$" exec 5>$FIFO1 exec 6>$FIFO2 oggz-dump $DUMPOPTS $1 >&5 if test "$?" != "0"; then exit 1 fi oggz-dump $DUMPOPTS $2 >&6 if test "$?" != "0"; then exit 1 fi diff $DIFFOPTS $FIFO1 $FIFO2 ret=$? rm $FIFO1 $FIFO2 exit $ret