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