region *new_region(int x, int y, struct plane *pl, int uid) { region *r; pnormalize(&x, &y, pl); r = rfindhash(x, y); if (r) { log_error("duplicate region discovered: %s(%d,%d)\n", regionname(r, NULL), x, y); if (r->units) log_error("duplicate region contains units\n"); return r; } r = calloc(1, sizeof(region)); r->x = x; r->y = y; r->uid = uid; r->age = 1; r->_plane = pl; rhash(r); hash_uid(r); if (last) addlist(&last, r); else addlist(®ions, r); last = r; assert(r->next == NULL); r->index = ++max_index; return r; }
void txprint(int i,int *TXS, char *name) { int k; char *ttcadl[]={"ZERO","L1h ","L1d ","L2h ","L2d ","L2r ","RoIh","RoId"}; char text[256]; int ttcadd,e,code,data,chck; ttcadd=0; for(k=0;k<14;k++)ttcadd=ttcadd+(1<<k)*TXS[14-k]; e=TXS[15]; code=0; for(k=0;k<4;k++)code=code+(1<<k)*TXS[20-k]; data=0; for(k=0;k<12;k++)data=data+(1<<k)*TXS[32-k]; chck=0; for(k=0;k<8;k++)chck=chck+(1<<k)*TXS[39-k]; if(code > 7){ printf("txprint: unexpected code 0x%x %s \n",code,name); sprintf(text,"Error: unexpected code in ttc:"); for(k=0;k<40;k++){ char cc[2]="0"; if(TXS[k]) cc[0]='1'; strcat(text,cc); } dump=addlist(dump,i,text); writeLog(); exit(2); } sprintf(text,"%s %s:0x%04x %x 0x%x 0x%03x 0x%02x ",name,ttcadl[code],ttcadd,e,code,data,chck); dump=addlist(dump,i-39,text); }
int asig(int canal,int bit,int i,int *COUNT,int *COUNTa,int *COUNTl,int *COUNTe, int *DIST,char *name) /* active signal = short signal + activates data L1S/L2S logic bit Active 1 1 error 1 0 ok -> activate 0 1 ok 0 0 ok */ { if(bit){ if(!COUNTa[canal]){ COUNT[canal]++; dump=addlist(dump,i,name); if( (i-COUNTl[canal])<DIST[canal]){ COUNTe[canal]++; } COUNTl[canal]=i; COUNTa[canal]=1; }else{ char text[256]; sprintf(text,"Error: %s arrives while data active.",name); dump=addlist(dump,i,text); return 1; } } return 0; }
void oadd(Node *n, Node *res) { Node l, r; expr(n->left, &l); expr(n->right, &r); res->nstore.fmt = l.nstore.fmt; res->op = OCONST; res->type = TFLOAT; switch(l.type) { default: error("bad lhs type +"); case TINT: switch(r.type) { case TINT: res->type = TINT; res->nstore.u0.sival = l.nstore.u0.sival+r.nstore.u0.sival; break; case TFLOAT: res->nstore.u0.sfval = l.nstore.u0.sival+r.nstore.u0.sfval; break; default: error("bad rhs type +"); } break; case TFLOAT: switch(r.type) { case TINT: res->nstore.u0.sfval = l.nstore.u0.sfval+r.nstore.u0.sival; break; case TFLOAT: res->nstore.u0.sfval = l.nstore.u0.sfval+r.nstore.u0.sfval; break; default: error("bad rhs type +"); } break; case TSTRING: if(r.type == TSTRING) { res->type = TSTRING; res->nstore.fmt = 's'; res->nstore.u0.sstring = stradd(l.nstore.u0.sstring, r.nstore.u0.sstring); break; } error("bad rhs for +"); case TLIST: res->type = TLIST; switch(r.type) { case TLIST: res->nstore.u0.sl = addlist(l.nstore.u0.sl, r.nstore.u0.sl); break; default: r.left = 0; r.right = 0; res->nstore.u0.sl = addlist(l.nstore.u0.sl, construct(&r)); break; } } }
void lkilgrp(int g){ int lptr,s,i,sn,g2,ldtmp,c; c = grcolor[g]; lptr = grnbp[g]; while(lptr != EOL){ dellist(g,&grnbp[list[lptr]]); lptr = links[lptr]; } lptr = grpieces[g]; killist(&grnbp[g]); while(lptr != -1){ s = mvs[lptr]; board[s] = NOGROUP; i = fdir[s]; for(ldtmp = ldir[i]; i < ldtmp; ++i){ sn = s + nbr[i]; --lnbf[sn][c]; ++lnbn[sn]; addlist(s,&nblbp[sn]); g2 = board[sn]; if(g2 == NOGROUP)continue; if(g2 == g)continue; if(addlist(s,&grlbp[g2])){ ++grlibs[g2]; } } lptr = mvnext[lptr]; } }
struct node *add_polynomial(struct node *point1, struct node *point2, struct node *result) { int coef1,coef2,exp1,exp2; while(point1 || point2) { if(point1 != NULL) { coef1 = point1->coef; exp1 = point1->exp; } else exp1 = -1; if(point2 != NULL ) { coef2 = point2->coef; exp2 = point2->exp; } else exp2 = -1; if(exp1 == exp2) { result = addlist(result, (coef1 + coef2), exp1); point1 = point1->next; point2 = point2->next; } else if(exp1 > exp2) { result = addlist(result, coef1, exp1); point1 = point1->next; } else { result = addlist(result, coef2, exp2); point2 = point2->next; } } return result; }
void lresurrect(int g){ /* bring back group g */ int lptr,s,i,ldtmp,sn,g2,c; c = grcolor[g]; lptr = grpieces[g]; while(lptr != -1){ s = mvs[lptr]; board[s] = g; i = fdir[s]; for(ldtmp = ldir[i]; i < ldtmp; ++i ){ sn = s + nbr[i]; ++lnbf[sn][c]; --lnbn[sn]; dellist(s,&nblbp[sn]); g2 = board[sn]; if(g2 == NOGROUP)continue; if(g2 == g)continue; if(dellist(s,&grlbp[g2])){ grlibs[g2]--; } addlist(g2,&grnbp[g]); addlist(g,&grnbp[g2]); } lptr = mvnext[lptr]; } }
void deadshape(int g,int rn){ int pointlist,size,count; int ptr,i,j,diffs[5],ldtmp; eyeval[rn] = eyepot[rn] = eyemin[rn] = 8; size = grsize[g]; pointlist = EOL; for(ptr = grpieces[g]; ptr != -1; ptr = mvnext[ptr]) addlist(mvs[ptr],&pointlist); i = 0; for(ptr = pointlist; links[ptr] != EOL; ptr = links[ptr]){ diffs[i] = list[links[ptr]] - list[ptr]; ++i; } killist(&pointlist); if(size == 4){ for(j = 0; j < 3; ++j) if(diffs4[0][j] != diffs[j])break; else if(j == 2)return; /* 4 in square */ for(i = 1; i < 5; ++i) for(j = 0; j < 3; ++j) if(diffs4[i][j] != diffs[j])break; else if(j == 2)return; /* 4 in pyramid */ eyeval[rn] = eyemin[rn] = eyepot[rn] = 16; /* 4 in line */ for(i = 5; i < 7; ++i) for(j = 0; j < 3; ++j) if(diffs4[i][j] != diffs[j])break; else if(j == 2)return; /* 4 in straight line */ for(ptr = grlbp[g]; ptr != EOL; ptr = links[ptr]){ i = fdir[list[ptr]]; count = 0; for(ldtmp = ldir[i]; i < ldtmp; ++i) if(board[list[ptr]+nbr[i]] == g)++count; if(count == 2){ eyemin[rn] = eyeval[rn] = 8; addlist(list[ptr],&eyevital[rn]); addlist(rn,&eyevitrec[list[ptr]]); return; /* can make bulky 5 */ } } return; } if(size == 5){ for(i = 0; i < 9; ++i) for(j = 0; j < 4; ++j) if(diffs5[i][j] != diffs[j])break; else if(j == 3)return; /* bulky 5 or plus */ eyeval[rn] = eyemin[rn] = eyepot[rn] = 16; return; /* other 5 shapes */ } for(i = 0; i < 4; ++i) for(j = 0; j < 5; ++j) if(diffs6[i][j] != diffs[j])break; else if(j == 4)return; /* rabbity 6 */ eyeval[rn] = eyemin[rn] = eyepot[rn] = 16; return; /* other 6 shapes */ }
void delconnrec(int i){ dellist(i,&grcnp[cngr1[i]]); dellist(i,&grcnp[cngr2[i]]); adflist(i,&cnfreelist); if(grldr[NUMGROUPS+i] != EOL)kill_ldrflags(NUMGROUPS+i); if(cnprot[i] >= AJI_CONNECT){ addlist(mvs[grpieces[cngr1[i]]],&charmy); addlist(mvs[grpieces[cngr2[i]]],&charmy); } }
void evalmanyeyespots(int rn,int sopen,int c,int numopenspots,int numenemyspots,int ldrno){ int sn2,eye_pot, count,opp_can_fill,flag,ptr2; /* first see what happens if opponent moves in sopen */ if(numopenspots == 0){ mvcolor[msptr] = 1-c; mvs[msptr] = sopen; opp_can_fill = lupdate(msptr); ldndate(msptr); } else opp_can_fill = TRUE; if(opp_can_fill){ addlist(sopen,&eyevital[rn]); addlist(rn,&eyevitrec[sopen]); } /* now see how many eyes we can make */ mvcolor[msptr] = c; mvs[msptr] = sopen; flag = lupdate(msptr); upldrflags(msptr,ldrno); ++msptr; eye_pot = 0; for(ptr2 = eyeptr[rn]; ptr2 != EOL; ptr2 = links[ptr2]){ sn2 = list[ptr2]; count = getcount(sn2,c,rn,FALSE,ldrno); eye_pot += cpot[count]; } --msptr; ldndate(msptr); eyepot[rn] = eye_pot; if(!opp_can_fill){ eyeval[rn] = eye_pot; eyemin[rn] = eye_pot; } else if(eye_pot >= 16){ /* can make two eyes */ if(numopenspots > 1 || numenemyspots != 0) eyeval[rn] = 0; else eyeval[rn] = 8; if(numopenspots == 0 && numenemyspots == 0) eyemin[rn] = eyeval[rn]; else eyemin[rn] = 0; } else if(ld[sopen] == 6 && eye_pot > 0){ /* enclosed 3 space eye */ eyeval[rn] = 8; eyemin[rn] = 0; } }
void addlkg(int g1,int g2,int s){ /* add a linkage from g1 to g2 at s */ int i,ptr; if(g1 == g2)return; for(ptr = grcnp[g1]; ptr != EOL; ptr = links[ptr]){ i = list[ptr]; if(cngr1[i] == g1 && cngr2[i] == g2 || cngr1[i] == g2 && cngr2[i] == g1){ if(addlist(s,&cnllptr[i])){ ++cnllnum[i]; if(cnllnum[i] > 1) addlist(i,&cnchgd); } addlist(i,&llbrd[s]); return; } } i = gtflist(&cnfreelist); addlist(i,&cnchgd); addlist(s,&cnllptr[i]); addlist(i,&llbrd[s]); addlist(i,&grcnp[g1]); addlist(i,&grcnp[g2]); cngr1[i] = g1; cngr2[i] = g2; cnllnum[i] = 1; cnprot[i] = CANT_CONNECT; if(grarmy[g1] == grarmy[g2])cnprot[i] = AJI_CONNECT; }
void addconn(int g1,int g2,int s){ /* add a connection from g1 to g2 at s */ int i,ptr; if(g1 == g2)return; ptr = grcnp[g1]; while(ptr != EOL){ i = list[ptr]; ptr = links[ptr]; if(cngr1[i] == g1 && cngr2[i] == g2 || cngr1[i] == g2 && cngr2[i] == g1){ if(addlist(s,&cnptr[i])){ ++cncnum[i]; if(cncnum[i] < 3) addlist(i,&cnchgd); } addlist(i,&cnbrd[s]); return; } } i = gtflist(&cnfreelist); addlist(i,&cnchgd); addlist(s,&cnptr[i]); addlist(i,&cnbrd[s]); addlist(i,&grcnp[g1]); addlist(i,&grcnp[g2]); cngr1[i] = g1; cngr2[i] = g2; cncnum[i] = 1; cnprot[i] = CANT_CONNECT; if(grarmy[g1] == grarmy[g2]){ cnprot[i] = AJI_CONNECT; } }
static void generatename( Telem *e ) { static char name[15]; if (e->name) { sprintf( name, "named[%d]", nameds++ ); e->codename = strdup( name ); addlist( all_named, e ); addlist( all_late, e ); } else { e->codename = 0; } }
/*-------------------------------------------------------------------------- * txprint when offset is known */ void txprint(int i,int *TXS, char *name) { int k; //char *ttcadl[]={"ZERO","L1h ","L1d ","L2h ","L2d ","L2r ","RoIh","RoId"}; char *ttcadl[]={"ZERO","L1h","L1d","L2h","L2d","L2r ","RoIh","RoId"}; char text[256]; int ttcadd,e,code,data,chck; ttcadd=0; for(k=0;k<14;k++)ttcadd=ttcadd+(1<<k)*TXS[14-k]; e=TXS[15]; code=0; for(k=0;k<4;k++)code=code+(1<<k)*TXS[20-k]; data=0; for(k=0;k<12;k++)data=data+(1<<k)*TXS[32-k]; chck=0; for(k=0;k<8;k++)chck=chck+(1<<k)*TXS[39-k]; if(code > 7){ printf("txprint: unexpected code 0x%x %s \n",code,name); sprintf(text,"Error: unexpected code in ttc:"); for(k=0;k<40;k++){ char cc[2]="0"; if(TXS[k]) cc[0]='1'; strcat(text,cc); } dump=addlist(dump,i,text); writeLog(); exit(2); } // Counting TTC words for L1 and L2 messages int TTCLX=1; if(code==1) TTCL1=1; if(code==3) TTCL2=1; if(code==2) { TTCL1++;TTCLX=TTCL1; if(TTCL1>9){ printf("Error: # L1 TTC words %i \n",TTCL1); } } if(code==4) { TTCL2++;TTCLX=TTCL2; if(TTCL2>13){ printf("Error: # L2 TTC words %i \n",TTCL2); } } //sprintf(text,"%s %s:0x%04x %x 0x%x 0x%03x 0x%02x ",name,ttcadl[code],ttcadd,e,code,data,chck); sprintf(text,"%s %s%02i:0x%04x %x 0x%x 0x%03x 0x%02x ",name,ttcadl[code],TTCLX,ttcadd,e,code,data,chck); dump=addlist(dump,i-39,text); }
void realbrklkg(int g1,int g2,int s1,int s2){ /* break link from g1 to g2 (s1 part of g2) at s2 */ /* break it even if other conns */ int i,j,ptr,ldtmp; if(g1 == g2)return; i = fdir[s2]; /* see if any g2's next to s2 */ for(ldtmp = ldir[i]; i < ldtmp; ++i) if(board[s2+nbr[i]] == g2){ /* found g2 near. */ for(j = 0; j < 4; ++j) /* are any g1's far? */ if(board[sqrbrd[s2][j]] == g1 && (dstbrd[s2][j] == 2 )){ return; } break; } for(ptr = grcnp[g1]; ptr != EOL; ptr = links[ptr]){ i = list[ptr]; if(cngr1[i] == g1 && cngr2[i] == g2 || cngr1[i] == g2 && cngr2[i] == g1){ if(!dellist(s2,&cnllptr[i])){ } else { --cnllnum[i]; } dellist(i,&llbrd[s2]); if(cnlknum[i] == 0 && cncnum[i] == 0 && cnllnum[i] == 0){ delconnrec(i); } else if(cnllnum[i] < 3) addlist(i,&cnchgd); return; } } }
int main(void){ char command, buf[40]; head.next = NULL; do{ printf("comm? a:add p:print q:quit\n"); fgets(buf, sizeof(buf), stdin); sscanf(buf, "%c", &command); switch(command){ case 'a': addlist(); showlist(); break; case 'p': showlist(); break; case 'q': break; default: printf("error\n"); break; } }while(command != 'q'); return 0; }
int add_user ( struct user_priority * ppri_tbl, char * user, int limit ) { if (limit < PRI_MIN || PRI_MAX < limit) return 1; addlist (&(ppri_tbl->users[limit - PRI_MIN]), user); return 0; }
ship *new_ship(const ship_type * stype, region * r, const struct locale *lang) { static char buffer[32]; ship *sh = (ship *)calloc(1, sizeof(ship)); const char *sname = 0; if (!sh) abort(); assert(stype); sh->no = newcontainerid(); sh->coast = NODIRECTION; sh->type = stype; sh->region = r; if (lang) { sname = LOC(lang, stype->_name); if (!sname) { sname = LOC(lang, parameters[P_SHIP]); } } if (!sname) { sname = parameters[P_SHIP]; } assert(sname); snprintf(buffer, sizeof(buffer), "%s %s", sname, itoa36(sh->no)); sh->name = str_strdup(buffer); shash(sh); if (r) { addlist(&r->ships, sh); } return sh; }
/* used in y.tab.c */ void named( char* name ) { Tname *n = alloc(Tname); n->name = name; n->used = 0; addlist( all_names, n ); }
int genelif(Error_printer *err, Frag *frag, Node * n, int v) { switch (n->what) { case nEMPTY: return 0; case nIF: { int els = genbra(err, frag, n->l, 1); int rtval; mklooplvl(frag, lvlSCOPE, 0, 0); if (v) gen(err, frag, n->r); else genn(err, frag, n->r); rmlooplvl(frag, lvlSCOPE, 0, 0); emitc(frag, iBRA); rtval = emitn(frag, 0); setlist(frag, els, frag->code); return rtval; } case nSEMI: { if (n->r->what == nELSE && n->r->r->what == nIF) { int z = genelif(err, frag, n->l, v); if (!z) error_2(err, "\"%s\" %d: else without if", n->r->loc->name, n->r->loc->line); else addlist(frag, z, genelif(err, frag, n->r->r, v)); return z; } } } if (v) gen(err, frag, n); else genn(err, frag, n); return 0; }
static void recruit_dracoids(unit * dragon, int size) { faction *f = dragon->faction; region *r = dragon->region; const struct item *weapon = NULL; order *new_order = NULL; unit *un = create_unit(r, f, size, get_race(RC_DRACOID), 0, NULL, NULL); fset(un, UFL_ISNEW | UFL_MOVED); name_unit(un); change_money(dragon, -un->number * 50); equip_unit(un, get_equipment("recruited_dracoid")); setstatus(un, ST_FIGHT); for (weapon = un->items; weapon; weapon = weapon->next) { const weapon_type *wtype = weapon->type->rtype->wtype; if (wtype && (wtype->flags & WTF_MISSILE)) { setstatus(un, ST_BEHIND); } new_order = create_order(K_STUDY, f->locale, "'%s'", skillname(weapon->type->rtype->wtype->skill, f->locale)); } if (new_order != NULL) { addlist(&un->orders, new_order); } }
static void dopragma(State *s, char *p) { int l; char *q, *t, *path, *m; static char *lib = "lib"; l = strlen(lib); if(strncmp(p, "lib", l) != 0) return; p += l; while(isspace(*p)) p++; if(*p++ != '"') cpperr(s, "#pragma lib - \" not found\n"); if((q = strrchr(p, '"')) == nil) cpperr(s, "#pragma lib - \" unmatched\n"); *q = 0; path = expand(p); if(addlist(&Pragmalib, path) == 1) parse_ar(path); free(path); }
void move_unit(unit * u, region * r, unit ** ulist) { assert(u && r); assert(u->faction || !"this unit is dead"); if (u->region == r) return; if (!ulist) ulist = (&r->units); if (u->region) { setguard(u, GUARD_NONE); fset(u, UFL_MOVED); if (u->ship || u->building) { /* can_leave must be checked in travel_i */ #ifndef NDEBUG bool result = leave(u, false); assert(result); #else leave(u, false); #endif } translist(&u->region->units, ulist, u); } else { addlist(ulist, u); } #ifdef SMART_INTERVALS update_interval(u->faction, r); #endif u->region = r; }
void brkconns(int s){ /* break all connections through s */ int i,ptr; for(ptr = cnbrd[s]; ptr != EOL; ptr = links[ptr]){ i = list[ptr]; dellist(s,&cnptr[i]); cncnum[i]--; if(cncnum[i] == 0 && cnlknum[i] == 0 && cnllnum[i] == 0){ delconnrec(i); } else if(cncnum[i] == 1) addlist(i,&cnchgd); } for(ptr = lkbrd[s]; ptr != EOL; ptr = links[ptr]){ i = list[ptr]; dellist(s,&cnlkptr[i]); cnlknum[i]--; if(cncnum[i] == 0 && cnlknum[i] == 0 && cnllnum[i] == 0){ delconnrec(i); } } for(ptr = llbrd[s]; ptr != EOL; ptr = links[ptr]){ i = list[ptr]; dellist(s,&cnllptr[i]); cnllnum[i]--; if(cncnum[i] == 0 && cnlknum[i] == 0 && cnllnum[i] == 0){ delconnrec(i); } } killist(&llbrd[s]); killist(&cnbrd[s]); killist(&lkbrd[s]); }
/*---------------------------------------------------------------------------------*/ void lxprint(int i,int rc,int NLxdat,int *LxDATA,char *name) { int k,j,offset=0; int tcl1,tcl2,tcl3; char mess[38],line[256]=" ",www[256]; switch(rc){ case(0): if(NLxdat == NL2dat) offset=1; for(k=0;k<38;k++)mess[k]=0; //for(k=offset;k<NLxdat+offset;k++){ for(k=offset;k<NLxdat;k++){ j=k-offset; //printf("%i %i %i \n",j,j/4,k); mess[j/4]=mess[j/4]+(1 << (3-(j%4)))*LxDATA[k]; } strcpy(line,name); strcat(line,":"); for(k=0;k<(NLxdat/4)+1-offset;k++){ sprintf(www,"%1x",mess[k]); strcat(line,www); if( ((k%3) == 2) && (k != NLxdat/4-offset)) strcat(line,"."); } if(offset){ //printf("k= %i \n",k); sprintf(www,"%1x",mess[k]); strcat(line,www); } /* Trigger classes */ tcl1=0; for(k=0;k<32;k++) tcl1=tcl1+(1<<k)*LxDATA[NLxdat-k-1]; tcl2=0; for(k=32;k<64;k++) tcl2=tcl2+(1<<(k-32))*LxDATA[NLxdat-k-1]; tcl3=0; for(k=64;k<100;k++) tcl3=tcl3+(1<<(k-64))*LxDATA[NLxdat-k-1]; //sprintf(www," TrCl: 0x%4x%8x%16x ",tcl2,tcl1,tcl3); //sprintf(www," TrCl: 0x%+04x%+08x ",tcl2,tcl1); sprintf(www," TrCl: 0x%8x%8x%8x ",tcl1,tcl2,tcl3); strcat(line,www); dump=addlist(dump,i-NLxdat+1,line); break; case(1): sprintf(line,"Error: %s arrives before strobe.",name); dump=addlist(dump,i,line); break; } }
void decl( Telem* e ) { if (!e->name) warning("%s declared without a name", e->elemname ); else { if (nerrors || nocode) return; if (e->elemidx == IMAGE || e->elemidx == IMAGERGB || e->elemidx == IMAGERGBA) { code_image( e ); addlist( all_images, e ); } else { addlist( all_elems, e ); } } }
faction *gm_addfaction(const char *email, plane * p, region * r) { attrib *a; unit *u; faction *f = calloc(1, sizeof(faction)); assert(p != NULL); /* GM faction */ a_add(&f->attribs, make_key(atoi36("quest"))); f->banner = _strdup("quest faction"); f->name = _strdup("quest faction"); f->passw = _strdup(itoa36(rng_int())); if (set_email(&f->email, email) != 0) { log_error("Invalid email address for faction %s: %s\n", itoa36(f->no), email); } f->race = new_race[RC_TEMPLATE]; f->age = 0; f->lastorders = turn; f->alive = true; f->locale = default_locale; f->options = want(O_COMPRESS) | want(O_REPORT) | want(O_COMPUTER) | want(O_ADRESSEN); { faction *xist; int id = atoi36("gm00") - 1; do { xist = findfaction(++id); } while (xist); f->no = id; addlist(&factions, f); fhash(f); } /* generic permissions */ a = a_add(&f->attribs, a_new(&at_permissions)); if (a) { attrib *ap = (attrib *) a->data.v; const char *keys[] = { "gmterf", "gmtele", "gmgive", "gmskil", "gmtake", "gmmsgr", "gmmsgu", "gmgate", 0 }; const char **key_p = keys; while (*key_p) { add_key(&ap, atoi36(*key_p)); ++key_p; } a_add(&ap, make_atgmcreate(resource2item(r_silver))); a->data.v = ap; } /* one initial unit */ u = create_unit(r, f, 1, new_race[RC_TEMPLATE], 1, "quest master", NULL); u->irace = new_race[RC_GNOME]; return f; }
int lsplit(int ptr,int j) { int lptr,lptr2,ptr2,tlist,g2,gret,c; tlist = EOL; c = grcolor[list[ptr]]; ptr2 = ptr; while(ptr2 != EOL){ g2 = list[ptr2]; if(grcolor[g2] != c)break; adflist(list[ptr2],&tlist); ptr2 = links[ptr2]; } ptr = tlist; gret = list[tlist]; killist(&grlbp[j]); lptr = grnbp[j]; while(lptr != EOL){ dellist(j,&grnbp[list[lptr]]); lptr = links[lptr]; } if(grnbp[j] != EOL) killist(&grnbp[j]); --maxgr; /* group j is gone! */ lptr = mvnext[grpieces[j]]; /* unlink pieces list */ ptr2 = ptr; g2 = list[ptr2]; ptr2 = links[ptr2]; lptr2 = grpieces[list[ptr2]]; while(lptr != -1){ board[mvs[lptr]] = g2; if(mvnext[lptr] == lptr2){ mvnext[lptr] = -1; lptr = lptr2; g2 = list[ptr2]; ptr2 = links[ptr2]; if(ptr2 == EOL) lptr2 = -2; else lptr2 = grpieces[list[ptr2]]; } else lptr = mvnext[lptr]; } ptr2 = ptr; while(ptr2 != EOL){ /* fix neighbors */ g2 = list[ptr2]; lptr = grnbp[g2]; ptr2 = links[ptr2]; while(lptr != EOL){ addlist(g2,&grnbp[list[lptr]]); lptr = links[lptr]; } } killist(&tlist); return(gret); }
void aa_recommendlow(aa_linkedlist ** l, __AA_CONST char *name) { aa_linkedlist *o = aa_find(*l, name); if (o == NULL) { aa_linkedlist *m = (aa_linkedlist *) malloc(sizeof(*m)); m->text = strdup(name); addlist(*l, m); } }
void upldrflags(int upptr,int ldrno){ int s,sn,i,ldtmp,g2; s = mvs[upptr]; if(s == PASS)return; if(addlist(ldrno,&ldrflag[s])){ adflist(s,&grldr[ldrno]); } i = fdir[s]; for(ldtmp = ldir[i]; i < ldtmp; ++i){ sn = s + nbr[i]; g2 = board[sn]; if(g2 != NOGROUP){ if(addlist(ldrno,&ldrflag[mvs[grpieces[g2]]])) adflist(mvs[grpieces[g2]],&grldr[ldrno]); } } }