亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? extnfunc.c

?? clips源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
      lastPtr = fhPtr;     }   return(FALSE);  }/***************************************************************************//* AddFunctionParser: Associates a specialized expression parsing function *//*   with the function entry for a function which was defined using        *//*   DefineFunction. When this function is parsed, the specialized parsing *//*   function will be called to parse the arguments of the function. Only  *//*   user and system defined functions can have specialized parsing        *//*   routines. Generic functions and deffunctions can not have specialized *//*   parsing routines.                                                     *//***************************************************************************/globle int AddFunctionParser(  void *theEnv,  char *functionName,  struct expr *(*fpPtr)(void *,struct expr *,char *))  {   struct FunctionDefinition *fdPtr;   fdPtr = FindFunction(theEnv,functionName);   if (fdPtr == NULL)     {      EnvPrintRouter(theEnv,WERROR,"Function parsers can only be added for existing functions.\n");      return(0);     }   fdPtr->restrictions = NULL;   fdPtr->parser = fpPtr;   fdPtr->overloadable = FALSE;   return(1);  }/*********************************************************************//* RemoveFunctionParser: Removes a specialized expression parsing    *//*   function (if it exists) from the function entry for a function. *//*********************************************************************/globle int RemoveFunctionParser(  void *theEnv,  char *functionName)  {   struct FunctionDefinition *fdPtr;   fdPtr = FindFunction(theEnv,functionName);   if (fdPtr == NULL)     {      EnvPrintRouter(theEnv,WERROR,"Function parsers can only be removed from existing functions.\n");      return(0);     }   fdPtr->parser = NULL;   return(1);  }/*****************************************************************//* FuncSeqOvlFlags: Makes a system function overloadable or not, *//* i.e. can the function be a method for a generic function.     *//*****************************************************************/globle int FuncSeqOvlFlags(  void *theEnv,  char *functionName,  int seqp,  int ovlp)  {   struct FunctionDefinition *fdPtr;   fdPtr = FindFunction(theEnv,functionName);   if (fdPtr == NULL)     {      EnvPrintRouter(theEnv,WERROR,"Only existing functions can be marked as using sequence expansion arguments/overloadable or not.\n");      return(FALSE);     }   fdPtr->sequenceuseok = (short) (seqp ? TRUE : FALSE);   fdPtr->overloadable = (short) (ovlp ? TRUE : FALSE);   return(TRUE);  }#endif/*********************************************************//* GetArgumentTypeName: Returns a descriptive string for *//*   a function argument type (used by DefineFunction2). *//*********************************************************/globle char *GetArgumentTypeName(  int theRestriction)  {   switch ((char) theRestriction)     {      case 'a':        return("external address");      case 'e':        return("instance address, instance name, or symbol");      case 'd':      case 'f':        return("float");      case 'g':        return("integer, float, or symbol");      case 'h':        return("instance address, instance name, fact address, integer, or symbol");      case 'j':        return("symbol, string, or instance name");      case 'k':        return("symbol or string");      case 'i':      case 'l':        return("integer");      case 'm':        return("multifield");      case 'n':        return("integer or float");      case 'o':        return("instance name");      case 'p':        return("instance name or symbol");      case 'q':        return("multifield, symbol, or string");      case 's':        return("string");      case 'w':        return("symbol");      case 'x':        return("instance address");      case 'y':        return("fact-address");      case 'z':        return("fact-address, integer, or symbol");      case 'u':        return("non-void return value");     }   return("unknown argument type");  }/***************************************************//* GetNthRestriction: Returns the restriction type *//*   for the nth parameter of a function.          *//***************************************************/globle int GetNthRestriction(  struct FunctionDefinition *theFunction,  int position)  {   int defaultRestriction = (int) 'u';   size_t theLength;   int i = 2;   /*===========================================================*/   /* If no restrictions at all are specified for the function, */   /* then return 'u' to indicate that any value is suitable as */   /* an argument to the function.                              */   /*===========================================================*/   if (theFunction == NULL) return(defaultRestriction);   if (theFunction->restrictions == NULL) return(defaultRestriction);   /*===========================================================*/   /* If no type restrictions are specified for the function,   */   /* then return 'u' to indicate that any value is suitable as */   /* an argument to the function.                              */   /*===========================================================*/   theLength = strlen(theFunction->restrictions);   if (theLength < 3) return(defaultRestriction);   /*==============================================*/   /* Determine the functions default restriction. */   /*==============================================*/   defaultRestriction = (int) theFunction->restrictions[i];   if (defaultRestriction == '*') defaultRestriction = (int) 'u';   /*=======================================================*/   /* If the requested position does not have a restriction */   /* specified, then return the default restriction.       */   /*=======================================================*/   if (theLength < (size_t) (position + 3)) return(defaultRestriction);   /*=========================================================*/   /* Return the restriction specified for the nth parameter. */   /*=========================================================*/   return((int) theFunction->restrictions[position + 2]);  }/*************************************************//* GetFunctionList: Returns the ListOfFunctions. *//*************************************************/globle struct FunctionDefinition *GetFunctionList(  void *theEnv)  {   return(ExternalFunctionData(theEnv)->ListOfFunctions);  }/**************************************************************//* InstallFunctionList: Sets the ListOfFunctions and adds all *//*   the function entries to the FunctionHashTable.           *//**************************************************************/globle void InstallFunctionList(  void *theEnv,  struct FunctionDefinition *value)  {   int i;   struct FunctionHash *fhPtr, *nextPtr;   if (ExternalFunctionData(theEnv)->FunctionHashtable != NULL)     {      for (i = 0; i < SIZE_FUNCTION_HASH; i++)        {         fhPtr = ExternalFunctionData(theEnv)->FunctionHashtable[i];         while (fhPtr != NULL)           {            nextPtr = fhPtr->next;            rtn_struct(theEnv,FunctionHash,fhPtr);            fhPtr = nextPtr;           }         ExternalFunctionData(theEnv)->FunctionHashtable[i] = NULL;        }     }   ExternalFunctionData(theEnv)->ListOfFunctions = value;   while (value != NULL)     {      AddHashFunction(theEnv,value);      value = value->next;     }  }/********************************************************//* FindFunction: Returns a pointer to the corresponding *//*   FunctionDefinition structure if a function name is *//*   in the function list, otherwise returns NULL.      *//********************************************************/globle struct FunctionDefinition *FindFunction(  void *theEnv,  char *functionName)  {   struct FunctionHash *fhPtr;   unsigned hashValue;   SYMBOL_HN *findValue;   if (ExternalFunctionData(theEnv)->FunctionHashtable == NULL) return(NULL);      hashValue = HashSymbol(functionName,SIZE_FUNCTION_HASH);   findValue = (SYMBOL_HN *) FindSymbolHN(theEnv,functionName);   for (fhPtr = ExternalFunctionData(theEnv)->FunctionHashtable[hashValue];        fhPtr != NULL;        fhPtr = fhPtr->next)     {      if (fhPtr->fdPtr->callFunctionName == findValue)        { return(fhPtr->fdPtr); }     }   return(NULL);  }/*********************************************************//* InitializeFunctionHashTable: Purpose is to initialize *//*   the function hash table to NULL.                    *//*********************************************************/static void InitializeFunctionHashTable(  void *theEnv)  {   int i;   ExternalFunctionData(theEnv)->FunctionHashtable = (struct FunctionHash **)                       gm2(theEnv,(int) sizeof (struct FunctionHash *) *                           SIZE_FUNCTION_HASH);   for (i = 0; i < SIZE_FUNCTION_HASH; i++) ExternalFunctionData(theEnv)->FunctionHashtable[i] = NULL;  }/****************************************************************//* AddHashFunction: Adds a function to the function hash table. *//****************************************************************/static void AddHashFunction(  void *theEnv,  struct FunctionDefinition *fdPtr)  {   struct FunctionHash *newhash, *temp;   unsigned hashValue;   if (ExternalFunctionData(theEnv)->FunctionHashtable == NULL) InitializeFunctionHashTable(theEnv);   newhash = get_struct(theEnv,FunctionHash);   newhash->fdPtr = fdPtr;   hashValue = HashSymbol(fdPtr->callFunctionName->contents,SIZE_FUNCTION_HASH);   temp = ExternalFunctionData(theEnv)->FunctionHashtable[hashValue];   ExternalFunctionData(theEnv)->FunctionHashtable[hashValue] = newhash;   newhash->next = temp;  }/*************************************************//* GetMinimumArgs: Returns the minimum number of *//*   arguments expected by an external function. *//*************************************************/globle int GetMinimumArgs(  struct FunctionDefinition *theFunction)  {   char theChar[2], *restrictions;   restrictions = theFunction->restrictions;   if (restrictions == NULL) return(-1);   theChar[0] = restrictions[0];   theChar[1] = '\0';   if (isdigit(theChar[0]))     { return atoi(theChar); }   else if (theChar[0] == '*')     { return(-1); }      return(-1);   }  /*************************************************//* GetMaximumArgs: Returns the maximum number of *//*   arguments expected by an external function. *//*************************************************/globle int GetMaximumArgs(  struct FunctionDefinition *theFunction)  {   char theChar[2], *restrictions;   restrictions = theFunction->restrictions;   if (restrictions == NULL) return(-1);   if (restrictions[0] == '\0') return(-1);   theChar[0] = restrictions[1];   theChar[1] = '\0';   if (isdigit(theChar[0]))     { return atoi(theChar); }   else if (theChar[0] == '*')     { return(-1); }      return(-1);   }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www.欧美精品一二区| 日本一区二区视频在线| 天天爽夜夜爽夜夜爽精品视频| 色综合色狠狠天天综合色| 欧美激情一区二区| 91免费看`日韩一区二区| 一区二区三区在线视频免费| 欧美性大战久久久久久久| 日韩高清一区在线| 欧美精品一区二区在线观看| 国产成人在线看| 中文字幕在线不卡一区二区三区| 成人午夜电影小说| 亚洲免费观看高清| 在线不卡一区二区| 国产精品18久久久| 一区二区三区鲁丝不卡| 欧美一区二区在线观看| 国产激情精品久久久第一区二区| 日韩毛片视频在线看| 911精品产国品一二三产区| 国产在线不卡一卡二卡三卡四卡| 国产精品久久久久久久岛一牛影视| 91精品1区2区| 精品一区在线看| 亚洲视频一二三区| 日韩欧美国产精品一区| 9l国产精品久久久久麻豆| 婷婷开心激情综合| 国产精品成人免费| 欧美一区二区三区在线看| 丁香天五香天堂综合| 亚洲午夜电影在线观看| 国产欧美综合在线观看第十页| 欧美在线观看一区| 国产一区二区视频在线| 午夜精品成人在线视频| 国产精品久久久久精k8| 日韩欧美成人一区二区| 在线看不卡av| 成人免费高清在线观看| 男人的天堂亚洲一区| 亚洲欧美福利一区二区| 久久久久免费观看| 欧美日韩成人激情| 色婷婷av一区二区三区之一色屋| 国产麻豆精品久久一二三| 亚洲电影第三页| 综合分类小说区另类春色亚洲小说欧美 | 欧美日韩国产高清一区二区三区 | 欧美精品在线一区二区| 成人精品gif动图一区| 免费不卡在线视频| 亚洲国产精品嫩草影院| 亚洲欧美综合网| 欧美激情在线看| 久久久久久久久久看片| 欧美一卡二卡在线| 欧美午夜精品电影| 色哟哟日韩精品| 99久久er热在这里只有精品66| 国产精品一区二区不卡| 久草精品在线观看| 美女免费视频一区| 奇米精品一区二区三区在线观看一 | 国产一区二区免费看| 日韩av中文字幕一区二区| 亚洲一区二区精品久久av| 一区二区三区四区在线| 亚洲男人的天堂av| ...xxx性欧美| 亚洲女与黑人做爰| 亚洲品质自拍视频| 亚洲男人的天堂在线aⅴ视频| 中文字幕欧美一| 中文字幕一区二区在线观看| 综合自拍亚洲综合图不卡区| 国产精品久久久久久久第一福利 | 亚洲美女在线国产| 亚洲摸摸操操av| 一区二区久久久| 亚洲国产日日夜夜| 亚洲成av人片在www色猫咪| 亚洲图片欧美综合| 日韩不卡一二三区| 精品一区二区三区在线播放| 国产一区在线观看麻豆| 岛国一区二区三区| 色www精品视频在线观看| 欧美综合亚洲图片综合区| 欧美色视频一区| 日韩一区二区免费在线观看| 精品国产乱码久久久久久影片| 久久综合九色综合97婷婷女人 | 久久综合久久鬼色| 国产日韩精品一区二区三区| 中文字幕亚洲一区二区av在线| 椎名由奈av一区二区三区| 一区二区在线免费观看| 婷婷久久综合九色国产成人| 久草中文综合在线| 99视频国产精品| 欧美精品欧美精品系列| 久久久青草青青国产亚洲免观| 国产精品免费看片| 亚洲va在线va天堂| 国产一区啦啦啦在线观看| 99久久久久免费精品国产| 欧美日韩在线观看一区二区| 精品少妇一区二区三区免费观看| 亚洲国产精品av| 亚洲自拍偷拍欧美| 韩国理伦片一区二区三区在线播放| caoporen国产精品视频| 538在线一区二区精品国产| 久久这里只有精品首页| 一区二区免费在线播放| 国产福利精品一区二区| 欧美日韩卡一卡二| 久久久久九九视频| 偷拍一区二区三区四区| 丰满岳乱妇一区二区三区 | 日韩精品资源二区在线| 中文字幕一区二区三区不卡在线| 日本成人中文字幕在线视频| 成人免费看的视频| 日韩视频一区二区| 一区二区免费看| 成人h精品动漫一区二区三区| 欧美一区二区三区不卡| 亚洲人成网站色在线观看| 久久精品国产色蜜蜜麻豆| 欧美性三三影院| 国产精品久久久久久久久免费樱桃| 日韩二区三区在线观看| 一本到不卡免费一区二区| 国产欧美日韩中文久久| 日韩精品免费专区| 91福利国产精品| 欧美国产综合色视频| 久久er精品视频| 欧美精品自拍偷拍动漫精品| 亚洲精品视频在线看| 成人自拍视频在线| 久久综合狠狠综合久久综合88| 亚洲成av人**亚洲成av**| 91麻豆精品一区二区三区| 久久久久久久久99精品| 久久99久久99小草精品免视看| 91国产精品成人| 亚洲视频一二三区| 91小宝寻花一区二区三区| 国产女人18水真多18精品一级做| 美日韩一级片在线观看| 欧美一区二区三区性视频| 亚洲午夜精品网| 欧美日韩精品一二三区| 亚洲另类色综合网站| 99国产精品国产精品毛片| 中文字幕欧美日韩一区| 国产成人免费xxxxxxxx| 久久久99精品久久| 国产成人欧美日韩在线电影| wwwwww.欧美系列| 国产在线视频精品一区| ww亚洲ww在线观看国产| 韩国精品主播一区二区在线观看 | 99麻豆久久久国产精品免费 | 日韩一区二区三区免费观看| 日本不卡一二三| 91麻豆精品国产91久久久更新时间| 亚洲国产精品视频| 制服丝袜亚洲播放| 久久精品国产一区二区三区免费看| 欧美一个色资源| 激情六月婷婷久久| 欧美极品aⅴ影院| 99久久精品免费观看| 亚洲精品写真福利| 欧美午夜免费电影| 美女脱光内衣内裤视频久久影院| 日韩一级片网址| 国产在线麻豆精品观看| 国产日韩一级二级三级| 99久久婷婷国产精品综合| 亚洲激情在线播放| 在线91免费看| 国产91丝袜在线18| 亚洲视频在线一区观看| 欧美视频一区二区在线观看| 青娱乐精品视频| 久久久精品tv| 一本大道久久a久久综合| 午夜精品影院在线观看| 欧美白人最猛性xxxxx69交| 懂色av中文字幕一区二区三区 | 亚洲国产一区二区视频| 欧美成人午夜电影| 国产精品亚洲人在线观看| 亚洲女人小视频在线观看|