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

📄 cstrccom.c

📁 clips源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
  void *theEnv,  char *constructName,  struct construct *constructClass)  {   struct constructHeader *constructPtr;   int count;   unsigned position;   SYMBOL_HN *theName;   /*====================================================*/   /* If the construct name contains a module specifier, */   /* then get a pointer to the defmodule associated     */   /* with the specified name.                           */   /*====================================================*/   if ((position = FindModuleSeparator(constructName)) != FALSE)     {      theName = ExtractModuleName(theEnv,position,constructName);      if (theName != NULL)        { return((struct defmodule *) EnvFindDefmodule(theEnv,ValueToString(theName))); }     }   /*============================================*/   /* No module was specified, so search for the */   /* named construct in the current module and  */   /* modules from which it imports.             */   /*============================================*/   constructPtr = (struct constructHeader *)                  FindImportedConstruct(theEnv,constructClass->constructName,NULL,constructName,                                        &count,TRUE,NULL);   if (constructPtr == NULL) return(NULL);   return(constructPtr->whichModule->theModule);  }/*************************************//* Undefconstruct: Generic C routine *//*   for deleting a construct.       *//*************************************/globle intBool Undefconstruct(  void *theEnv,  void *theConstruct,  struct construct *constructClass)  {#if BLOAD_ONLY || RUN_TIME#if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(theConstruct)#pragma unused(constructClass)#pragma unused(theEnv)#endif   return(FALSE);#else   void *currentConstruct,*nextConstruct;   intBool success;   /*================================================*/   /* Delete all constructs of the specified type if */   /* the construct pointer is the NULL pointer.     */   /*================================================*/   if (theConstruct == NULL)     {      success = TRUE;      /*===================================================*/      /* Loop through all of the constructs in the module. */      /*===================================================*/      currentConstruct = (*constructClass->getNextItemFunction)(theEnv,NULL);      while (currentConstruct != NULL)        {         /*==============================*/         /* Remember the next construct. */         /*==============================*/         nextConstruct = (*constructClass->getNextItemFunction)(theEnv,currentConstruct);         /*=============================*/         /* Try deleting the construct. */         /*=============================*/         if ((*constructClass->isConstructDeletableFunction)(theEnv,currentConstruct))           {            RemoveConstructFromModule(theEnv,(struct constructHeader *) currentConstruct);            (*constructClass->freeFunction)(theEnv,currentConstruct);           }         else           {            CantDeleteItemErrorMessage(theEnv,constructClass->constructName,                        ValueToString((*constructClass->getConstructNameFunction)((struct constructHeader *) currentConstruct)));            success = FALSE;           }         /*================================*/         /* Move on to the next construct. */         /*================================*/         currentConstruct = nextConstruct;        }      /*=======================================*/      /* Perform periodic cleanup if embedded. */      /*=======================================*/      if ((EvaluationData(theEnv)->CurrentEvaluationDepth == 0) && (! CommandLineData(theEnv)->EvaluatingTopLevelCommand) &&          (EvaluationData(theEnv)->CurrentExpression == NULL))        { PeriodicCleanup(theEnv,TRUE,FALSE); }      /*============================================*/      /* Return TRUE if all constructs successfully */      /* deleted, otherwise FALSE.                  */      /*============================================*/      return(success);     }   /*==================================================*/   /* Return FALSE if the construct cannot be deleted. */   /*==================================================*/   if ((*constructClass->isConstructDeletableFunction)(theEnv,theConstruct) == FALSE)     { return(FALSE); }   /*===========================*/   /* Remove the construct from */   /* the list in its module.   */   /*===========================*/   RemoveConstructFromModule(theEnv,(struct constructHeader *) theConstruct);   /*=======================*/   /* Delete the construct. */   /*=======================*/   (*constructClass->freeFunction)(theEnv,theConstruct);   /*=======================================*/   /* Perform periodic cleanup if embedded. */   /*=======================================*/   if ((EvaluationData(theEnv)->CurrentEvaluationDepth == 0) && (! CommandLineData(theEnv)->EvaluatingTopLevelCommand) &&       (EvaluationData(theEnv)->CurrentExpression == NULL))     { PeriodicCleanup(theEnv,TRUE,FALSE); }   /*=============================*/   /* Return TRUE to indicate the */   /* construct was deleted.      */   /*=============================*/   return(TRUE);#endif  }/***********************************//* SaveConstruct: Generic routine  *//*   for saving a construct class. *//***********************************/globle void SaveConstruct(  void *theEnv,  void *theModule,  char *logicalName,  struct construct *constructClass)  {   char *ppform;   struct constructHeader *theConstruct;   /*==========================*/   /* Save the current module. */   /*==========================*/   SaveCurrentModule(theEnv);   /*===========================*/   /* Set the current module to */   /* the one we're examining.  */   /*===========================*/   EnvSetCurrentModule(theEnv,theModule);   /*==============================================*/   /* Loop through each construct of the specified */   /* construct class in the module.               */   /*==============================================*/   for (theConstruct = (struct constructHeader *)                       (*constructClass->getNextItemFunction)(theEnv,NULL);        theConstruct != NULL;        theConstruct = (struct constructHeader *)                       (*constructClass->getNextItemFunction)(theEnv,theConstruct))     {      /*==========================================*/      /* Print the construct's pretty print form. */      /*==========================================*/      ppform = (*constructClass->getPPFormFunction)(theEnv,theConstruct);      if (ppform != NULL)        {         PrintInChunks(theEnv,logicalName,ppform);         EnvPrintRouter(theEnv,logicalName,"\n");        }      }   /*=============================*/   /* Restore the current module. */   /*=============================*/   RestoreCurrentModule(theEnv);  }/*********************************************************//* GetConstructModuleName: Generic routine for returning *//*   the name of the module to which a construct belongs *//*********************************************************/globle char *GetConstructModuleName(  struct constructHeader *theConstruct)  { return(EnvGetDefmoduleName(NULL,(void *) theConstruct->whichModule->theModule)); }/*********************************************************//* GetConstructNameString: Generic routine for returning *//*   the name string of a construct.                     *//*********************************************************/globle char *GetConstructNameString(  struct constructHeader *theConstruct)  { return(ValueToString(theConstruct->name)); }/**************************************************//* EnvGetConstructNameString: Generic routine for *//*   returning the name string of a construct.    *//**************************************************/#if IBM_TBC#pragma argsused#endifgloble char *EnvGetConstructNameString(  void *theEnv,  struct constructHeader *theConstruct)  { #if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(theEnv)#endif   return(ValueToString(theConstruct->name));   }/**********************************************************//* GetConstructNamePointer: Generic routine for returning *//*   the name pointer of a construct.                     *//**********************************************************/globle SYMBOL_HN *GetConstructNamePointer(  struct constructHeader *theConstruct)  { return(theConstruct->name); }/************************************************//* GetConstructListFunction: Generic Routine    *//*   for retrieving the constructs in a module. *//************************************************/globle void GetConstructListFunction(  void *theEnv,  char *functionName,  DATA_OBJECT_PTR returnValue,  struct construct *constructClass)  {   struct defmodule *theModule;   DATA_OBJECT result;   int numArgs;   /*============================================*/   /* Check for the correct number of arguments. */   /*============================================*/   if ((numArgs = EnvArgCountCheck(theEnv,functionName,NO_MORE_THAN,1)) == -1)     {      EnvSetMultifieldErrorValue(theEnv,returnValue);      return;     }   /*====================================*/   /* If an argument was given, check to */   /* see that it's a valid module name. */   /*====================================*/   if (numArgs == 1)     {      /*======================================*/      /* Only symbols are valid module names. */      /*======================================*/      EnvRtnUnknown(theEnv,1,&result);      if (GetType(result) != SYMBOL)        {         EnvSetMultifieldErrorValue(theEnv,returnValue);         ExpectedTypeError1(theEnv,functionName,1,"defmodule name");         return;        }      /*===========================================*/      /* Verify that the named module exists or is */      /* the symbol * (for obtaining the construct */      /* list for all modules).                    */      /*===========================================*/      if ((theModule = (struct defmodule *) EnvFindDefmodule(theEnv,DOToString(result))) == NULL)        {         if (strcmp("*",DOToString(result)) != 0)           {            EnvSetMultifieldErrorValue(theEnv,returnValue);            ExpectedTypeError1(theEnv,functionName,1,"defmodule name");            return;           }         theModule = NULL;        }     }   /*=====================================*/   /* Otherwise use the current module to */   /* generate the construct list.        */   /*=====================================*/   else     { theModule = ((struct defmodule *) EnvGetCurrentModule(theEnv)); }   /*=============================*/   /* Call the driver routine to  */   /* get the list of constructs. */   /*=============================*/   GetConstructList(theEnv,returnValue,constructClass,theModule);  }/********************************************//* GetConstructList: Generic C Routine for  *//*   retrieving the constructs in a module. *//********************************************/globle void GetConstructList(  void *theEnv,  DATA_OBJECT_PTR returnValue,  struct construct *constructClass,  struct defmodule *theModule)  {   void *theConstruct;   unsigned long count = 0;   struct multifield *theList;   SYMBOL_HN *theName;   struct defmodule *loopModule;   int allModules = FALSE;#if IBM_TBC   size_t largestConstructNameSize, bufferSize = 80;      /* prevents warning */#else   size_t largestConstructNameSize = 0, bufferSize = 80;  /* prevents warning */#endif   char *buffer;      /*==========================*/   /* Save the current module. */   /*==========================*/   SaveCurrentModule(theEnv);   /*=======================================*/   /* If the module specified is NULL, then */   /* get all constructs in all modules.    */   /*=======================================*/   if (theModule == NULL)     {      theModule = (struct defmodule *) EnvGetNextDefmodule(theEnv,NULL);      allModules = TRUE;     }   /*======================================================*/   /* Count the number of constructs to  be retrieved and  */   /* determine the buffer size needed to store the        */   /* module-name::construct-names that will be generated. */   /*======================================================*/   loopModule = theModule;   while (loopModule != NULL)     {      size_t tempSize;      /*======================================================*/      /* Set the current module to the module being examined. */      /*======================================================*/                  EnvSetCurrentModule(theEnv,(void *) loopModule);      /*===========================================*/      /* Loop over every construct in the  module. */      /*===========================================*/                        theConstruct = NULL;      largestConstructNameSize = 0;            while ((theConstruct = (*constructClass->getNextItemFunction)(theEnv,theConstruct)) != NULL)        {          /*================================*/         /* Increment the construct count. */         /*================================*/                  count++;          /*=================================================*/         /* Is this the largest construct name encountered? */         /*=================================================*/                  tempSize = strlen(ValueToString((*constructClass->getConstructNameFunction)((struct constructHeader *) theConstruct)));         if (tempSize > largestConstructNameSize)           { largestConstructNameSize = tempSize; }        }              /*========================================*/      /* Determine the size of the module name. */      /*========================================*/

⌨️ 快捷键说明

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