static pwr_tStatus configure_object( ldh_sMenuCall *ip, pwr_sAttrRef *aref, unsigned int disable_mask) { pwr_tStatus sts; pwr_tCid cid; ldh_sParDef *bodydef; int rows; int i; pwr_sAttrRef aaref, daref; pwr_tDisableAttr disable; int disableattr_cnt = 0; sts = ldh_GetAttrRefTid( ip->PointedSession, aref, &cid); if ( EVEN(sts)) return sts; sts = ldh_GetObjectBodyDef( ip->PointedSession, cid, "RtBody", 1, &bodydef, &rows); if (EVEN(sts)) return sts; for ( i = 0; i < rows; i++) { if ( bodydef[i].Par->Param.Info.Flags & PWR_MASK_DISABLEATTR) { // Disable or enable dependent on mask sts = ldh_ArefANameToAref( ip->PointedSession, aref, bodydef[i].ParName, &aaref); if ( EVEN(sts)) return sts; daref = cdh_ArefToDisableAref( &aaref); if ( (1 << disableattr_cnt++) & disable_mask) disable = 1; else disable = 0; sts = ldh_WriteAttribute( ip->PointedSession, &daref, (void *)&disable, sizeof(disable)); if ( EVEN(sts)) return sts; } #if 0 if ( bodydef[i].Par->Param.Info.Flags & PWR_MASK_CLASS) { // Examine object attribute sts = ldh_ArefANameToAref( ip->PointedSession, aref, bodydef[i].ParName, &aaref); if ( EVEN(sts)) return sts; sts = configure_object( ip, &aaref, disable_mask, disableattr_cnt); if ( EVEN(sts)) return sts; } #endif } free( (char *)bodydef); return LDH__SUCCESS; }
static pwr_tStatus Cast( ldh_sMenuCall *ip) { pwr_tStatus sts; pwr_tCid cid; ldh_sAttrRefInfo info; sts = ldh_GetAttrRefTid( ip->PointedSession, &ip->Pointed, &cid); if ( EVEN(sts)) return sts; sts = ldh_GetAttrRefInfo( ip->PointedSession, &ip->Pointed, &info); if ( EVEN(sts)) return sts; if ( info.flags & PWR_MASK_CASTATTR) { ip->wtt->wcast_new( ip->Pointed, &sts); } return 1; }
static int IsOkConnect ( ldh_sMenuCall *ip, pwr_sMenuButton *mbp ) { pwr_tStatus sts; if ( strcmp( mbp->FilterArguments[1], "") != 0) { char arg_cid_str[20][32]; int arg_cid_cnt; int i; int cid_ok = 0; pwr_tCid cid; pwr_tCid arg_cid; // arg 1 holds the allowed class or classes to connect to arg_cid_cnt = dcli_parse( mbp->FilterArguments[1], ",", "", (char *) arg_cid_str, sizeof( arg_cid_str) / sizeof( arg_cid_str[0]), sizeof( arg_cid_str[0]), 0); sts = ldh_GetAttrRefTid( ip->PointedSession, &ip->Selected[0], &cid); if ( EVEN(sts)) return 0; for ( i = 0; i < arg_cid_cnt; i++) { sts = ldh_ClassNameToId( ip->PointedSession, &arg_cid, arg_cid_str[i]); if ( EVEN(sts)) return 0; if ( cid == arg_cid) { cid_ok = 1; break; } } if ( !cid_ok) return 0; } return 1; }
// // Help for class of an object in wnav // static pwr_tStatus HelpClass( ldh_sMenuCall *ip) { pwr_tStatus sts; int size; char cname[32]; char vname[32]; char cmd[200]; pwr_tCid cid; pwr_tVid vid; sts = ldh_GetAttrRefTid( ip->PointedSession, &ip->Pointed, &cid); if ( EVEN(sts)) return sts; sts = ldh_ClassIdToName( ip->PointedSession, cid, cname, sizeof(cname), &size); if ( EVEN(sts)) return sts; vid = cdh_CidToVid(cid); if ( cdh_cManufactClassVolMin <= vid && vid <= cdh_cManufactClassVolMax) { /* Get help file for this volume */ sts = ldh_VolumeIdToName( ldh_SessionToWB(ip->PointedSession), vid, vname, sizeof(vname), &size); if ( EVEN(sts)) return sts; cdh_ToLower( vname, vname); snprintf( cmd, sizeof(cmd), "help %s /helpfile=\"$pwr_exe/%s/%s_xtthelp.dat\"/strict", cname, lng_get_language_str(), vname); ip->wnav->command( cmd); return 1; } if ( cname[0] == '$') snprintf( cmd, sizeof(cmd), "help %s /strict", &cname[1]); else snprintf( cmd, sizeof(cmd), "help %s /strict", cname); ip->wnav->command( cmd); return 1; }
static pwr_tStatus Connect ( ldh_sMenuCall *ip ) { pwr_tStatus sts; pwr_sMenuButton mb; pwr_sAttrRef PattrRef; pwr_sAttrRef aref = ip->Selected[0]; sts = ldh_ReadObjectBody(ip->PointedSession, ip->ItemList[ip->ChosenItem].MenuObject, "SysBody", &mb, sizeof(pwr_sMenuButton)); if (EVEN(sts)) return sts; if ( strcmp( mb.MethodArguments[1], "") != 0) { char arg_cid_str[20][32]; int arg_cid_cnt; int i; int cid_ok = 0; pwr_tCid cid; pwr_tCid arg_cid; // arg 1 holds the allowed class or classes to connect to arg_cid_cnt = dcli_parse( mb.MethodArguments[1], ",", "", (char *) arg_cid_str, sizeof( arg_cid_str) / sizeof( arg_cid_str[0]), sizeof( arg_cid_str[0]), 0); sts = ldh_GetAttrRefTid( ip->PointedSession, &ip->Selected[0], &cid); if ( EVEN(sts)) return 0; for ( i = 0; i < arg_cid_cnt; i++) { sts = ldh_ClassNameToId( ip->PointedSession, &arg_cid, arg_cid_str[i]); if ( EVEN(sts)) return 0; if ( cid == arg_cid) { cid_ok = 1; break; } } if ( !cid_ok) return 0; } if ( strcmp( mb.MethodArguments[2], "") != 0) // Body in MethodArguments 2, probably DevBody sts = ldh_SetObjectPar( ip->PointedSession, ip->Pointed.Objid, mb.MethodArguments[2], mb.MethodArguments[0], (char *) &ip->Selected[0], sizeof(ip->Selected[0])); else { char *name_p; pwr_tAName name; int size; pwr_tCid cid; // If Selected is a Template object in a classvolume, replace with // symbol $IoConnect if ( cdh_IsClassVolume( aref.Objid.vid)) { sts = ldh_ObjidToName( ip->PointedSession, aref.Objid, ldh_eName_Object, name, sizeof(name), &size); if ( ODD(sts) && strcmp( name, "Template") == 0) { sts = ldh_GetObjectClass( ip->PointedSession, aref.Objid, &cid); if ( EVEN(sts)) return sts; aref.Objid.vid = ldh_cIoConnectVolume; aref.Objid.oix = cid; } } // Assume RtBody or SysBody sts = ldh_AttrRefToName(ip->PointedSession, &ip->Pointed, ldh_eName_VolPath, &name_p, &size); if ( ODD(sts)) { strcpy( name, name_p); strcat( name, "."); strcat( name, mb.MethodArguments[0]); sts = ldh_NameToAttrRef( ip->PointedSession, name, &PattrRef); if (ODD(sts)) sts = ldh_WriteAttribute(ip->PointedSession, &PattrRef, &aref, sizeof(aref)); } } char msg[500]; if ( ODD(sts)) { pwr_tAName name; char *name_p; int len; sts = ldh_AttrRefToName( ip->PointedSession, &aref, ldh_eName_Hierarchy, &name_p, &len); if ( EVEN(sts)) cdh_ObjidToString( name, aref.Objid, 1); else strcpy( name, name_p); sprintf( msg, "%s connected to: %s", mb.MethodArguments[0], name); ip->wtt->message( 'I', msg); } else { msg_GetMsg( sts, msg, sizeof(msg)); ip->wtt->message( 'E', msg); } return PWRS__SUCCESS; }
static pwr_tStatus IoConnect ( ldh_sMenuCall *ip ) { pwr_tStatus sts; pwr_sMenuButton mb; pwr_sAttrRef aref = ip->Selected[0]; pwr_sAttrRef PattrRef; char *name_p; pwr_tAName name; int size; sts = ldh_ReadObjectBody(ip->PointedSession, ip->ItemList[ip->ChosenItem].MenuObject, "SysBody", &mb, sizeof(pwr_sMenuButton)); if (EVEN(sts)) return sts; if ( strcmp( mb.MethodArguments[0], "") != 0) { char arg_cid_str[20][32]; int arg_cid_cnt; int i; int cid_ok = 0; pwr_tCid cid; pwr_tCid arg_cid; // arg 0 holds the allowed class or classes to connect to arg_cid_cnt = dcli_parse( mb.MethodArguments[0], ",", "", (char *) arg_cid_str, sizeof( arg_cid_str) / sizeof( arg_cid_str[0]), sizeof( arg_cid_str[0]), 0); sts = ldh_GetAttrRefTid( ip->PointedSession, &ip->Selected[0], &cid); if ( EVEN(sts)) return 0; for ( i = 0; i < arg_cid_cnt; i++) { sts = ldh_ClassNameToId( ip->PointedSession, &arg_cid, arg_cid_str[i]); if ( EVEN(sts)) return 0; if ( cid == arg_cid) { cid_ok = 1; break; } } if ( !cid_ok) return 0; } #if 0 printf( "Here in IoConnect\n"); wb_session *sp = (wb_session *)ip->PointedSession; wb_object o = sp->object( ip->Pointed.Objid); if ( !o) return o.sts(); wb_attribute oa = sp->attribute( &ip->Pointed); if ( !oa) return oa.sts(); replaceClass( sp, oa, &ip->Selected[0]); #endif sts = ldh_AttrRefToName(ip->PointedSession, &ip->Pointed, ldh_eName_VolPath, &name_p, &size); if ( ODD(sts)) { strcpy( name, name_p); strcat( name, ".IoConnect"); sts = ldh_NameToAttrRef( ip->PointedSession, name, &PattrRef); if (ODD(sts)) sts = ldh_WriteAttribute(ip->PointedSession, &PattrRef, &aref, sizeof(aref)); } char msg[500]; if ( ODD(sts)) { pwr_tAName name; char *name_p; int len; sts = ldh_AttrRefToName( ip->PointedSession, &aref, ldh_eName_Hierarchy, &name_p, &len); if ( EVEN(sts)) cdh_ObjidToString( name, aref.Objid, 1); else strcpy( name, name_p); sprintf( msg, "Io connected to: %s", name); ip->wtt->message( 'I', msg); } else { msg_GetMsg( sts, msg, sizeof(msg)); ip->wtt->message( 'E', msg); } return PWRS__SUCCESS; }
pwr_tStatus wsx_CheckSigChanCon( ldh_tSesContext sesctx, pwr_tAttrRef aref, int *errorcount, int *warningcount ) { int sts; int size; pwr_tAttrRef *con_ptr; int class_error; pwr_tClassId cid; pwr_tClassId con_class; sts = ldh_GetAttrRefTid ( sesctx, &aref, &cid); if ( EVEN(sts)) return sts; /* Check SigChanCon */ sts = ldh_GetAttrObjectPar( sesctx, &aref, "RtBody", "SigChanCon", (char **)&con_ptr, &size); if (EVEN(sts)) return sts; if ( cdh_ObjidIsNull(con_ptr->Objid)) { wsx_error_msg( sesctx, WSX__SIGCHANCON, aref, errorcount, warningcount); free((char *) con_ptr); return WSX__SUCCESS; } /* Check object class of connected object */ sts = ldh_GetAttrRefTid ( sesctx, con_ptr, &con_class); if ( EVEN(sts)) { wsx_error_msg( sesctx, WSX__SIGCHANCON, aref, errorcount, warningcount); free((char *) con_ptr); return WSX__SUCCESS; } class_error = 0; switch ( cid) { case pwr_cClass_Di: if ( con_class != pwr_cClass_ChanDi) class_error = 1; break; case pwr_cClass_Do: if ( con_class != pwr_cClass_ChanDo) class_error = 1; break; case pwr_cClass_Po: if ( con_class != pwr_cClass_ChanDo) class_error = 1; break; case pwr_cClass_Ai: if ( !(con_class == pwr_cClass_ChanAi || con_class == pwr_cClass_ChanAit)) class_error = 1; break; case pwr_cClass_Ao: if ( con_class != pwr_cClass_ChanAo) class_error = 1; break; case pwr_cClass_Co: if ( con_class != pwr_cClass_ChanCo) class_error = 1; break; case pwr_cClass_Io: if ( con_class != pwr_cClass_ChanIo) class_error = 1; break; case pwr_cClass_Ii: if ( con_class != pwr_cClass_ChanIi) class_error = 1; break; case pwr_cClass_Bi: if ( con_class != pwr_cClass_ChanBi) class_error = 1; break; case pwr_cClass_Bo: if ( con_class != pwr_cClass_ChanBo) class_error = 1; break; } if ( class_error) { wsx_error_msg( sesctx, WSX__SIGCHANCONCLASS, aref, errorcount, warningcount); free((char *) con_ptr); return WSX__SUCCESS; } free((char *) con_ptr); return WSX__SUCCESS; }
pwr_tStatus wb_bck_list::read_db( wb_bck_list *lp) { pwr_eType atype; char *anamep; int size; void *valuep; pwr_tAName aname; pwr_tAttrRef aref; pwr_tCid cid; char *s; pwr_tStatus sts; m_type = bck_eType_Wb; bck_sItem *ip = lp->m_first; while (ip) { sts = ldh_AttrRefToName( m_ldhses, &ip->aref, cdh_mName_volumeStrict, &anamep, &size); if ( EVEN(sts)) return sts; sts = ldh_GetAttrRefType( m_ldhses, &ip->aref, &atype); if ( ODD(sts)) { // Read value from database strncpy( aname, anamep, sizeof(aname)); if ( (s = strrchr( aname, '.')) && strcmp( s, ".ActualValue") == 0) { *s = 0; sts = ldh_NameToAttrRef( m_ldhses, aname, &aref); if ( EVEN(sts)) return sts; sts = ldh_GetAttrRefTid( m_ldhses, &aref, &cid); if ( EVEN(sts)) return sts; switch ( cid) { case pwr_cClass_Ao: case pwr_cClass_Do: case pwr_cClass_Io: case pwr_cClass_Av: case pwr_cClass_Dv: case pwr_cClass_Iv: // Read InitValue instead of ActualValue strcat( aname, ".InitialValue"); sts = ldh_NameToAttrRef( m_ldhses, aname, &aref); if ( EVEN(sts)) return sts; valuep = malloc(ip->size); sts = ldh_ReadAttribute( m_ldhses, &aref, valuep, ip->size); break; default: valuep = malloc(ip->size); sts = ldh_ReadAttribute( m_ldhses, &ip->aref, valuep, ip->size); } } else { valuep = malloc(ip->size); sts = ldh_ReadAttribute( m_ldhses, &ip->aref, valuep, ip->size); } } add( &ip->aref, valuep, ip->size); free( valuep); ip = ip->next; } return LDH__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; }
static pwr_tStatus configure_object_reset( ldh_sMenuCall *ip, pwr_sAttrRef *aref, pwr_sMenuButton *mb) { pwr_tStatus sts; pwr_tCid cid; ldh_sParDef *bodydef; int rows; int i, j; pwr_sAttrRef aaref, daref; pwr_tDisableAttr disable = 0; char vect[10][80]; int vect_cnt; int skip; char *s; // Attribute objects in argument 2 are not controlled by the configure method if ( mb) { vect_cnt = dcli_parse( mb->MethodArguments[2], ",", "", (char *)vect, sizeof( vect) / sizeof( vect[0]), sizeof( vect[0]), 0); for ( j = 0; j < vect_cnt; j++) dcli_trim( vect[j], vect[j]); } else vect_cnt = 0; sts = ldh_GetAttrRefTid( ip->PointedSession, aref, &cid); if ( EVEN(sts)) return sts; sts = ldh_GetObjectBodyDef( ip->PointedSession, cid, "RtBody", 1, &bodydef, &rows); if (EVEN(sts)) return sts; for ( i = 0; i < rows; i++) { // Check if attribute is controlled by this method skip = 0; if ( mb) { // Remove leading Super. s = bodydef[i].ParName; while ( strncmp( s, "Super.", 6) == 0) s += 6; for ( j = 0; j < vect_cnt; j++) { if ( cdh_NoCaseStrcmp( vect[j], s) == 0) { // This object should not be reset skip = 1; break; } } if ( skip) continue; } if ( bodydef[i].Par->Param.Info.Flags & PWR_MASK_DISABLEATTR) { // Enable all attributes sts = ldh_ArefANameToAref( ip->PointedSession, aref, bodydef[i].ParName, &aaref); if ( EVEN(sts)) return sts; daref = cdh_ArefToDisableAref( &aaref); sts = ldh_WriteAttribute( ip->PointedSession, &daref, (void *)&disable, sizeof(disable)); if ( EVEN(sts)) return sts; } if ( bodydef[i].Par->Param.Info.Flags & PWR_MASK_CLASS) { // Reset object attribute sts = ldh_ArefANameToAref( ip->PointedSession, aref, bodydef[i].ParName, &aaref); if ( EVEN(sts)) return sts; sts = configure_object_reset( ip, &aaref, 0); if ( EVEN(sts)) return sts; } } free( (char *)bodydef); return LDH__SUCCESS; }