DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T s

⟦ff1a5db80⟧ TextFile

    Length: 5455 (0x154f)
    Types: TextFile
    Names: »save.c«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Dots/save.c« 

TextFile

/*  SAVE.C  */

#include "dots.h"

Save_game()
{
    int c;
    FILE *fp;
    char buf[40];

    buf[0] = 0;

    msg("File: %s? ", save_file);
    if ((c = getchar()) != 'Y' && c != 'y') {
	if (c != ESC) {
	    msg("File: ");
	    Getstr(buf, min(40, COLS - 8));
	    if (strlen(buf) > 1)
		(void) strcpy(save_file, buf);
	}
    } else
	(void) strcpy(buf, save_file);
    if (*buf)
	if (!(fp = fopen(buf, "w"))) {
	    msg("Couldn't open %s: %s --more--", save_file, sys_errlist[errno]);
	    while (getchar() != ' ')
		fputc(7, stderr);
	} else {
	    c = save(fp, SAVE);
	    (void) fclose(fp);
	    if (c)
		fputc('\n', stdout), die();
	}
    bottom_line();
}

recover(before)
bool before;
{
    int c, xspot, yspot;
    FILE *fp;

    if (!before) {
	getyx(stdscr, yspot, xspot);
	msg("File: %s? ", save_file);
	if ((c = getchar()) != 'Y' && c != 'y')
	    if (c != ESC) {
		char buf[40];
		msg("Input Filename: ");
		Getstr(buf, min(40, COLS - 17));
		move(LINES - 1, 0);
		refresh();
		if (strlen(buf) < 2) {
		    move(yspot, xspot);
		    refresh();
		    return 0;
		} else
		    (void) strcpy(save_file, buf);
	    } else
		return 0;
    }
    if (!(fp = fopen(save_file, "r")))
	if (before)
	    perror(save_file);
	else
	    msg("Couldn't open %s: %s", save_file, sys_errlist[errno]);
    else if (save(fp, LOAD)) {
	(void) fclose(fp);
	if (unlink(save_file) < 0)
	    oops("Couldn't unlink savefile"), puts("Are you trying to cheat?");
	return 1;
    } else {
	(void) fclose(fp);
	if (before)
	    putchar('\n'), die();
    }
    if (!before)
	move(yspot, xspot), refresh();
    return 0;
}

save(fp, funct)
FILE *fp;
{
    register int x, y;
    int i;

    if (funct == LOAD) {
	char V[80], *p;

	if (fgets(V, 80, fp) && (p = index(V, '\n')))
	    *p = 0;
	if (strcmp(V, version)) {
	    printf("Sorry, file is wrong version.");
	    return FALSE;
	}
        if (fscanf (fp, "persontally = %d\n", &persontally) < 1 ||
	    fscanf (fp, "comptally = %d\n", &comptally) < 1 ||
	    fscanf (fp, "Length = %d\n", &Length) < 1 ||
	    fscanf (fp, "Width = %d\n", &Width) < 1)
		goto bad;
	for (x = 0; x < Length * 2; ++x)
	    for (y = 0; y < Width * 2; ++y) {
		if (fscanf (fp, "board[%*d][%*d] = %d\n", &i) < 1)
		    goto bad;
		board[x][y] = i;
	    }
        if (fscanf (fp, "xposit = %d\n", &xposit) < 1 ||
	    fscanf (fp, "yposit = %d\n", &yposit) < 1 ||
	    fscanf (fp, "x_start = %d\n", &x_start) < 1 ||
	    fscanf (fp, "y_start = %d\n", &y_start) < 1 ||
	    fscanf (fp, "no_good_moves = %d\n", &no_good_moves) < 1 ||
	    fscanf (fp, "control_already_established = %d\n",
			&control_already_established) < 1 ||
	    fscanf (fp, "segtype = %d\n", &segtype) < 1 ||
	    fscanf (fp, "dX_found = %d\n", &dX_found) < 1 ||
	    fscanf (fp, "segflag = %d\n", &segflag) < 1 ||
	    fscanf (fp, "mode = %d\n", &mode) < 1 ||
	    fscanf (fp, "level = %d\n", &level) < 1 ||
	    fscanf (fp, "Bingo.x = %d, Bingo.y = %d\n",
		&Bingo.x, &Bingo.y) < 2 ||
	    fscanf (fp, "Initial = %2s\n", Initial) < 1 ||
	    fscanf (fp, "mover = %d\n", &mover) < 1)
		goto bad;
	if (Length < 4 || Width < 4) {
bad:
	    msg("File has been corrupted.");
	    return FALSE;
	}
    } else {
	(void) fprintf(fp, "%s\n", version);
        fprintf (fp, "persontally = %d\n", persontally);
        fprintf (fp, "comptally = %d\n", comptally);
        fprintf (fp, "Length = %d\n", Length);
        fprintf (fp, "Width = %d\n", Width);
	for (x = 0; x < Length * 2; ++x)
	    for (y = 0; y < Width * 2; ++y)
		fprintf (fp, "board[%d][%d] = %d\n", x, y, board[x][y]);
        fprintf (fp, "xposit = %d\n", xposit);
        fprintf (fp, "yposit = %d\n", yposit);
        fprintf (fp, "x_start = %d\n", x_start);
        fprintf (fp, "y_start = %d\n", y_start);
        fprintf (fp, "no_good_moves = %d\n", no_good_moves);
        fprintf (fp, "control_already_established = %d\n",
		      control_already_established);
        fprintf (fp, "segtype = %d\n", segtype);
        fprintf (fp, "dX_found = %d\n", dX_found);
        fprintf (fp, "segflag = %d\n", segflag);
        fprintf (fp, "mode = %d\n", mode);
        fprintf (fp, "level = %d\n", level);
        fprintf (fp, "Bingo.x = %d, Bingo.y = %d\n", Bingo.x, Bingo.y);
        fprintf (fp, "Initial = %2s\n", Initial);
        fprintf (fp, "mover = %d\n", mover);
    }
    return TRUE;
}
#if 0
    (*funct) (&persontally, sizeof(persontally), 1, fp);
    (*funct) (&comptally, sizeof(comptally), 1, fp);
    (*funct) (&Length, sizeof(Length), 1, fp);
    (*funct) (&Width, sizeof(Width), 1, fp);
    for (x = 0; x < 120; ++x)
	for (y = 0; y < 120; ++y) {
	    if (funct == SAVE)
		i = board[x][y];
	    (*funct) (&i, sizeof(int), 1, fp);
	    if (funct == SAVE)
		board[x][y] = i;
	}
    (*funct) (&xposit, sizeof(xposit), 1, fp);
    (*funct) (&yposit, sizeof(yposit), 1, fp);
    (*funct) (&x_start, sizeof(x_start), 1, fp);
    (*funct) (&y_start, sizeof(y_start), 1, fp);
    (*funct) (&no_good_moves, sizeof(no_good_moves), 1, fp);
    (*funct) (&control_already_established, sizeof(control_already_established), 1, fp);
    (*funct) (&segtype, sizeof(segtype), 1, fp);
    (*funct) (&dX_found, sizeof(dX_found), 1, fp);
    (*funct) (&segflag, sizeof(segflag), 1, fp);
    (*funct) (&mode, sizeof(mode), 1, fp);
    (*funct) (&level, sizeof(level), 1, fp);
    (*funct) (&Bingo, sizeof(Bingo), 1, fp);
    (*funct) (Initial, sizeof(Initial), 1, fp);
    (*funct) (&mover, sizeof(mover), 1, fp);
#endif