|
|
1.1 root 1: /*
2: * Copyright (c) 1980 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.3 (Berkeley) 6/18/88";
20: #endif /* not lint */
21:
22: #include "back.h"
23:
24: extern int errno;
25:
26: static char confirm[] = "Are you sure you want to leave now?";
27: static char prompt[] = "Enter a file name: ";
28: static char exist1[] = "The file '";
29: static char exist2[] =
30: "' already exists.\nAre you sure you want to use this file?";
31: static char cantuse[] = "\nCan't use ";
32: static char saved[] = "This game has been saved on the file '";
33: static char type[] = "'.\nType \"backgammon ";
34: static char rec[] = "\" to recover your game.\n\n";
35: static char cantrec[] = "Can't recover file: ";
36:
37: save (n)
38: register int n;
39:
40: {
41: register int fdesc;
42: register char *fs;
43: char fname[50];
44:
45: if (n) {
46: if (tflag) {
47: curmove (20,0);
48: clend();
49: } else
50: writec ('\n');
51: writel (confirm);
52: if (! yorn(0))
53: return;
54: }
55: cflag = 1;
56: for (;;) {
57: writel (prompt);
58: fs = fname;
59: while ((*fs = readc()) != '\n') {
60: if (*fs == tty.sg_erase) {
61: if (fs > fname) {
62: fs--;
63: if (tflag)
64: curmove (curr,curc-1);
65: else
66: writec (*fs);
67: } else
68: writec ('\007');
69: continue;
70: }
71: writec (*fs++);
72: }
73: *fs = '\0';
74: if ((fdesc = open(fname,2)) == -1 && errno == 2) {
75: if ((fdesc = creat (fname,0700)) != -1)
76: break;
77: }
78: if (fdesc != -1) {
79: if (tflag) {
80: curmove (18,0);
81: clend();
82: } else
83: writec ('\n');
84: writel (exist1);
85: writel (fname);
86: writel (exist2);
87: cflag = 0;
88: close (fdesc);
89: if (yorn (0)) {
90: unlink (fname);
91: fdesc = creat (fname,0700);
92: break;
93: } else {
94: cflag = 1;
95: continue;
96: }
97: }
98: writel (cantuse);
99: writel (fname);
100: writel (".\n");
101: close (fdesc);
102: cflag = 1;
103: }
104: write (fdesc,board,sizeof board);
105: write (fdesc,off,sizeof off);
106: write (fdesc,in,sizeof in);
107: write (fdesc,dice,sizeof dice);
108: write (fdesc,&cturn,sizeof cturn);
109: write (fdesc,&dlast,sizeof dlast);
110: write (fdesc,&pnum,sizeof pnum);
111: write (fdesc,&rscore,sizeof rscore);
112: write (fdesc,&wscore,sizeof wscore);
113: write (fdesc,&gvalue,sizeof gvalue);
114: write (fdesc,&raflag,sizeof raflag);
115: close (fdesc);
116: if (tflag)
117: curmove (18,0);
118: writel (saved);
119: writel (fname);
120: writel (type);
121: writel (fname);
122: writel (rec);
123: if (tflag)
124: clend();
125: getout ();
126: }
127:
128: recover (s)
129: char *s;
130:
131: {
132: register int i;
133: int fdesc;
134:
135: if ((fdesc = open (s,0)) == -1)
136: norec (s);
137: read (fdesc,board,sizeof board);
138: read (fdesc,off,sizeof off);
139: read (fdesc,in,sizeof in);
140: read (fdesc,dice,sizeof dice);
141: read (fdesc,&cturn,sizeof cturn);
142: read (fdesc,&dlast,sizeof dlast);
143: read (fdesc,&pnum,sizeof pnum);
144: read (fdesc,&rscore,sizeof rscore);
145: read (fdesc,&wscore,sizeof wscore);
146: read (fdesc,&gvalue,sizeof gvalue);
147: read (fdesc,&raflag,sizeof raflag);
148: close (fdesc);
149: rflag = 1;
150: }
151:
152: norec (s)
153: register char *s;
154:
155: {
156: register char *c;
157:
158: tflag = 0;
159: writel (cantrec);
160: c = s;
161: while (*c != '\0')
162: writec (*c++);
163: getout ();
164: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.