📄 genrccom.c
字号:
DEFGENERIC *gfunc; long mi;#if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(theEnv)#endif gfunc = (DEFGENERIC *) ptr; mi = FindMethodByIndex(gfunc,theIndex); PrintMethod(theEnv,buf,buflen,&gfunc->methods[mi]); }/********************************************************* NAME : EnvGetDefgenericWatch DESCRIPTION : Determines if trace messages are gnerated when executing generic function INPUTS : A pointer to the generic RETURNS : TRUE if a trace is active, FALSE otherwise SIDE EFFECTS : None NOTES : None *********************************************************/#if IBM_TBC#pragma argsused#endifgloble unsigned EnvGetDefgenericWatch( void *theEnv, void *theGeneric) {#if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(theEnv)#endif return(((DEFGENERIC *) theGeneric)->trace); }/********************************************************* NAME : EnvSetDefgenericWatch DESCRIPTION : Sets the trace to ON/OFF for the generic function INPUTS : 1) TRUE to set the trace on, FALSE to set it off 2) A pointer to the generic RETURNS : Nothing useful SIDE EFFECTS : Watch flag for the generic set NOTES : None *********************************************************/#if IBM_TBC#pragma argsused#endifgloble void EnvSetDefgenericWatch( void *theEnv, unsigned newState, void *theGeneric) {#if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(theEnv)#endif ((DEFGENERIC *) theGeneric)->trace = newState; }/********************************************************* NAME : EnvGetDefmethodWatch DESCRIPTION : Determines if trace messages for calls to this method will be generated or not INPUTS : 1) A pointer to the generic 2) The index of the method RETURNS : TRUE if a trace is active, FALSE otherwise SIDE EFFECTS : None NOTES : None *********************************************************/#if IBM_TBC#pragma argsused#endifgloble unsigned EnvGetDefmethodWatch( void *theEnv, void *theGeneric, long theIndex) { DEFGENERIC *gfunc; long mi;#if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(theEnv)#endif gfunc = (DEFGENERIC *) theGeneric; mi = FindMethodByIndex(gfunc,theIndex); return(gfunc->methods[mi].trace); }/********************************************************* NAME : EnvSetDefmethodWatch DESCRIPTION : Sets the trace to ON/OFF for the calling of the method INPUTS : 1) TRUE to set the trace on, FALSE to set it off 2) A pointer to the generic 3) The index of the method RETURNS : Nothing useful SIDE EFFECTS : Watch flag for the method set NOTES : None *********************************************************/#if IBM_TBC#pragma argsused#endifgloble void EnvSetDefmethodWatch( void *theEnv, unsigned newState, void *theGeneric, long theIndex) { DEFGENERIC *gfunc; long mi;#if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(theEnv)#endif gfunc = (DEFGENERIC *) theGeneric; mi = FindMethodByIndex(gfunc,theIndex); gfunc->methods[mi].trace = newState; }/******************************************************** NAME : PPDefgenericCommand DESCRIPTION : Displays the pretty-print form of a generic function header INPUTS : None RETURNS : Nothing useful SIDE EFFECTS : None NOTES : H/L Syntax: (ppdefgeneric <name>) ********************************************************/globle void PPDefgenericCommand( void *theEnv) { PPConstructCommand(theEnv,"ppdefgeneric",DefgenericData(theEnv)->DefgenericConstruct); }/********************************************************** NAME : PPDefmethodCommand DESCRIPTION : Displays the pretty-print form of a method INPUTS : None RETURNS : Nothing useful SIDE EFFECTS : None NOTES : H/L Syntax: (ppdefmethod <name> <index>) **********************************************************/globle void PPDefmethodCommand( void *theEnv) { DATA_OBJECT temp; char *gname; DEFGENERIC *gfunc; int gi; if (EnvArgTypeCheck(theEnv,"ppdefmethod",1,SYMBOL,&temp) == FALSE) return; gname = DOToString(temp); if (EnvArgTypeCheck(theEnv,"ppdefmethod",2,INTEGER,&temp) == FALSE) return; gfunc = CheckGenericExists(theEnv,"ppdefmethod",gname); if (gfunc == NULL) return; gi = CheckMethodExists(theEnv,"ppdefmethod",gfunc,(long) DOToLong(temp)); if (gi == -1) return; if (gfunc->methods[gi].ppForm != NULL) PrintInChunks(theEnv,WDISPLAY,gfunc->methods[gi].ppForm); }/****************************************************** NAME : ListDefmethodsCommand DESCRIPTION : Lists a brief description of methods for a particular generic function INPUTS : None RETURNS : Nothing useful SIDE EFFECTS : None NOTES : H/L Syntax: (list-defmethods <name>) ******************************************************/globle void ListDefmethodsCommand( void *theEnv) { DATA_OBJECT temp; DEFGENERIC *gfunc; if (EnvRtnArgCount(theEnv) == 0) EnvListDefmethods(theEnv,WDISPLAY,NULL); else { if (EnvArgTypeCheck(theEnv,"list-defmethods",1,SYMBOL,&temp) == FALSE) return; gfunc = CheckGenericExists(theEnv,"list-defmethods",DOToString(temp)); if (gfunc != NULL) EnvListDefmethods(theEnv,WDISPLAY,(void *) gfunc); } }/*************************************************************** NAME : EnvGetDefmethodPPForm DESCRIPTION : Getsa generic function method pretty print form INPUTS : 1) Address of the generic function 2) Index of the method RETURNS : Method ppform SIDE EFFECTS : None NOTES : None ***************************************************************/#if IBM_TBC#pragma argsused#endifgloble char *EnvGetDefmethodPPForm( void *theEnv, void *ptr, long theIndex) { DEFGENERIC *gfunc; int mi;#if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(theEnv)#endif gfunc = (DEFGENERIC *) ptr; mi = FindMethodByIndex(gfunc,theIndex); return(gfunc->methods[mi].ppForm); }/*************************************************** NAME : ListDefgenericsCommand DESCRIPTION : Displays all defgeneric names INPUTS : None RETURNS : Nothing useful SIDE EFFECTS : Defgeneric names printed NOTES : H/L Interface ***************************************************/globle void ListDefgenericsCommand( void *theEnv) { ListConstructCommand(theEnv,"list-defgenerics",DefgenericData(theEnv)->DefgenericConstruct); }/*************************************************** NAME : EnvListDefgenerics DESCRIPTION : Displays all defgeneric names INPUTS : 1) The logical name of the output 2) The module RETURNS : Nothing useful SIDE EFFECTS : Defgeneric names printed NOTES : C Interface ***************************************************/globle void EnvListDefgenerics( void *theEnv, char *logicalName, struct defmodule *theModule) { ListConstruct(theEnv,DefgenericData(theEnv)->DefgenericConstruct,logicalName,theModule); }/****************************************************** NAME : EnvListDefmethods DESCRIPTION : Lists a brief description of methods for a particular generic function INPUTS : 1) The logical name of the output 2) Generic function to list methods for (NULL means list all methods) RETURNS : Nothing useful SIDE EFFECTS : None NOTES : None ******************************************************/globle void EnvListDefmethods( void *theEnv, char *logicalName, void *vptr) { DEFGENERIC *gfunc; long count; if (vptr != NULL) count = ListMethodsForGeneric(theEnv,logicalName,(DEFGENERIC *) vptr); else { count = 0L; for (gfunc = (DEFGENERIC *) EnvGetNextDefgeneric(theEnv,NULL) ; gfunc != NULL ; gfunc = (DEFGENERIC *) EnvGetNextDefgeneric(theEnv,(void *) gfunc)) { count += ListMethodsForGeneric(theEnv,logicalName,gfunc); if (EnvGetNextDefgeneric(theEnv,(void *) gfunc) != NULL) EnvPrintRouter(theEnv,logicalName,"\n"); } } PrintTally(theEnv,logicalName,count,"method","methods"); }#endif/*************************************************************** NAME : GetDefgenericListFunction DESCRIPTION : Groups all defgeneric names into a multifield list INPUTS : A data object buffer to hold the multifield result RETURNS : Nothing useful SIDE EFFECTS : Multifield allocated and filled NOTES : H/L Syntax: (get-defgeneric-list [<module>]) ***************************************************************/globle void GetDefgenericListFunction( void *theEnv, DATA_OBJECT*returnValue) { GetConstructListFunction(theEnv,"get-defgeneric-list",returnValue,DefgenericData(theEnv)->DefgenericConstruct); }/*************************************************************** NAME : EnvGetDefgenericList DESCRIPTION : Groups all defgeneric names into a multifield list INPUTS : 1) A data object buffer to hold the multifield result 2) The module from which to obtain defgenerics RETURNS : Nothing useful SIDE EFFECTS : Multifield allocated and filled NOTES : External C access ***************************************************************/globle void EnvGetDefgenericList( void *theEnv, DATA_OBJECT *returnValue, struct defmodule *theModule) { GetConstructList(theEnv,returnValue,DefgenericData(theEnv)->DefgenericConstruct,theModule); }/*********************************************************** NAME : GetDefmethodListCommand DESCRIPTION : Groups indices of all methdos for a generic function into a multifield variable (NULL means get methods for all generics) INPUTS : A data object buffer RETURNS : Nothing useful SIDE EFFECTS : Multifield set to list of method indices NOTES : None ***********************************************************/globle void GetDefmethodListCommand( void *theEnv, DATA_OBJECT_PTR returnValue) { DATA_OBJECT temp; DEFGENERIC *gfunc; if (EnvRtnArgCount(theEnv) == 0) EnvGetDefmethodList(theEnv,NULL,returnValue); else { if (EnvArgTypeCheck(theEnv,"get-defmethod-list",1,SYMBOL,&temp) == FALSE) { EnvSetMultifieldErrorValue(theEnv,returnValue); return; } gfunc = CheckGenericExists(theEnv,"get-defmethod-list",DOToString(temp)); if (gfunc != NULL) EnvGetDefmethodList(theEnv,(void *) gfunc,returnValue); else EnvSetMultifieldErrorValue(theEnv,returnValue); } }/*********************************************************** NAME : EnvGetDefmethodList DESCRIPTION : Groups indices of all methdos for a generic function into a multifield variable (NULL means get methods for all generics) INPUTS : 1) A pointer to a generic function 2) A data object buffer
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -