#include <curses.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include "debug.h"
}
}
+char *savewindow (int length, int xoffset, int yoffset)
+{
+ char *name = (char *) calloc (1, length + 1);
+ CHECKALLOC (name);
+ memset (name, ' ', length);
+
+ set_color (black);
+ _dobound (length, 1, xoffset, yoffset);
+ set_color (white);
+
+ int i = 0, j;
+ int stop = 0;
+ while (!stop) {
+ for (j = 0; j < length; j++) {
+ set_color ((j == i) ? yellow : black);
+ mvaddch (yoffset, xoffset + j, name[j]);
+ set_color (white);
+ }
+ int ch = getch ();
+ switch (ch) {
+ case '\n':
+ case '\r':
+ stop = 1;
+ break;
+ case KEY_BACKSPACE:
+ case KEY_DELETE:
+ case 127:
+ case '\b':
+ name[i] = ' ';
+ i--;
+ break;
+ case KEY_LEFT:
+ i--;
+ break;
+ case KEY_RIGHT:
+ i++;
+ break;
+ case KEY_ESC:
+ free (name);
+ name = NULL;
+ stop = 1;
+ break;
+ default:
+ if ((ch >= 32) && ( ch < 128)) {
+ name[i] = ch;
+ i++;
+ }
+ }
+
+ if (i < 0) {
+ i = 0;
+ }
+ if (i >= length) {
+ i = length - 1;
+ }
+ }
+
+ if (name) {
+ for (j = length - 1; j >= 0; j--) {
+ if (name[i] == ' ') {
+ name[i] = '\0';
+ }
+ }
+ if (*name == '\0') {
+ free (name);
+ name = NULL;
+ }
+ }
+
+ return name;
+}
+
/* vim: set ts=4 sw=4 et: */
#include "type.h"
+#define KEY_ESC 0x1b
+#define KEY_DELETE 0x014a
+
int helpwindow (char *msg, int xoffset, int yoffset);
void librarywindow (char *msg, int xoffset, int yoffset);
void elementwindow (board_t *board, int xoffset, int yoffset, board_t *element, int x, int y);
+char *savewindow (int length, int xoffset, int yoffset);
+
#endif /* __DISPLAY_H__ */
/* vim: set ts=4 sw=4 et: */
if (libname) {
char *saveptr;
- char *filename = strtok_r (libname, ":", &saveptr);
+ char *filename = strtok_r (libname, ": ", &saveptr);
while (filename) {
char *name;
lib = (library_t *) realloc (lib, (n + 2) * sizeof (library_t));
#include "function.h"
#include "type.h"
-#define KEY_ESC 0x1b
-#define KEY_DELETE 0x014a
-
#define max(a,b) ({ __typeof__ (a) _a = (a); __typeof__ (b) _b = (b); _a > _b ? _a : _b; })
/* static variables */
int xoffset = 1;
int yoffset = 1;
+int savelen = 12;
char *help =
"< > Play generations\n"
int yhelp = yboard;
int xelement = (xsize - element->xsize) / 2;
int yelement = (ysize - element->ysize) / 2;
+ int xsave = xboard + (board->xsize - savelen) / 2;
+ int ysave = yboard + (board->ysize - 1) / 2;
+ char *savename = NULL;
/* init windows */
int l = helpwindow (help, xhelp, yhelp);
rotate = 1;
break;
case 's':
- ptr = saveboard (board, "Board");
- if (writedata ("board.gol", ptr)) {
- VERBOSE (WARNING, printf ("issue writing Board\n"));
+ savename = savewindow (savelen, xsave, ysave);
+ if (savename != NULL) {
+ ptr = saveboard (board, "Board");
+ if (writedata (savename, ptr)) {
+ VERBOSE (WARNING, printf ("issue writing Board\n"));
+ }
+ free (ptr);
+ free (savename);
}
- free (ptr);
break;
case 'u':
n--;