#!/bin/bash
## You need
##     strings  tr  grep
## to run this script
## author: zLouD

err() {
    echo $1 >&2
}
# check if you passed a .pnd file
if -z "$1" ]; then
    err "Error: No input file specified; aborting"
    exit 1
fi

# check if you want to use an output file other than stdout
if -z "$2" ]; then
    err "Warning: No output file specified; using stdout"
else
    DIR=`dirname $2`
    OUTPUTFILE=`basename $2`
    #echo "$DIR/$OUTPUTFILE"
    err "Warning: Using '$OUTPUTFILE' for output"
fi

# main
# check if file exists and is readable
if -r "$1" ]; then
    # Is there any output?
    OUTPUT=$(strings "$1" | tr "\n" "\1" | grep -Eio '<\?xml.*</PXML>' | tr "\1" "\n")

    # check if the destination folder exists and is writable
    # using output file
    if -d "$DIR" ]; then

        if -n "$OUTPUT" ]; then
            strings "$1" tr "\n" "\1" grep -Eio '<\?xml.*</PXML>' tr "\1" "\n" >$DIR/$OUTPUTFILE
            err "Successfully dumped the PXML into '$2'"
            exit 0
        else
            err "No PXML found; aborting"
            exit 1
        fi
    fi
# using stdout, good for piping
    if -z "$OUTPUT" ]; then
        err "No PXML found; aborting"
        exit 1
    else
        strings "$1" tr "\n" "\1" grep -Eio '<\?xml.*</PXML>' tr "\1" "\n"
        exit 0
    fi

else
    err "Error: '$1' does not exists or is not readable; aborting"
    exit 1
fi