diff --git a/1984/mullender/.gitignore b/1984/mullender/.gitignore index 9be0bd5b7..8767cfb4e 100644 --- a/1984/mullender/.gitignore +++ b/1984/mullender/.gitignore @@ -1,5 +1,7 @@ mullender mullender.alt +mullender.alt2 gentab +g.c mullender.orig prog.orig diff --git a/1984/mullender/Makefile b/1984/mullender/Makefile index 7df619c68..3c4f4dbf5 100644 --- a/1984/mullender/Makefile +++ b/1984/mullender/Makefile @@ -112,8 +112,8 @@ OBJ= ${PROG}.o DATA= TARGET= ${PROG} # -ALT_OBJ= ${PROG}.alt.o -ALT_TARGET= ${PROG}.alt +ALT_OBJ= ${PROG}.alt.o ${PROG}.alt2.o +ALT_TARGET= ${PROG}.alt ${PROG}.alt2 ################# @@ -142,8 +142,11 @@ gentab: gentab.c alt: data ${ALT_TARGET} @${TRUE} -${ALT_TARGET}: ${PROG}.alt.c - ${CC} -include stdio.h -include unistd.h -include stdlib.h ${CFLAGS} $< -o $@ ${LDFLAGS} +${PROG}.alt: ${PROG}.alt.c + ${CC} -include stdio.h -include unistd.h -include stdlib.h ${CFLAGS} -Wno-implicit-int $< -o $@ ${LDFLAGS} + +${PROG}.alt2: ${PROG}.alt2.c + ${CC} -include stdio.h -include unistd.h -include stdlib.h ${CFLAGS} -Wno-implicit-int $< -o $@ ${LDFLAGS} # data files # diff --git a/1984/mullender/README.md b/1984/mullender/README.md index fbbe982c4..bdc19746c 100644 --- a/1984/mullender/README.md +++ b/1984/mullender/README.md @@ -9,56 +9,37 @@ Robbert van Renesse ## To build: ```sh -make all +make alt ``` +NOTE: the original code will not work on any system other than +[VAX-11](https://en.wikipedia.org/wiki/VAX-11) and +[PDP-11](https://en.wikipedia.org/wiki/PDP-11) and this is why we encourage you +to use the alt version instead. See [original code](#original-code) below for +the original version. ## To use: -```sh -./mullender -``` - -NOTE: if your machine is not a [VAX-11](https://en.wikipedia.org/wiki/VAX-11) -or [PDP-11](https://en.wikipedia.org/wiki/PDP-11), this program will not execute -correctly. In later years, machine dependent code was discouraged. An alternate -version that will work with other systems is provided as alternate code below. - - -## Alternate code: - -An alternate version exists which allows one to enjoy this entry on systems -other than a [VAX-11](https://en.wikipedia.org/wiki/VAX-11) or -[PDP-11](https://en.wikipedia.org/wiki/PDP-11). This version has a delay feature -as it goes so fast in modern systems. The author suggested that there was a -delay in the original code as well. - - -### Alternate build: - - -```sh -make alt -``` - - -### Alternate use: - ```sh ./mullender.alt [microseconds] + +./mullender.alt2 [microseconds] # starts over after it times out ``` -The default microseconds is 10000. This feature is so you can experiment with +The default microseconds is 10000 and it is also the lowest it can be as any +lower doesn't work very well. This feature is so you can experiment with different speeds in between writes. It can be useful if your CPU is too slow or -too fast. +too fast (:-) ). -Note that it is an `int` (argc) and it uses `atoi()` which does NOT check for +The author stated that the original version also had a delay. + +Note that the microseconds is argc and it uses `atoi()` which does NOT check for overflow! BTW: is there such a thing as too fast a CPU ? :-) Actually yes for certain code which is probably not as uncommon as you think :-). -### Alternate try: +### Try: ```sh @@ -71,6 +52,44 @@ which is probably not as uncommon as you think :-). ./mullender.alt 20000 ./mullender.alt 100000 + +./mullender.alt2 500 +# wait for 500 microseconds and see what happens +``` + +What happens if you hit enter after it reaches the end of the line? Why? + + +## Original code: + +This original code will only execute correctly if your machine is a +[VAX-11](https://en.wikipedia.org/wiki/VAX-11) or +[PDP-11](https://en.wikipedia.org/wiki/PDP-11). In the following years, 1985 on, +machine dependent code was discouraged. + + +### Original build: + + +```sh +make all +``` + +### Bugs and (Mis)features: + +This entry a listed in [bugs.md](/bugs.md) as: + +``` +STATUS: INABIAF - please **DO NOT** fix +``` + +For more detailed information see [bugs.md](/bugs.md#1984mullender-readmemd). + + +### Original use: + +```sh +./mullender ``` @@ -122,7 +141,7 @@ close to as the original as possible we used a copy of in the *fabulous* [Unix History Repo](https://github.com/dspinellis/unix-history-repo/tree/Research-Release). -### Alternate build: +### gentab build: `gentab.c` can be built like: @@ -131,18 +150,21 @@ Repo](https://github.com/dspinellis/unix-history-repo/tree/Research-Release). make gentab ``` -### Alternate use: +### gentab use: ```sh ./gentab file ``` -### Alternate try: +### gentab try: ```sh -./gentab gentab +./gentab gentab > g.c ``` +NOTE: it is highly unlikely that you will be able to compile and run the output +of `gentab` but it should at least compile. + ## Author's remarks: ### Notes from the judges: diff --git a/1984/mullender/gentab.c b/1984/mullender/gentab.c index d65fc9b84..1709214ff 100644 --- a/1984/mullender/gentab.c +++ b/1984/mullender/gentab.c @@ -40,7 +40,8 @@ main(argc, argv) char **argv; fmt = "0x%x"; break; } - if (32 <= n && n < 127 && (rand() % 4)) fmt = "'%c'"; + if (n == '\\' || n == '\'') fmt = "'\\%c'"; + else if (32 <= n && n < 127 && (rand() % 4)) fmt = "'%c'"; printf(n < 8 ? "%d" : fmt, n); printf(","); if (pos++ == 8) { diff --git a/1984/mullender/mullender.alt.c b/1984/mullender/mullender.alt.c index 4329093eb..b9dce50b1 100644 --- a/1984/mullender/mullender.alt.c +++ b/1984/mullender/mullender.alt.c @@ -1 +1 @@ -main(i,v)char**v;{i=v[1]?atoi(v[1]):10000;do write(1," :-)\b\b\b\b",9),usleep(i);while(--i);} +main(i,v)char**v;{i=v[1]?atoi(v[1]):10000;i=i<500?500:i;do write(1," :-)\b\b\b\b",9),usleep(i);while(--i);write(1,"\n",1);} diff --git a/1984/mullender/mullender.alt2.c b/1984/mullender/mullender.alt2.c new file mode 100644 index 000000000..e6d26d829 --- /dev/null +++ b/1984/mullender/mullender.alt2.c @@ -0,0 +1 @@ +main(i,v)char**v;{j:i=v[1]?atoi(v[1]):10000;i=i<500?500:i;do write(1," :-)\b\b\b\b",9),usleep(i);while(--i);write(1,"\n",1);goto j;} diff --git a/bugs.md b/bugs.md index 28f2d4577..d42c32406 100644 --- a/bugs.md +++ b/bugs.md @@ -449,6 +449,21 @@ without a newline after the `\`. This is not a bug. This entry will very likely crash or do something else if you run it without an arg. It likely won't do anything at all if the arg is not a positive number. +## [1984/mullender](1984/mullender/mullender.c) ([README.md](1984/mullender/README.md) +### STATUS: INABIAF - please **DO NOT** fix + +Although there are two alt versions added by Cody that will work in modern +systems, if you do not have a [VAX-11](https://en.wikipedia.org/wiki/VAX-11) or +[PDP-11](https://en.wikipedia.org/wiki/PDP-11) to run the original entry on it +will not work. See the README.md for details on the alternate versions. + +Cody added and fixed the [gentab.c](1984/mullender/gentab.c) which is from the +author's (or one of them, Mullender) remarks found by Cody. Cody fixed this to +compile and work (as best as he can determine: he has no VAX-11 or PDP-11 or +emulator to test it) but running the code on the binary itself produces a +`short[]` that can compile in modern systems. + + # 1985 diff --git a/faq.md b/faq.md index 693b8cfe9..2a0ecc879 100644 --- a/faq.md +++ b/faq.md @@ -241,9 +241,12 @@ can enjoy this entry. Try: ```sh make alt ./mullender.alt [microseconds] +./mullender.alt2 [microseconds] ``` -The microseconds defaults to 10000. +The microseconds defaults to 10000 but has a minimum value of 1000. The +`mullender.alt2` is like the first alt except that it will start over once the +program times out. Thank you Cody! diff --git a/thanks-for-fixes.md b/thanks-for-fixes.md index c45df9562..08352b3bf 100644 --- a/thanks-for-fixes.md +++ b/thanks-for-fixes.md @@ -166,17 +166,23 @@ cd 1984/decot ; make diff_orig_prog ## [1984/mullender](1984/mullender/mullender.c) ([README.md](1984/mullender/README.md])) -Cody provided an alternate version, an improved version of the judges, so that -everyone can enjoy it with systems that are not VAX/PDP. We also refer you to -the [FAQ](faq.md) as there are some winning entries that also let one enjoy it - -with more to them of course! +Cody provided an [alternate version](1984/mullender/mullender.alt.c), an +improved version of the judges, so that everyone can enjoy it with systems that +are not VAX/PDP. We also refer you to the [FAQ](faq.md) as there are some +winning entries that also let one enjoy it - with more to them of course! + +Cody further added the second alt version, +[mullender.alt2.c](1984/mullender/mullender.alt2.c) which is like the +[1984/mullender/mullender.alt.c](1984/mullender/mullender.alt.c) except that it +starts over after it times out. Cody also added the [gentab.c](1984/mullender/gentab.c) file, fixed to compile -and work with modern systems and so that it would create the proper array (it -had unbalanced '}'s), which the author noted in their remarks (which Cody also -found). As this file uses the old header file `a.out.h` that is not available in -all modern systems, Cody found a copy of it as to what it should have been at -the time, in the fabulous [Unix History +(and work!, though see [bugs.md](#1984mullender-readmemd) with modern systems +and so that it would create the proper array (it had unbalanced '}'s), which the +author noted in their remarks (which Cody also found). As this file uses the old +header file `a.out.h` that is not available in all modern systems, Cody found a +copy of it as to what it should have been at the time, in the fabulous [Unix +History Repo](https://github.com/dspinellis/unix-history-repo/tree/Research-Release).