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