#!/bin/sh
# All Rights Reserved. Copyright (C) 2003 Hitachi, Ltd.

usage() {
    echo "usage: car_tar [ -i executable-file ] [ -f ] [ -s | -S ]  [ core-file ]" 1>&2
    exit 1
}

car_mktemp() {
    if [ $# -ne 3 ]
    then
         echo car_tar: inner error! 1>&2
         return 1
    fi

    for line in `
        echo $1 $2 $3 | awk '{for (i = $2; i <= $3; i++)printf $1"\n", i}'`
    do
        if [ ! \( -f $line -o -d $line \) ]
        then
            echo $line
            return 0
        fi
    done

    echo car_tar: cannot create temporary name 1>&2
    return 1
}

put_header() {
    echo '#!/bin/sh'
    echo '# All Rights Reserved. Copyright (C) 2003 Hitachi, Ltd.'
    echo
    if [ x$FLAG_FULLPATH != xCAR_ON ]
    then
           cat << 'EOF'
car_mktemp() {
    if [ $# -ne 3 ]
    then
         echo car_tar: inner error! 1>&2
         return 1
    fi

    for line in `
        echo $1 $2 $3 | awk '{for (i = $2; i <= $3; i++)printf $1"\n", i}'` 
    do
        if [ ! \( -f $line -o -d $line \) ]
        then
            echo $line
            return 0
        fi
    done

    echo car_tar: cannot create temporary name 1>&2
    return 1
}

EOF
    fi
    echo 'CAR_FILES="'
    echo $CAR_FILES | tr ' ' '\n' | sed 's/$/ \\/'
    echo '"'
    echo
    echo CAR_DIRNAME=$CAR_DIRNAME
    echo 'mkdir $CAR_DIRNAME'
}

put_body() {
    if [ x$FLAG_FULLPATH = xCAR_ON ]
    then
        cat << 'EOF'
echo $CAR_FILES |
    tr ' ' '\n' | cut -d / -f 2| sort | uniq |
    while read line
    do
        ln -s /$line $CAR_DIRNAME/$line
    done

tar bchf 20 - `echo $CAR_FILES | tr ' ' '\n' |
    sed "s/^/$CAR_DIRNAME/"`
rm -rf $CAR_DIRNAME
EOF
    else
        cat << 'EOF'
for i in $CAR_FILES
do
    if [ -f $i ]
    then
        CAR_LIBNAME=`basename $i`
        if [ -L ${CAR_DIRNAME}/${CAR_LIBNAME} ]
        then
            CAR_LIBNAME=`car_mktemp ${CAR_LIBNAME}_%d 0 99`
        fi
        ln -s $i $CAR_DIRNAME/$CAR_LIBNAME
        echo $CAR_LIBNAME = $i >> $CAR_DIRNAME/filename.txt
    else
        echo car_tar: $i: file not found 1>&2
    fi
done

tar bchf 20 - $CAR_DIRNAME
rm -rf $CAR_DIRNAME
EOF
    fi
}

put_script() {
    put_header
    put_body
}

OLD_COLUMNS=$COLUMNS
COLUMNS=1024
export COLUMNS
CAR_ARG0=`ps -p$$ -f | tail -n 1  | awk '{ print $9}'`
COLUMNS=$OLD_COLUMNS
export COLUMNS

if [ x$CAR_ARG0 != x -a -f $CAR_ARG0 ]
then
    CAR_WDR=`dirname $CAR_ARG0`/
else
    CAR_WDR=$CAR_ARG0
fi
while [ $# -gt 0 ]
do
    case $1 in
    -i)
    if [ x$FLAG_INPUT != x ]
    then
        usage
    fi
        FLAG_INPUT="CAR_ON"
        shift
        if [ $# -eq 0 -o x`echo $1 | cut -b 1` = x- ]
        then
            usage
        else
            if [ -f $1 ]
            then
                CAR_AOUT="-i $1"
                shift
            else
                echo car_tar: $1: file not found 1>&2
                exit 1													#P60902
            fi
        fi
        ;;
    -f)
    if [ x$FLAG_FULLPATH != x ]
    then
        usage
    fi
        FLAG_FULLPATH="CAR_ON"
        shift
        ;;
    -s)
    if [ x$FLAG_SIZE != x -o x$FLAG_SCRIPT != x ]
    then
        usage
    fi
        FLAG_SIZE="CAR_ON"
        shift
        ;;
    -S)
        if [ x$FLAG_SIZE != x -o x$FLAG_SCRIPT != x ]
        then
            usage
        fi
        FLAG_SCRIPT="CAR_ON"
        shift
        ;;
    *)
        if [ x$CAR_COREFILE != x ]
        then
            usage
        fi
        if [ -f $1 ]
        then
            CAR_COREFILE=$1
            shift
        else
            echo car_tar: $1: file not found 1>&2
            exit 1
        fi
        ;;
    esac
done

CAR_FILENAME=${CAR_COREFILE-core}

if [ ! -f $CAR_FILENAME ]
then
    echo car_tar: $CAR_FILENAME: file not found 1>&2
    exit 1
fi

CAR_OLDLAND=LANG
LANG=C
export LANG

case `uname` in
    SunOS|HP-UX)
        month_file=`ls -l $CAR_FILENAME | awk '{print $6}' |
            awk 'BEGIN {
                m["Jan"]="01";m["Feb"]="02";m["Mar"]="03";
                m["Apr"]="04";m["May"]="05";m["Jun"]="06";
                m["Jul"]="07";m["Aug"]="08";m["Sep"]="09";
                m["Oct"]="10";m["Nov"]="11";m["Dec"]="12"
            }
            { print m[$1] }'`

        ls -l $CAR_FILENAME | awk '{print $8}' | grep : > /dev/null
        CAR_FLAG=$?

        CAR_IFS="$IFS"
        IFS=" :"
        export IFS

        if [ $CAR_FLAG -eq 0 ]
        then
            year=`date +%Y`
            month=`date +%m`
            year=`echo $month_file $month $year |
                awk '{
                    if ($1 > $2) {
                        s=$3
                        s-=1
                        print s
                    }
                    else {print $3}
                }'`
            CAR_DIRNAME=`
            ls -l $CAR_FILENAME |
                (read dummy1 dummy2 dummy3 dummy4 dummy5 month day hour min dummy6;\
                echo car$year$month_file$day$hour$min)`
        else 
            CAR_DIRNAME=`
            ls -l $CAR_FILENAME |
                (read dummy1 dummy2 dummy3 dummy4 dummy5 month day year dummy6;\
                echo car$year$month_file${day}0000)`
        fi
        IFS="$CAR_IFS"
        ;;
    Linux)
        CAR_DIRNAME=car`find $CAR_FILENAME -printf %TY%Tm%Td%TH%TM`
        ;;
    *)
        echo "car_tar: `uname`: not supported platform" 1>&2
        exit 1
        ;;
esac
    

LANG=$CAR_OLDLANG
export LANG

CAR_FILES=`${CAR_WDR}car $CAR_AOUT $CAR_FILENAME`  || exit 1

export FLAG_FULLPATH CAR_FILES CAR_DIRNAME

if [ x$FLAG_SCRIPT = xCAR_ON ]
then
    put_script
else
    FILENAME=`car_mktemp car_exec%02d 0 99`
    put_script > $FILENAME

    if [ x$FLAG_SIZE = xCAR_ON ]
    then
        sh $FILENAME | wc -c
    else
        sh $FILENAME
    fi
    rm $FILENAME
fi
