|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T e
Length: 3705 (0xe79) Types: TextFile Names: »enter.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─⟦526ad3590⟧ »EUUGD11/gnu-31mar87/X.V10.R4.tar.Z« └─⟦2109abc41⟧ └─⟦this⟧ »./X.V10R4/xtrek/enter.c«
#ifndef lint static char *rcsid_enter_c = "$Header: enter.c,v 10.1 86/11/30 15:24:36 jg Rel $"; #endif lint /* Copyright (c) 1986 Chris Guthrie */ #include <X/Xlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <errno.h> #include <pwd.h> #include "defs.h" #include "struct.h" #include "data.h" /* Enter the game */ extern int lastm; int pshmid; int tshmid; int stshmid; int plshmid; int phshmid; int mshmid; enter(tno, disp, pno) int tno; char *disp; int pno; { struct passwd *pwent; char *pseudo; me = &players[pno]; if ((pwent = getpwuid(getuid())) == NULL) strncpy(me->p_login, "Bozo", sizeof (me->p_login)); else strncpy(me->p_login, pwent->pw_name, sizeof (me->p_login)); pseudo = XGetDefault("xtrek", "name"); if (pseudo == NULL) strncpy(me->p_name, me->p_login, sizeof (me->p_name)); else strncpy(me->p_name, pseudo, sizeof (me->p_name)); me->p_no = pno; me->p_updates = 0; me->p_flags = PFSHIELD; strncpy(me->p_monitor, disp, 16); me->p_dir = 0; me->p_desdir = 0; me->p_speed = 0; me->p_desspeed = 0; me->p_subspeed = 0; me->p_team = (1 << tno); me->p_x = planets[tno * 10].pl_x + (random() % 10000) - 5000; me->p_y = planets[tno * 10].pl_y + (random() % 10000) - 5000; me->p_ntorp = 0; me->p_damage = 0; me->p_subdamage = 0; me->p_etemp = 0; me->p_etime = 0; me->p_wtemp = 0; me->p_wtime = 0; me->p_shield = 100; me->p_subshield = 0; me->p_swar = (FED|ROM|KLI|ORI); me->p_swar &= ~me->p_team; me->p_kills = 0.0; me->p_armies = 0; myship = &me->p_ship; getship(myship); mystats = &me->p_stats; mystats->st_entries++; me->p_fuel = myship->s_maxfuel; lastm = mctl->mc_current; } openmem() { register int i; struct passwd *pwent; extern int errno; errno = 0; pshmid = shmget(PKEY, 0, 0); if (pshmid < 0) { if (errno != ENOENT) { perror("shmget"); exit(1); } startdaemon(); sleep(2); pshmid = shmget(PKEY, 0, 0); if (pshmid < 0) { fprintf(stderr, "Daemon not running\n"); exit (1); } } players = (struct player *) shmat(pshmid, 0, 0); if (players < 0) { perror("shared memory"); exit (1); } tshmid = shmget(TKEY, 0, 0); if (tshmid < 0) { fprintf(stderr, "Daemon not running\n"); exit (1); } torps = (struct torp *) shmat(tshmid, 0, 0); if (torps < 0) { perror("shared memory"); exit (1); } plshmid = shmget(PLKEY, 0, 0); if (plshmid < 0) { fprintf(stderr, "Daemon not running\n"); exit (1); } planets = (struct planet *) shmat(plshmid, 0, 0); if (planets < 0) { perror("shared memory"); exit (1); } phshmid = shmget(PHKEY, 0, 0); if (phshmid < 0) { fprintf(stderr, "Daemon not running\n"); exit (1); } phasers = (struct phaser *) shmat(phshmid, 0, 0); if (phasers < 0) { perror("shared memory"); exit (1); } mshmid = shmget(MKEY, 0, 0); if (mshmid < 0) { fprintf(stderr, "Daemon not running\n"); exit (1); } mctl = (struct mctl *) shmat(mshmid, 0, 0); messages = (struct message *) ((int) mctl + sizeof(struct mctl)); if (mctl < 0) { perror("shared memory"); exit (1); } } findslot() { register int i; for (i = 0; i < MAXPLAYER; i++) { if (players[i].p_status == PFREE) { /* We have a free slot */ players[i].p_status = POUTFIT; /* possible race code */ break; } } if (i == MAXPLAYER) { fprintf(stderr, "No more room in game\n"); exit (0); } bzero(&players[i].p_stats, sizeof(struct stats)); /* Slight problem for copilot */ return(i); }