remove orig code from 2012/hamano

This commit is contained in:
Landon Curt Noll committed 2023-03-07 22:16:55 -08:00
1 parent 765e13c6d9
commit e7ce99c599
3 files changed
+210 -145

No files matched your search

+206 -82
View File
@@ -1,96 +1,162 @@
#!/usr/bin/env make #!/usr/bin/env make
# #
# 2012 makefile # IOCCC 2012 winning entry - hamano
################################################################################
# #
# This work by Landon Curt Noll, Simon Cooper, and Leonid A. Broukhis # Regarding individual entries:
# is licensed under: #
# IOCCC winning entry code may not work on your system. Even with standards,
# conditions and build environments change, especially when it comes to more
# extreme code such you might find in an IOCCC winner. Moreover, what was
# allowed and liked in one IOCCC contest may no longer be liked/allowed in
# later IOCCC years.
#
# Corrections on winning author and fixing typos in remarks are VERY WELCOME.
#
# GitHub pull requests are welcome:
#
# If you have a patch that might make running an entry work in modern Unix-like
# environments, please create a GitHub pull request for the IOCCC judges to
# consider.
#
# Suggestions and corrections regarding Makefiles, winning author information,
# fixing typos in remarks, and code patches are welcome via opening a GitHub
# issue or better yet, by creating a GitHub pull request for the IOCCC judges
# to consider. To form a GitHub issue or GitHub pull, please visit:
#
# https://github.com/ioccc-src/winner
#
################################################################################
# This work by Landon Curt Noll and Leonid A. Broukhis is licensed under:
# #
# Creative Commons Attribution-ShareAlike 3.0 Unported License. # Creative Commons Attribution-ShareAlike 3.0 Unported License.
# #
# See: http://creativecommons.org/licenses/by-sa/3.0/ # See: http://creativecommons.org/licenses/by-sa/3.0/
################ #############################
# tool locations # shell used by this Makefile
################ #############################
# #
SHELL= bash SHELL= bash
CP= cp
CPP= cpp #######################
GUNZIP= gunzip # common tool locations
LD= ld #######################
MAKE= make #
RM= rm include ../../var.mk
SED= sed
TAR= tar
TRUE= true
# Set X11_LIBDIR to the directory where the X11 library resides # Set X11_LIBDIR to the directory where the X11 library resides
# #
X11_LIBDIR= /usr/X11R6/lib #X11_LIBDIR= /usr/X11R6/lib
#X11_LIBDIR= /usr/X11/lib
X11_LIBDIR= /opt/X11/lib
# Set X11_INCLUDEDIR to the directory where the X11 include files reside # Set X11_INCLUDEDIR to the directory where the X11 include files reside
# #
X11_INCDIR= /usr/X11R6/include #X11_INCDIR= /usr/X11R6/include
#X11_INCDIR= /usr/X11/include
X11_INCDIR= /opt/X11/include
# Compiler warnings # Common C compiler warnings to silence
# #
#CWARN= #CSILENCE=
CWARN= -Wall -W CSILENCE= -Wno-bitwise-op-parentheses -Wno-empty-body -Wno-format \
#CWARN= -Wall -W -pedantic -Wno-format-security -Wno-gnu-zero-variadic-macro-arguments -Wno-main \
-Wno-parentheses
# compiler standard # Common C compiler warning flags
#
#CWARN= ${CSILENCE}
#CWARN= -Wall ${CSILENCE}
#CWARN= -Wall -Wextra ${CSILENCE}
CWARN= -Wall -Wextra -pedantic ${CSILENCE}
# Compiler standard
# #
#CSTD= #CSTD=
#CSTD= -ansi #CSTD= -ansi
CSTD= -std=c99 CSTD= -std=gnu11
# compiler bit architecture # Compiler bit architecture
# #
# Some entries require 32-bitness: # Some entries require 32-bitness:
# ARCH= -m32 # ARCH= -m32
# #
# Some entries require 64-bitess: # Some entries require 64-bitness:
# ARCH= -m64 # ARCH= -m64
# #
# By default we assume nothing: # By default we assume nothing:
# #
ARCH= ARCH=
# optimization # Defines that are needed to compile
#
CDEFINE=
#CDEFINE= -DIOCCC
# Include files that are needed to compile
#
CINCLUDE=
#CINCLUDE= -include stdlib.h
#CINCLUDE= -include stdio.h
#CINCLUDE= -include stdlib.h -include stdio.h
#CINCLUDE= -I ${X11_INCDIR}
#CINCLUDE= -I ${HOMEBREW_PREFIX}/include/SDL2
# Optimization
# #
# Most compiles will safely use -O2. Some can use only -O1 or -O. # Most compiles will safely use -O2. Some can use only -O1 or -O.
# A few compilers have broken optimizers or this entry make break # A few compilers have broken optimizers or this entry make break
# under those buggy optimizers and thus you may not want anything. # under those buggy optimizers and thus you may not want anything.
# Reasonable compilers will allow for -O3.
# #
#OPT= #OPT=
#OPT= -O #OPT= -O
#OPT= -O1 #OPT= -O1
OPT= -O2 #OPT= -O2
#OPT= -O3 OPT= -O3
# Default flags for ANSI C compilation
#
CFLAGS= ${CSTD} ${CWARN} ${ARCH} ${CDEFINE} ${CINCLUDE} ${OPT}
# Libraries needed to build # Libraries needed to build
# #
LIBS= LIBS=
#LIBS= -lm
#LIBS= -L ${X11_LIBDIR} -lX11
#LIBS= -L ${HOMEBREW_PREFIX}/lib -lSDL2
# default flags for ANSI C compilation # C compiler to use
#
CFLAGS= ${CWARN} ${CSTD} ${ARCH} ${OPT} ${LIBS}
# ANSI compiler
#
# Set CC to the name of your ANSI compiler.
#
# Some entries seem to need gcc. If you have gcc, set
# both CC and MAY_NEED_GCC to gcc.
#
# If you do not have gcc, set CC to the name of your ANSI compiler, and
# set MAY_NEED_GCC to either ${CC} (and hope for the best) or to just :
# to disable such programs.
# #
CC= cc CC= cc
#CC=clang #CC=clang
MAY_NEED_GCC= gcc #CC=gcc
# Compiler add-ons or replacements for clang only
#
ifeq ($(CC),clang)
#
CSILENCE+= -Wno-comma -Wno-double-promotion -Wno-missing-prototypes \
-Wno-missing-variable-declarations -Wno-poison-system-directories \
-Wno-shadow -Wno-shorten-64-to-3
#
CWARN+= -Weverything
#
endif
# Specific add-ons or replacements for gcc only
#
ifeq ($(CC),gcc)
#
#CSILENCE+=
#
#CWARN+=
#
endif
############################## ##############################
@@ -98,27 +164,33 @@ MAY_NEED_GCC= gcc
############################## ##############################
# #
ENTRY= hamano ENTRY= hamano
PROG= ${ENTRY}
#
OBJ= ${PROG}.o
DATA= DATA=
TARGET= ${PROG}
#
ALT_OBJ= ALT_OBJ=
ALT_ENTRY= hamano.orig ALT_TARGET=
################# #################
# build the entry # build the entry
################# #################
# #
all: ${ENTRY} ${DATA} all: data ${TARGET}
@${TRUE} @${TRUE}
${ENTRY}: ${ENTRY}.c .PHONY: all alt data everything clean clobber install \
${CC} ${CFLAGS} $< -o $@ love haste waste maker easter_egg sandwich \
supernova deep_magic magic charon pluto
${ALT_ENTRY}: ${ALT_ENTRY}.c ${PROG}: ${PROG}.c
${CC} ${CFLAGS} $< -o $@ ${CC} ${CFLAGS} $< -o $@ ${LIBS}
# alternative executable # alternative executable
# #
alt: ${ALT_ENTRY} alt: data ${ALT_TARGET}
@${TRUE} @${TRUE}
# data files # data files
@@ -126,33 +198,51 @@ alt: ${ALT_ENTRY}
data: ${DATA} data: ${DATA}
@${TRUE} @${TRUE}
# both all and alt
#
everything: all alt
############### ###############
# utility rules # utility rules
############### ###############
# #
everything: all alt
clean: clean:
${RM} -f ${ENTRY}.o ${ALT_OBJ} ${RM} -f ${OBJ} ${ALT_OBJ}
@-if [ -f indent.c ]; then \
echo ${RM} -f indent.c; \
${RM} -f indent.c; \
fi
clobber: clean clobber: clean
${RM} -f ${ENTRY} ${ALT_ENTRY} ${RM} -f ${TARGET} ${ALT_TARGET}
@-if [ -e sandwich ]; then \
nuke: clobber ${RM} -f sandwich; \
@${TRUE} echo 'ate sandwich'; \
fi
dist_clean: nuke
@${TRUE}
install: install:
@echo "Surely you're joking Mr. Feynman!" @echo "Dr. Spock says that is not logical!"
@${TRUE} @${TRUE}
# backwards compatibility # you may be able to misunderstand the source by reading indent.c
# #
build: all indent.c: ${PROG}.c
@${TRUE} @if which "${GINDENT}" >/dev/null 2>&1; then \
echo ${RM} -f $@; \
${RM} -f $@; \
echo "${GINDENT} < $< > $@"; \
${GINDENT} < $< > $@; \
elif which "${INDENT}" >/dev/null 2>&1; then \
echo ${RM} -f $@; \
${RM} -f $@; \
echo "${INDENT} < $< > $@"; \
${INDENT} < $< > $@; \
else \
echo "no intent tool found, ident $< yourself, sorry"; \
echo "exit 1"; \
exit 1; \
fi
################## ##################
@@ -168,39 +258,73 @@ haste:
@${TRUE} @${TRUE}
waste: waste:
@echo 'waste' @echo 'haste'
@${TRUE}
maker:
@echo 'Participate in a maker faire'
@${TRUE} @${TRUE}
easter_egg: easter_egg:
@echo you expected to mis-understand this $${RANDOM} magic @echo "you expected to often misunderstand this $${RANDOM} magic"
@echo chongo '<was here>' "/\\oo/\\" @echo "chongo '<was here>' /\\oo/\\"
@echo Readers shall be disallowed from not being unable to partly misunderstand this partocular final echo. @echo "Eggy"
# Understand the history of "I Am the Walrus" and sandwich: easter_egg
# and in particular John Lennon's remarks on that @if [ `id -u` -eq 0 ]; then \
# song and you might be confused about these next echo 'Okay.'; \
# rules in a different way. :-) echo "$${RANDOM}`date +%s`$${RANDOM}" > $@; \
#
supernova: nuke
@-if [ -r .code_anal ]; then \
${RM} -f .code_anal_v3; \
else \ else \
echo "You are not expected to understand this"; \ echo 'What? Make it yourself.'; \
exit 1; \
fi fi
# Understand the history of the Homebrew Computer Club
# as well as the West Coast Computer Faire and
# you might be confused different. :-)
#
supernova: sandwich
@-if [ -r .code_anal ]; then \
${RM} -f .code_anal_v6; \
else \
echo "planet deniers, like some members of the IAU, are so cute when they try to defend their logic"; \
fi
@echo "A $@ helps ${MAKE} the elements that help form planets"
@${TRUE} @${TRUE}
deep_magic: deep_magic: supernova
@-if [ -r .code_anal ]; then \ @-if [ -r .code_anal ]; then \
ccode_analysis --deep_magic 1c2c85c7a02c55d1add91967eca491d53c101dc1 --FNV1a_hash 256-bit "${ENTRY}"; \ ccode_analysis --deep_magic 7889066cdbdf09b0408021754586e895be641cc9be29e7eafd3ca65359541f17 \
--FNV1a_hash_512_bit -v2 "${PROG}" "${PROG}.c"; \
else \ else \
echo "Understand different"; \ echo "Wrong! Do it again!"; \
sleep 2; \
echo "Wrong! Do it again!"; \
sleep 2; \
echo "Wrong! Do it again!"; \
fi fi
@${TRUE} @${TRUE}
magic: deep_magic magic: deep_magic
@-if [ -r .code_anal ]; then \ @-if [ -r .code_anal ]; then \
ccode_analysis --mode 21701 --level 23209 --FNV1a_hash 256-bit "${ENTRY}"; \ ccode_analysis --level 20003 --mode 5717175 --FNV1a_hash_512_bit -v2 "${PROG}" "${PROG}.c"; \
else \ else \
echo "These aren't the droids you're looking for Mr. Spock!"; \ echo "If you don't eat yer meat, you can't have any pudding!"; \
echo "How can you have any pudding if you don't eat yer meat?!"; \
fi fi
@${TRUE} @${TRUE}
# The IOCCC resident astronomer states
#
charon: magic
@echo "$@ is a dwarf planet"
@echo "dwarf is a type of planet"
@echo "therefore IAU, $@ is a planet"
pluto: charon
${MAKE} charon
@echo "$@ is a dwarf planet"
@echo "dwarf is a type of planet"
@echo "therefore, $@ is a planet"
@echo "having lots of planets is good feature because supernovae can help ${MAKE} a lot of them"
+4 -6
View File
@@ -3,11 +3,9 @@
Tsukasa Hamano Tsukasa Hamano
<hamano@cuspy.org> <hamano@cuspy.org>
## To build:
## Judges' comments: make all
### To build:
make hamano
### To run: ### To run:
@@ -32,7 +30,7 @@ Tsukasa Hamano
./hello2 | gcc -xc - -o ./hello3 ./hello2 | gcc -xc - -o ./hello3
./hello3 ./hello3
### Selected Judges Remarks: ## Judges' comments
This entry treads into a new territory for IOCCC - generating PDF files. This entry treads into a new territory for IOCCC - generating PDF files.
@@ -60,8 +58,8 @@ Don't forget to take a look at the generated PDF, perhaps you might even want
to compile the output with a C compiler. When you run it, what does it to compile the output with a C compiler. When you run it, what does it
output? output?
## Author's comments
## Author's comments:
This program obfuscate text file into PDF file with Dancing men This program obfuscate text file into PDF file with Dancing men
algorithm. algorithm.
-57
View File
@@ -1,57 +0,0 @@
#define \
D(s)"<<"#s">>"
#define q(s)p(#s)
#define S " endobj "
#define Y "endstream"S
#include <stdio.h>
#define o(s) b[s]=_;\
p("%u 0 obj",s);
#define E for (c=d;c < 123;c++)
#define DANCE "trailer "D\
(/Root 3 0 R /Size %d) "\nstartxref %u %%%%EOF\n*/"
#define p(s, ...) _+=printf(s, ##__VA_ARGS__)
#define C "<</Type/Page /Parent %d %d R /Resources <<\
/ProcSet[ /PDF/Text]/Font <</U"D(/Subtype/Type1/BaseFont\
/Courier) " /T<</Subtype/Type3 /FontBBox[0 0 10 10]/FontMatrix[\
%f 0 0 %f 0 0]/FirstChar %d/LastChar %d/Encoding<</Differences[%d"
typedef int N;typedef char*Nyan;typedef char A;N a,b[64],d=65,_,v
[32]={84,0,64,282,90,74,330,85,93,173,167,176,80,208,81,13,7,87
,160,346,32,128,170,218,16,26}; Nyan w[]={"+*-(,&-&","+*,&-&"
,"+*.&/&","+*/*/+","+*())'('" ,"+**&)&","+*(&'&","+*'*'+",
"","+,./","+,-,./","+--,+*" ,"","+,(/","+,),(/","+-),+*"
,"10 0 d0 ","8 7 2 2 re " ,"+*+.'`'@'mi +/+/(mi"};Nyan
nyan(Nyan _,N y,A n){
N g=v[~-y%32];Nyan
s=w[g>>n&3|n*2];
for(a=0;*_=*s++;
a++,_++,*_++=32)
{*_+=*_-32?10:0;
if(a%2&&*_/16==3
){if(g>>8)*_=105-*_;
_++;*_++=32;*_=~-a&&a-13
?108:109;}}return n?n-9?nyan
(_,y,n-2):_:nyan(_+=~y&' '?sprintf
(_,17[w]):0,y,9);}N main(N c){A e[256];
p("/*%%PDF-1.3%%*/")-2;q(#include<stdio.h>\n);
q(#define o *_++&& *_-41\n#define);p(" endstream ");q
(main(){for(;*_++; *_-40?:putchar(o?*_:o?10:41));\n)
;q(#define endobj return 0;}\n);q(typedef int ET;/)
;q(*);o(1)*b=~(p(D (/Length 2 0 R)"stream\n"))
;for(p("BT 12 818" " Td/%c 12 Tf 12 TL%%%c/"
"static char*_=\"" " \\\n",7[v],*v/2);c=
getchar(),~c;c-10? p("/%c 12 Tf(\\%o)"
"Tj",v[~-c%' '<25[ v]&&!~-(~-c/'@')?0
:7],c):(p("()'"))) ;p("%%\";\nET ");*
b-=~_;p(Y"/*");E{a =nyan(e+sprintf(e,
16[w]),c,6)-e;o(c- 59)p(D(/Length %d)
"stream\n%s"Y,a,e) ;}o(2)p(" %u"S,*b);
o(3)p(D(/Pages 4 0 R)S);o(4)p(D(/Count
1/MediaBox[0 0 595 842]/Kids[5 0 R])S)
;o(5)p(C,4,0,6e-2, 6e-2f,d,122,d);E p(
"/%c",~-c/6+~14?c: d);q(]>>/CharProcs<<)
;E if(~-c/6+~14)p( "/%c %d 0 R",c,c+~58);
for(q(>>/Widths[), c=';';--c;p(" 10"));*b
=q(]>>>>>>/Contents 1 0 R>>);for(p("xref 0 "
"%d ",--d);c<d;)p("%010"
"u %05d n ",*(c+++b),0);
return!(p(DANCE,d,*b));}