亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? chaniprs.cpp

?? Windows上的MUD客戶端程序
?? CPP
字號:
/*----------------------------------------------------------------------------
                        _                              _ _       
        /\             | |                            | (_)      
       /  \   _ __   __| |_ __ ___  _ __ ___   ___  __| |_  __ _ 
      / /\ \ | '_ \ / _` | '__/ _ \| '_ ` _ \ / _ \/ _` | |/ _` |
     / ____ \| | | | (_| | | | (_) | | | | | |  __/ (_| | | (_| |
    /_/    \_\_| |_|\__,_|_|  \___/|_| |_| |_|\___|\__,_|_|\__,_|

    The contents of this file are subject to the Andromedia Public
	License Version 1.0 (the "License"); you may not use this file
	except in compliance with the License. You may obtain a copy of
	the License at http://www.andromedia.com/APL/

    Software distributed under the License is distributed on an
	"AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
	implied. See the License for the specific language governing
	rights and limitations under the License.

    The Original Code is Pueblo client code, released November 4, 1998.

    The Initial Developer of the Original Code is Andromedia Incorporated.
	Portions created by Andromedia are Copyright (C) 1998 Andromedia
	Incorporated.  All Rights Reserved.

	Andromedia Incorporated                         415.365.6700
	818 Mission Street - 2nd Floor                  415.365.6701 fax
	San Francisco, CA 94103

    Contributor(s):
	--------------------------------------------------------------------------
	   Chaco team:  Dan Greening, Glenn Crocker, Jim Doubek,
	                Coyote Lussier, Pritham Shetty.

					Wrote and designed original codebase.

------------------------------------------------------------------------------

	This file consists of the implementation of the ChAnim parsing classes.

----------------------------------------------------------------------------*/

// $Header: /home/cvs/chaco/modules/client/msw/ChGraphx/ChAniPrs.cpp,v 2.3 1996/03/15 08:12:14 pritham Exp $

#include "grheader.h"
#include <ChUrlMap.h>
#include "ChGrMod.h"
#include "ChAniPrs.h"
#include "ChAniDep.h"
#include "ChGrStrm.h"

#ifdef _DEBUG
	#undef THIS_FILE
	static char THIS_FILE[] = __FILE__;
#endif

ChAnimParser * ChAnimParser::m_theParser = 0;

typedef struct tagChAnimToken {
	char * m_pstrToken;
	int	m_token;
} ChAnimToken;

const ChAnimToken  aAnimTokens[] =
{
	{"anchor",		ANCHOR },
	{"anchorlist",	ANCHORLIST },
	{"background",	BACKGROUND },
	{"cast",		CAST  },
	{"castid",		CASTID  },
	{"cmdarg", 		CMDARG  },
	{"columns",		COLUMNS  },
	{"cursor",		CURSOR  },
	{"false",		FALSEVAL  },
	{"file",		FILE  },
	{"format",		FORMAT  },
	{"framerate",	FRAMERATE  },
	{"frames",		FRAMES  },
	{"goto",		GOTO  },
	{"hint",		HINT },
	{"hotcastid",	HOTCAST  },
	{"hotrect",		HOTRECT },        
	{"id",			NODEID },        
	{"isanimating",	ISANIMATING  },
	{"isdraggable",	ISDRAGGABLE  },
	{"isvisible",	ISVISIBLE  },
	{"name",		NAME  },
	{"rows",		ROWS  },
	{"scene",		SCENE },           
	{"script",		SCRIPT  },
	{"sprite",		SPRITE  },
	{"startframe",	STARTFRAME  },
	{"stop",		STOP  },
	{"true",		TRUEVAL  },
	{"", 0}
};

YYSTYPE ChAnimParser::bind( int tok, void *val )
{
	return YYSTYPE(new ChAnimBindVal( tok, val ));
}

YYSTYPE ChAnimParser::bind( int tok, int val )
{
	return YYSTYPE(new ChAnimBindVal( tok, val ));
}


int ChAnimParser::yylex(void)
{
	yylval = 0;
	int tok = 0; // eof until we know better
	string strTok;
	int ch;
	static char * strTokens = "{}";

	m_pStrm->eatwhite();
	SkipIfComment();
	m_pStrm->eatwhite();
	ch = m_pStrm->peek();
	if (strchr(strTokens, ch))
	{
		m_pStrm->get();
		switch( ch )
		{
			case '{':
			case '}':
			{
				//yytext[0] = ch;
				//yytext[1] = 0;
				tok = ch;
				break;
			}
		}
	}
	else
	{
		ReadString(strTok);
		if (!strTok.IsEmpty())
		{	
			//strcpy( yytext, LPCTSTR(strTok) );
			if(isdigit(strTok[0]))
			{
				double num = atof((LPCTSTR)strTok);
				if (int(num) == num)
				{
					yylval = YYSTYPE(num);
					tok = INT;
				}
				else
				{
					yylval = YYSTYPE(new double(num));
					tok = FLOAT;
				}
			}
			else
			{
				// look up keyword, if not found it's just a string
				tok = LookupKeyword(strTok);
				if (!tok)
				{	
 					yylval = YYSTYPE(new string(strTok));
					tok = STRING;
				}
			}
		}
	}

	return tok;
}

int ChAnimParser::LookupKeyword(string& strTok)
{
	int tok = 0;
	int j = 0;
	while(aAnimTokens[j].m_token)
	{
		if (!strTok.CompareNoCase(aAnimTokens[j].m_pstrToken))
		{
			return aAnimTokens[j].m_token;
		}
		j++;
	}

	return tok;
}

#define TOKEN_DELIMS "{}#"

void ChAnimParser::ReadString( string& strStr )
{
	strStr = "";
	m_pStrm->eatwhite();
	SkipIfComment();
	m_pStrm->eatwhite();
	int ch = m_pStrm->peek();
	if (ch == '"' || ch == '\'')
	{
		m_pStrm->get();	   // first quote
		m_pStrm->get((strStr.GetBuffer(1000)), 1000, '"');
		strStr.ReleaseBuffer();
		m_pStrm->get();	   // last quote
	}
	else
	{
		char * pBuf = strStr.GetBuffer(1000);
		char * pStart = pBuf;
		ch = m_pStrm->get();
		while( !m_pStrm->eof() && !isspace(ch) && !strchr(TOKEN_DELIMS, ch) )
		{
			*pBuf++ = ch;
			ch = m_pStrm->get();
		}
		strStr.ReleaseBuffer(pBuf - pStart);
		if (!m_pStrm->eof()) m_pStrm->putback(ch);
	}
}

void ChAnimParser::SkipIfComment( void )
{
	m_pStrm->eatwhite();
	int ch = m_pStrm->peek();
	while (ch == '#')
	{
		m_pStrm->ignore( 1000, '\n');
		m_pStrm->eatwhite();
		ch = m_pStrm->peek();
	}
}

chint32 ChAnimParser::AddAnchor( ChBindList *pList )
{
	ChAnimAnchor* pAnchor = new ChAnimAnchor;

	while(!pList->IsEmpty())
	{
		ChAnimBindVal *pBindVal = pList->RemoveHead();
		switch (pBindVal->GetKey())
		{
			case CAST:
			{
				pAnchor->SetCast( pBindVal->GetIVal() );
				break;
			}
			case CMDARG:
			{
				string *s = (string *)(pBindVal->GetVal());
				pAnchor->SetCmd( *s );
				delete s;
				break;
			}
			case CURSOR:
			{
				string *s = (string *)(pBindVal->GetVal());
				pAnchor->SetCursor( *s );
				delete s;
				break;
			}
			case HINT:
			{
				string *s = (string *)(pBindVal->GetVal());
				pAnchor->SetHint( *s );
				delete s;
				break;
			}
			case HOTCAST:
			{
				pAnchor->SetHotCastId( pBindVal->GetIVal() );
				break;
			}
			case HOTRECT:
			{
				CRect *r = (CRect *)(pBindVal->GetVal());
				pAnchor->SetRect( *r );
				delete r;
				break;
			}
			case NODEID:
			{
				pAnchor->SetId( pBindVal->GetIVal() );
				break;
			}
			case STARTFRAME:
			{
				pAnchor->SetStartFrame( pBindVal->GetIVal() );
				break;
			}
		}
		delete pBindVal;	
	}

	delete pList;
	if (pAnchor->GetId())
	{
		m_pView->AddAnchor(pAnchor);
	}
	return true;
}

chint32 ChAnimParser::AddCast( ChBindList *pList )
{
	ChAnimCastMember *pCast = new ChAnimCastMember(0);   // if id is 0, didn't read 
	CPhasedSprite* pSprite = 0;

 	ChPosition pos = 0;
 	if(!pList->IsEmpty()) pos = pList->GetHeadPosition();
    while (pos)
    {
		ChAnimBindVal *pBindVal = pList->GetNext(pos);
		switch (pBindVal->GetKey())
		{
			case NODEID:
			{
				pCast->SetId(pBindVal->GetIVal() );
				break;
			}
			case NAME:
			{
				string *s = (string *)(pBindVal->GetVal());
				pCast->SetName(*s);
				delete s;
				break;
			}
			case SPRITE:
			{
				ChBoundSprite * pBound = (ChBoundSprite *)(pBindVal->GetVal());
				pSprite = pBound->GetSprite();
				// setsprite overwrites these; oughta clean it up, but . . .
				pCast->m_iNumSpriteRows = pBound->GetSprite()->GetNumCellRows();
				pCast->m_iNumSpriteCols	 = pBound->GetSprite()->GetNumCellColumns();
				//pCast->SetSprite( pBound->GetSprite( ));
				pCast->SetSpriteURL( pBound->GetURL( ));
				delete pBound;
				break;
			}
			case ISVISIBLE:
			{
				pCast->Show( pBindVal->GetIVal() );
				break;
			}
			case ISANIMATING:
			{
				pCast->Animate( pBindVal->GetIVal() );
				break;
			}
			case ISDRAGGABLE:
			{
				pCast->SetDraggable( pBindVal->GetIVal() );
				break;
			}
			case SCRIPT:
			{
				ChAnimScript *pScript  = (ChAnimScript *)(pBindVal->GetVal());

				pCast->SetScript( pScript, false );  // don't copy cells; too slow
				pScript->SaveCells();		  // don't delete them either; that would crash
				delete pScript;				  // destructor noramlly deletes cells
				break;
			}
			case SCRIPTREF:
			{
				pCast->SetScriptURL( *(string *)(pBindVal->GetVal()));

				delete (string *)(pBindVal->GetVal());
				break;
			}
		}
		delete pBindVal;	
	}
	delete pList;

	pCast->SetSprite( pSprite);

	ChAnimCastHTTPReq *pNewCastReq = new ChAnimCastHTTPReq ( m_pView, pCast, GetURL() );
	if(m_pParentReq) m_pParentReq->Add(pNewCastReq);
	pNewCastReq->RequestParts( m_pInfo );

	return true;
}

chint32 ChAnimParser::Background( ChBindList *pList )
{
	string strURL;

 	ChPosition pos = 0;
 	if(!pList->IsEmpty()) pos = pList->GetHeadPosition();
    while (pos)
    {
		ChAnimBindVal *pBindVal = pList->GetNext(pos);
		switch (pBindVal->GetKey())
		{
			case FILE:
			{
				string *s = (string *)(pBindVal->GetVal());
				strURL = *s;
				delete s;
				break;
			}
		}
		delete pBindVal;	
	}
	delete pList;

	if( !strURL.IsEmpty())
	{
		ChAnimBackgroundHTTPReq *pHTTPReq = new ChAnimBackgroundHTTPReq ( m_pView, GetURL() );
		ChURLParts urlParts;
		urlParts.GetURLParts( strURL, GetURL() );

		m_pInfo->GetCore()->GetURL( strURL, 0, m_pInfo->GetStream(), (chparam)pHTTPReq );
		m_pInfo->SetLeafDependent(pHTTPReq);		
	}


	return true;
}

chint32 ChAnimParser::Sprite( ChBindList *pList )
{
	CPhasedSprite* pSprite = new CPhasedSprite;
	string strURL;

 	ChPosition pos = 0;
 	if(!pList->IsEmpty()) pos = pList->GetHeadPosition();
    while (pos)
    {
		ChAnimBindVal *pBindVal = pList->GetNext(pos);
		switch (pBindVal->GetKey())
		{
			case NODEID:
			{
				//pSprite->SetId(pBindVal->GetIVal() );
				break;
			}
			case NAME:
			{
				string *s = (string *)(pBindVal->GetVal());
				//pSprite->SetName(*s);
				delete s;
				break;
			}
			case FILE:
			{
				string *s = (string *)(pBindVal->GetVal());
				strURL = *s;
				delete s;
				break;
			}
			case ROWS:
			{
				chint32 rows = pBindVal->GetIVal() ;
				if(pSprite->GetHeight() < rows)
				{
					pSprite->Create(pSprite->GetWidth(), rows);
				}
				pSprite->SetNumCellRows( rows );
				break;
			}
			case COLUMNS:
			{
				chint32 columns = pBindVal->GetIVal() ;
				if(pSprite->GetWidth() < columns)
				{
					pSprite->Create(columns, pSprite->GetHeight());
				}
				pSprite->SetNumCellColumns( columns );
				break;
			}
		}
		delete pBindVal;	
	}
	delete pList;
	ChBoundSprite * pBound = new ChBoundSprite(pSprite, strURL);
	return chint32(pBound);
}

chint32 ChAnimParser::Script( ChBindList *pList )
{
	ChAnimScript *pScript = new ChAnimScript;

 	ChPosition pos = 0;
 	if(!pList->IsEmpty()) pos = pList->GetHeadPosition();
    while (pos)
    {
		ChAnimBindVal *pBindVal = pList->GetNext(pos);
		switch (pBindVal->GetKey())
		{
			case NODEID:
			{
				break;
			}
			case NAME:
			{
				string *s = (string *)(pBindVal->GetVal());
				//pScript->SetName(*s);
				delete s;
				break;
			}
			case FRAMERATE:
			{
				pScript->SetFrameRate(pBindVal->GetIVal() );
				break;
			}
			case FRAMES:
			{
				ChBoundCells * pBound = (ChBoundCells *)(pBindVal->GetIVal());
				pScript->SetCells(pBound->GetCells());
				pScript->SetCount(pBound->GetCount());
				delete pBound;
				break;
			}
			case STARTFRAME:
			{
				pScript->SetCurCell( pBindVal->GetIVal() );
				break;
			}
		}
		delete pBindVal;	
	}

	delete pList;
	return chint32(pScript);
}

chint32 ChAnimParser::Frames( ChBindList *pList )
{
	chint32 numFrames = pList->GetCount() + 1; // one extra in case of no stop or cycle at end
	ChCell * pFrames = new ChCell[numFrames];
 	ChPosition pos = 0;
 	if(!pList->IsEmpty()) pos = pList->GetHeadPosition();
	ChBoundCells * pBound = new ChBoundCells( numFrames, pFrames );

	int j = 0;
    while (pos)
    {
		ChAnimBindVal *pBindVal = pList->GetNext(pos);
		switch (pBindVal->GetKey())
		{
			case FRAMEVAL:
			{
				ChCell * pCell = ((ChCell *)(pBindVal->GetVal()));
				pFrames[j++] = *pCell;
				delete pCell;
				break;
			}
			case STOP:
			{
				pFrames[j++] = ChCell(0,0,0,0,CH_ANIM_SCRIPT_STOP, 0); 
				break;
			}
			case GOTO:
			{
				pFrames[j++] = ChCell(0,0,0,0,CH_ANIM_SCRIPT_GO_TO,pBindVal->GetIVal()); 
				break;
			}
		}
		delete pBindVal;	
	}

	pFrames[j++] = ChCell(0,0,0,0,CH_ANIM_SCRIPT_STOP, 0);   // guaranteed stop cell
    delete pList;
	return chint32(pBound);
}

YYSTYPE ChAnimParser::NewBindingList(ChAnimBindVal *pBindVal)
{
	ChBindList *pList = new ChBindList;

	pList->AddTail(pBindVal);

	return YYSTYPE(pList);
}

YYSTYPE ChAnimParser::AppendBindingList(ChBindList *pList, ChAnimBindVal *pBindVal)
{	
	pList->AddTail(pBindVal);

	return YYSTYPE(pList);
}

int ChAnimParser::interpret()
{
	// make sure this is correct file type
	string strFirstline;
	string strIntro("#ChacoGraph 1.0");

	m_pStrm->get((strFirstline.GetBuffer(1000)), 1000);
	strFirstline.ReleaseBuffer();
	if (strIntro.CompareNoCase(strFirstline.Left(strIntro.GetLength())))
		return 1;
	//return ChAnimYyparse();
	return yyparse();
};	

chint32 ChAnimParser::GetKey()	 // get the final result
{
	chint32 lVal = 0;

	if(	m_lResult )
	{
		lVal = ((ChAnimBindVal *)m_lResult)->GetKey();
	}
	return lVal;
}

chint32 ChAnimParser::GetVal()
{
	chint32 lVal = 0;

	if(	m_lResult )
	{
		if (((ChAnimBindVal *)m_lResult)->GetType() == ChAnimBindVal::Integer)
		{
			lVal = ((ChAnimBindVal *)m_lResult)->GetIVal();
		}
		else
		{
			lVal = chint32(((ChAnimBindVal *)m_lResult)->GetVal());
		}
	}
	return lVal;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91网上在线视频| 日韩欧美国产一区二区三区| 欧美日韩精品欧美日韩精品一 | 成人欧美一区二区三区黑人麻豆| 午夜精品久久久久久不卡8050| 国产综合久久久久久鬼色| 欧美性一区二区| 国产校园另类小说区| 日产国产高清一区二区三区| 色94色欧美sute亚洲13| 久久精品视频在线免费观看| 毛片av一区二区| 91精品免费观看| 亚洲综合色丁香婷婷六月图片| 成人国产电影网| 久久精品欧美日韩| 精品系列免费在线观看| 欧美日本一区二区| 亚洲香肠在线观看| 欧美丝袜丝交足nylons| 亚洲黄色性网站| 91亚洲精品一区二区乱码| 国产日产欧美精品一区二区三区| 捆绑变态av一区二区三区| 在线播放国产精品二区一二区四区| 亚洲欧美日韩国产一区二区三区| 成人午夜大片免费观看| 国产偷国产偷亚洲高清人白洁| 精品在线你懂的| 久久中文娱乐网| 国产麻豆成人精品| 日本一区二区视频在线| 成人动漫在线一区| 亚洲欧美电影院| 91国偷自产一区二区使用方法| 夜夜嗨av一区二区三区网页| 日本韩国精品在线| 亚洲一区二区三区不卡国产欧美| 欧美体内she精视频| 亚洲第一搞黄网站| 欧美一级高清大全免费观看| 激情五月激情综合网| 国产色91在线| 91在线观看一区二区| 一区二区久久久久| 欧美一级二级三级乱码| 国产麻豆成人精品| 韩国成人在线视频| 久久久不卡影院| av电影在线观看一区| 夜夜操天天操亚洲| 欧美精品九九99久久| 狠狠色丁香婷婷综合久久片| 国产片一区二区三区| 91麻豆精品在线观看| 日韩中文字幕亚洲一区二区va在线 | 亚洲444eee在线观看| 日韩一区二区三区观看| 懂色av噜噜一区二区三区av| 亚洲免费av网站| 欧美一区二区三区四区在线观看| 国产一区美女在线| 亚洲精品一二三| 欧美一区二区高清| 99久久婷婷国产| 日本不卡视频一二三区| 国产精品视频看| 91精品国产美女浴室洗澡无遮挡| 国产精品资源站在线| 一区二区三区蜜桃| 久久久久久97三级| 欧美综合久久久| 国产99久久久精品| 天堂在线亚洲视频| 亚洲天堂av老司机| 2021中文字幕一区亚洲| 在线观看不卡视频| 大美女一区二区三区| 日本麻豆一区二区三区视频| 国产精品每日更新在线播放网址| 69久久夜色精品国产69蝌蚪网| 丰满少妇久久久久久久| 免费观看一级欧美片| 亚洲老妇xxxxxx| 国产欧美精品区一区二区三区 | 成人黄色a**站在线观看| 日韩电影网1区2区| 一区二区三区.www| 国产精品免费视频观看| 精品国产sm最大网站| 欧美午夜不卡视频| 99精品一区二区| 成人激情黄色小说| 国精产品一区一区三区mba视频 | 亚洲视频 欧洲视频| 精品电影一区二区| 91精品国产色综合久久ai换脸 | 国产日韩欧美精品电影三级在线| 欧美区在线观看| 色女孩综合影院| 91香蕉视频污在线| 成人sese在线| 国产精品77777竹菊影视小说| 久久国产尿小便嘘嘘尿| 蜜桃av一区二区三区电影| 亚洲国产精品一区二区久久恐怖片| 中文字幕中文在线不卡住| 国产亚洲va综合人人澡精品| 久久综合九色综合97婷婷女人| 欧美精品成人一区二区三区四区| 欧美性猛交一区二区三区精品| 99久久免费国产| 91在线观看一区二区| 色综合天天做天天爱| 91视频www| 色婷婷综合久久久中文字幕| 91天堂素人约啪| 色悠久久久久综合欧美99| 99久久99久久久精品齐齐| 99精品视频在线观看| 91国偷自产一区二区三区成为亚洲经典 | 久久九九影视网| 欧美激情一区二区三区四区| 国产精品网站一区| 亚洲美女视频一区| 天天av天天翘天天综合网色鬼国产| 亚洲va韩国va欧美va精品| 日韩成人一级大片| 国产精品一区在线观看乱码 | 亚洲人123区| 亚洲电影第三页| 美女www一区二区| 成人一区二区视频| 91在线视频在线| 91精品国产综合久久久久久 | 欧美一卡二卡三卡四卡| 欧美精品一区二区三区一线天视频| 欧美大片在线观看一区| 国产精品亲子伦对白| 亚洲一区二区三区四区在线观看 | 国内成人精品2018免费看| 国产成人亚洲综合a∨猫咪| youjizz久久| 欧美久久久久免费| 久久久精品中文字幕麻豆发布| 国产精品对白交换视频| 日韩主播视频在线| 成人免费va视频| 欧美老人xxxx18| 国产嫩草影院久久久久| 亚洲一级电影视频| 国产在线精品一区二区三区不卡 | 欧美日韩亚洲综合一区| 久久综合九色综合欧美98| 亚洲另类在线视频| 国产一区二区三区久久悠悠色av | 国产亚洲精品bt天堂精选| 亚洲成人自拍网| 成人深夜视频在线观看| 欧美精品18+| 国产精品网站一区| 久久国产生活片100| 欧美中文字幕一区二区三区亚洲| 久久综合久久久久88| 五月天激情小说综合| 北岛玲一区二区三区四区| 日韩欧美不卡一区| 亚洲中国最大av网站| 从欧美一区二区三区| 欧美一级二级在线观看| 亚洲一区在线观看免费 | 精品一区二区综合| 欧美网站一区二区| 亚洲欧美日韩中文字幕一区二区三区| 经典三级视频一区| 91精品在线免费观看| 一区二区欧美国产| 91老司机福利 在线| 中文字幕av资源一区| 国产精品一区专区| 久久久综合视频| 国产一区二区三区在线观看精品| 91麻豆精品国产无毒不卡在线观看 | 欧美日韩夫妻久久| 亚洲女与黑人做爰| aaa欧美色吧激情视频| 国产精品美女久久久久高潮| 国产美女视频一区| 久久综合色婷婷| 麻豆国产精品777777在线| 欧美一区欧美二区| 日韩精品福利网| 欧美日韩aaaaa| 亚洲成人免费看| 欧美丝袜自拍制服另类| 亚洲一区二区精品3399| 欧美性猛交xxxxxx富婆| 一区二区三区四区视频精品免费 | 在线观看亚洲专区| 一区二区三区中文免费|