#!/bin/sh

ascii='
Dec Hex    Dec Hex    Dec Hex  Dec Hex  Dec Hex  Dec Hex   Dec Hex Dec Hex
 0 00 NUL  16 10 DLE  32 20    48 30 0  64 40 @  80 50 P   96 60 `  112 70 p
 1 01 SOH  17 11 DC1  33 21 !  49 31 1  65 41 A  81 51 Q   97 61 a  113 71 q
 2 02 STX  18 12 DC2  34 22 "  50 32 2  66 42 B  82 52 R   98 62 b  114 72 r
 3 03 ETX  19 13 DC3  35 23 #  51 33 3  67 43 C  83 53 S   99 63 c  115 73 s
 4 04 EOT  20 14 DC4  36 24 $  52 34 4  68 44 D  84 54 T  100 64 d  116 74 t
 5 05 ENQ  21 15 NAK  37 25 %  53 35 5  69 45 E  85 55 U  101 65 e  117 75 u
 6 06 ACK  22 16 SYN  38 26 &  54 36 6  70 46 F  86 56 V  102 66 f  118 76 v
 7 07 BEL  23 17 ETB  39 27 '\''  55 37 7  71 47 G  87 57 W  103 67 g  119 77 w
 8 08 BS   24 18 CAN  40 28 (  56 38 8  72 48 H  88 58 X  104 68 h  120 78 x
 9 09 HT   25 19 EM   41 29 )  57 39 9  73 49 I  89 59 Y  105 69 i  121 79 y
10 0A LF   26 1A SUB  42 2A *  58 3A :  74 4A J  90 5A Z  106 6A j  122 7A z
11 0B VT   27 1B ESC  43 2B +  59 3B ;  75 4B K  91 5B [  107 6B k  123 7B {
12 0C FF   28 1C FS   44 2C ,  60 3C <  76 4C L  92 5C \\  108 6C l  124 7C |
13 0D CR   29 1D GS   45 2D -  61 3D =  77 4D M  93 5D ]  109 6D m  125 7D }
14 0E SO   30 1E RS   46 2E .  62 3E >  78 4E N  94 5E ^  110 6E n  126 7E ~
15 0F SI   31 1F US   47 2F /  63 3F ?  79 4F O  95 5F _  111 6F o  127 7F DEL'

isInt(){
    if echo "$1" | grep -q -e "^[0-9][0-9]*$" ; then
        return 0
    else
        return 1
    fi
}

caltxt(){
    cal -y "$1" |
        cowsay  -n |
        sed 's/^/      /'

    tr -dc '\\/' </dev/urandom |
        head -c 77

    echo "$ascii"
}

help(){
    prog="$(basename "$0")"
    echo "'$prog' prints to the terminal a 'cowsay' calendar of the current year + an ASCII table."
    echo "It requires 'cowsay'."
    echo ""
    echo "USAGE: $prog [OPTIONS]"
    echo ""
    echo "OPTIONS:"
    echo "--pdf Prints a 'pdf' file to stdout. Requires 'paps'."
    echo "--year <YEAR>, -y <YEAR> Changes the selected year."
    echo "--help, -h Shows this help and exits."
    echo ""
    echo "Examples:"
    echo "  # Prints the calendar:"
    echo "      $prog"
    echo "  # Creates a pdf calendar:"
    echo "      $prog --pdf > calendar.pdf"
    echo "  # Prints the calendar for the year 1987:"
    echo "      $prog --year 1987"
    echo "  # Creates a pdf calendar for the year 1987:"
    echo "      $prog --year 1987 --pdf > calendar1987.pdf"
    echo "  # Prints this help:"
    echo "      $prog --help"
}

pdf="false"
year="$(date +"%Y")"

while [ "0" != "$#" ]; do
    case "$1" in
        "--pdf")
            pdf="true"
            ;;
        "--year"|"-y")
            shift
            year="$1"
            if ! isInt "$year"; then
                help 1>&2
                exit 1
            fi
            ;;
        "--help"|"-h")
            help
            exit 0
            ;;
        *)
            help 1>&2
            exit 1
            ;;
    esac
    shift
done

if [ "$pdf" = "true" ]; then
    caltxt "$year" |
        sed 's/^/    /' |
        paps --font="Monospace 10" |
        ps2pdf - -
else
    caltxt "$year"
fi
