Fix 1991/buzzard and add alt code

There were two crashes that I noticed, both due to atoi(3) being called
on an arg without a type which ended up being an implicit int rather
than a 'char *'. This is for the x and y coordinates. I don't have an
example command line to test different configurations but now the
program shouldn't crash unless the file cannot be opened. See bugs.md
for details there (whether it should crash or not on not being able to
open the file is debatable I suppose but I left it in as a feature, not
a bug; the others made the program unusable which is why they were
fixed).

The alt version can be more at home for those familiar with vi(m) (it
certainly is for me): instead of 'f' for forwards, 'l' for left and 'r'
for right it is now 'k', 'h' and 'l' respectively. The program does not
allow one to go backwards so this was not touched but if it did it would
have been 'j': because we vi(m) users are strange :-)

The README.md has been format and typo fixed.
This commit is contained in:
Cody Boone Ferguson committed 2023-11-06 04:39:16 -08:00
1 parent e00d20111d
commit 40c0a6a74a
5 files changed
+79 -12

No files matched your search

+2 -2
View File
@@ -116,8 +116,8 @@ OBJ= ${PROG}.o
DATA=
TARGET= ${PROG}
#
ALT_OBJ=
ALT_TARGET=
ALT_OBJ= ${PROG}.alt.o
ALT_TARGET= ${PROG}.alt
#################
+47 -8
View File
@@ -4,6 +4,21 @@
make all
```
There is an [alternate version](#alternate-code) which might feel more at home
for vi(m) users in navigation.
### Bugs and (Mis)features:
The current status of this entry is:
```
STATUS: INABIAF - please **DO NOT** fix
```
For more detailed information see [1991 buzzard in
bugs.md](/bugs.md#1991-buzzard).
## To use:
@@ -11,6 +26,26 @@ make all
./buzzard
```
## Alternate code:
This version changes the keys `f` for forward, `l` for left and `r` for right to
`k` for forward, `l` for right and `h` for left, which is more natural for those
who use vi(m).
### Alternate build:
```sh
make alt
```
### Alternate use:
```sh
./buzzard.alt
```
## Judges' remarks:
@@ -21,13 +56,13 @@ You are invited to try to cheat, ... if you can figure out how! :-)
## Author's remarks:
### How to play
When the game starts, you are at the far end of the maze from the
exit, looking down a corridor. To move forward, type `f` and press
return. To turn 90 degrees right, type `r`; left, `l`. You can
put multiple commands on one line, and the new view will be drawn
after all the moves.
When the game starts, you are at the far end of the maze from the exit, looking
down a corridor. To move forward, type `f` and press return. To turn 90
degrees right, type `r`; and for left, `l`. You can put multiple commands on
one line, and the new view will be drawn after all the moves.
The game ends if you get out the exit (you'll know it when you see
it) or when you type `^D` (EOF).
@@ -51,10 +86,14 @@ separate physical rows in the maze; a space indicates a corridor,
and any other character is a wall. Tabs are also considered walls,
so make sure to convert tabs to spaces before using it.
Usage: buzzard [filename [escape-char [start-x start-yNNN
Usage:
```sh
./buzzard [filename [escape-char [start-x start-yNNN
```
Filename is the name of the file containing the maze. This
defaults to 'buzzard.c'.
defaults to `buzzard.c` or rather `__FILE__`.
Escape-char is the character in the maze that represents the exit.
You can put more than one exit in the maze (for example, you could
@@ -67,7 +106,7 @@ from 0. The default is start-x = 4, start-y = 5, which is needed
for the buzzard.c, but would probably be inappropriate for other
mazes.
BUGS:
### BUGS:
You can't change that at start you're facing down ("south").
+2 -2
View File
@@ -1,7 +1,7 @@
#include <stdio.h>
#define X(s) (!(s&3)-((s&3)==2))
#define W while
char Z[82][82],A,B,f,g=26;z(q){return atoi(q);}m(d,l){return
char Z[82][82],A,B,f,g=26;z(q)char**q;{return atoi(q);}m(d,l){return
Z[ B + X ( f +
3) * d+l *X(f+ 2 )][ A+X ( f ) * d +
l* X ( f + 3 ) ] ;}int
@@ -10,7 +10,7 @@ h= 0;D(p,s)char*s; {W(h>>3<p>> 3 ) {putchar('\t'
)&~7 ;}W(h < p ){putchar(' ');++h; }(void)printf(
"%s" , s ) ;h+=strlen(s);}main(x,a)char **a; {
# define P(x) (x?(5-(x))*(6-(x ))/2:11)
int b; { char b[256],i, j=0; FILE*F;F=fopen(x-1?a[1]:"buzzard.c","r");W(
int b; { char b[256],i, j=0; FILE*F;F=fopen(x-1?a[1]:__FILE__,"r");W(
fgets( b ,256 ,F)){for(i=0;b[ i];++ i)
Z[j][i ] =( b [ i ] ==' '?1:2*(b[i]==(x>2?*a[2]:'\\')));++j;}fclose
(F);}A =4 ; B = 3 ; f = 1;x >3? A=z(a[3]),B=z(a[4]):0;b='\n';do{if(b=='\n'
+12
View File
@@ -677,6 +677,18 @@ where this occurred was fixed but this one should not be fixed. Thank you.
# 1991
## 1991 buzzard
### STATUS: INABIAF - please **DO NOT** fix
### Source code: [1991/buzzard/buzzard.c](1991/buzzard/buzzard.c)
### Information: [1991/buzzard/README.md](1991/buzzard/README.md)
If the maze file cannot be opened, either because the path specified does not
exist or because the default (whatever the source file was at compilation time)
file does not exist in the directory, this program will very likely crash.
This is a feature, not a bug.
## 1991 westley
+16
View File
@@ -1097,6 +1097,22 @@ Later on, Cody added back the macro `#define D define` to make it look ever so
slightly more like the original, even though it's unused.
## [1991/buzzard](1991/buzzard/buzzard.c) ([README.md](1991/buzzard/README.md]))
Cody fixed this so that the coordinates being specified would not crash the
program. This happened because the function that calls `atoi(3)` took an arg
without any type specified and as an implicit int it was not a `char *` which
crashed the program in modern systems.
Cody also made the file name in the code (which is the default maze file) not
hard-coded but instead be `__FILE__`.
Finally Cody added the [alternate
version](1991/buzzard/README.md#alternate-code) which will possibly feel more at
home with those familiar with vi(m) (it certainly does feel more at home with
him): `k` for forward, `h` for left and `l` for right.
## [1991/dds](1991/dds/dds.c) ([README.md](1991/dds/README.md]))
Cody fixed a segfault that prevented this entry from working in any condition