|
|
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.