int RowanTasks::StartTask() { int count=lasttasknum; while (count<MAX_TASKS) breakif (taskstacks[++count]==0); if (count==MAX_TASKS) for (count=0;count<lasttasknum;) breakif (taskstacks[++count]==0); if (count==lasttasknum) INT3; //oh dear... run out of tasks? taskstacks[count]=ULong(&count); //get address of local variable... return count; }
void CDamage::FillList() { //DeadCode JIM 20Oct00 int setindex=-1; //DeadCode JIM 20Oct00 int listlen=0; CRListBox* l=GETDLGITEM(IDC_LIST_ELEMENTS); l->Clear(); //Find damage info for group int de=numdamagedelts; while(de-->0) breakif (damagedelements[de].loadedid==groupnum); if (de>=0) { int specificeltdamage=de; UniqueID startpoint=UID_NULL; UniqueID findpoint=(UniqueID)wavenum; if (wavenum!=groupnum) { if (!DeadStream::MainWorldBand(UniqueID(groupnum))) startpoint=findpoint; findpoint=damagedelements[specificeltdamage].memberid; } DeadStream::DeadBlockItterator itt(Dead_Stream.firstblock,startpoint); itt.SkipToItem(findpoint); //list elements l->AddColumn(TARGETFIELDWIDTH+50); l->AddColumn(50); for (GroupItterator si(damagedelements[specificeltdamage].shape,&itt);si;si++) { if (si.DamageWeight()>IGNOREDAMAGEBELOWTHIS && si.shape!=CTRPTC && si.shape!=CRKPTC) { l->AddString(GetShapeName(si.shape)+" "+GetEltDeltaName(si.delta),0); l->AddString(RESLIST(DAMAGESTAT_ALIVE,((MinAnimData&)si.AnimDataByte()).itemstate),1); } } } else { l->AddColumn(TARGETFIELDWIDTH+100); info_itemS* p = *Persons2::SlowConvertPtrUID(UniqueID(groupnum)); if (p) if (p->Status.size>=MOBILESIZE) { EventVal& type=p->shape; int max=(info_grndgrpPtr(*p)->inform); for (int i=0;i<max;i++) l->AddString(GetShapeName(ShapeNum(type.Evaluate(i))),0); } else for (GroupItterator si(ShapeNum(p->shape.Evaluate()));si;si++) { if (si.DamageWeight()>IGNOREDAMAGEBELOWTHIS && si.shape!=CTRPTC && si.shape!=CRKPTC) { l->AddString(GetShapeName(si.shape)+" "+GetEltDeltaName(si.delta),0); } } } }
//컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴 //Procedure getword //Author Jim Taylor //Date Mon 27 Nov 1995 // //Description Gets 1 symbol... either a word or punctuation. // I think this routine can error if it runs out of data, // because the caller should know when to expect EOF, // but not yet! // //Inputs // //Returns // //------------------------------------------------------------------------------ static string TokenSpell::getword(file ifile) { //2 stages to getting a word: // 1) leading white removal // 2) copy to terminator //1) leading white removal char c; string myword = NULL; if (!stripwhite(ifile)) return(NULL); elser { c=(char) fgetc(ifile); string outbuf=wordbuff; myword=outbuf; //test for punctuation (ok... spc/tab in there as well!) string p1=endchars; while ((c!=*p1) && *p1) p1++; if (*p1) { //punctuation only 1 char long... *(outbuf++)=c; *outbuf=0; return (myword); } elser { for(;;) { //build string up to next punctuation or white *(outbuf++)=c; *outbuf=0; //handle early return for eof c=(char) fgetc(ifile); //EOF during a word read is not an error, really if (feof(ifile)) return (myword); string p1=endchars; while ((c!=*p1) && *p1) p1++; breakif (*p1); } ungetc(c,ifile); return (myword); } } }
//컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴 //Procedure Reg3dConv //Author Jim Taylor //Date Mon 30 Oct 1995 // //Description maps 1 3d keypress manually // //Inputs // //Returns // //------------------------------------------------------------------------------ void keytests::Reg3dConv(KeyMapping* mapreq,int i) { ClearKeyTables(); KeyMap3d* keymap=(KeyMap3d*) reftable3d.flat; while (i--) { keymap->mappings[mapreq->scancode][mapreq->shiftstate]=mapreq->bitflag; mapreq++; breakif(mapreq->scancode==0); } ((KeyMap3d*) reftable3d.flat)->active=TRUE; ModeIs3D=TRUE; }
//컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴 //Procedure stripwhite //Author Jim Taylor //Date Mon 27 Nov 1995 // //Description Strips out any whitespace characters, and counts carriage returns // //Inputs // //Returns returns FALSE if EOF read // returns TRUE if more symbols to follow //------------------------------------------------------------------------------ Bool TokenSpell::stripwhite(file ifile) { char c; for(;;) { if (feof(ifile)) return (FALSE); c = (char) fgetc(ifile); if (feof(ifile)) return (FALSE); if (c=='/') { if (feof(ifile)) return (FALSE); c='\n'; while (fgetc(ifile)!=c) //comments: single slash - to end of line if (feof(ifile)) return (FALSE); } string p1=whitechars; if (c=='\n') currsrcfline++; else while ((c!=*p1) && *p1) p1++; breakif (*p1==0); } if (feof(ifile)) return (FALSE); ungetc(c,ifile); return(TRUE); }
void HostilesList::FindPackages() { currpacklist = 0; int pack=0; for (int i = 0; i < MAX_PACKLIST;i++) packlist[i].pack = 65535; while (pack < Profile::MAX_PACKS) { Profile& pk = Todays_Packages.pack[pack]; if ( (pk.attackmethod >= Profile::AM_LWPACKS) ) { if ( (Todays_Packages.pack[pack].packagestatus!=Profile::PS_SPARE) ) { int i=0; UWord oldraidline = 0; UWord raidline=0;//x0r int targetnum = 0; UniqueID detectedflight=UID_NULL; int firstsq; if ( ( (!MMC.hostilefilters[HL_TARGETAREA]) && Todays_Packages.pack[pack].packagestatus >Profile::PS_INCOMING && Todays_Packages.pack[pack].packagestatus <Profile::PS_OUTGOING) || ( (!MMC.hostilefilters[HL_FORMING]) && Todays_Packages.pack[pack].packagestatus <=Profile::PS_FORMING) || ( (!MMC.hostilefilters[HL_INCOMING]) && Todays_Packages.pack[pack].packagestatus ==Profile::PS_INCOMING) || ( (!MMC.hostilefilters[HL_OUTGOING]) && Todays_Packages.pack[pack].packagestatus >=Profile::PS_OUTGOING) ) while (i<pk.squadlist) { int strike=0,detachedescort =0, attachedescort =0; int striketo=0,detachedescortto =0, attachedescortto =0; int strikegruppe = -1, detachedgruppe = -1, attachedgruppe = -1; int totalac; int escortgruppe; while (i < pk.squadlist && pk.GetRaidIndFromSquadEntry(i)==oldraidline) { targetnum = 0; if (pk[i].playercansee) { detectedflight=pk[i].instance; if (pk[i].method == pk.attackmethod) { targetnum = pk[i].targetindex; strike += pk[i].numacleft; striketo = pk[i].takeofftime; strikegruppe = pk[i].squadnum; } if (pk[i].method >= Profile::AM_ATTACHED) { attachedescort += pk[i].numacleft; attachedescortto = pk[i].takeofftime; attachedgruppe = pk[i].squadnum; } else if (pk[i].method >= Profile::AM_DETACHED) { detachedescort += pk[i].numacleft; detachedescortto = pk[i].takeofftime; detachedgruppe = pk[i].squadnum; } } i++; } totalac = strike + attachedescort + detachedescort; escortgruppe = -1; if (attachedgruppe >=0) escortgruppe = attachedgruppe; else if (detachedgruppe >=0) escortgruppe = detachedgruppe; if (strike == 0) { strike = attachedescort + detachedescort; strikegruppe = escortgruppe; escortgruppe = -1; } firstsq = pk.raidnumentries[oldraidline].squadliststart; Profile::PackageStatus responsestatus=Todays_Packages.FindBestResponseStatus(pack,firstsq); if ( (pk.raidnumentries[oldraidline].detector) && (strike) && ( ( (!MMC.hostilefilters[HL_NORESPONSE]) && responsestatus==Profile::PS_SPARE) || ( (!MMC.hostilefilters[HL_RESPONSES]) && responsestatus==Profile::PS_INCOMING) || ( (!MMC.hostilefilters[HL_ENEMYSIGHTED]) && responsestatus==Profile::PS_ENEMYSIGHTED) ) ) { UniqueID trg=UID_NULL; if (Todays_Packages.pack[pack].packagestatus>Profile::PS_FORMING) if (Todays_Packages.pack[pack].doglegloc== UniqueID(Todays_Packages.pack[pack].packagetarget[targetnum])) trg=Todays_Packages.pack[pack].doglegloc; //ON A STRAIGHT COURSE else { //find out if current waypoint is past dogleg waypoint info_airgrpPtr ac=Persons2::ConvertPtrUID(detectedflight); UniqueID wpu=ac->wpref; while (wpu) { info_waypointPtr wpp=Persons2::ConvertPtrUID(wpu); breakif (wpp->uid.Evaluate()==-SGR_WPP_DogLeg); wpu=wpp->nextwp; } if (wpu) trg=Todays_Packages.pack[pack].doglegloc; else trg=Todays_Packages.pack[pack].packagetarget[targetnum]; } FillPackList(pack, oldraidline, trg, pk.attackmethod, totalac, striketo, strikegruppe, escortgruppe); } if (i!=pk.squadlist) raidline = pk.GetRaidIndFromSquadEntry(i); //DeadCode JIM 8Aug00 else //DeadCode JIM 8Aug00 raidline=0; oldraidline=raidline; } } } pack++; } }
void Profile::SaveAirItemBin(Profile::Squad* squad,UniqueID route,BOStream&file) { info_airgrp *a=*Persons2::ConvertPtrUID(squad->instance); // T_route: done // T_inform: // T_inwing: // T_duty: // T_form: // T_position: // T_waypoint: numeric index into current route //DEADCODE DAW 21/02/00 file <<C (T_inwing);a->inwing.Save(file,NULL); file <<C (T_inform); if (squad->status==Profile::PS_COMPLETE) Expr::putint(0,file); else Expr::putint(squad->numacleft,file); file <<C (T_duty);Expr::putint(squad->method+(squad->submethod<<PACK_AM_SUBMETHOD_SHIFT),file); if (a->position.complex==NULL) { a->position.MakeRelWorldPos(Node_Data[squad->squadnum].homeairfield); //RDH 18Sep00 } file <<C (T_pos);a->position.Save(file,NULL); //DEADCODE JIM 14/01/00 if (a->form.Evaluate()<SQUAD_FLATV) //DEADCODE JIM 14/01/00 a->form=SQUAD_FLATV; file <<C (T_form);a->form.Save(file,NULL); int i=0; UniqueID wpref=a->wpref; if (wpref==UID_NULL) wpref=squad->takeoffwp; for (UniqueID u=route;u!=NULL;) { breakif(u==wpref); i++; u=info_waypointPtr(Persons2::ConvertPtrUID(UniqueID(u)))->nextwp; } file <<C (T_waypoint);Expr::putint(i,file); // T_itemA: // T_setUID: NEVER // T_nation: ALWAYS // T_shape: NEVER // T_type: ALWAYS - NOW MEANS SQUADRON // T_vel: NEVER // T_UIDband: NEVER // T_move: NEVER // T_skill: NEVER - from pilot skill! // T_morale: NEVER - from pilot skill! // T_character: NEVER - from pilot skill! // T_damage: NEVER - from pilot skill! // T_bombs: ALWAYS = weap package // T_target: NEVER // T_attacker: NEVER // T_leader: now in airgrp! // T_follower: NEVER // T_home: NEVER // T_event: NEVER // T_att: NEVER // T_squadron: NEVER - oops! // T_paintscheme now used for 'originalformpos' //New in BoB // T_damage - fuel // T_applywave - target // 3 fields // attmethod, //NEED TO SAVE if set // attpattern, //NEED TO SAVE // radiosilence, //NEED TO SAVE int total=9; //DEADCODE CSB 30/05/00 if (a->attmethod.Evaluate()!=GOT_UNDEFINED_VAL) total++; //DEADCODE CSB 30/05/00 if (a->pattern.Evaluate()!=GOT_UNDEFINED_VAL) total++; //DEADCODE CSB 30/05/00 if (a->radiosilence.Evaluate()!=GOT_UNDEFINED_VAL) total++; if (a->movecode.Evaluate()!=GOT_UNDEFINED_VAL) total++; if (a->target.Evaluate()!=GOT_UNDEFINED_VAL && a->target.Evaluate()!=0) total++; if (a->attitude.complex) total++; //AIRITEM file <<C T_itemA <<C T_linklist <<C total; if (a->attitude.complex) { file << C T_att << C T_linklist << C 2; file << T_pitch ; a->attitude[2].Save(file,NULL); file << T_bearing ; a->attitude[1].Save(file,NULL); } file <<C (T_paintscheme); if (squad->squadnum<SQ_LW_START) { if (&squadlist[0]==squad) { UWord bits=squadlist.AcBitsFirstSquad(); int count=0; while (!(bits&7)) { bits>>=3; count++; } Expr::putint(count,file); } else {
void CDamage::DoDataExchange(CDataExchange* pDX) { char* fractionformat=": %i/%i"; CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDamage) // NOTE: the ClassWizard will add DDX and DDV calls here DDX_Control(pDX,IDC_LIST_ELEMENTS,m_IDC_LIST_ELEMENTS); DDX_Control(pDX,IDC_COMBO_ELEMENTS,m_IDC_COMBO_ELEMENTS); //}}AFX_DATA_MAP int line=0; int selline=-1; internalUIDmax=0; CString displayline; { //RDH 28/04/99 info_itemS* p = *Persons2::SlowConvertPtrUID(UniqueID(wavenum)); if (p->Status.size>=MOBILESIZE) { CString str = GetShapeName(ShapeNum(p->shape.Evaluate())); if (str.IsEmpty() || str[0]=='_') str=GetTargName(UniqueID(wavenum)); if (str.IsEmpty() || str[0]==0) str=RESSTRING(ASSET); displayline=str;//l->AddString(str,0); int damagelevel=Node_Data[UniqueID(wavenum)].truestatus; int members=(info_grndgrpPtr(*p)->inform); if (damagelevel>100) damagelevel=100; damagelevel=damagelevel*(members+6)*(members+6)/100; int deadmembers=6; for (;deadmembers*deadmembers<damagelevel;deadmembers++) {} displayline=RESSTRING(DAMAGED)+CSprintf(fractionformat,deadmembers-6,members); } else { { CString str = GetShapeName(ShapeNum(p->shape.Evaluate())); if (str.IsEmpty() || str[0]=='_') str=GetTargName(UniqueID(wavenum)); displayline=str;//l->AddString(str,0); } if (damagedelements[0].loadedid==wavenum) { DeadStream::DeadBlockItterator itt(Dead_Stream.firstblock,UID_NULL); itt.SkipToItem(UniqueID(wavenum)); int damagedeltc=0,totaleltc=0,damagedpoints=0; for (GroupItterator si(damagedelements[0].shape,&itt);si;si++) if (si.AnimDataMAD().itemstate>0) { if (si.DamageWeight()>IGNOREDAMAGEBELOWTHIS) { damagedeltc++; totaleltc++; } damagedpoints+=si.AnimDataMAD().itemstate*si.DamageWeight(); } else if (si.DamageWeight()>IGNOREDAMAGEBELOWTHIS) totaleltc++; displayline+=CSprintf(fractionformat,damagedeltc,totaleltc); } else { int totaleltc=0; info_itemS* p = *Persons2::SlowConvertPtrUID(UniqueID(wavenum)); if (p) for (GroupItterator si(ShapeNum(p->shape.Evaluate()));si;si++) if (si.DamageWeight()>IGNOREDAMAGEBELOWTHIS) totaleltc++; displayline+=CSprintf(fractionformat,0,totaleltc); //DEADCODE DAW 02/02/00 l->AddString(RESSTRING(FULLY_F),1); //DEADCODE DAW 02/02/00 l->AddString(RESSTRING(F_FUNCTIONAL),2); } } } internalUIDList[internalUIDmax++]=UniqueID(wavenum); GETDLGITEM(IDC_COMBO_ELEMENTS)->AddString(displayline); if (groupnum==UID_NULL || groupnum==wavenum) selline=line; line++; info_itemS* p; UniqueIDBand band; for (int i=CivilianBAND;i<WorldStuff::PITEMTABLESIZE;i++) if ( ((p=Persons2::ConvertPtrUID(UniqueID(i)))!=NULL) && (p->SGT==wavenum && p->shape.Evaluate()!=EMPTY && p->shape.Evaluate()!=EMPTY2 &&p->Status.size<MOBILESIZE) && (band=Persons2::getbandfromUID(UniqueID(i)))!=0 && band!=LandscapeBAND ) { displayline=GetShapeName(ShapeNum(p->shape.Evaluate()))+" "+GetRelativeName(p->SGT,&p->World); int de=numdamagedelts; while(de-->0) breakif (damagedelements[de].loadedid==i); if (de>=0) { UniqueID startpoint=UID_NULL; UniqueID findpoint=(UniqueID)wavenum; //DEADCODE JIM 07/06/99 if (wavenum!=groupnum) { if (!DeadStream::MainWorldBand(UniqueID(i))) startpoint=findpoint; findpoint=damagedelements[de].memberid; } DeadStream::DeadBlockItterator itt(Dead_Stream.firstblock,startpoint); itt.SkipToItem(findpoint); int damagedeltc=0,totaleltc=0,damagedpoints=0; for (GroupItterator si(damagedelements[de].shape,&itt);si;si++) if (si.AnimDataMAD().itemstate>0) { if (si.DamageWeight()>IGNOREDAMAGEBELOWTHIS) { damagedeltc++; totaleltc++; } damagedpoints+=si.AnimDataMAD().itemstate*si.DamageWeight(); } else if (si.DamageWeight()>IGNOREDAMAGEBELOWTHIS) totaleltc++; displayline+=CSprintf(fractionformat,damagedeltc,totaleltc); } else { int totaleltc=0; info_itemS* p = *Persons2::SlowConvertPtrUID(UniqueID(i)); if (p) for (GroupItterator si(ShapeNum(p->shape.Evaluate()));si;si++) if (si.DamageWeight()>IGNOREDAMAGEBELOWTHIS) totaleltc++; displayline+=CSprintf(fractionformat,0,totaleltc); } internalUIDList[internalUIDmax++]=UniqueID(i); GETDLGITEM(IDC_COMBO_ELEMENTS)->AddString(displayline); if (groupnum==i) selline=line; line++; } GETDLGITEM(IDC_COMBO_ELEMENTS)->SetIndex(selline); FillList(); }