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

📄 dffnxbin.c

📁 clips源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
  INPUTS       : File pointer of binary file  RETURNS      : Nothing useful  SIDE EFFECTS : Binary file adjusted  NOTES        : None ***********************************************************/static void BsaveStorageDeffunctions(  void *theEnv,  FILE *fp)  {   size_t space;   space = sizeof(unsigned long) * 2;   GenWrite((void *) &space,sizeof(size_t),fp);   GenWrite((void *) &DeffunctionBinaryData(theEnv)->ModuleCount,sizeof(unsigned long),fp);   GenWrite((void *) &DeffunctionBinaryData(theEnv)->DeffunctionCount,sizeof(unsigned long),fp);  }/*************************************************************************************  NAME         : BsaveDeffunctions  DESCRIPTION  : Writes out deffunction in binary format                 Space required (unsigned long)                 All deffunctions (sizeof(DEFFUNCTION) * Number of deffunctions)  INPUTS       : File pointer of binary file  RETURNS      : Nothing useful  SIDE EFFECTS : Binary file adjusted  NOTES        : None *************************************************************************************/static void BsaveDeffunctions(  void *theEnv,  FILE *fp)  {   size_t space;   struct defmodule *theModule;   DEFFUNCTION_MODULE *theModuleItem;   BSAVE_DEFFUNCTION_MODULE dummy_mitem;   space = ((sizeof(BSAVE_DEFFUNCTION_MODULE) * DeffunctionBinaryData(theEnv)->ModuleCount) +            (sizeof(BSAVE_DEFFUNCTION) * DeffunctionBinaryData(theEnv)->DeffunctionCount));   GenWrite((void *) &space,sizeof(size_t),fp);   /* =================================      Write out each deffunction module      ================================= */   DeffunctionBinaryData(theEnv)->DeffunctionCount = 0L;   theModule = (struct defmodule *) EnvGetNextDefmodule(theEnv,NULL);   while (theModule != NULL)     {      theModuleItem = (DEFFUNCTION_MODULE *)                      GetModuleItem(theEnv,theModule,FindModuleItem(theEnv,"deffunction")->moduleIndex);      AssignBsaveDefmdlItemHdrVals(&dummy_mitem.header,&theModuleItem->header);      GenWrite((void *) &dummy_mitem,sizeof(BSAVE_DEFFUNCTION_MODULE),fp);      theModule = (struct defmodule *) EnvGetNextDefmodule(theEnv,(void *) theModule);     }   /* ==========================      Write out each deffunction      ========================== */   DoForAllConstructs(theEnv,BsaveDeffunction,DeffunctionData(theEnv)->DeffunctionModuleIndex,                      FALSE,(void *) fp);   RestoreBloadCount(theEnv,&DeffunctionBinaryData(theEnv)->ModuleCount);   RestoreBloadCount(theEnv,&DeffunctionBinaryData(theEnv)->DeffunctionCount);  }/***************************************************  NAME         : BsaveDeffunction  DESCRIPTION  : Bsaves a deffunction  INPUTS       : 1) The deffunction                 2) Output data file pointer  RETURNS      : Nothing useful  SIDE EFFECTS : Deffunction saved  NOTES        : None ***************************************************/static void BsaveDeffunction(  void *theEnv,  struct constructHeader *theDeffunction,  void *userBuffer)  {   DEFFUNCTION *dptr = (DEFFUNCTION *) theDeffunction;   BSAVE_DEFFUNCTION dummy_df;   AssignBsaveConstructHeaderVals(&dummy_df.header,&dptr->header);   dummy_df.minNumberOfParameters = dptr->minNumberOfParameters;   dummy_df.maxNumberOfParameters = dptr->maxNumberOfParameters;   dummy_df.numberOfLocalVars = dptr->numberOfLocalVars;   if (dptr->code != NULL)     {      dummy_df.code = ExpressionData(theEnv)->ExpressionCount;      ExpressionData(theEnv)->ExpressionCount += ExpressionSize(dptr->code);     }   else     dummy_df.code = -1L;   GenWrite((void *) &dummy_df,sizeof(BSAVE_DEFFUNCTION),(FILE *) userBuffer);  }#endif/***********************************************************************  NAME         : BloadStorageDeffunctions  DESCRIPTION  : This routine space required for deffunction                   structures and allocates space for them  INPUTS       : Nothing  RETURNS      : Nothing useful  SIDE EFFECTS : Arrays allocated and set  NOTES        : This routine makes no attempt to reset any pointers                   within the structures ***********************************************************************/static void BloadStorageDeffunctions(  void *theEnv)  {   size_t space;   GenReadBinary(theEnv,(void *) &space,sizeof(size_t));   if (space == 0L)     return;   GenReadBinary(theEnv,(void *) &DeffunctionBinaryData(theEnv)->ModuleCount,sizeof(unsigned long));   GenReadBinary(theEnv,(void *) &DeffunctionBinaryData(theEnv)->DeffunctionCount,sizeof(unsigned long));   if (DeffunctionBinaryData(theEnv)->ModuleCount == 0L)     {      DeffunctionBinaryData(theEnv)->ModuleArray = NULL;      DeffunctionBinaryData(theEnv)->DeffunctionArray = NULL;      return;     }   space = (DeffunctionBinaryData(theEnv)->ModuleCount * sizeof(DEFFUNCTION_MODULE));   DeffunctionBinaryData(theEnv)->ModuleArray = (DEFFUNCTION_MODULE *) genalloc(theEnv,space);   if (DeffunctionBinaryData(theEnv)->DeffunctionCount == 0L)     {      DeffunctionBinaryData(theEnv)->DeffunctionArray = NULL;      return;     }   space = (DeffunctionBinaryData(theEnv)->DeffunctionCount * sizeof(DEFFUNCTION));   DeffunctionBinaryData(theEnv)->DeffunctionArray = (DEFFUNCTION *) genalloc(theEnv,space);  }/*********************************************************************  NAME         : BloadDeffunctions  DESCRIPTION  : This routine reads deffunction information from                   a binary file                 This routine moves through the deffunction                   binary array updating pointers  INPUTS       : None  RETURNS      : Nothing useful  SIDE EFFECTS : Pointers reset from array indices  NOTES        : Assumes all loading is finished ********************************************************************/static void BloadDeffunctions(  void *theEnv)  {   size_t space;   GenReadBinary(theEnv,(void *) &space,sizeof(size_t));   BloadandRefresh(theEnv,DeffunctionBinaryData(theEnv)->ModuleCount,sizeof(BSAVE_DEFFUNCTION_MODULE),UpdateDeffunctionModule);   BloadandRefresh(theEnv,DeffunctionBinaryData(theEnv)->DeffunctionCount,sizeof(BSAVE_DEFFUNCTION),UpdateDeffunction);  }/*******************************************************  NAME         : UpdateDeffunctionModule  DESCRIPTION  : Updates deffunction module with binary                 load data - sets pointers from                 offset information  INPUTS       : 1) A pointer to the bloaded data                 2) The index of the binary array                    element to update  RETURNS      : Nothing useful  SIDE EFFECTS : Deffunction moudle pointers updated  NOTES        : None *******************************************************/static void UpdateDeffunctionModule(  void *theEnv,  void *buf,  long obji)  {   BSAVE_DEFFUNCTION_MODULE *bdptr;   bdptr = (BSAVE_DEFFUNCTION_MODULE *) buf;   UpdateDefmoduleItemHeader(theEnv,&bdptr->header,&DeffunctionBinaryData(theEnv)->ModuleArray[obji].header,                             (int) sizeof(DEFFUNCTION),(void *) DeffunctionBinaryData(theEnv)->DeffunctionArray);  }/***************************************************  NAME         : UpdateDeffunction  DESCRIPTION  : Updates deffunction with binary                 load data - sets pointers from                 offset information  INPUTS       : 1) A pointer to the bloaded data                 2) The index of the binary array                    element to update  RETURNS      : Nothing useful  SIDE EFFECTS : Deffunction pointers upadted  NOTES        : None ***************************************************/static void UpdateDeffunction(  void *theEnv,  void *buf,  long obji)  {   BSAVE_DEFFUNCTION *bdptr;   DEFFUNCTION *dptr;   bdptr = (BSAVE_DEFFUNCTION *) buf;   dptr = (DEFFUNCTION *) &DeffunctionBinaryData(theEnv)->DeffunctionArray[obji];   UpdateConstructHeader(theEnv,&bdptr->header,&dptr->header,                         (int) sizeof(DEFFUNCTION_MODULE),(void *) DeffunctionBinaryData(theEnv)->ModuleArray,                         (int) sizeof(DEFFUNCTION),(void *) DeffunctionBinaryData(theEnv)->DeffunctionArray);   dptr->code = ExpressionPointer(bdptr->code);   dptr->busy = 0;   dptr->executing = 0;#if DEBUGGING_FUNCTIONS   dptr->trace = (unsigned short) DeffunctionData(theEnv)->WatchDeffunctions;#endif   dptr->minNumberOfParameters = bdptr->minNumberOfParameters;   dptr->maxNumberOfParameters = bdptr->maxNumberOfParameters;   dptr->numberOfLocalVars = bdptr->numberOfLocalVars;  }/***************************************************************  NAME         : ClearDeffunctionBload  DESCRIPTION  : Release all binary-loaded deffunction                   structure arrays                 Resets deffunction list to NULL  INPUTS       : None  RETURNS      : Nothing useful  SIDE EFFECTS : Memory cleared  NOTES        : Deffunction name symbol counts decremented ***************************************************************/static void ClearDeffunctionBload(  void *theEnv)  {   register long i;   size_t space;   space = (sizeof(DEFFUNCTION_MODULE) * DeffunctionBinaryData(theEnv)->ModuleCount);   if (space == 0L)     return;   genfree(theEnv,(void *) DeffunctionBinaryData(theEnv)->ModuleArray,space);   DeffunctionBinaryData(theEnv)->ModuleArray = NULL;   DeffunctionBinaryData(theEnv)->ModuleCount = 0L;   for (i = 0L ; i < DeffunctionBinaryData(theEnv)->DeffunctionCount ; i++)     UnmarkConstructHeader(theEnv,&DeffunctionBinaryData(theEnv)->DeffunctionArray[i].header);   space = (sizeof(DEFFUNCTION) * DeffunctionBinaryData(theEnv)->DeffunctionCount);   if (space == 0L)     return;   genfree(theEnv,(void *) DeffunctionBinaryData(theEnv)->DeffunctionArray,space);   DeffunctionBinaryData(theEnv)->DeffunctionArray = NULL;   DeffunctionBinaryData(theEnv)->DeffunctionCount = 0L;  }#endif

⌨️ 快捷键说明

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