|
|
1.1 ! root 1: #include "mille.h" ! 2: #include <sys/types.h> ! 3: #include <sys/stat.h> ! 4: #ifndef unctrl ! 5: #include "unctrl.h" ! 6: #endif ! 7: ! 8: # ifdef attron ! 9: # include <term.h> ! 10: # define _tty cur_term->Nttyb ! 11: # endif attron ! 12: ! 13: /* ! 14: * @(#)save.c 1.2 (Berkeley) 3/28/83 ! 15: */ ! 16: ! 17: typedef struct stat STAT; ! 18: ! 19: char *ctime(); ! 20: ! 21: int read(), write(); ! 22: ! 23: /* ! 24: * This routine saves the current game for use at a later date ! 25: */ ! 26: extern int errno; ! 27: extern char *sys_errlist[]; ! 28: ! 29: save() { ! 30: ! 31: reg char *sp; ! 32: reg int outf; ! 33: reg time_t *tp; ! 34: char buf[80]; ! 35: time_t tme; ! 36: STAT junk; ! 37: ! 38: tp = &tme; ! 39: if (Fromfile && getyn(SAMEFILEPROMPT)) ! 40: strcpy(buf, Fromfile); ! 41: else { ! 42: over: ! 43: prompt(FILEPROMPT); ! 44: leaveok(Board, FALSE); ! 45: refresh(); ! 46: sp = buf; ! 47: while ((*sp = readch()) != '\n') { ! 48: if (*sp == killchar()) ! 49: goto over; ! 50: else if (*sp == erasechar()) { ! 51: if (--sp < buf) ! 52: sp = buf; ! 53: else { ! 54: addch('\b'); ! 55: /* ! 56: * if the previous char was a control ! 57: * char, cover up two characters. ! 58: */ ! 59: if (*sp < ' ') ! 60: addch('\b'); ! 61: clrtoeol(); ! 62: } ! 63: } ! 64: else ! 65: addstr(unctrl(*sp++)); ! 66: refresh(); ! 67: } ! 68: *sp = '\0'; ! 69: leaveok(Board, TRUE); ! 70: } ! 71: ! 72: /* ! 73: * check for existing files, and confirm overwrite if needed ! 74: */ ! 75: ! 76: if (sp == buf || (!Fromfile && stat(buf, &junk) > -1 ! 77: && getyn(OVERWRITEFILEPROMPT) == FALSE)) ! 78: return FALSE; ! 79: ! 80: if ((outf = creat(buf, 0644)) < 0) { ! 81: error(sys_errlist[errno]); ! 82: return FALSE; ! 83: } ! 84: mvwaddstr(Score, ERR_Y, ERR_X, buf); ! 85: wrefresh(Score); ! 86: time(tp); /* get current time */ ! 87: strcpy(buf, ctime(tp)); ! 88: for (sp = buf; *sp != '\n'; sp++) ! 89: continue; ! 90: *sp = '\0'; ! 91: varpush(outf, write); ! 92: close(outf); ! 93: wprintw(Score, " [%s]", buf); ! 94: wclrtoeol(Score); ! 95: wrefresh(Score); ! 96: return TRUE; ! 97: } ! 98: ! 99: /* ! 100: * This does the actual restoring. It returns TRUE if the ! 101: * backup was made on exiting, in which case certain things must ! 102: * be cleaned up before the game starts. ! 103: */ ! 104: rest_f(file) ! 105: reg char *file; { ! 106: ! 107: reg char *sp; ! 108: reg int inf; ! 109: char buf[80]; ! 110: STAT sbuf; ! 111: ! 112: if ((inf = open(file, 0)) < 0) { ! 113: perror(file); ! 114: exit(1); ! 115: } ! 116: if (fstat(inf, &sbuf) < 0) { /* get file stats */ ! 117: perror(file); ! 118: exit(1); ! 119: } ! 120: varpush(inf, read); ! 121: close(inf); ! 122: strcpy(buf, ctime(&sbuf.st_mtime)); ! 123: for (sp = buf; *sp != '\n'; sp++) ! 124: continue; ! 125: *sp = '\0'; ! 126: /* ! 127: * initialize some necessary values ! 128: */ ! 129: sprintf(Initstr, "%s [%s]\n", file, buf); ! 130: Fromfile = file; ! 131: return !On_exit; ! 132: } ! 133:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.