📄 swbltin.c
字号:
{ PI *pPI2; LIST *lTmpList = glCookList; DebugHTML(__FILE__,__LINE__,5,"iCp2CookList(%s)", pPI->pTagName); pPI2 = NewPI(); if(!pPI2){ MsgPush("NewPI failed"); return(eFalse); } /* (void)memset(pPI2,0,sizeof(PI)); */ pPI2->iLevel = pPI->iLevel; pPI2->pTagName = DupBuf(pPI->pTagName); pPI2->pPiContents = DupBuf(pPI->pPiContents); pPI2->pTag = pPI->pTag; pPI2->pPIContext = pPI->pPIContext; /* Works only if pPIContext does NOT BIND */ pPI2->lPI = l_create("QUEUE"); pPI2->lPIA = l_create("INORDER"); /* Searchable... */ pPI2->iLineNbr = pPI->iLineNbr; glPIAList = pPI2->lPIA; RETeFalse(l_scan(pPI->lPIA,(PFI)iCp2PIAList) ,"Failed to Duplicate PIA List" ); /* Add self to current COOK List */ RETeFalse(ENQ(glCookList,pPI2) ,"Cp2CookList:ENQ Failed" ); glCookList = pPI2->lPI; RETeFalse(l_scan(pPI->lPI,(PFI)iCp2CookList) ,"Failed to Duplicate Cooked List" ); glCookList = lTmpList; return(eTrue);}static eBoolean_tiCp2PIList(PI *pPI){ DebugHTML(__FILE__,__LINE__,4,"iCp2PIList(%s)", pPI->pTagName); RETeFalse(ENQ(glPIList,pPI) ,"Cp2PIList:ENQ Failed" ); return(eTrue);}static eBoolean_tiCp2PIAList(SYMBOL *pPIA){ SYMBOL *pSym; pSym = NewPIA(); if(!pSym){ MsgPush("NewPIA failed"); return(eFalse); } pSym->iType = pPIA->iType; pSym->pName = DupBuf(pPIA->pName); pSym->pValue = DupBuf(pPIA->pValue); pSym->esDataType = pPIA->esDataType; return(ENQ(glPIAList,pSym));}eBoolean_tsqlweb_include(PI *pPI ,eBoolean_t *pbExpr ){ char sFileName[BUFSIZ]; char *pFieldName ,*pExpandedName ,*pType ; PAGE *pPage; *pbExpr = eTrue; if(!is_casematch(pPI->pTagName,"INCLUDE") && !is_casematch(pPI->pTagName,"SQLWEB-INCLUDE")) { MsgPush("sqlweb_include:Can't Process %s",pPI->pTagName); return(eFalse); } /* /* The INCLUDE Tag */ /* /* Get the NAME Attribute */ if(ISeFalse(GetPIAValueREF(pPI,"NAME",&pFieldName))){ /* Get the FILENAME Attribute, for backward compat. */ if(ISeFalse(GetPIAValueREF(pPI,"FILENAME",&pFieldName))){ /* Get the PAGENAME Attribute, for backward compat. */ if(ISeFalse(GetPIAValueREF(pPI,"PAGENAME",&pFieldName))){ DebugHTML(__FILE__,__LINE__,0,"Nothing to INCLUDE."); return(eTrue); } else { DebugHTML(__FILE__,__LINE__,0 ,"Warning, replace old PAGENAME attribute with FILENAME"); } } } ExpandString(pFieldName,&pExpandedName); /* /* Pagename starts with '/' then it's based on SQLWEB_DOC_ROOT */ if(*pExpandedName=='/') { char *pIncRoot; if(ISeFalse(GetSymbolValueREF("SQLWEB_DOC_ROOT",&pIncRoot))) { DebugHTML(__FILE__,__LINE__,0 ,"Warning: SQLWEB_DOC_ROOT not found in sqlweb.ini." ); return(eTrue); } sprintf(sFileName,"%s%s",pIncRoot,pExpandedName); } /* /* else its relative to current file. */ else { char *pDirName = strrchr(gpFileName,'/'); if(pDirName) { char *p = gpFileName; int i; for(i=0,p=gpFileName;(p<pDirName);i++,p++) sFileName[i]=*p; sFileName[i++]='/'; sFileName[i++]=0; strcat(sFileName,pExpandedName); } else { sprintf(sFileName,"./%s",pExpandedName); } } /* /* Get the FILETYPE Attribute */ if(ISeFalse(GetPIAValueREF(pPI,"TYPE",&pType))){ if(ISeFalse(GetPIAValueREF(pPI,"FILETYPE",&pType))){ pType="SQLWEB"; } } DebugHTML(__FILE__,__LINE__,3,"Loading: %s (type=%s)",sFileName,pType); if(is_casematch(pType,"SQLWEB")) { if(ISeFalse(LoadHTML(sFileName,&pPage))){ DebugHTML(__FILE__,__LINE__,0 ,"INCLUDE: Failed to load html: %s", sFileName ); return(eTrue); } /* /* Now that the new page is loaded use its /* PI-List as this PI's PI-List */ pPI->lPI = pPage->lPI; return(eTrue); } if(ISeFalse(LoadTEXT(sFileName,pType,pPI))){ DebugHTML(__FILE__,__LINE__,0 ,"INCLUDE: Failed to load %s file: %s" ,pType ,sFileName ); return(eTrue); } return(eTrue);}/*/* overrides the default IF processing depending on DB... */eBoolean_tsqlweb_if2( PI *pPI ,eBoolean_t *pbExpr ){ char *pExpr, *pBuf; *pbExpr = eFalse; if(!is_casematch(pPI->pTagName,"IF2") && !is_casematch(pPI->pTagName,"SQLWEB-IF2") && !is_casematch(pPI->pTagName,"SQLWEB-SYMBOL") && !is_casematch(pPI->pTagName,"SYMBOL")) { MsgPush("sqlweb_if2:Can't Process %s",pPI->pTagName); return(eFalse); } /* /* Process IF2 Tag */ (*pbExpr) = eFalse; if(ISeTrue(GetPIAValueREF(pPI,"EXPR",&pExpr))) { if(ISeTrue(GetPIAValueREF(pPI,"EVAL",&pBuf)) && (is_casematch(pBuf,"TRUE")) ) { ExpandString(pExpr,&pBuf); RemoveCharCodes(pBuf); pExpr = pBuf; } DebugHTML(__FILE__,__LINE__,3,"Expr=\"%s\"",pExpr); RETeFalse2(ParseIf(pExpr,pbExpr) ,"Failed to expand IF:%s" ,pExpr ); ChopPI(pPI,(*pbExpr)); /* Chop Children IFF expression is FALSE */ } /* Got the "Required EXPR" symbol... */ return(eTrue);}eBoolean_tsqlweb_host( PI *pPI ,eBoolean_t *pbExpr ){ char sBuf[MAX_TOKVAL_SIZE] ,*p; char *pCmd, *pOutput, *pBuf; int c, iCharCount, iStatus; FILE *pF; DebugHTML(__FILE__,__LINE__,3,"Host"); *pbExpr = eTrue;#ifdef WIN32 MsgPush("SQLweb/NT: Doesn't Support HOST"); return(eTrue);#endif#ifndef WIN32 if(!is_casematch(pPI->pTagName,"HOST") && !is_casematch(pPI->pTagName,"SQLWEB-HOST")) { MsgPush("sqlweb_host:Can't Process %s",pPI->pTagName); return(eFalse); } /* /* Get the CMD Attribute */ if(ISeFalse(GetPIAValueREF(pPI,"CMD",&pCmd))){ DebugHTML(__FILE__,__LINE__,1,"W:No \"CMD\" Attribute"); return(eTrue); } ExpandString(pCmd,&pBuf); pCmd = pBuf; DebugHTML(__FILE__,__LINE__,3,"Running: (%s)",pCmd); /* /* Get the OUTPUT Attribute */ if(ISeTrue(GetPIAValueREF(pPI,"OUTPUT",&pOutput)) && is_casematch(pOutput,"FALSE")) { *pbExpr = eFalse; } pF = popen(pCmd,"r"); if(!pF){ MsgPush("sqlweb_host:Can't popen(%s,\"r\")", pCmd); return(eFalse); } DebugHTML(__FILE__,__LINE__,3,"Open'd(%x)",pF); for( c=fgetc(pF), iCharCount=0, p=sBuf ;c != EOF ;c=fgetc(pF), iCharCount++ ) { if(iCharCount<sizeof(sBuf)) *p++ = (char)c; } *p = 0; DebugHTML(__FILE__,__LINE__,3,"Read %d chars",iCharCount); iStatus = pclose(pF); DebugHTML(__FILE__,__LINE__,3,"popen:%d:%d",iStatus,c); if(sBuf[0]) { FreeBuf(pPI->pPiContents); pPI->pPiContents= DupBuf(sBuf); SELSym("SQLWEB_HOST_OUTPUT",pPI->pPiContents); } return(eTrue);#endif}/*/* This one is not yet ready for prime time-- it would be best/* to run "CookPI" to an alternate buffer, and then run/* LoadHTML on the alternate buffer to reparse the output/* -- that would be a "read" EVAL/*/* This one just DON'T WORK! */eBoolean_tsqlweb_eval( PI *pPI ,eBoolean_t *pbExpr ){ eBoolean_t b = gbBufferOutput; DebugHTML(__FILE__,__LINE__,0,"EVAL:Pass1\n"); gbBufferOutput=eTrue; if(ISeFalse(l_scan(pPI->lPI,(PFI)CookPI))) { MsgPush("EVAL: pass1 failed"); return(eTrue); } DebugHTML(__FILE__,__LINE__,0,"EVAL:Pass2\n"); gbBufferOutput=b; if(ISeFalse(l_scan(pPI->lPI,(PFI)CookPI))) { MsgPush("EVAL: pass1 failed"); return(eTrue); } *pbExpr = eTrue; return(eTrue);}eBoolean_tsqlweb_demo( PI *pPI ,eBoolean_t *pbExpr ){ pPI->pPiContents="This is a Demo, ::HOME = ':home', this is only a demo"; *pbExpr = eTrue; return(eTrue);}static eBoolean_tChopPI(PI *pPI,eBoolean_t bExpr){ DebugHTML(__FILE__,__LINE__,3,"ChopPI(%s:%s %d Children)" ,pPI->pTagName ,ISeFalse(bExpr)?"CHOP":"KEEP" ,pPI->lPI? l_size(pPI->lPI): -1 ); if(ISeFalse(bExpr)) { if(ISeTrue(gbBufferOutput)){ pPI->lPI = l_create("QUEUE"); pPI->pPiContents = DupBuf(0); } else { FreePI(pPI); } } DebugHTML(__FILE__,__LINE__,5,"ChopPI:Done."); return(eTrue);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -