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

📄 classcom.c

📁 clips源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
#if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(theEnv)#endif   return(((DEFCLASS *) theClass)->traceInstances);  }/*********************************************************  NAME         : EnvSetDefclassWatchInstances  DESCRIPTION  : Sets the trace to ON/OFF for the                 creation/deletion of instances                 of the class  INPUTS       : 1) TRUE to set the trace on,                    FALSE to set it off                 2) A pointer to the class  RETURNS      : Nothing useful  SIDE EFFECTS : Watch flag for the class set  NOTES        : None *********************************************************/#if IBM_TBC#pragma argsused#endifgloble void EnvSetDefclassWatchInstances(  void *theEnv,  unsigned newState,  void *theClass)  {#if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(theEnv)#endif   if (((DEFCLASS *) theClass)->abstract)     return;   ((DEFCLASS *) theClass)->traceInstances = newState;  }/*********************************************************  NAME         : EnvGetDefclassWatchSlots  DESCRIPTION  : Determines if changes to slots of                 instances of this class will generate                 trace messages or not  INPUTS       : A pointer to the class  RETURNS      : TRUE if a trace is active,                 FALSE otherwise  SIDE EFFECTS : None  NOTES        : None *********************************************************/#if IBM_TBC#pragma argsused#endifgloble unsigned EnvGetDefclassWatchSlots(  void *theEnv,  void *theClass)  {#if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(theEnv)#endif   return(((DEFCLASS *) theClass)->traceSlots);  }/**********************************************************  NAME         : EnvSetDefclassWatchSlots  DESCRIPTION  : Sets the trace to ON/OFF for the                 changes to slots of instances of the class  INPUTS       : 1) TRUE to set the trace on,                    FALSE to set it off                 2) A pointer to the class  RETURNS      : Nothing useful  SIDE EFFECTS : Watch flag for the class set  NOTES        : None **********************************************************/#if IBM_TBC#pragma argsused#endifgloble void EnvSetDefclassWatchSlots(  void *theEnv,  unsigned newState,  void *theClass)  {#if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(theEnv)#endif   ((DEFCLASS *) theClass)->traceSlots = newState;  }/******************************************************************  NAME         : DefclassWatchAccess  DESCRIPTION  : Parses a list of class names passed by                 AddWatchItem() and sets the traces accordingly  INPUTS       : 1) A code indicating which trace flag is to be set                    0 - Watch instance creation/deletion                    1 - Watch slot changes to instances                 2) The value to which to set the trace flags                 3) A list of expressions containing the names                    of the classes for which to set traces  RETURNS      : TRUE if all OK, FALSE otherwise  SIDE EFFECTS : Watch flags set in specified classes  NOTES        : Accessory function for AddWatchItem() ******************************************************************/globle unsigned DefclassWatchAccess(  void *theEnv,  int code,  unsigned newState,  EXPRESSION *argExprs)  {   if (code)     return(ConstructSetWatchAccess(theEnv,DefclassData(theEnv)->DefclassConstruct,newState,argExprs,                                    EnvGetDefclassWatchSlots,EnvSetDefclassWatchSlots));   else     return(ConstructSetWatchAccess(theEnv,DefclassData(theEnv)->DefclassConstruct,newState,argExprs,                                    EnvGetDefclassWatchInstances,EnvSetDefclassWatchInstances));  }/***********************************************************************  NAME         : DefclassWatchPrint  DESCRIPTION  : Parses a list of class names passed by                 AddWatchItem() and displays the traces accordingly  INPUTS       : 1) The logical name of the output                 2) A code indicating which trace flag is to be examined                    0 - Watch instance creation/deletion                    1 - Watch slot changes to instances                 3) A list of expressions containing the names                    of the classes for which to examine traces  RETURNS      : TRUE if all OK, FALSE otherwise  SIDE EFFECTS : Watch flags displayed for specified classes  NOTES        : Accessory function for AddWatchItem() ***********************************************************************/globle unsigned DefclassWatchPrint(  void *theEnv,  char *logName,  int code,  EXPRESSION *argExprs)  {   if (code)     return(ConstructPrintWatchAccess(theEnv,DefclassData(theEnv)->DefclassConstruct,logName,argExprs,                                      EnvGetDefclassWatchSlots,EnvSetDefclassWatchSlots));   else     return(ConstructPrintWatchAccess(theEnv,DefclassData(theEnv)->DefclassConstruct,logName,argExprs,                                      EnvGetDefclassWatchInstances,EnvSetDefclassWatchInstances));  }#endif/*********************************************************  NAME         : GetDefclassListFunction  DESCRIPTION  : Groups names of all defclasses into                   a multifield variable  INPUTS       : A data object buffer  RETURNS      : Nothing useful  SIDE EFFECTS : Multifield set to list of classes  NOTES        : None *********************************************************/globle void GetDefclassListFunction(  void *theEnv,  DATA_OBJECT_PTR returnValue)  {   GetConstructListFunction(theEnv,"get-defclass-list",returnValue,DefclassData(theEnv)->DefclassConstruct);  }/***************************************************************  NAME         : EnvGetDefclassList  DESCRIPTION  : Groups all defclass names into                 a multifield list  INPUTS       : 1) A data object buffer to hold                    the multifield result                 2) The module from which to obtain defclasses  RETURNS      : Nothing useful  SIDE EFFECTS : Multifield allocated and filled  NOTES        : External C access ***************************************************************/globle void EnvGetDefclassList(  void *theEnv,  DATA_OBJECT *returnValue,  struct defmodule *theModule)  {   GetConstructList(theEnv,returnValue,DefclassData(theEnv)->DefclassConstruct,theModule);  }/*****************************************************  NAME         : HasSuperclass  DESCRIPTION  : Determines if class-2 is a superclass                   of class-1  INPUTS       : 1) Class-1                 2) Class-2  RETURNS      : TRUE if class-2 is a superclass of                   class-1, FALSE otherwise  SIDE EFFECTS : None  NOTES        : None *****************************************************/globle int HasSuperclass(  DEFCLASS *c1,  DEFCLASS *c2)  {   long i;   for (i = 1 ; i < c1->allSuperclasses.classCount ; i++)     if (c1->allSuperclasses.classArray[i] == c2)       return(TRUE);   return(FALSE);  }/********************************************************************  NAME         : CheckClassAndSlot  DESCRIPTION  : Checks class and slot argument for various functions  INPUTS       : 1) Name of the calling function                 2) Buffer for class address  RETURNS      : Slot symbol, NULL on errors  SIDE EFFECTS : None  NOTES        : None ********************************************************************/globle SYMBOL_HN *CheckClassAndSlot(   void *theEnv,   char *func,   DEFCLASS **cls)  {   DATA_OBJECT temp;   if (EnvArgTypeCheck(theEnv,func,1,SYMBOL,&temp) == FALSE)     return(NULL);   *cls = LookupDefclassByMdlOrScope(theEnv,DOToString(temp));   if (*cls == NULL)     {      ClassExistError(theEnv,func,DOToString(temp));      return(NULL);     }   if (EnvArgTypeCheck(theEnv,func,2,SYMBOL,&temp) == FALSE)     return(NULL);   return((SYMBOL_HN *) GetValue(temp));  }#if (! BLOAD_ONLY) && (! RUN_TIME)/***************************************************  NAME         : SaveDefclasses  DESCRIPTION  : Prints pretty print form of                   defclasses to specified output  INPUTS       : The  logical name of the output  RETURNS      : Nothing useful  SIDE EFFECTS : None  NOTES        : None ***************************************************/#if IBM_TBC && (! DEBUGGING_FUNCTIONS)#pragma argsused#endifgloble void SaveDefclasses(  void *theEnv,  void *theModule,  char *logName)  {#if DEBUGGING_FUNCTIONS   DoForAllConstructsInModule(theEnv,theModule,SaveDefclass,DefclassData(theEnv)->DefclassModuleIndex,FALSE,(void *) logName);#else#if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(theEnv,theModule,logName)#endif#endif  }#endif/* =========================================   *****************************************          INTERNALLY VISIBLE FUNCTIONS   =========================================   ***************************************** */#if (! BLOAD_ONLY) && (! RUN_TIME) && DEBUGGING_FUNCTIONS/***************************************************  NAME         : SaveDefclass  DESCRIPTION  : Writes out the pretty-print forms                 of a class and all its handlers  INPUTS       : 1) The class                 2) The logical name of the output  RETURNS      : Nothing useful  SIDE EFFECTS : Class and handlers written  NOTES        : None ***************************************************/static void SaveDefclass(  void *theEnv,  struct constructHeader *theDefclass,  void *userBuffer)  {   char *logName = (char *) userBuffer;   unsigned hnd;   char *ppForm;   ppForm = EnvGetDefclassPPForm(theEnv,(void *) theDefclass);   if (ppForm != NULL)     {      PrintInChunks(theEnv,logName,ppForm);      EnvPrintRouter(theEnv,logName,"\n");      hnd = EnvGetNextDefmessageHandler(theEnv,(void *) theDefclass,0);      while (hnd != 0)        {         ppForm = EnvGetDefmessageHandlerPPForm(theEnv,(void *) theDefclass,hnd);         if (ppForm != NULL)           {            PrintInChunks(theEnv,logName,ppForm);            EnvPrintRouter(theEnv,logName,"\n");           }         hnd = EnvGetNextDefmessageHandler(theEnv,(void *) theDefclass,hnd);        }     }  }#endif/***********************************************//* EnvSetClassDefaultsMode: Allows the setting *//*    of the class defaults mode.              *//***********************************************/globle unsigned short EnvSetClassDefaultsMode(  void *theEnv,  unsigned short value)  {   unsigned short ov;   ov = DefclassData(theEnv)->ClassDefaultsMode;   DefclassData(theEnv)->ClassDefaultsMode = value;   return(ov);  }/****************************************//* EnvGetClassDefaultsMode: Returns the *//*    value of the class defaults mode. *//****************************************/globle unsigned short EnvGetClassDefaultsMode(  void *theEnv)  {   return(DefclassData(theEnv)->ClassDefaultsMode);  }  /***************************************************//* GetClassDefaultsModeCommand: H/L access routine *//*   for the get-class-defaults-mode command.      *//***************************************************/globle void *GetClassDefaultsModeCommand(  void *theEnv)  {   EnvArgCountCheck(theEnv,"get-class-defaults-mode",EXACTLY,0);   return((SYMBOL_HN *) EnvAddSymbol(theEnv,GetClassDefaultsModeName(EnvGetClassDefaultsMode(theEnv))));  }/***************************************************//* SetClassDefaultsModeCommand: H/L access routine *//*   for the set-class-defaults-mode command.      *//***************************************************/globle void *SetClassDefaultsModeCommand(  void *theEnv)  {   DATA_OBJECT argPtr;   char *argument;   unsigned short oldMode;      oldMode = DefclassData(theEnv)->ClassDefaultsMode;   /*=====================================================*/   /* Check for the correct number and type of arguments. */   /*=====================================================*/   if (EnvArgCountCheck(theEnv,"set-class-defaults-mode",EXACTLY,1) == -1)     { return((SYMBOL_HN *) EnvAddSymbol(theEnv,GetClassDefaultsModeName(EnvGetClassDefaultsMode(theEnv)))); }   if (EnvArgTypeCheck(theEnv,"set-class-defaults-mode",1,SYMBOL,&argPtr) == FALSE)     { return((SYMBOL_HN *) EnvAddSymbol(theEnv,GetClassDefaultsModeName(EnvGetClassDefaultsMode(theEnv)))); }   argument = DOToString(argPtr);   /*=============================================*/   /* Set the strategy to the specified strategy. */   /*=============================================*/   if (strcmp(argument,"conservation") == 0)     { EnvSetClassDefaultsMode(theEnv,CONSERVATION_MODE); }   else if (strcmp(argument,"convenience") == 0)     { EnvSetClassDefaultsMode(theEnv,CONVENIENCE_MODE); }   else     {      ExpectedTypeError1(theEnv,"set-class-defaults-mode",1,      "symbol with value conservation or convenience");      return((SYMBOL_HN *) EnvAddSymbol(theEnv,GetClassDefaultsModeName(EnvGetClassDefaultsMode(theEnv))));     }   /*===================================*/   /* Return the old value of the mode. */   /*===================================*/   return((SYMBOL_HN *) EnvAddSymbol(theEnv,GetClassDefaultsModeName(oldMode)));  }/*******************************************************************//* GetClassDefaultsModeName: Given the integer value corresponding *//*   to a specified class defaults mode, return a character string *//*   of the class defaults mode's name.                            *//*******************************************************************/static char *GetClassDefaultsModeName(  unsigned short mode)  {   char *sname;   switch (mode)     {      case CONSERVATION_MODE:        sname = "conservation";        break;      case CONVENIENCE_MODE:        sname = "convenience";        break;      default:        sname = "unknown";        break;     }   return(sname);  }#endif

⌨️ 快捷键说明

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