[net.games.emp] Therapy for Shizophrenia

john@genrad.UUCP (John Nelson) (08/27/84)

Being a Deity at this site, and having to deal with Shizophrenia
caused in several different ways, and not having the source
(GRUMBLE,GRUMBLE) so I can't fix the problems, I wrote a program
to fix the nation file from the shizophrenia problem.  The
player with the personality problem must run this program
himself.  Interestingly, this program does not seem to mung
the data file if that player is REALLY playing on another
terminal.  I also found that the "read" and "info" commands
did not work properly on BSD 4.2, so I rewrote them (contact
me for details on the last two.)

Anyway,  here it is, the program I call "therapy".

#include <stdio.h>
#define D_NATSTR
#include "empdef.h"

extern char *natfil;
extern short privuid;
extern short maxnoc, maxcno;

struct natstr nattbl[MAX_MAXNOC];

main()
    {
    char buffer[256];
    int fd;
    int index;
    int uid;

    setbuf(stdout, NULL);
    if ((fd = open(natfil, 2)) < 0)
	{
	printf("Can't open nation file: %s\n", natfil);
	exit(1);
	}
    for (index = 0; index < maxnoc; ++index)
	if (read(fd, &nattbl[index], sizeof(struct natstr)) != sizeof (struct natstr))
	    {
	    printf("error reading nation file!\n");
	    exit (1);
	    }
    printf("Empire Schizophrenia Therapy Program!\n\n");
    printf("Country Name? ");
    gets(buffer);
    if (*buffer == 0)
	exit(0);
    for (index = 0; index < maxnoc; ++index)
	{
	if (!strcmp(nattbl[index].nat_cnam, buffer))
	    break;
	}
    if (index >= maxnoc)
	{
	printf("I can't find that name in the table.\n");
	exit (1);
	}
    if ((uid = getuid()) != nattbl[index].nat_nuid && uid != privuid && uid)
	printf("That country is not accessible by you!\n");
    printf("Representative? ");
    gets(buffer);
    if (strcmp(nattbl[index].nat_pnam, buffer))
	{
	printf("Sorry.\n");
	exit (1);
	}
    lseek(fd, (long) sizeof(struct natstr) * index, 0);
    nattbl[index].nat_tty[0] = '\0';
    nattbl[index].nat_pid = 0;
    write(fd, &nattbl[index], sizeof(struct natstr));
    close(fd);
    exit(0);
    }