Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
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;
}
Example #4
0
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;
}
Example #5
0
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;
}
Example #6
0
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;
}
Example #7
0
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;
}
Example #8
0
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;
}
Example #9
0
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;
}
Example #10
0
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;
}
Example #11
0
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;
}
Example #12
0
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;
}
Example #13
0
//
// 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;
}
Example #14
0
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;
}
Example #15
0
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;
}