Merge pull request #991 from xexyl/thanks-sgit

Update thanks file with respect to sgit
This commit is contained in:
Landon Curt Noll authored and GitHub committed 2023-10-03 18:55:54 -07:00
commit d4aa0b80fc
10 files changed
+422 -27

No files matched your search

+1
View File
@@ -1,4 +1,5 @@
jkb
rince
rince.orig
rince.alt
prog.orig
+3 -3
View File
@@ -58,7 +58,7 @@ ARCH=
# Defines that are needed to compile
#
CDEFINE=
CDEFINE= -DZ=17
# Include files that are needed to compile
#
@@ -115,8 +115,8 @@ OBJ= ${PROG}.o
DATA=
TARGET= ${PROG}
#
ALT_OBJ=
ALT_TARGET=
ALT_OBJ= ${PROG}.alt.o
ALT_TARGET= ${PROG}.alt
#################
+35 -19
View File
@@ -1,9 +1,6 @@
# Most Well Rounded
James Bonfield
MRC Laboratory of Molecular Biology,
Hills Road
Cambridge
England
@@ -13,6 +10,8 @@ England
make all
```
NOTE: there is an alternate version of this program that allows one to slow down
the game. See the Alternate code section below.
## To run:
@@ -21,12 +20,39 @@ make all
```
where:
`[cabbage]` is a CABBAGE description file (default: `rince.c`)
### Alternate code: slowing down the game
Some people may want to slow down the game by increasing the
value 17 in the lines:
```c
struct timeval v= {0,1<<17} ;
```
and
```c
refresh(),c=select(k,&y,0,0,(v.tv_usec=1<<17,&v))?getch():0;
```
to another value like 18 or 19. You can do this via the alternate code like:
```sh
make CDEFINE="-DZ=18" clobber alt
```
Replace 18 with whatever number you wish.
Use `rince.alt` as you would `rince` above.
## Judges' remarks:
The author has provided several CABBAGE files for your amusement:
- [rince.data1](rince.data1) plays
@@ -72,7 +98,7 @@ should be replaced with:
```c
select(k,&y,0,0,(v.tv_usec=1<<whatever_you_want,&v))
```
```
where `whatever_you_want` is some integer such as 17 or 19.
@@ -83,20 +109,10 @@ compiler in the first place), this program may be used to log
out very quickly. Unfortunately, you can't do anything else
with it.
### Slowing down the game
Some people may want to slow down the game by increasing the
value 17 in the line:
```c
struct timeval v= {0,1<<17} ;
```
to something like 18 or 19.
### Additional notes
One may also need to do a `stty sane` if you kill the program
to restore your terminal state.
to restore your terminal state. If that does not work try `reset`.
Some people report that `rince` dumps core on their system.
@@ -144,7 +160,7 @@ I have compiled in on the following systems:
---
```
System OS Compiler (and flags)
System OS Compiler (and flags)
DECstation 5000/240 Ultrix 4.2A c89 -std
SPARCstation 1+ SunOS 4.1 gcc -ansi -pedantic
SPARCstation 10/31 Solaris 2.1 gcc -ansi -pedantic (*)
+1 -1
View File
@@ -2,7 +2,7 @@
Due to the long time this has been slowly evolving, it's hard to describe
quite whether it's been `implemented`. I think perhaps evolve is a better
term. I basic concept behind the program is to describe a game as a simple,
term. The basic concept behind the program is to describe a game as a simple,
slightly cheaty, cellular automata system, with some of the transitions
bound to key presses.
+123
View File
@@ -0,0 +1,123 @@
/** J.K.Bonfield **
^ <
^ >
< # > v
< <
< > > < v
X X j
x X j
X x ^ k
^ ^
^ #
X X X X
^ v
v v
v #
v X
v x
> # < v
> >
X X l
x X l
41 20
########################################
# #
# < < < < <> < < < #
# > > > <> > > > > #
# < < < < <> < < < #
# > > > <> > > > > #
# < < < < <> < < < #
# > > > <> > > > > #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# X #
########################################*/
#include <stdio.h>
#include <curses.h>
#include <stdlib.h>
#include <setjmp.h>
#include <sys/time.h>
int _tty_ch;
bool _echoit;
bool _rawmode;
int _tty;
#define U char
#define G for(
#define I )malloc(sizeof(
typedef struct z {U x[20]; struct z*y; } j; j*J[2][256];
struct timeval v= {0,1<<Z} ;
U**X,c,*P="noopoqqnr",d;
j*a(int Q, int i) {
G
clear(),noecho(),cbreak(); ;
)
{
int x=0,y=0,W=Q,Q=i-1,k;
G;
y<=Q;
(mvaddch(y,x,X[y][x]),++x^W-1)||(x=0,y++));
k=y=- --x;
G
refresh(),c=select(k,&y,0,0,(v.tv_usec=1<<Z,&v))?getch():0;
k?++x-W||(x=1,++y-Q||(--k,x=W-1,y=Q-1)):--x||(y--,x=W-1),k|y;
)
{
j *t;
G
t=J[1-k][X[y][x]]; t; t=t->y) {
U*f=t->x;
if (d==f[17]|f[17]==c) {
int i=k&2,u=9,k=1,w=x,_=y,T;
G;
--u||(d-f[8]&&(X[y][x]=f[8]),w---_--,i=0,u=8,k--);) {
_+=P[T=i>u?u:i]-'o';
w+=P[4+T]-'p';
if(k) {
if (d-f[i]&&f[i]-X[_][w]) break;
i++;
} else
f[++i+8]-d && (X[_][w]=f[i+8]);
} } } } } }
jmp_buf E;
int main(int open, U**exit) {
FILE*C=fopen (
open-2?__FILE__:*++exit,P+8);
j*t;
volatile int Q,Y=0;
int i,q; d=open-2?'\t':'*'; L:
Q=0; G; setjmp(E)<256; Q--
)
longjmp(E,(J[Y][Q]=0,Q++));
G; ; ) {
if(!C)return 1;
if('\n'==(c=getc(C)))
if(!Y++)goto L; else
{ fscanf(C,"%d %d\n",&i,&q);
X=(U**I P++)*q*(i+1));
Q=0; G; Q<q; Q++)
X[Q]=(U*)&X[q]+Q*i;
fread(*X,(initscr(),q*i),1,C);
a(i,Q);
}
t=(j*I*a(Q--,--Q)));
t->y=J[Y][c]; J[Y][c]=t;
fgets(t->x,20,C); }
}
+9 -3
View File
@@ -18,7 +18,8 @@ compile with clang, fixing entries to work with macOS (some of which are **very
complicated** such as [1998/schweikh1](1998/schweikh1/schweikh1.c)), providing
alternate code where useful or necessary, fixing where possible dead links and
otherwise removing them, typo and consistency fixes and writing the [sgit
tool](https://github.com/xexyl/sgit) that we've published on the website. Thank
tool](https://github.com/xexyl/sgit) that we installed locally and have used to
easily run `sed` on files in the repository to help build the website. Thank
you **very much** for your extensive efforts in helping improve the IOCCC
presentation of past IOCCC winners and making many many past entries work with
modern systems!
@@ -384,7 +385,8 @@ compilers to compile the code, based on the author's remarks.
## [1990/cmills](1990/cmills/cmills.c) ([README.md](1990/cmills/README.md]))
Yusuke got this to work in modern systems (it resulted in a bus error).
Yusuke got this to work in modern systems (it previously resulted in a bus
error).
To prevent alarming warnings at linking or runtime Cody made the entry use
`fgets()` rather than `gets()`. He notes that another option would have been to
@@ -626,7 +628,7 @@ NOTE: as noted in the README.md file and the [bugs.md](/bugs.md), this program a
world](https://en.wikipedia.org/wiki/Earth) or just the
[USA](https://en.wikipedia.org/wiki/United_States), respectively, without enough
args (2). And not that we need the help or anything for this :-) but we do
encourage you to test this :-) This should not be fixed.
encourage you to test this :-) This should NOT be fixed.
## [1993/jonth](1993/jonth/jonth.c) ([README.md](1993/jonth/README.md]))
@@ -670,6 +672,10 @@ README.md files for details.
Yusuke supplied a patch to get this to work in modern systems.
Cody provided an alternate version to simplify slowing the game down. This was
based on our suggestion that it might be desired to slow down but done in a way
that makes it easy to configure at compile time. See the README.md for details.
## [1993/schnitzi](1993/schnitzi/schnitzi.c) ([README.md](1993/schnitzi/README.md]))
+1 -1
View File
@@ -44,7 +44,7 @@ CFLAGS= -O3 -g3 --pedantic -Wall
# target information #
######################
TARGETS= winner_name
TARGETS= winner_name ioccc_status
######################################
# all - default rule - must be first #
+1
View File
@@ -0,0 +1 @@
ioccc_status
+67
View File
@@ -0,0 +1,67 @@
#!/usr/bin/env make
#
# ioccc_status - quickly update status.json file
#
# Written by Cody Boone Ferguson in 2023
#
# @xexyl
# https://xexyl.net Cody Boone Ferguson
# https://ioccc.xexyl.net
#
# Share and enjoy! :-)
#############
# utilities #
#############
CC= cc
CHMOD= chmod
CP= cp
INSTALL= install
RM= rm
SHELL= bash
#CFLAGS= -O3 -g3 --pedantic -Wall -Werror
CFLAGS= -O3 -g3 --pedantic -Wall
######################
# target information #
######################
DESTDIR= ../../bin
TARGETS= ioccc_status
######################################
# all - default rule - must be first #
######################################
all: ${TARGETS}
@:
ioccc_status: ioccc_status.sh
${RM} -f -v $@
${CP} -f -v $? $@
${CHMOD} +x $@
#################################################
# .PHONY list of rules that do not create files #
#################################################
.PHONY: all configure clean clobber install
###################################
# standard Makefile utility rules #
###################################
configure:
@:
clean:
@:
clobber: clean
rm -f ${TARGETS}
install: all
${INSTALL} -m 0555 ${TARGETS} ${DESTDIR}
+181
View File
@@ -0,0 +1,181 @@
#!/usr/bin/env bash
#
# ioccc_status.sh - quickly update status.json file
#
# Written by Cody Boone Ferguson in 2023
#
# @xexyl
# https://xexyl.net Cody Boone Ferguson
# https://ioccc.xexyl.net
#
# The script is at this just point a proof of concept but it does work, allowing
# one to update the date of the latest news, the date of the status, the status
# version and the status of the contest. It's not required to update all or for
# that matter any of them.
#
# If that is not clear: it might or might not be needed or desired and that is
# perfectly okay. If it's used but modified that's also okay. It gave me
# something to do and whether or not it's useful it has served a purpose.
#
# If -s option is used, the status field is updated, providing that the status
# arg is either "closed" or "open".
#
# If the -d or -n flags are used then it will update the status_date or
# latest_news fields, respectively.
#
# If the -I status_ver option is used the IOCCC_status_version field will be
# updated.
#
export IOCCC_STATUS_VERSION="0.0.1-0 2023-10-02" # major.minor.release-patch YYYY-MM-DD
USAGE="usage: $(basename "$0") [-h] [-V] [-v level] [-s status] [-d] [-n] [-i status_ver] status.json
-h print help and exit
-V print version and exit
-v level set verbosity level
-s status set contest status to open or closed
NOTE: status must be one of \"open\" or \"closed\"
-d update status_date
-n update latest_news date
-i status_ver update IOCCC_status_version
status.json the file to update
status version: $IOCCC_STATUS_VERSION"
export UPDATE_DATE=""
export UPDATE_NEWS=""
export UPDATE_IOCCC_STATUS_VERSION=""
export IOCCC_STATUS_VERSION=""
export VERBOSITY=0
export STATUS_JSON_FILE=""
export STATUS_FLAG=""
export STATUS="closed" # default closed
# parse args
#
while getopts :hVv:s:dni: flag; do
case "$flag" in
h) echo "$USAGE" 1>&2
exit 2
;;
V) echo "$IOCCC_STATUS_VERSION" 1>&2
exit 2
;;
v) VERBOSITY="$OPTARG";
;;
s) STATUS_FLAG="-s"
STATUS="$OPTARG";
;;
d) UPDATE_DATE="-d"
;;
n) UPDATE_NEWS="-n"
;;
i) UPDATE_IOCCC_STATUS_VERSION="-i"
IOCCC_STATUS_VERSION="$OPTARG"
;;
:) echo "$0: ERROR: option -$OPTARG requires an argument" 1>&2
echo 1>&2
echo "$USAGE" 1>&2
exit 3
;;
*)
;;
esac
done
#
# remove the options
#
shift $(( OPTIND - 1 ));
#
# verify arg count
#
if [[ $# -gt 1 ]]; then
echo "$0: ERROR: expected 0 or 1 args, found: $#" 1>&2
echo "$USAGE" 1>&2
exit 3
fi
#
# parse args
#
if [[ $# -gt 0 ]]; then
export STATUS_JSON_FILE="$1"
fi
# firewall STATUS_JSON_FILE must be a readable file
#
if [[ ! -e $STATUS_JSON_FILE ]]; then
echo "$0: ERROR: status.json does not exist: $STATUS_JSON_FILE" 1>&2
exit 1
fi
if [[ ! -f $STATUS_JSON_FILE ]]; then
echo "$0: ERROR: status.json not a file: $STATUS_JSON_FILE" 1>&2
exit 1
fi
if [[ ! -r $STATUS_JSON_FILE ]]; then
echo "$0: ERROR: status.json not a readable file: $STATUS_JSON_FILE" 1>&2
exit 1
fi
# check that if -s used that the status ($STATUS) is either 'open' or 'closed'
if [[ -n "$STATUS_FLAG" ]]; then
if [[ "$STATUS" != "open" && "$STATUS" != "closed" ]]; then
echo "$0: ERROR: status must be 'open' or 'closed'" 1>&2
exit 1
fi
fi
if [[ "$VERBOSITY" -gt 1 ]]; then
echo "$0: status.json file: $STATUS_JSON_FILE" 1>&2
if [[ -n "$STATUS_FLAG" ]]; then
echo "$0: will update contest status to: \"$STATUS\"" 1>&2
fi
if [[ -n "$UPDATE_DATE" ]]; then
echo "$0: will update status_date to: $(date)" 1>&2
fi
if [[ -n "$UPDATE_NEWS" ]]; then
echo "$0: will update latest_news to: $(date)" 1>&2
fi
if [[ -n "$UPDATE_IOCCC_STATUS_VERSION" ]]; then
echo "$0: will update IOCCC_status_version to: $IOCCC_STATUS_VERSION" 1>&2
fi
fi
# first status_date if requested
if [[ -n "$UPDATE_DATE" ]]; then
sed -i'' "s|\"status_date\" : \".*[^\"]\"|\"status_date\" : \"$(date)\"|g" "$STATUS_JSON_FILE"
if [[ "$VERBOSITY" -ge 1 ]]; then
echo "$0: updated status_date to: $(date)" 1>&2
fi
fi
# then update latest_news date if requested
if [[ -n "$UPDATE_NEWS" ]]; then
sed -i'' "s|\"latest_news\" : \".*[^\"]\"|\"latest_news\" : \"$(date)\"|g" "$STATUS_JSON_FILE"
if [[ "$VERBOSITY" -ge 1 ]]; then
echo "$0: updated latest_news to: $(date)" 1>&2
fi
fi
# then update IOCCC_STATUS_VERSION if requested
if [[ -n "$UPDATE_IOCCC_STATUS_VERSION" ]]; then
sed -i'' "s|\"IOCCC_status_version\" : \".*[^\"]\"|\"IOCCC_status_version\" : \"$IOCCC_STATUS_VERSION\"|g" "$STATUS_JSON_FILE"
if [[ "$VERBOSITY" -ge 1 ]]; then
echo "$0: updated IOCCC_status_version to: \"$IOCCC_STATUS_VERSION\"" 1>&2
fi
fi
# finally if we need to change the status of the contest do so
if [[ -n "$STATUS_FLAG" ]]; then
sed -i'' "s|\"contest\" : \".*[^\"]\"|\"contest\" : \"$STATUS\"|g" "$STATUS_JSON_FILE"
if [[ "$VERBOSITY" -ge 1 ]]; then
echo "$0: updated contest status to: \"$STATUS\"" 1>&2
fi
fi