diff --git a/2018/mills/Makefile b/2018/mills/Makefile index 1d3085fa8..f148d8edd 100644 --- a/2018/mills/Makefile +++ b/2018/mills/Makefile @@ -139,8 +139,16 @@ all: data ${TARGET} clean clobber install love haste waste maker easter_egg \ sandwich supernova deep_magic magic charon pluto +# Variable to decide if the emulator should save state (default no) +# +SAVE=0 +MAP=MAP_PRIVATE +ifneq ($((SAVE)),0) + MAP=MAP_SHARED +endif + ${PROG}: ${PROG}.c rk05.bsd.fs - ${CC} ${CFLAGS} -DI='"rk05.bsd.fs"' -DA=4096 -DS=0173030 -DW=MAP_PRIVATE -DT= -DX=5 -DY=128 \ + ${CC} ${CFLAGS} -DI='"rk05.bsd.fs"' -DA=4096 -DS=0173030 -DW=${MAP} -DT= -DX=5 -DY=128 \ -DV=270 -DP='"89!>@@89T=@@89\"89DQ@K89$$89Q1@H0@@@P@1@@"' ${PROG}.c -o $@ ${LDFLAGS} rk05.bsd.fs: empty.fs.bz2 builddisk.bsd bsd.img.bz2 @@ -148,6 +156,10 @@ rk05.bsd.fs: empty.fs.bz2 builddisk.bsd bsd.img.bz2 ${BZIP2} -dc empty.fs.bz2 > rk05.bsd.fs ${BZIP2} -dc bsd.img.bz2 | ./builddisk.bsd +# NOTE: we don't set -DW=${MAP} here because it's already set to MAP_SHARED and +# we don't want to break anything here. The default for the program itself is +# MAP_PRIVATE but it's possible that if MAP is set to MAP_PRIVATE then having W +# set to MAP_PRIVATE here could be a problem as it's meant to be MAP_SHARED. builddisk.bsd: ${PROG}.c ${CC} ${CFLAGS} -DI='"rk05.bsd.fs"' -DA=4096 -DS=0 -DW=MAP_SHARED -DT= -DX=0 -DY=0 -DV=270 \ -DP='"Q@ 89D?A E@#?@$$D@H?<@E@$$8CA1@H8CJ4EH8CA1@L8CJ4FH)@!F@H%@$$1@H?@%89\"?<@89T89!Q@\"89$$89Q1@[%@#1@D<@ @EHO??@X@@@@@@@1@@"' \ @@ -158,6 +170,10 @@ rk05.v6.fs: empty.fs.bz2 builddisk.v6 v6.img.bz2 ${BZIP2} -dc empty.fs.bz2 > rk05.v6.fs ${BZIP2} -dc v6.img.bz2 | ./builddisk.v6 +# NOTE: we don't set -DW=${MAP} here because it's already set to MAP_SHARED and +# we don't want to break anything here. The default for the program itself is +# MAP_PRIVATE but it's possible that if MAP is set to MAP_PRIVATE then having W +# set to MAP_PRIVATE here could be a problem as it's meant to be MAP_SHARED. builddisk.v6: ${PROG}.c ${CC} ${CFLAGS} -DI='"rk05.v6.fs"' -DA=4096 -DS=0 -DW=MAP_SHARED -DT= -DX=0 -DY=0 -DV=270 \ -DP='"Q@ 89D?A E@#?@$$D@H?<@E@$$8CA1@H8CJ4EH8CA1@L8CJ4FH)@!F@H%@$$1@H?@%89\"?<@89T89!Q@\"89$$89Q1@[%@#1@D<@ @EHO??@X@@@@@@@1@@"' \ @@ -170,24 +186,37 @@ empty.fs.bz2: boot.dat ${BZIP2} empty.fs v0: ${PROG}.c Makefile v0.image.fs - @echo "This IOCCC25 Makefile preserves the state of v0.image.fs at the time it won." - @echo "If you want to look for v0.image.fs updates, try: ${CURL} ${IMAGE_FS_URL} -o v0.image.fs" - @echo "Warning: any updates from ${IMAGE_FS_URL} are unofficial and are not part of the IOCCC." - ${CC} ${CFLAGS} -DI='"v0.image.fs"' -DA=4096 -DS=0 -DW=MAP_PRIVATE \ + ${CC} ${CFLAGS} -DI='"v0.image.fs"' -DA=4096 -DS=0 -DW=${MAP} \ -DT="INLCR|ICRNL,0,0,ECHO" -DX=5 -DY=128 -DV=200 \ -DP='"89!?@@89T=@@89\"Q@M89DQ@L89$$89Q1@I0A@@P@X@@1@@"' ${PROG}.c -o $@ + @echo "" + @echo "This IOCCC25 Makefile preserves the state of v0.image.fs at the time it won." + @echo "If you want to look for v0.image.fs updates, try:" + @echo "" + @echo " ${CURL} ${IMAGE_FS_URL} -o v0.image.fs" + @echo "" + @echo "Warning: any updates from ${IMAGE_FS_URL}" + @echo "are unofficial and are not part of this IOCCC entry." + @echo "" v6: empty.fs.bz2 builddisk.v6 v6.img.bz2 rk05.v6.fs - ${CC} ${CFLAGS} -DI='"rk05.v6.fs"' -DA=4096 -DS=0173030 -DW=MAP_PRIVATE -DT= -DX=5 -DY=128 \ + ${CC} ${CFLAGS} -DI='"rk05.v6.fs"' -DA=4096 -DS=0173030 -DW=${MAP} -DT= -DX=5 -DY=128 \ -DV=270 -DP='"89!>@@89T=@@89\"89DQ@K89$$89Q1@H0@@@P@1@@"' ${PROG}.c -o $@ ${LDFLAGS} v6.img.bz2: v6.tape.gz - @echo "This IOCCC25 Makefile preserves the state of v6.tape.gz at the time it won." - @echo "If you want to look for v6.tape.gz updates, try: ${CURL} ${V6_TAPE_URL} -o v6.tape.gz" - @echo "Warning: any updates from ${V6_TAPE_URL} are unofficial and are not part of the IOCCC." ${RM} -f v6.tape ${GZIP_PROG} -c -d v6.tape.gz | ${DD} of=v6.img count=4000 skip=100 ${BZIP2} v6.img + @echo "" + @echo "This IOCCC25 Makefile preserves the state of v6.tape.gz at the time it won." + @echo "If you want to look for v6.tape.gz updates, try:" + @echo "" + @echo " ${CURL} ${V6_TAPE_URL} -o v6.tape.gz" + @echo "" + @echo "Warning: any updates from ${V6_TAPE_URL}" + @echo "are unofficial and are not part of this IOCCC entry." + @echo "" + # alternative executable # diff --git a/2018/mills/README.md b/2018/mills/README.md index 1f0dfff8e..a2bf970e8 100644 --- a/2018/mills/README.md +++ b/2018/mills/README.md @@ -4,12 +4,25 @@ make ``` +If you wish to save state so that you can run the program and keep files changed +(for instance you don't want to compile `mullender.c` again) you can compile it +like: + +```sh +make clobber SAVE=1 all +``` + +Make sure that if you do add a file (including by compiling code) that before +you exit (ctrl-e) you type in `sync`! Otherwise the file might not exist or it +will be corrupt if it does. + ### Bugs and (Mis)features: The current status of this entry is: ``` +STATUS: known bug - please help us fix STATUS: INABIAF - please **DO NOT** fix ``` diff --git a/bugs.md b/bugs.md index 6e1ea7d7c..8a5cd26b4 100644 --- a/bugs.md +++ b/bugs.md @@ -3185,10 +3185,25 @@ but this is expected and the file `ioccc.html` will be generated properly. ## 2018 mills -### STATUS: INABIAF - please **DO NOT** fix +### STATUS: known bug - please help us fix ### Source code: [2018/mills/prog.c](2018/mills/prog.c) ### Information: [2018/mills/README.md](2018/mills/README.md) +After exiting the program (with ctrl-e) if you try running it again you will +likely see: + +``` +>bootT5pw + ]h_ 8D3[] +``` + +where `[]` is the cursor. When this happens if you hit enter (this is necessary +or else it'll happen again) and then exit again (ctrl-e) and run `prog` again +it'll be okay. + + +### STATUS: INABIAF - please **DO NOT** fix + The author stated that if you make a typo it can happen that the boot loader can crash and halt. If this is the case type ctrl-e to quit the emulator and try again. @@ -3198,7 +3213,11 @@ do this you should type `make clobber all` and try again. Cody caused a funny problem where it showed `ERROR` after each command. The solution was to hit ctrl-e and start again. He does not know if this is what was -referred to by the author though he doesn't think he made a typo either. +referred to by the author but there was likely no typo involved. + +Cody notes that if you are using the saved mode you must type `sync` prior to +exiting the program or else the next time you run it the file will not exist (or +in the case of compiled code it won't be executable). ## 2018 vokes diff --git a/thanks-for-help.md b/thanks-for-help.md index fa1cb42f8..c6a66af9e 100644 --- a/thanks-for-help.md +++ b/thanks-for-help.md @@ -4066,6 +4066,18 @@ that's probably true: let's just say that for the IOCCC I'm (Cody) a weasel! :-) Cody also added the [try.sh](/2018/hou/try.sh) script. +## [2018/mills](/2018/mills/prog.c) ([README.md](/2018/mills/README.md)) + +[Cody](#cody), based on the author's remarks, made it possible to save state +between runs of the program so that one can resume where they left off. It +should be noted that there is a bug in the entry (irrespective of save state +option) where running `./prog` twice in a row involves having to hit (the second +run) enter and then exit and then start the program again. Also if you do add a +file you should run `sync` prior to exiting or else the file might not exist or +it might be corrupt. See [2018/mills in bugs.md](/bugs.md#2018-mills) for more +details on the bug. + + ## [2018/poikola](/2018/poikola/prog.c) ([README.md[(/2018/poikola/README.md)) [Cody](#cody) added the missing `docs` rule to the Makefile that forms a PDF