|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1980 Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * Redistribution and use in source and binary forms are permitted ! 6: * provided that the above copyright notice and this paragraph are ! 7: * duplicated in all such forms and that any documentation, ! 8: * advertising materials, and other materials related to such ! 9: * distribution and use acknowledge that the software was developed ! 10: * by the University of California, Berkeley. The name of the ! 11: * University may not be used to endorse or promote products derived ! 12: * from this software without specific prior written permission. ! 13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR ! 14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED ! 15: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 16: */ ! 17: ! 18: #ifndef lint ! 19: static char sccsid[] = "@(#)dumpgame.c 4.5 (Berkeley) 6/18/88"; ! 20: #endif /* not lint */ ! 21: ! 22: # include "trek.h" ! 23: ! 24: /*** THIS CONSTANT MUST CHANGE AS THE DATA SPACES CHANGE ***/ ! 25: # define VERSION 2 ! 26: ! 27: struct dump ! 28: { ! 29: char *area; ! 30: int count; ! 31: }; ! 32: ! 33: ! 34: struct dump Dump_template[] = ! 35: { ! 36: (char *)&Ship, sizeof (Ship), ! 37: (char *)&Now, sizeof (Now), ! 38: (char *)&Param, sizeof (Param), ! 39: (char *)&Etc, sizeof (Etc), ! 40: (char *)&Game, sizeof (Game), ! 41: (char *)Sect, sizeof (Sect), ! 42: (char *)Quad, sizeof (Quad), ! 43: (char *)&Move, sizeof (Move), ! 44: (char *)Event, sizeof (Event), ! 45: 0 ! 46: }; ! 47: ! 48: /* ! 49: ** DUMP GAME ! 50: ** ! 51: ** This routine dumps the game onto the file "trek.dump". The ! 52: ** first two bytes of the file are a version number, which ! 53: ** reflects whether this image may be used. Obviously, it must ! 54: ** change as the size, content, or order of the data structures ! 55: ** output change. ! 56: */ ! 57: ! 58: dumpgame() ! 59: { ! 60: int version; ! 61: register int fd; ! 62: register struct dump *d; ! 63: register int i; ! 64: ! 65: if ((fd = creat("trek.dump", 0644)) < 0) ! 66: return (printf("cannot dump\n")); ! 67: version = VERSION; ! 68: write(fd, &version, sizeof version); ! 69: ! 70: /* output the main data areas */ ! 71: for (d = Dump_template; d->area; d++) ! 72: { ! 73: write(fd, &d->area, sizeof d->area); ! 74: i = d->count; ! 75: write(fd, d->area, i); ! 76: } ! 77: ! 78: close(fd); ! 79: } ! 80: ! 81: ! 82: /* ! 83: ** RESTORE GAME ! 84: ** ! 85: ** The game is restored from the file "trek.dump". In order for ! 86: ** this to succeed, the file must exist and be readable, must ! 87: ** have the correct version number, and must have all the appro- ! 88: ** priate data areas. ! 89: ** ! 90: ** Return value is zero for success, one for failure. ! 91: */ ! 92: ! 93: restartgame() ! 94: { ! 95: register int fd; ! 96: int version; ! 97: ! 98: if ((fd = open("trek.dump", 0)) < 0 || ! 99: read(fd, &version, sizeof version) != sizeof version || ! 100: version != VERSION || ! 101: readdump(fd)) ! 102: { ! 103: printf("cannot restart\n"); ! 104: close(fd); ! 105: return (1); ! 106: } ! 107: ! 108: close(fd); ! 109: return (0); ! 110: } ! 111: ! 112: ! 113: /* ! 114: ** READ DUMP ! 115: ** ! 116: ** This is the business end of restartgame(). It reads in the ! 117: ** areas. ! 118: ** ! 119: ** Returns zero for success, one for failure. ! 120: */ ! 121: ! 122: readdump(fd1) ! 123: int fd1; ! 124: { ! 125: register int fd; ! 126: register struct dump *d; ! 127: register int i; ! 128: int junk; ! 129: ! 130: fd = fd1; ! 131: ! 132: for (d = Dump_template; d->area; d++) ! 133: { ! 134: if (read(fd, &junk, sizeof junk) != (sizeof junk)) ! 135: return (1); ! 136: if ((char *)junk != d->area) ! 137: return (1); ! 138: i = d->count; ! 139: if (read(fd, d->area, i) != i) ! 140: return (1); ! 141: } ! 142: ! 143: /* make quite certain we are at EOF */ ! 144: return (read(fd, &junk, 1)); ! 145: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.