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

📄 scalar.c

📁 一个简单的数据库管理工具
💻 C
📖 第 1 页 / 共 3 页
字号:
	case eBoolType:  return ISeTrue(p->uVal.bBool) ? 1.0 :0.0 ;	default:	 return(0.0);    }    return(0.0);}static char *ScalarToString(Scalar_t *p){    char sBuf[BUFSIZ];    char *pNullStr = "";    int iLen;    if(!p) {	DebugHTML(__FILE__,__LINE__,0,"ToStr:NULLStr");	return(pNullStr);    }    DebugHTML(__FILE__,__LINE__,5,"ToStr:%s.%d(%d),%s"	    ,p->esType==eStringType    ?"S"		:p->esType==eIntType   ?"I"		:p->esType==eDoubleType?"D"		:p->esType==eListType  ?"L"		:p->esType==eBoolType  ?"B"		:p->esType==eRawType   ?"R"		:"?"	    ,p->lSize	    ,p->esType==eStringType?iStrLen(p->uVal.pString):-1	    ,p->esType==eStringType && p->uVal.pString?p->uVal.pString:"*?*"	    );    switch(p->esType) {	case eStringType:			if(p->lSize==0) {			    return(DupBuf(0));			}			/* if(p->uVal.pString && p->lSize>=0)			/*    *(p->uVal.pString + p->lSize)=0; /* set NULL */			/* */						return(p->uVal.pString);	case eIntType:	sprintf(sBuf,"%d",p->uVal.iInt);			return(DupBuf(sBuf));	case eDoubleType:			sprintf(sBuf,"%f",p->uVal.dDouble);			if(strchr(sBuf,'.')) {			    /* Strip Trailing zeros, if decpt			     */			    iLen = iStrLen(sBuf);			    while( sBuf[--iLen] == '0')				sBuf[iLen]=0;			    if(sBuf[iLen] == '.')				sBuf[iLen]=0;			}			return(DupBuf(sBuf));	case eListType: return(pNullStr);	case eBoolType: return(ISeTrue(p->uVal.bBool)?"TRUE":"FALSE");	default:	    DebugHTML(__FILE__,__LINE__,0,"ToStr:Unknown Type %d",p->esType);    }    return(pNullStr);}static eBoolean_taToBool(char *p){    if(is_casematch(p,"FALSE")) return(eFalse);    if(is_casematch(p,"TRUE") )  return(eTrue);    return(eTrue);}static eBoolean_tCompareDouble(int iOp,double dLeft,double dRight){    switch(iOp){	case EQ:  return( (dLeft==dRight)   ?eTrue:eFalse);	case NEQ: return( (!(dLeft==dRight))?eTrue:eFalse);	case GT:  return( (dLeft>dRight)    ?eTrue:eFalse);	case GE:  return( (dLeft>=dRight)   ?eTrue:eFalse);	case LT:  return( (dLeft<dRight)    ?eTrue:eFalse);	case LE:  return( (dLeft<=dRight)   ?eTrue:eFalse);    }    DebugHTML(__FILE__,__LINE__,0,"WARN:COMPARE DBL:Unknown OP:%d",iOp);    return(eFalse);}static eBoolean_tCompareString(int iOp,char *pLeft,char *pRight){    DebugHTML(__FILE__,__LINE__,2,"COMPARE STR:%s %d %s",pLeft,iOp,pRight);    switch(iOp){	case EQ:  return(is_match(pLeft,pRight)   ?eTrue:eFalse);	case NEQ: return(!(is_match(pLeft,pRight))?eTrue:eFalse);	case GT:  return((iStrCmp(pLeft,pRight)>0)    ?eTrue:eFalse);	case GE:  return((iStrCmp(pLeft,pRight)>=0)   ?eTrue:eFalse);	case LT:  return((iStrCmp(pLeft,pRight)<0)    ?eTrue:eFalse);	case LE:  return((iStrCmp(pLeft,pRight)<=0)   ?eTrue:eFalse);    }    DebugHTML(__FILE__,__LINE__,0,"WARN:COMPARE STR:Unknown OP:%d",iOp);    MsgPush("WARN:COMPARE STR:Unknown OP:%d",iOp);    return(eFalse);}static eBoolean_tIsNumber(Scalar_t *p){    if(!p){	DebugHTML(__FILE__,__LINE__,0,"IsNumber:Scalar is NULL");	MsgPush("IsNumber:Scalar is NULL");	return(eFalse);    }    if(p->esType==eDoubleType || p->esType==eIntType)	return(eTrue);    return(eFalse);}Scalar_t *ScalarUpper(Scalar_t *pList){    Scalar_t *pTop;    char sBuf[MAX_BUFSIZ];    DebugHTML(__FILE__,__LINE__,3,"Called Upper(%x)",pList);    if(!pList){	DebugHTML(__FILE__,__LINE__,0,"ScalarUpper:Scalar is NULL(%x)",pList);	MsgPush("ScalarUpper:Scalar is NULL");	return(&gsNullScalar);    }    if(pList->esType != eListType) {	DebugHTML(__FILE__,__LINE__,0,"WARN:UPPER:Invalid arg type passed to Function");	return(&gsNullScalar);    }    sBuf[0]=0;    while( (pTop = (Scalar_t *)DEQ(pList->uVal.pList)) ) {	char *pTmp = ScalarToString(pTop);	strcat(sBuf,pTmp);    }    ToUpper(sBuf);    return(MkScalar(eStringType,sBuf,1+iStrLen(sBuf)));}Scalar_t *ScalarLower(Scalar_t *pList){    Scalar_t *pTop;    char sBuf[MAX_BUFSIZ];    if(!pList) {	DebugHTML(__FILE__,__LINE__,0,"ScalarLower:Scalar is NULL(%x)",pList);	MsgPush("ScalarLower:Scalar is NULL");	return(&gsNullScalar);    }    if(pList->esType != eListType) {	DebugHTML(__FILE__,__LINE__,0,"WARN:LOWER:Invalid arg type passed to Function");	return(&gsNullScalar);    }    sBuf[0]=0;    while( (pTop = (Scalar_t *)DEQ(pList->uVal.pList)) ) {	char *pTmp = ScalarToString(pTop);	strcat(sBuf,pTmp);    }    ToLower(sBuf);    return(MkScalar(eStringType,sBuf,1+iStrLen(sBuf)));}Scalar_t *ScalarSubstr(Scalar_t *pList){    char *pTmp;    int iSize,iOffset,iLength;    Scalar_t *pString = 0	    ,*pOffset = 0	    ,*pLength = 0	;    if(!pList){	DebugHTML(__FILE__,__LINE__,0,"ScalarSubstr:Scalar is NULL(%x)",pList);	MsgPush("ScalarSubstr:Scalar is NULL");	return(&gsNullScalar);    }    iSize = l_size(pList->uVal.pList);    if(iSize==2){	pString=(Scalar_t *)DEQ(pList->uVal.pList);	pOffset=(Scalar_t *)DEQ(pList->uVal.pList);	pTmp   = ScalarToString(pString);	iOffset= (int)ScalarToDouble(pOffset);	if(iOffset<iStrLen(pTmp)) {	    pString->esType = eStringType;	    pString->uVal.pString = (pTmp+iOffset);	    pString->lSize = 1+iStrLen(pString->uVal.pString);	    return(pString);	}    } else if (iSize==3) {	pString=(Scalar_t *)DEQ(pList->uVal.pList);	pOffset=(Scalar_t *)DEQ(pList->uVal.pList);	pLength=(Scalar_t *)DEQ(pList->uVal.pList);	pTmp   = ScalarToString(pString);	iOffset= (int)ScalarToDouble(pOffset);	iLength= (int)ScalarToDouble(pLength);	/* Reusing iSize as length of first arg */	iSize = iStrLen(pTmp);	if(iOffset<iSize) {	    pString->uVal.pString = (pTmp + iOffset);	    if((iOffset+iLength) <iSize)		*(pTmp + iOffset + iLength) = 0;	    pString->esType = eStringType;	    pString->lSize = 1+iStrLen(pString->uVal.pString);	    return(pString);	}    } else {	DebugHTML(__FILE__,__LINE__,0,"WARN:SUBSTR:Invalid args to Substr");    }    return(&gsNullScalar);}Scalar_t *ScalarLength(Scalar_t *pList){    Scalar_t *pTop;    int iLen=0, lLen=0;    char sLenBuf[MAX_INTEGER_DIGITS];    if(!pList){	DebugHTML(__FILE__,__LINE__,0,"ScalarLength:Scalar is NULL(%x)",pList);	MsgPush("ScalarLength:Scalar is NULL");	return(&gsNullScalar);    }    if(pList->esType != eListType) {	DebugHTML(__FILE__,__LINE__,0		 ,"WARN:LENGTH:Invalid arg type passed to Function"		 );	return(&gsNullScalar);    }    iLen=0, lLen=0;    while( (pTop = (Scalar_t *)DEQ(pList->uVal.pList)) ) {	/* char *pTmp = ScalarToString(pTop);	/* iLen += iStrLen(pTmp);	 */	lLen += (pTop->lSize>0)?(pTop->lSize) -1:0;	/* DebugHTML(__FILE__,__LINE__,0,"lSize=%d",lLen);	 */    }    sprintf(sLenBuf,"%d",lLen);    return(MkScalar(eDoubleType, sLenBuf,1+iStrLen(sLenBuf)));}Scalar_t *ScalarNVL(Scalar_t *pList){    Scalar_t *pTop;    DebugHTML(__FILE__,__LINE__,3,"Called NVL");    if(!pList){	DebugHTML(__FILE__,__LINE__,0,"ScalarNVL:Scalar is NULL(%x)",pList);	MsgPush("ScalarNVL:Scalar is NULL");	return(&gsNullScalar);    }    pTop = (Scalar_t *)DEQ(pList->uVal.pList);    if(IsNullCond(pTop)) {	DebugHTML(__FILE__,__LINE__,2,"NVL:NULL Condition");	return((Scalar_t *)DEQ(pList->uVal.pList));    }    DebugHTML(__FILE__,__LINE__,2,"NVL:NOT NULL Condition");    return(pTop);}Scalar_t *ScalarHost(Scalar_t *pList){    Scalar_t *pTop;    char sBuf[MAX_BUFSIZ];    int c, iCharCount, iStatus;    FILE *pF;#ifdef WIN32    MsgPush("SQLweb/NT: Doesn't Support HOST");    return(&gsNullScalar);#endif#ifndef WIN32    {    DebugHTML(__FILE__,__LINE__,3,"Called Host");    if(!pList){	DebugHTML(__FILE__,__LINE__,0,"ScalarHost:Scalar is NULL(%x)",pList);	MsgPush("ScalarHost:Scalar is NULL");	return(&gsNullScalar);    }    sBuf[0]=0;    while( (pTop = (Scalar_t *)DEQ(pList->uVal.pList)) ) {	char *pTmp = ScalarToString(pTop);	strcat(sBuf,pTmp);    }    DebugHTML(__FILE__,__LINE__,2,"Running: `%s`",sBuf);    pF = popen(sBuf,"r");    if(!pF){	DebugHTML(__FILE__,__LINE__,0,"POpen Failed: (%s)",sBuf);	MsgPush("Host:Can't popen(%s,\"r\")", sBuf);	return(&gsNullScalar);    }    DebugHTML(__FILE__,__LINE__,3,"Open'd(%x)",pF);    for( c=fgetc(pF), iCharCount=0	;c != EOF && iCharCount<MAX_BUFSIZ	;c=fgetc(pF), iCharCount++ )    {	sBuf[iCharCount] = c;    }    /*    /* NULL the string...     */    if(iCharCount && sBuf[iCharCount-1]=='\n')	 sBuf[iCharCount-1]=0;    else sBuf[iCharCount] = 0;    DebugHTML(__FILE__,__LINE__,3,"Read %d chars",iCharCount);    iStatus = pclose(pF);    DebugHTML(__FILE__,__LINE__,3,"popen:%d:%d",iStatus,c);    return(MkScalar(eStringType, sBuf,1+iStrLen(sBuf)));    }#endif}Scalar_t *ScalarSaveFile(Scalar_t *pList){    Scalar_t *pScalarFileName	    ,*pScalarData	    ;    char *pFileName;    long lSize;    int iListSize;    FILE *pF;    DebugHTML(__FILE__,__LINE__,3,"Called SaveFile");    if(!pList){	DebugHTML(__FILE__,__LINE__,0,"SaveFile:Scalar is NULL(%x)",pList);	MsgPush("ScalarSaveFile:Scalar is NULL");	return(&gsNullScalar);    }    /*    /* Check number of parameters (the USAGE)     */    iListSize = l_size(pList->uVal.pList);    if(iListSize != 2) {	DebugHTML(__FILE__,__LINE__,0		 ,"WARN:SAVEFILE:USAGE:SaveFile(filename,data)"		 );	MsgPush("ScalarSaveFile:Scalar is NULL");	return(&gsNullScalar);    }    /*    /* Get Filename      */    pScalarFileName = (Scalar_t *)DEQ(pList->uVal.pList);    pScalarData = (Scalar_t *)DEQ(pList->uVal.pList);    pFileName = ScalarToString(pScalarFileName);    pF=fopen(pFileName,"w");    if(!pF){	DebugHTML(__FILE__,__LINE__,0,"SaveFile:Open Failed:%d",errno);	MsgPush("ScalarSaveFile:Open Failed");	return(&gsNullScalar);    }    lSize = pScalarData->lSize;    lSize = fwrite(pScalarData->uVal.pString,lSize,1,pF);    fclose(pF);    pScalarFileName->esType = eBoolType;    pScalarFileName->uVal.bBool = lSize==1?eTrue:eFalse;    pScalarFileName->lSize = 0;    return(pScalarFileName);}Scalar_t *ScalarToChar(Scalar_t *pList){    char *pFmtStr	 ,*pInpStr	 ,sBuf[BUFSIZ]	 ;    int iSize;    Scalar_t *pInput = 0	    ,*pFormat = 0	;    if(!pList){	DebugHTML(__FILE__,__LINE__,0,"ScalarToChar:Scalar is NULL(%x)",pList);	MsgPush("ScalarToChar:Scalar is NULL");	return(&gsNullScalar);    }    iSize = l_size(pList->uVal.pList);    if(iSize!=2){	DebugHTML(__FILE__,__LINE__,0,"WARN:TO_CHAR:usage error:to_char(input,fmt)");	return(&gsNullScalar);    }    /* Get the Parameters     */    pInput =(Scalar_t *)DEQ(pList->uVal.pList);    pFormat=(Scalar_t *)DEQ(pList->uVal.pList);    /* Convert Each Parameter to a string     */    pInpStr= ScalarToString(pInput);    pFmtStr= ScalarToString(pFormat);    /*    /* Convert input string using format mask     */    FormatString(pInpStr,pFmtStr,sBuf);    return(MkScalar(eStringType, sBuf,1+iStrLen(sBuf)));}Scalar_t *ScalarToNumber(Scalar_t *pList){    int  iDotFlag = 0	,iDigFlag = 0;    Scalar_t *pScalar;    char *pInStr;    char sBuf[MAX_BUFSIZ], *psBuf=sBuf;    /* fprintf(stderr,"ToNumber(!)\n");fflush(stderr);     */    if(!pList){	DebugHTML(__FILE__,__LINE__,0,"ScalarToNumber:Scalar is NULL(%x)",pList);	MsgPush("ScalarToNumber:Scalar is NULL");	return(&gsNullScalar);    }    pScalar = DEQ(pList->uVal.pList);    pInStr = ScalarToString(pScalar);    for( ; *pInStr; pInStr++) {	switch(*pInStr){	    case '-' : 		if(iDigFlag) break;	    case '.' : 		if(iDotFlag) break;		iDotFlag=1;	    case '0' :	    case '1' :	    case '2' :	    case '3' :	    case '4' :	    case '5' :	    case '6' :	    case '7' :	    case '8' :	    case '9' :		iDigFlag=1;		*psBuf++ = *pInStr;		break;	} /* end of switch */    } /* end of for */    *psBuf = '\0';    /* fprintf(stderr,"ToNumber(%s)\n",sBuf);fflush(stderr);     */    return(MkScalar(eStringType,sBuf,1+iStrLen(sBuf)));}Scalar_t *ScalarLPad(Scalar_t *pList){    int		 iSize		,iPadSize		;    Scalar_t 	 *pSource		,*pSize		,*pChar		;    char	 *pStrSource		,*pStrChar = " "		,sBuf[MAX_BUFSIZ]		;    /* fprintf(stderr,"LPad(!)\n");fflush(stderr);     */    if(!pList){	DebugHTML(__FILE__,__LINE__,0,"ScalarLPad:Scalar is NULL(%x)",pList);	MsgPush("ScalarLPad:Scalar is NULL");	return(&gsNullScalar);    }    iSize = l_size(pList->uVal.pList);    if(iSize != 2 && iSize !=3) {	DebugHTML(__FILE__,__LINE__,0,"WARN:LPAD:USAGE:LPad(input,size[,padchar])");	return(&gsNullScalar);    }    pSource = DEQ(pList->uVal.pList);    pSize   = DEQ(pList->uVal.pList);    if(iSize == 3) {	pChar = DEQ(pList->uVal.pList);    }    pStrSource = ScalarToString(pSource);    iPadSize = (int)ScalarToDouble(pSize);    pStrChar = ScalarToString(pChar);    if(iPadSize >= MAX_BUFSIZ) {	DebugHTML(__FILE__,__LINE__,0		,"WARN:LPAD:overflow, truncated to %d",MAX_BUFSIZ);	iPadSize = MAX_BUFSIZ -1;    }    memset(sBuf, *pStrChar, iPadSize);    sBuf[iPadSize] = 0;    strcpy(&sBuf[iPadSize-iStrLen(pStrSource)],pStrSource);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -