Annotation of 43BSDTahoe/games/trek/dumpgame.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.