#!/bin/bash

function usage {
    echo "Usage: ${0##*/} [options] [--] FILES..."
    echo
    echo "Options:"
    echo "      -p  Add blank lines before beginning. Useful for"
    echo "          appending to the end of files."
    echo "    -<N>  Add N blank lines between files (and before"
    echo "          beginning if \`-p' is set). N must be 0-9."
    echo "      -h  Display this help message"
}

prefix=false
nlines=5
while getopts :p0123456789h OPT; do
    case $OPT in
        p)
            prefix=true
            ;;
        [0-9])
            nlines=$OPT
            ;;
        h)
            usage
            exit 0
            ;;
        *)
            usage
            exit 2
    esac
done
shift $(( OPTIND-1 ))
OPTIND=1

if [[ ! $1 ]]; then
    usage
    exit 2
fi

function addbreak {
    local i

    for (( i=0; i<nlines; i++ )); do
        echo
    done
}

function addline {
    local filename
    filename=${1-}
    echo -n '########'
    # print number of hashes equal to length of filename
    for c in `seq ${#filename}`; do
        echo -n '#'
    done
    echo '########'
}

function addheader {
    local filename
    filename=$1

    addline "$filename"
    echo "#       $filename"
    addline "$filename"
}

function addfooter {
    local filename
    filename=$1

    addline "$filename"
    echo "#   end of $filename"
    addline "$filename"
}

$prefix  &&  addbreak

while [[ -n $1 ]]; do
    filename=$1
    shift

    addheader "$filename"
    cat "$filename"
    echo
    addfooter "$filename"

    if [[ $1 ]]; then
        addbreak
    fi
done
