예제 #1
0
	void	__assertex__(const char* file, uint line, const char* myFunction, const char* myException, const char* msg)
	{
		char strLog[MAX_SHOWMESSAGE_LENGTH] = {0};

#ifdef _WIN32
		tsnprintf( strLog, sizeof(strLog), "[%s][%d][%s][%s]\n[%s]", file, line, myFunction, myException ,msg ) ;
#endif

#ifdef _LINUX64
		tsnprintf( strLog, sizeof(strLog), "[%s][%d][%s][%s]\n[%s]\n", file, line, myFunction, myException ,msg ) ;
#endif
		__show__(strLog);
	}
예제 #2
0
VOID DBCFile::CreateIndex(INT nColum, const CHAR* szFileName)
{
	if(nColum <0 || nColum >= m_nFieldsNum || m_nIndexColum==nColum) return;

	m_hashIndex.clear();

	for(INT i=0; i<(INT)m_nRecordsNum; i++)
	{
		FIELD* p = &(m_vDataBuf[i*m_nFieldsNum]);

		FIELD_HASHMAP::iterator itFind = m_hashIndex.find(p->iValue);
		if(itFind != m_hashIndex.end())
		{
			CHAR szTemp[260];
			tsnprintf(szTemp, 260, "[%s]Multi index at line %d(SAME:value=%d)", szFileName, i+1, p->iValue);
#ifdef GAME_CLIENT
			throw std::string(szTemp);
#else
			//AssertEx(FALSE,szTemp);
#endif
			return;
		}
		m_hashIndex.insert(std::make_pair(p->iValue, p));
	}
}
예제 #3
0
	virtual ExecuteResultEnum Execute(int paramClass,Value* pParams,int num,Value* pRetValue)
	{
		if(pParams && pRetValue)
		{
			ReplaceVariableWithValue(pParams,num);
			pRetValue->SetInt(0);
			if(1==num && pParams[0].IsString())
			{
				const char* pScript=pParams[0].GetString();
				if(pScript)
				{
					tsnprintf(g_FileBuffer,g_c_MaxFileBuffer,"%s",pScript);
					if(m_pSource)
					{
						m_pSource->SetBuffer(g_FileBuffer);
						pRetValue->SetInt(1);
					}
				}
			}
			else if(2==num && pParams[0].IsInt() && pParams[1].IsString())
			{
				int ix=pParams[0].GetInt();
				const char* pScript=pParams[1].GetString();
				if(ix>=0 && ix<g_ScriptThreadNum && ix<g_c_MaxScriptThread && pScript)
				{
					if(g_pScriptThread[ix])
					{
						int r=g_pScriptThread[ix]->PushLine(pScript);
						pRetValue->SetInt(r);
					}
				}
			}
		}
		return EXECUTE_RESULT_NORMAL;
	}
예제 #4
0
VOID ParseTheResult()
{
	qsort(funcname,numFunc,NAMELEN,compare);
	qsort(regInfo,numReg,sizeof(_RegisterInfo),compareRegInfo);

	//解析
	//numReg注册函数数目
	//numFunc实际函数数目
	//只会出现一个函数以数个注册名注册`
	if(numReg != numFunc)
	{
		INT inuseDecl[FUNCNUM];
		memset(inuseDecl,0,sizeof(INT)*FUNCNUM);

		INT startindex = 0;
		INT ret = 0;
		for(INT i=0;i<FUNCNUM;i++)
		{
			for(INT j=startindex;j<FUNCNUM;j++)
			{
				ret = strcmp(regInfo[j].funcname,funcname[i]);
				if( ret > 0)
				{
					break;
				}
				else if (ret == 0)
				{
					startindex = j + 1;
					inuseDecl[i] = 1;
					break;
				}
			}
		}

		CHAR buf[_MAX_PATH];
		tsnprintf(buf,sizeof(buf)-1,"Attention : register & func num mismatch : numReg = %d : numFunc = %d\n",numReg,numFunc);

		g_pLog->FastSaveLog( LOG_FILE_3, buf) ;

		g_pLog->FastSaveLog( LOG_FILE_3, "\n") ;
		g_pLog->FastSaveLog( LOG_FILE_3, "No regisgter begin :\n") ;

		for(INT i=0;i<numFunc;i++)
		{
			if(!inuseDecl[i])
				g_pLog->FastSaveLog( LOG_FILE_3,"%s\n",funcname[i]) ;
		}

		g_pLog->FastSaveLog( LOG_FILE_3, "No register end\n") ;
		
	}
	else
	{
		FILE* fp = fopen(SERVER_FUNCTIONFILE,"w");
		if(fp)
		{
			fclose(fp);
		}
	}
}
예제 #5
0
//错误函数
void myflexer::LexerError(const char* msg)
{
	FKLOG("parse error : %s at line:%d near:%s\n", msg, lineno(), yytext);
	char buff[100];
	tsnprintf(buff, sizeof(buff)-1, "%s at line(%d) near(%s)", msg, lineno(), yytext);
	m_error = buff;
}
예제 #6
0
void PopMessageMT2M(char* pBuf,int space)
{
	if(g_pSharedMessageQueueT2M)
	{
		SharedMessageQueue::MessageType msg=g_pSharedMessageQueueT2M->Pop();
		tsnprintf(pBuf,space,"%s",msg.m_Content);
	}
}
예제 #7
0
char *get_default_prompt (void) {
  static char buf[1000];
  int l = 0;
  if (in_chat_mode) {
    peer_t *U = user_chat_get (chat_mode_id);
    assert (U && U->print_name);
    l += tsnprintf (buf + l, 999 - l, COLOR_RED "%.*s " COLOR_NORMAL, 100, U->print_name);
  }
  if (unread_messages || cur_uploading_bytes || cur_downloading_bytes) {
    l += tsnprintf (buf + l, 999 - l, COLOR_RED "[");
    int ok = 0;
    if (unread_messages) {
      l += tsnprintf (buf + l, 999 - l, "%d unread", unread_messages);
      ok = 1;
    }
    if (cur_uploading_bytes) {
      if (ok) { *(buf + l) = ' '; l ++; }
      ok = 1;
      l += tsnprintf (buf + l, 999 - l, "%lld%%Up", 100 * cur_uploaded_bytes / cur_uploading_bytes);
    }
    if (cur_downloading_bytes) {
      if (ok) { *(buf + l) = ' '; l ++; }
      ok = 1;
      l += tsnprintf (buf + l, 999 - l, "%lld%%Down", 100 * cur_downloaded_bytes / cur_downloading_bytes);
    }
    l += tsnprintf (buf + l, 999 - l, "]" COLOR_NORMAL);
    return buf;
  } 
  l += tsnprintf (buf + l, 999 - l, "%s", default_prompt);
  return buf;
}
예제 #8
0
void PushMessageMT2M(const char* pMsg)
{
	if(pMsg && g_pSharedMessageQueueT2M)
	{
		SharedMessageQueue::MessageType msg;
		tsnprintf(msg.m_Content,sizeof(msg.m_Content),"%s",pMsg);
		g_pSharedMessageQueueT2M->Push(msg);
	}
}
예제 #9
0
static void ResetSessionManagers(void)
{
  const char* pCenterNum = GetConfig("centernum");
  int centerNum = 0;
  if (NULL != pCenterNum) {
    centerNum = (int)atoi(pCenterNum);
    for (int ix = 0; ix < centerNum; ++ix) {
      char temp[256];
      tsnprintf(temp, 256, "ip%d", ix);
      const char* pIp = GetConfig(temp);
      if (NULL == pIp)
        pIp = "127.0.0.1";
      tsnprintf(temp, 256, "port%d", ix);
      const char* pPort = GetConfig(temp);
      int port = 20000;
      if (NULL != pPort)
        port = (int)atoi(pPort);
      tsnprintf(temp, 256, "worldid%d", ix);
      const char* pWorldId = GetConfig(temp);
      int worldId = 0;
      if (NULL != pWorldId)
        worldId = (int)atoi(pWorldId);
      tsnprintf(temp, 256, "name%d", ix);
      const char* pName = GetConfig(temp);

      if (NULL != pWorldId && NULL != pName) {
        SessionManager* pMgr = g_SessionManagers.Get(worldId);
        if (NULL == pMgr) {
          pMgr = new SessionManager();
          pMgr->Init(g_EventBase);
          pMgr->SetIpPort(worldId, pIp, port);
          pMgr->UpdateMyName(pName);
          g_SessionManagers.Add(worldId, pMgr);
        } else {
          pMgr->SetIpPort(worldId, pIp, port);
          pMgr->UpdateMyName(pName);
          pMgr->SetSession(NULL);
        }
      }
    }
  }
}
예제 #10
0
	void	__assertspecial__(const char* file, uint line, const char* myFunction, const char* myException, const char* msg, ...)
	{
		char strLog[MAX_SHOWMESSAGE_LENGTH] = {0};

		va_list argp;
		va_start(argp, msg);
		char buf[MAX_SHOWMESSAGE_LENGTH] = {0};

		int nCount = tvsnprintf(buf, MAX_SHOWMESSAGE_LENGTH, msg, argp);
		va_end(argp);

#ifdef _WIN32
		tsnprintf(strLog, sizeof(strLog), "[%s][%d][%s][%s]\n[%s]", file, line, myFunction, myException, buf);
#endif

#ifdef _LINUX64
		tsnprintf(strLog, sizeof(strLog), "[%s][%d][%s][%s]\n[%s]\n", file, line, myFunction, myException, buf);
#endif
		__show__(strLog);
	}
예제 #11
0
extern "C" int GetConfig(const char* key, char* buf, int len)
{
  int ret = 0;
  if (NULL != key && NULL != buf) {
    const char* val = GetConfig(key);
    if (NULL != val) {
      tsnprintf(buf, len, "%s", val);
      ret = 1;
    }
  }
  return ret;
}
예제 #12
0
extern "C" int TargetName(int handle, char* buf, int len)
{
  int ret = 0;
  if (NULL != g_pSessionManager && NULL != buf) {
    const char* name = g_pSessionManager->TargetName(handle);
    if (NULL != name) {
      tsnprintf(buf, len, "%s", name);
      ret = 1;
    }
  }
  return ret;
}
예제 #13
0
void SendMessageMT2T(int index, const char* pMsg)
{
  if (pMsg){
    if (index >= 0 && index < g_ScriptThreadNum && index < g_c_MaxScriptThread){
      if (g_pScriptThread[index]){
        SharedMessageQueue::MessageType msg;
        tsnprintf(msg.m_Content, sizeof(msg.m_Content), "%s", pMsg);
        g_pScriptThread[index]->GetSharedMessageQueue().Push(msg);
      }
    } else {
      PushMessageMT2M(pMsg);
    }
  }
}
예제 #14
0
extern "C" int TargetName(int worldId, int handle, char* buf, int len)
{
  int ret = 0;
  if (NULL != buf) {
    SessionManager* pMgr = g_SessionManagers.Get(worldId);
    if (NULL != pMgr) {
      const char* name = pMgr->TargetName(handle);
      if (NULL != name) {
        tsnprintf(buf, len, "%s", name);
        ret = 1;
      }
    }
  }
  return ret;
}
예제 #15
0
const DBCFile::FIELD* DBCFile::Search_Posistion(INT nRecordLine, INT nColumNum) const
{
	INT nPosition = nRecordLine*GetFieldsNum() + nColumNum;

	if(nPosition <0 || nColumNum >= (INT)m_vDataBuf.size()) 
	{
		char szTemp[260];
		tsnprintf(szTemp, MAX_FILE_PATH, "DBC:Invalid search request[rec=%d, col=%d]", nRecordLine, nColumNum);
#ifdef GAME_CLIENT
		throw std::string(szTemp);
#else
		//AssertEx(FALSE, szTemp);
#endif
		return NULL;
	}

	return &(m_vDataBuf[nPosition]);
}
예제 #16
0
extern "C" void ReloadConfigScript(void)
{
  ReloadConfigState();

  const char* pIp = GetConfig("ip");
  if (NULL == pIp)
    pIp = "127.0.0.1";
  const char* pPort = GetConfig("port");
  int port = 20000;
  if (NULL != pPort)
    port = (int)atoi(pPort);

  tsnprintf(g_Ip, sizeof(g_Ip), "%s", pIp);
  g_Port = port;

  if (NULL != g_pSessionManager) {
    g_pSessionManager->UpdateMyName();
  }
}
예제 #17
0
const char * profile::dump()
{
	std::vector<sortele> sortelevec;
	for (const stringhashmap::ele * p = m_shh.first(); p != 0; p = m_shh.next())
	{
		const profilefuncele & ele = *p->t;
		sortelevec.push_back(std::make_pair(p->k, ele));
	}

	std::sort(sortelevec.begin(), sortelevec.end(), profilefuncelesort());

	m_dumpstr.clear();
	
	m_dumpstr += "Call Func:\n";
	for (int i = 0; i < (int)sortelevec.size(); i++)
	{
		const sortele & se = sortelevec[i];
		const profilefuncele & ele = se.second;
		char buff[1024];
		tsnprintf(buff, sizeof(buff)-1, "\tFunc[%s]\tCalls[%d]\tTotalTime(ms)[%u]\tPerCallTime(ms)[%u]\n",
			se.first.c_str(), ele.callnum, ele.calltime, ele.callnum ? ele.calltime / ele.callnum : 0);
		m_dumpstr += buff;
	}

	m_dumpstr += "Code Num:\n";
	for (int i = 0; i < OPCODE_MAX; i++)
	{
		m_dumpstr += "\t";
		m_dumpstr += OpCodeStr(i);
		for (int j = 0; j < (int)(20 - strlen(OpCodeStr(i))); j++)
		{
			m_dumpstr += " ";
		}
		m_dumpstr += fkitoa(m_codetype[i]);
		m_dumpstr += "\n";
	}
	
	return m_dumpstr.c_str();
}
예제 #18
0
void SessionManager::HandleMyName(TcpSession* session, const char* data, int len)
{
  if (NULL == session || NULL == data)
    return;
  int src = session->GetFD();
  SessionInfo& sessionInfo = m_Sessions.Get(src);
  const MessageMyName* msg = reinterpret_cast<const MessageMyName*>(data);
  if (sessionInfo.IsValid()){
    MessageMyHandle handleMsg;
    handleMsg.m_Handle = src;
    session->Send(reinterpret_cast<const char*>(&handleMsg), sizeof(MessageMyHandle));

    SendNameHandleList(src);

    tsnprintf(sessionInfo.m_Name, sizeof(sessionInfo.m_Name), "%s", msg->m_Name);
    BroadcastAddNameHandle(msg->m_Name, src);

    __Internal_Log("session %d receive (MessageMyName:%s)", src, msg->m_Name);
  } else {
    __Internal_Log("session %d can't find session info (MessageMyName:%s)", src, msg->m_Name);
  }
}
예제 #19
0
//导出Lua脚本中待替换注册函数
//ExportLuaFn.h文件由LuaTool读取
VOID ExportRegName()
{
	//文件路径名
	CHAR buf[256];
	tsnprintf(buf,256,__FILE__);
	CHAR* pStr = strrchr(buf,'\\');
	strcpy(pStr+1,"ExportLuaFn.h");
	FILE* fpScriptFile = NULL;

	for(INT i=0;i<numReg;i++)
	{
		BOOL toggle = FALSE;
		for(INT j=0;j<regInfo[i].regCount;j++)
		{
			if(strcmp(regInfo[i].funcname,regInfo[i].regname[j]))
			{
				if(!fpScriptFile)
					fpScriptFile = fopen(buf,"w");
				if(toggle == FALSE)
				{
					toggle = TRUE;
					fprintf(fpScriptFile,"\n");					
				}

				//格式
				//{"AddEventList",},
				fprintf(fpScriptFile,"\"%s\"",regInfo[i].regname[j]);
				
			}
		}
		if(toggle == TRUE)
			fprintf(fpScriptFile,",%s",regInfo[i].funcname);
	}

	if(fpScriptFile)
		fclose(fpScriptFile);
}
예제 #20
0
FAKE_API const char * fkgetfilecode(fake * fk, const char * filename, int line)
{
	if (!filename || line <= 0)
	{
		return 0;
	}
	
	char buff[512];
	
	FILE * file = fopen(filename, "rb");
	if (!file)
	{
		tsnprintf(buff, sizeof(buff), "open file(%s:%d) fail", filename, line);
		fk->rn.curcode = buff;
		return fk->rn.curcode.c_str();
	}

	int i = 0;
	while (!feof(file))
	{
		if (!fgets(buff, sizeof(buff), file))
		{
			return 0;
		}
		i++;
		if (i >= line)
		{
			fclose(file);
			fk->rn.curcode = buff;
			return fk->rn.curcode.c_str();
		}
	}
	
	fclose(file);
	
	return 0;
}
예제 #21
0
extern "C" void Init(const char* serverType, int argc, char* argv[], HandleNameHandleChangedPtr nameHandleCallback, HandleMessagePtr msgCallback, HandleMessageResultPtr msgResultCallback, HandleCommandPtr cmdCallback)
{
#if defined(__LINUX__)
  signal(SIGPIPE, SIG_IGN);
#endif

  InitConfigState(serverType, argc, argv);

  const char* pIp = GetConfig("ip");
  if (NULL == pIp)
    pIp = "127.0.0.1";
  const char* pPort = GetConfig("port");
  int port = 20000;
  if (NULL != pPort)
    port = (int)atoi(pPort);

  tsnprintf(g_Ip, sizeof(g_Ip), "%s", pIp);
  g_Port = port;

  g_HandleNameHandleChangedPtr = nameHandleCallback;
  g_HandleMessagePtr = msgCallback;
  g_HandleMessageResultPtr = msgResultCallback;
  g_HandleCommandPtr = cmdCallback;

  g_pSessionManager = new SessionManager();
  if (NULL != g_pSessionManager) {
    g_pSessionManager->Init();
    g_pSessionManager->UpdateMyName();
  }

  g_pNetIoService = new NetIoService();
  g_pNetIoService->Init();
  g_EventBase = g_pNetIoService->EventBase();
  if (NULL != g_EventBase) {
    g_Connector = new Connector(g_EventBase);
  }
}
예제 #22
0
파일: SlkToken.cpp 프로젝트: dreamanlan/DSL
void SlkToken::getBlockString(const char* delimiter)
{
  newToken();
  const char* pLeft = mIterator.GetLeft();
  const char* pFind = strstr(pLeft, delimiter);
  if (!pFind) {
    char* pInfo = mErrorAndStringBuffer->NewErrorInfo();
    if (pInfo)
      tsnprintf(pInfo, MAX_ERROR_INFO_CAPACITY, "[line %d ]:Block can't finish, delimiter: %s!", mLineNumber, delimiter);
    endToken();
    return;
  }
  int len = (int)strlen(delimiter);
  const char* p = pLeft;
  while (p != pFind){
    if (*p == '\n')
      ++mLineNumber;
    pushTokenChar(*p++);
    ++mIterator;
  }
  endToken();
  mIterator = mIterator + len;
  return removeFirstAndLastEmptyLine();
}
예제 #23
0
//需要添加LuaFn注册头的函数
VOID NeedAddLuaFn()
{
	//文件路径名
	CHAR buf[256];
	tsnprintf(buf,256,__FILE__);
	CHAR* pStr = strrchr(buf,'\\');
	strcpy(pStr+1,"NeedAddLuaFn.h");
	FILE* fpScriptFile = NULL;

	for(INT i=0;i<numReg;i++)
	{
		BOOL toggle = FALSE;
		for(INT j=0;j<regInfo[i].regCount;j++)
		{
			if(!strcmp(regInfo[i].funcname,regInfo[i].regname[j]))
			{
				toggle = TRUE;
				break;
			}
			
		}

		if(!toggle)
		{
			if(!fpScriptFile)
				fpScriptFile = fopen(buf,"w");
			
			//格式
			//{"AddEventList",FuncProto(LuaFnAddNumText)},
			fprintf(fpScriptFile,"{\"%s\",FuncProto(%s)},\n",regInfo[i].funcname,regInfo[i].funcname);
		}
	}

	if(fpScriptFile)
		fclose(fpScriptFile);
}
예제 #24
0
파일: SlkToken.cpp 프로젝트: dreamanlan/DSL
void SlkToken::setScriptDelimiter(const char* begin, const char* end)
{
    tsnprintf(mScriptBeginDelimiter, c_MaxDelimiterSize, "%s", begin);
    tsnprintf(mScriptEndDelimiter, c_MaxDelimiterSize, "%s", end);
}
예제 #25
0
파일: SlkToken.cpp 프로젝트: dreamanlan/DSL
short SlkToken::get(void)
{
  if (NULL == mSource || NULL == mErrorAndStringBuffer) {
    return END_OF_SLK_INPUT_;
  }

  for (;;) {
    if (*mIterator == '\0') {
      if (isCanFinish()) {
        newToken();
        endTokenWithEof();
        return END_OF_SLK_INPUT_;
      } else {
        if (!mIterator.Load()) {
          newToken();
          endTokenWithEof();
          return END_OF_SLK_INPUT_;
        }
      }
    }

    int isSkip = TRUE;
    //跳过注释与白空格
    for (; isSkip && *mIterator != '\0';) {
      isSkip = FALSE;
      for (; isWhiteSpace(*mIterator); ++mIterator) {
        if (*mIterator == '\n') {
          ++mLineNumber;
          if (mCommentNum <= 0) {
            mCommentOnNewLine = TRUE;
          }
        }
        isSkip = TRUE;
      }
      //#引导的单行注释
      if (*mIterator == '#') {
        newComment();
        for (; *mIterator != '\0' && *mIterator != '\n'; ++mIterator) {
          if (*mIterator != '\r')
            pushCommentChar(*mIterator);
        }
        endComment();
        isSkip = TRUE;
      }
      //C++风格的单行注释与多行注释
      if (*mIterator == '/' && (*(mIterator + 1) == '/' || *(mIterator + 1) == '*')) {
        newComment();
        pushCommentChar(*mIterator);
        ++mIterator;
        if (*mIterator == '/') {
          pushCommentChar(*mIterator);
          ++mIterator;
          for (; *mIterator != '\0' && *mIterator != '\n'; ++mIterator) {
            if (*mIterator != '\r')
              pushCommentChar(*mIterator);
          }
          isSkip = TRUE;
        } else if (*mIterator == '*') {
          pushCommentChar(*mIterator);
          ++mIterator;
          for (;;) {
            if (*mIterator != '\0') {
              if (*mIterator == '\n') {
                pushCommentChar(*mIterator);
                ++mLineNumber;
              } else if (*mIterator == '*' && *(mIterator + 1) == '/') {
                pushCommentChar(*mIterator);
                ++mIterator;
                pushCommentChar(*mIterator);
                ++mIterator;
                break;
              } else if (*mIterator != '\r') {
                pushCommentChar(*mIterator);
              }
            } else {
              if (mIterator.Load()) {
                continue;
              } else {
                endComment();
                newToken();
                endTokenWithEof();
                return END_OF_SLK_INPUT_;
              }
            }
            ++mIterator;
          }
          isSkip = TRUE;
        }
        endComment();
      }
    }
    if (*mIterator != '\0')
      break;
  }

  newToken();
  if (isCanFinish())
    setCanFinish(FALSE);

  if (*mIterator == '{' && *(mIterator + 1) == ':') {
    ++mIterator;
    ++mIterator;
    int line = mLineNumber;
    //搜索脚本结束 :}
    for (; *mIterator != '\0';) {
      while (*mIterator != '\0' && *mIterator != ':') {
        if (*mIterator == '\n')++mLineNumber;

        pushTokenChar(*mIterator);

        ++mIterator;
      }
      if (*mIterator == '\0')
        break;
      IScriptSource::Iterator next = mIterator + 1;
      if (*next == '}') {
        ++mIterator;
        ++mIterator;
        break;
      } else {
        pushTokenChar(*mIterator);

        ++mIterator;
      }
    }
    if (*mIterator == '\0') {
      char* pInfo = mErrorAndStringBuffer->NewErrorInfo();
      if (pInfo)
        tsnprintf(pInfo, MAX_ERROR_INFO_CAPACITY, "[line %d ]:ExternScript can't finish!", line);
    }
    endToken();
    if (myhavelinefeed(mCurToken)){
      removeFirstAndLastEmptyLine();
    }
    return SCRIPT_CONTENT_;
  } else if (isOperator(*mIterator)) {//操作符
    getOperatorToken();
    return getOperatorTokenValue();
  } else if (*mIterator == '.' && 0 == myisdigit(*(mIterator + 1), FALSE)) {
    char c = *mIterator;
    ++mIterator;

    pushTokenChar(c);
    endToken();
    return DOT_;
  } else if (*mIterator == '(') {
    ++mIterator;
    pushTokenChar('(');
    endToken();
    return LPAREN_;
  } else if (*mIterator == ')') {
    ++mIterator;
    pushTokenChar(')');
    endToken();
    return RPAREN_;
  } else if (*mIterator == '[') {
    ++mIterator;
    pushTokenChar('[');
    endToken();
    return LBRACK_;
  } else if (*mIterator == ']') {
    ++mIterator;
    pushTokenChar(']');
    endToken();
    return RBRACK_;
  } else if (*mIterator == '{') {
    ++mIterator;
    pushTokenChar('{');
    endToken();
    return LBRACE_;
  } else if (*mIterator == '}') {
    ++mIterator;
    pushTokenChar('}');
    endToken();
    return RBRACE_;
  } else if (*mIterator == ',') {
    ++mIterator;
    pushTokenChar(',');
    endToken();
    return COMMA_;
  } else if (*mIterator == ';') {
    ++mIterator;
    pushTokenChar(';');
    endToken();
    return SEMI_;
  } else {//关键字、标识符或常数
    if (*mIterator == '"' || *mIterator == '\'') {//引号括起来的名称或关键字
      int line = mLineNumber;
      char c = *mIterator;
      for (++mIterator; *mIterator != '\0' && *mIterator != c;) {
        if (*mIterator == '\n')++mLineNumber;
        if (*mIterator == '\\') {
          //pushTokenChar(*mIterator);
          ++mIterator;
        }

        pushTokenChar(*mIterator);
        ++mIterator;

        if (*mIterator == '\0') {
          if (mIterator.Load()) {
            continue;
          } else {
            char* pInfo = mErrorAndStringBuffer->NewErrorInfo();
            if (pInfo)
              tsnprintf(pInfo, MAX_ERROR_INFO_CAPACITY, "[line %d ]:String can't finish!", line);
            endTokenWithEof();
            return END_OF_SLK_INPUT_;
          }
        }
      }
      if (*mIterator != '\0') {
        ++mIterator;
      } else {
        char* pInfo = mErrorAndStringBuffer->NewErrorInfo();
        if (pInfo)
          tsnprintf(pInfo, MAX_ERROR_INFO_CAPACITY, "[line %d ]:String can't finish!", line);
      }
      endToken();
      if (myhavelinefeed(mCurToken)){
        removeFirstAndLastEmptyLine();
      }
      return STRING_;
    } else {
      int isNum = TRUE;
      int isHex = FALSE;
      if (*mIterator == '0' && *(mIterator + 1) == 'x') {
        isHex = TRUE;
        pushTokenChar(*mIterator);
        ++mIterator;
        pushTokenChar(*mIterator);
        ++mIterator;
      }
      for (; !isSpecialChar(*mIterator); ++mIterator) {
        if (*mIterator == '#')
          break;
        else if (*mIterator == '/') {
          IScriptSource::Iterator next = mIterator + 1;
          if (*next != '\0' && (*next == '/' || *next == '*')) {
            break;
          }
        } else if (*mIterator == '.') {
          if (!isNum) {
            break;
          } else {
            IScriptSource::Iterator next = mIterator + 1;
            if (0 == myisdigit(*next, isHex)) {
              break;
            }
          }
        } else if (0 == myisdigit(*mIterator, isHex)) {
          isNum = FALSE;
        }

        pushTokenChar(*mIterator);
      }
      endToken();
      if (isNum) {
        return NUMBER_;
      } else {
        int token = handleStringOrScriptDelimiter();
        if (token)
          return token;
        return IDENTIFIER_;
      }
    }
  }
}
예제 #26
0
VOID Config::LoadConfigInfo_ReLoad( )
{//可以重复读取的数据
__ENTER_FUNCTION

	Ini ini( FILE_CONFIG_INFO ) ;
	CHAR	szText[32];

	ini.ReadText( "Global", "DropParam", szText, sizeof( szText ) -1 ) ;
	m_ConfigInfo.m_DropParam = (FLOAT)(atof( szText ));

	ini.ReadText( "Global", "ExpParam", szText, sizeof( szText ) -1 ) ;
	m_ConfigInfo.m_ExpParam = (FLOAT)(atof( szText ));
	m_ConfigInfo.m_EquipmentDamagePoint = ini.ReadInt( "Global", "EquipmentDamagePoint" ) ;

	m_ConfigInfo.m_RecoverTime = ini.ReadInt( "TimeSetting", "RecoverTime" ) ;
	m_ConfigInfo.m_MaxMonster = ini.ReadInt( "Monster", "MaxCount" ) ;
	m_ConfigInfo.m_MaxPet = ini.ReadInt( "Pet", "MaxCount" ) ;
	m_ConfigInfo.m_PetBodyTime = ini.ReadInt( "Pet", "PetBodyTime" ) ;
	m_ConfigInfo.m_PetHappinessInterval = ini.ReadInt( "Pet", "PetHappinessInterval" );
	m_ConfigInfo.m_PetLifeInterval = ini.ReadInt( "Pet", "PetLifeInterval" );
	m_ConfigInfo.m_PetCallUpHappiness = ini.ReadInt( "Pet", "PetCallUpHappiness" );
	m_ConfigInfo.m_PetPlacardTime = (UINT)(ini.ReadInt( "Pet", "PetPlacardTime" ));
	m_ConfigInfo.m_PetPlacardNeedLevel = ini.ReadInt( "Pet", "PetPlacardNeedLevel" );
	m_ConfigInfo.m_PetPlacardNeedHappiness = ini.ReadInt( "Pet", "PetPlacardNeedHappiness" );
	m_ConfigInfo.m_PetPlacardNeedLife = ini.ReadInt( "Pet", "PetPlacardNeedLife" );
	m_ConfigInfo.m_DefaultRespawnTime = ini.ReadInt( "Monster", "DefaultRespawnTime" ) ;
	m_ConfigInfo.m_DropBoxRecycleTime = ini.ReadInt("TimeSetting","DropBoxRecycle");
	m_ConfigInfo.m_TimeChangeInterval	= ini.ReadInt("TimeSetting","TimeChangeInterval");
	m_ConfigInfo.m_PositionRange = ini.ReadInt( "Monster", "DefaultPositionRange" ) ;
	m_ConfigInfo.m_AIType = ini.ReadInt( "Monster", "DefaultAIType" ) ;
	m_ConfigInfo.m_DisconnectTime = ini.ReadInt( "TimeSetting", "DisconnectTime" ) ;
	ini.ReadText( "Temp", "UserPath", m_ConfigInfo.m_UserPath, _MAX_PATH ) ;
	m_ConfigInfo.m_DefaultBodyTime = ini.ReadInt( "Monster", "DefaultBodyTime" ) ;
	m_ConfigInfo.m_DefaultRefuseScanTime = ini.ReadInt( "Monster", "DefaultRefuseScanTime");
	m_ConfigInfo.m_OutGhostTime = ini.ReadInt( "Human", "OutGhostTime" ) ;
	m_ConfigInfo.m_CanGetExpRange = (FLOAT)(ini.ReadInt( "Human", "CanGetExpRange" ));
	m_ConfigInfo.m_DefaultMoveSpeed = ini.ReadInt( "Human", "DefaultMoveSpeed" ) ;
	m_ConfigInfo.m_DefaultAttackSpeed = ini.ReadInt( "Human", "DefaultAttackSpeed" ) ;
	m_ConfigInfo.m_HumanVERecoverInterval = ini.ReadInt( "Human", "HumanVERecoverInterval" ) ;
	m_ConfigInfo.m_WallowAge = ini.ReadInt( "Human", "WallowAge" ) ;
	m_ConfigInfo.m_WallowStartTime = ini.ReadInt( "Human", "WallowStartTime" ) ;
	m_ConfigInfo.m_WallowStartTime2 = ini.ReadInt( "Human", "WallowStartTime2" ) ;
	m_ConfigInfo.m_WallowAwokeTime = ini.ReadInt( "Human", "WallowAwokeTime" ) ;
	m_ConfigInfo.m_nAvailableFollowDist = ini.ReadInt( "Team", "AvailableFollowDist" );
	m_ConfigInfo.m_nTimeForLoseFollow = ini.ReadInt( "Team", "TimeForLoseFollow" );
	m_ConfigInfo.m_nFoundDurationHour = ini.ReadInt( "Guild", "FoundDuration" );
	m_ConfigInfo.m_nDefaultMaxMemberCount = ini.ReadInt( "Guild", "DefaultMaxMemberCount" );
	m_ConfigInfo.m_nResponseUserCount = ini.ReadInt( "Guild", "ResponseUserCount" );
	m_ConfigInfo.m_nPasswdPoint = ini.ReadInt( "Relation", "PasswdPoint" );
	m_ConfigInfo.m_nPromptPoint = ini.ReadInt( "Relation", "PromptPoint" );
	m_ConfigInfo.m_nDeleteDelayTime = ini.ReadInt( "MinorPassword", "DeleteDelayTime" );
	m_ConfigInfo.m_nDeleteDelayTime *= 3600;
	m_ConfigInfo.m_nExpPoint = ini.ReadInt( "Relation", "ExpPoint" );
	//m_ConfigInfo.m_DefaultRefreshRate	=	ini.ReadInt("Obj_Human","DefaultRefreshRate")	;
	m_ConfigInfo.m_nHashOnlineUserCount = ini.ReadInt( "World", "HashOnlineUserCount" );
	m_ConfigInfo.m_nHashMailUserCount = ini.ReadInt( "World", "HashMailUserCount" );
	m_ConfigInfo.m_nMaxOfflineUserCount = ini.ReadInt( "World", "MaxOfflineUserCount" );
	ini.ReadText( "Global", "RespawnParam", szText, sizeof(szText)-1 ) ;
	m_ConfigInfo.m_fRespawnParam = (FLOAT)(atof(szText)) ;
	m_ConfigInfo.m_KickUserTime = ini.ReadInt( "TimeSetting", "KickUserTime" );
	m_ConfigInfo.m_nDefaultDamageFluctuation = ini.ReadInt("Combat","DefaultDamageFluctuation");

	m_ConfigInfo.m_nMinGoodBadValue = ini.ReadInt( "GoodBad", "MinGoodBadValue" );
	m_ConfigInfo.m_nMaxGoodBadValue = ini.ReadInt( "GoodBad", "MaxGoodBadValue" );
	m_ConfigInfo.m_nLevelNeeded = ini.ReadInt( "GoodBad", "LevelNeeded" );
	m_ConfigInfo.m_nMemberLevel = ini.ReadInt( "GoodBad", "MemberLevel" );
	m_ConfigInfo.m_fGoodBadRadius = (FLOAT)ini.ReadInt( "GoodBad", "GoodBadRadius" );
	m_ConfigInfo.m_nBonusPerMember = ini.ReadInt( "GoodBad", "BonusPerMember" );
	m_ConfigInfo.m_nMaxBonus = ini.ReadInt( "GoodBad", "MaxBonus" );
	m_ConfigInfo.m_nPenaltyWhenMemberDie = ini.ReadInt( "GoodBad", "PenaltyWhenMemberDie" );
	m_ConfigInfo.m_nWorldChatItemIndex = ini.ReadInt("WorldChat","ItemIndex");

	m_ConfigInfo.m_ThisRegion.m_nRegionIndex = ini.ReadInt("ThisRegion","RegionIndex");
	ini.ReadText( "ThisRegion", "RegionName", m_ConfigInfo.m_ThisRegion.m_RegionName, _MAX_PATH ) ;

	m_ConfigInfo.m_nOldRegionCount = ini.ReadInt("OldRegion","RegionCount");
	if( m_ConfigInfo.m_nOldRegionCount > 0 )
	{
		m_ConfigInfo.m_OldRegion = new _REGION_INFO[m_ConfigInfo.m_nOldRegionCount];
		for( INT i = 0; i < m_ConfigInfo.m_nOldRegionCount; i ++ )
		{
			CHAR szRegionIndex[100];
			CHAR szRegionName[100];
			tsnprintf( szRegionIndex, 99, "RegionIndex%03d", i+1 );
			tsnprintf( szRegionName, 99, "RegionName%03d", i+1 );
			m_ConfigInfo.m_OldRegion[i].m_nRegionIndex = ini.ReadInt( "OldRegion", szRegionIndex ) ;
			ini.ReadText( "OldRegion", szRegionName, m_ConfigInfo.m_OldRegion[i].m_RegionName, _MAX_PATH ) ;
		}
	}

	Log::SaveLog( CONFIG_LOGFILE, "Load ConfigInfo.ini ...ReLoad OK! " ) ;

__LEAVE_FUNCTION
}
예제 #27
0
//读Lua函数表文件
VOID ReadLuaFnTblFiles()
{
	CHAR** pScanFile = pLuaFnTblFile;

	//扫描文件
	while(*pScanFile)
	{
		CHAR buf[256];
		tsnprintf(buf,256,__FILE__);
		CHAR* pStr = strrchr(buf,'\\');
		strcpy(pStr+1,*pScanFile);
		FILE* fp = fopen(buf,"r");

		if( fp != NULL) 
		{
			CHAR line[_MAX_PATH * 4];
			
	
			CHAR *pStr1,*pStr2,*pStr3,*pStr4;
			INT linenum = 0;
			BOOL commentBegin = FALSE;
			BOOL beginNamaSpace = FALSE;
			while( fgets( line, sizeof( line), fp)) 
			{	
				if(strstr(line,"namespace"))
					beginNamaSpace = TRUE;
				if(!beginNamaSpace)
					continue;
		
				if(strstr(line,"endnamespace"))
					break;

				//找到函数声明
				if( (pStr1 = strstr(line,"INT")) && (pStr2 = strstr(line,"Lua_State")) && (pStr2 > pStr1))//简化 
				{
					Assert((pStr2 - pStr1) <= NAMELEN);
					if((pStr2 - pStr1) <= NAMELEN)
					{
						const CHAR* temp = GetFuncName(pStr1,pStr2);
						Q_strncpyz(funcname[numFunc++],temp,NAMELEN);
					}
				}

				//找到已注册函数,没有考虑空格
				if((pStr1 = strstr(line,"FuncProto")))
				{
					pStr2 = strstr(line,")");
					pStr1 = pStr1 + strlen("FuncProto") + 1;

					pStr3 = strchr(line,'"');
					pStr4 = strchr(pStr3+1,'"');

					char szFuncName[NAMELEN];
					char szRegName[NAMELEN];

					Q_strncpyz(szFuncName,pStr1,pStr2 - pStr1 + 1);//加一
					Q_strncpyz(szRegName,pStr3 + 1,pStr4 - pStr3);

					BOOL toggle = FALSE; 
					INT i;
					for(i =0;i<numReg;i++)
					{
						if(!strcmp(regInfo[i].funcname,szFuncName))
						{
							toggle = TRUE;
							break;
						}
					}
				
					if(!toggle)
					{//第一次注册该函数
						Q_strncpyz(regInfo[numReg++].funcname,szFuncName,NAMELEN);
						Q_strncpyz(regInfo[numReg - 1].regname[regInfo[numReg -1].regCount++],szRegName,NAMELEN);						
					}
					else
					{
						Q_strncpyz(regInfo[i].regname[regInfo[i].regCount++],szRegName,NAMELEN);						
					}
				}
			}
			fclose(fp);

			
		}

		pScanFile++;//扫描下一个文件
	}
}
예제 #28
0
파일: Dsl.cpp 프로젝트: CQiao/DSL
 void ErrorAndStringBuffer::AddError(const char* error)
 {
   char* p = NewErrorInfo();
   if (p)
     tsnprintf(p, MAX_ERROR_INFO_CAPACITY, "%s", error);
 }
예제 #29
0
파일: SlkToken.cpp 프로젝트: CQiao/DSL
short SlkToken::get(void)
{
  if (NULL == mSource || NULL == mErrorAndStringBuffer) {
    return END_OF_SLK_INPUT_;
  }
  newToken();

  for (;;) {
    if (*mIterator == '\0') {
      if (isCanFinish()) {
        endTokenWithEof();
        return END_OF_SLK_INPUT_;
      } else {
        if (!mIterator.Load()) {
          endTokenWithEof();
          return END_OF_SLK_INPUT_;
        }
      }
    }

    int isSkip = TRUE;
    //跳过注释与白空格
    for (; isSkip && *mIterator != '\0';) {
      isSkip = FALSE;
      for (; isWhiteSpace(*mIterator); ++mIterator) {
        if (*mIterator == '\n')++mLineNumber;
        isSkip = TRUE;
      }
      //#引导的单行注释
      if (*mIterator == '#') {
        for (; *mIterator != '\0' && *mIterator != '\n'; ++mIterator);
        isSkip = TRUE;
      }
      //C++风格的单行注释与多行注释
      if (*mIterator == '/' && (*(mIterator + 1) == '/' || *(mIterator + 1) == '*')) {
        ++mIterator;
        if (*mIterator == '/') {
          ++mIterator;
          for (; *mIterator != '\0' && *mIterator != '\n'; ++mIterator);
          isSkip = TRUE;
        } else if (*mIterator == '*') {
          ++mIterator;
          for (;;) {
            if (*mIterator != '\0') {
              if (*mIterator == '\n')++mLineNumber;
              if (*mIterator == '*' && *(mIterator + 1) == '/') {
                ++mIterator;
                ++mIterator;
                break;
              }
            } else {
              if (mIterator.Load()) {
                continue;
              } else {
                endTokenWithEof();
                return END_OF_SLK_INPUT_;
              }
            }
            ++mIterator;
          }
          isSkip = TRUE;
        }
      }
    }
    if (*mIterator != '\0')
      break;
  }

  if (isCanFinish())
    setCanFinish(FALSE);

  if (*mIterator == '{' && *(mIterator + 1) == ':') {
    ++mIterator;
    ++mIterator;
    int line = mLineNumber;
    //搜索脚本结束 :}
    for (; *mIterator != '\0';) {
      while (*mIterator != '\0' && *mIterator != ':') {
        if (*mIterator == '\n')++mLineNumber;

        pushTokenChar(*mIterator);

        ++mIterator;
      }
      if (*mIterator == '\0')
        break;
      IScriptSource::Iterator next = mIterator + 1;
      if (*next == '}') {
        ++mIterator;
        ++mIterator;
        break;
      } else {
        pushTokenChar(*mIterator);

        ++mIterator;
      }
    }
    if (*mIterator == '\0') {
      char* pInfo = mErrorAndStringBuffer->NewErrorInfo();
      if (pInfo)
        tsnprintf(pInfo, MAX_ERROR_INFO_CAPACITY, "[line %d ]:ExternScript can't finish!", line);
    }
    endToken();
    return SCRIPT_CONTENT_;
  } else if (isOperator(*mIterator))//操作符
  {
    getOperatorToken();
    return getOperatorTokenValue();
  } else if (*mIterator == '.' && 0 == myisdigit(*(mIterator + 1), FALSE)) {
    char c = *mIterator;
    ++mIterator;

    pushTokenChar(c);
    endToken();
    return DOT_;
  } else if (isDelimiter(*mIterator))//分隔符
  {
    char c = *mIterator;
    ++mIterator;

    pushTokenChar(c);
    endToken();

    switch (c) {
    case '(':
      return LPAREN_;
    case ')':
      return RPAREN_;
    case '[':
      return LBRACK_;
    case ']':
      return RBRACK_;
    case '{':
      return LBRACE_;
    case '}':
      return RBRACE_;
    case ',':
      return COMMA_;
    case ';':
      return SEMI_;
    default:
      return END_OF_SLK_INPUT_;
    }
  } else//关键字、标识符或常数
  {
    if (*mIterator == '"' || *mIterator == '\'')//引号括起来的名称或关键字
    {
      int line = mLineNumber;
      char c = *mIterator;
      for (++mIterator; *mIterator != '\0' && *mIterator != c;) {
        if (*mIterator == '\n')++mLineNumber;
        if (*mIterator == '\\') {
          //pushTokenChar(*mIterator);
          ++mIterator;
        }

        pushTokenChar(*mIterator);
        ++mIterator;

        if (*mIterator == '\0') {
          if (mIterator.Load()) {
            continue;
          } else {
            char* pInfo = mErrorAndStringBuffer->NewErrorInfo();
            if (pInfo)
              tsnprintf(pInfo, MAX_ERROR_INFO_CAPACITY, "[line %d ]:String can't finish!", line);
            endTokenWithEof();
            return END_OF_SLK_INPUT_;
          }
        }
      }
      if (*mIterator != '\0') {
        ++mIterator;
      } else {
        char* pInfo = mErrorAndStringBuffer->NewErrorInfo();
        if (pInfo)
          tsnprintf(pInfo, MAX_ERROR_INFO_CAPACITY, "[line %d ]:String can't finish!", line);
      }
      endToken();
      return STRING_;
    } else {
      int isNum = TRUE;
      int isHex = FALSE;
      if (*mIterator == '0' && *(mIterator + 1) == 'x') {
        isHex = TRUE;
        pushTokenChar(*mIterator);
        ++mIterator;
        pushTokenChar(*mIterator);
        ++mIterator;
      }
      for (; *mIterator != '\0' && !isDelimiter(*mIterator) && !isWhiteSpace(*mIterator) && !isOperator(*mIterator); ++mIterator) {
        if (*mIterator == '#')
          break;
        else if (*mIterator == '/') {
          IScriptSource::Iterator next = mIterator + 1;
          if (*next != '\0' && (*next == '/' || *next == '*')) {
            break;
          }
        } else if (*mIterator == '.') {
          if (!isNum) {
            break;
          } else {
            IScriptSource::Iterator next = mIterator + 1;
            if (0 == myisdigit(*next, isHex)) {
              break;
            }
          }
        } else if (0 == myisdigit(*mIterator, isHex)) {
          isNum = FALSE;
        }

        pushTokenChar(*mIterator);
      }
      endToken();
      if (isNum)
        return NUMBER_;
      else
        return IDENTIFIER_;
    }
  }
}
예제 #30
0
//写文件
VOID WriteScriptFile()
{
	CHAR buf[256];
	tsnprintf(buf,256,__FILE__);
	CHAR* pStr = strrchr(buf,'\\');
	strcpy(pStr+1,"ScriptFuncForDesigner.h");
	FILE* fpScriptFile = fopen(buf,"w");

	CHAR** pScanFile = pLuaFnTblFile;
	while(*pScanFile)
	{
		CHAR buf[_MAX_PATH];
		tsnprintf(buf,256,__FILE__);
		CHAR* pStr = strrchr(buf,'\\');
		strcpy(pStr+1,*pScanFile);
		FILE* fp = fopen(buf,"r");

		if( fp != NULL  && fpScriptFile != NULL) 
		{
			//写文件头
			fprintf(fpScriptFile,"%s\t%s\n","脚本系统C导出函数文档",*pScanFile);

			CHAR line[_MAX_PATH * 4];
			
	
			CHAR *pStr1,*pStr2;//,*pStr3,*pStr4;
			INT linenum = 0;
			BOOL commentBegin = FALSE;
			BOOL beginNamaSpace = FALSE;
			BOOL bDelim = FALSE;
			while( fgets( line, sizeof( line), fp)) 
			{	
				if(strstr(line,"namespace"))
					beginNamaSpace = TRUE;
				if(!beginNamaSpace)
					continue;
		
				if(strstr(line,"endnamespace"))
					break;


				if(strstr(line,"/**"))
				{
					commentBegin = TRUE;
				}
				if(strstr(line,"*/"))
				{
					fprintf(fpScriptFile,"%s",line);
					commentBegin = FALSE;
				}
				if(commentBegin)
				{
					fprintf(fpScriptFile,"%s",line);
					continue;
				}

				if( (pStr1 = strstr(line,"INT")) && (pStr2 = strstr(line,"Lua_State")) && (pStr2 > pStr1))//简化 
				{
					Assert((pStr2 - pStr1) <= NAMELEN);
					
					const CHAR* temp = GetFuncName(pStr1,pStr2);
					
					for(int i=0;i<numReg;i++)
					{
						if(!strcmp(regInfo[i].funcname,temp))
						{
							for(int j=0;j<regInfo[i].regCount;j++)
								fprintf(fpScriptFile,"\t该函数注册为 %s\n",regInfo[i].regname[j]);
						}
					}
					
					//剔出Lua_State描述
					/*char* pDelim = strchr(line,',');
					if(pDelim){
						char szLine[_MAX_PATH];
						memset(szLine,0,_MAX_PATH);
						strncpy(szLine,line,pStr2-line);
						strcat(szLine,++pDelim);
						fprintf(fpScriptFile,"%s\n\n",szLine);
					}
					else{*/
						//fprintf(fpScriptFile,"%s\n\n",line);
					//}
					
						char* pDelim = strchr(line,'{');
						if(pDelim == NULL){
							bDelim = TRUE;
							//fprintf(fpScriptFile,"%s",line);
						}
						else{
							fprintf(fpScriptFile,"%s\n\n",line);
						}
					

				}

				if(strchr(line,'{') && bDelim == TRUE)
				{
					fprintf(fpScriptFile,"\n\n");
					bDelim = FALSE;
				}
				if(bDelim)
				{
					fprintf(fpScriptFile,"%s",line);
				}

			}
			fclose(fp);
			
		}

		pScanFile++;//读下一个文件
	}

	if(fpScriptFile)
	{
		//写文件尾
		fprintf(fpScriptFile,"文档生成日期:%d年%d月%d日%d时",g_pTimeManager->GetYear(),g_pTimeManager->GetMonth(),g_pTimeManager->GetDay(),g_pTimeManager->GetHour());
		fclose(fpScriptFile);
	}
}