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

📄 cstrccom.c

📁 clips源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
            tempSize = strlen(EnvGetDefmoduleName(theEnv,loopModule));      /*======================================================*/      /* The buffer must be large enough for the module name, */      /* the largest name of all the constructs, and the ::.  */      /*======================================================*/                  if ((tempSize + largestConstructNameSize + 5) > bufferSize)        { bufferSize = tempSize + largestConstructNameSize + 5; }      /*=============================*/      /* Move on to the next module. */      /*=============================*/            if (allModules) loopModule = (struct defmodule *) EnvGetNextDefmodule(theEnv,loopModule);      else loopModule = NULL;     }   /*===========================*/   /* Allocate the name buffer. */   /*===========================*/      buffer = (char *) genalloc(theEnv,bufferSize);      /*================================*/   /* Create the multifield value to */   /* store the construct names.     */   /*================================*/   SetpType(returnValue,MULTIFIELD);   SetpDOBegin(returnValue,1);   SetpDOEnd(returnValue,(long) count);   theList = (struct multifield *) EnvCreateMultifield(theEnv,count);   SetpValue(returnValue,(void *) theList);   /*===========================*/   /* Store the construct names */   /* in the multifield value.  */   /*===========================*/   loopModule = theModule;   count = 1;   while (loopModule != NULL)     {      /*============================*/      /* Set the current module to  */      /* the module being examined. */      /*============================*/      EnvSetCurrentModule(theEnv,(void *) loopModule);      /*===============================*/      /* Add each construct name found */      /* in the module to the list.    */      /*===============================*/      theConstruct = NULL;      while ((theConstruct = (*constructClass->getNextItemFunction)(theEnv,theConstruct)) != NULL)        {         theName = (*constructClass->getConstructNameFunction)((struct constructHeader *) theConstruct);         SetMFType(theList,count,SYMBOL);         if (allModules)           {            genstrcpy(buffer,EnvGetDefmoduleName(theEnv,loopModule));            genstrcat(buffer,"::");            genstrcat(buffer,ValueToString(theName));            SetMFValue(theList,count,EnvAddSymbol(theEnv,buffer));           }         else           { SetMFValue(theList,count,EnvAddSymbol(theEnv,ValueToString(theName))); }         count++;        }      /*==================================*/      /* Move on to the next module (if   */      /* the list is to contain the names */      /* of constructs from all modules). */      /*==================================*/      if (allModules) loopModule = (struct defmodule *) EnvGetNextDefmodule(theEnv,loopModule);      else loopModule = NULL;     }   /*=========================*/   /* Return the name buffer. */   /*=========================*/      genfree(theEnv,buffer,bufferSize);      /*=============================*/   /* Restore the current module. */   /*=============================*/   RestoreCurrentModule(theEnv);  }/*********************************************//* ListConstructCommand: Generic Routine for *//*   listing the constructs in a module.     *//*********************************************/globle void ListConstructCommand(  void *theEnv,  char *functionName,  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) 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)        {         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)           {            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 list the constructs. */   /*=========================*/   ListConstruct(theEnv,constructClass,WDISPLAY,theModule);  }/*****************************************//* ListConstruct: Generic C Routine for  *//*   listing the constructs in a module. *//*****************************************/globle void ListConstruct(  void *theEnv,  struct construct *constructClass,  char *logicalName,  struct defmodule *theModule)  {   void *constructPtr;   SYMBOL_HN *constructName;   long count = 0;   int allModules = FALSE;   /*==========================*/   /* Save the current module. */   /*==========================*/   SaveCurrentModule(theEnv);   /*=======================================*/   /* If the module specified is NULL, then */   /* list all constructs in all modules.   */   /*=======================================*/   if (theModule == NULL)     {      theModule = (struct defmodule *) EnvGetNextDefmodule(theEnv,NULL);      allModules = TRUE;     }   /*==================================*/   /* Loop through all of the modules. */   /*==================================*/   while (theModule != NULL)     {      /*========================================*/      /* If we're printing the construct in all */      /* modules, then preface each module      */      /* listing with the name of the module.   */      /*========================================*/      if (allModules)        {         EnvPrintRouter(theEnv,logicalName,EnvGetDefmoduleName(theEnv,theModule));         EnvPrintRouter(theEnv,logicalName,":\n");        }      /*===============================*/      /* Set the current module to the */      /* module we're examining.       */      /*===============================*/      EnvSetCurrentModule(theEnv,(void *) theModule);      /*===========================================*/      /* List all of the constructs in the module. */      /*===========================================*/      for (constructPtr = (*constructClass->getNextItemFunction)(theEnv,NULL);           constructPtr != NULL;           constructPtr = (*constructClass->getNextItemFunction)(theEnv,constructPtr))        {         if (EvaluationData(theEnv)->HaltExecution == TRUE) return;         constructName = (*constructClass->getConstructNameFunction)((struct constructHeader *) constructPtr);         if (constructName != NULL)           {            if (allModules) EnvPrintRouter(theEnv,WDISPLAY,"   ");            EnvPrintRouter(theEnv,logicalName,ValueToString(constructName));            EnvPrintRouter(theEnv,logicalName,"\n");           }         count++;        }      /*====================================*/      /* Move on to the next module (if the */      /* listing is to contain the names of */      /* constructs from all modules).      */      /*====================================*/      if (allModules) theModule = (struct defmodule *) EnvGetNextDefmodule(theEnv,theModule);      else theModule = NULL;     }   /*=================================================*/   /* Print the tally and restore the current module. */   /*=================================================*/   PrintTally(theEnv,WDISPLAY,count,constructClass->constructName,                             constructClass->pluralName);   RestoreCurrentModule(theEnv);  }/**********************************************************//* SetNextConstruct: Sets the next field of one construct *//*   to point to another construct of the same type.      *//**********************************************************/globle void SetNextConstruct(  struct constructHeader *theConstruct,  struct constructHeader *targetConstruct)  { theConstruct->next = targetConstruct; }/********************************************************************//* GetConstructModuleItem: Returns the construct module for a given *//*   construct (note that this is a pointer to a data structure     *//*   like the deffactsModule, not a pointer to an environment       *//*   module which contains a number of types of constructs.         *//********************************************************************/globle struct defmoduleItemHeader *GetConstructModuleItem(  struct constructHeader *theConstruct)  { return(theConstruct->whichModule); }/*************************************************//* GetConstructPPForm: Returns the pretty print  *//*   representation for the specified construct. *//*************************************************/#if IBM_TBC#pragma argsused#endifgloble char *GetConstructPPForm(  void *theEnv,  struct constructHeader *theConstruct)  { #if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(theEnv)#endif   return(theConstruct->ppForm);   }/****************************************************//* GetNextConstructItem: Returns the next construct *//*   items from a list of constructs.               *//****************************************************/globle struct constructHeader *GetNextConstructItem(  void *theEnv,  struct constructHeader *theConstruct,  int moduleIndex)  {   struct defmoduleItemHeader *theModuleItem;   if (theConstruct == NULL)     {      theModuleItem = (struct defmoduleItemHeader *)                      GetModuleItem(theEnv,NULL,moduleIndex);      if (theModuleItem == NULL) return(NULL);      return(theModuleItem->firstItem);     }   return(theConstruct->next);  }/*******************************************************//* GetConstructModuleItemByIndex: Returns a pointer to *//*  the defmodule item for the specified construct. If *//*  theModule is NULL, then the construct module item  *//*  for the current module is returned, otherwise the  *//*  construct module item for the specified construct  *//*  is returned.                                       *//*******************************************************/globle struct defmoduleItemHeader *GetConstructModuleItemByIndex(  void *theEnv,  struct defmodule *theModule,  int moduleIndex)  {   if (theModule != NULL)     {      return((struct defmoduleItemHeader *)             GetModuleItem(theEnv,theModule,moduleIndex));     }   return((struct defmoduleItemHeader *)          GetModuleItem(theEnv,((struct defmodule *) EnvGetCurrentModule(theEnv)),moduleIndex));  }/******************************************//* FreeConstructHeaderModule: Deallocates *//*   the data structures associated with  *//*   the construct module item header.    *//******************************************/globle void FreeConstructHeaderModule(  void *theEnv,  struct defmoduleItemHeader *theModuleItem,  struct construct *constructClass)  {   struct constructHeader *thisOne, *nextOne;   thisOne = theModuleItem->firstItem;   while (thisOne != NULL)     {      nextOne = thisOne->next;      (*constructClass->freeFunction)(theEnv,thisOne);      thisOne = nextOne;     }  }/**********************************************//* DoForAllConstructs: Executes an action for *//*   all constructs of a specified type.      *//**********************************************/globle long DoForAllConstructs(  void *theEnv,  void (*actionFunction)(void *,struct constructHeader *,void *),  int moduleItemIndex,  int interruptable,  void *userBuffer)  {   struct constructHeader *theConstruct;   struct defmoduleItemHeader *theModuleItem;   void *theModule;   long moduleCount = 0L;      /*==========================*/   /* Save the current module. */   /*==========================*/   SaveCurrentModule(theEnv);   /*==================================*/   /* Loop through all of the modules. */   /*==================================*/   for (theModule = EnvGetNextDefmodule(theEnv,NULL);        theModule != NULL;        theModule = EnvGetNextDefmodule(theEnv,theModule), moduleCount++)     {      /*=============================*/      /* Set the current module to   */      /* the module we're examining. */      /*=============================*/      EnvSetCurrentModule(theEnv,(void *) theModule);      /*================================================*/      /* Perform the action for each of the constructs. */      /*================================================*/      theModuleItem = (struct defmoduleItemHeader *)                      GetModuleItem(theEnv,(struct defmodule *) theModule,moduleItemIndex);

⌨️ 快捷键说明

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