|
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 r
Length: 3326 (0xcfe) Types: TextFile Names: »robot.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─⟦526ad3590⟧ »EUUGD11/gnu-31mar87/X.V10.R4.tar.Z« └─⟦2109abc41⟧ └─⟦this⟧ »./X.V10R4/xtrek/robot.c«
#ifndef lint static char *rcsid_robot_c = "$Header: robot.c,v 10.1 86/11/30 15:28:01 jg Rel $"; #endif lint /* Copyright (c) 1986 Chris Guthrie */ #include <X/Xlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/time.h> #include <signal.h> #include <setjmp.h> #include "defs.h" #include "struct.h" #include "data.h" Window mapw; /* XXX */ struct itimerval udt; int redrawall; int lastm; /* lots of neat flags */ int hostile; int debug; int easy; int level; int fleet; int sticky; char *rnames[4] = { "M5", "Colossus", "Guardian", "HAL"}; main(argc, argv) int argc; char **argv; { register int i; int rmove(); int team = -1; int bteam; int pno; char str[80]; for( ; argc>1 && argv[1][0]=='-'; argc--,argv++) { switch(argv[1][1]) { case 'e': fprintf(stderr, "-e is now replaced by -llevel\n"); easy++; break; case 'f': fleet++; break; case 's': sticky++; break; case 'd': debug++; break; case 'h': hostile++; break; case 'l': if (argv[1][2] != NULL) level = atoi(&argv[1][2]); else level = 0; break; case 'T': switch (argv[1][2]) { case 'f': team = 0; bteam = FED; break; case 'r': team = 1; bteam = ROM; break; case 'k': team = 2; bteam = KLI; break; case 'o': team = 3; bteam = ORI; break; default: fprintf(stderr, "Unknown team type. Usage -Tx where x is [frko]\n"); exit(1); } break; default: fprintf(stderr, "Unknown option '%c'\n", argv[1][1]); exit(1); } } srandom(getpid() * time((long *) 0)); if (team < 0 || team >= 4) { if (debug) fprintf(stderr, "Choosing random team.\n"); team = random() % 4; } openmem(); pno = findslot(); /* At this point we have memory set up. If we aren't a fleet, we don't want to replace any other robots on this team, so we'll check the other players and get out if there are any on our team. */ if (!fleet) { for (i = 0; i < MAXPLAYER; i++) { if ((players[i].p_status == PALIVE) && (players[i].p_team == bteam)) { if (debug) fprintf(stderr, "Galaxy already defended\n"); players[pno].p_status = PFREE; exit(1); } } } enter(team, "Nowhere", pno); signal(SIGALRM, rmove); me->p_flags |= PFROBOT|PFCOPILOT; /* Mark as a robot */ strncpy(me->p_name, rnames[team], strlen(rnames[team])); me->p_name[strlen(rnames[team])] = NULL; strncpy(me->p_login, "Robot", strlen("Robot")); me->p_login[strlen("Robot")] = NULL; myship->s_phasercost = 0; myship->s_torpcost = 0; if (easy) { udt.it_interval.tv_sec = 1; /* Robots get to move 1/sec */ udt.it_interval.tv_usec = 000000; } else { udt.it_interval.tv_sec = 0; /* Robots get to move 2/sec */ udt.it_interval.tv_usec = 500000; } udt.it_value.tv_sec = 1; udt.it_value.tv_usec = 0; if (setitimer(ITIMER_REAL, &udt, 0) < 0) { perror("setitimer"); me->p_status = PFREE; /* Put robot in game */ exit(1); } /* allows robots to be forked by the daemon -- Evil ultrix bullshit */ sigsetmask(0); me->p_status = PALIVE; /* Put robot in game */ while (1) { pause(); } } warning(mess) int mess; { if (debug) fprintf(stderr, "warning: %s\n", mess); }