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

📄 default.c

📁 clips源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
      else if (theConstraints->minValue->type == INTEGER)        { return(EnvAddDouble(theEnv,(double) ValueToLong(theConstraints->minValue->value))); }      else if (theConstraints->maxValue->type == FLOAT)        { return(theConstraints->maxValue->value); }      else if (theConstraints->maxValue->type == INTEGER)        { return(EnvAddDouble(theEnv,(double) ValueToLong(theConstraints->maxValue->value))); }     }   /*======================================*/   /* Use the standard default value (such */   /* as nil if symbols are allowed).      */   /*======================================*/   return(standardDefault);  }#if (! RUN_TIME) && (! BLOAD_ONLY)/**********************************************//* ParseDefault: Parses a default value list. *//**********************************************/globle struct expr *ParseDefault(  void *theEnv,  char *readSource,  int multifield,  int dynamic,  int evalStatic,  int *noneSpecified,  int *deriveSpecified,  int *error)  {   struct expr *defaultList = NULL, *lastDefault = NULL;   struct expr *newItem, *tmpItem;   struct token theToken;   DATA_OBJECT theValue;   CONSTRAINT_RECORD *rv;   int specialVarCode;   *noneSpecified = FALSE;   *deriveSpecified = FALSE;   SavePPBuffer(theEnv," ");   GetToken(theEnv,readSource,&theToken);   /*===================================================*/   /* Read the items contained in the default attribute */   /* until a closing right parenthesis is encountered. */   /*===================================================*/   while (theToken.type != RPAREN)     {      /*========================================*/      /* Get the next item in the default list. */      /*========================================*/      newItem = ParseAtomOrExpression(theEnv,readSource,&theToken);      if (newItem == NULL)        {         ReturnExpression(theEnv,defaultList);         *error = TRUE;         return(NULL);        }      /*===========================================================*/      /* Check for invalid variable usage. With the expection of   */      /* ?NONE for the default attribute, local variables may not  */      /* be used within the default or default-dynamic attributes. */      /*===========================================================*/      if ((newItem->type == SF_VARIABLE) || (newItem->type == MF_VARIABLE))        {         if (strcmp(ValueToString(newItem->value),"NONE") == 0)           { specialVarCode = 0; }         else if (strcmp(ValueToString(newItem->value),"DERIVE") == 0)           { specialVarCode = 1; }         else           { specialVarCode = -1; }         if ((dynamic) ||             (newItem->type == MF_VARIABLE) ||             (specialVarCode == -1) ||             ((specialVarCode != -1) && (defaultList != NULL)))           {            if (dynamic) SyntaxErrorMessage(theEnv,"default-dynamic attribute");            else SyntaxErrorMessage(theEnv,"default attribute");            ReturnExpression(theEnv,newItem);            ReturnExpression(theEnv,defaultList);            *error = TRUE;            return(NULL);           }         ReturnExpression(theEnv,newItem);         /*============================================*/         /* Check for the closing right parenthesis of */         /* the default or default dynamic attribute.  */         /*============================================*/         GetToken(theEnv,readSource,&theToken);         if (theToken.type != RPAREN)           {            if (dynamic) SyntaxErrorMessage(theEnv,"default-dynamic attribute");            else SyntaxErrorMessage(theEnv,"default attribute");            PPBackup(theEnv);            SavePPBuffer(theEnv," ");            SavePPBuffer(theEnv,theToken.printForm);            *error = TRUE;           }         if (specialVarCode == 0)           *noneSpecified = TRUE;         else           *deriveSpecified = TRUE;         return(NULL);        }      /*====================================================*/      /* Look to see if any variables have been used within */      /* expressions contained within the default list.     */      /*====================================================*/      if (ExpressionContainsVariables(newItem,FALSE) == TRUE)        {         ReturnExpression(theEnv,defaultList);         ReturnExpression(theEnv,newItem);         *error = TRUE;         if (dynamic) SyntaxErrorMessage(theEnv,"default-dynamic attribute");         else SyntaxErrorMessage(theEnv,"default attribute");         return(NULL);        }      /*============================================*/      /* Add the default value to the default list. */      /*============================================*/      if (lastDefault == NULL)        { defaultList = newItem; }      else        { lastDefault->nextArg = newItem; }      lastDefault = newItem;      /*=======================================*/      /* Begin parsing the next default value. */      /*=======================================*/      SavePPBuffer(theEnv," ");      GetToken(theEnv,readSource,&theToken);     }   /*=====================================*/   /* Fix up pretty print representation. */   /*=====================================*/   PPBackup(theEnv);   PPBackup(theEnv);   SavePPBuffer(theEnv,")");   /*=========================================*/   /* A single field slot's default attribute */   /* must contain a single value.            */   /*=========================================*/   if (multifield == FALSE)     {      if (defaultList == NULL)        { *error = TRUE; }      else if (defaultList->nextArg != NULL)        { *error = TRUE; }      else        {         rv = ExpressionToConstraintRecord(theEnv,defaultList);         rv->multifieldsAllowed = FALSE;         if (UnmatchableConstraint(rv)) *error = TRUE;         RemoveConstraint(theEnv,rv);        }      if (*error)        {         PrintErrorID(theEnv,"DEFAULT",1,TRUE);         EnvPrintRouter(theEnv,WERROR,"The default value for a single field slot must be a single field value\n");         ReturnExpression(theEnv,defaultList);         return(NULL);        }     }   /*=======================================================*/   /* If the dynamic-default attribute is not being parsed, */   /* evaluate the expressions to make the default value.   */   /*=======================================================*/   if (dynamic || (! evalStatic) || (defaultList == NULL)) return(defaultList);   tmpItem = defaultList;   newItem = defaultList;   defaultList = NULL;   while (newItem != NULL)     {      SetEvaluationError(theEnv,FALSE);      if (EvaluateExpression(theEnv,newItem,&theValue)) *error = TRUE;      if ((theValue.type == MULTIFIELD) &&          (multifield == FALSE) &&          (*error == FALSE))        {         PrintErrorID(theEnv,"DEFAULT",1,TRUE);         EnvPrintRouter(theEnv,WERROR,"The default value for a single field slot must be a single field value\n");         *error = TRUE;        }      if (*error)        {         ReturnExpression(theEnv,tmpItem);         ReturnExpression(theEnv,defaultList);         *error = TRUE;         return(NULL);        }      lastDefault = ConvertValueToExpression(theEnv,&theValue);      defaultList = AppendExpressions(defaultList,lastDefault);      newItem = newItem->nextArg;     }   ReturnExpression(theEnv,tmpItem);   /*==========================*/   /* Return the default list. */   /*==========================*/   return(defaultList);  }#endif /* (! RUN_TIME) && (! BLOAD_ONLY) */

⌨️ 快捷键说明

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