|
|
1.1 root 1: #ifndef lint
2: static char sccsid[] = "@(#)save.c 4.1 12/24/82";
3: #endif
4:
5: #include "mille.h"
6: #include "unctrl.h"
7: #include <sys/types.h>
8: #include <sys/stat.h>
9: #include <time.h>
10:
11: typedef struct stat STAT;
12: typedef struct tm TIME;
13:
14: char *ctime();
15:
16: int read(), write();
17:
18: /*
19: * This routine saves the current game for use at a later date
20: */
21: extern int errno;
22: extern char *sys_errlist[];
23:
24: save() {
25:
26: reg char *sp;
27: reg int outf;
28: reg TIME *tp;
29: char buf[80];
30: TIME tme;
31: STAT junk;
32:
33: tp = &tme;
34: if (Fromfile && getyn("Same file? "))
35: strcpy(buf, Fromfile);
36: else {
37: over:
38: mvaddstr(MOVE_Y, MOVE_X, "file: ");
39: clrtoeol();
40: leaveok(Board, FALSE);
41: refresh();
42: sp = buf;
43: while ((*sp = getch()) != '\n') {
44: if (*sp == _tty.sg_kill)
45: goto over;
46: else if (*sp == _tty.sg_erase) {
47: if (--sp < buf)
48: sp = buf;
49: else {
50: addch('\b');
51: /*
52: * if the previous char was a control
53: * char, cover up two characters.
54: */
55: if (*sp < ' ')
56: addch('\b');
57: clrtoeol();
58: }
59: }
60: else
61: addstr(unctrl(*sp++));
62: refresh();
63: }
64: *sp = '\0';
65: leaveok(Board, TRUE);
66: }
67:
68: /*
69: * check for existing files, and confirm overwrite if needed
70: */
71:
72: if (sp == buf || (!Fromfile && stat(buf, &junk) > -1
73: && getyn("Overwrite File? ") == FALSE))
74: return FALSE;
75:
76: if ((outf = creat(buf, 0644)) < 0) {
77: error(sys_errlist[errno]);
78: return FALSE;
79: }
80: mvwaddstr(Score, ERR_Y, ERR_X, buf);
81: wrefresh(Score);
82: time(tp); /* get current time */
83: strcpy(buf, ctime(tp));
84: for (sp = buf; *sp != '\n'; sp++)
85: continue;
86: *sp = '\0';
87: varpush(outf, write);
88: close(outf);
89: wprintw(Score, " [%s]", buf);
90: wclrtoeol(Score);
91: wrefresh(Score);
92: return TRUE;
93: }
94:
95: /*
96: * This does the actual restoring. It returns TRUE if the
97: * backup was made on exiting, in which case certain things must
98: * be cleaned up before the game starts.
99: */
100: rest_f(file)
101: reg char *file; {
102:
103: reg char *sp;
104: reg int inf;
105: char buf[80];
106: STAT sbuf;
107:
108: if ((inf = open(file, 0)) < 0) {
109: perror(file);
110: exit(1);
111: }
112: if (fstat(inf, &sbuf) < 0) { /* get file stats */
113: perror(file);
114: exit(1);
115: }
116: varpush(inf, read);
117: close(inf);
118: strcpy(buf, ctime(&sbuf.st_mtime));
119: for (sp = buf; *sp != '\n'; sp++)
120: continue;
121: *sp = '\0';
122: /*
123: * initialize some necessary values
124: */
125: sprintf(Initstr, "%s [%s]\n", file, buf);
126: Fromfile = file;
127: return !On_exit;
128: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.