static struct asym *CreateProto( int i, struct asm_tok tokenarray[], const char *name, enum lang_type langtype ) /**************************************************************************************************************/ { struct asym *sym; struct dsym *dir; DebugMsg1(("CreateProto( i=%u, name=%s, lang=%u )\n", i, name ? name : "NULL", langtype )); sym = SymSearch( name ); /* the symbol must be either NULL or state * - SYM_UNDEFINED * - SYM_EXTERNAL + isproc == FALSE ( previous EXTERNDEF ) * - SYM_EXTERNAL + isproc == TRUE ( previous PROTO ) * - SYM_INTERNAL + isproc == TRUE ( previous PROC ) */ if( sym == NULL || sym->state == SYM_UNDEFINED || ( sym->state == SYM_EXTERNAL && sym->weak == TRUE && sym->isproc == FALSE )) { if ( NULL == ( sym = CreateProc( sym, name, SYM_EXTERNAL ) ) ) return( NULL ); /* name was probably invalid */ } else if ( sym->isproc == FALSE ) { EmitErr( SYMBOL_REDEFINITION, sym->name ); return( NULL ); } dir = (struct dsym *)sym; /* a PROTO typedef may be used */ if ( tokenarray[i].token == T_ID ) { struct asym * sym2; sym2 = SymSearch( tokenarray[i].string_ptr ); if ( sym2 && sym2->state == SYM_TYPE && sym2->mem_type == MT_PROC ) { i++; if ( tokenarray[i].token != T_FINAL ) { EmitErr( SYNTAX_ERROR_EX, tokenarray[i].string_ptr ); return( NULL ); } CopyPrototype( dir, (struct dsym *)sym2->target_type ); return( sym ); } } /* sym->isproc is set inside ParseProc() */ //sym->isproc = TRUE; if ( Parse_Pass == PASS_1 ) { if ( ParseProc( dir, i, tokenarray, FALSE, langtype ) == ERROR ) return( NULL ); #if DLLIMPORT sym->dll = ModuleInfo.CurrDll; #endif } else { sym->isdefined = TRUE; } return( sym ); }
void Parser::ParseDecl() { while (true) { if (t.GetValue() == "var") ParseVarDecl(); else if(t.GetValue() == "type") ParseTypeDecl(); else if(t.GetValue() == "const") ParseConstDecl(); else if(t.GetValue() == "procedure") ParseProc(); else if(t.GetValue() == "function") ParseFunc(); else break; } }
INT32 CYWXmlBase::NETXml_Proc(string &strErr) { DBG_PRINT(("=======NETXml_Proc Begin=============")); MutexLock(); INT32 errcode = 0; errcode = BuildProc(); if(errcode != XML_SUCCESS) { MutexUnlock(); strErr = "组装请求信息错误"; return XML_INTERNAL_ERR_NO; } FILE *fp; string sInputInfo; string sOutputInfo; //读取XML文件至BUFF memset(tmpBuff, 0, sizeof(tmpBuff)); if( (fp = fopen(KJ_XML_REQUEST_FILE, "rb")) == NULL ) { MutexUnlock(); strErr = "未找到请求XML文件"; return XML_INTERNAL_ERR_NO; } fseek( fp, 0L, SEEK_END ); int dataLen = ftell( fp ); DBG_PRINT(("Req filelen: %d", dataLen)); fseek( fp, 0L, SEEK_SET ); fread( (void *)tmpBuff, dataLen, 1, fp); fclose(fp); sInputInfo = tmpBuff; //设置服务器IP,端口和路径 CNetTransfers *p=NULL; p=g_netManager->GetTransHandle(); m_servip =p->m_serverIP; m_servport =p->m_serverPort; m_servpath =p->m_serverFile; DBG_PRINT(("m_servip= %s",m_servip.c_str())); DBG_PRINT(("m_servport= %s",m_servport.c_str())); DBG_PRINT(("m_servpath= %s",m_servpath.c_str())); OperateNet((char *)m_ywxml_gy.m_zskl.c_str(), m_servip, m_servport, m_servpath, "", m_ywxml_gy.m_nsrsbh, sInputInfo, sOutputInfo, strErr); //接收数据写文件 memset(tmpBuff, 0, sizeof(tmpBuff)); sprintf((INT8 *)tmpBuff, "%s", sOutputInfo.c_str()); UINT32 tmpLen = sOutputInfo.length(); DBG_PRINT(("tmpLen = %u", tmpLen)); if(tmpLen > 0) { if( (fp = fopen(KJ_XML_RESPONSE_FILE, "wb")) == NULL ) { MutexUnlock(); strErr = "未找到应答XML文件"; return XML_INTERNAL_ERR_NO; } fwrite( (void *)tmpBuff, tmpLen, 1, fp); fclose(fp); errcode = ParseProc(); if(errcode != XML_SUCCESS) { MutexUnlock(); strErr = "解析应答数据错误"; return XML_INTERNAL_ERR_NO; } errcode = atoi(m_retInfo.m_retCode.c_str()); DBG_PRINT(("errcode = %d", errcode)); if(errcode != 0) { MutexUnlock(); strErr = m_retInfo.m_retMsg; return errcode; } } else { MutexUnlock(); return XML_NET_ERR_NO; } MutexUnlock(); DBG_PRINT(("=============NETXml_Proc End================")); return XML_SUCCESS; }
INT32 CYWXmlBase::YWXml_Proc(string &strErr) { DBG_PRINT(("=======YWXml_Proc Begin=============")); MutexLock(); INT32 errcode = 0; errcode = BuildProc(); if(errcode != XML_SUCCESS) { MutexUnlock(); strErr = "组装请求信息错误"; return XML_INTERNAL_ERR_NO; } FILE *fp; string sInputInfo; string sOutputInfo; //读取XML文件至BUFF memset(tmpBuff, 0, sizeof(tmpBuff)); if( (fp = fopen(KJ_XML_REQUEST_FILE, "rb")) == NULL ) { MutexUnlock(); strErr = "未找到请求XML文件"; return XML_INTERNAL_ERR_NO; } fseek( fp, 0L, SEEK_END ); int dataLen = ftell( fp ); DBG_PRINT(("Req filelen: %d", dataLen)); fseek( fp, 0L, SEEK_SET ); fread( (void *)tmpBuff, dataLen, 1, fp); fclose(fp); sInputInfo = tmpBuff; OperateDisk(sInputInfo, sOutputInfo); //接收数据写文件 memset(tmpBuff, 0, sizeof(tmpBuff)); sprintf((INT8 *)tmpBuff, "%s", sOutputInfo.c_str()); UINT32 tmpLen = sOutputInfo.length(); DBG_PRINT(("tmpLen = %u", tmpLen)); if( (fp = fopen(KJ_XML_RESPONSE_FILE, "wb")) == NULL ) { MutexUnlock(); strErr = "未找到应答XML文件"; return XML_INTERNAL_ERR_NO; } fwrite( (void *)tmpBuff, tmpLen, 1, fp); fclose(fp); errcode = ParseProc(); if(errcode != XML_SUCCESS) { MutexUnlock(); strErr = "解析应答数据错误"; return XML_INTERNAL_ERR_NO; } errcode = atoi(m_retInfo.m_retCode.c_str()); DBG_PRINT(("errcode = %d", errcode)); if(errcode != 0) { MutexUnlock(); strErr = m_retInfo.m_retMsg; return errcode; } MutexUnlock(); DBG_PRINT(("=============YWXml_Proc End================")); return XML_SUCCESS; }