⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 swbltin.c

📁 一个简单的数据库管理工具
💻 C
📖 第 1 页 / 共 2 页
字号:
{    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 + -