Add 2006/birken/try.sh, bugs.md, format/typo check
The try.sh runs the program on all the tofu input files, prompting the user to press a key before running each one so they have time to look at the output of the previous one. The README.md file format and typo checked. This should complete 2006/birken except that it uses gets(), not fgets(), which has been added to the bugs.md file. I almost got it to work but it crashes with computer.tofu so I did not change it. Will look at this later, maybe, but the bugs.md has a diff of the single change that almost works. I did not have the time to write where it fails but I do happen to know at least the end result.
This commit is contained in:
1 parent
e9ffd327d6
commit
8231e28567
4 files changed
+108
-13
No files matched your search
+21
-13
@@ -5,6 +5,17 @@ make
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Bugs and (Mis)features:
|
||||||
|
|
||||||
|
The current status of this entry is:
|
||||||
|
|
||||||
|
```
|
||||||
|
STATUS: uses gets() - change to fgets() if possible
|
||||||
|
```
|
||||||
|
|
||||||
|
For more detailed information see [2006 birken in bugs.md](/bugs.md#2006-birken).
|
||||||
|
|
||||||
|
|
||||||
## To use:
|
## To use:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
@@ -15,10 +26,7 @@ make
|
|||||||
### Try:
|
### Try:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
./birken < counter.tofu
|
./try.sh
|
||||||
./birken < adder.tofu
|
|
||||||
./birken < buffer.tofu
|
|
||||||
./birken < computer.tofu
|
|
||||||
```
|
```
|
||||||
|
|
||||||
etc.
|
etc.
|
||||||
@@ -30,22 +38,22 @@ Q: EDAMAME?
|
|||||||
|
|
||||||
A: Electronic Design Automation - Mechanical Abstract Machine Emulator
|
A: Electronic Design Automation - Mechanical Abstract Machine Emulator
|
||||||
|
|
||||||
What is TUFO? It's not a veggy friendly food, nor it is Verilog or
|
What is TOFU? It's not a veggie friendly food, nor it is
|
||||||
VHDL. It is not even Pascal!
|
[Verilog](https://en.wikipedia.org/wiki/Verilog) or
|
||||||
|
[VHDL](https://en.wikipedia.org/wiki/VHDL) It is not even
|
||||||
|
[Pascal](https://en.wikipedia.org/wiki/Pascal_(programming_language))!
|
||||||
|
|
||||||
NOTE: On some systems, file(1) claims one of the .tofu files is Pascal
|
NOTE: On some systems, `file(1)` claims one of the `.tofu` files is Pascal
|
||||||
source. :-)
|
source. :-)
|
||||||
|
|
||||||
It may not be the most readable hardware description language, but it is
|
It may not be the most readable hardware description language, but it is
|
||||||
one of the easiest 55 page long manual to learn. :-)
|
one of the easiest 55 page long manuals to learn. :-)
|
||||||
|
|
||||||
For a small but non-trivial design, try implementing a
|
For a small but non-trivial design, try implementing a
|
||||||
[Linear Feedback Shift Register](http://en.wikipedia.org/wiki/LFSR)
|
[Linear Feedback Shift Register](http://en.wikipedia.org/wiki/LFSR)
|
||||||
|
|
||||||
And for those who are still confused:
|
And for those who are still confused, see <http://en.wikipedia.org/wiki/Edamame>
|
||||||
|
and <http://en.wikipedia.org/wiki/Tofu>.
|
||||||
> <http://en.wikipedia.org/wiki/Edamame>
|
|
||||||
> <http://en.wikipedia.org/wiki/Tofu>
|
|
||||||
|
|
||||||
|
|
||||||
## Author's remarks:
|
## Author's remarks:
|
||||||
@@ -64,7 +72,7 @@ The primary obfuscation is the data structure chosen for parsing the
|
|||||||
input file and for executing the simulation. Oh man... coding that
|
input file and for executing the simulation. Oh man... coding that
|
||||||
data structure gave me such a bad headache. But, I figure, who needs
|
data structure gave me such a bad headache. But, I figure, who needs
|
||||||
more than a pair anyway? Subtle obfuscations abound. Bonus points go
|
more than a pair anyway? Subtle obfuscations abound. Bonus points go
|
||||||
out the one who discovers the hidden program within the source.
|
out to the one who discovers the hidden program within the source.
|
||||||
|
|
||||||
Note that the shape of the source is a wave, not a waveform.
|
Note that the shape of the source is a wave, not a waveform.
|
||||||
|
|
||||||
|
|||||||
Executable
+68
@@ -0,0 +1,68 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# try.sh - demonstrate IOCCC winner 2006/birken
|
||||||
|
#
|
||||||
|
|
||||||
|
# make sure CC is set so that when we do make CC="$CC" it isn't empty. Doing it
|
||||||
|
# this way allows us to have the user specify a different compiler in an easy
|
||||||
|
# way.
|
||||||
|
if [[ -z "$CC" ]]; then
|
||||||
|
CC="cc"
|
||||||
|
fi
|
||||||
|
|
||||||
|
make CC="$CC" all >/dev/null || exit 1
|
||||||
|
|
||||||
|
# clear screen after compilation so that only the entry is shown
|
||||||
|
clear
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to run: ./birken < adder.tofu 2>/dev/null: "
|
||||||
|
./birken < adder.tofu 2>/dev/null
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to run: ./birken < buffer.tofu 2>/dev/null: "
|
||||||
|
./birken < buffer.tofu 2>/dev/null
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
echo "NOTE: the next one has longer output." 1>&2
|
||||||
|
read -r -n 1 -p "Press any key to run: ./birken < computer.tofu 2>/dev/null: "
|
||||||
|
./birken < computer.tofu 2>/dev/null
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to run: ./birken < counter.tofu 2>/dev/null: "
|
||||||
|
./birken < counter.tofu 2>/dev/null
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to run: ./birken < divider.tofu 2>/dev/null: "
|
||||||
|
./birken < divider.tofu 2>/dev/null
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to run: ./birken < lfsr.tofu 2>/dev/null: "
|
||||||
|
./birken < lfsr.tofu 2>/dev/null
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to run: ./birken < memory.tofu 2>/dev/null: "
|
||||||
|
./birken < memory.tofu 2>/dev/null
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to run: ./birken < multiplier.tofu 2>/dev/null: "
|
||||||
|
./birken < multiplier.tofu 2>/dev/null
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to run: ./birken < multiplier2.tofu 2>/dev/null: "
|
||||||
|
./birken < multiplier2.tofu 2>/dev/null
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to run: ./birken < oneline.tofu 2>/dev/null: "
|
||||||
|
./birken < oneline.tofu 2>/dev/null
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to run: ./birken < shift.tofu 2>/dev/null: "
|
||||||
|
./birken < shift.tofu 2>/dev/null
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to run: ./birken < zuse.tofu 2>/dev/null: "
|
||||||
|
./birken < zuse.tofu 2>/dev/null
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to run: ./birken < zuse2.tofu 2>/dev/null: "
|
||||||
|
./birken < zuse2.tofu 2>/dev/null
|
||||||
@@ -2305,6 +2305,23 @@ used decimal mode, or any of the "undocumented" instructions.
|
|||||||
# 2006
|
# 2006
|
||||||
|
|
||||||
|
|
||||||
|
## 2006 birken
|
||||||
|
|
||||||
|
### STATUS: uses gets() - change to fgets() if possible
|
||||||
|
### Source code: [2006/birken/birken.c](2006/birken/birken.c)
|
||||||
|
### Information: [2006/birken/README.md](2006/birken/README.md)
|
||||||
|
|
||||||
|
This entry uses `gets(3)` which is unsafe and provides annoying warnings, most
|
||||||
|
obnoxious in macOS as it shows it at runtime (redirecting `stderr` to
|
||||||
|
`/dev/null` will silence it). The following diff will almost work but it crashes
|
||||||
|
with at least `computer.tofu` input file:
|
||||||
|
|
||||||
|
```diff
|
||||||
|
12a13
|
||||||
|
#define gets(c) fgets((c),PI,stdin)&&(((c)[strlen((c))-1]='\0'),c!=NULL)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## 2006 borsanyi
|
## 2006 borsanyi
|
||||||
|
|
||||||
### STATUS: INABIAF - please **DO NOT** fix
|
### STATUS: INABIAF - please **DO NOT** fix
|
||||||
|
|||||||
@@ -2952,6 +2952,8 @@ it.
|
|||||||
Cody fixed a segfault in macOS with this entry. The problem was a missing `+1`
|
Cody fixed a segfault in macOS with this entry. The problem was a missing `+1`
|
||||||
for strlen() with malloc(). This prevented it from working.
|
for strlen() with malloc(). This prevented it from working.
|
||||||
|
|
||||||
|
Cody also added the [try.sh](2006/birken/try.sh) script.
|
||||||
|
|
||||||
|
|
||||||
## [2006/borsanyi](2006/borsanyi/borsanyi.c) ([README.md](2006/borsanyi/README.md]))
|
## [2006/borsanyi](2006/borsanyi/borsanyi.c) ([README.md](2006/borsanyi/README.md]))
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user