/************************************************************* NAME : DisplaySlotBasicInfo DESCRIPTION : Displays a table summary of basic facets for the slots of a class including: single/multiple default/no-default/default-dynamic inherit/no-inherit read-write/initialize-only/read-only local/shared composite/exclusive reactive/non-reactive public/private create-accessor read/write override-message The function also displays the source class(es) for the facets INPUTS : 1) The logical name of the output 2) A format string for use in sprintf (for printing slot names) 3) A format string for use in sprintf (for printing slot override message names) 4) A buffer to store the display in 5) A pointer to the class RETURNS : Nothing useful SIDE EFFECTS : Buffer written to and displayed NOTES : None *************************************************************/ static void DisplaySlotBasicInfo( void *theEnv, char *logicalName, char *slotNamePrintFormat, char *overrideMessagePrintFormat, char *buf, DEFCLASS *cls) { long i; SLOT_DESC *sp; char *createString; gensprintf(buf,slotNamePrintFormat,"SLOTS"); #if DEFRULE_CONSTRUCT genstrcat(buf,"FLD DEF PRP ACC STO MCH SRC VIS CRT "); #else genstrcat(buf,"FLD DEF PRP ACC STO SRC VIS CRT "); #endif EnvPrintRouter(theEnv,logicalName,buf); gensprintf(buf,overrideMessagePrintFormat,"OVRD-MSG"); EnvPrintRouter(theEnv,logicalName,buf); EnvPrintRouter(theEnv,logicalName,"SOURCE(S)\n"); for (i = 0 ; i < cls->instanceSlotCount ; i++) { sp = cls->instanceTemplate[i]; gensprintf(buf,slotNamePrintFormat,ValueToString(sp->slotName->name)); genstrcat(buf,sp->multiple ? "MLT " : "SGL "); if (sp->noDefault) genstrcat(buf,"NIL "); else genstrcat(buf,sp->dynamicDefault ? "DYN " : "STC "); genstrcat(buf,sp->noInherit ? "NIL " : "INH "); if (sp->initializeOnly) genstrcat(buf,"INT "); else if (sp->noWrite) genstrcat(buf," R "); else genstrcat(buf,"RW "); genstrcat(buf,sp->shared ? "SHR " : "LCL "); #if DEFRULE_CONSTRUCT genstrcat(buf,sp->reactive ? "RCT " : "NIL "); #endif genstrcat(buf,sp->composite ? "CMP " : "EXC "); genstrcat(buf,sp->publicVisibility ? "PUB " : "PRV "); createString = GetCreateAccessorString(sp); if (createString[1] == '\0') genstrcat(buf," "); genstrcat(buf,createString); if ((createString[1] == '\0') ? TRUE : (createString[2] == '\0')) genstrcat(buf," "); genstrcat(buf," "); EnvPrintRouter(theEnv,logicalName,buf); gensprintf(buf,overrideMessagePrintFormat, sp->noWrite ? "NIL" : ValueToString(sp->overrideMessage)); EnvPrintRouter(theEnv,logicalName,buf); PrintSlotSources(theEnv,logicalName,sp->slotName->name,&sp->cls->allSuperclasses,0,TRUE); EnvPrintRouter(theEnv,logicalName,"\n"); } }
globle void EnvSlotFacets( void *theEnv, void *clsptr, const char *sname, DATA_OBJECT *result) { register int i; register SLOT_DESC *sp; if ((sp = SlotInfoSlot(theEnv,result,(DEFCLASS *) clsptr,sname,"slot-facets")) == NULL) return; #if DEFRULE_CONSTRUCT result->end = 9; result->value = (void *) EnvCreateMultifield(theEnv,10L); for (i = 1 ; i <= 10 ; i++) SetMFType(result->value,i,SYMBOL); #else result->end = 8; result->value = (void *) EnvCreateMultifield(theEnv,9L); for (i = 1 ; i <= 9 ; i++) SetMFType(result->value,i,SYMBOL); #endif if (sp->multiple) SetMFValue(result->value,1,EnvAddSymbol(theEnv,"MLT")); else SetMFValue(result->value,1,EnvAddSymbol(theEnv,"SGL")); if (sp->noDefault) SetMFValue(result->value,2,EnvAddSymbol(theEnv,"NIL")); else { if (sp->dynamicDefault) SetMFValue(result->value,2,EnvAddSymbol(theEnv,"DYN")); else SetMFValue(result->value,2,EnvAddSymbol(theEnv,"STC")); } if (sp->noInherit) SetMFValue(result->value,3,EnvAddSymbol(theEnv,"NIL")); else SetMFValue(result->value,3,EnvAddSymbol(theEnv,"INH")); if (sp->initializeOnly) SetMFValue(result->value,4,EnvAddSymbol(theEnv,"INT")); else if (sp->noWrite) SetMFValue(result->value,4,EnvAddSymbol(theEnv,"R")); else SetMFValue(result->value,4,EnvAddSymbol(theEnv,"RW")); if (sp->shared) SetMFValue(result->value,5,EnvAddSymbol(theEnv,"SHR")); else SetMFValue(result->value,5,EnvAddSymbol(theEnv,"LCL")); #if DEFRULE_CONSTRUCT if (sp->reactive) SetMFValue(result->value,6,EnvAddSymbol(theEnv,"RCT")); else SetMFValue(result->value,6,EnvAddSymbol(theEnv,"NIL")); if (sp->composite) SetMFValue(result->value,7,EnvAddSymbol(theEnv,"CMP")); else SetMFValue(result->value,7,EnvAddSymbol(theEnv,"EXC")); if (sp->publicVisibility) SetMFValue(result->value,8,EnvAddSymbol(theEnv,"PUB")); else SetMFValue(result->value,8,EnvAddSymbol(theEnv,"PRV")); SetMFValue(result->value,9,EnvAddSymbol(theEnv,GetCreateAccessorString((void *) sp))); SetMFValue(result->value,10,sp->noWrite ? EnvAddSymbol(theEnv,"NIL") : (void *) sp->overrideMessage); #else if (sp->composite) SetMFValue(result->value,6,EnvAddSymbol(theEnv,"CMP")); else SetMFValue(result->value,6,EnvAddSymbol(theEnv,"EXC")); if (sp->publicVisibility) SetMFValue(result->value,7,EnvAddSymbol(theEnv,"PUB")); else SetMFValue(result->value,7,EnvAddSymbol(theEnv,"PRV")); SetMFValue(result->value,8,EnvAddSymbol(theEnv,GetCreateAccessorString((void *) sp))); SetMFValue(result->value,9,sp->noWrite ? EnvAddSymbol(theEnv,"NIL") : (void *) sp->overrideMessage); #endif }
globle void SlotFacets( void *clsptr, char *sname, DATA_OBJECT *result) { register int i; register SLOT_DESC *sp; if ((sp = SlotInfoSlot(result,(DEFCLASS *) clsptr,sname,"slot-facets")) == NULL) return; #if INSTANCE_PATTERN_MATCHING result->end = 9; result->value = (void *) CreateMultifield(10L); for (i = 1 ; i <= 10 ; i++) SetMFType(result->value,i,SYMBOL); #else result->end = 8; result->value = (void *) CreateMultifield(9L); for (i = 1 ; i <= 9 ; i++) SetMFType(result->value,i,SYMBOL); #endif if (sp->multiple) SetMFValue(result->value,1,AddSymbol("MLT")); else SetMFValue(result->value,1,AddSymbol("SGL")); if (sp->noDefault) SetMFValue(result->value,2,AddSymbol("NIL")); else { if (sp->dynamicDefault) SetMFValue(result->value,2,AddSymbol("DYN")); else SetMFValue(result->value,2,AddSymbol("STC")); } if (sp->noInherit) SetMFValue(result->value,3,AddSymbol("NIL")); else SetMFValue(result->value,3,AddSymbol("INH")); if (sp->initializeOnly) SetMFValue(result->value,4,AddSymbol("INT")); else if (sp->noWrite) SetMFValue(result->value,4,AddSymbol("R")); else SetMFValue(result->value,4,AddSymbol("RW")); if (sp->shared) SetMFValue(result->value,5,AddSymbol("SHR")); else SetMFValue(result->value,5,AddSymbol("LCL")); #if INSTANCE_PATTERN_MATCHING if (sp->reactive) SetMFValue(result->value,6,AddSymbol("RCT")); else SetMFValue(result->value,6,AddSymbol("NIL")); if (sp->composite) SetMFValue(result->value,7,AddSymbol("CMP")); else SetMFValue(result->value,7,AddSymbol("EXC")); if (sp->publicVisibility) SetMFValue(result->value,8,AddSymbol("PUB")); else SetMFValue(result->value,8,AddSymbol("PRV")); SetMFValue(result->value,9,AddSymbol(GetCreateAccessorString((void *) sp))); SetMFValue(result->value,10,sp->noWrite ? AddSymbol("NIL") : (void *) sp->overrideMessage); #else if (sp->composite) SetMFValue(result->value,6,AddSymbol("CMP")); else SetMFValue(result->value,6,AddSymbol("EXC")); if (sp->publicVisibility) SetMFValue(result->value,7,AddSymbol("PUB")); else SetMFValue(result->value,7,AddSymbol("PRV")); SetMFValue(result->value,8,AddSymbol(GetCreateAccessorString((void *) sp))); SetMFValue(result->value,9,sp->noWrite ? AddSymbol("NIL") : (void *) sp->overrideMessage); #endif }