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; }
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 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 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; }
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; }
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; }
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; }