#!/bin/bash

# Blu-Ray archival
# by Marc, October 2019 updates and corrections from November 2017

# There's no magic in this; you have to keep this script updated
# with the data that needs to be burned and what volumes they are
# to be contained on.

# For diagnostic and pipelining purposes, this script separates
# the preparation and burning functions. You can do everything
# serially in one bash instance, or you can prep one disc while
# burning an already-prepped disc with two bash instances,
# provided you have enough scratch space for both images.

# These directories can be tweaked locally.
BASEDIR=/media/me/2017.001/scans
BIGTEMPDIR=/data

# Documentation.
help () {
    cat <<END-OF-HELP
Usage:

    $0 help
    $0 prep DISC
    $0 burn DISC
    $0 free DISC
    $0 all  DISC

where DISC is exactly one of:

    25gb.01  non-image files and JPEG folders 001 thru 045
    25gb.02  PNG folders 035 thru 041
    25gb.03  PNG folders 042 thru 048
    25gb.04  PNG folders 049, 061 thru 065, 067 thru 070
    25gb.05  PNG folders 071 thru 072, 085 thru 089
    25gb.06  PNG folders 090, 133 thru 138, wow
    25gb.07  CR2 folders 031, 032, 153
    25gb.08  CR2 folders 034, 050, 051
    25gb.09  CR2 folders 073, 074
    25gb.10  CR2 folders 075, 076
    25gb.11  CR2 folders 077, 103, 152
    25gb.12  CR2 folders 107, 108, 151
    25gb.13  CR2 folders 033, 156
    25gb.14  CR2 folders 154, 155
    25gb.15  CR2 folders 078, cb
    25gb.16  CR2 folders 082 thru 084
    25gb.17  CR2 folders 104 thru 106
    25gb.18  CR2 folders 060, 079, 080
    25gb.19  CR2 folders 028, 081
    25gb.20  CR2 folders 025, 026
    25gb.21  CR2 folders 027, 029, sp
    25gb.22  CR2 folders 030, 052
    25gb.23  CR2 folders list1, list2
    25gb.24  CR2 folders 012, 053, 054
    25gb.25  CR2 folders 010, 011, 092
    25gb.26  CR2 folders 091, 093, 095
    25gb.27  CR2 folders 007, 008
    25gb.28  CR2 folders 009, 096
    25gb.29  CR2 folders 094, 100, 102
    25gb.30  CR2 folders 097, 098, 099
    25gb.31  CR2 folders 109, 110
    25gb.32  CR2 folders 111, 112
    25gb.33  CR2 folders 101, 113, 127
    25gb.34  CR2 folders 114, 130
    25gb.35  CR2 folders 128, 129
    25gb.36  CR2 folders 131, 132
    25gb.37  CR2 folders 125, 126
    25gb.38  CR2 folders 123, 124
    25gb.39  CR2 folders 121, 122
    25gb.40  CR2 folders 116, 117
    25gb.41  CR2 folders 115, 119
    25gb.42  CR2 folders 118, 120
    25gb.43  CR2 folders 139, 140
    25gb.44  CR2 folders 141, 142
    25gb.45  CR2 folders 143, 144
    25gb.46  CR2 folders 001, 002
    25gb.47  CR2 folders 003, 004
    25gb.48  CR2 folders 005, 006
    25gb.49  CR2 folders 019, 020
    25gb.50  CR2 folders 021, 022
    25gb.51  CR2 folders 023, 024
    25gb.52  PNG folders ddd, 066, 163, 164, 165, 166, 167
             CR2 folder  157
    25gb.53  CR2 folders 158, 159
    25gb.54  CR2 folders 160, 161, 162
    25gb.55  CR2 folders 013, 014
    25gb.56  CR2 folders 015, 016
    25gb.57  CR2 folders 017, 018
    25gb.58  CR2 folders 055, 056, 057
    25gb.59  CR2 folders 058, 059
    25gb.60  CR2 folders 146, 147
    25gb.61  CR2 folders 145, 148
    25gb.62  CR2 folders 149, 150
    25gb.63  JPG folders 046 thru 110
    25gb.64  JPG folders 111 thru 167, cb, ddd, list1, list2, sp, tests, wow

    100gb.01  folders 001 thru 008
    100gb.02  folders 009 thru 017
    100gb.03  folders 018 thru 026
    100gb.04  folders 027 thru 042
    100gb.05  folders 043 thru 058
    100gb.06  folders 059 thru 078
    100gb.07  folders 079 thru 094
    100gb.08  folders 095 thru 106
    100gb.09  folders 107 thru 115
    100gb.10  folders 116 thru 124
    100gb.11  folders 125 thru 138
    100gb.12  folders 139 thru 149
    100gb.13  folders 150 thru 160
    100gb.14  folders 161 thru 167, cb, ddd, list1, list2, sp, wow
    100gb.15  old scans, misc, and JPEG previews of ALL folders

    These assignments were last audited per this script in October 2019.

END-OF-HELP
    exit 1
}

catalog () {
    while read path shortdisc longdisc; do
        if [[ $1 == $shortdisc || $1 == $longdisc ]]; then
            echo $path
        fi
    done <<ENDOFINV
cr2/folder.001 25gb.46 100gb.01
cr2/folder.002 25gb.46 100gb.01
cr2/folder.003 25gb.47 100gb.01
cr2/folder.004 25gb.47 100gb.01
cr2/folder.005 25gb.48 100gb.01
cr2/folder.006 25gb.48 100gb.01
cr2/folder.007 25gb.27 100gb.01
cr2/folder.008 25gb.27 100gb.01
cr2/folder.009 25gb.28 100gb.02
cr2/folder.010 25gb.25 100gb.02
cr2/folder.011 25gb.25 100gb.02
cr2/folder.012 25gb.24 100gb.02
cr2/folder.013 25gb.55 100gb.02
cr2/folder.014 25gb.55 100gb.02
cr2/folder.015 25gb.56 100gb.02
cr2/folder.016 25gb.56 100gb.02
cr2/folder.017 25gb.57 100gb.02
cr2/folder.018 25gb.57 100gb.03
cr2/folder.019 25gb.49 100gb.03
cr2/folder.020 25gb.49 100gb.03
cr2/folder.021 25gb.50 100gb.03
cr2/folder.022 25gb.50 100gb.03
cr2/folder.023 25gb.51 100gb.03
cr2/folder.024 25gb.51 100gb.03
cr2/folder.025 25gb.20 100gb.03
cr2/folder.026 25gb.20 100gb.03
cr2/folder.027 25gb.21 100gb.04
cr2/folder.028 25gb.19 100gb.04
cr2/folder.029 25gb.21 100gb.04
cr2/folder.030 25gb.22 100gb.04
cr2/folder.031 25gb.07 100gb.04
cr2/folder.032 25gb.07 100gb.04
cr2/folder.033 25gb.13 100gb.04
cr2/folder.034 25gb.08 100gb.04
png/folder.035 25gb.02 100gb.04
png/folder.036 25gb.02 100gb.04
png/folder.037 25gb.02 100gb.04
png/folder.038 25gb.02 100gb.04
png/folder.039 25gb.02 100gb.04
png/folder.040 25gb.02 100gb.04
png/folder.041 25gb.02 100gb.04
png/folder.042 25gb.03 100gb.04
png/folder.043 25gb.03 100gb.05
png/folder.044 25gb.03 100gb.05
png/folder.045 25gb.03 100gb.05
png/folder.046 25gb.03 100gb.05
png/folder.047 25gb.03 100gb.05
png/folder.048 25gb.03 100gb.05
png/folder.049 25gb.04 100gb.05
cr2/folder.050 25gb.08 100gb.05
cr2/folder.051 25gb.08 100gb.05
cr2/folder.052 25gb.22 100gb.05
cr2/folder.053 25gb.24 100gb.05
cr2/folder.054 25gb.24 100gb.05
cr2/folder.055 25gb.58 100gb.05
cr2/folder.056 25gb.58 100gb.05
cr2/folder.057 25gb.58 100gb.05
cr2/folder.058 25gb.59 100gb.05
cr2/folder.059 25gb.59 100gb.06
cr2/folder.060 25gb.18 100gb.06
png/folder.061 25gb.04 100gb.06
png/folder.062 25gb.04 100gb.06
png/folder.063 25gb.04 100gb.06
png/folder.064 25gb.04 100gb.06
png/folder.065 25gb.04 100gb.06
png/folder.066 25gb.52 100gb.06
png/folder.067 25gb.04 100gb.06
png/folder.068 25gb.04 100gb.06
png/folder.069 25gb.04 100gb.06
png/folder.070 25gb.04 100gb.06
png/folder.071 25gb.05 100gb.06
png/folder.072 25gb.05 100gb.06
cr2/folder.073 25gb.09 100gb.06
cr2/folder.074 25gb.09 100gb.06
cr2/folder.075 25gb.10 100gb.06
cr2/folder.076 25gb.10 100gb.06
cr2/folder.077 25gb.11 100gb.06
cr2/folder.078 25gb.15 100gb.06
cr2/folder.079 25gb.18 100gb.07
cr2/folder.080 25gb.18 100gb.07
cr2/folder.081 25gb.19 100gb.07
cr2/folder.082 25gb.16 100gb.07
cr2/folder.083 25gb.16 100gb.07
cr2/folder.084 25gb.16 100gb.07
png/folder.085 25gb.05 100gb.07
png/folder.086 25gb.05 100gb.07
png/folder.087 25gb.05 100gb.07
png/folder.088 25gb.05 100gb.07
png/folder.089 25gb.05 100gb.07
png/folder.090 25gb.06 100gb.07
cr2/folder.091 25gb.26 100gb.07
cr2/folder.092 25gb.25 100gb.07
cr2/folder.093 25gb.26 100gb.07
cr2/folder.094 25gb.29 100gb.07
cr2/folder.095 25gb.26 100gb.08
cr2/folder.096 25gb.28 100gb.08
cr2/folder.097 25gb.30 100gb.08
cr2/folder.098 25gb.30 100gb.08
cr2/folder.099 25gb.30 100gb.08
cr2/folder.100 25gb.29 100gb.08
cr2/folder.101 25gb.33 100gb.08
cr2/folder.102 25gb.29 100gb.08
cr2/folder.103 25gb.11 100gb.08
cr2/folder.104 25gb.17 100gb.08
cr2/folder.105 25gb.17 100gb.08
cr2/folder.106 25gb.17 100gb.08
cr2/folder.107 25gb.12 100gb.09
cr2/folder.108 25gb.12 100gb.09
cr2/folder.109 25gb.31 100gb.09
cr2/folder.110 25gb.31 100gb.09
cr2/folder.111 25gb.32 100gb.09
cr2/folder.112 25gb.32 100gb.09
cr2/folder.113 25gb.33 100gb.09
cr2/folder.114 25gb.34 100gb.09
cr2/folder.115 25gb.41 100gb.09
cr2/folder.116 25gb.40 100gb.10
cr2/folder.117 25gb.40 100gb.10
cr2/folder.118 25gb.42 100gb.10
cr2/folder.119 25gb.41 100gb.10
cr2/folder.120 25gb.42 100gb.10
cr2/folder.121 25gb.39 100gb.10
cr2/folder.122 25gb.39 100gb.10
cr2/folder.123 25gb.38 100gb.10
cr2/folder.124 25gb.38 100gb.10
cr2/folder.125 25gb.37 100gb.11
cr2/folder.126 25gb.37 100gb.11
cr2/folder.127 25gb.33 100gb.11
cr2/folder.128 25gb.35 100gb.11
cr2/folder.129 25gb.35 100gb.11
cr2/folder.130 25gb.34 100gb.11
cr2/folder.131 25gb.36 100gb.11
cr2/folder.132 25gb.36 100gb.11
png/folder.133 25gb.06 100gb.11
png/folder.134 25gb.06 100gb.11
png/folder.135 25gb.06 100gb.11
png/folder.136 25gb.06 100gb.11
png/folder.137 25gb.06 100gb.11
png/folder.138 25gb.06 100gb.11
cr2/folder.139 25gb.43 100gb.12
cr2/folder.140 25gb.43 100gb.12
cr2/folder.141 25gb.44 100gb.12
cr2/folder.142 25gb.44 100gb.12
cr2/folder.143 25gb.45 100gb.12
cr2/folder.144 25gb.45 100gb.12
cr2/folder.145 25gb.61 100gb.12
cr2/folder.146 25gb.60 100gb.12
cr2/folder.147 25gb.60 100gb.12
cr2/folder.148 25gb.61 100gb.12
cr2/folder.149 25gb.62 100gb.12
cr2/folder.150 25gb.62 100gb.13
cr2/folder.151 25gb.12 100gb.13
cr2/folder.152 25gb.11 100gb.13
cr2/folder.153 25gb.07 100gb.13
cr2/folder.154 25gb.14 100gb.13
cr2/folder.155 25gb.14 100gb.13
cr2/folder.156 25gb.13 100gb.13
cr2/folder.157 25gb.52 100gb.13
cr2/folder.158 25gb.53 100gb.13
cr2/folder.159 25gb.53 100gb.13
cr2/folder.160 25gb.54 100gb.13
cr2/folder.161 25gb.54 100gb.14
cr2/folder.162 25gb.54 100gb.14
png/folder.163 25gb.52 100gb.14
png/folder.164 25gb.52 100gb.14
png/folder.165 25gb.52 100gb.14
png/folder.166 25gb.52 100gb.14
png/folder.167 25gb.52 100gb.14
cr2/folder.cb    25gb.15 100gb.14
png/folder.ddd   25gb.52 100gb.14
cr2/folder.list1 25gb.23 100gb.14
cr2/folder.list2 25gb.23 100gb.14
cr2/folder.sp    25gb.21 100gb.14
png/folder.wow   25gb.06 100gb.14
jpg/folder.001 25gb.01 100gb.15
jpg/folder.002 25gb.01 100gb.15
jpg/folder.003 25gb.01 100gb.15
jpg/folder.004 25gb.01 100gb.15
jpg/folder.005 25gb.01 100gb.15
jpg/folder.006 25gb.01 100gb.15
jpg/folder.007 25gb.01 100gb.15
jpg/folder.008 25gb.01 100gb.15
jpg/folder.009 25gb.01 100gb.15
jpg/folder.010 25gb.01 100gb.15
jpg/folder.011 25gb.01 100gb.15
jpg/folder.012 25gb.01 100gb.15
jpg/folder.013 25gb.01 100gb.15
jpg/folder.014 25gb.01 100gb.15
jpg/folder.015 25gb.01 100gb.15
jpg/folder.016 25gb.01 100gb.15
jpg/folder.017 25gb.01 100gb.15
jpg/folder.018 25gb.01 100gb.15
jpg/folder.019 25gb.01 100gb.15
jpg/folder.020 25gb.01 100gb.15
jpg/folder.021 25gb.01 100gb.15
jpg/folder.022 25gb.01 100gb.15
jpg/folder.023 25gb.01 100gb.15
jpg/folder.024 25gb.01 100gb.15
jpg/folder.025 25gb.01 100gb.15
jpg/folder.026 25gb.01 100gb.15
jpg/folder.027 25gb.01 100gb.15
jpg/folder.028 25gb.01 100gb.15
jpg/folder.029 25gb.01 100gb.15
jpg/folder.030 25gb.01 100gb.15
jpg/folder.031 25gb.01 100gb.15
jpg/folder.032 25gb.01 100gb.15
jpg/folder.033 25gb.01 100gb.15
jpg/folder.034 25gb.01 100gb.15
jpg/folder.035 25gb.01 100gb.15
jpg/folder.036 25gb.01 100gb.15
jpg/folder.037 25gb.01 100gb.15
jpg/folder.038 25gb.01 100gb.15
jpg/folder.039 25gb.01 100gb.15
jpg/folder.040 25gb.01 100gb.15
jpg/folder.041 25gb.01 100gb.15
jpg/folder.042 25gb.01 100gb.15
jpg/folder.043 25gb.01 100gb.15
jpg/folder.044 25gb.01 100gb.15
jpg/folder.045 25gb.01 100gb.15
jpg/folder.046 25gb.63 100gb.15
jpg/folder.047 25gb.63 100gb.15
jpg/folder.048 25gb.63 100gb.15
jpg/folder.049 25gb.63 100gb.15
jpg/folder.050 25gb.63 100gb.15
jpg/folder.051 25gb.63 100gb.15
jpg/folder.052 25gb.63 100gb.15
jpg/folder.053 25gb.63 100gb.15
jpg/folder.054 25gb.63 100gb.15
jpg/folder.055 25gb.63 100gb.15
jpg/folder.056 25gb.63 100gb.15
jpg/folder.057 25gb.63 100gb.15
jpg/folder.058 25gb.63 100gb.15
jpg/folder.059 25gb.63 100gb.15
jpg/folder.060 25gb.63 100gb.15
jpg/folder.061 25gb.63 100gb.15
jpg/folder.062 25gb.63 100gb.15
jpg/folder.063 25gb.63 100gb.15
jpg/folder.064 25gb.63 100gb.15
jpg/folder.065 25gb.63 100gb.15
jpg/folder.066 25gb.63 100gb.15
jpg/folder.067 25gb.63 100gb.15
jpg/folder.068 25gb.63 100gb.15
jpg/folder.069 25gb.63 100gb.15
jpg/folder.070 25gb.63 100gb.15
jpg/folder.071 25gb.63 100gb.15
jpg/folder.072 25gb.63 100gb.15
jpg/folder.073 25gb.63 100gb.15
jpg/folder.074 25gb.63 100gb.15
jpg/folder.075 25gb.63 100gb.15
jpg/folder.076 25gb.63 100gb.15
jpg/folder.077 25gb.63 100gb.15
jpg/folder.078 25gb.63 100gb.15
jpg/folder.079 25gb.63 100gb.15
jpg/folder.080 25gb.63 100gb.15
jpg/folder.081 25gb.63 100gb.15
jpg/folder.082 25gb.63 100gb.15
jpg/folder.083 25gb.63 100gb.15
jpg/folder.084 25gb.63 100gb.15
jpg/folder.085 25gb.63 100gb.15
jpg/folder.086 25gb.63 100gb.15
jpg/folder.087 25gb.63 100gb.15
jpg/folder.088 25gb.63 100gb.15
jpg/folder.089 25gb.63 100gb.15
jpg/folder.090 25gb.63 100gb.15
jpg/folder.091 25gb.63 100gb.15
jpg/folder.092 25gb.63 100gb.15
jpg/folder.093 25gb.63 100gb.15
jpg/folder.094 25gb.63 100gb.15
jpg/folder.095 25gb.63 100gb.15
jpg/folder.096 25gb.63 100gb.15
jpg/folder.097 25gb.63 100gb.15
jpg/folder.098 25gb.63 100gb.15
jpg/folder.099 25gb.63 100gb.15
jpg/folder.100 25gb.63 100gb.15
jpg/folder.101 25gb.63 100gb.15
jpg/folder.102 25gb.63 100gb.15
jpg/folder.103 25gb.63 100gb.15
jpg/folder.104 25gb.63 100gb.15
jpg/folder.105 25gb.63 100gb.15
jpg/folder.106 25gb.63 100gb.15
jpg/folder.107 25gb.63 100gb.15
jpg/folder.108 25gb.63 100gb.15
jpg/folder.109 25gb.63 100gb.15
jpg/folder.110 25gb.63 100gb.15
jpg/folder.111 25gb.64 100gb.15
jpg/folder.112 25gb.64 100gb.15
jpg/folder.113 25gb.64 100gb.15
jpg/folder.114 25gb.64 100gb.15
jpg/folder.115 25gb.64 100gb.15
jpg/folder.116 25gb.64 100gb.15
jpg/folder.117 25gb.64 100gb.15
jpg/folder.118 25gb.64 100gb.15
jpg/folder.119 25gb.64 100gb.15
jpg/folder.120 25gb.64 100gb.15
jpg/folder.121 25gb.64 100gb.15
jpg/folder.122 25gb.64 100gb.15
jpg/folder.123 25gb.64 100gb.15
jpg/folder.124 25gb.64 100gb.15
jpg/folder.125 25gb.64 100gb.15
jpg/folder.126 25gb.64 100gb.15
jpg/folder.127 25gb.64 100gb.15
jpg/folder.128 25gb.64 100gb.15
jpg/folder.129 25gb.64 100gb.15
jpg/folder.130 25gb.64 100gb.15
jpg/folder.131 25gb.64 100gb.15
jpg/folder.132 25gb.64 100gb.15
jpg/folder.133 25gb.64 100gb.15
jpg/folder.134 25gb.64 100gb.15
jpg/folder.135 25gb.64 100gb.15
jpg/folder.136 25gb.64 100gb.15
jpg/folder.137 25gb.64 100gb.15
jpg/folder.138 25gb.64 100gb.15
jpg/folder.139 25gb.64 100gb.15
jpg/folder.140 25gb.64 100gb.15
jpg/folder.141 25gb.64 100gb.15
jpg/folder.142 25gb.64 100gb.15
jpg/folder.143 25gb.64 100gb.15
jpg/folder.144 25gb.64 100gb.15
jpg/folder.145 25gb.64 100gb.15
jpg/folder.146 25gb.64 100gb.15
jpg/folder.147 25gb.64 100gb.15
jpg/folder.148 25gb.64 100gb.15
jpg/folder.149 25gb.64 100gb.15
jpg/folder.150 25gb.64 100gb.15
jpg/folder.151 25gb.64 100gb.15
jpg/folder.152 25gb.64 100gb.15
jpg/folder.153 25gb.64 100gb.15
jpg/folder.154 25gb.64 100gb.15
jpg/folder.155 25gb.64 100gb.15
jpg/folder.156 25gb.64 100gb.15
jpg/folder.157 25gb.64 100gb.15
jpg/folder.158 25gb.64 100gb.15
jpg/folder.159 25gb.64 100gb.15
jpg/folder.160 25gb.64 100gb.15
jpg/folder.161 25gb.64 100gb.15
jpg/folder.162 25gb.64 100gb.15
jpg/folder.163 25gb.64 100gb.15
jpg/folder.164 25gb.64 100gb.15
jpg/folder.165 25gb.64 100gb.15
jpg/folder.166 25gb.64 100gb.15
jpg/folder.167 25gb.64 100gb.15
jpg/folder.cb    25gb.64 100gb.15
jpg/folder.ddd   25gb.64 100gb.15
jpg/folder.list1 25gb.64 100gb.15
jpg/folder.list2 25gb.64 100gb.15
jpg/folder.sp    25gb.64 100gb.15
jpg/folder.tests 25gb.64 100gb.15
jpg/folder.wow   25gb.64 100gb.15
misc 25gb.01 100gb.15
old  25gb.01 100gb.15
ENDOFINV
}

fail () {
    echo $*
    echo Disc operation aborted.
    exit 1
}

cd $BASEDIR
if [ $? -ne 0 ]; then
    echo Failed to find $BASEDIR
    exit 3
fi

# process command line
for what in $*; do
    case $what in
        prep)
            DO_PREP=1
            ;;
        burn)
            DO_BURN=1
            ;;
        free)
            DO_FREE=1
            ;;
        all)
            DO_PREP=1
            DO_BURN=1
            DO_FREE=1
            ;;
        help)
            DO_HELP=1
            ;;
        *)
            if [[ $DISC ]]; then
                fail Limit one disc per script invocation.
            fi
            DISC=$what
            if [[ ${DISC:0:5} == 25gb. ]]; then
                IMSIZE=24176640K
            elif [[ ${DISC:0:6} == 100gb. ]]; then
                IMSIZE=96184320K
            fi
            ;;
    esac
done

if [[ $DO_PREP || $DO_BURN || $DO_FREE ]]; then
    if [[ ! $DISC ]]; then
        fail Must specify which disc to prep/burn/free.
    fi
    DIRS_ON_DISC=$(catalog $DISC)
    if [[ ! $DIRS_ON_DISC ]]; then
        fail Invalid disc or operation specified.
    fi
else
    DO_HELP=1
fi

if [[ $DO_HELP ]]; then help; fi

# sanity check SHA1 checksum for this script
cd bin
shopt -s extglob
sha1sum !(SHA1SUM) | diff - SHA1SUM
if [[ $? -ne 0 ]]; then
    echo SHA1 checksums in ./bin are wonky!
    exit 1
fi
shopt -u extglob
cd ..

# necessary paths
IM=$BIGTEMPDIR/bd-r.$DISC.udf
MNT=$BIGTEMPDIR/bd-r
LOOP=`losetup -f`

# prep: create UDF filesystem and fill it
if [[ $DO_PREP ]]; then

    date +"Starting prep at %H:%M"

    # Make a UDF image and mount it.
    rm -rf $IM $MNT
    mkdir $MNT

#	Here is how to determine what fits on an unformatted BD-R:
#
#	$ dvd+rw-mediainfo /dev/sr0
#	...
#	READ FORMAT CAPACITIES: (25 GB)
#	 unformatted:	12219392*2048=25025314816
#	 00h(3000):		11826176*2048=24220008448
#	 32h(0):		11826176*2048=24220008448
#	 32h(0):		5796864*2048=11871977472
#	 32h(0):		12088320*2048=24756879360 (growisofs chooses this, 256 MiB)
#	...
#	READ FORMAT CAPACITIES: (50 GB)
#	 unformatted:	24438784*2048=50050629632
#	 00h(6000):		23652352*2048=48440016896
#	 32h(0):		23652352*2048=48440016896
#	 32h(0):		11200512*2048=22938648576
#	 32h(0):		24307712*2048=49782194176 (why same 256 MiB?)
#	...
#	READ FORMAT CAPACITIES: (100 GB)
#	 unformatted:	48878592*2048=100103356416
#	 00h(c000):		47305728*2048=96882130944
#	 32h(0):		47305728*2048=96882130944
#	 32h(0):		30790656*2048=63059263488
#	 32h(0):		48092160*2048=98492743680 (why different, 1536 MiB?)
#	...
#
#	What growisofs is doing for me (as of 7.1-10) is supporting that
#	last 32h line, that is, 12088320 blocks. As of 15 May 2018, the
#	single, double, and triple-layer (25, 50, 100 GB) I have in house
#	let me have 12088320, 24307712, and 48092160 blocks of 2048 bytes.
#
#   My file allocation policy is that the combined apparent size of all
#   files can be up to 99.5% of the UDF image file. An experiment showed that
#   actual usage past 99.6% is obtainable. So 93,460 MiB cutoff on 100GB discs.

    # create empty image
    truncate -s $IMSIZE $IM

    # Default blocksize is 512 (disk), which won't mount on BD-r.
    # Default revision is 2.50, which isn't reading the superblock for me.
    # Can you say "fragile solution"?
    mkudffs --vid=n50ch.$DISC --label=n50ch.$DISC --blocksize=2048 --udfrev=2.01 $IM

    # loop mount
    sudo losetup $LOOP $IM
    sudo mount -o bs=2048 $LOOP $MNT
    sudo chown me.me $MNT
    rm -rf $MNT/lost+found

    # transfer files
    date +"Filling image at %H:%M"
    for a in $DIRS_ON_DISC; do
        rsync -a --relative $a $MNT
    done

    # these files go on EVERY disc
    rsync -a bin doc $MNT

    # inventory list for digest-checker script
    pushd $MNT
    find . -name SHA1SUM >DIGESTS
    popd

    # experiment
    if false; then
        echo
        echo You may view the mounted image now before continuing, then type
        echo "  kill -CONT" $BASHPID
        echo
        kill -STOP $BASHPID
    fi

    # unmount image and free loop device
    sudo umount $LOOP
    sudo losetup -d $LOOP

fi

# burn: dd UDF image onto optical medium
if [[ $DO_BURN ]]; then
    date +"Starting burn at %H:%M"
    growisofs -Z /dev/sr0=$IM
    echo Please label the newly-burned $DISC, containing:
    for a in $DIRS_ON_DISC; do echo "    "$a; done
fi

if [[ $DO_PREP || $DO_BURN ]]; then
    date +"Complete at %H:%M"
fi

# 
if [[ $DO_FREE ]]; then
    rm -rf $IM $MNT
fi

exit 0