From: Laurent Mazet Date: Tue, 25 Jun 2024 22:27:06 +0000 (+0200) Subject: full code of library management X-Git-Tag: v1.0~7 X-Git-Url: https://secure.softndesign.org/git/?a=commitdiff_plain;h=60fae9fb4bc7e71fb48b6cfb6803d7752010091f;p=gameoflife.git full code of library management --- diff --git a/display.c b/display.c index f52febf..0919e6c 100644 --- a/display.c +++ b/display.c @@ -1,5 +1,6 @@ #include #include +#include #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++) { diff --git a/display.h b/display.h index f4006db..d1c7e23 100644 --- 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); diff --git a/gameoflife.c b/gameoflife.c index bd7b4d8..54ed96a 100644 --- a/gameoflife.c +++ b/gameoflife.c @@ -44,9 +44,11 @@ char *help = " Move left cells\n" " Move down cells\n" " Move right cells\n" + " Turn on library\n" " Quit\n" " Rotate clockwise\n" " Save file\n" + " Reward library\n" " 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);