freeboard (nextboard);
}
+void putelement (board_t *board, board_t *element, int x, int y, int rot)
+{
+ int i, j;
+
+ rot = (rot > 0) ? rot % 4 : ((1 - rot / 4) * 4 + rot) % 4;
+
+ board_t *newelement = NULL;
+ if (rot % 2) {
+ newelement = initboard (element->xsize, element->ysize);
+ } else {
+ newelement = initboard (element->ysize, element->xsize);
+ }
+
+ switch (rot) {
+ case 0:
+ strcpy (newelement->tab, element->tab);
+ break;
+ case 1:
+ for (i = 0; i < element->xsize; i++) {
+ for (j = 0; j < element->ysize; j++) {
+ *getcell (newelement, element->ysize - 1 - j, i) = *getcell (element, i, j);
+ }
+ }
+ break;
+ case 2:
+ for (i = 0; i < element->xsize; i++) {
+ for (j = 0; j < element->ysize; j++) {
+ *getcell (newelement, element->xsize - 1 - i, element->ysize - 1 - j) = *getcell (element, i, j);
+ }
+ }
+ break;
+ case 3:
+ for (i = 0; i < element->xsize; i++) {
+ for (j = 0; j < element->ysize; j++) {
+ *getcell (newelement, j, element->xsize - 1 - i) = *getcell (element, i, j);
+ }
+ }
+ break;
+ }
+
+ for (i = 0; i < element->xsize; i++) {
+ for (j = 0; j < element->ysize; j++) {
+ *getcell (board, (x + i) % board->xsize, (y + j) % board->ysize) = *getcell (newelement, i, j);
+ }
+ }
+
+ freeboard (newelement);
+}
+
+
/* vim: set ts=4 sw=4 et: */
void computenextgen (board_t *board);
+void putelement (board_t *board, board_t *element, int x, int y, int rot);
+
#endif /* __FUNCTION_H__ */
/* vim: set ts=4 sw=4 et: */
char *file = NULL;
char mode = '\0';
+int xdefault = 60;
+int ydefault = 20;
char *help =
"<i> Move up tile\n"
int usage (int ret)
{
FILE *fd = ret ? stderr : stdout;
- fprintf (fd, "usage: %s [-e file] [-h] [-p file] [-v level]\n", progname);
+ fprintf (fd, "usage: %s [-e file] [-h] [-p file] [-v level] [-x int] [-y int]\n", progname);
fprintf (fd, " -e: edit file (%s)\n", (file) ? file : "none");
fprintf (fd, " -h: help message\n");
fprintf (fd, " -p: play file (%s)\n", (file) ? file : "none");
/* main function */
int main (int argc, char *argv[])
{
+ int xsize = 0;
+ int ysize = 0;
/* get basename */
char *pt = progname = argv[0];
}
verbose = atoi (arg);
break;
+ case 'x':
+ arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
+ if (arg == NULL) {
+ VERBOSE (ERROR, fprintf (stderr, "%s: no width specified\n", progname));
+ return usage (1);
+ }
+ xsize = atoi (arg);
+ break;
+ case 'y':
+ arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
+ if (arg == NULL) {
+ VERBOSE (ERROR, fprintf (stderr, "%s: no height specified\n", progname));
+ return usage (1);
+ }
+ ysize = atoi (arg);
+ break;
case 'h':
default:
return usage (c != 'h');
}
/* init board */
+ if (xsize <= 0) {
+ xsize = xdefault;
+ }
+ if (ysize <= 0) {
+ ysize = ydefault;
+ }
+ board_t *board = initboard (xsize, ysize);
+
char *buffer = readdata (file);
- board_t *board = NULL;
+ board_t *element = NULL;
+ int rot = 0;
if (buffer) {
- board = loadboard (buffer);
+ element = loadboard (buffer);
free (buffer);
if (board == NULL) {
VERBOSE (ERROR, fprintf (stderr, "incorrect file (%s)\n", file));
return 1;
}
- } else {
- board = initboard (60, 20);
+ putelement (board, element, (xsize - element->xsize) / 2, (ysize - element->ysize) / 2, rot);
}
/* window positions */
break;
case ' ':
case 'v':
+ if (element) {
+ cleanboard (board);
+ rot = (rot + 1) % 4;
+ putelement (board, element, (xsize - element->xsize) / 2, (ysize - element->ysize) / 2, rot);
+ }
break;
case KEY_BACKSPACE:
case KEY_DELETE:
endwin ();
+ freeboard (element);
freeboard (board);
return 0;