<% } %>
<% } %>
-<% void print_index(tile_t **tiles) { %>
+<% void print_index(row_t *rows) { %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
<head>
<style type="text/css">
- * { border:0; margin:0; padding:0; }
- table { border-collapse:separate; margin:auto; width:1800px;}
- td { width:64px; height:64px; border-spacing:0px 0px;}
+ td { min-width:64px; height:64px; }
img { position:absolute; }
</style>
</head>
<body>
<table cellpadding="0" cellspacing="0">
- <% for (int row = 1; row < 10; row++) { %>
+ <% for (int row = 1; rows[row].cols; row++) { %>
<tr>
- <% for (int col = 1; col < 30; col++) { %>
+ <% for (int col = 1; col < rows[row].ncols; col++) { %>
<td>
- <% print_img(tiles[row][col].bot); %>
- <% print_img(tiles[row][col].top); %>
+ <% print_img(rows[row].cols[col].bot); %>
+ <% print_img(rows[row].cols[col].top); %>
</td>
<% } %>
</tr>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include "knot.h"
-static void do_tile(tile_t **tiles, int row, int col)
+static void do_tile(row_t *rows, int row, int col)
{
- tile_t *t = &tiles[row][col];
- tile_t *l = &tiles[row][col-1];
- tile_t *r = &tiles[row][col+1];
- tile_t *u = &tiles[row-1][col];
- //tile_t *d = &tiles[row+1][col];
+ tile_t *t = &rows[row ].cols[col ];
+ tile_t *l = &rows[row ].cols[col-1];
+ tile_t *u = &rows[row-1].cols[col ];
/* Fill in what we know */
- switch (tiles[row][col].c) {
+ switch (t->c) {
case '-': t->top = LEFT | RIGHT; break;
case '|': t->top = UP | DOWN; break;
case '\'': t->top = UP; break;
/* Follow bottoms */
if (t->c == '|' && (l->top | l->bot) & RIGHT)
t->bot = LEFT | RIGHT;
- if (t->c == '-' && (u->top | u->bot) & DOWN)
- t->bot = UP | DOWN;
+ if (rows[row-1].ncols >= col)
+ if (t->c == '-' && (u->top | u->bot) & DOWN)
+ t->bot = UP | DOWN;
/* Adds sides for ''s and .'s */
if (t->c == '.' || t->c == '\'') {
int main()
{
/* Init tiles */
- tile_t *tiles[64];
- for (int i = 0; i < 64; i++)
- tiles[i] = calloc(512, sizeof(tile_t));
-
- /* Read data */
char c;
int row = 1, col = 1;
+ row_t *rows = calloc(sizeof(row_t), (row+2));
while ((c = getchar()) != EOF) {
- if (row > 63 || col > 511)
- exit(-1);
if (c == '\n') {
row++;
col = 1;
+ rows = realloc(rows, sizeof(row_t) * (row+2));
+ rows[row+1] = (row_t){};
} else {
- tiles[row][col].c = c;
+ rows[row].cols = realloc(rows[row].cols, sizeof(tile_t) * (col+1));
+ rows[row].ncols = col+1;
+ rows[row].cols[col] = (tile_t){};
+ rows[row].cols[col].c = c;
+ do_tile(rows, row, col);
col++;
}
}
- /* Process */
- for (row = 1; row < 63; row++)
- for (col = 1; col < 511; col++)
- do_tile(tiles, row, col);
-
/* Output */
//for (row = 1; row < 63; row++) {
// for (col = 1; col < 511; col++) {
//}
/* HTML */
- print_index(tiles);
+ print_index(rows);
}