Files
ioccc/2004/hibachi
Landon Curt Noll 09750f8899 release winning entries of IOCCC28 under the year 2024
Congratulations to:

* 2024/anders - Prize in sound coding - layered music generator
* 2024/burton - Prize in pentagrammatology - wordle hard mode solver
* 2024/cable1 - Prize in bot talk - LLM inference engine
* 2024/cable2 - Prize in murky waters - salmon recipe
* 2024/carlini - Prize in perfect timing - Intel 4004 emulation
* 2024/codemeow - Prize in tray planting - bonsai generator
* 2024/endoh1 - Prize in patient pointillism - slow ray tracer in CPP
* 2024/endoh2 - Prize in solid body physics - rotating rigid body simulation
* 2024/ferguson1 - Prize in diabolical logistics - Oregon trail pact with the devil
* 2024/ferguson2 - Prize in yil-tas - Navajo code talker translator
* 2024/howe - Nice accent eh-ward - mini vi
* 2024/kramer - Prize in linguistic arithmetic - natural language numerical calculator
* 2024/kurdyukov1 - Prize in phased periodicity - phase of the Moon
* 2024/kurdyukov2 - Prize in art restoration - JPEG artifact removal
* 2024/kurdyukov3 - Prize in virtual quietus - gaming VM and doom
* 2024/kurdyukov4 - Prize in embiggening - encode without literals
* 2024/maffiodo - Prize in creative interpretation - Jav\*script interpreter
* 2024/mills - Prize in ℤ₃ - Infocom v3 story interpreter
* 2024/stedolan - Best one liner - icon from MD5
* 2024/straadt - Prize in imitative rebooting - OpenRISC CPU and Linux
* 2024/tmarrec - Prize in cyclonic coding - 3D tornado simulation
* 2024/tompng - Prize in quasi bijection - vortex encryptor decryptor
* 2024/weaver - Sur prize - rickroll

Ran `make update` to perform the above.
 	new file:   2024/burton/.entry.json
2025-08-02 14:43:07 -07:00
..
2023-07-06 21:49:38 -07:00
2024-08-14 09:25:39 -07:00

To build:

    make

There is an alternate version that is unobfuscated, provided by the author in 2024. See Alternate code below.

Bugs and (Mis)features:

The current status of this entry is:

STATUS: INABIAF - please DO NOT fix

For more detailed information see 2004/hibachi in bugs.html.

To use:

    cd build; ./hibachi-start.sh &

Then use your web browser to visit http://localhost:8008/. When you're finished make sure to kill hibachi.

NOTE: you must be in the build directory when running hibachi-start.sh for this to work right.

Alternate code:

This version, contained in src-alt/, is an unobfuscated version provided by the author in 2024.

Alternate build:

    make alt

This will run the configure script and then compile and link in (in build-alt/) the binary hibachi.

Alternate use:

    cd build-alt ; ./hibachi-start.sh &

Then with your browser do the same as for the original source.

Judges' remarks:

This entry violates the guidelines in so many ways! We are not exactly sure how many organisations will be upset with this entry, but we are considering starting an IOCCC standards body just to reign in the likes of Mr Howe.

This entry also has the dubious honour of being the only one to have been submitted with its own configure script.

NOTE: the author states there is a tarball hibachi.tgz but this was extracted so the file does not exist here.

Author's remarks:

README.TXT (Feb 2004)

Hibachi is a simple, small, and (probably) very secure web server.

There is a hibachi.tgz file (NOTE: this file was removed by the judges after extraction) that unpacks several support files and a subdirectory tree containing the documentation and examples. It can be viewed by:

    tar -zxf hibachi.tgz
    lynx hibachi/localhost/index.html

Or once Hibachi is running, use a web browser (preferably one that supports images and JavaScript, to view the documentation and try some of the CGI examples) to visit: http://localhost:8008/.

Building

To build just the executable:

For Cygwin, FreeBSD, Linux (newer), Mac OS X:

    gcc -o hibachi hibachi.c

For Linux (older):

    gcc -DSHUT_WR=1 -o hibachi hibachi.c

For SunOS:

    gcc -o hibachi hibachi.c -lnsl -lsocket

Since some systems place socket and network functions into other libraries, a GNU autoconf configure script has been provided to figure out the necessary link libraries, to verify all the necessary headers and functions are present, and setup the #! paths for the CGI examples. In which case the preferred build commands are:

    ./configure [--enable-port=number]
    make

To start the server on the default port (8008):

    cd build;
    ./hibachi-start.sh &

To test the server:

    lynx http://localhost:8008/

To stop the server:

    kill %1

Features

  • Supports virtual hosts.

  • Supports all MIME types.

  • Supports CGI: Common Gateway Interface scripts and programs.

  • Supports multiple index.* file extensions and types:

     index.htm, index.html, index.php, index.pl, index.sh, index.rb, index.py
    
  • Supports subset of RFC 2616 HTTP/1.1 methods: GET, HEAD, and POST.

  • Simple & straight forward configuration using environment variables.

  • Portability across Unix-like environments, such as: Cygwin, FreeBSD, Linux, SunOS.

  • Known to work with Lynx, Mozilla, Opera, and Internet Explorer web browsers.

  • Is a dedicated process-forking server that does not use inetd.

  • Is secure against relative path file snooping.

  • Is secure against directory searches.

  • CGI script execution managed through Unix file permissions.

  • ~155 lines of source, 1940 bytes long by IOCCC 2004 rules, ~6KB compiled & stripped for FreeBSD.

  • Superior & smaller than micro_httpd from http://www.acme.com/.

  • And has a really cool tongue-in-cheek animated logo too.

Comments

  • This code is properly indented using the One True Brace style.

  • HTTP/1.0 200 OK == HTTP/1.1 200 OK CRLF Connection: close ?

  • getenv() == putenv() ?

  • Hibachi can serve www.ioccc.org.

  • Commented obfuscation change log information available.

Known Issue

  • The links (text) web browser does not support RFC 2616 section 7.2.1 paragraph 3 sentence 2, and so fails to display responses from hibachi.

Suggested IOCCC Categories

  • Best Utility
  • Best Support
  • Most Portable Package
  • Most Likely to Cook Apache
  • Best Interpretation of RFC 2616
  • Winner of The Far Too Much Free Time Award

Changelog

For a list of significant changes made during development, see src/localhost/CHANGELOG.TXT.