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