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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tintinif.cpp

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

    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.

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

	TinTin class miscellaneous methods.  Originally modified from TinTin++,
	(T)he K(I)cki(N) (T)ickin D(I)kumud Clie(N)t, originally coded by
	Peter Unold 1992.

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

// $Header: /home/cvs/chaco/modules/client/msw/ChWorld/TinTinIf.cpp,v 2.7 1996/09/12 19:10:16 pritham Exp $

#include "headers.h"
#if !defined(CH_PUEBLO_PLUGIN)
#include "resource.h"
#else
#include "vwrres.h"
#endif

#include "TinTin.h"


/*----------------------------------------------------------------------------
	Constants
----------------------------------------------------------------------------*/

#define MATH_STACK_SIZE		100


/*----------------------------------------------------------------------------
	Static variables
----------------------------------------------------------------------------*/

CH_INTERN_VAR MathOps	mathStack[MATH_STACK_SIZE];


/*----------------------------------------------------------------------------
	Utility functions
----------------------------------------------------------------------------*/

inline void MakeString( int iVal, string& strVal )
{
	strVal.Format( "%d", iVal );
}


/*----------------------------------------------------------------------------
	TinTin class protected methods
----------------------------------------------------------------------------*/

void TinTin::DoIf( const string& strArgs )
{
	const char*		pstrArgs = strArgs;
	string			strCondition;
	string			strThen;
	string			strElse;
	string			strTemp;

	pstrArgs = GetArgInBraces( pstrArgs, strCondition, false );
	pstrArgs = GetArgInBraces( pstrArgs, strThen, true );
	pstrArgs = GetArgInBraces( pstrArgs, strElse, true );

	SubstituteVars( strCondition, strTemp, true );
	SubstituteMyVars( strTemp, strCondition, true );

	EvalExpression( strCondition, strTemp );
	if (strTemp.IsEmpty() || strTemp == m_strFalse)
	{
		SubstituteVars( strElse, strTemp );
		SubstituteMyVars( strTemp, strElse );

		ParseInput( strElse );
	}
	else
	{
		SubstituteVars( strThen, strTemp );
		SubstituteMyVars( strTemp, strThen );

		ParseInput( strThen );
	}
}


void TinTin::DoMath( const string& strArgs )
{
	const char*		pstrArgs = strArgs;
	string			strVar;
	string			strRight;
	string			strTemp;
	TinTinListNode*	pNode;

	pstrArgs = GetArgInBraces( pstrArgs, strVar, false );
	pstrArgs = GetArgInBraces( pstrArgs, strRight, true );

	if (strVar.IsEmpty() || strRight.IsEmpty())
	{
		string		strMessage;

		LOADSTRING( IDS_TINTIN_MATH_PARAM_ERR, strMessage );
		ErrMessage( strMessage );
	}
	else if (!IsVarNameValid( strVar ))
	{
		string		strFormat;
		string		strMessage;

		LOADSTRING( IDS_TINTIN_VAR_NAME_ERR, strFormat );
		strMessage.Format( strFormat, (const char*)strVar );
		ErrMessage( strMessage );
	}
	else
	{
		SubstituteVars( strRight, strTemp, true );
		SubstituteMyVars( strTemp, strRight, true );

		EvalExpression( strRight, strTemp );

		if (pNode = GetListVars()->Search( strVar ))
		{
			GetListVars()->DeleteNode( pNode );
		}

		GetListVars()->InsertNode( strVar, strTemp, "0" );
	}
}


void TinTin::EvalExpression( const char* pstrArgs, string& strResult )
{
	::MakeString( true, strResult );
											// Parse the expression onto the stack
	if (CompileExpression( pstrArgs ))
	{
		bool	boolDone = false;

		while (!boolDone)
		{
			int		iIndex = 0;
			int		iBegin = -1;
			int		iEnd = -1;
			int		iPrev = -1;
			bool	boolCloseParenFound = false;

			while (mathStack[iIndex].GetNext() && !boolCloseParenFound)
			{
				if (mathStack[iIndex].GetOp() == opOpenParen)
				{
					iBegin = iIndex;
				}
				else if (mathStack[iIndex].GetOp() == opCloseParen)
				{
					iEnd = iIndex;
					boolCloseParenFound = true;
				}

				iPrev = iIndex;
				iIndex = mathStack[iIndex].GetNext();
			}

			if ((!boolCloseParenFound && (iBegin != -1)) ||
					(boolCloseParenFound && (iBegin == -1)))
			{
				ErrMessage( "#Error - Unmatched parentheses." );
				boolDone = true;
				::MakeString( false, strResult );
			}
			else if (!boolCloseParenFound)
			{
				if (iPrev == -1)
				{
					boolDone = true;

					if (mathStack[0].IsString())
					{
						strResult = *(mathStack[0].GetString());
					}
					else
					{
						::MakeString( mathStack[0].GetInt(), strResult );
					}
				}
				else
				{
					iBegin = -1;
					iEnd = iIndex;
				}
			}
			
			if (!boolDone && !DoOneInside( iBegin, iEnd ))
			{
				string		strMessage;

				strMessage.Format( "# Error - Invalid expression to evaluate in {%s}",
										pstrArgs );
				ErrMessage( strMessage );
				::MakeString( false, strResult );
				boolDone = true;
			}
		}
	}
	else
	{
		::MakeString( false, strResult );
	}

	ResetExpression();
}


bool TinTin::CompileExpression( const char* pstrArgs )
{
	int			iIndex = 0;

	while (*pstrArgs)
	{
		if (isdigit( *pstrArgs ))
		{
			const char*		pstrStart;
			int				iVal;

			mathStack[iIndex].SetOp( opInt );

			pstrStart = pstrArgs;
			while (isdigit( *pstrArgs ))
			{
				pstrArgs++;
			}

			sscanf( pstrStart, "%d", &iVal );
			mathStack[iIndex].Set( iVal );
			pstrArgs--;
		}
		else
		{
			switch( *pstrArgs )
			{
				case ' ':
				{
					break;
				}

				case '(':
				{
					mathStack[iIndex].SetOp( opOpenParen );
					break;
				}

				case ')':
				{
					mathStack[iIndex].SetOp( opCloseParen );
					break;
				}

				case '!':
				{
					if (*(pstrArgs + 1) == '=')
					{
						mathStack[iIndex].SetOp( opCompNotEqual );
						pstrArgs++;
					}
					else
					{
						mathStack[iIndex].SetOp( opBooleanNot );
					}
					break;
				}

				case '_':
				{
					mathStack[iIndex].SetOp( opLowercase );
					break;
				}

				case '*':
				{
					mathStack[iIndex].SetOp( opMult );
					break;
				}

				case '/':
				{
					mathStack[iIndex].SetOp( opDiv );
					break;
				}

				case '+':
				{
					mathStack[iIndex].SetOp( opAdd );
					break;
				}

				case '-':
				{
					TTOperator		oper = opInvalid;

					if (iIndex > 0)
					{
						oper = mathStack[iIndex-1].GetOp();
					}

					if (oper == opInt)
					{
						mathStack[iIndex].SetOp( opSubtract );
					}
					else
					{
						const char*		pstrStart;
						int				iVal;

						pstrStart = pstrArgs;
						pstrArgs++;
						while (isdigit(*pstrArgs))
						{
							pstrArgs++;
						}

						sscanf( pstrStart, "%d", &iVal );
						mathStack[iIndex].Set( iVal );
						mathStack[iIndex].SetOp( opInt );
						pstrArgs--;
					}
					break;
				}

				case '>':
				{
					if (*(pstrArgs + 1) == '=')
					{
						mathStack[iIndex].SetOp( opCompGreaterEqual );
						pstrArgs++;
					}
					else
					{
						mathStack[iIndex].SetOp( opCompGreater );
					}
					break;
				}

				case '<':
				{
					if (*(pstrArgs+1) == '=')
					{
						pstrArgs++;
						mathStack[iIndex].SetOp( opCompLessEqual );
					}
					else
					{
						mathStack[iIndex].SetOp( opCompLess );
					}
					break;
				}

				case '=':
				{
					mathStack[iIndex].SetOp( opCompEqual );

					if (*(pstrArgs + 1) == '=')
					{
						pstrArgs++;
					}
					break;
				}

				case '&':
				{
					mathStack[iIndex].SetOp( opBoolAnd );

					if (*(pstrArgs + 1) == '&')
					{
						pstrArgs++;
					}
					break;
				}

				case '|':
				{
					mathStack[iIndex].SetOp( opBoolOr );

					if (*(pstrArgs+1) == '|')
					{
						pstrArgs++;
					}
					break;
				}
											/* Strings can start with a single
												or double quote */
				case '\'':
				case '"':
				{
					char	cQuote = *pstrArgs;
					string	strTemp;

					mathStack[iIndex].SetOp( opInt );

					pstrArgs++;
					while (*pstrArgs && (*pstrArgs != cQuote))
					{
						if ('\\' == *pstrArgs)
						{
							pstrArgs++;
						}

						if (*pstrArgs)
						{
							strTemp += *pstrArgs;
							pstrArgs++;
						}
					}

					mathStack[iIndex].SetOp( opString );
					mathStack[iIndex].Set( strTemp );
					break;
				}

				case 'T':
				{
					mathStack[iIndex].SetOp( opInt );
					mathStack[iIndex].Set( true );
					break;
				}

				case 'F':
				{
					mathStack[iIndex].SetOp( opInt );
					mathStack[iIndex].Set( false );
					break;
				}

				default:
				{
					Message( "# Error - Invalid expression in #if or #math." );
					return false;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品日韩av一区二区| 成人性生交大片| 亚洲免费资源在线播放| 国产成人在线免费观看| 久久精品一区二区| 高清在线不卡av| 国产精品久久久久三级| 91在线观看下载| 亚洲欧美成人一区二区三区| av成人老司机| 亚洲男人的天堂一区二区| 欧美午夜精品免费| 婷婷开心激情综合| 日韩欧美国产系列| 国产传媒欧美日韩成人| 综合婷婷亚洲小说| 91福利国产成人精品照片| 亚洲成人av一区二区三区| 日韩限制级电影在线观看| 狠狠狠色丁香婷婷综合激情| 欧美高清在线精品一区| 一本在线高清不卡dvd| 日本免费新一区视频| 精品国产第一区二区三区观看体验| 精品视频一区二区不卡| 三级一区在线视频先锋| www国产亚洲精品久久麻豆| 9i在线看片成人免费| 亚洲高清免费在线| 欧美精品一区二区三区高清aⅴ| 国产成人自拍网| 亚洲主播在线观看| 欧美成人乱码一区二区三区| 99久久99久久精品免费观看 | 欧美福利视频一区| 国产激情一区二区三区四区| 亚洲黄色免费网站| 精品国产乱子伦一区| 色综合久久66| 国内精品久久久久影院一蜜桃| 中文字幕在线一区二区三区| 欧美日本视频在线| jvid福利写真一区二区三区| 免费精品视频在线| 一区二区三区四区国产精品| 精品国产露脸精彩对白 | 国产精品成人网| 欧美人与性动xxxx| k8久久久一区二区三区| 国内精品视频一区二区三区八戒| 亚洲一区二区三区在线看| 国产日韩在线不卡| 日韩免费视频一区| 中文字幕欧美激情| 日韩一区二区三区免费观看| 色又黄又爽网站www久久| 国产乱淫av一区二区三区| 亚洲国产精品久久人人爱| 国产精品久久久久久妇女6080| 精品国产麻豆免费人成网站| 欧美日韩国产首页在线观看| 99久久婷婷国产精品综合| 国产主播一区二区| 麻豆成人久久精品二区三区红| 一区二区三区91| 国产欧美一区二区在线| 日韩精品中文字幕一区| 精品视频1区2区| 色婷婷激情久久| 波多野洁衣一区| 国产成人精品综合在线观看 | 蜜臀精品一区二区三区在线观看| 亚洲精品国久久99热| 国产精品拍天天在线| 久久久久久免费| 日韩精品在线一区二区| 日韩欧美精品在线| 日韩精品在线网站| 久久亚洲综合色一区二区三区| 7777精品久久久大香线蕉| 欧美日韩精品一区二区在线播放 | 久久国产精品免费| 免费av网站大全久久| 丝袜美腿亚洲一区| 午夜精品123| 丝瓜av网站精品一区二区| 午夜久久久久久久久| 日韩和欧美一区二区三区| 天堂资源在线中文精品| 肉色丝袜一区二区| 热久久久久久久| 麻豆精品一区二区av白丝在线| 极品少妇一区二区| 国产成人精品亚洲777人妖 | 久久久久久97三级| 中文一区二区在线观看| 亚洲人亚洲人成电影网站色| 亚洲精品你懂的| 午夜国产不卡在线观看视频| 日韩成人av影视| 韩国在线一区二区| 成人免费黄色在线| 色婷婷综合久久久中文字幕| 欧美日韩免费在线视频| 欧美一级黄色大片| 欧美精品一区二区三区在线播放 | 欧美性大战xxxxx久久久| 91精品国产手机| 精品日韩一区二区三区 | 粉嫩av一区二区三区| 91亚洲国产成人精品一区二区三| 色丁香久综合在线久综合在线观看| 欧美视频在线观看一区二区| 日韩视频不卡中文| 国产欧美日韩亚州综合| 一区二区三区产品免费精品久久75| 天天操天天色综合| 成人免费视频视频| 欧美精品成人一区二区三区四区| 精品久久国产字幕高潮| 中文字幕一区二区三区在线播放| 亚洲综合一区二区三区| 久久av资源网| 99久久免费精品高清特色大片| 欧美日韩一本到| 国产亚洲精品7777| 天天做天天摸天天爽国产一区| 国内外精品视频| 色哟哟日韩精品| 日韩欧美中文一区二区| 国产精品电影一区二区| 乱一区二区av| 色婷婷激情综合| 亚洲精品一区在线观看| 一区二区三区精品视频在线| 国产一区免费电影| 欧美日韩高清在线播放| 欧美激情在线观看视频免费| 亚洲成人久久影院| 成人av资源网站| 欧美成人a∨高清免费观看| 一区二区三区日韩欧美精品| 加勒比av一区二区| 欧美亚洲国产一区二区三区va| 久久天堂av综合合色蜜桃网| 亚洲.国产.中文慕字在线| 成人夜色视频网站在线观看| 在线综合亚洲欧美在线视频| 亚洲黄色在线视频| 成人免费看的视频| www激情久久| 青椒成人免费视频| 欧美日韩在线不卡| 中文字幕视频一区| 国产乱码精品一区二区三区忘忧草 | 99热99精品| 久久久精品欧美丰满| 久久精品久久精品| 欧美日韩亚洲综合在线| 亚洲精品久久久蜜桃| av中文字幕亚洲| 欧美国产精品一区| 国产美女一区二区三区| 精品欧美乱码久久久久久1区2区 | 欧美视频在线播放| 亚洲激情在线播放| 91浏览器打开| 国产精品久久久久桃色tv| 成人永久看片免费视频天堂| 2020国产成人综合网| 久久99久久99小草精品免视看| 在线成人高清不卡| 香蕉影视欧美成人| 欧美日韩午夜在线| 偷窥国产亚洲免费视频 | 欧美一区二区三区免费视频| 亚洲国产美女搞黄色| 在线观看av一区二区| 悠悠色在线精品| 欧美日韩中文国产| 日本视频中文字幕一区二区三区| 欧美色图第一页| 图片区小说区国产精品视频| 欧美日韩高清不卡| 石原莉奈一区二区三区在线观看| 在线不卡欧美精品一区二区三区| 午夜精品久久久| 精品日韩一区二区| 国产一区二区免费视频| 中文子幕无线码一区tr| hitomi一区二区三区精品| 亚洲精品免费看| 欧美日本国产一区| 国内精品久久久久影院色| 中文字幕精品综合| 色系网站成人免费| 琪琪久久久久日韩精品| 国产欧美日韩在线视频| 在线视频亚洲一区| 蜜臀av性久久久久蜜臀av麻豆|