~rabbits/orca-toy

e25d82b3f35995007aa8db780824a71c5cfdd7a4 — neauoire 2 years ago feb8d12
Display special messages
2 files changed, 15 insertions(+), 7 deletions(-)

M README.md
M toy.c
M README.md => README.md +0 -1
@@ 40,4 40,3 @@ To display the list of operators inside of Orca, use `CmdOrCtrl+G`.
## TODOs

- Default values
- Special operators

M toy.c => toy.c +15 -6
@@ 380,18 380,27 @@ opz(Grid *g, int x, int y)
void
opcomment(Grid *g, int x, int y)
{
	int i = 1;
	while(x + i < g->w) {
	int i;
	for(i = 1; x + i < g->w; ++i) {
		lock(g, x + i, y);
		if(get(g, x + i, y) == '#')
			break;
		i++;
	}
}

void
opspecial(Grid *g, int x, int y)
{
	int i, b = bang(g, x, y);
	for(i = 0; x + i < g->w; ++i) {
		if(get(g, x + i, y) == '.')
			break;
		lock(g, x + i, y);
		if(b)
			printf("%c", get(g, x + i, y));
	}
	if(b)
		printf("\n");
}

/* clang-format off */


@@ 419,7 428,7 @@ print(Grid *g)
int
run(Grid *g)
{
	int i, x, y, c = 0;
	int i, x, y;
	for(i = 0; i < g->l; ++i)
		g->lock[i] = 0;
	for(i = 0; i < g->l; ++i) {


@@ 432,7 441,7 @@ run(Grid *g)
			set(g, x, y, '.');
		else if(c == '#')
			opcomment(g, x, y);
		else if(cisp(c) && bang(g, x, y))
		else if(cisp(c))
			opspecial(g, x, y);
		if(ciuc(c) || bang(g, x, y))
			library[cint(c)](g, x, y);


@@ 482,8 491,8 @@ main(int argc, char *argv[])
	if(!disk(f, &g))
		return error("Invalid grid");
	while(g.f < limit) {
		run(&g);
		print(&g);
		run(&g);
	}
	return 0;
}