int print_data( pwr_sAttrRef *arp, FILE *fp) { int sts; char *s; pwr_tClassId classid; char *object_p; pwr_tAName dataname; pwr_tAName objectname; pwr_tAName attributename; pwr_tAttrRef aref; int object_backup; int array_element = 0; int index; int nr; sts = gdh_AttrrefToName( arp, dataname, sizeof(dataname), cdh_mNName); if ( EVEN(sts)) return sts; strcpy( objectname, dataname); if ( !arp->Flags.b.ObjectAttr && (s = strchr( objectname, '.'))) { *s = 0; object_backup = 0; strcpy( attributename, dataname); if ( (s = strchr( dataname, '['))) { array_element = 1; nr = sscanf( s+1, "%d", &index); if ( nr != 1) return 0; } } else { object_backup = 1; } sts = gdh_NameToAttrref( pwr_cNOid, objectname, &aref); if ( EVEN(sts)) return sts; sts = gdh_AttrRefToPointer( &aref, (void **)&object_p); if ( EVEN(sts)) return sts; sts = gdh_GetAttrRefTid( &aref, &classid); if ( EVEN(sts)) return sts; if ( object_backup) { print_object( &aref, classid, object_p, 0, objectname, fp); } else { print_attribute( &aref, classid, object_p, attributename, array_element, index, fp); } return 1; }
int XNav::GetMenu( xmenu_sMenuCall *ip) { xmenu_sMenuItem *Item = (xmenu_sMenuItem *) &xmenu_lMenuItem; int nItems = 0; pwr_tCid classid; pwr_sAttrRef current = pwr_cNAttrRef; pwr_tStatus sts; if ( cdh_ObjidIsNotNull( ip->Selected[0].Objid)) { sts = gdh_GetAttrRefTid ( &ip->Selected[0], &classid); if ( EVEN(sts)) return sts; GetObjectMenu( ip, classid, &Item, 0, &nItems, 0, ¤t); } Item->Level = 0; ip->ItemCount = nItems - 1; return XNAV__SUCCESS; }
int XCrr::crossref() { int sts; pwr_tAName name; pwr_tClassId classid; char file[20] = "*"; sts = gdh_AttrrefToName ( &objar, name, sizeof(name), cdh_mNName); if ( EVEN(sts)) return sts; sts = gdh_GetAttrRefTid( &objar, &classid); if ( EVEN(sts)) return sts; switch ( classid) { case pwr_cClass_Di: case pwr_cClass_Dv: case pwr_cClass_Do: case pwr_cClass_Po: case pwr_cClass_Av: case pwr_cClass_Ai: case pwr_cClass_Ao: case pwr_cClass_Iv: case pwr_cClass_Ii: case pwr_cClass_Io: case pwr_cClass_Co: case pwr_cClass_Sv: case pwr_cClass_ATv: case pwr_cClass_DTv: sts = xnav_crr_signal( xcrrnav->brow, file, name, NULL); break; default: /* Not a signal */ sts = xnav_crr_object( xcrrnav->brow, file, name, NULL); } // if ( EVEN(sts)) // xnav->message(' ', XNav::get_message(sts)); return XATT__SUCCESS; }
void sysmon_object::open( double base_scantime) { pwr_tStatus sts; // Link to object sts = gdh_DLRefObjectInfoAttrref( &aref, (void **)&p, &p_dlid); if ( EVEN(sts)) throw co_error(sts); sts = gdh_GetAttrRefTid( &aref, &cid); if ( EVEN(sts)) throw co_error(sts); switch ( cid) { case pwr_cClass_DiskSup: if ( ((pwr_sClass_DiskSup *)p)->ScanTime) scan_div = int( ((pwr_sClass_DiskSup *)p)->ScanTime / base_scantime + 0.5); else scan_div = 1; break; default: ; } }
int XNav::getAllMenuItems( xmenu_sMenuCall *ip, xmenu_sMenuItem **Item, pwr_tObjid objid, pwr_tUInt32 Level, int *nItems, int AddSeparator, pwr_sAttrRef *CurrentObject) { int sts; pwr_tCid classid; pwr_tObjid child; pwr_sMenuButton *mbp; pwr_sMenuCascade *mcp; pwr_sMenuRef *mrp; pwr_tStatus (*filter)( xmenu_sMenuCall *); int sensitive; int i; Level++; memset(*Item, 0, sizeof(**Item)); if(AddSeparator) { (*Item)->Level = Level; (*Item)->Item = xmenu_eMenuItem_Separator; (*Item)->MenuObject = pwr_cNObjid; (*Item)++; (*nItems)++; } else { sts = gdh_GetObjectClass( objid, &classid); if ( EVEN(sts)) return sts; if ( classid == pwr_eClass_MenuButton) { sts = gdh_ObjidToPointer( objid, (void **) &mbp); if ( EVEN(sts)) return sts; ip->ChosenItem = *nItems; for ( i = 0; i < 5; i++) { strcpy( (*Item)->FilterArguments[i], mbp->FilterArguments[i]); } // Call any filter method (*Item)->CurrentObject = *CurrentObject; sensitive = 1; if ( strcmp( mbp->FilterName, "") != 0) { sts = GetMethod( mbp->FilterName, &filter); if ( ODD(sts)) { sts = (filter) ( ip); if ( sts == XNAV__INSENSITIVE) sensitive = 0; } } else sts = XNAV__SUCCESS; if ( ODD(sts)) { (*Item)->Level = Level; (*Item)->Item = xmenu_eMenuItem_Button; (*Item)->MenuObject = objid; (*Item)->Flags.f.Sensitive = sensitive; if (strcmp( mbp->MethodName, "") == 0) (*Item)->Flags.f.Sensitive = 0; strcpy((*Item)->Name, mbp->ButtonName); strcpy( (*Item)->Method, mbp->MethodName); strcpy( (*Item)->Filter, mbp->FilterName); for ( i = 0; i < 5; i++) { strcpy( (*Item)->MethodArguments[i], mbp->MethodArguments[i]); } (*Item)++; (*nItems)++; } } else if ( classid == pwr_eClass_MenuSeparator) { (*Item)->Level = Level; (*Item)->Item = xmenu_eMenuItem_Separator; (*Item)->MenuObject = objid; (*Item)++; (*nItems)++; } else if ( classid == pwr_eClass_MenuCascade) { sts = gdh_ObjidToPointer( objid, (void **) &mcp); if ( EVEN(sts)) return sts; // Call any filter method (*Item)->CurrentObject = *CurrentObject; if ( strcmp( mcp->FilterName, "") != 0) { sts = GetMethod( mcp->FilterName, &filter); if ( ODD(sts)) { sts = (filter) ( ip); } } else sts = XNAV__SUCCESS; if ( ODD(sts)) { (*Item)->Level = Level; (*Item)->Item = xmenu_eMenuItem_Cascade; (*Item)->Flags.f.Sensitive = 1; strcpy((*Item)->Name, mcp->ButtonName); (*Item)->MenuObject = objid; (*Item)++; (*nItems)++; sts = gdh_GetChild( objid, &child); while( ODD(sts)) { sts = getAllMenuItems(ip, Item, child, Level, nItems, 0, CurrentObject); if ( EVEN(sts)) return sts; sts = gdh_GetNextSibling( child, &child); } } } else if ( classid == pwr_eClass_MenuRef && cdh_ObjidIsNull( CurrentObject->Objid)) { pwr_tAName aname; pwr_sAttrRef currentar; pwr_tCid current_cid; pwr_tTid a_tid; pwr_tUInt32 a_size, a_offs, a_elem; sts = gdh_ObjidToPointer( objid, (void **) &mrp); if ( EVEN(sts)) return sts; // Call any filter method (*Item)->CurrentObject = *CurrentObject; if ( strcmp( mrp->FilterName, "") != 0) { sts = GetMethod( mrp->FilterName, &filter); if ( ODD(sts)) { sts = (filter) ( ip); } } else sts = XNAV__SUCCESS; if ( ODD(sts)) { int create_object_button = 0; if ( strcmp( mrp->RefAttribute, "_SelfObject") == 0) { // Object entry for attributes char *s; sts = gdh_AttrrefToName( &ip->Pointed, aname, sizeof(aname), cdh_mName_volumeStrict); if ( EVEN(sts)) return sts; if ( (s = strrchr( aname, '.'))) *s = 0; sts = gdh_NameToAttrref( pwr_cNOid, aname, ¤tar); if ( EVEN(sts)) return sts; } else { sts = gdh_AttrrefToName( &ip->Pointed, aname, sizeof(aname), cdh_mName_volumeStrict); if ( EVEN(sts)) return sts; strcat( aname, "."); strcat( aname, mrp->RefAttribute); sts = gdh_GetAttributeCharacteristics( aname, &a_tid, &a_size, &a_offs, &a_elem); if ( ODD(sts)) { switch ( a_tid) { case pwr_eType_AttrRef: sts = gdh_GetObjectInfo( aname, ¤tar, sizeof(currentar)); break; case pwr_eType_Objid: { pwr_tOid oid; currentar = pwr_cNAttrRef; sts = gdh_GetObjectInfo( aname, &oid, sizeof(oid)); currentar = cdh_ObjidToAref( oid); break; } default: sts = 0; } } create_object_button = 0; } if ( ODD(sts) && cdh_ObjidIsNotNull( currentar.Objid)) { (*Item)->Level = Level; (*Item)->Item = xmenu_eMenuItem_Ref; (*Item)->Flags.f.Sensitive = 1; strcpy((*Item)->Name, mrp->ButtonName); (*Item)->MenuObject = objid; (*Item)++; (*nItems)++; // Create a label with current object name sts = gdh_AttrrefToName( ¤tar, aname, sizeof(aname), cdh_mNName); if ( ODD(sts) && create_object_button) { (*Item)->Level = Level; (*Item)->Item = xmenu_eMenuItem_Button; (*Item)->MenuObject = pwr_cNObjid; strncpy((*Item)->Name, aname, sizeof((*Item)->Name)); (*Item)->Name[sizeof((*Item)->Name)-1] = 0; (*Item)->MenuObject = pwr_cNObjid; (*Item)->CurrentObject = currentar; (*Item)->Flags.f.Sensitive = 1; strcpy( (*Item)->Method, "$Object-OpenObject"); (*Item)++; (*nItems)++; } sts = gdh_GetAttrRefTid( ¤tar, ¤t_cid); if ( EVEN(sts)) return sts; xmenu_eItemType item_type = ip->ItemType; if ( currentar.Flags.b.Object) ip->ItemType = xmenu_eItemType_Object; else ip->ItemType = xmenu_eItemType_AttrObject; sts = GetObjectMenu(ip, current_cid, Item, Level, nItems, 0, ¤tar); if ( EVEN(sts)) return sts; ip->ItemType = item_type; } } } } return XNAV__SUCCESS; }
int Graph::trend_init( graph_sObjectTrend *td, pwr_sAttrRef *arp) { pwr_tClassId classid; pwr_tFloat32 max_limit = 100; pwr_tFloat32 min_limit = 0; int sts; pwr_sAttrRef attrref; grow_tObject object; int presminlimit_found = 0; int presmaxlimit_found = 0; double scan_time; if ( arp && cdh_ObjidIsNotNull( arp->Objid)) { sts = gdh_GetAttrRefTid( arp, &classid); if ( EVEN(sts)) return sts; // Try to find attributes PresMaxLimit and PresMinLimit sts = gdh_ArefANameToAref( arp, "PresMaxLimit", &attrref); if ( ODD(sts)) { sts = gdh_GetObjectInfoAttrref( &attrref, (void *)&max_limit, sizeof(max_limit)); if ( EVEN(sts)) return sts; presmaxlimit_found = 1; } sts = gdh_ArefANameToAref( arp, "PresMinLimit", &attrref); if ( ODD(sts)) { sts = gdh_GetObjectInfoAttrref( &attrref, (void *)&min_limit, sizeof(min_limit)); if ( EVEN(sts)) return sts; presminlimit_found = 1; } } td->pres_max_limit_old = max_limit; td->pres_min_limit_old = min_limit; // Configure bar sts = grow_FindObjectByName( grow->ctx, "ActualValueBar", &td->bar_object); if ( ODD(sts)) { if ( min_limit != max_limit) grow_SetBarRange( td->bar_object, double(min_limit), double(max_limit)); } // Get pointers to max and min value sts = grow_FindObjectByName( grow->ctx, "PresMaxLimit", &object); if ( ODD(sts)) { GeDyn *dyn; grow_GetUserData( object, (void **)&dyn); td->pres_max_limit_p = (pwr_tFloat32 *) dyn->get_p(); if ( !presmaxlimit_found) // PresMaxLimit in local database, set value *td->pres_max_limit_p = max_limit; } sts = grow_FindObjectByName( grow->ctx, "PresMinLimit", &object); if ( ODD(sts)) { GeDyn *dyn; grow_GetUserData( object, (void **)&dyn); td->pres_min_limit_p = (pwr_tFloat32 *) dyn->get_p(); if ( !presminlimit_found) // PresMinLimit in local database, set value *td->pres_min_limit_p = min_limit; } // Configure trend sts = grow_FindObjectByName( grow->ctx, "ActualValueTrend", &td->trend_object); if ( EVEN(sts)) return sts; if ( td->pres_min_limit_p && td->pres_max_limit_p) { if ( min_limit != max_limit) grow_SetTrendRangeY( td->trend_object, 0, double(min_limit), double(max_limit)); } // Configure slider sts = grow_FindObjectByName( grow->ctx, "ActualValueSlider", &td->slider_object); if ( ODD(sts)) { if ( td->pres_min_limit_p && td->pres_max_limit_p) { if ( min_limit != max_limit) grow_SetSliderRange( td->slider_object, double(min_limit), double(max_limit)); } GeDyn *dyn; grow_GetUserData( td->slider_object, (void **)&dyn); td->slider_disable_p = dyn->ref_slider_disabled(); if ( td->slider_disable_p) *td->slider_disable_p = 1; } // Set scantime variable in local database grow_GetTrendScanTime( td->trend_object, &scan_time); td->scan_time_p = (float *) localdb_ref_or_create( "ScanTime", pwr_eType_Float32); td->old_scan_time = float( scan_time*200); *td->scan_time_p = td->old_scan_time; // Get Hold button sts = grow_FindObjectByName( grow->ctx, "TrendHold", &td->hold_button_object); if ( ODD(sts)) td->hold_button_p = (int *) localdb_ref_or_create( "TrendHold", pwr_eType_Boolean); GeDyn *dyn; grow_GetUserData( td->trend_object, (void **)&dyn); td->data_scan_time_p = dyn->ref_trend_scantime(); td->hold_p = dyn->ref_trend_hold(); sts = grow_FindObjectByName( grow->ctx, "SliderDisable", &td->slider_button_object); if ( ODD(sts)) td->slider_button_p = (int *) localdb_ref_or_create( "SliderDisable", pwr_eType_Boolean); return 1; }
static int graph_object_dx( Graph *graph, pwr_sAttrRef *arp) { int sts; graph_sObjectDx *od; pwr_tAttrRef aref, chanaref; pwr_tAName aname; pwr_tCid card_cid; od = (graph_sObjectDx *) calloc( 1, sizeof(graph_sObjectDx)); graph->graph_object_data = (void *) od; graph->graph_object_close = graph_object_dx_close; sts = gdh_GetAttrRefTid( arp, &od->cid); if ( EVEN(sts)) return sts; // Get channel object sts = gdh_ArefANameToAref( arp, "SigChanCon", &aref); if ( EVEN(sts)) { // Dv object, register scan function and return with success graph->graph_object_scan = graph_object_dx_scan; return 1; } sts = gdh_GetObjectInfoAttrref( &aref, &chanaref, sizeof(chanaref)); if ( EVEN(sts)) return sts; od->local_conv_p = (pwr_tBoolean *) graph->localdb_ref_or_create( "ConversionOn", pwr_eType_Boolean); od->local_inv_p = (pwr_tBoolean *) graph->localdb_ref_or_create( "InvertOn", pwr_eType_Boolean); od->local_test_p = (pwr_tBoolean *) graph->localdb_ref_or_create( "TestOn", pwr_eType_Boolean); // Get card object if ( chanaref.Flags.b.ObjectAttr) { sts = gdh_GetObjectClass( chanaref.Objid, &card_cid); if ( EVEN(sts)) return sts; } else card_cid = 0; switch ( card_cid) { case pwr_cClass_Ssab_DI32D: { pwr_tAName card_name; unsigned int chan_idx = (chanaref.Offset - pwr_AlignLW(sizeof(pwr_sClass_Ssab_BaseDiCard))) / pwr_AlignLW(sizeof(pwr_sClass_ChanDi)); sts = gdh_ObjidToName( chanaref.Objid, card_name, sizeof(card_name), cdh_mNName); if ( EVEN(sts)) return sts; if ( chan_idx < 16) { strcpy( aname, card_name); strcat( aname, ".ConvMask1"); graph->ref_object_info( glow_eCycle_Slow, aname, (void **)&od->conv_p, &od->conv_subid, sizeof(pwr_tBoolean), 0, true); strcpy( aname, card_name); strcat( aname, ".InvMask1"); graph->ref_object_info( glow_eCycle_Slow, aname, (void **)&od->inv_p, &od->inv_subid, sizeof(pwr_tBoolean), 0, true); od->mask = 1 << chan_idx; } else if ( chan_idx < 32) { strcpy( aname, card_name); strcat( aname, ".ConvMask2"); graph->ref_object_info( glow_eCycle_Slow, aname, (void **)&od->conv_p, &od->conv_subid, sizeof(pwr_tBoolean), 0, true); strcpy( aname, card_name); strcat( aname, ".InvMask2"); graph->ref_object_info( glow_eCycle_Slow, aname, (void **)&od->inv_p, &od->inv_subid, sizeof(pwr_tBoolean), 0, true); od->mask = 1 << (chan_idx - 16); } else return 0; break; } case pwr_cClass_Ssab_DO32DKS: case pwr_cClass_Ssab_DO32DKS_Stall: { pwr_tAName card_name; unsigned int chan_idx = (chanaref.Offset - pwr_AlignLW(sizeof(pwr_sClass_Ssab_BaseDoCard))) / pwr_AlignLW(sizeof(pwr_sClass_ChanDo)); sts = gdh_ObjidToName( chanaref.Objid, card_name, sizeof(card_name), cdh_mNName); if ( EVEN(sts)) return sts; if ( chan_idx < 16) { strcpy( aname, card_name); strcat( aname, ".TestMask1"); graph->ref_object_info( glow_eCycle_Slow, aname, (void **)&od->test_p, &od->test_subid, sizeof(pwr_tBoolean), 0, true); strcpy( aname, card_name); strcat( aname, ".InvMask1"); graph->ref_object_info( glow_eCycle_Slow, aname, (void **)&od->inv_p, &od->inv_subid, sizeof(pwr_tBoolean), 0, true); od->mask = 1 << chan_idx; } else if ( chan_idx < 32) { strcpy( aname, card_name); strcat( aname, ".TestMask2"); graph->ref_object_info( glow_eCycle_Slow, aname, (void **)&od->test_p, &od->test_subid, sizeof(pwr_tBoolean), 0, true); strcpy( aname, card_name); strcat( aname, ".InvMask2"); graph->ref_object_info( glow_eCycle_Slow, aname, (void **)&od->inv_p, &od->inv_subid, sizeof(pwr_tBoolean), 0, true); od->mask = 1 << (chan_idx - 16); } else return 0; if ( od->local_conv_p) *od->local_conv_p = 1; break; } default: { pwr_tAName chan_name; sts = gdh_AttrrefToName( &chanaref, chan_name, sizeof(chan_name), cdh_mNName); if ( ODD(sts)) { if ( od->cid == pwr_cClass_Di) { strcpy( aname, chan_name); strcat( aname, ".ConversionOn"); graph->ref_object_info( glow_eCycle_Slow, aname, (void **)&od->conv_p, &od->conv_subid, sizeof(pwr_tBoolean), 0, true); } strcpy( aname, chan_name); strcat( aname, ".InvertOn"); graph->ref_object_info( glow_eCycle_Slow, aname, (void **)&od->inv_p, &od->inv_subid, sizeof(pwr_tBoolean), 0, true); if ( od->cid == pwr_cClass_Do) { strcpy( aname, chan_name); strcat( aname, ".TestOn"); graph->ref_object_info( glow_eCycle_Slow, aname, (void **)&od->test_p, &od->test_subid, sizeof(pwr_tBoolean), 0, true); if ( od->local_conv_p) *od->local_conv_p = 1; } } } } // Register scan function graph->graph_object_scan = graph_object_dx_scan; return 1; }