示例#1
0
static pwr_tStatus PostMove (
  ldh_tSesContext Session,
  pwr_tObjid	  Object,
  pwr_tObjid	  Father,
  pwr_tClassId	  Class
) {
  pwr_tStatus sts;
  int size;
  pwr_tAName Name;
  pwr_sAttrRef Attribute;
  
  /*
    If father of ASup has an "ActualValue" attribute, then make this ASup
    refer to this attribute.
  */

  sts = ldh_ObjidToName(Session, Father, ldh_eName_Hierarchy, Name,
    sizeof(Name), &size);
  if (EVEN(sts)) return PWRB__SUCCESS;

  strcat(Name, ".ActualValue");

  sts = ldh_NameToAttrRef(Session, Name, &Attribute);
  if (EVEN(sts)) return PWRB__SUCCESS;

  sts = ldh_SetObjectPar(Session, Object, "RtBody", "DataName", (char *)&Attribute,
    sizeof(Attribute));
  if (EVEN(sts)) return PWRB__SUCCESS;

  return PWRB__SUCCESS;
}
示例#2
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;
}
示例#3
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;
}
示例#4
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;
}
示例#5
0
pwr_tStatus bck_dump( ldh_tSession ldhses, char *filename, char *out)
{
  pwr_tFileName fname;
  FILE *f, *fout;
  BCK_FILEHEAD_STRUCT fh;
  bck_t_cycleheader ch;
  bck_t_writeheader dh;
  char timstr [24];
  int c, d;
  unsigned char *datap, *p;
  int i;
  pwr_tStatus sts;
  int csts;
  char *namep;
  pwr_tAName aname;
  int size;
  int dump = 0;

  // Open file

  dcli_translate_filename( fname, filename);
  f = fopen( fname, "rb");
  if ( !f)
    return LDH__NOSUCHFILE;

  dcli_translate_filename( fname, out);
  fout = fopen( fname, "w");
  if ( !fout)
    return LDH__NOSUCHFILE;

  // Read header and print it

  fseek (f, 0, 0);
  fread (&fh, sizeof fh, 1, f);
  fprintf( fout, "Layout version:       %d\n", fh.version);
  if (fh.version != BCK_FILE_VERSION) {
    printf ("This program is built with header version %d\n", BCK_FILE_VERSION);
    return LDH__BCKVERSION;
  }

  time_AtoAscii(&fh.creationtime, time_eFormat_DateAndTime, timstr, sizeof(timstr));

  fprintf( fout, "Created:              %s\n", timstr);

  for (c=0; c<2; c++) {
    fseek(f, fh.curdata [c], 0);
    fread(&ch, sizeof ch, 1, f);

    /* Work thru the data segments */

    for ( d = 0; d < (int)ch.segments; d++) {
      csts = fread(&dh, sizeof dh, 1, f);
      if (csts != 0) {
	if (dh.namesize > 0) {
	  namep = (char *)malloc(dh.namesize + 1);
	  csts = fread(namep, dh.namesize + 1, 1, f);
	} else 
	  namep = NULL;
	datap = (unsigned char *)malloc(dh.size);
	csts = fread(datap, dh.size, 1, f);
      }
      if (csts == 0) {
	fprintf( fout, "Read error\n");
	break;
      }
	  
      if (dh.valid) {
	if ( dump) {
	  fprintf( fout, "%s%s", cdh_ObjidToString(0, dh.objid, 1), namep);

	  p = datap;
	  for ( i = 0; i < (int)dh.size; i++, p++) {
	    if ((i % 16) == 0) fprintf( fout, "\n	");
	    fprintf( fout, "%02x ", *p);
	  }
	  fprintf( fout, "\n");
	}
	else {
	  sts = ldh_ObjidToName( ldhses, dh.objid, cdh_mName_volumeStrict, aname, sizeof(aname), &size);
	  if ( EVEN(sts))
	    strcpy( aname, cdh_ObjidToString(0, dh.objid, 1));
	  strncat( aname, namep, sizeof(aname));

	  fprintf( fout, "%s", aname);

	  char str[1024];
	  pwr_tAttrRef aref;
	  pwr_eType atype;
	  int printed = 0;
	  sts = ldh_NameToAttrRef( ldhses, aname, &aref);
	  if ( ODD(sts)) {
	    sts = ldh_GetAttrRefType( ldhses, &aref, &atype);
	    if ( ODD(sts)) {
	      sts = cdh_AttrValueToString( atype, datap, str, sizeof(str));
	      if ( ODD(sts)) {
		fprintf( fout, "\n	%s\n", str);
		printed = 1;
	      }
	    }
	  }

	  if ( !printed) {
	    // Print as hex code
	    p = datap;
	    for ( i = 0; i < (int)dh.size; i++, p++) {
	      if ((i % 16) == 0) fprintf( fout, "\n	");
	      fprintf( fout, "%02x ", *p);
	    }
	    fprintf( fout, "\n");
	  }
	}
      }

      free(datap);
      free(namep);
    }
  }

  fclose (f);
  fclose (fout);

  return LDH__SUCCESS;
}
示例#6
0
pwr_tStatus wb_bck_list::read() {
  FILE *f;
  BCK_FILEHEAD_STRUCT fh;
  bck_t_cycleheader ch;
  bck_t_writeheader dh;
  int c, d;
  unsigned char *datap;
  pwr_tStatus sts;
  int csts;
  char *namep;
  pwr_tAName aname;
  int size;

  m_type = bck_eType_File;

  // Open file

  f = fopen( m_filename, "rb");
  if ( !f)
    return LDH__NOSUCHFILE;

  // Read header

  fseek (f, 0, 0);
  fread (&fh, sizeof fh, 1, f);
  if (fh.version != BCK_FILE_VERSION) {
    printf ("This program is built with header version %d\n", BCK_FILE_VERSION);
    return LDH__BCKVERSION;
  }

  for (c=0; c<2; c++) {
    fseek(f, fh.curdata [c], 0);
    fread(&ch, sizeof ch, 1, f);

    /* Work thru the data segments */

    for ( d = 0; d < (int)ch.segments; d++) {
      csts = fread(&dh, sizeof dh, 1, f);
      if (csts != 0) {
	if (dh.namesize > 0) {
	  namep = (char *)malloc(dh.namesize + 1);
	  csts = fread(namep, dh.namesize + 1, 1, f);
	} else 
	  namep = NULL;
	datap = (unsigned char *)malloc(dh.size);
	csts = fread(datap, dh.size, 1, f);
      }
      if (csts == 0) {
	printf( "** Read error\n");
	break;
      }
	  
      if (dh.valid) {
	sts = ldh_ObjidToName( m_ldhses, dh.objid, cdh_mName_volumeStrict, aname, sizeof(aname), &size);
	if ( EVEN(sts)) {
	  printf( "** Error, %s%s not found in this environment", 
		  cdh_ObjidToString(0, dh.objid, 1), aname);
	}
	else {
	  strncat( aname, namep, sizeof(aname));

	  pwr_tAttrRef aref;
	  sts = ldh_NameToAttrRef( m_ldhses, aname, &aref);
	  if ( EVEN(sts))
	    printf("**Error, %s, no such attribute\n", aname);
	  else
	    add( &aref, datap, dh.size);
	}
      }
      free(datap);
      free(namep);
    }
  }

  fclose (f);

  return LDH__SUCCESS;
}
示例#7
0
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;
}
示例#8
0
Boolean WNavMotif::sel_convert_cb(
    Widget  w,
    Atom    *selection,
    Atom    *target,
    Atom    *type_return,
    XtPointer	*value_return,
    unsigned long   *length_return,
    int	    *format_return)
{
    WNavMotif    	*wnav;
    brow_tCtx	browctx;
    int 		sts;
    int		size;
    WItem		*item;
    pwr_tAName   	attr_str;
    pwr_sAttrRef attrref;
    char          name[200];
    char		*buffp;

    BrowCtxFromWidget( w, (void **) &browctx);
    brow_GetCtxUserData( browctx, (void **) &wnav);

    if (*target == XA_TARGETS(flow_Display(wnav->brow_widget))) {
        Atom *targetP;
        Atom *std_targets;
        unsigned long std_length;
        XSelectionRequestEvent *req = XtGetSelectionRequest( w, *selection,
                                      (XtRequestId)NULL);

        XmuConvertStandardSelection( w, req->time, selection, target, type_return,
                                     (caddr_t *)&std_targets, &std_length, format_return);

        *value_return = XtMalloc( sizeof(Atom) * (std_length + 2));
        targetP = *(Atom **) value_return;
        *targetP++ = XA_STRING;
        *targetP++ = XA_TEXT(flow_Display(wnav->brow_widget));
        *length_return = std_length + (targetP - (*(Atom **) value_return));
        bcopy((char *)std_targets, (char *)targetP, sizeof(Atom) * std_length);
        XtFree( (char *)std_targets);
        *type_return = XA_ATOM;
        *format_return = 32;
        return True;
    }

    if (*target == XA_STRING ||
            *target == XA_TEXT(flow_Display(wnav->brow_widget)) ||
            *target == XA_COMPOUND_TEXT(flow_Display(wnav->brow_widget)) ||
            *target == wnav->graph_atom ||
            *target == wnav->objid_atom ||
            *target == wnav->attrref_atom)
    {
        brow_tNode	*node_list;
        int		node_count;
        wnav_eSelectionFormat format;

        if ( *target == wnav->graph_atom)
            format = wnav_eSelectionFormat_Graph;
        else if ( *target == wnav->objid_atom)
            format = wnav_eSelectionFormat_Objid;
        else if ( *target == wnav->attrref_atom)
            format = wnav_eSelectionFormat_Attrref;
        else
            format = wnav_eSelectionFormat_User;


        brow_GetSelectedNodes( wnav->brow->ctx, &node_list, &node_count);
        if ( !node_count)
            return FALSE;

        brow_GetUserData( node_list[0], (void **)&item);

        switch( item->type) {
        case wnav_eItemType_Attr:
        case wnav_eItemType_AttrInput:
        case wnav_eItemType_AttrInputInv:
        case wnav_eItemType_AttrInputF:
        case wnav_eItemType_AttrOutput:
        case wnav_eItemType_AttrArray:
        case wnav_eItemType_AttrArrayOutput:
        case wnav_eItemType_AttrArrayElem:
        case wnav_eItemType_AttrObject: {
            WItemBaseAttr *aitem = (WItemBaseAttr *)item;

            sts = ldh_ObjidToName( wnav->ldhses, item->objid, ldh_eName_Hierarchy,
                                   attr_str, sizeof(attr_str), &size);
            if ( EVEN(sts)) return FALSE;

            strcat( attr_str, ".");
            strcat( attr_str, aitem->name);
            sts = ldh_NameToAttrRef( wnav->ldhses, attr_str, &attrref);
            if ( EVEN(sts)) return FALSE;
            sts = (wnav->format_selection_cb)( wnav->parent_ctx, attrref,
                                               &buffp, 0, 1, format);
            *value_return = XtNewString(buffp);
            *length_return = strlen(buffp) + 1;
            if ( !sts) return FALSE;
            break;
        }
        case wnav_eItemType_Object:
            memset( &attrref, 0, sizeof(attrref));
            attrref.Objid = item->objid;
            sts = (wnav->format_selection_cb)( wnav->parent_ctx, attrref,
                                               &buffp, 0, 0, format);
            *value_return = XtNewString(buffp);
            *length_return = strlen(buffp) + 1;
            if ( !sts) return FALSE;
            break;
        default:
            brow_GetAnnotation( node_list[0], 0, name, sizeof(name));
            *value_return = XtNewString(name);
            *length_return = strlen(name) + 1;
        }
        free( node_list);

        if ( *target == XA_COMPOUND_TEXT(flow_Display(wnav->brow_widget)) ||
                *target == wnav->graph_atom ||
                *target == wnav->objid_atom ||
                *target == wnav->attrref_atom)
            *type_return = *target;
        else
            *type_return = XA_STRING;
        *format_return = 8;

        return TRUE;
    }
    return FALSE;
}