second code for library management
authorLaurent MAZET <laurent.mazet@thalesgroup.com>
Tue, 25 Jun 2024 20:16:51 +0000 (22:16 +0200)
committerLaurent MAZET <laurent.mazet@thalesgroup.com>
Tue, 25 Jun 2024 20:16:51 +0000 (22:16 +0200)
gameoflife.c

index 9882aa98417ad48362677e9389be6df6ec2e3311..7452e6e34ef36bd3a719c5fa6cf9605819c10ec5 100644 (file)
@@ -90,9 +90,10 @@ library_t *processlibrary (char *libname)
     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)->board = initboard (3, 3);
+    (lib + n)->board->tab[4] = 'X';
     (lib + n)->name = strdup ("Cell");
+    memset (lib + n + 1, 0, sizeof (library_t));
     n++;
 
     if (libname) {
@@ -100,17 +101,17 @@ library_t *processlibrary (char *libname)
         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;
+                memset (lib + n + 1, 0, sizeof (library_t));
                 n++;
             }
 
-            filename = strtok_r (NULL, "\n", &saveptr);
+            filename = strtok_r (NULL, ":", &saveptr);
         }
     }
 
@@ -202,7 +203,8 @@ int main (int argc, char *argv[])
 
     /* load library */
     library_t *lib = processlibrary (listoffilename);
-    board_t *element = (lib + 0)->board;
+    int n = 0;
+    board_t *element = (lib + n)->board;
 
     /* load playground */
     board_t *playground = NULL;
@@ -309,6 +311,13 @@ int main (int argc, char *argv[])
             case 'l':
                 xelement = (xelement + 1) % board->xsize;
                 break;
+            case 'o':
+                n++;
+                if ((lib + n)->board == NULL) {
+                    n = 0;
+                }
+                element = (lib + n)->board;
+                break;
             case KEY_ESC:
             case 'q':
                 stop = 1;
@@ -323,6 +332,16 @@ int main (int argc, char *argv[])
                 }
                 free (ptr);
                 break;
+            case 'u':
+                n--;
+                if (n < 0) {
+                    n = 0;
+                    while ((lib + n + 1)->board) {
+                        n++;
+                    }
+                }
+                element = (lib + n)->board;
+                break;
             case KEY_BACKSPACE:
             case KEY_DELETE:
             case 127:
@@ -354,7 +373,7 @@ int main (int argc, char *argv[])
 
     endwin ();
 
-    int n = 0;
+    n = 0;
     while ((lib + n)->board) {
         freeboard ((lib + n)->board);
         free ((lib + n)->name);