Esempio n. 1
0
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;
}
Esempio n. 2
0
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);
					}
				}

	}
}
Esempio n. 3
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);
		}
	}
}
Esempio n. 4
0
//컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴
//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;

}
Esempio n. 5
0
//컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴
//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);
}
Esempio n. 6
0
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++;
	}


}
Esempio n. 7
0
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
		{
Esempio n. 8
0
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();

}