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

📄 objbin.c

📁 clips源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
   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 = ObjectBinaryData(theEnv)->LinkCount;      ObjectBinaryData(theEnv)->LinkCount += cls->directSuperclasses.classCount;     }   else     dummy_class.directSuperclasses.classArray = -1L;   if (cls->directSubclasses.classCount != 0)     {      dummy_class.directSubclasses.classArray = ObjectBinaryData(theEnv)->LinkCount;      ObjectBinaryData(theEnv)->LinkCount += cls->directSubclasses.classCount;     }   else     dummy_class.directSubclasses.classArray = -1L;   if (cls->allSuperclasses.classCount != 0)     {      dummy_class.allSuperclasses.classArray = ObjectBinaryData(theEnv)->LinkCount;      ObjectBinaryData(theEnv)->LinkCount += cls->allSuperclasses.classCount;     }   else     dummy_class.allSuperclasses.classArray = -1L;   if (cls->slots != NULL)     {      dummy_class.slots = ObjectBinaryData(theEnv)->SlotCount;      ObjectBinaryData(theEnv)->SlotCount += (long) cls->slotCount;     }   else     dummy_class.slots = -1L;   if (cls->instanceTemplate != NULL)     {      dummy_class.instanceTemplate = ObjectBinaryData(theEnv)->TemplateSlotCount;      ObjectBinaryData(theEnv)->TemplateSlotCount += (long) cls->instanceSlotCount;      dummy_class.slotNameMap = ObjectBinaryData(theEnv)->SlotNameMapCount;      ObjectBinaryData(theEnv)->SlotNameMapCount += (long) cls->maxSlotNameID + 1;     }   else     {      dummy_class.instanceTemplate = -1L;      dummy_class.slotNameMap = -1L;     }   if (cls->handlers != NULL)     {      dummy_class.handlers = ObjectBinaryData(theEnv)->HandlerCount;      ObjectBinaryData(theEnv)->HandlerCount += (long) 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,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(  void *theEnv,  struct constructHeader *theDefclass,  void *buf)  {   DEFCLASS *cls = (DEFCLASS *) theDefclass;   long 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,sizeof(long),(FILE *) buf);     }   ObjectBinaryData(theEnv)->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,sizeof(long),(FILE *) buf);     }   ObjectBinaryData(theEnv)->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,sizeof(long),(FILE *) buf);     }   ObjectBinaryData(theEnv)->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(  void *theEnv,  struct constructHeader *theDefclass,  void *buf)  {   DEFCLASS *cls = (DEFCLASS *) theDefclass;   long 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 = ExpressionData(theEnv)->ExpressionCount;         if (sp->dynamicDefault)           ExpressionData(theEnv)->ExpressionCount += ExpressionSize((EXPRESSION *) sp->defaultValue);         else           {            tmpexp = ConvertValueToExpression(theEnv,(DATA_OBJECT *) sp->defaultValue);            ExpressionData(theEnv)->ExpressionCount += ExpressionSize(tmpexp);            ReturnExpression(theEnv,tmpexp);           }        }      else        dummy_slot.defaultValue = -1L;      dummy_slot.constraint = ConstraintIndex(sp->constraint);      GenWrite((void *) &dummy_slot,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 **************************************************************/#if IBM_TBC#pragma argsused#endifstatic void BsaveTemplateSlots(  void *theEnv,  struct constructHeader *theDefclass,  void *buf)  {   DEFCLASS *cls = (DEFCLASS *) theDefclass;   long i;   long tsp;#if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(theEnv)#endif      for (i = 0 ; i < cls->instanceSlotCount ; i++)     {      tsp = SlotIndex(cls->instanceTemplate[i]);      GenWrite((void *) &tsp,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 ***************************************************************/#if IBM_TBC#pragma argsused#endifstatic void BsaveSlotMap(  void *theEnv,  struct constructHeader *theDefclass,  void *buf)  {   DEFCLASS *cls = (DEFCLASS *) theDefclass;#if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(theEnv)#endif   if (cls->instanceSlotCount != 0)     GenWrite((void *) cls->slotNameMap,              (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(  void *theEnv,  struct constructHeader *theDefclass,  void *buf)  {   DEFCLASS *cls = (DEFCLASS *) theDefclass;   long 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 = ExpressionData(theEnv)->ExpressionCount;         ExpressionData(theEnv)->ExpressionCount += ExpressionSize(hnd->actions);        }      else        dummy_handler.actions = -1L;      GenWrite((void *) &dummy_handler,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 ****************************************************************/#if IBM_TBC#pragma argsused#endifstatic void BsaveHandlerMap(  void *theEnv,  struct constructHeader *theDefclass,  void *buf)  {   DEFCLASS *cls = (DEFCLASS *) theDefclass;#if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(theEnv)#endif   GenWrite((void *) cls->handlerOrderMap,            (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(  void *theEnv)  {   size_t space;   long counts[9];   if ((DefclassData(theEnv)->ClassIDMap != NULL) || (DefclassData(theEnv)->MaxClassID != 0))     {      SystemError(theEnv,"OBJBIN",1);      EnvExitRouter(theEnv,EXIT_FAILURE);     }   GenReadBinary(theEnv,(void *) &space,sizeof(size_t));   if (space == 0L)     {      ObjectBinaryData(theEnv)->ClassCount = ObjectBinaryData(theEnv)->HandlerCount = 0L;      return;     }   GenReadBinary(theEnv,(void *) counts,space);   ObjectBinaryData(theEnv)->ModuleCount = counts[0];   ObjectBinaryData(theEnv)->ClassCount = counts[1];   ObjectBinaryData(theEnv)->LinkCount = counts[2];   ObjectBinaryData(theEnv)->SlotNameCount = counts[3];   ObjectBinaryData(theEnv)->SlotCount = counts[4];   ObjectBinaryData(theEnv)->TemplateSlotCount = counts[5];   ObjectBinaryData(theEnv)->SlotNameMapCount = counts[6];   ObjectBinaryData(theEnv)->HandlerCount = counts[7];   DefclassData(theEnv)->MaxClassID = (unsigned short) counts[8];   DefclassData(theEnv)->AvailClassID = (unsigned short) counts[8];   if (ObjectBinaryData(theEnv)->ModuleCount != 0L)     {      space = (sizeof(DEFCLASS_MODULE) * ObjectBinaryData(theEnv)->ModuleCount);      ObjectBinaryData(theEnv)->ModuleArray = (DEFCLASS_MODULE *) genalloc(theEnv,space);     }   if (ObjectBinaryData(theEnv)->ClassCount != 0L)     {      space = (sizeof(DEFCLASS) * ObjectBinaryData(theEnv)->ClassCount);      ObjectBinaryData(theEnv)->DefclassArray = (DEFCLASS *) genalloc(theEnv,space);      DefclassData(theEnv)->ClassIDMap = (DEFCLASS **) gm2(theEnv,(sizeof(DEFCLASS *) * DefclassData(theEnv)->MaxClassID));     }   if (ObjectBinaryData(theEnv)->LinkCount != 0L)     {      space = (sizeof(DEFCLASS *) * ObjectBinaryData(theEnv)->LinkCount);      ObjectBinaryData(theEnv)->LinkArray = (DEFCLASS * *) genalloc(theEnv,space);     }   if (ObjectBinaryData(theEnv)->SlotCount != 0L)     {      space = (sizeof(SLOT_DESC) * ObjectBinaryData(theEnv)->SlotCount);      ObjectBinaryData(theEnv)->SlotArray = (SLOT_DESC *) genalloc(theEnv,space);     }   if (ObjectBinaryData(theEnv)->SlotNameCount != 0L)     {      space = (sizeof(SLOT_NAME) * ObjectBinaryData(theEnv)->SlotNameCount);      ObjectBinaryData(theEnv)->SlotNameArray = (SLOT_NAME *) genalloc(theEnv,space);     }   if (ObjectBinaryData(theEnv)->TemplateSlotCount != 0L)     {      space = (sizeof(SLOT_DESC *) * ObjectBinaryData(theEnv)->TemplateSlotCount);      ObjectBinaryData(theEnv)->TmpslotArray = (SLOT_DESC * *) genalloc(theEnv,space);     }   if (ObjectBinaryData(theEnv)->SlotNameMapCount != 0L)     {      space = (sizeof(unsigned) * ObjectBinaryData(theEnv)->SlotNameMapCount);      ObjectBinaryData(theEnv)->MapslotArray = (unsigned *) genalloc(theEnv,space);     }   if (ObjectBinaryData(theEnv)->HandlerCount != 0L)     {      space = (sizeof(HANDLER) * ObjectBinaryData(theEnv)->HandlerCount);      ObjectBinaryData(theEnv)->HandlerArray = (HANDLER *) genalloc(theEnv,space);      space = (sizeof(unsigned) * ObjectBinaryData(theEnv)->HandlerCount);      ObjectBinaryData(theEnv)->MaphandlerArray = (unsigned *) genalloc(theEnv,space);     }  }/***************************************************************

⌨️ 快捷键说明

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