#include <curses.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <time.h>
#include "debug.h"
char *progname = NULL;
char *version = "0.1";
-char *filename = NULL;
+char *listoffilename = NULL;
char *playname = NULL;
char mode = 'e';
int speed = 5;
{
FILE *fd = ret ? stderr : stdout;
fprintf (fd, "usage: %s [-e file] [-h] [-p file] [-s tens] [-v level] [-x int] [-y int]\n", progname);
- fprintf (fd, " -e: edit file (%s)\n", (filename) ? filename : "none");
+ fprintf (fd, " -e: list of file for edit (%s)\n", (listoffilename) ? listoffilename : "none");
fprintf (fd, " -h: help message\n");
fprintf (fd, " -p: play file (%s)\n", (playname) ? playname : "none");
fprintf (fd, " -s: speed ĭn tens/sec (%d)\n", speed);
return ret;
}
-board_t *processfile (char *filename, char **name)
+board_t *processfile (char *filename, char **pname)
{
char *buffer = readdata (filename);
if (buffer == NULL) {
return NULL;
}
- board_t *board = loadboard (buffer);
+ board_t *board = loadboard (buffer, pname);
if (board == NULL) {
VERBOSE (ERROR, fprintf (stderr, "incorrect file (%s)\n", filename));
}
return board;
}
+library_t *processlibrary (char *libname)
+{
+ int n = 0;
+ library_t *lib = (library_t *) malloc ((n + 2) * sizeof (library_t));
+ CHECKALLOC (lib);
+
+ (lib + n)->board = initboard (1, 1);
+ (lib + n)->board->tab[0] = 'X';
+ (lib + n)->name = strdup ("Cell");
+ n++;
+
+ if (libname) {
+ char *saveptr;
+ char *filename = strtok_r (libname, ":", &saveptr);
+ while (filename) {
+ char *name;
+ n++;
+ lib = (library_t *) realloc (lib, (n + 2) * sizeof (library_t));
+ CHECKALLOC (lib);
+
+ (lib + n)->board = processfile (filename, &name);
+ if ((lib + n)->board != NULL) {
+ (lib + n)->name = name;
+ n++;
+ }
+
+ filename = strtok_r (NULL, "\n", &saveptr);
+ }
+ }
+
+ return lib;
+}
+
/* main function */
int main (int argc, char *argv[])
{
return usage (1);
}
mode = 'e';
- filename = arg;
+ listoffilename = arg;
break;
case 'p':
arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
return 1;
}
- /* load element */
- board_t *element = NULL;
- int xelement = 0;
- int yelement = 0;
- if (filename) {
- element = processfile (filename, NULL);
- if (element == NULL) {
- return 1;
- }
- } else { /* mono cell */
- element = initboard (1, 1);
- element->tab[0] = 'X';
- }
+ /* load library */
+ library_t *lib = processlibrary (listoffilename);
+ board_t *element = (lib + 0)->board;
/* load playground */
board_t *playground = NULL;
int yboard = xoffset + 1;
int xhelp = xboard + xoffset + 1 + board->xsize;
int yhelp = yboard;
- xelement = (xsize - element->xsize) / 2;
- yelement = (ysize - element->ysize) / 2;
+ int xelement = (xsize - element->xsize) / 2;
+ int yelement = (ysize - element->ysize) / 2;
/* init windows */
helpwindow (help, xhelp, yhelp);
endwin ();
- freeboard (element);
+ int n = 0;
+ while ((lib + n)->board) {
+ freeboard ((lib + n)->board);
+ free ((lib + n)->name);
+ }
+ free (lib);
freeboard (board);
return 0;