~rabbits/orca-toy

760d3e6abda8080ba1dd200b3e54c24e28d55635 — neauoire 2 years ago b02ff7d
Catch invalid grid sizes
2 files changed, 19 insertions(+), 8 deletions(-)

M README.md
M toy.c
M README.md => README.md +5 -0
@@ 37,3 37,8 @@ To display the list of operators inside of Orca, use `CmdOrCtrl+G`.
- `*` **bang**: Bangs neighboring operands.
- `#` **comment**: Halts a line.

## TODOs

- Lowercase on bang
- Comments
- Special operators

M toy.c => toy.c +14 -8
@@ 1,10 1,12 @@
#include <stdio.h>

#define MAXSZ 256 * 256

typedef struct Grid {
	int w, h, l, f, r;
	int lock[256 * 256];
	int lock[MAXSZ];
	char vars[36];
	char data[256 * 256];
	char data[MAXSZ];
} Grid;

int


@@ 370,7 372,7 @@ void (*library[36])() = {

/* clang-format on */

void
int
parse(Grid *g)
{
	int i, x, y;


@@ 386,14 388,15 @@ parse(Grid *g)
	}
	for(i = 0; i < g->l; ++i)
		printf("%c", g->data[i]);
	return 1;
}

void
int
disk(FILE *f, Grid *g)
{
	char c;
	g->l = 0;
	while((c = fgetc(f)) != EOF) {
	while((c = fgetc(f)) != EOF && g->l < MAXSZ) {
		if(c == '\n') {
			if(g->w == 0)
				g->w = g->l + 1;


@@ 401,7 404,9 @@ disk(FILE *f, Grid *g)
		}
		g->data[g->l++] = c;
	}
	parse(g);
	if(g->w < 3 || g->h < 3)
		return 0;
	return parse(g);
}

int


@@ 421,8 426,9 @@ main(int argc, char *argv[])
	if(argc < 2)
		return error("No input.");
	f = fopen(argv[1], "r");
	if(f == NULL)
	if(!f)
		return error("Missing input.");
	disk(f, &g);
	if(!disk(f, &g))
		return error("Invalid grid");
	return 0;
}