add YYYY/README.md processing to bin/new-year.sh
The `bin/new-year.sh` will form `YYYY/README.md` from the template file: `template/README.md.year`. In `bin/new-year.sh` changed VERSION from "1.2 2024-07-21" to "1.3 2024-07-23". Performed `make www` to accomplish the above and to test under macOS.
This commit is contained in:
1 parent
30334f9716
commit
16c33c5f2f
2 files changed
+271
-52
No files matched your search
+221
-52
@@ -87,7 +87,7 @@ shopt -s globstar # enable ** to match all files and zero or more directories an
|
||||
|
||||
# set variables referenced in the usage message
|
||||
#
|
||||
export VERSION="1.2 2024-07-21"
|
||||
export VERSION="1.3 2024-07-23"
|
||||
NAME=$(basename "$0")
|
||||
export NAME
|
||||
export V_FLAG=0
|
||||
@@ -102,6 +102,13 @@ status="$?"
|
||||
if [[ $status -eq 0 ]]; then
|
||||
TOPDIR=$("$GIT_TOOL" rev-parse --show-toplevel)
|
||||
fi
|
||||
NUMBER_TOOL=$(type -P number)
|
||||
export NUMBER_TOOL
|
||||
if [[ -z $NUMBER_TOOL ]]; then
|
||||
echo "$0: FATAL: number tool is not installed or not in \$PATH" 1>&2
|
||||
echo "$0: notice: see the number GitHub repo: https://github.com/lcn2/number" 1>&2
|
||||
exit 5
|
||||
fi
|
||||
export TOPDIR
|
||||
export REPO_URL="https://github.com/ioccc-src/temp-test-ioccc/blob/master"
|
||||
export TEMPLATE="template"
|
||||
@@ -110,6 +117,93 @@ export NOOP=
|
||||
export DO_NOT_PROCESS=
|
||||
|
||||
|
||||
# output_english_ordinal
|
||||
#
|
||||
# Write the English ordinal form of a non-negative integer to standard output (stdout).
|
||||
# We also capitalize the first letter of each English word.
|
||||
#
|
||||
# NOTE: We restrict the integer to non-negative simply because the contest starts
|
||||
# with the first: the NUMBER_TOOL handles negative integers.
|
||||
#
|
||||
# NOTE: We also restrict the integer to <= 999 because the NUMBER_TOOL starts
|
||||
# to write multi-line English names at 1000 and we don't want to parse
|
||||
# such multi-line output. So we leave it up to the IOCCC judges who
|
||||
# are judging the 1000th IOCCC to improve this code. :-)
|
||||
#
|
||||
# usage:
|
||||
# output_english_ordinal integer
|
||||
#
|
||||
# returns:
|
||||
# 0 ==> no errors detected
|
||||
# > 0 ==> function error number
|
||||
#
|
||||
function output_english_ordinal
|
||||
{
|
||||
local INTEGER; # integer argument
|
||||
local ENGLISH_NAME; # integer in English form
|
||||
local CAP_ENGLISH_NAME; # ENGLISH_NAME with first letters Capitalized
|
||||
|
||||
# parse args
|
||||
#
|
||||
if [[ $# -ne 1 ]]; then
|
||||
echo "$0: ERROR: in output_english_ordinal: expected 1 arg, found $#" 1>&2
|
||||
return 1
|
||||
fi
|
||||
INTEGER="$1"
|
||||
if [[ $INTEGER =~ ^-?[0-9]+$ ]]; then
|
||||
:
|
||||
else
|
||||
echo "$0: ERROR: in output_english_ordinal: argument is not an integer: $INTEGER" 1>&2
|
||||
return 2
|
||||
fi
|
||||
if [[ $INTEGER -lt 0 ]]; then
|
||||
echo "$0: ERROR: in output_english_ordinal: integer is negative: $INTEGER" 1>&2
|
||||
return 3
|
||||
fi
|
||||
if [[ $INTEGER -gt 999 ]]; then
|
||||
echo "$0: ERROR: in output_english_ordinal: integer must be < 999 (see comment): $INTEGER" 1>&2
|
||||
return 4
|
||||
fi
|
||||
|
||||
# obtain the English name for INTEGER
|
||||
#
|
||||
ENGLISH_NAME=$("$NUMBER_TOOL" -- "$INTEGER")
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: in output_english_ordinal: $NUMBER_TOOL -- $INTEGER failed," \
|
||||
"error code: $status" 1>&2
|
||||
return 5
|
||||
fi
|
||||
if [[ -z $ENGLISH_NAME ]]; then
|
||||
echo "$0: ERROR: in output_english_ordinal: ENGLISH_NAME is empty" 1>&2
|
||||
return 6
|
||||
fi
|
||||
|
||||
# Capitalize first letters in ENGLISH_NAME
|
||||
#
|
||||
CAP_ENGLISH_NAME=$(echo "$ENGLISH_NAME" | awk '{for(i=1;i<=NF;i++){ $i=toupper(substr($i,1,1)) substr($i,2) }}1')
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: in output_english_ordinal: echo $ENGLISH_NAME | awk ... failed," \
|
||||
"error code: $status" 1>&2
|
||||
return 7
|
||||
fi
|
||||
if [[ -z $CAP_ENGLISH_NAME ]]; then
|
||||
echo "$0: ERROR: in output_english_ordinal: ENGLISH_NAME is empty" 1>&2
|
||||
return 8
|
||||
fi
|
||||
|
||||
# Output the English name as a Cardinal
|
||||
#
|
||||
echo "$CAP_ENGLISH_NAME" | sed -E \
|
||||
-e 's/One$/First/' -e 's/Two$/Second/' -e 's/Three$/Third/' -e 's/Four$/Forth/' \
|
||||
-e 's/Five$/Fifth/' -e 's/Six$/Sixth/' -e 's/Seven$/Seventh/' -e 's/Eight$/Eighth/' \
|
||||
-e 's/Nine$/Ninth/' -e 's/Ten$/Tenth/' -e 's/Eleven$/Eleventh/' -e 's/Twelve$/Twelfth/' \
|
||||
-e 's/teen$/teenth/' -e 's/ty$/tieth/' -e 's/dred$/dredth/'
|
||||
return 0
|
||||
}
|
||||
|
||||
|
||||
# usage
|
||||
#
|
||||
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-n] [-N] year
|
||||
@@ -292,6 +386,7 @@ if [[ $V_FLAG -ge 3 ]]; then
|
||||
echo "$0: debug[3]: GIT_TOOL=$GIT_TOOL" 1>&2
|
||||
echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2
|
||||
echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2
|
||||
echo "$0: debug[3]: NUMBER_TOOL=$NUMBER_TOOL" 1>&2
|
||||
echo "$0: debug[3]: TEMPLATE=$TEMPLATE" 1>&2
|
||||
echo "$0: debug[3]: NOOP=$NOOP" 1>&2
|
||||
echo "$0: debug[3]: DO_NOT_PROCESS=$DO_NOT_PROCESS" 1>&2
|
||||
@@ -429,51 +524,6 @@ elif [[ $V_FLAG -ge 3 && ! -e $YEAR_FILE ]]; then
|
||||
fi
|
||||
|
||||
|
||||
# form an empty YYYY/.filelist file if needed
|
||||
#
|
||||
export YEAR_FILELIST="$YEAR/.filelist"
|
||||
if [[ -z $NOOP ]]; then
|
||||
|
||||
# case: .filelist does not exist
|
||||
#
|
||||
if [[ ! -e $YEAR_FILELIST ]]; then
|
||||
|
||||
if [[ $V_FLAG -ge 3 ]]; then
|
||||
echo "$0: debug[3]: about to: touch $YEAR_FILELIST" 1>&2
|
||||
fi
|
||||
touch "$YEAR_FILELIST"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: touch $YEAR_FILELIST filed," \
|
||||
"error code: $status" 1>&2
|
||||
exit 18
|
||||
elif [[ $V_FLAG -ge 1 ]]; then
|
||||
echo "$0: debug[1]: created: $YEAR_FILELIST" 1>&2
|
||||
fi
|
||||
|
||||
if [[ $V_FLAG -ge 3 ]]; then
|
||||
echo "$0: debug[3]: about to: make genfilelist YEARS=$YEAR" 1>&2
|
||||
fi
|
||||
make genfilelist YEARS="$YEAR"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: make genfilelist YEARS=$YEAR filed," \
|
||||
"error code: $status" 1>&2
|
||||
exit 19
|
||||
elif [[ $V_FLAG -ge 1 ]]; then
|
||||
echo "$0: debug[1]: updated: $YEAR_FILELIST" 1>&2
|
||||
fi
|
||||
|
||||
elif [[ ! -f $YEAR_FILE ]]; then
|
||||
echo "$0: ERROR: .filelist exists but is not a file: $YEAR_FILELIST" 1>&2
|
||||
exit 20
|
||||
fi
|
||||
|
||||
elif [[ $V_FLAG -ge 3 && ! -e $YEAR_FILELIST ]]; then
|
||||
echo "$0: debug[3]: -n disabled creating .filelist: $YEAR_FILELIST" 1>&2
|
||||
fi
|
||||
|
||||
|
||||
# create a temporary Makefile
|
||||
#
|
||||
export TMP_MAKEFILE=".tmp.$NAME.MAKEFILE.$$.tmp"
|
||||
@@ -484,13 +534,13 @@ trap 'rm -f $TMP_MAKEFILE; exit' 0 1 2 3 15
|
||||
rm -f "$TMP_MAKEFILE"
|
||||
if [[ -e $TMP_MAKEFILE ]]; then
|
||||
echo "$0: ERROR: cannot remove temporary Makefile: $TMP_MAKEFILE" 1>&2
|
||||
exit 21
|
||||
exit 18
|
||||
fi
|
||||
echo '# author_handle,entry_id,entry_id,entry_id,…,,,,,,,,,,,,,,,' > \
|
||||
"$TMP_MAKEFILE"
|
||||
if [[ ! -e $TMP_MAKEFILE ]]; then
|
||||
echo "$0: ERROR: cannot create temporary Makefile: $TMP_MAKEFILE" 1>&2
|
||||
exit 22
|
||||
exit 19
|
||||
fi
|
||||
|
||||
|
||||
@@ -505,7 +555,7 @@ status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: make new_year NEW_YEAR=\"$YEAR\" >> \"$TMP_MAKEFILE\" failed," \
|
||||
"error code: $status" 1>&2
|
||||
exit 23
|
||||
exit 20
|
||||
fi
|
||||
sed -n -e '/^# END - DO NOT REMOVE THIS LINE - make new_year also uses this #/,$p' "$MAKE_FILE" >> "$TMP_MAKEFILE"
|
||||
|
||||
@@ -539,13 +589,13 @@ if [[ -z $NOOP ]]; then
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: mv -f -- $TMP_MAKEFILE $MAKE_FILE filed," \
|
||||
"error code: $status" 1>&2
|
||||
exit 24
|
||||
exit 21
|
||||
elif [[ $V_FLAG -ge 1 ]]; then
|
||||
echo "$0: debug[1]: updated Makefile: $MAKE_FILE" 1>&2
|
||||
fi
|
||||
if [[ ! -s $MAKE_FILE ]]; then
|
||||
echo "$0: ERROR: not a non-empty Makefile: $MAKE_FILE" 1>&2
|
||||
exit 25
|
||||
exit 22
|
||||
fi
|
||||
|
||||
# update .top
|
||||
@@ -558,7 +608,7 @@ if [[ -z $NOOP ]]; then
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: make -fC$YEAR genpath_top >/dev/null failed," \
|
||||
"error code: $status" 1>&2
|
||||
exit 26
|
||||
exit 23
|
||||
elif [[ $V_FLAG -ge 1 ]]; then
|
||||
echo "$0: debug[1]: updated .top" 1>&2
|
||||
fi
|
||||
@@ -571,6 +621,125 @@ elif [[ $V_FLAG -ge 3 ]]; then
|
||||
fi
|
||||
|
||||
|
||||
# Add the template README.md if there is no YYYY/README.md file
|
||||
#
|
||||
export YEAR_README="$YEAR/README.md"
|
||||
if [[ -z $NOOP ]]; then
|
||||
|
||||
# case: YYYY/README.md does not exist
|
||||
#
|
||||
if [[ ! -e $YEAR_README ]]; then
|
||||
|
||||
# verify that the template directory exists
|
||||
#
|
||||
if [[ ! -d $TEMPLATE ]]; then
|
||||
echo "$0: ERROR: YYYY/README.md: $YEAR_README does not exist and" \
|
||||
"template is missing: $TEMPLATE" 1>&2
|
||||
exit 24
|
||||
fi
|
||||
|
||||
# verify that the YYYY/README.md template is a file
|
||||
#
|
||||
export YEAR_README_TEMPLATE="$TEMPLATE/README.md.year"
|
||||
if [[ ! -f $YEAR_README_TEMPLATE ]]; then
|
||||
echo "$0: ERROR: YYYY/README.md: $YEAR_README does not exist and" \
|
||||
"template README.md.year is missing: $YEAR_README_TEMPLATE" 1>&2
|
||||
exit 25
|
||||
fi
|
||||
|
||||
# determine the IOCCC ordinal
|
||||
#
|
||||
CONTEST_NUMNER=$(sed -n "/$YEAR/=" "$TOP_FILE")
|
||||
if [[ -z $CONTEST_NUMNER ]]; then
|
||||
echo "$0: ERROR: failed to determine content number for YYYY: $YEAR in: $TOP_FILE" 1>&2
|
||||
exit 26
|
||||
fi
|
||||
OUTPUT_ENGLISH_ORDINAL=$(output_english_ordinal "$CONTEST_NUMNER")
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: output_english_ordinal $CONTEST_NUMNER failed," \
|
||||
"error code: $status" 1>&2
|
||||
exit 27
|
||||
fi
|
||||
if [[ -z $OUTPUT_ENGLISH_ORDINAL ]]; then
|
||||
echo "$0: ERROR: failed to determine content orignal for YYYY: $YEAR for contest: $CONTEST_NUMNER" 1>&2
|
||||
exit 28
|
||||
fi
|
||||
|
||||
# form year README.md
|
||||
#
|
||||
if [[ $V_FLAG -ge 3 ]]; then
|
||||
echo "$0: debug[3]: about to: sed -e ... $YEAR_README_TEMPLATE > $YEAR_README" 0>&2
|
||||
fi
|
||||
sed -e "s/%%YEAR%%/$YEAR/g" \
|
||||
-e "s/%%OUTPUT_ENGLISH_ORDINAL%%/$OUTPUT_ENGLISH_ORDINAL/g" \
|
||||
"$YEAR_README_TEMPLATE" > "$YEAR_README"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: sed -e .. $YEAR_README_TEMPLATE > $YEAR_README filed," \
|
||||
"error code: $status" 1>&2
|
||||
exit 29
|
||||
elif [[ $V_FLAG -ge 1 ]]; then
|
||||
echo "$0: debug[1]: updated YYYY/README.md $YEAR_README" 1>&2
|
||||
fi
|
||||
|
||||
# case: YYYY exists but is not a file
|
||||
#
|
||||
elif [[ ! -d $YEAR ]]; then
|
||||
echo "$0: ERROR: YYYY/README.md exists but is not a file: $YEAR_README" 1>&2
|
||||
exit 30
|
||||
fi
|
||||
|
||||
elif [[ $V_FLAG -ge 3 && ! -f $YEAR_README ]]; then
|
||||
echo "$0: debug[3]: -n disabled creating YYYY/README.md: $YEAR_README" 1>&2
|
||||
fi
|
||||
|
||||
|
||||
# form YYYY/.filelist file if needed
|
||||
#
|
||||
export YEAR_FILELIST="$YEAR/.filelist"
|
||||
if [[ -z $NOOP ]]; then
|
||||
|
||||
# case: .filelist does not exist
|
||||
#
|
||||
if [[ ! -e $YEAR_FILELIST ]]; then
|
||||
|
||||
if [[ $V_FLAG -ge 3 ]]; then
|
||||
echo "$0: debug[3]: about to: touch $YEAR_FILELIST" 1>&2
|
||||
fi
|
||||
touch "$YEAR_FILELIST"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: touch $YEAR_FILELIST filed," \
|
||||
"error code: $status" 1>&2
|
||||
exit 31
|
||||
elif [[ $V_FLAG -ge 1 ]]; then
|
||||
echo "$0: debug[1]: created: $YEAR_FILELIST" 1>&2
|
||||
fi
|
||||
|
||||
if [[ $V_FLAG -ge 3 ]]; then
|
||||
echo "$0: debug[3]: about to: make genfilelist YEARS=$YEAR" 1>&2
|
||||
fi
|
||||
make genfilelist YEARS="$YEAR"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: make genfilelist YEARS=$YEAR filed," \
|
||||
"error code: $status" 1>&2
|
||||
exit 32
|
||||
elif [[ $V_FLAG -ge 1 ]]; then
|
||||
echo "$0: debug[1]: updated: $YEAR_FILELIST" 1>&2
|
||||
fi
|
||||
|
||||
elif [[ ! -f $YEAR_FILE ]]; then
|
||||
echo "$0: ERROR: .filelist exists but is not a file: $YEAR_FILELIST" 1>&2
|
||||
exit 33
|
||||
fi
|
||||
|
||||
elif [[ $V_FLAG -ge 3 && ! -e $YEAR_FILELIST ]]; then
|
||||
echo "$0: debug[3]: -n disabled creating .filelist: $YEAR_FILELIST" 1>&2
|
||||
fi
|
||||
|
||||
|
||||
# All Done!!! All Done!!! -- Jessica Noll, Age 2
|
||||
#
|
||||
exit 0
|
||||
@@ -0,0 +1,50 @@
|
||||
# %%OUTPUT_ENGLISH_ORDINAL%% International Obfuscated C Code Contest
|
||||
|
||||
|
||||
## Standard IOCCC stuff
|
||||
|
||||
%%XXX%% - put text here - XXX
|
||||
|
||||
View the `index.html` web page for the given winning entry for information on how
|
||||
on how to compile it and how to run the winning program.
|
||||
Look at the winning source and try to figure how it does what it does!
|
||||
You may then wish to look at the Author's remarks for even more details.
|
||||
|
||||
Some C compilers are not quite as good as they should be. If yours is
|
||||
lacking, you may need to compile using clang or gcc instead of your local
|
||||
compiler.
|
||||
|
||||
The primary website can be found at [www.ioccc.org](https://www.ioccc.org).
|
||||
|
||||
|
||||
## Remarks on some of the winning entries
|
||||
|
||||
%%XXX%% - add text here - XXX
|
||||
|
||||
|
||||
## %%XXX%% - other remarks if needed - XXX
|
||||
|
||||
%%XXX%% - add text here if needed - XXX
|
||||
|
||||
|
||||
## Final Comments
|
||||
|
||||
%%XXX%% - add final text here - XXX
|
||||
|
||||
**IMPORTANT NOTE**: See [contact.html](../contact.html) for up to date contact details
|
||||
as well as details on how to provide fixes to any of the entries.
|
||||
See also the [IOCCC FAQ](../faq.html) for additional information on the IOCCC.
|
||||
|
||||
<!--
|
||||
|
||||
Copyright © 1984-%%YEAR%% by Landon Curt Noll. All Rights Reserved.
|
||||
|
||||
You are free to share and adapt this file under the terms of this license:
|
||||
|
||||
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
|
||||
For more information, see:
|
||||
|
||||
https://creativecommons.org/licenses/by-sa/4.0/
|
||||
|
||||
-->
|
||||
Reference in new issue
Block a user