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

📄 objbin.c

📁 clips源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
  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(  void *theEnv)  {   size_t space;   GenReadBinary(theEnv,(void *) &space,sizeof(size_t));   if (space == 0L)     return;   if (ObjectBinaryData(theEnv)->ModuleCount != 0L)     BloadandRefresh(theEnv,ObjectBinaryData(theEnv)->ModuleCount,sizeof(BSAVE_DEFCLASS_MODULE),UpdateDefclassModule);   if (ObjectBinaryData(theEnv)->ClassCount != 0L)     {      BloadandRefresh(theEnv,ObjectBinaryData(theEnv)->ClassCount,sizeof(BSAVE_DEFCLASS),UpdateDefclass);      BloadandRefresh(theEnv,ObjectBinaryData(theEnv)->LinkCount,sizeof(DEFCLASS *),UpdateLink);      BloadandRefresh(theEnv,ObjectBinaryData(theEnv)->SlotNameCount,sizeof(BSAVE_SLOT_NAME),UpdateSlotName);      BloadandRefresh(theEnv,ObjectBinaryData(theEnv)->SlotCount,sizeof(BSAVE_SLOT_DESC),UpdateSlot);      if (ObjectBinaryData(theEnv)->TemplateSlotCount != 0L)        BloadandRefresh(theEnv,ObjectBinaryData(theEnv)->TemplateSlotCount,sizeof(long),UpdateTemplateSlot);      if (ObjectBinaryData(theEnv)->SlotNameMapCount != 0L)        {         space = (sizeof(unsigned) * ObjectBinaryData(theEnv)->SlotNameMapCount);         GenReadBinary(theEnv,(void *) ObjectBinaryData(theEnv)->MapslotArray,space);        }      if (ObjectBinaryData(theEnv)->HandlerCount != 0L)        {         BloadandRefresh(theEnv,ObjectBinaryData(theEnv)->HandlerCount,sizeof(BSAVE_HANDLER),UpdateHandler);         space = (sizeof(unsigned) * ObjectBinaryData(theEnv)->HandlerCount);         GenReadBinary(theEnv,(void *) ObjectBinaryData(theEnv)->MaphandlerArray,space);        }      UpdatePrimitiveClassesMap(theEnv);     }  }/***************************************************  NAME         : UpdatePrimitiveClassesMap  DESCRIPTION  : Resets the pointers for the global                 primitive classes map  INPUTS       : None  RETURNS      : Nothing useful  SIDE EFFECTS : PrimitiveClassMap pointers set                 into bload array  NOTES        : Looks at first nine primitive type                 codes in the source file CONSTANT.H ***************************************************/static void UpdatePrimitiveClassesMap(  void *theEnv)  {   register unsigned i;   for (i = 0 ; i < OBJECT_TYPE_CODE ; i++)     DefclassData(theEnv)->PrimitiveClassMap[i] = (DEFCLASS *) &ObjectBinaryData(theEnv)->DefclassArray[i];  }/*********************************************************  Refresh update routines for bsaved COOL structures *********************************************************/static void UpdateDefclassModule(  void *theEnv,  void *buf,  long obji)  {   BSAVE_DEFCLASS_MODULE *bdptr;   bdptr = (BSAVE_DEFCLASS_MODULE *) buf;   UpdateDefmoduleItemHeader(theEnv,&bdptr->header,&ObjectBinaryData(theEnv)->ModuleArray[obji].header,                             (int) sizeof(DEFCLASS),(void *) ObjectBinaryData(theEnv)->DefclassArray);  }static void UpdateDefclass(  void *theEnv,  void *buf,  long obji)  {   BSAVE_DEFCLASS *bcls;   DEFCLASS *cls;   bcls = (BSAVE_DEFCLASS *) buf;   cls = (DEFCLASS *) &ObjectBinaryData(theEnv)->DefclassArray[obji];   UpdateConstructHeader(theEnv,&bcls->header,&cls->header,                         (int) sizeof(DEFCLASS_MODULE),(void *) ObjectBinaryData(theEnv)->ModuleArray,                         (int) sizeof(DEFCLASS),(void *) ObjectBinaryData(theEnv)->DefclassArray);   cls->abstract = bcls->abstract;   cls->reactive = bcls->reactive;   cls->system = bcls->system;   cls->id = bcls->id;   DefclassData(theEnv)->ClassIDMap[cls->id] = cls;#if DEBUGGING_FUNCTIONS   cls->traceInstances = DefclassData(theEnv)->WatchInstances;   cls->traceSlots = DefclassData(theEnv)->WatchSlots;#endif   cls->slotCount = bcls->slotCount;   cls->instanceSlotCount = bcls->instanceSlotCount;   cls->localInstanceSlotCount = bcls->localInstanceSlotCount;   cls->maxSlotNameID = bcls->maxSlotNameID;   cls->handlerCount = bcls->handlerCount;   cls->directSuperclasses.classCount =bcls->directSuperclasses.classCount;   cls->directSuperclasses.classArray = LinkPointer(bcls->directSuperclasses.classArray);   cls->directSubclasses.classCount =bcls->directSubclasses.classCount;   cls->directSubclasses.classArray = LinkPointer(bcls->directSubclasses.classArray);   cls->allSuperclasses.classCount =bcls->allSuperclasses.classCount;   cls->allSuperclasses.classArray = LinkPointer(bcls->allSuperclasses.classArray);   cls->slots = SlotPointer(bcls->slots);   cls->instanceTemplate = TemplateSlotPointer(bcls->instanceTemplate);   cls->slotNameMap = OrderedSlotPointer(bcls->slotNameMap);   cls->instanceList = NULL;   cls->handlers = HandlerPointer(bcls->handlers);   cls->handlerOrderMap = OrderedHandlerPointer(bcls->handlers);   cls->installed = 1;   cls->busy = 0;   cls->instanceList = NULL;   cls->instanceListBottom = NULL;#if DEFMODULE_CONSTRUCT   cls->scopeMap = BitMapPointer(bcls->scopeMap);   IncrementBitMapCount(cls->scopeMap);#else   cls->scopeMap = NULL;#endif   PutClassInTable(theEnv,cls);  }static void UpdateLink(  void *theEnv,  void *buf,  long obji)  {   long *blink;      blink = (long *) buf;   ObjectBinaryData(theEnv)->LinkArray[obji] = DefclassPointer(*blink);  }static void UpdateSlot(  void *theEnv,  void *buf,  long obji)  {   SLOT_DESC *sp;   BSAVE_SLOT_DESC *bsp;   sp = (SLOT_DESC *) &ObjectBinaryData(theEnv)->SlotArray[obji];   bsp = (BSAVE_SLOT_DESC *) buf;   sp->dynamicDefault = bsp->dynamicDefault;   sp->noDefault = bsp->noDefault;   sp->shared = bsp->shared;   sp->multiple = bsp->multiple;   sp->composite = bsp->composite;   sp->noInherit = bsp->noInherit;   sp->noWrite = bsp->noWrite;   sp->initializeOnly = bsp->initializeOnly;   sp->reactive = bsp->reactive;   sp->publicVisibility = bsp->publicVisibility;   sp->createReadAccessor = bsp->createReadAccessor;   sp->createWriteAccessor = bsp->createWriteAccessor;   sp->cls = DefclassPointer(bsp->cls);   sp->slotName = SlotNamePointer(bsp->slotName);   sp->overrideMessage = SymbolPointer(bsp->overrideMessage);   IncrementSymbolCount(sp->overrideMessage);   if (bsp->defaultValue != -1L)     {      if (sp->dynamicDefault)        sp->defaultValue = (void *) ExpressionPointer(bsp->defaultValue);      else        {         sp->defaultValue = (void *) get_struct(theEnv,dataObject);         EvaluateAndStoreInDataObject(theEnv,(int) sp->multiple,ExpressionPointer(bsp->defaultValue),                                      (DATA_OBJECT *) sp->defaultValue,TRUE);         ValueInstall(theEnv,(DATA_OBJECT *) sp->defaultValue);        }     }   else     sp->defaultValue = NULL;   sp->constraint = ConstraintPointer(bsp->constraint);   sp->sharedCount = 0;   sp->sharedValue.value = NULL;   sp->bsaveIndex = 0L;   if (sp->shared)     {      sp->sharedValue.desc = sp;      sp->sharedValue.value = NULL;     }  }static void UpdateSlotName(  void *theEnv,  void *buf,  long obji)  {   SLOT_NAME *snp;   BSAVE_SLOT_NAME *bsnp;   bsnp = (BSAVE_SLOT_NAME *) buf;   snp = (SLOT_NAME *) &ObjectBinaryData(theEnv)->SlotNameArray[obji];   snp->id = bsnp->id;   snp->name = SymbolPointer(bsnp->name);   IncrementSymbolCount(snp->name);   snp->putHandlerName = SymbolPointer(bsnp->putHandlerName);   IncrementSymbolCount(snp->putHandlerName);   snp->hashTableIndex = bsnp->hashTableIndex;   snp->nxt = DefclassData(theEnv)->SlotNameTable[snp->hashTableIndex];   DefclassData(theEnv)->SlotNameTable[snp->hashTableIndex] = snp;  }static void UpdateTemplateSlot(  void *theEnv,  void *buf,  long obji)  {   ObjectBinaryData(theEnv)->TmpslotArray[obji] = SlotPointer(* (long *) buf);  }static void UpdateHandler(  void *theEnv,  void *buf,  long obji)  {   HANDLER *hnd;   BSAVE_HANDLER *bhnd;   hnd = (HANDLER *) &ObjectBinaryData(theEnv)->HandlerArray[obji];   bhnd = (BSAVE_HANDLER *) buf;   hnd->system = bhnd->system;   hnd->type = bhnd->type;   hnd->minParams = bhnd->minParams;   hnd->maxParams = bhnd->maxParams;   hnd->localVarCount = bhnd->localVarCount;   hnd->cls = DefclassPointer(bhnd->cls);   hnd->name = SymbolPointer(bhnd->name);   IncrementSymbolCount(hnd->name);   hnd->actions = ExpressionPointer(bhnd->actions);   hnd->ppForm = NULL;   hnd->busy = 0;   hnd->mark = 0;   hnd->usrData = NULL;#if DEBUGGING_FUNCTIONS   hnd->trace = MessageHandlerData(theEnv)->WatchHandlers;#endif  }/***************************************************************  NAME         : ClearBloadObjects  DESCRIPTION  : Release all binary-loaded class and handler                   structure arrays (and others)  INPUTS       : None  RETURNS      : Nothing useful  SIDE EFFECTS : Memory cleared  NOTES        : None ***************************************************************/static void ClearBloadObjects(  void *theEnv)  {   register long i;   size_t space;   space = (sizeof(DEFCLASS_MODULE) * ObjectBinaryData(theEnv)->ModuleCount);   if (space == 0L)     return;   genfree(theEnv,(void *) ObjectBinaryData(theEnv)->ModuleArray,space);   ObjectBinaryData(theEnv)->ModuleArray = NULL;   ObjectBinaryData(theEnv)->ModuleCount = 0L;   if (ObjectBinaryData(theEnv)->ClassCount != 0L)     {      rm(theEnv,(void *) DefclassData(theEnv)->ClassIDMap,(sizeof(DEFCLASS *) * DefclassData(theEnv)->AvailClassID));      DefclassData(theEnv)->ClassIDMap = NULL;      DefclassData(theEnv)->MaxClassID = 0;      DefclassData(theEnv)->AvailClassID = 0;      for (i = 0L ; i < ObjectBinaryData(theEnv)->ClassCount ; i++)        {         UnmarkConstructHeader(theEnv,&ObjectBinaryData(theEnv)->DefclassArray[i].header);#if DEFMODULE_CONSTRUCT         DecrementBitMapCount(theEnv,ObjectBinaryData(theEnv)->DefclassArray[i].scopeMap);#endif         RemoveClassFromTable(theEnv,(DEFCLASS *) &ObjectBinaryData(theEnv)->DefclassArray[i]);        }      for (i = 0L ; i < ObjectBinaryData(theEnv)->SlotCount ; i++)        {         DecrementSymbolCount(theEnv,ObjectBinaryData(theEnv)->SlotArray[i].overrideMessage);         if ((ObjectBinaryData(theEnv)->SlotArray[i].defaultValue != NULL) && (ObjectBinaryData(theEnv)->SlotArray[i].dynamicDefault == 0))           {            ValueDeinstall(theEnv,(DATA_OBJECT *) ObjectBinaryData(theEnv)->SlotArray[i].defaultValue);            rtn_struct(theEnv,dataObject,ObjectBinaryData(theEnv)->SlotArray[i].defaultValue);           }        }      for (i = 0L ; i < ObjectBinaryData(theEnv)->SlotNameCount ; i++)        {         DefclassData(theEnv)->SlotNameTable[ObjectBinaryData(theEnv)->SlotNameArray[i].hashTableIndex] = NULL;         DecrementSymbolCount(theEnv,ObjectBinaryData(theEnv)->SlotNameArray[i].name);         DecrementSymbolCount(theEnv,ObjectBinaryData(theEnv)->SlotNameArray[i].putHandlerName);        }      space = (sizeof(DEFCLASS) * ObjectBinaryData(theEnv)->ClassCount);      if (space != 0L)        {         genfree(theEnv,(void *) ObjectBinaryData(theEnv)->DefclassArray,space);         ObjectBinaryData(theEnv)->DefclassArray = NULL;         ObjectBinaryData(theEnv)->ClassCount = 0L;        }      space = (sizeof(DEFCLASS *) * ObjectBinaryData(theEnv)->LinkCount);      if (space != 0L)        {         genfree(theEnv,(void *) ObjectBinaryData(theEnv)->LinkArray,space);         ObjectBinaryData(theEnv)->LinkArray = NULL;         ObjectBinaryData(theEnv)->LinkCount = 0L;        }      space = (sizeof(SLOT_DESC) * ObjectBinaryData(theEnv)->SlotCount);      if (space != 0L)        {         genfree(theEnv,(void *) ObjectBinaryData(theEnv)->SlotArray,space);         ObjectBinaryData(theEnv)->SlotArray = NULL;         ObjectBinaryData(theEnv)->SlotCount = 0L;        }      space = (sizeof(SLOT_NAME) * ObjectBinaryData(theEnv)->SlotNameCount);      if (space != 0L)        {         genfree(theEnv,(void *) ObjectBinaryData(theEnv)->SlotNameArray,space);         ObjectBinaryData(theEnv)->SlotNameArray = NULL;         ObjectBinaryData(theEnv)->SlotNameCount = 0L;        }      space = (sizeof(SLOT_DESC *) * ObjectBinaryData(theEnv)->TemplateSlotCount);      if (space != 0L)        {         genfree(theEnv,(void *) ObjectBinaryData(theEnv)->TmpslotArray,space);         ObjectBinaryData(theEnv)->TmpslotArray = NULL;         ObjectBinaryData(theEnv)->TemplateSlotCount = 0L;        }      space = (sizeof(unsigned) * ObjectBinaryData(theEnv)->SlotNameMapCount);      if (space != 0L)        {         genfree(theEnv,(void *) ObjectBinaryData(theEnv)->MapslotArray,space);         ObjectBinaryData(theEnv)->MapslotArray = NULL;         ObjectBinaryData(theEnv)->SlotNameMapCount = 0L;        }     }   if (ObjectBinaryData(theEnv)->HandlerCount != 0L)     {      for (i = 0L ; i < ObjectBinaryData(theEnv)->HandlerCount ; i++)        DecrementSymbolCount(theEnv,ObjectBinaryData(theEnv)->HandlerArray[i].name);      space = (sizeof(HANDLER) * ObjectBinaryData(theEnv)->HandlerCount);      if (space != 0L)        {         genfree(theEnv,(void *) ObjectBinaryData(theEnv)->HandlerArray,space);         ObjectBinaryData(theEnv)->HandlerArray = NULL;         space = (sizeof(unsigned) * ObjectBinaryData(theEnv)->HandlerCount);         genfree(theEnv,(void *) ObjectBinaryData(theEnv)->MaphandlerArray,space);         ObjectBinaryData(theEnv)->MaphandlerArray = NULL;         ObjectBinaryData(theEnv)->HandlerCount = 0L;        }     }  }#endif

⌨️ 快捷键说明

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