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

📄 objbin.c

📁 NASA 开发使用的一个专家系统
💻 C
📖 第 1 页 / 共 4 页
字号:
   dummy_class.id = cls->id;   dummy_class.slotCount = cls->slotCount;   dummy_class.instanceSlotCount = cls->instanceSlotCount;   dummy_class.localInstanceSlotCount = cls->localInstanceSlotCount;   dummy_class.maxSlotNameID = cls->maxSlotNameID;   dummy_class.handlerCount = cls->handlerCount;   dummy_class.directSuperclasses.classCount = cls->directSuperclasses.classCount;   dummy_class.directSubclasses.classCount = cls->directSubclasses.classCount;   dummy_class.allSuperclasses.classCount = cls->allSuperclasses.classCount;   if (cls->directSuperclasses.classCount != 0)     {      dummy_class.directSuperclasses.classArray = LinkCount;      LinkCount += cls->directSuperclasses.classCount;     }   else     dummy_class.directSuperclasses.classArray = -1L;   if (cls->directSubclasses.classCount != 0)     {      dummy_class.directSubclasses.classArray = LinkCount;      LinkCount += cls->directSubclasses.classCount;     }   else     dummy_class.directSubclasses.classArray = -1L;   if (cls->allSuperclasses.classCount != 0)     {      dummy_class.allSuperclasses.classArray = LinkCount;      LinkCount += cls->allSuperclasses.classCount;     }   else     dummy_class.allSuperclasses.classArray = -1L;   if (cls->slots != NULL)     {      dummy_class.slots = SlotCount;      SlotCount += cls->slotCount;     }   else     dummy_class.slots = -1L;   if (cls->instanceTemplate != NULL)     {      dummy_class.instanceTemplate = TemplateSlotCount;      TemplateSlotCount += cls->instanceSlotCount;      dummy_class.slotNameMap = SlotNameMapCount;      SlotNameMapCount += cls->maxSlotNameID + 1;     }   else     {      dummy_class.instanceTemplate = -1L;      dummy_class.slotNameMap = -1L;     }   if (cls->handlers != NULL)     {      dummy_class.handlers = HandlerCount;      HandlerCount += cls->handlerCount;     }   else     dummy_class.handlers = -1L;#if DEFMODULE_CONSTRUCT   dummy_class.scopeMap = (long) cls->scopeMap->bucket;#else   dummy_class.scopeMap = -1L;#endif   GenWrite((VOID *) &dummy_class,(UNLN) sizeof(BSAVE_DEFCLASS),(FILE *) buf);  }/***************************************************  NAME         : BsaveClassLinks  DESCRIPTION  : Writes class links binary data  INPUTS       : 1) The defclass                 2) The binary file pointer  RETURNS      : Nothing useful  SIDE EFFECTS : Defclass links binary data written  NOTES        : None ***************************************************/static VOID BsaveClassLinks(theDefclass,buf)  struct constructHeader *theDefclass;  VOID *buf;  {   DEFCLASS *cls = (DEFCLASS *) theDefclass;   register unsigned i;   long dummy_class_index;      for (i = 0 ;  i < cls->directSuperclasses.classCount ; i++)     {      dummy_class_index = DefclassIndex(cls->directSuperclasses.classArray[i]);      GenWrite((VOID *) &dummy_class_index,(UNLN) sizeof(long),(FILE *) buf);     }   LinkCount += cls->directSuperclasses.classCount;   for (i = 0 ;  i < cls->directSubclasses.classCount ; i++)     {      dummy_class_index = DefclassIndex(cls->directSubclasses.classArray[i]);      GenWrite((VOID *) &dummy_class_index,(UNLN) sizeof(long),(FILE *) buf);     }   LinkCount += cls->directSubclasses.classCount;   for (i = 0 ;  i < cls->allSuperclasses.classCount ; i++)     {      dummy_class_index = DefclassIndex(cls->allSuperclasses.classArray[i]);      GenWrite((VOID *) &dummy_class_index,(UNLN) sizeof(long),(FILE *) buf);     }   LinkCount += cls->allSuperclasses.classCount;  }/***************************************************  NAME         : BsaveSlots  DESCRIPTION  : Writes class slots binary data  INPUTS       : 1) The defclass                 2) The binary file pointer  RETURNS      : Nothing useful  SIDE EFFECTS : Defclass slots binary data written  NOTES        : None ***************************************************/static VOID BsaveSlots(theDefclass,buf)  struct constructHeader *theDefclass;  VOID *buf;  {   DEFCLASS *cls = (DEFCLASS *) theDefclass;   register unsigned i;   BSAVE_SLOT_DESC dummy_slot;   SLOT_DESC *sp;   EXPRESSION *tmpexp;      for (i = 0 ; i < cls->slotCount ; i++)     {      sp = &cls->slots[i];      dummy_slot.dynamicDefault = sp->dynamicDefault;      dummy_slot.noDefault = sp->noDefault;      dummy_slot.shared = sp->shared;      dummy_slot.multiple = sp->multiple;      dummy_slot.composite = sp->composite;      dummy_slot.noInherit = sp->noInherit;      dummy_slot.noWrite = sp->noWrite;      dummy_slot.initializeOnly = sp->initializeOnly;      dummy_slot.reactive = sp->reactive;      dummy_slot.publicVisibility = sp->publicVisibility;      dummy_slot.createReadAccessor = sp->createReadAccessor;      dummy_slot.createWriteAccessor = sp->createWriteAccessor;      dummy_slot.cls = DefclassIndex(sp->cls);      dummy_slot.slotName = SlotNameIndex(sp->slotName);      dummy_slot.overrideMessage = (long) sp->overrideMessage->bucket;      if (sp->defaultValue != NULL)        {         dummy_slot.defaultValue = ExpressionCount;         if (sp->dynamicDefault)           ExpressionCount += ExpressionSize((EXPRESSION *) sp->defaultValue);         else           {            tmpexp = ConvertValueToExpression((DATA_OBJECT *) sp->defaultValue);            ExpressionCount += ExpressionSize(tmpexp);            ReturnExpression(tmpexp);           }        }      else        dummy_slot.defaultValue = -1L;      dummy_slot.constraint = ConstraintIndex(sp->constraint);      GenWrite((VOID *) &dummy_slot,(UNLN) sizeof(BSAVE_SLOT_DESC),(FILE *) buf);     }  }/**************************************************************  NAME         : BsaveTemplateSlots  DESCRIPTION  : Writes class instance template binary data  INPUTS       : 1) The defclass                 2) The binary file pointer  RETURNS      : Nothing useful  SIDE EFFECTS : Defclass instance template binary data written  NOTES        : None **************************************************************/static VOID BsaveTemplateSlots(theDefclass,buf)  struct constructHeader *theDefclass;  VOID *buf;  {   DEFCLASS *cls = (DEFCLASS *) theDefclass;   register unsigned i;   long tsp;      for (i = 0 ; i < cls->instanceSlotCount ; i++)     {      tsp = SlotIndex(cls->instanceTemplate[i]);      GenWrite((VOID *) &tsp,(UNLN) sizeof(long),(FILE *) buf);     }  }  /***************************************************************  NAME         : BsaveSlotMap  DESCRIPTION  : Writes class canonical slot map binary data  INPUTS       : 1) The defclass                 2) The binary file pointer  RETURNS      : Nothing useful  SIDE EFFECTS : Defclass canonical slot map binary data written  NOTES        : None ***************************************************************/static VOID BsaveSlotMap(theDefclass,buf)  struct constructHeader *theDefclass;  VOID *buf;  {   DEFCLASS *cls = (DEFCLASS *) theDefclass;      if (cls->instanceSlotCount != 0)     GenWrite((VOID *) cls->slotNameMap,              (UNLN) (sizeof(unsigned) * (cls->maxSlotNameID + 1)),(FILE *) buf);  }  /************************************************************  NAME         : BsaveHandlers  DESCRIPTION  : Writes class message-handlers binary data  INPUTS       : 1) The defclass                 2) The binary file pointer  RETURNS      : Nothing useful  SIDE EFFECTS : Defclass message-handler binary data written  NOTES        : None ************************************************************/static VOID BsaveHandlers(theDefclass,buf)  struct constructHeader *theDefclass;  VOID *buf;  {   DEFCLASS *cls = (DEFCLASS *) theDefclass;   register unsigned i;   BSAVE_HANDLER dummy_handler;   HANDLER *hnd;      for (i = 0 ; i < cls->handlerCount ; i++)     {      hnd = &cls->handlers[i];      dummy_handler.system = hnd->system;      dummy_handler.type = hnd->type;      dummy_handler.minParams = hnd->minParams;      dummy_handler.maxParams = hnd->maxParams;      dummy_handler.localVarCount = hnd->localVarCount;      dummy_handler.cls = DefclassIndex(hnd->cls);      dummy_handler.name = (long) hnd->name->bucket;      if (hnd->actions != NULL)        {         dummy_handler.actions = ExpressionCount;         ExpressionCount += ExpressionSize(hnd->actions);        }      else        dummy_handler.actions = -1L;      GenWrite((VOID *) &dummy_handler,(UNLN) sizeof(BSAVE_HANDLER),(FILE *) buf);     }  }  /****************************************************************  NAME         : BsaveHandlerMap  DESCRIPTION  : Writes class message-handler map binary data  INPUTS       : 1) The defclass                 2) The binary file pointer  RETURNS      : Nothing useful  SIDE EFFECTS : Defclass message-handler map binary data written  NOTES        : None ****************************************************************/static VOID BsaveHandlerMap(theDefclass,buf)  struct constructHeader *theDefclass;  VOID *buf;  {   DEFCLASS *cls = (DEFCLASS *) theDefclass;   GenWrite((VOID *) cls->handlerOrderMap,            (UNLN) (sizeof(unsigned) * cls->handlerCount),(FILE *) buf);  }  #endif/***********************************************************************  NAME         : BloadStorageObjects  DESCRIPTION  : This routine reads class and handler information from                 a binary file in five chunks:                 Class count                 Handler count                 Class array                 Handler array  INPUTS       : Notthing  RETURNS      : Nothing useful  SIDE EFFECTS : Arrays allocated and set  NOTES        : This routine makes no attempt to reset any pointers                   within the structures                 Bload fails if there are still classes in the system!! ***********************************************************************/static VOID BloadStorageObjects()  {   UNLN space;   long counts[9];      if ((ClassIDMap != NULL) || (MaxClassID != 0))     {      CLIPSSystemError("OBJBIN",1);      ExitCLIPS(2);     }   GenRead((VOID *) &space,(UNLN) sizeof(UNLN));   if (space == 0L)     {      ClassCount = HandlerCount = 0L;      return;     }   GenRead((VOID *) counts,space);   ModuleCount = counts[0];   ClassCount = counts[1];   LinkCount = counts[2];   SlotNameCount = counts[3];   SlotCount = counts[4];   TemplateSlotCount = counts[5];   SlotNameMapCount = counts[6];   HandlerCount = counts[7];   MaxClassID = (unsigned short) counts[8];   if (ModuleCount != 0L)     {      space = (UNLN) (sizeof(DEFCLASS_MODULE) * ModuleCount);      ModuleArray = (DEFCLASS_MODULE HUGE_ADDR *) genlongalloc(space);     }   if (ClassCount != 0L)     {      space = (UNLN) (sizeof(DEFCLASS) * ClassCount);      defclassArray = (DEFCLASS HUGE_ADDR *) genlongalloc(space);      ClassIDMap = (DEFCLASS **) gm2((int) (sizeof(DEFCLASS *) * MaxClassID));     }   if (LinkCount != 0L)     {      space = (UNLN) (sizeof(DEFCLASS *) * LinkCount);      linkArray = (DEFCLASS * HUGE_ADDR *) genlongalloc(space);     }    if (SlotCount != 0L)     {      space = (UNLN) (sizeof(SLOT_DESC) * SlotCount);      slotArray = (SLOT_DESC HUGE_ADDR *) genlongalloc(space);     }    if (SlotNameCount != 0L)     {      space = (UNLN) (sizeof(SLOT_NAME) * SlotNameCount);      slotNameArray = (SLOT_NAME HUGE_ADDR *) genlongalloc(space);     }    if (TemplateSlotCount != 0L)     {      space = (UNLN) (sizeof(SLOT_DESC *) * TemplateSlotCount);      tmpslotArray = (SLOT_DESC * HUGE_ADDR *) genlongalloc(space);     }   if (SlotNameMapCount != 0L)     {      space = (UNLN) (sizeof(unsigned) * SlotNameMapCount);      mapslotArray = (unsigned HUGE_ADDR *) genlongalloc(space);     }    if (HandlerCount != 0L)     {      space = (UNLN) (sizeof(HANDLER) * HandlerCount);      handlerArray = (HANDLER HUGE_ADDR *) genlongalloc(space);      space = (UNLN) (sizeof(unsigned) * HandlerCount);      maphandlerArray = (unsigned HUGE_ADDR *) genlongalloc(space);     }   }/***************************************************************  NAME         : BloadObjects  DESCRIPTION  : This routine moves through the class and handler                   binary arrays updating pointers  INPUTS       : None  RETURNS      : Nothing useful  SIDE EFFECTS : Pointers reset from array indices  NOTES        : Assumes all loading is finished **************************************************************/static VOID BloadObjects()  {   UNLN space;      GenRead((VOID *) &space,(UNLN) sizeof(UNLN));   if (space == 0L)     return;   if (ModuleCount != 0L)     BloadandRefresh(ModuleCount,(unsigned) sizeof(BSAVE_DEFCLASS_MODULE),UpdateDefclassModule);

⌨️ 快捷键说明

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