pwr_sAttrRef wb_adrep::aref() { pwr_sAttrRef aref = pwr_cNAttrRef; aref.Objid = pwr_cNObjid; aref.Body = bix(); aref.Offset = m_offset; aref.Size = m_size; if ( m_flags & PWR_MASK_POINTER) aref.Flags.b.Indirect = 1; if ( m_flags & PWR_MASK_ARRAY) aref.Flags.b.Array = 1; if ( cdh_tidIsCid( m_tid)) aref.Flags.b.ObjectAttr = 1; if ( m_flags & PWR_MASK_CASTATTR) aref.Flags.b.CastAttr = 1; if ( m_flags & PWR_MASK_DISABLEATTR) aref.Flags.b.DisableAttr = 1; return aref; }
wb_attribute wb_attribute::child(const char* name, int idx) const { if (!cdh_tidIsCid( m_tid)) return wb_attribute(); return wb_attribute(*this, idx, name); }
wb_attribute wb_attribute::first(int idx) const { if (!cdh_tidIsCid( m_tid)) return wb_attribute(); return wb_attribute(*this, idx, NULL); }
pwr_tStatus wb_volume::triggSyntaxCheck(wb_attribute& a, int *errorcount, int *warningcount) { pwr_tStatus sts; char methodName[80]; wb_tMethod method; if ( !cdh_tidIsCid( a.tid())) return 0; // Call object method, or inherited method for ( wb_cdef cd = cdef( a.tid()); cd; cd = cd.super()) { sprintf( methodName, "%s-SyntaxCheck", cd.name()); m_vrep->erep()->method(&sts, methodName, &method); if ( ODD(sts)) { sts = ((wb_tMethodSyntaxCheck) (method))((ldh_tSesContext)this, a.aref(), errorcount, warningcount); if ( EVEN(sts)) return sts; break; } } return LDH__SUCCESS; }
pwr_sAttrRef *wb_attribute::aref(pwr_sAttrRef *arp) const { check(); memset( arp, 0, sizeof(*arp)); arp->Objid = m_orep->oid(); arp->Offset = m_offset; arp->Size = m_size; arp->Body = m_orep->cid() | m_bix; if ( m_flags & PWR_MASK_POINTER) arp->Flags.b.Indirect = 1; if ( m_flags & PWR_MASK_ARRAY && m_idx == -1) arp->Flags.b.Array = 1; if ( m_tid == m_orep->cid()) { arp->Flags.b.Object = 1; arp->Body = m_tid | m_bix; } else if ( cdh_tidIsCid( m_tid)) arp->Flags.b.ObjectAttr = 1; if ( m_shadowed) arp->Flags.b.Shadowed = 1; if ( m_flags & PWR_MASK_CASTATTR) arp->Flags.b.CastAttr = 1; if ( m_flags & PWR_MASK_DISABLEATTR) arp->Flags.b.DisableAttr = 1; return arp; }
wb_attribute::wb_attribute(const wb_attribute& pa, int pidx, const char *aname, int aidx) : wb_status(LDH__NOSUCHATTR), m_orep(0), m_adrep(0), m_size(0), m_offset(0), m_tid(0), m_elements(1), m_is_elem(0), m_type(pwr_eType_), m_flags(0), m_bix(pwr_eBix__), m_body(0), m_shadowed(false) { pwr_tCid cid; wb_attrname n; pwr_tAName attrname; if ( !cdh_tidIsCid( pa.tid()) || pa.m_orep == 0) return; if ( pidx == -1) pidx = pa.m_idx; if ( pa.m_flags & PWR_MASK_ARRAY && !pa.m_is_elem && (pidx < 0 || pidx >= pa.m_elements)) throw wb_error_str("Invalid subscript"); strcpy( attrname, pa.attrName()); if ( pa.m_flags & PWR_MASK_ARRAY) { if ( attrname[strlen(attrname)-1] == ']') { // Replace the index char *s = strrchr( attrname, '['); if ( s) sprintf( s, "[%d]", pidx); } else // Add index sprintf( &attrname[strlen(attrname)], "[%d]", pidx); } strcat( attrname, "."); if ( aname != 0) strcat( attrname, aname); else { // First attribute if ( pa.isClass()) cid = pa.subClass(); else cid = pa.tid(); wb_cdrep *cd = pa.m_orep->vrep()->merep()->cdrep(&m_sts, cid); if ( evenSts()) return; wb_bdrep* bd = cd->bdrep(&m_sts, pwr_eBix_sys); if ( evenSts()) { delete cd; return;} wb_adrep *adrep = bd->adrep(&m_sts); if ( evenSts()) { delete cd; delete bd; return;} strcat( attrname, adrep->name()); delete adrep; delete bd; delete cd; } n = attrname; cid = pa.cid(); wb_cdrep *cd = pa.m_orep->vrep()->merep()->cdrep(&m_sts, cid); if (evenSts()) return; wb_bdrep* bd = cd->bdrep(&m_sts, pwr_eBix_sys); if (evenSts()) { // Try devbody bd = cd->bdrep(&m_sts, pwr_eBix_dev); if (evenSts()) { delete cd; return;} } m_adrep = bd->adrep(&m_sts, n.attributesAllTrue()); if (evenSts()) { // Try devbody bd = cd->bdrep(&m_sts, pwr_eBix_dev); if (evenSts()) { delete cd; return;} m_adrep = bd->adrep(&m_sts, n.attributesAllTrue()); if (evenSts()) { delete cd; delete bd; return;} } m_adrep->ref(); m_size = m_adrep->size(); m_offset = m_adrep->offset(); m_tid = m_original_tid = m_adrep->tid(); m_elements = m_adrep->nElement(); m_flags = m_adrep->flags(); m_type = m_adrep->type(); m_idx = aidx; m_orep = pa.m_orep; m_orep->ref(); m_bix = bd->bix(); if ( m_flags & PWR_MASK_CASTATTR) { pwr_tCastId castid; castId( &castid); if ( castid != pwr_cNCastId) m_tid = castid; } #if 0 if ( pa.isClass()) { m_flags |= PWR_MASK_SUBCLASS; if (pa.m_flags & PWR_MASK_SUBCLASS) m_bix = pa.m_bix; else m_bix = pa.m_adrep->bix(); } else m_bix = pa.m_bix; #endif delete bd; delete cd; }
int XNav::GetObjectMenu( xmenu_sMenuCall *ip, pwr_tCid classid, xmenu_sMenuItem **Item, pwr_tUInt32 Level, int *nItems, int AddSeparator, pwr_sAttrRef *CurrentObject) { int sts; pwr_tObjid child; pwr_tObjid menu_objid; char menu[80]; pwr_tOName classname; pwr_sAttrRef currentar = pwr_cNAttrRef; pwr_tCid supercid; if ( cdh_ObjidIsNotNull( CurrentObject->Objid)) currentar = *CurrentObject; if ( ip->ItemType == xmenu_eItemType_Object) { // Popup-menu for an object if ( !cdh_tidIsCid( classid)) return XNAV__SUCCESS; // Get the RtXtt common menu-objects strcpy( menu, "pwrs:Class-$Object-RtXtt"); sts = gdh_NameToObjid( menu, &menu_objid); if ( ODD(sts)) { sts = gdh_GetChild( menu_objid, &child); while( ODD(sts)) { sts = getAllMenuItems( ip, Item, child, Level, nItems, 0, ¤tar); if ( EVEN(sts)) return sts; sts = gdh_GetNextSibling( child, &child); } } // Get the RtXtt menu-objects for superclasses // TODO shadow overlayed methods... sts = gdh_GetSuperClass( classid, &supercid, CurrentObject->Objid); while ( ODD(sts)) { sts = gdh_ObjidToName( cdh_ClassIdToObjid( supercid), classname, sizeof(classname), cdh_mName_volumeStrict); if ( EVEN(sts)) return sts; sprintf( menu, "%s-RtXtt", classname); sts = gdh_NameToObjid( menu, &menu_objid); if ( ODD(sts)) { sts = gdh_GetChild( menu_objid, &child); while( ODD(sts)) { sts = getAllMenuItems( ip, Item, child, 0, nItems, 0, ¤tar); if ( EVEN(sts)) return sts; sts = gdh_GetNextSibling( child, &child); } } sts = gdh_GetSuperClass( supercid, &supercid, CurrentObject->Objid); } // Get the RtXtt menu-objects for this class, or for superclasses sts = gdh_ObjidToName( cdh_ClassIdToObjid( classid), classname, sizeof(classname), cdh_mName_volumeStrict); if ( EVEN(sts)) return sts; sprintf( menu, "%s-RtXtt", classname); sts = gdh_NameToObjid( menu, &menu_objid); if ( ODD(sts)) { sts = gdh_GetChild( menu_objid, &child); while( ODD(sts)) { sts = getAllMenuItems( ip, Item, child, 0, nItems, 0, ¤tar); if ( EVEN(sts)) return sts; sts = gdh_GetNextSibling( child, &child); } } } else if ( ip->ItemType == xmenu_eItemType_AttrObject) { // Find attribute object methods... if ( !cdh_tidIsCid( classid)) return XNAV__SUCCESS; // Get the RtXtt common menu-objects strcpy( menu, "pwrs:Class-$Object-RtXttAttrObject"); sts = gdh_NameToObjid( menu, &menu_objid); if ( ODD(sts)) { sts = gdh_GetChild( menu_objid, &child); while( ODD(sts)) { sts = getAllMenuItems( ip, Item, child, 0, nItems, 0, ¤tar); if ( EVEN(sts)) return sts; sts = gdh_GetNextSibling( child, &child); } } // Get the RtXtt menu-objects for this class sts = gdh_ObjidToName( cdh_ClassIdToObjid( classid), classname, sizeof(classname), cdh_mName_volumeStrict); if ( EVEN(sts)) return sts; sprintf( menu, "%s-RtXtt", classname); sts = gdh_NameToObjid( menu, &menu_objid); if ( ODD(sts)) { sts = gdh_GetChild( menu_objid, &child); while( ODD(sts)) { sts = getAllMenuItems( ip, Item, child, 0, nItems, 0, ¤tar); if ( EVEN(sts)) return sts; sts = gdh_GetNextSibling( child, &child); } } } else if ( ip->ItemType == xmenu_eItemType_Attribute) { // Find attribute methods... // Get the RtXttAttribute common menu-objects strcpy( menu, "pwrs:Class-$Object-RtXttAttribute"); sts = gdh_NameToObjid( menu, &menu_objid); if ( ODD(sts)) { sts = gdh_GetChild( menu_objid, &child); while( ODD(sts)) { sts = getAllMenuItems( ip, Item, child, 0, nItems, 0, ¤tar); if ( EVEN(sts)) return sts; sts = gdh_GetNextSibling( child, &child); } } } else if ( ip->ItemType == xmenu_eItemType_Crossref) { // Find attribute methods... // Get the RtXttCrossref common menu-objects strcpy( menu, "pwrs:Class-$Object-RtXttCrossref"); sts = gdh_NameToObjid( menu, &menu_objid); if ( ODD(sts)) { sts = gdh_GetChild( menu_objid, &child); while( ODD(sts)) { sts = getAllMenuItems( ip, Item, child, 0, nItems, 0, ¤tar); if ( EVEN(sts)) return sts; sts = gdh_GetNextSibling( child, &child); } } } return XNAV__SUCCESS; }
static pwr_tStatus trace_get_attr_m4( WGre *gre, vldh_t_node node, char *debug_par, char *object_str, char *attr_str, flow_eTraceType *trace_type, int *inverted) { pwr_tAName aname; pwr_tStatus sts; int size; pwr_sAttrRef *objarp; pwr_sAttrRef objar; char parname[120]; pwr_sTypeDef *tdef; pwr_tTid tid; char *np, *s; *inverted = 0; /* Get the objdid stored in the parameter Object */ switch ( node->ln.cid) { case pwr_cClass_GetAp: strcpy( parname, "ApObject"); break; case pwr_cClass_GetDp: strcpy( parname, "DpObject"); break; default: strcpy( parname, "Object"); } sts = ldh_GetObjectPar( node->hn.wind->hw.ldhses, node->ln.oid, "DevBody", parname, (char **)&objarp, &size); if ( EVEN(sts)) return sts; objar = *objarp; free((char *) objarp); sts = ldh_GetAttrRefTid( node->hn.wind->hw.ldhses, &objar, &tid); if( EVEN(sts) ) return sts; if ( cdh_tidIsCid( tid)) return TRA__NOPAR; /* Get the name of the node */ sts = ldh_AttrRefToName( node->hn.wind->hw.ldhses, &objar, cdh_mNName, &np, &size); if( EVEN(sts)) return sts; strcpy( aname, np); s = strrchr( aname, '.'); if ( !s) return TRA__NOPAR; strcpy( attr_str, s + 1); *s = 0; strcpy( object_str, aname); sts = ldh_GetObjectBody( node->hn.wind->hw.ldhses, cdh_TypeIdToObjid(tid), "SysBody", (void **)&tdef, &size); if ( EVEN(sts)) return sts; switch( tdef->Type) { case pwr_eType_Boolean: *trace_type = flow_eTraceType_Boolean; break; case pwr_eType_Int32: *trace_type = flow_eTraceType_Int32; break; case pwr_eType_Float32: *trace_type = flow_eTraceType_Float32; break; default: *trace_type = flow_eTraceType_Int32; break; } free((char *) tdef); return TRA__SUCCESS; }