|
|
1.1 root 1: /*
2: * Copyright (c) 1983 Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution and use in source and binary forms are permitted
6: * provided that the above copyright notice and this paragraph are
7: * duplicated in all such forms and that any documentation,
8: * advertising materials, and other materials related to such
9: * distribution and use acknowledge that the software was developed
10: * by the University of California, Berkeley. The name of the
11: * University may not be used to endorse or promote products derived
12: * from this software without specific prior written permission.
13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16: */
17:
18: #ifndef lint
19: static char sccsid[] = "@(#)save.c 5.4 (Berkeley) 6/18/88";
20: #endif /* not lint */
21:
22: #include "mille.h"
23: #include <sys/types.h>
24: #include <sys/stat.h>
25: #ifndef unctrl
26: #include "unctrl.h"
27: #endif
28:
29: # ifdef attron
30: # include <term.h>
31: # define _tty cur_term->Nttyb
32: # endif attron
33:
34: /*
35: * @(#)save.c 1.2 (Berkeley) 3/28/83
36: */
37:
38: typedef struct stat STAT;
39:
40: char *ctime();
41:
42: int read(), write();
43:
44: /*
45: * This routine saves the current game for use at a later date
46: */
47: extern int errno;
48: extern char *sys_errlist[];
49:
50: save() {
51:
52: reg char *sp;
53: reg int outf;
54: reg time_t *tp;
55: char buf[80];
56: time_t tme;
57: STAT junk;
58:
59: tp = &tme;
60: if (Fromfile && getyn(SAMEFILEPROMPT))
61: strcpy(buf, Fromfile);
62: else {
63: over:
64: prompt(FILEPROMPT);
65: leaveok(Board, FALSE);
66: refresh();
67: sp = buf;
68: while ((*sp = readch()) != '\n') {
69: if (*sp == killchar())
70: goto over;
71: else if (*sp == erasechar()) {
72: if (--sp < buf)
73: sp = buf;
74: else {
75: addch('\b');
76: /*
77: * if the previous char was a control
78: * char, cover up two characters.
79: */
80: if (*sp < ' ')
81: addch('\b');
82: clrtoeol();
83: }
84: }
85: else {
86: addstr(unctrl(*sp));
87: ++sp;
88: }
89: refresh();
90: }
91: *sp = '\0';
92: leaveok(Board, TRUE);
93: }
94:
95: /*
96: * check for existing files, and confirm overwrite if needed
97: */
98:
99: if (sp == buf || (!Fromfile && stat(buf, &junk) > -1
100: && getyn(OVERWRITEFILEPROMPT) == FALSE))
101: return FALSE;
102:
103: if ((outf = creat(buf, 0644)) < 0) {
104: error(sys_errlist[errno]);
105: return FALSE;
106: }
107: mvwaddstr(Score, ERR_Y, ERR_X, buf);
108: wrefresh(Score);
109: time(tp); /* get current time */
110: strcpy(buf, ctime(tp));
111: for (sp = buf; *sp != '\n'; sp++)
112: continue;
113: *sp = '\0';
114: varpush(outf, write);
115: close(outf);
116: wprintw(Score, " [%s]", buf);
117: wclrtoeol(Score);
118: wrefresh(Score);
119: return TRUE;
120: }
121:
122: /*
123: * This does the actual restoring. It returns TRUE if the
124: * backup was made on exiting, in which case certain things must
125: * be cleaned up before the game starts.
126: */
127: rest_f(file)
128: reg char *file; {
129:
130: reg char *sp;
131: reg int inf;
132: char buf[80];
133: STAT sbuf;
134:
135: if ((inf = open(file, 0)) < 0) {
136: perror(file);
137: exit(1);
138: }
139: if (fstat(inf, &sbuf) < 0) { /* get file stats */
140: perror(file);
141: exit(1);
142: }
143: varpush(inf, read);
144: close(inf);
145: strcpy(buf, ctime(&sbuf.st_mtime));
146: for (sp = buf; *sp != '\n'; sp++)
147: continue;
148: *sp = '\0';
149: /*
150: * initialize some necessary values
151: */
152: (void)sprintf(Initstr, "%s [%s]\n", file, buf);
153: Fromfile = file;
154: return !On_exit;
155: }
156:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.