#include "c.h" static char rcsid[] = "$Name: v4_2 $($Id: main.c,v 1.1 2002/08/28 23:12:44 drh Exp $)"; static void typestab(Symbol, void *); static void stabline(Coordinate *); static void stabend(Coordinate *, Symbol, Coordinate **, Symbol *, Symbol *); Interface *IR = NULL; int Aflag; /* >= 0 if -A specified */ int Pflag; /* != 0 if -P specified */ int glevel; /* == [0-9] if -g[0-9] specified */ int xref; /* != 0 for cross-reference data */ Symbol YYnull; /* _YYnull symbol if -n or -nvalidate specified */ Symbol YYcheck; /* _YYcheck symbol if -nvalidate,check specified */ static char *comment; static Interface stabIR; static char *currentfile; /* current file name */ static int currentline; /* current line number */ static FILE *srcfp; /* stream for current file, if non-NULL */ static int srcpos; /* position of srcfp, if srcfp is non-NULL */ int main(int argc, char *argv[]) { int i, j; for (i = argc - 1; i > 0; i--) if (strncmp(argv[i], "-target=", 8) == 0) break; if (i > 0) { char *s = strchr(argv[i], '\\'); if (s != NULL) *s = '/'; for (j = 0; bindings[j].name && bindings[j].ir; j++) if (strcmp(&argv[i][8], bindings[j].name) == 0) { IR = bindings[j].ir; break; } if (s != NULL) *s = '\\'; } if (!IR) { fprint(stderr, "%s: unknown target", argv[0]); if (i > 0) fprint(stderr, " `%s'", &argv[i][8]); fprint(stderr, "; must specify one of\n"); for (i = 0; bindings[i].name; i++) fprint(stderr, "\t-target=%s\n", bindings[i].name); exit(EXIT_FAILURE); } init(argc, argv); t = gettok(); (*IR->progbeg)(argc, argv); for (i = 1; i < argc; i++) if (strcmp(argv[i], "-n") == 0) { if (!YYnull) { YYnull = install(string("_YYnull"), &globals, GLOBAL, PERM); YYnull->type = func(voidptype, NULL, 1); YYnull->sclass = EXTERN; (*IR->defsymbol)(YYnull); } } else if (strncmp(argv[i], "-n", 2) == 0) { /* -nvalid[,check] */ char *p = strchr(argv[i], ','); if (p) { YYcheck = install(string(p+1), &globals, GLOBAL, PERM); YYcheck->type = func(voidptype, NULL, 1); YYcheck->sclass = EXTERN; (*IR->defsymbol)(YYcheck); p = stringn(argv[i]+2, p - (argv[i]+2)); } else p = string(argv[i]+2); YYnull = install(p, &globals, GLOBAL, PERM); YYnull->type = func(voidptype, NULL, 1); YYnull->sclass = EXTERN; (*IR->defsymbol)(YYnull); } else { profInit(argv[i]); traceInit(argv[i]); } if (glevel && IR->stabinit) (*IR->stabinit)(firstfile, argc, argv); program(); if (events.end) apply(events.end, NULL, NULL); memset(&events, 0, sizeof events); if (glevel || xref) { Symbol symroot = NULL; Coordinate src; foreach(types, GLOBAL, typestab, &symroot); foreach(identifiers, GLOBAL, typestab, &symroot); src.file = firstfile; src.x = 0; src.y = lineno; if ((glevel > 2 || xref) && IR->stabend) (*IR->stabend)(&src, symroot, ltov(&loci, PERM), ltov(&symbols, PERM), NULL); else if (IR->stabend) (*IR->stabend)(&src, NULL, NULL, NULL, NULL); } finalize(); (*IR->progend)(); deallocate(PERM); return errcnt > 0; }
/*----------------------------------------------------------------------------- Name : globalsReset Description : resets the globals.c variables Inputs : Outputs : Return : ----------------------------------------------------------------------------*/ void globalsResetFunc(bool firstTime) { udword i = 0; if (firstTime) { gMessageMutex = gameCreateMutex(); } gameIsRunning = FALSE; multiPlayerGame = FALSE; multiPlayerGameUnderWay = FALSE; singlePlayerGame = FALSE; tutorial = 0; tutorialdone = FALSE; sigsPressedStartGame = FALSE; sigsNumPlayers = 0; sigsPlayerIndex = 0; captainIndex = -1; captainProposal = 1; captainTransferState = 0; receiveSyncPacketsFrom = 0; startRecordingGameWhenSafe = FALSE; aiCurrentAIPlayer = NULL; hrAbortLoadingGame = FALSE; mrRenderMainScreen = TRUE; explicitlyRequestingPackets = FALSE; explicitlyRequestingFrom = 0; explicitlyRequestingTo = 0; startingGameState = 0; startingGame = FALSE; HaveSentNonCaptainReadyPacket = FALSE; numPlayers = 0; curPlayer = 0; universePause = FALSE; #if UNIVERSE_TURBOPAUSE_DEBUG universeTurbo = FALSE; #endif LockMutex(gMessageMutex); while (i < MAX_MESSAGES) { gMessage[i].MessageExpire = (real32)0; gMessage[i].message[0] = (char)NULL; i++; } UnLockMutex(gMessageMutex); for (i=0;i<MAX_BIGMESSAGES;i++) { bMessage[i].messageOn = FALSE; bMessage[i].message[0] = (char)0; } for (i=0;i<MAX_MULTIPLAYER_PLAYERS;i++) { playersReadyToGo[i] = FALSE; } CommandNetworkReset(); netcheckReset(); if (!firstTime) { profReset(); for (i=0;i<MAX_MULTIPLAYER_PLAYERS;i++) { ComputerPlayerEnabled[i] = FALSE; ComputerPlayerOn[i] = -1; } recordPackets = FALSE; playPackets = FALSE; recordplayPacketsInGame = FALSE; recordFakeSendPackets = FALSE; smGhostMode = FALSE; } else { profInit(); } }