full code of library management
authorLaurent Mazet <mazet@softndesign.org>
Tue, 25 Jun 2024 22:27:06 +0000 (00:27 +0200)
committerLaurent Mazet <mazet@softndesign.org>
Tue, 25 Jun 2024 22:27:06 +0000 (00:27 +0200)
display.c
display.h
gameoflife.c

index f52febf674c69c68cc29edee485a4d74541bc1f7..0919e6caad7cb20e62430f726cfea680f72f9bf7 100644 (file)
--- a/display.c
+++ b/display.c
@@ -1,5 +1,6 @@
 #include <curses.h>
 #include <stdio.h>
+#include <string.h>
 
 #include "debug.h"
 #include "function.h"
@@ -7,6 +8,8 @@
 
 #include "display.h"
 
+#define LIBWIDTH 11
+
 typedef enum {
     white = 1,
     red,
@@ -76,6 +79,24 @@ void _displaytitle (char *title, int xoffset, int yoffset)
     }
 }
 
+void _dobound (int xsize, int ysize, int xoffset, int yoffset)
+{
+    int i, j;
+
+    for (i = 0; i < xsize; i++) {
+        mvaddch (yoffset - 1, xoffset + i, ACS_HLINE);
+        mvaddch (yoffset + ysize, xoffset + i, ACS_HLINE);
+    }
+    for (j = 0; j < ysize; j++) {
+        mvaddch (yoffset + j, xoffset - 1, ACS_VLINE);
+        mvaddch (yoffset + j, xoffset + xsize, ACS_VLINE);
+    }
+    mvaddch (yoffset - 1, xoffset - 1, ACS_ULCORNER);
+    mvaddch (yoffset + ysize, xoffset - 1, ACS_LLCORNER);
+    mvaddch (yoffset - 1, xoffset + xsize, ACS_URCORNER);
+    mvaddch (yoffset + ysize, xoffset + xsize, ACS_LRCORNER);
+}
+
 int helpwindow (char *msg, int xoffset, int yoffset)
 {
     _displaytitle ("Help message", xoffset, yoffset);
@@ -83,7 +104,24 @@ int helpwindow (char *msg, int xoffset, int yoffset)
     int j = 2;
     j += _helpwindow (msg, xoffset, yoffset + j, length);
 
-    return length;
+    return j;
+}
+
+void librarywindow (char *msg, int xoffset, int yoffset)
+{
+    _dobound (LIBWIDTH, 2, xoffset, yoffset);
+    mvaddstr (yoffset, xoffset + (LIBWIDTH - 7) / 2, "Library");
+    set_color (black);
+
+    int i;
+    for (i = 0; i < LIBWIDTH; i++) {
+        mvaddch (yoffset + 1, xoffset + i, ' ');
+    }
+
+    char str[LIBWIDTH + 1] = {0};
+    strncpy (str, msg, LIBWIDTH);
+    mvaddstr (yoffset + 1, xoffset + (LIBWIDTH - (int)strlen (str)) / 2, str);
+    set_color (white);
 }
 
 void boardwindow (board_t *board, int xoffset, int yoffset, int bound)
@@ -91,18 +129,7 @@ void boardwindow (board_t *board, int xoffset, int yoffset, int bound)
     int i, j;
 
     if (bound) {
-        for (i = 0; i < board->xsize; i++) {
-            mvaddch (yoffset - 1, xoffset + i, ACS_HLINE);
-            mvaddch (yoffset + board->ysize, xoffset + i, ACS_HLINE);
-        }
-        for (j = 0; j < board->ysize; j++) {
-            mvaddch (yoffset + j, xoffset - 1, ACS_VLINE);
-            mvaddch (yoffset + j, xoffset + board->xsize, ACS_VLINE);
-        }
-        mvaddch (yoffset - 1, xoffset - 1, ACS_ULCORNER);
-        mvaddch (yoffset + board->ysize, xoffset - 1, ACS_LLCORNER);
-        mvaddch (yoffset - 1, xoffset + board->xsize, ACS_URCORNER);
-        mvaddch (yoffset + board->ysize, xoffset + board->xsize, ACS_LRCORNER);
+        _dobound (board->xsize, board->ysize, xoffset, yoffset);
     }
 
     for (i = 0; i < board->xsize; i++) {
index f4006db1dfbfdf86a785841168fe6f70a0e7f7d6..d1c7e232f54b79992df463499ef414a673f8d13b 100644 (file)
--- a/display.h
+++ b/display.h
@@ -5,6 +5,8 @@
 
 int helpwindow (char *msg, int xoffset, int yoffset);
 
+void librarywindow (char *msg, int xoffset, int yoffset);
+
 void boardwindow (board_t *board, int xboard, int yboard, int bound);
 
 void elementwindow (board_t *board, int xoffset, int yoffset, board_t *element, int x, int y);
index bd7b4d87668a77433866774710023d946fb4c037..54ed96a843a59534034b692db6c868a8200eec7d 100644 (file)
@@ -44,9 +44,11 @@ char *help =
     "<j> Move left cells\n"
     "<k> Move down cells\n"
     "<l> Move right cells\n"
+    "<o> Turn on library\n"
     "<q> Quit\n"
     "<r> Rotate clockwise\n"
     "<s> Save file\n"
+    "<u> Reward library\n"
     "<x> Erase cells\n"
     ;
 
@@ -197,7 +199,11 @@ int main (int argc, char *argv[])
     int yelement = (ysize - element->ysize) / 2;
 
     /* init windows */
-    helpwindow (help, xhelp, yhelp);
+    int l = helpwindow (help, xhelp, yhelp);
+
+    /* window positions */
+    int xlibrary = xhelp + 1;
+    int ylibrary = yhelp + 1 + l + yoffset;
 
     /* event loop */
     int rotate = 0;
@@ -207,6 +213,7 @@ int main (int argc, char *argv[])
         char *ptr = NULL;
 
         boardwindow (board, xboard, yboard, 1);
+        librarywindow ((lib + n)->name, xlibrary, ylibrary);
         switch (mode) {
         case 'e':
             halfdelay (0);