int TB_init() { ToolBus = TBfalse; init_terms(); init_utils(); return gethostname(this_host, MAXHOSTNAMELEN); }
/* ** Initializes the number, score, kills, deaths, and money of all combatants. */ init_combatants() { extern Vdesc *vdesc; extern Prog_desc *prog_desc[]; Combatant *c; int max_cost = 0, i; num_teams = 0; for (i = 0; i < MAX_TEAMS; ++i) { teamdata[i].vehicle_count = 0; teamdata[i].treasury = 0; } for (i = 0; i < num_combatants; i++) { c = &combatant[i]; /* name combatant after player, or failing that a program */ if (c->num_players) { (void) strncpy(c->name, terminal[c->player[0]]->player_name, MAX_STRING - 1); } else { assert(c->num_programs > 0); (void) strncpy(c->name, prog_desc[c->program[0]]->name, MAX_STRING - 1); } max_cost = MAX(max_cost, vdesc[c->vdesc].cost); last_team = MAX(last_team, c->team); if ((teamdata[c->team].vehicle_count)++ == 0) { ++num_teams; } c->number = i; c->keep_score += c->score; c->keep_kills += c->kills; c->keep_deaths += c->deaths; c->score = 0; c->kills = 0; c->deaths = 0; } init_terms(); /* Give everyone $ 2 * max_cost - cost of their vehicle */ for (i = 0; i < num_combatants; i++) { c = &combatant[i]; c->money = max_cost * 2; if (!settings.si.pay_to_play) c->money -= vdesc[c->vdesc].cost; teamdata[c->team].treasury += c->money; } }
int TBinit(char *tname, int argc, char *argv[], TBcallbackTerm fun, term * (check_in_sign)(term *)) { char *s; char host_toolbus[MAXHOSTNAMELEN]; int fromToolBus, i = 1; TBbool local_ports = TBfalse; term *trm; tool_name = (tname) ? tname : "anonymous_tool"; ToolBus = TBfalse; init_terms(); init_utils(); if(gethostname(this_host, MAXHOSTNAMELEN) < 0) err_sys_fatal("TBinit -- can't get host name"); strcpy(host_toolbus, this_host); WellKnownSocketPort = TB_PORT; while(i < argc){ if(streq(argv[i], "-help")){ help(); exit(0); } else if(streq(argv[i], "-verbose")){ TBverbose = TBtrue; } else if(streq(argv[i], "-TB_HOST")){ i++; if(strlen(argv[i]) > MAXHOSTNAMELEN) err_fatal("TBinit -- name of ToolBus host too long"); strcpy(host_toolbus, argv[i]); i++; } else if(streq(argv[i],"-TB_PORT")){ i++; WellKnownSocketPort = atoi(argv[i++]); } else if(streq(argv[i],"-TB_TOOL_ID")){ i++; this_tool_id = atoi(argv[i++]); } else if(streq(argv[i], "-TB_TOOL_NAME")){ tool_name = argv[i+1]; i += 2; } else if(streq(argv[i], "-TB_SINGLE")){ i++; stand_alone = TBtrue; } else if(streq(argv[i],"-TB_LOCAL_PORTS")){ i++; local_ports = TBtrue; } else i++; } if((s = getenv("TB_VERBOSE")) && streq(s ,"true")) TBverbose = TBtrue; if((s = getenv("TB_LOCAL_PORTS")) && streq(s ,"true")) local_ports = TBtrue; if(stand_alone || !fun){ /* execute stand alone */ /* TBaddTermPort(0, fun); */ return TB_OK; } if(mkports(local_ports, tool_name, host_toolbus, &this_tool_id, &fromToolBus, &toToolBus) == TB_ERROR) err_fatal("TBinit -- can't connect to ToolBus"); TBaddTermPort(fromToolBus, fun); Snd_Void = TBmake("snd-void()"); TBprotect(&Snd_Void); trm = TBread(fromToolBus); /* obtain the tool signature from the ToolBus */ if(TBmatch(trm, "rec-do(signature(%t,%t))", &tool_in_sign, &tool_out_sign)){ TBsend(Snd_Void); if(check_in_sign){ trm = (*check_in_sign)(tool_in_sign); if(trm) err_fatal("TBinit -- NOT IN INPUT SIGNATURE: %t", trm); } } else err_fatal("signature information garbled: %t", trm); return TB_OK; }