date and time created 86/11/26 13:36:26 by bostic
authorKeith Bostic <bostic@ucbvax.Berkeley.EDU>
Thu, 27 Nov 1986 05:36:26 +0000 (21:36 -0800)
committerKeith Bostic <bostic@ucbvax.Berkeley.EDU>
Thu, 27 Nov 1986 05:36:26 +0000 (21:36 -0800)
SCCS-vsn: games/mille/save.c 5.1

usr/src/games/mille/save.c [new file with mode: 0644]

diff --git a/usr/src/games/mille/save.c b/usr/src/games/mille/save.c
new file mode 100644 (file)
index 0000000..0b4abf6
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 1983 Regents of the University of California.
+ * All rights reserved.  The Berkeley software License Agreement
+ * specifies the terms and conditions for redistribution.
+ */
+
+#ifndef lint
+static char sccsid[] = "@(#)save.c     5.1 (Berkeley) %G%";
+#endif not lint
+
+#include       "mille.h"
+#include       <sys/types.h>
+#include       <sys/stat.h>
+#ifndef        unctrl
+#include       "unctrl.h"
+#endif
+
+# ifdef        attron
+#      include <term.h>
+#      define  _tty    cur_term->Nttyb
+# endif        attron
+
+/*
+ * @(#)save.c  1.2 (Berkeley) 3/28/83
+ */
+
+typedef        struct stat     STAT;
+
+char   *ctime();
+
+int    read(), write();
+
+/*
+ *     This routine saves the current game for use at a later date
+ */
+extern int     errno;
+extern char    *sys_errlist[];
+
+save() {
+
+       reg char        *sp;
+       reg int         outf;
+       reg time_t      *tp;
+       char            buf[80];
+       time_t          tme;
+       STAT            junk;
+
+       tp = &tme;
+       if (Fromfile && getyn(SAMEFILEPROMPT))
+               strcpy(buf, Fromfile);
+       else {
+over:
+               prompt(FILEPROMPT);
+               leaveok(Board, FALSE);
+               refresh();
+               sp = buf;
+               while ((*sp = readch()) != '\n') {
+                       if (*sp == killchar())
+                               goto over;
+                       else if (*sp == erasechar()) {
+                               if (--sp < buf)
+                                       sp = buf;
+                               else {
+                                       addch('\b');
+                                       /*
+                                        * if the previous char was a control
+                                        * char, cover up two characters.
+                                        */
+                                       if (*sp < ' ')
+                                               addch('\b');
+                                       clrtoeol();
+                               }
+                       }
+                       else
+                               addstr(unctrl(*sp++));
+                       refresh();
+               }
+               *sp = '\0';
+               leaveok(Board, TRUE);
+       }
+
+       /*
+        * check for existing files, and confirm overwrite if needed
+        */
+
+       if (sp == buf || (!Fromfile && stat(buf, &junk) > -1
+           && getyn(OVERWRITEFILEPROMPT) == FALSE))
+               return FALSE;
+
+       if ((outf = creat(buf, 0644)) < 0) {
+               error(sys_errlist[errno]);
+               return FALSE;
+       }
+       mvwaddstr(Score, ERR_Y, ERR_X, buf);
+       wrefresh(Score);
+       time(tp);                       /* get current time             */
+       strcpy(buf, ctime(tp));
+       for (sp = buf; *sp != '\n'; sp++)
+               continue;
+       *sp = '\0';
+       varpush(outf, write);
+       close(outf);
+       wprintw(Score, " [%s]", buf);
+       wclrtoeol(Score);
+       wrefresh(Score);
+       return TRUE;
+}
+
+/*
+ *     This does the actual restoring.  It returns TRUE if the
+ * backup was made on exiting, in which case certain things must
+ * be cleaned up before the game starts.
+ */
+rest_f(file)
+reg char       *file; {
+
+       reg char        *sp;
+       reg int         inf;
+       char            buf[80];
+       STAT            sbuf;
+
+       if ((inf = open(file, 0)) < 0) {
+               perror(file);
+               exit(1);
+       }
+       if (fstat(inf, &sbuf) < 0) {            /* get file stats       */
+               perror(file);
+               exit(1);
+       }
+       varpush(inf, read);
+       close(inf);
+       strcpy(buf, ctime(&sbuf.st_mtime));
+       for (sp = buf; *sp != '\n'; sp++)
+               continue;
+       *sp = '\0';
+       /*
+        * initialize some necessary values
+        */
+       sprintf(Initstr, "%s [%s]\n", file, buf);
+       Fromfile = file;
+       return !On_exit;
+}
+