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: }