From 5d273bd197db9da4c0dd8b5c2fcd391aa3638411 Mon Sep 17 00:00:00 2001 From: Landon Curt Noll Date: Thu, 23 Mar 2023 21:38:43 -0700 Subject: [PATCH] fix Makefile and README.md for 2011/vik Help raw2wav find perl and make executable. --- 2011/vik/Makefile | 304 ++++++++++++++++++++++++++++++++++++++------- 2011/vik/README.md | 80 ++++++------ 2011/vik/raw2wav | 2 +- 3 files changed, 296 insertions(+), 90 deletions(-) mode change 100644 => 100755 2011/vik/raw2wav diff --git a/2011/vik/Makefile b/2011/vik/Makefile index 590383e84..a49662d96 100644 --- a/2011/vik/Makefile +++ b/2011/vik/Makefile @@ -1,53 +1,159 @@ #!/usr/bin/env make # -# 2011 makefile +# IOCCC 2011 winning entry - vik + +################################################################################ # -# Copyright (C) 2011, Landon Curt Noll, Simon Cooper, and Leonid A. Broukhis. +# Regarding individual entries: +# +# 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/ -################ -# tool locations -################ +############################# +# shell used by this Makefile +############################# # SHELL= bash -CP= cp -CPP= cpp -GUNZIP= gunzip -LD= ld -MAKE= make -RM= rm -SED= sed -TAR= tar -TRUE= true -# optimization +####################### +# common tool locations +####################### +# +include ../../var.mk + +# Set X11_LIBDIR to the directory where the X11 library resides +# +#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 +# +#X11_INCDIR= /usr/X11R6/include +#X11_INCDIR= /usr/X11/include +X11_INCDIR= /opt/X11/include + +# Common C compiler warnings to silence +# +#CSILENCE= +CSILENCE= -Wno-bitwise-op-parentheses -Wno-parentheses -Wno-unused-value + +# Common C compiler warning flags +# +#CWARN= ${CSILENCE} +#CWARN= -Wall ${CSILENCE} +#CWARN= -Wall -Wextra ${CSILENCE} +CWARN= -Wall -Wextra -pedantic ${CSILENCE} + +# Compiler standard +# +#CSTD= +#CSTD= -ansi +CSTD= -std=gnu11 + +# Compiler bit architecture +# +# Some entries require 32-bitness: +# ARCH= -m32 +# +# Some entries require 64-bitness: +# ARCH= -m64 +# +# By default we assume nothing: +# +ARCH= + +# 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} -I ${X11_INCDIR}/X11 +#CINCLUDE= `${SDL2_CONFIG} --cflags` + +# Optimization # # Most compiles will safely use -O2. Some can use only -O1 or -O. # A few compilers have broken optimizers or this entry make break # under those buggy optimizers and thus you may not want anything. +# Reasonable compilers will allow for -O3. # -OPT= -O2 +#OPT= +#OPT= -O +#OPT= -O1 +#OPT= -O2 +OPT= -O3 -# bitness +# Default flags for ANSI C compilation # -# Some entries require 32-bitness, -# other entries require 64-bitess. -# By default we assume nothing. -# -ARCH= +CFLAGS= ${CSTD} ${CWARN} ${ARCH} ${CDEFINE} ${CINCLUDE} ${OPT} -# default flags for ANSI C compilation +# Libraries needed to build # -CFLAGS= -Wall -W -ansi ${ARCH} ${OPT} +LIBS= +#LIBS= -lm +#LIBS= -L ${X11_LIBDIR} -lX11 +#LIBS= `${SDL2_CONFIG} --libs` -# ANSI compiler -# -# Set CC to the name of your ANSI compiler. +# C compiler to use # CC= cc +#CC=clang +#CC=gcc + +# Compiler add-ons or replacements for clang only +# +ifeq ($(CC),clang) +# +CSILENCE+= -Wno-missing-variable-declarations -Wno-poison-system-directories \ + -Wno-shorten-64-to-32 -Wno-sign-conversion +# +CWARN+= -Weverything +# +endif + +# Specific add-ons or replacements for gcc only +# +ifeq ($(CC),gcc) +# +#CSILENCE+= +# +#CWARN+= +# +endif ############################## @@ -55,47 +161,85 @@ CC= cc ############################## # ENTRY= vik -DATA= imaginal_state.mod mad_world.mod +PROG= ${ENTRY} +# +OBJ= ${PROG}.o +DATA= mad_world.mod randowan.mod raw2wav +TARGET= ${PROG} +# +ALT_OBJ= +ALT_TARGET= ################# # build the entry ################# # -all: ${ENTRY} ${DATA} +all: data ${TARGET} @${TRUE} -${ENTRY}: ${ENTRY}.c - @echo This next compile may take a while ... - ${CC} ${CFLAGS} ${ENTRY}.c -o ${ENTRY} +.PHONY: all alt data everything clean clobber install \ + love haste waste maker easter_egg sandwich \ + supernova deep_magic magic charon pluto + +${PROG}: ${PROG}.c + ${CC} ${CFLAGS} $< -o $@ ${LIBS} # alternative executable # -alt: +alt: data ${ALT_TARGET} @${TRUE} +# data files +# +data: ${DATA} + @${TRUE} + +# both all and alt +# +everything: all alt + ############### # utility rules ############### # -everything: all alt - clean: - ${RM} -f ${ENTRY}.o + ${RM} -f ${OBJ} ${ALT_OBJ} + @-if [ -f indent.c ]; then \ + echo ${RM} -f indent.c; \ + ${RM} -f indent.c; \ + fi clobber: clean - ${RM} -f ${ENTRY} - -nuke: clobber - @echo gnab gib! + ${RM} -f ${TARGET} ${ALT_TARGET} + @-if [ -e sandwich ]; then \ + ${RM} -f sandwich; \ + echo 'ate sandwich'; \ + fi install: - @echo "Surely you're joking Mr. Feynman!" + @echo "Dr. Spock says that is not logical!" + @${TRUE} -# backwards compatibility +# you may be able to misunderstand the source by reading indent.c # -build: all +indent.c: ${PROG}.c + @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 ################## @@ -104,15 +248,79 @@ build: all # love: @echo 'not war?' + @${TRUE} haste: $(MAKE) waste + @${TRUE} waste: - @echo 'waste' + @echo 'haste' + @${TRUE} + +maker: + @echo 'Participate in a maker faire' + @${TRUE} easter_egg: - @echo you expected to mis-understand this $${RANDOM} magic - @echo chongo '' "/\\oo/\\" - @echo Readers shall not be disallowed from being unable to partly misunderstand this final echo. + @echo "you expected to often misunderstand this $${RANDOM} magic" + @echo "chongo '' /\\oo/\\" + @echo "Eggy" + +sandwich: easter_egg + @if [ `id -u` -eq 0 ]; then \ + echo 'Okay.'; \ + echo "$${RANDOM}`date +%s`$${RANDOM}" > $@; \ + else \ + echo 'What? Make it yourself.'; \ + exit 1; \ + 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} + +deep_magic: supernova + @-if [ -r .code_anal ]; then \ + ccode_analysis --deep_magic 7889066cdbdf09b0408021754586e895be641cc9be29e7eafd3ca65359541f17 \ + --FNV1a_hash_512_bit -v2 "${PROG}" "${PROG}.c"; \ + else \ + echo "Wrong! Do it again!"; \ + sleep 2; \ + echo "Wrong! Do it again!"; \ + sleep 2; \ + echo "Wrong! Do it again!"; \ + fi + @${TRUE} + +magic: deep_magic + @-if [ -r .code_anal ]; then \ + ccode_analysis --level 20003 --mode 5717175 --FNV1a_hash_512_bit -v2 "${PROG}" "${PROG}.c"; \ + else \ + 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 + @${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" diff --git a/2011/vik/README.md b/2011/vik/README.md index 8ae4dda2d..7ed2e8cf6 100644 --- a/2011/vik/README.md +++ b/2011/vik/README.md @@ -1,32 +1,40 @@ # Most sound -Daniel Vik -802 Durshire Way -Sunnyvale, Ca 94087 - - + Daniel Vik + 802 Durshire Way + Sunnyvale, Ca 94087 + + +# To build: -## Judges' comments: -### To build: - - make vik +```sh +make +``` ### To run: - ./vik file.mod > audio_file.raw +```sh +./vik file.mod > audio_file.raw +``` ### Try: - ./vik randowan.mod | mplayer -demuxer rawaudio - - ./vik mad_world.mod | mplayer -demuxer rawaudio - +```sh +./vik randowan.mod | mplayer -demuxer rawaudio - +./vik mad_world.mod | mplayer -demuxer rawaudio - +``` -Alternatively, you can use +Alternatively, you can use: - ./vik file.mod > file.raw; ./raw2wav file.raw > file.wav +```sh +./vik file.mod > file.raw; ./raw2wav file.raw > file.wav +``` It is possible to download a number of Mod files from [The Mod Archive](http://modarchive.org). +## Judges' comments: + The randowan.mod and mad_world.mod files were created by [Henrik Bertilsson](http://www.translucentboy.com) and are included with his permission. @@ -42,14 +50,16 @@ initilzation for? Does it take your system a long time to compile? You may want to do try: - cc -S vik.c +```sh +cc -S vik.c +``` and to examine the resulting assembly file vik.s. On some platforms the assembly file is about 128 MBytes in size! ## Author's comments: -Introduction -============ + +### Introduction In 1987, Karsten Obarski changed the way music was handled in games and demos with the introducton of the MOD file format on Commodore Amiga. @@ -58,9 +68,7 @@ A MOD file contains a set of samples, a number of patterns indicating how and when the samples are to be played, a list of what patterns to play in what order, and a number of effects. - -Features -======== +### Features This program converts MOD files created with the standard trackers for Amiga, e.g. Pro Tracker, Noise Tracker and Sound Tracker to raw 16 bit @@ -85,9 +93,7 @@ program supports most of them, including: Due to size constraints tremolo and vibrato is not supported. Also, to avoid infinite long songs, the position jump feature is ignored. - -Songs -===== +### Songs With his permission, the package incldues two songs composed by Henrik Bertilsson, also known as Deelite: @@ -96,16 +102,13 @@ Bertilsson, also known as Deelite: 2. Randowan -Build -===== +### Build Compiling for *nix systems (including cygwin) is straight forward: $ gcc -o vik vik.c - -Usage -===== +### Usage ### Convert MOD file to raw 44.1kHz stereo audio file @@ -117,9 +120,7 @@ Usage (Don't forget the last '-' as it makes mplayer read from stdin.) - -Obfuscation -=========== +### Obfuscation The IOCCC rules did not put a limit on the entropy of the source code, and it appears that the general entropy rules doesn't apply. An estimate @@ -141,9 +142,7 @@ conditional and the program uses the ? operator (sigh) mainly to save space, but also to leverage the comma operator and precedence more efficiently. - -Portability -=========== +### Portability The progam is portable to most platforms. The only system dependency is that the program relies on writing binary data to stdout. @@ -152,20 +151,19 @@ Microsoft compilers adds a carriges return to newlines, and to compile the program with this platform, the following line can be added after the main declaration in order for the program to run correctly: - _setmode(_fileno(stdout), 0x8000); +```c +_setmode(_fileno(stdout), 0x8000); +``` - -Limitations -=========== +### Limitations The program only runs when a valid MOD file is passed as argument. If no argument is passed, the program crashes. --------------------------------------------------------------------------------- - diff --git a/2011/vik/raw2wav b/2011/vik/raw2wav old mode 100644 new mode 100755 index b34535fb5..ecc714c54 --- a/2011/vik/raw2wav +++ b/2011/vik/raw2wav @@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # # This work by Simon Cooper is licensed under a Creative Commons # Attribution-ShareAlike 3.0 Unported License.