From: Laurent MAZET Date: Fri, 5 Jul 2024 15:54:41 +0000 (+0200) Subject: add a keypressed recorder to ease testing X-Git-Tag: v1.0~21 X-Git-Url: https://secure.softndesign.org/git/?a=commitdiff_plain;h=3863d73303dcbeab1bace816d209b09075a36752;p=checkers.git add a keypressed recorder to ease testing --- diff --git a/checkers.c b/checkers.c index 86b9759..1c38123 100644 --- a/checkers.c +++ b/checkers.c @@ -22,6 +22,7 @@ char *version = "0.1"; char *boardname = "10x10"; char *filename = NULL; +int maxnbrecords = 0; int scale = 2; int xoffset = 1; @@ -48,6 +49,7 @@ int usage (int ret) fprintf (fd, " -h: help message\n"); fprintf (fd, " -f: file name (%s)\n", (filename) ? filename : "none"); fprintf (fd, " -s: scale [0..3] (%d)\n", scale); + fprintf (fd, " -r: max nb records (%d)\n", maxnbrecords); fprintf (fd, " -v: verbose level (%d)\n", verbose); fprintf (fd, "%s version %s\n", progname, version); @@ -108,6 +110,14 @@ int main (int argc, char *argv[]) } verbose = atoi (arg); break; + case 'r': + arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL; + if (arg == NULL) { + VERBOSE (ERROR, fprintf (stderr, "%s: missing max number of records\n", progname)); + return usage (1); + } + maxnbrecords = atoi (arg); + break; case 'h': default: return usage (c != 'h'); @@ -148,6 +158,14 @@ int main (int argc, char *argv[]) } setscale (board, scale); + /* init recorder */ + int *rec = NULL; + if (maxnbrecords) { + rec = (int *) calloc (maxnbrecords, sizeof (int)); + CHECKALLOC (rec); + } + int nbrecords = 0; + /* init curses window */ initscr (); noecho (); @@ -212,6 +230,15 @@ int main (int argc, char *argv[]) } int ch = getch (); + if (maxnbrecords) { + if (nbrecords < maxnbrecords) { + rec[nbrecords++] = ch; + } else { + memmove (rec + 1, rec, nbrecords - 1); + rec[nbrecords] = ch; + } + } + switch (ch) { case ' ': case 'c': @@ -364,6 +391,21 @@ int main (int argc, char *argv[]) } endwin (); + + if (nbrecords) { + int i; + printf ("records: "); + for (i = 0; i < nbrecords; i++) { + if ((rec[i] > 31) && (rec[i] < 128)) { + printf ("%c", rec[i]); + } else { + printf ("0x%x", rec[i]); + } + } + printf ("\n"); + } + + free (rec); freecache (cache); freeboard (board); @@ -379,8 +421,10 @@ int main (int argc, char *argv[]) /* test: solitaire.exe -h | grep usage */ /* test: solitaire.exe -s 2>&1 | grep 'no scale' */ /* test: solitaire.exe -s 4 2>&1 | grep incorrect */ +/* test: solitaire.exe -r 2>&1 | grep missing */ /* test: solitaire.exe -v 2>&1 | grep missing */ /* test: solitaire.exe _ 2>&1 | grep invalid */ -/* test: { echo lkji; sleep 1; echo -n q; } | solitaire.exe -v 4 */ +/* test: { echo -n lkji; sleep 1; echo -n q; } | solitaire.exe -v 4 */ +/* test: { echo -n lllclvkkliciv; sleep 1; echo -n ijjjkkclv; sleep 1; echo -n llicijkxxccjkv; sleep 1; echo -n q; } | solitaire.exe */ /* vim: set ts=4 sw=4 et: */