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

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

?? multifld.c

?? clips源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
   /*******************************************************/   /*      "C" Language Integrated Production System      */   /*                                                     */   /*             CLIPS Version 6.24  06/05/06            */   /*                                                     */   /*                  MULTIFIELD MODULE                  */   /*******************************************************//*************************************************************//* Purpose:                                                  *//*                                                           *//* Principal Programmer(s):                                  *//*      Gary D. Riley                                        *//*                                                           *//* Contributing Programmer(s):                               *//*      Brian L. Donnell                                     *//*                                                           *//* Revision History:                                         *//*                                                           *//*      6.24: Renamed BOOLEAN macro type to intBool.         *//*                                                           *//*            Corrected code to remove compiler warnings.    *//*                                                           *//*            Moved ImplodeMultifield from multifun.c.       *//*                                                           *//*************************************************************/#define _MULTIFLD_SOURCE_#include <stdio.h>#define _STDIO_INCLUDED_#include "setup.h"#include "constant.h"#include "memalloc.h"#include "envrnmnt.h"#include "evaluatn.h"#include "scanner.h"#include "router.h"#include "strngrtr.h"#include "utility.h"#if OBJECT_SYSTEM#include "object.h"#endif#include "multifld.h"/***************************************//* LOCAL INTERNAL FUNCTION DEFINITIONS *//***************************************/   static void                    DeallocateMultifieldData(void *);/***************************************************//* InitializeMultifieldData: Allocates environment *//*    data for multifield values.                  *//***************************************************/globle void InitializeMultifieldData(  void *theEnv)  {   AllocateEnvironmentData(theEnv,MULTIFIELD_DATA,sizeof(struct multifieldData),DeallocateMultifieldData);  }/*****************************************************//* DeallocateMultifieldData: Deallocates environment *//*    data for multifield values.                    *//*****************************************************/static void DeallocateMultifieldData(  void *theEnv)  {   struct multifield *tmpPtr, *nextPtr;       tmpPtr = MultifieldData(theEnv)->ListOfMultifields;   while (tmpPtr != NULL)     {      nextPtr = tmpPtr->next;      ReturnMultifield(theEnv,tmpPtr);      tmpPtr = nextPtr;     }  }/***********************************************************//* CreateMultifield2:       *//***********************************************************/globle void *CreateMultifield2(  void *theEnv,  long size)  {   struct multifield *theSegment;   long newSize = size;   if (size <= 0) newSize = 1;   theSegment = get_var_struct(theEnv,multifield,(long) sizeof(struct field) * (newSize - 1L));   theSegment->multifieldLength = size;   theSegment->depth = (short) EvaluationData(theEnv)->CurrentEvaluationDepth;   theSegment->busyCount = 0;   theSegment->next = NULL;   return((void *) theSegment);  }/*****************************************************************//* ReturnMultifield:                                             *//*****************************************************************/globle void ReturnMultifield(  void *theEnv,  struct multifield *theSegment)  {   unsigned long newSize;   if (theSegment == NULL) return;   if (theSegment->multifieldLength == 0) newSize = 1;   else newSize = theSegment->multifieldLength;   rtn_var_struct(theEnv,multifield,sizeof(struct field) * (newSize - 1),theSegment);  }/******************************//* MultifieldInstall:            *//******************************/globle void MultifieldInstall(  void *theEnv,  struct multifield *theSegment)  {   unsigned long length, i;   struct field *theFields;   if (theSegment == NULL) return;   length = theSegment->multifieldLength;   theSegment->busyCount++;   theFields = theSegment->theFields;   for (i = 0 ; i < length ; i++)     { AtomInstall(theEnv,theFields[i].type,theFields[i].value); }  }/******************************//* MultifieldDeinstall:       *//******************************/globle void MultifieldDeinstall(  void *theEnv,  struct multifield *theSegment)  {   unsigned long length, i;   struct field *theFields;   if (theSegment == NULL) return;   length = theSegment->multifieldLength;   theSegment->busyCount--;   theFields = theSegment->theFields;   for (i = 0 ; i < length ; i++)     { AtomDeinstall(theEnv,theFields[i].type,theFields[i].value); }  }/*******************************************************//* StringToMultifield:  Returns a multifield structure *//*    that represents the string sent as the argument. *//*******************************************************/globle struct multifield *StringToMultifield(  void *theEnv,  char *theString)  {   struct token theToken;   struct multifield *theSegment;   struct field *theFields;   unsigned long numberOfFields = 0;   struct expr *topAtom = NULL, *lastAtom = NULL, *theAtom;   /*====================================================*/   /* Open the string as an input source and read in the */   /* list of values to be stored in the multifield.     */   /*====================================================*/   OpenStringSource(theEnv,"multifield-str",theString,0);   GetToken(theEnv,"multifield-str",&theToken);   while (theToken.type != STOP)     {      if ((theToken.type == SYMBOL) || (theToken.type == STRING) ||          (theToken.type == FLOAT) || (theToken.type == INTEGER) ||          (theToken.type == INSTANCE_NAME))        { theAtom = GenConstant(theEnv,theToken.type,theToken.value); }      else        { theAtom = GenConstant(theEnv,STRING,EnvAddSymbol(theEnv,theToken.printForm)); }      numberOfFields++;      if (topAtom == NULL) topAtom = theAtom;      else lastAtom->nextArg = theAtom;      lastAtom = theAtom;      GetToken(theEnv,"multifield-str",&theToken);     }   CloseStringSource(theEnv,"multifield-str");   /*====================================================================*/   /* Create a multifield of the appropriate size for the values parsed. */   /*====================================================================*/   theSegment = (struct multifield *) EnvCreateMultifield(theEnv,numberOfFields);   theFields = theSegment->theFields;   /*====================================*/   /* Copy the values to the multifield. */   /*====================================*/   theAtom = topAtom;   numberOfFields = 0;   while (theAtom != NULL)     {      theFields[numberOfFields].type = theAtom->type;      theFields[numberOfFields].value = theAtom->value;      numberOfFields++;      theAtom = theAtom->nextArg;     }   /*===========================*/   /* Return the parsed values. */   /*===========================*/   ReturnExpression(theEnv,topAtom);   /*============================*/   /* Return the new multifield. */   /*============================*/   return(theSegment);  }  /**************************************************************//* EnvCreateMultifield: Creates a multifield of the specified *//*   size and adds it to the list of segments.                *//**************************************************************/globle void *EnvCreateMultifield(  void *theEnv,  long size)  {   struct multifield *theSegment;   long newSize;   if (size <= 0) newSize = 1;   else newSize = size;   theSegment = get_var_struct(theEnv,multifield,(long) sizeof(struct field) * (newSize - 1L));   theSegment->multifieldLength = size;   theSegment->depth = (short) EvaluationData(theEnv)->CurrentEvaluationDepth;   theSegment->busyCount = 0;   theSegment->next = NULL;   theSegment->next = MultifieldData(theEnv)->ListOfMultifields;   MultifieldData(theEnv)->ListOfMultifields = theSegment;   UtilityData(theEnv)->EphemeralItemCount++;   UtilityData(theEnv)->EphemeralItemSize += sizeof(struct multifield) + (sizeof(struct field) * newSize);   return((void *) theSegment);  }/*********************************************************************//* DOToMultifield:    *//*********************************************************************/globle void *DOToMultifield(  void *theEnv,  DATA_OBJECT *theValue)  {   struct multifield *dst, *src;   if (theValue->type != MULTIFIELD) return(NULL);   dst = (struct multifield *) CreateMultifield2(theEnv,(unsigned long) GetpDOLength(theValue));   src = (struct multifield *) theValue->value;   GenCopyMemory(struct field,dst->multifieldLength,              &(dst->theFields[0]),&(src->theFields[GetpDOBegin(theValue) - 1]));   return((void *) dst);  }/***********************************************************//* AddToMultifieldList:                                       *//***********************************************************/globle void AddToMultifieldList(  void *theEnv,  struct multifield *theSegment)  {   theSegment->depth = (short) EvaluationData(theEnv)->CurrentEvaluationDepth;   theSegment->next = MultifieldData(theEnv)->ListOfMultifields;   MultifieldData(theEnv)->ListOfMultifields = theSegment;   UtilityData(theEnv)->EphemeralItemCount++;   UtilityData(theEnv)->EphemeralItemSize += sizeof(struct multifield) + (sizeof(struct field) * theSegment->multifieldLength);  }/***********************************************************//* FlushMultifields:                                         *//***********************************************************/globle void FlushMultifields(  void *theEnv)  {   struct multifield *theSegment, *nextPtr, *lastPtr = NULL;   unsigned long newSize;   theSegment = MultifieldData(theEnv)->ListOfMultifields;   while (theSegment != NULL)     {      nextPtr = theSegment->next;      if ((theSegment->depth > EvaluationData(theEnv)->CurrentEvaluationDepth) && (theSegment->busyCount == 0))        {         UtilityData(theEnv)->EphemeralItemCount--;         UtilityData(theEnv)->EphemeralItemSize -= sizeof(struct multifield) +                              (sizeof(struct field) * theSegment->multifieldLength);         if (theSegment->multifieldLength == 0) newSize = 1;         else newSize = theSegment->multifieldLength;         rtn_var_struct(theEnv,multifield,sizeof(struct field) * (newSize - 1),theSegment);         if (lastPtr == NULL) MultifieldData(theEnv)->ListOfMultifields = nextPtr;         else lastPtr->next = nextPtr;        }      else        { lastPtr = theSegment; }      theSegment = nextPtr;     }  }/*********************************************************************//* DuplicateMultifield: Allocates a new segment and copies results from *//*                  old value to new - NOT put on ListOfMultifields!!   *//*********************************************************************/globle void DuplicateMultifield(  void *theEnv,  DATA_OBJECT_PTR dst,  DATA_OBJECT_PTR src)  {   dst->type = MULTIFIELD;   dst->begin = 0;   dst->end = src->end - src->begin;   dst->value = (void *) CreateMultifield2(theEnv,(unsigned long) dst->end + 1);   GenCopyMemory(struct field,dst->end + 1,&((struct multifield *) dst->value)->theFields[0],                                        &((struct multifield *) src->value)->theFields[src->begin]);  }/*********************************************************************//* CopyMultifield:    *//*********************************************************************/globle void *CopyMultifield(  void *theEnv,  struct multifield *src)  {   struct multifield *dst;   dst = (struct multifield *) CreateMultifield2(theEnv,src->multifieldLength);   GenCopyMemory(struct field,src->multifieldLength,&(dst->theFields[0]),&(src->theFields[0]));   return((void *) dst);  }/**********************************************************//* PrintMultifield: Prints out a multifield               *//**********************************************************/globle void PrintMultifield(  void *theEnv,  char *fileid,  struct multifield *segment,  long begin,  long end,  int printParens)  {   struct field *theMultifield;   int i;   theMultifield = segment->theFields;   if (printParens)     EnvPrintRouter(theEnv,fileid,"(");   i = begin;   while (i <= end)     {      PrintAtom(theEnv,fileid,theMultifield[i].type,theMultifield[i].value);      i++;      if (i <= end) EnvPrintRouter(theEnv,fileid," ");     }   if (printParens)     EnvPrintRouter(theEnv,fileid,")");  }/*****************************************************//* StoreInMultifield:  Append function for segments. *//*****************************************************/globle void StoreInMultifield(  void *theEnv,  DATA_OBJECT *returnValue,  EXPRESSION *expptr,  int garbageSegment)  {   DATA_OBJECT val_ptr;   DATA_OBJECT *val_arr;   struct multifield *theMultifield;   struct multifield *orig_ptr;   long start, end, i,j, k, argCount;   unsigned long seg_size;   argCount = CountArguments(expptr);   /*=========================================*/   /* If no arguments are given return a NULL */   /* multifield of length zero.              */   /*=========================================*/   if (argCount == 0)     {      SetpType(returnValue,MULTIFIELD);      SetpDOBegin(returnValue,1);      SetpDOEnd(returnValue,0);      if (garbageSegment) theMultifield = (struct multifield *) EnvCreateMultifield(theEnv,0L);      else theMultifield = (struct multifield *) CreateMultifield2(theEnv,0L);      SetpValue(returnValue,(void *) theMultifield);      return;     }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一二三级电影| 国产精品一区专区| 国产在线精品一区在线观看麻豆| 国产精品一区一区| 日本高清不卡在线观看| 久久久久99精品一区| 亚洲va韩国va欧美va精品| 国产福利一区二区三区| 欧美一三区三区四区免费在线看| 成人欧美一区二区三区白人| 蜜臀久久99精品久久久久宅男 | 国产精品美女久久久久久久网站| 天堂午夜影视日韩欧美一区二区| www.在线欧美| 久久一区二区三区国产精品| 视频一区视频二区中文| 一本色道综合亚洲| 国产欧美精品日韩区二区麻豆天美| 视频一区二区中文字幕| 欧美色网站导航| 亚洲男人的天堂av| 本田岬高潮一区二区三区| 欧美精品一区二| 全国精品久久少妇| 日韩一级完整毛片| 爽好久久久欧美精品| 日本道精品一区二区三区| 国产精品欧美综合在线| 国产精品一级片在线观看| 精品国产露脸精彩对白| 精品亚洲免费视频| 日韩视频一区二区在线观看| 蜜桃视频在线观看一区| 日韩欧美国产系列| 青青国产91久久久久久| 欧美成人一区二区三区在线观看| 日韩av高清在线观看| 欧美一区二区三区视频在线| 青青草一区二区三区| 日韩欧美在线1卡| 美国一区二区三区在线播放| 精品国一区二区三区| 国产一区二区福利视频| 国产亚洲综合性久久久影院| 国产成人欧美日韩在线电影| 国产精品美女久久久久久久久久久| 99久久婷婷国产综合精品电影 | 亚洲另类在线制服丝袜| 91麻豆精东视频| 亚洲高清不卡在线观看| 69堂国产成人免费视频| 久久国产欧美日韩精品| 国产日韩视频一区二区三区| 99精品久久只有精品| 亚洲精品国产视频| 欧美一级精品大片| 国产精品一区不卡| 亚洲精品免费看| 欧美日本在线一区| 国产麻豆精品在线观看| 国产精品对白交换视频| 欧美日精品一区视频| 精品一区二区三区在线视频| 国产视频在线观看一区二区三区| 99久久99久久久精品齐齐| 亚洲国产裸拍裸体视频在线观看乱了| 日韩欧美电影一区| heyzo一本久久综合| 日韩激情一二三区| 国产精品天干天干在线综合| 欧美日韩国产一级二级| 久久精工是国产品牌吗| 亚洲精品伦理在线| 久久综合九色综合97婷婷| 色综合天天天天做夜夜夜夜做| 日日摸夜夜添夜夜添亚洲女人| 国产日韩v精品一区二区| 欧美亚洲国产一区二区三区| 国产一区二区伦理片| 亚洲午夜成aⅴ人片| 久久精品视频免费| 91精品国产色综合久久| 91.麻豆视频| 国产成人av一区二区三区在线 | 激情另类小说区图片区视频区| 国产精品国产a级| 欧美成人一区二区| 欧美少妇性性性| 成人午夜视频福利| 美女网站在线免费欧美精品| 亚洲精品视频免费观看| 国产欧美精品一区aⅴ影院| 日韩一级完整毛片| 欧美日韩视频专区在线播放| a在线播放不卡| 国产酒店精品激情| 久久69国产一区二区蜜臀| 亚洲国产日韩a在线播放| 国产精品激情偷乱一区二区∴| 欧美成人一区二区三区片免费| 欧美综合一区二区| 91在线观看美女| 福利视频网站一区二区三区| 国产一区二区三区香蕉| 日本强好片久久久久久aaa| 亚洲另类在线制服丝袜| 亚洲欧美另类小说视频| 国产欧美一区在线| 国产欧美日韩另类视频免费观看| 欧美va在线播放| 日韩一区二区影院| 7777精品伊人久久久大香线蕉的| 欧美视频在线一区二区三区 | 色综合色狠狠天天综合色| 国产v日产∨综合v精品视频| 国产一区二区三区蝌蚪| 国产在线精品不卡| 精品一区二区免费在线观看| 狠狠v欧美v日韩v亚洲ⅴ| 麻豆精品视频在线观看视频| 麻豆精品国产91久久久久久| 日韩av一区二区三区四区| 全国精品久久少妇| 九九在线精品视频| 国产精品综合二区| 国产1区2区3区精品美女| 国产jizzjizz一区二区| 99久久综合99久久综合网站| 91社区在线播放| 欧美日韩一区二区三区视频| 337p亚洲精品色噜噜噜| 欧美成人福利视频| 久久你懂得1024| 国产精品情趣视频| 亚洲午夜激情av| 美女一区二区在线观看| 国产成人综合网站| 91国偷自产一区二区三区观看| 欧美日韩在线免费视频| 欧美一区二区视频网站| 久久久久久久网| 中文字幕在线不卡视频| 亚洲一区二区三区四区在线观看| 日韩精品1区2区3区| 国产精品自在欧美一区| 91久久精品一区二区三| 日韩欧美国产一区二区三区| 国产精品沙发午睡系列990531| 亚洲人精品午夜| 日本亚洲免费观看| 丁香亚洲综合激情啪啪综合| 欧美日韩和欧美的一区二区| 久久精品免费在线观看| 亚洲图片有声小说| 国产一区久久久| 欧美自拍丝袜亚洲| 国产日产欧美精品一区二区三区| 亚洲一区二区av电影| 国产精品自拍网站| 欧美一级黄色片| 自拍偷拍亚洲欧美日韩| 美洲天堂一区二卡三卡四卡视频 | 久久久久久97三级| 亚洲激情中文1区| 久久99热狠狠色一区二区| 99国产欧美另类久久久精品| 欧美不卡一二三| 亚洲午夜电影网| www.欧美色图| 精品对白一区国产伦| 亚洲成av人片在www色猫咪| 粉嫩在线一区二区三区视频| 91精品免费在线观看| 亚洲免费在线观看视频| 国产不卡一区视频| 日韩免费电影一区| 亚洲一区二区视频在线| 99这里只有久久精品视频| 久久精品夜夜夜夜久久| 免费欧美日韩国产三级电影| 欧美午夜一区二区三区 | 精品免费日韩av| 亚洲成人综合在线| 91麻豆国产精品久久| 国产精品美女久久久久aⅴ国产馆| 久久精品久久久精品美女| 欧美精品自拍偷拍| 亚洲制服丝袜一区| 日本乱人伦一区| 国产精品国产三级国产有无不卡 | 2023国产一二三区日本精品2022| 天天av天天翘天天综合网| 色老头久久综合| 亚洲色图.com| 92精品国产成人观看免费| 日本一区二区三区高清不卡| 国产一区二三区| 国产香蕉久久精品综合网| 国产一区二区三区在线观看免费| 精品av综合导航|