Module Name: src Committed By: rillig Date: Sat May 21 12:29:34 UTC 2022
Modified Files: src/games/gomoku: bdisp.c gomoku.h main.c Log Message: gomoku: warn before overwriting a saved game file To generate a diff of this commit: cvs rdiff -u -r1.39 -r1.40 src/games/gomoku/bdisp.c cvs rdiff -u -r1.32 -r1.33 src/games/gomoku/gomoku.h cvs rdiff -u -r1.44 -r1.45 src/games/gomoku/main.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/games/gomoku/bdisp.c diff -u src/games/gomoku/bdisp.c:1.39 src/games/gomoku/bdisp.c:1.40 --- src/games/gomoku/bdisp.c:1.39 Sat May 21 12:16:53 2022 +++ src/games/gomoku/bdisp.c Sat May 21 12:29:34 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: bdisp.c,v 1.39 2022/05/21 12:16:53 rillig Exp $ */ +/* $NetBSD: bdisp.c,v 1.40 2022/05/21 12:29:34 rillig Exp $ */ /* * Copyright (c) 1994 @@ -34,7 +34,7 @@ #include <sys/cdefs.h> /* @(#)bdisp.c 8.2 (Berkeley) 5/3/95 */ -__RCSID("$NetBSD: bdisp.c,v 1.39 2022/05/21 12:16:53 rillig Exp $"); +__RCSID("$NetBSD: bdisp.c,v 1.40 2022/05/21 12:29:34 rillig Exp $"); #include <curses.h> #include <string.h> @@ -272,7 +272,7 @@ get_key(const char *allowed) } bool -get_line(char *buf, int size) +get_line(char *buf, int size, void (*on_change)(const char *)) { char *cp, *end; int c; @@ -311,6 +311,10 @@ get_line(char *buf, int size) } else beep(); } + if (on_change != NULL) { + *cp = '\0'; + on_change(buf); + } refresh(); } *cp = '\0'; Index: src/games/gomoku/gomoku.h diff -u src/games/gomoku/gomoku.h:1.32 src/games/gomoku/gomoku.h:1.33 --- src/games/gomoku/gomoku.h:1.32 Sat May 21 09:25:51 2022 +++ src/games/gomoku/gomoku.h Sat May 21 12:29:34 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: gomoku.h,v 1.32 2022/05/21 09:25:51 rillig Exp $ */ +/* $NetBSD: gomoku.h,v 1.33 2022/05/21 12:29:34 rillig Exp $ */ /* * Copyright (c) 1994 @@ -229,7 +229,7 @@ extern const char *plyr[]; void bdinit(struct spotstr *); int get_coord(void); int get_key(const char *); -bool get_line(char *, int); +bool get_line(char *, int, void (*)(const char *)); void ask(const char *); void dislog(const char *); void bdump(FILE *); Index: src/games/gomoku/main.c diff -u src/games/gomoku/main.c:1.44 src/games/gomoku/main.c:1.45 --- src/games/gomoku/main.c:1.44 Sat May 21 09:57:53 2022 +++ src/games/gomoku/main.c Sat May 21 12:29:34 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: main.c,v 1.44 2022/05/21 09:57:53 rillig Exp $ */ +/* $NetBSD: main.c,v 1.45 2022/05/21 12:29:34 rillig Exp $ */ /* * Copyright (c) 1994 @@ -36,8 +36,9 @@ __COPYRIGHT("@(#) Copyright (c) 1994\ The Regents of the University of California. All rights reserved."); /* @(#)main.c 8.4 (Berkeley) 5/4/95 */ -__RCSID("$NetBSD: main.c,v 1.44 2022/05/21 09:57:53 rillig Exp $"); +__RCSID("$NetBSD: main.c,v 1.45 2022/05/21 12:29:34 rillig Exp $"); +#include <sys/stat.h> #include <curses.h> #include <err.h> #include <limits.h> @@ -80,6 +81,20 @@ static void quit(void) __dead; static void quitsig(int) __dead; #endif +static void +warn_if_exists(const char *fname) +{ + struct stat st; + + if (lstat(fname, &st) == 0) { + int x, y; + getyx(stdscr, y, x); + addstr(" (already exists)"); + move(y, x); + } else + clrtoeol(); +} + int main(int argc, char **argv) { @@ -180,7 +195,7 @@ again: } } else { setbuf(stdout, 0); - get_line(buf, sizeof(buf)); + get_line(buf, sizeof(buf), NULL); if (strcmp(buf, "black") == 0) color = BLACK; else if (strcmp(buf, "white") == 0) @@ -258,7 +273,8 @@ again: FILE *fp; ask("Save file name? "); - (void)get_line(fname, sizeof(fname)); + (void)get_line(fname, sizeof(fname), + warn_if_exists); if ((fp = fopen(fname, "w")) == NULL) { misclog("cannot create save file"); goto getinput; @@ -276,7 +292,7 @@ again: goto getinput; } } else { - if (!get_line(buf, sizeof(buf))) { + if (!get_line(buf, sizeof(buf), NULL)) { curmove = RESIGN; break; } @@ -332,7 +348,8 @@ again: FILE *fp; ask("Save file name? "); - (void)get_line(fname, sizeof(fname)); + (void)get_line(fname, sizeof(fname), + warn_if_exists); if ((fp = fopen(fname, "w")) == NULL) { misclog("cannot create save file"); goto replay; @@ -383,7 +400,7 @@ whatsup(int signum) quit(); top: ask("debug command: "); - if (!get_line(input, sizeof(input))) + if (!get_line(input, sizeof(input), NULL)) quit(); switch (*input) { case '\0':