static pwr_tStatus AnteAdopt ( ldh_tSesContext Session, pwr_tObjid Card, /* current card object */ pwr_tClassId Class /* class of child to adopt */ ) { pwr_tStatus sts; pwr_sClass_Do_HVDO32 RCard; pwr_sdClass_Do_HVDO32 DCard; pwr_tUInt32 MaxChan; pwr_tUInt32 Chan; int i; if (Class != pwr_cClass_ChanDo) return PWRB__CHANCLASS; sts = ldh_ReadObjectBody(Session, Card, "RtBody", &RCard, sizeof(RCard)); if (EVEN(sts)) return sts; sts = ldh_ReadObjectBody(Session, Card, "DevBody", &DCard, sizeof(DCard)); if (EVEN(sts)) return sts; MaxChan = co_min(32, RCard.MaxNoOfChannels); for (i = 0, Chan = 1; i < (int)MaxChan; i++, Chan <<= 1) { if ((DCard.ChannelAllocation & Chan) == 0) break; } if (i >= (int)MaxChan) return PWRB__ALOCHAN; else return LDH__ADOPTRENAME; }
static pwr_tStatus PostUnadopt ( ldh_tSesContext Session, pwr_tObjid Card, /* current card object */ pwr_tObjid Channel, pwr_tClassId Class /* class of child to adopt */ ) { pwr_tStatus sts; pwr_sClass_Do_HVDO32 RCard; pwr_sClass_ChanDo ChanDo; pwr_sdClass_Do_HVDO32 DCard; pwr_tUInt32 MaxChan; pwr_tUInt32 Chan; pwr_tString80 NewName; if (Class != pwr_cClass_ChanDo) return PWRB__SUCCESS; sts = ldh_ReadObjectBody(Session, Card, "RtBody", &RCard, sizeof(RCard)); if (EVEN(sts)) return PWRB__SUCCESS; sts = ldh_ReadObjectBody(Session, Card, "DevBody", &DCard, sizeof(DCard)); if (EVEN(sts)) return PWRB__SUCCESS; MaxChan = co_min(32, RCard.MaxNoOfChannels); /* get attributes of channel NOTE ! this should be done by a method of the channel object, but is not implemented in this version of PROVIEW/R. */ switch (Class) { case pwr_cClass_ChanDo: sts = ldh_ReadObjectBody(Session, Channel, "RtBody", &ChanDo, sizeof(ChanDo)); if (EVEN(sts)) return PWRB__SUCCESS; Chan = ChanDo.Number; break; } /* deallocate channel */ if (Chan > MaxChan) return PWRB__SUCCESS; DCard.ChannelAllocation &= ~(1 << Chan); sts = ldh_SetObjectBody(Session, Card, "DevBody", (char *)&DCard, sizeof(DCard)); if (EVEN(sts)) return PWRB__SUCCESS; sts = ldh_GetUniqueObjectName(Session, Channel, NewName); if (EVEN(sts)) return PWRB__SUCCESS; sts = ldh_SetObjectName(Session, Channel, NewName); if (EVEN(sts)) return PWRB__SUCCESS; return PWRB__SUCCESS; }
static pwr_tStatus CreateObject ( ldh_sMenuCall *ip ) { pwr_tStatus sts; pwr_tClassId Class = cdh_ClassObjidToId(ip->Selected[0].Objid); pwr_tObjid Object; pwr_sMenuButton mb; ldh_eDest Dest; sts = ldh_ReadObjectBody(ip->PointedSession, ip->ItemList[ip->ChosenItem].MenuObject, "SysBody", &mb, sizeof(pwr_sMenuButton)); if (mb.MethodArguments[0][0] != '\0') { if (strcmp(mb.MethodArguments[0], "Before") == 0) Dest = ldh_eDest_Before; else if (strcmp(mb.MethodArguments[0], "After") == 0) Dest = ldh_eDest_After; else if (strcmp(mb.MethodArguments[0], "First") == 0) Dest = ldh_eDest_IntoFirst; else if (strcmp(mb.MethodArguments[0], "Last") == 0) Dest = ldh_eDest_IntoLast; else Dest = ldh_eDest__; } sts = ldh_CreateObject(ip->PointedSession, &Object, NULL, Class, ip->Pointed.Objid, Dest); return sts; }
static pwr_tStatus CopyObject ( ldh_sMenuCall *ip ) { pwr_tStatus retsts = LDH__SUCCESS; pwr_tStatus sts = LDH__SUCCESS; pwr_sMenuButton mb; int i; int j; ldh_eDest Dest; pwr_tObjid DestObject; pwr_tObjid NewObject; pwr_tBoolean Self = 0; sts = ldh_ReadObjectBody(ip->PointedSession, ip->ItemList[ip->ChosenItem].MenuObject, "SysBody", &mb, sizeof(pwr_sMenuButton)); if (mb.MethodArguments[0][0] != '\0') { if (strcmp(mb.MethodArguments[0], "Before") == 0) Dest = ldh_eDest_Before; else if (strcmp(mb.MethodArguments[0], "After") == 0) Dest = ldh_eDest_After; else if (strcmp(mb.MethodArguments[0], "First") == 0) Dest = ldh_eDest_IntoFirst; else if (strcmp(mb.MethodArguments[0], "Last") == 0) Dest = ldh_eDest_IntoLast; else Dest = ldh_eDest__; } for (i = 0; i < (int)ip->SelectCount; i++) { if (cdh_ObjidIsEqual(ip->Selected[i].Objid, ip->Pointed.Objid)) Self = 1; if (cdh_ObjidIsEqual(ip->Selected[i].Objid, pwr_cNObjid)) break; } if (!Self) DestObject = ip->Pointed.Objid; if (Dest == ldh_eDest_After || Dest == ldh_eDest_IntoFirst) { for (j = i - 1; j >= 0; j--) { if (Self) DestObject = ip->Selected[j].Objid; sts = ldh_CopyObject(ip->PointedSession, &NewObject, NULL, ip->Selected[j].Objid, DestObject, Dest); if (EVEN(sts)) retsts = sts; } } else { for (j = 0; j < i; j++) { if (Self) DestObject = ip->Selected[j].Objid; sts = ldh_CopyObject(ip->PointedSession, &NewObject, NULL, ip->Selected[j].Objid, DestObject, Dest); if (EVEN(sts)) retsts = sts; } } return retsts; }
static pwr_tStatus ConnectAttribute ( ldh_sMenuCall *ip ) { pwr_tStatus sts; pwr_sMenuButton mb; pwr_sAttrRef PattrRef; sts = ldh_ReadObjectBody(ip->PointedSession, ip->ItemList[ip->ChosenItem].MenuObject, "SysBody", &mb, sizeof(pwr_sMenuButton)); if (EVEN(sts)) return sts; // Assume RtBody or SysBody char *aname_p; pwr_tAName aname; int size; sts = ldh_AttrRefToName( ip->PointedSession, &ip->Pointed, ldh_eName_ArefVol, &aname_p, &size); if ( EVEN(sts)) return 0; strncpy( aname, aname_p, sizeof(aname)); strncat( aname, ".", sizeof(aname)); strncat( aname, mb.MethodArguments[0], sizeof(aname)); sts = ldh_NameToAttrRef( ip->PointedSession, aname, &PattrRef); if (ODD(sts)) sts = ldh_WriteAttribute(ip->PointedSession, &PattrRef, &ip->Selected[0], sizeof(pwr_tAttrRef)); if ( ip->message_cb) { char msg[200]; if ( ODD(sts)) { pwr_tOName name; sts = ldh_AttrRefToName( ip->PointedSession, &ip->Selected[0], ldh_eName_Hierarchy, &aname_p, &size); if ( ODD(sts)) strncpy( name, aname_p, sizeof(name)); else cdh_ObjidToString( name, ip->Selected[0].Objid, 1); snprintf( msg, sizeof(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 LDH__SUCCESS; }
static pwr_tStatus MoveObject ( ldh_sMenuCall *ip ) { pwr_tStatus retsts = LDH__SUCCESS; pwr_tStatus sts = LDH__SUCCESS; pwr_sMenuButton mb; int i; int j; ldh_eDest Dest; sts = ldh_ReadObjectBody(ip->PointedSession, ip->ItemList[ip->ChosenItem].MenuObject, "SysBody", &mb, sizeof(pwr_sMenuButton)); if (mb.MethodArguments[0][0] != '\0') { if (strcmp(mb.MethodArguments[0], "Before") == 0) Dest = ldh_eDest_Before; else if (strcmp(mb.MethodArguments[0], "After") == 0) Dest = ldh_eDest_After; else if (strcmp(mb.MethodArguments[0], "First") == 0) Dest = ldh_eDest_IntoFirst; else if (strcmp(mb.MethodArguments[0], "Last") == 0) Dest = ldh_eDest_IntoLast; else Dest = ldh_eDest__; } for (i = 0;; i++) { /* count number of selected objects */ if (cdh_ObjidIsNull(ip->Selected[i].Objid)) break; } if (Dest == ldh_eDest_After || Dest == ldh_eDest_IntoFirst) { for (j = i - 1; j >= 0; j--) { sts = ldh_MoveObject(ip->PointedSession, ip->Selected[j].Objid, ip->Pointed.Objid, Dest); if (EVEN(sts)) retsts = sts; } } else { for (j = 0; j < i; j++) { sts = ldh_MoveObject(ip->PointedSession, ip->Selected[j].Objid, ip->Pointed.Objid, Dest); if (EVEN(sts)) retsts = sts; } } return retsts; }
static pwr_tStatus CopyObjectTree ( ldh_sMenuCall *ip ) { pwr_tStatus sts = LDH__SUCCESS; pwr_sMenuButton mb; ldh_eDest Dest; pwr_tBoolean Self = 0; int i; sts = ldh_ReadObjectBody(ip->PointedSession, ip->ItemList[ip->ChosenItem].MenuObject, "SysBody", &mb, sizeof(pwr_sMenuButton)); if (mb.MethodArguments[0][0] != '\0') { if (strcmp(mb.MethodArguments[0], "Before") == 0) Dest = ldh_eDest_Before; else if (strcmp(mb.MethodArguments[0], "After") == 0) Dest = ldh_eDest_After; else if (strcmp(mb.MethodArguments[0], "First") == 0) Dest = ldh_eDest_IntoFirst; else if (strcmp(mb.MethodArguments[0], "Last") == 0) Dest = ldh_eDest_IntoLast; else Dest = ldh_eDest__; } for (i = 0; i < (int)ip->SelectCount; i++) { if (cdh_ObjidIsEqual(ip->Selected[i].Objid, ip->Pointed.Objid)) Self = 1; if (cdh_ObjidIsNull(ip->Selected[i].Objid)) break; } sts = ldh_CopyObjectTrees(ip->PointedSession, ip->Selected, ip->Pointed.Objid, Dest, Self, 0, 0, 0); return sts; }
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; }
static pwr_tStatus PostAdopt ( ldh_tSesContext Session, pwr_tObjid Card, /* current card object */ pwr_tObjid Channel, pwr_tClassId Class /* class of child to adopt */ ) { pwr_tStatus sts; pwr_sClass_Do_HVDO32 RCard; pwr_sdClass_Do_HVDO32 DCard; pwr_sClass_ChanDo ChanDo; pwr_tUInt32 MaxChan; pwr_tUInt32 Chan; pwr_tString80 NewName; pwr_tString80 Description; pwr_tString80 Identity; pwr_tString80 DefName; pwr_sObject DefBody; pwr_tObjid DefObject; int i; if (Class != pwr_cClass_ChanDo) return PWRB__CHANCLASS; sts = ldh_ReadObjectBody(Session, Card, "RtBody", &RCard, sizeof(RCard)); if (EVEN(sts)) return sts; sts = ldh_ReadObjectBody(Session, Card, "DevBody", &DCard, sizeof(DCard)); if (EVEN(sts)) return sts; MaxChan = co_min(32, RCard.MaxNoOfChannels); for (i = 0, Chan = 1; i < (int)MaxChan; i++, Chan <<= 1) { if ((DCard.ChannelAllocation & Chan) == 0) break; } if (i >= (int)MaxChan) return PWRB__ALOCHAN; /* allocate new channel */ DCard.ChannelAllocation |= Chan; sts = ldh_SetObjectBody(Session, Card, "DevBody", (char *)&DCard, sizeof(DCard)); if (EVEN(sts)) return sts; /* change attributes of channel NOTE ! this should be done by a method of the channel object, but is not implemented in this version of PROVIEW/R. */ switch (Class) { case pwr_cClass_ChanDo: sts = ldh_ReadObjectBody(Session, Channel, "RtBody", &ChanDo, sizeof(ChanDo)); if (EVEN(sts)) return sts; if (ChanDo.Description[0] != '\0') { sprintf(Description, ChanDo.Description, i); if (strlen(Description) <= sizeof(ChanDo.Description) - 1) { strcpy(ChanDo.Description, Description); } } if (ChanDo.Identity[0] != '\0') { sprintf(Identity, ChanDo.Identity, i); if (strlen(Identity) <= sizeof(ChanDo.Identity) - 1) { strcpy(ChanDo.Identity, Identity); } } ChanDo.Number = i; sts = ldh_SetObjectBody(Session, Channel, "RtBody", (char *)&ChanDo, sizeof(ChanDo)); strcpy(DefName, "pwrb:Class-ChanDo-Defaults"); break; } /* change name of channel */ sts = ldh_NameToObjid(Session, &DefObject, DefName); if (EVEN(sts)) return PWRB__SUCCESS; sts = ldh_ReadObjectBody(Session, DefObject, "SysBody", &DefBody, sizeof(DefBody)); if (DefBody.Name[0] != '\0') { sprintf(NewName, DefBody.Name, i+1); NewName[31] = '\0'; sts = ldh_SetObjectName(Session, Channel, NewName); } return PWRB__SUCCESS; }
static pwr_tStatus Connect ( ldh_sMenuCall *ip ) { pwr_tStatus sts; pwr_sMenuButton mb; pwr_sAttrRef PattrRef; pwr_sAttrRef PattrXref; pwr_sAttrRef SattrRef; pwr_sAttrRef SattrXref; pwr_sAttrRef TattrRef; pwr_tUInt32 Pdim; pwr_tUInt32 Sdim; pwr_sAttrXRef PattrDef; pwr_sAttrXRef SattrDef; int i; sts = ldh_ReadObjectBody(ip->PointedSession, ip->ItemList[ip->ChosenItem].MenuObject, "SysBody", &mb, sizeof(pwr_sMenuButton)); if (EVEN(sts)) return sts; sts = ldh_GetAttrRef(ip->PointedSession, ip->Pointed.Objid, mb.MethodArguments[0], &PattrRef); if (EVEN(sts)) return sts; sts = ldh_GetAttrRef(ip->PointedSession, ip->Selected[0].Objid, mb.MethodArguments[1], &SattrRef); if (EVEN(sts)) return sts; sts = ldh_GetAttrXRefDef(ip->PointedSession, &PattrRef, &PattrDef); if (EVEN(sts)) return sts; sts = ldh_GetAttrXRefDef(ip->PointedSession, &SattrRef, &SattrDef); if (EVEN(sts)) return sts; if (strncmp(PattrDef.Identity, SattrDef.Identity, sizeof(SattrDef.Identity)) != 0) return PWRS__IDXREF; if (strncmp(PattrDef.Source, SattrDef.Target, sizeof(PattrDef.Source)) != 0) return PWRS__STXREF; if (strncmp(PattrDef.Target, SattrDef.Source, sizeof(SattrDef.Source)) != 0) return PWRS__STXREF; Pdim = PattrRef.Size / sizeof(pwr_sAttrRef); Sdim = SattrRef.Size / sizeof(pwr_sAttrRef); TattrRef = PattrRef; TattrRef.Size = sizeof(pwr_sAttrRef); for (i = 0; i < (int)Pdim; i++, TattrRef.Offset += sizeof(pwr_sAttrRef)) { /* find Sobject */ sts = ldh_ReadAttribute(ip->PointedSession, &TattrRef, &PattrXref, sizeof(pwr_sAttrRef)); if (EVEN(sts)) return sts; if (!cdh_ObjidIsEqual(PattrXref.Objid, ip->Selected[0].Objid)) continue; sts = ldh_ReadAttribute(ip->PointedSession, &PattrXref, &SattrXref, sizeof(pwr_sAttrRef)); if (EVEN(sts)) return sts; if (memcmp(&SattrXref, &TattrRef, sizeof(pwr_sAttrRef)) == 0) return PWRS__ALRCONN; } TattrRef = PattrRef; TattrRef.Size = sizeof(pwr_sAttrRef); for (i = 0; i < (int)Pdim; i++, TattrRef.Offset += sizeof(pwr_sAttrRef)) { /* find free slot */ sts = ldh_ReadAttribute(ip->PointedSession, &TattrRef, &PattrXref, sizeof(pwr_sAttrRef)); if (EVEN(sts)) return sts; if (cdh_ObjidIsNull(PattrXref.Objid)) break; } if (i >= (int)Pdim) { return PWRS__PALRCONN; } else { PattrRef = TattrRef; } TattrRef = SattrRef; TattrRef.Size = sizeof(pwr_sAttrRef); for (i = 0; i < (int)Sdim; i++, TattrRef.Offset += sizeof(pwr_sAttrRef)) { /* find free slot */ sts = ldh_ReadAttribute(ip->PointedSession, &TattrRef, &SattrXref, sizeof(pwr_sAttrRef)); if (EVEN(sts)) return sts; if (cdh_ObjidIsNull(SattrXref.Objid)) break; } if (i >= (int)Sdim) { return PWRS__SALRCONN; } else { SattrRef = TattrRef; } sts = ldh_WriteAttribute(ip->PointedSession, &SattrRef, &PattrRef, sizeof(pwr_sAttrRef)); sts = ldh_WriteAttribute(ip->PointedSession, &PattrRef, &SattrRef, sizeof(pwr_sAttrRef)); return PWRS__SUCCESS; }
static pwr_tStatus ConfigureComponent( ldh_sMenuCall *ip) { pwr_tStatus sts; unsigned int disable_mask; pwr_sMenuButton mb; pwr_tEnum graph_configuration; pwr_sAttrRef aaref; char vect[10][80]; char item[3][80]; int i; int nr; int vect_cnt; sts = ldh_ReadObjectBody(ip->PointedSession, ip->ItemList[ip->ChosenItem].MenuObject, "SysBody", &mb, sizeof(pwr_sMenuButton)); // Reset previoius disable configuration configure_object_reset( ip, &ip->Pointed, &mb); // Set disable attributes from argument 0 if ( mb.MethodArguments[0][0] != '(') { // Old syntax, eg '7, CircuitBreaker 4, Contactor 5' vect_cnt = dcli_parse( mb.MethodArguments[0], ",", "", (char *)vect, sizeof( vect) / sizeof( vect[0]), sizeof( vect[0]), 0); for ( i = 0; i < vect_cnt; i++) { nr = dcli_parse( vect[i], " ", "", (char *)item, sizeof( item) / sizeof( item[0]), sizeof( item[0]), 0); if ( nr == 1) { if ( sscanf( item[0], "%d", &disable_mask) != 1) graph_configuration = 0; sts = configure_object( ip, &ip->Pointed, disable_mask); if ( EVEN(sts)) return sts; } else if ( nr == 2) { pwr_tAName aname; if ( sscanf( item[1], "%d", &disable_mask) != 1) disable_mask = 0; strncpy( aname, item[0], sizeof(aname)); sts = ldh_ArefANameToAref( ip->PointedSession, &ip->Pointed, aname, &aaref); if ( ODD(sts)) { sts = configure_object( ip, &aaref, disable_mask); if ( EVEN(sts)) return sts; } } } } else { // New syntax, eg '(7 (CircuitBreaker 4, Contactor 5))' char str1[256]; char *s; strncpy( str1, &mb.MethodArguments[0][1], sizeof(str1)); s = strrchr( str1, ')'); if ( !s) return LDH__COMPSYNTAX; *s = 0; dcli_trim( str1, str1); nr = sscanf( str1, "%d", &disable_mask); if ( nr != 1) return LDH__COMPSYNTAX; sts = configure_object( ip, &ip->Pointed, disable_mask); if ( EVEN(sts)) return sts; sts = configure_attrmask( ip, &ip->Pointed, str1); if ( EVEN(sts)) return sts; } // Set GraphConfiguration from argument 1 vect_cnt = dcli_parse( mb.MethodArguments[1], ",", "", (char *)vect, sizeof( vect) / sizeof( vect[0]), sizeof( vect[0]), 0); for ( i = 0; i < vect_cnt; i++) { nr = dcli_parse( vect[i], " ", "", (char *)item, sizeof( item) / sizeof( item[0]), sizeof( item[0]), 0); if ( nr == 1) { if ( sscanf( item[0], "%d", &graph_configuration) != 1) graph_configuration = 0; sts = ldh_ArefANameToAref( ip->PointedSession, &ip->Pointed, "GraphConfiguration", &aaref); if ( ODD(sts)) { sts = ldh_WriteAttribute( ip->PointedSession, &aaref, (void *)&graph_configuration, sizeof(graph_configuration)); if ( EVEN(sts)) return sts; } } else if ( nr == 2) { pwr_tAName aname; if ( sscanf( item[1], "%d", &graph_configuration) != 1) graph_configuration = 0; strncpy( aname, item[0], sizeof(aname)); strncat( aname, ".GraphConfiguration", sizeof(aname)); sts = ldh_ArefANameToAref( ip->PointedSession, &ip->Pointed, aname, &aaref); if ( ODD(sts)) { sts = ldh_WriteAttribute( ip->PointedSession, &aaref, (void *)&graph_configuration, sizeof(graph_configuration)); if ( EVEN(sts)) return sts; } } } return 1; }
// // History log // static pwr_tStatus History( ldh_sMenuCall *ip) { pwr_tStatus sts; pwr_tOName oname; char item[300]; int size; pwr_sMenuButton mb; pwr_tCmd cmd; char categories[80]; int showitem = 0; pwr_tCid cid; char *s; sts = ldh_ObjidToName(ip->PointedSession, ip->Pointed.Objid, ldh_eName_VolPath, oname, sizeof(oname), &size); if (EVEN(sts)) return sts; sts = ldh_GetObjectClass(ip->PointedSession, ip->Pointed.Objid, &cid); if (EVEN(sts)) return sts; sts = ldh_ReadObjectBody(ip->PointedSession, ip->ItemList[ip->ChosenItem].MenuObject, "SysBody", &mb, sizeof(pwr_sMenuButton)); switch ( cid) { case pwr_cClass_XttGraph: { char *action; // Get action attribute sts = ldh_GetObjectPar( ip->PointedSession, ip->Pointed.Objid, "RtBody", "Action", &action, &size); if ( EVEN(sts)) return sts; strncpy( item, action, sizeof(item)); free( action); if ( (s = strstr( item, ".pwg"))) *s = 0; else return 1; strncpy( categories, mb.MethodArguments[0], sizeof(categories)); showitem = 1; break; } case pwr_cClass_NodeConfig: { char *nodename; // Get NodeName attribute sts = ldh_GetObjectPar( ip->PointedSession, ip->Pointed.Objid, "RtBody", "NodeName", &nodename, &size); if ( EVEN(sts)) return sts; strncpy( item, nodename, sizeof(item)); free( nodename); strncpy( categories, mb.MethodArguments[0], sizeof(categories)); showitem = 1; break; } case pwr_cClass_RootVolumeConfig: case pwr_cClass_ClassVolumeConfig: case pwr_cClass_SubVolumeConfig: case pwr_cClass_SharedVolumeConfig: { pwr_tObjName vname; // Get object name attribute sts = ldh_ObjidToName(ip->PointedSession, ip->Pointed.Objid, ldh_eName_Object, vname, sizeof(vname), &size); if ( EVEN(sts)) return sts; strncpy( item, vname, sizeof(item)); strncpy( categories, mb.MethodArguments[0], sizeof(categories)); showitem = 1; break; } default: // Item is object name strncpy( item, oname, sizeof(item)); strncpy( categories, mb.MethodArguments[0], sizeof(categories)); if (strcmp(mb.MethodArguments[1], "Descendants") == 0) { strncat( item, "*", sizeof(item)); showitem = 1; } } snprintf( cmd, sizeof(cmd), "open history/item=\"%s\"/categories=\"%s\"", item, categories); if ( showitem) strncat( cmd, "/showitem", sizeof(cmd)); ip->wnav->command( cmd); return 1; }
static pwr_tStatus ConfigureComponent( ldh_sMenuCall *ip) { pwr_tStatus sts; unsigned int disable_mask; pwr_sMenuButton mb; pwr_tEnum graph_configuration; pwr_sAttrRef aaref; char vect[10][80]; char item[3][80]; int i; int nr; int vect_cnt; sts = ldh_ReadObjectBody(ip->PointedSession, ip->ItemList[ip->ChosenItem].MenuObject, "SysBody", &mb, sizeof(pwr_sMenuButton)); // Reset previoius disable configuration configure_object_reset( ip, &ip->Pointed, &mb); // Set disable attributes from argument 0 vect_cnt = dcli_parse( mb.MethodArguments[0], ",", "", (char *)vect, sizeof( vect) / sizeof( vect[0]), sizeof( vect[0]), 0); for ( i = 0; i < vect_cnt; i++) { nr = dcli_parse( vect[i], " ", "", (char *)item, sizeof( item) / sizeof( item[0]), sizeof( item[0]), 0); if ( nr == 1) { if ( sscanf( item[0], "%d", &disable_mask) != 1) graph_configuration = 0; sts = configure_object( ip, &ip->Pointed, disable_mask); if ( EVEN(sts)) return sts; } else if ( nr == 2) { pwr_tAName aname; if ( sscanf( item[1], "%d", &disable_mask) != 1) disable_mask = 0; strcpy( aname, item[0]); sts = ldh_ArefANameToAref( ip->PointedSession, &ip->Pointed, aname, &aaref); if ( ODD(sts)) { sts = configure_object( ip, &aaref, disable_mask); if ( EVEN(sts)) return sts; } } } // Set GraphConfiguration from argument 1 vect_cnt = dcli_parse( mb.MethodArguments[1], ",", "", (char *)vect, sizeof( vect) / sizeof( vect[0]), sizeof( vect[0]), 0); for ( i = 0; i < vect_cnt; i++) { nr = dcli_parse( vect[i], " ", "", (char *)item, sizeof( item) / sizeof( item[0]), sizeof( item[0]), 0); if ( nr == 1) { if ( sscanf( item[0], "%d", &graph_configuration) != 1) graph_configuration = 0; sts = ldh_ArefANameToAref( ip->PointedSession, &ip->Pointed, "GraphConfiguration", &aaref); if ( ODD(sts)) { sts = ldh_WriteAttribute( ip->PointedSession, &aaref, (void *)&graph_configuration, sizeof(graph_configuration)); if ( EVEN(sts)) return sts; } } else if ( nr == 2) { pwr_tAName aname; if ( sscanf( item[1], "%d", &graph_configuration) != 1) graph_configuration = 0; strcpy( aname, item[0]); strcat( aname, ".GraphConfiguration"); sts = ldh_ArefANameToAref( ip->PointedSession, &ip->Pointed, aname, &aaref); if ( ODD(sts)) { sts = ldh_WriteAttribute( ip->PointedSession, &aaref, (void *)&graph_configuration, sizeof(graph_configuration)); if ( EVEN(sts)) return sts; } } } return 1; }
static pwr_tStatus ConfigFc ( ldh_sMenuCall *ip ) { int sts; pwr_tOName name; pwr_tOName pname; pwr_tObjName oname; int size; pwr_tCid cid; pwr_tTid tid; unsigned int flags; pwr_tInt32 int_val; pwr_tObjid oid; pwr_tObjid coid; int plcconnect = 0; int plctemplate = 0; char str[80]; pwr_sMenuButton mb; sts = ldh_GetChild(ip->PointedSession, ip->Pointed.Objid, &oid); if ( ODD(sts)) { ip->wnav->wow->DisplayError( "Error", "ClassDef is already configured\n Object has child"); return 0; } /* If argument is PlcConnect, configure a connected function object i.e. an $Intern named PlcConnnect, a PlcConnect MenuRef, and connectmethod 10 */ sts = ldh_ReadObjectBody(ip->PointedSession, ip->ItemList[ip->ChosenItem].MenuObject, "SysBody", &mb, sizeof(pwr_sMenuButton)); if ( strcmp(mb.MethodArguments[0], "PlcConnect") == 0) { plcconnect = 1; plctemplate = 1; } else if ( strcmp(mb.MethodArguments[0], "CCode") == 0) { plcconnect = 0; plctemplate = 0; } else if ( strcmp(mb.MethodArguments[0], "PlcConnectCCode") == 0) { plcconnect = 1; plctemplate = 0; } else { plcconnect = 0; plctemplate = 1; } sts = ldh_ObjidToName( ip->PointedSession, ip->Pointed.Objid, ldh_eName_Hierarchy, pname, sizeof(pname), &size); if ( EVEN(sts)) return sts; sts = ldh_ObjidToName( ip->PointedSession, ip->Pointed.Objid, ldh_eName_Object, oname, sizeof(oname), &size); if ( EVEN(sts)) return sts; sts = ldh_CreateObject( ip->PointedSession, &oid, "RtBody", pwr_eClass_ObjBodyDef, ip->Pointed.Objid, ldh_eDest_IntoFirst); if ( plcconnect) { // Create PlcConnect attribute strcpy( name, pname); strcat( name, "-"); strcat( name, "RtBody"); sts = ldh_NameToObjid( ip->PointedSession, &oid, name); if ( EVEN(sts)) return sts; sts = ldh_CreateObject( ip->PointedSession, &coid, "PlcConnect", pwr_eClass_Intern, oid, ldh_eDest_IntoLast); if ( ODD(sts)) { tid = pwr_eType_AttrRef; sts = ldh_SetObjectPar(ip->PointedSession, coid, "SysBody", "TypeRef", (char *)&tid, sizeof(tid)); if ( EVEN(sts)) return sts; } if ( !plctemplate) { // Create PlcConnectP attribute sts = ldh_CreateObject( ip->PointedSession, &coid, "PlcConnectP", pwr_eClass_Intern, oid, ldh_eDest_IntoLast); if ( ODD(sts)) { tid = pwr_eType_Char; sts = ldh_SetObjectPar(ip->PointedSession, coid, "SysBody", "TypeRef", (char *)&tid, sizeof(tid)); if ( EVEN(sts)) return sts; flags = PWR_MASK_INVISIBLE | PWR_MASK_POINTER | PWR_MASK_PRIVATE; sts = ldh_SetObjectPar(ip->PointedSession, coid, "SysBody", "Flags", (char *)&flags, sizeof(flags)); if ( EVEN(sts)) return sts; } } } sts = ldh_CreateObject( ip->PointedSession, &oid, "DevBody", pwr_eClass_ObjBodyDef, ip->Pointed.Objid, ldh_eDest_IntoLast); if ( EVEN(sts)) { // The object already exist } strcpy( name, pname); strcat( name, "-"); strcat( name, "DevBody"); sts = ldh_NameToObjid( ip->PointedSession, &oid, name); if ( EVEN(sts)) return sts; sts = ldh_CreateObject( ip->PointedSession, &oid, "PlcNode", pwr_eClass_Buffer, oid, ldh_eDest_IntoLast); if ( ODD(sts)) { cid = pwr_eClass_PlcNode; sts = ldh_SetObjectPar(ip->PointedSession, oid, "SysBody", "Class", (char *)&cid, sizeof(cid)); if ( EVEN(sts)) return sts; } sts = ldh_CreateObject( ip->PointedSession, &oid, "GraphPlcNode", pwr_eClass_GraphPlcNode, ip->Pointed.Objid, ldh_eDest_IntoLast); if ( ODD(sts)) { if ( plctemplate) { pwr_tCid scid[2]; scid[0] = pwr_cClass_windowplc; scid[1] = 0; int_val = 1; sts = ldh_SetObjectPar(ip->PointedSession, oid, "SysBody", "subwindows", (char *)&int_val, sizeof(int_val)); if ( EVEN(sts)) return sts; sts = ldh_SetObjectPar(ip->PointedSession, oid, "SysBody", "subwindow_class[0]", (char *)scid, sizeof(scid)); if ( EVEN(sts)) return sts; } int_val = 1; sts = ldh_SetObjectPar(ip->PointedSession, oid, "SysBody", "segname_annotation", (char *)&int_val, sizeof(int_val)); if ( EVEN(sts)) return sts; if ( plctemplate) int_val = 58; else if ( plcconnect) int_val = 35; else int_val = 4; sts = ldh_SetObjectPar(ip->PointedSession, oid, "SysBody", "compmethod", (char *)&int_val, sizeof(int_val)); if ( EVEN(sts)) return sts; if ( plcconnect) { int_val = 10; sts = ldh_SetObjectPar(ip->PointedSession, oid, "SysBody", "connectmethod", (char *)&int_val, sizeof(int_val)); if ( EVEN(sts)) return sts; } int_val = 2; sts = ldh_SetObjectPar(ip->PointedSession, oid, "SysBody", "executeordermethod", (char *)&int_val, sizeof(int_val)); if ( EVEN(sts)) return sts; oname[15] = 0; sts = ldh_SetObjectPar(ip->PointedSession, oid, "SysBody", "objname", oname, sizeof(pwr_tString16)); if ( EVEN(sts)) return sts; sts = ldh_SetObjectPar(ip->PointedSession, oid, "SysBody", "graphname", oname, sizeof(pwr_tString16)); if ( EVEN(sts)) return sts; } if ( plcconnect) { sts = ldh_CreateObject( ip->PointedSession, &oid, "RtXtt", pwr_eClass_RtMenu, ip->Pointed.Objid, ldh_eDest_IntoLast); strcpy( name, pname); strcat( name, "-"); strcat( name, "RtXtt"); sts = ldh_NameToObjid( ip->PointedSession, &oid, name); if ( EVEN(sts)) return sts; sts = ldh_CreateObject( ip->PointedSession, &oid, "PlcConnect", pwr_eClass_MenuRef, oid, ldh_eDest_IntoLast); if ( ODD(sts)) { strcpy( str, "PlcConnect"); sts = ldh_SetObjectPar(ip->PointedSession, oid, "SysBody", "ButtonName", str, sizeof(pwr_tString40)); if ( EVEN(sts)) return sts; sts = ldh_SetObjectPar(ip->PointedSession, oid, "SysBody", "RefAttribute", str, sizeof(pwr_tString40)); if ( EVEN(sts)) return sts; } } if ( plctemplate) { sts = ldh_CreateObject( ip->PointedSession, &oid, "Code", pwr_cClass_PlcTemplate, ip->Pointed.Objid, ldh_eDest_IntoLast); } return PWRS__SUCCESS; }