49 #include "co_string.h"
52 #include "rt_gdh_msg.h"
53 #include "rt_hash_msg.h"
54 #include "rt_pwr_msg.h"
57 #include "rt_cmvolc.h"
64 #include "pwr_baseclasses.h"
66 #if defined(OS_LINUX) || defined OS_MACOS
68 pthread_mutex_lock(&gdbroot->thread_lock); \
72 pthread_mutex_unlock(&gdbroot->thread_lock)
75 #define gdh_Lock gdb_Lock
76 #define gdh_Unlock gdb_Unlock
79 #define gdh_ScopeLock \
82 #define gdh_ScopeUnlock \
87 #define touchObject(op) \
88 if (op != NULL && op->l.flags.b.isCached) \
91 #define STS_M_SEVERITY 0x7
97 static void (*gdh_log_cb)(
char*,
void*,
unsigned int) = 0;
106 static void getAlarmVisibility(
pwr_tStatus* status,
112 pwr_dStatus(sts, status, GDH__SUCCESS);
116 while (pop->l.por != pool_cNRef) {
117 pop = pool_Address(sts, gdbroot->pool, pop->l.por);
121 *avis = MAX(*avis, pop->l.al.b);
136 mvol_sAttribute Attribute;
151 memset(&Attribute, 0,
sizeof(Attribute));
153 if (nametype == cdh_mNName)
154 lnametype.m = cdh_mName_pathStrict;
156 lnametype.m = nametype;
160 ap = vol_ArefToAttribute(
161 &sts, &Attribute, arp, gdb_mLo_global, vol_mTrans_all);
166 s = vol_AttributeToName(&sts, ap, lnametype.m,
string);
170 if (ap == NULL && lnametype.
b.fallback != cdh_mName_eFallback_strict) {
180 strncpy(name, s, lsize + 1);
199 mvol_sAttribute Attribute;
209 memset(&Attribute, 0,
sizeof(Attribute));
211 if (arp->
Flags.
b.Object) {
212 op = vol_OidToObject(
213 &sts, arp->
Objid, gdb_mLo_global, vol_mTrans_none, cvol_eHint_none);
218 s = vol_ObjectToName(&sts, op, cdh_mName_volumeStrict,
string);
220 ap = vol_ArefToAttribute(
221 &sts, &Attribute, arp, gdb_mLo_global, vol_mTrans_all);
226 s = vol_AttributeToName(&sts, ap, cdh_mName_volumeStrict,
string);
229 strcat(
string, aname);
231 pn = cdh_ParseName(&sts, &parseName, pwr_cNOid,
string, 0);
235 memset(&Attribute, 0,
sizeof(Attribute));
237 ap = vol_NameToAttribute(
238 &sts, &Attribute, pn, gdb_mLo_global, vol_mTrans_all);
242 mvol_AttributeToAref(&sts, ap, oarp);
264 mvol_sAttribute Attribute;
277 memset(&Attribute, 0,
sizeof(Attribute));
279 ap = vol_ArefToAttribute(
280 &sts, &Attribute, arp, gdb_mLo_global, vol_mTrans_all);
285 s = vol_AttributeToName(&sts, ap, cdh_mName_volumeStrict,
string);
287 t = strrchr(
string,
'.');
294 pn = cdh_ParseName(&sts, &parseName, pwr_cNOid,
string, 0);
298 memset(&Attribute, 0,
sizeof(Attribute));
300 ap = vol_NameToAttribute(
301 &sts, &Attribute, pn, gdb_mLo_global, vol_mTrans_all);
305 mvol_AttributeToAref(&sts, ap, oarp);
327 mvol_sAttribute Attribute;
331 char buff[512] =
".";
338 if (name != NULL && *name !=
'\0') {
339 pn = cdh_ParseName(&sts, &ParseName, pwr_cNObjid, name, 0);
340 if (pn == NULL || pn->nAttribute == 0) {
342 pn = cdh_ParseName(&sts, &ParseName, pwr_cNObjid, buff, 0);
348 memset(&Attribute, 0,
sizeof(Attribute));
352 ap = mvol_AnameToAttribute(&sts, &Attribute, cid, pn, NULL);
355 mvol_AttributeToAref(&sts, ap, arp);
378 mvol_sAttribute Attribute;
386 memset(&Attribute, 0,
sizeof(Attribute));
390 ap = mvol_ArefToAttribute(&sts, &Attribute, arp, cid);
395 if (ap->adef && ap->adef->Info.Elements > 1
396 && ap->size < ap->adef->Info.Size) {
399 sprintf(aname,
"%s[%d]", ap->name, ap->idx);
400 strncpy(name, aname, size);
402 strncpy(name, ap->name, size);
425 cp = mvol_NameToClass(&sts, name);
426 if (cp != NULL && cid != NULL)
478 pn = cdh_ParseName(&sts, &ParseName, pwr_cNObjid, name, 0);
481 if (pn->flags.
b.idString)
482 return GDH__NOSUCHOBJ;
486 op = dvol_CreateObject(&sts, pn, cid, size, req_oid);
520 return GDH__NOSUCHOBJ;
524 dvol_DeleteObject(&sts, oid);
555 return GDH__NOSUCHOBJ;
559 dvol_DeleteObjectTree(&sts, oid);
587 mvol_sAttribute Attribute;
594 memset(&Attribute, 0,
sizeof(Attribute));
598 ap = vol_ArefToAttribute(
599 &sts, &Attribute, arp, gdb_mLo_native, vol_mTrans_all);
603 if (ap->op->u.n.lflags.b.readOnly) {
608 p = vol_AttributeToAddress(&sts, ap);
612 dp = dl_Create(&sts, ap, arp);
645 dl_Cancel(&sts, dlid);
660 dl_CancelUser(gdbroot->my_pid);
688 op = vol_OidToObject(
689 &sts, oid, gdb_mLo_global, vol_mTrans_none, cvol_eHint_none);
695 if (!op->l.flags.b.isNative)
696 sanc_Subscribe(NULL, op);
702 *maxa = op->l.al.maxa;
703 if (op->l.flags.b.isNative)
704 *maxa = MAX(*maxa, op->u.n.ral.maxa);
711 *maxb = op->l.al.maxb;
712 if (op->l.flags.b.isNative)
713 *maxb = MAX(*maxb, op->u.n.ral.maxb);
716 if (alarmvisibility != NULL) {
717 getAlarmVisibility(&sts, op, alarmvisibility);
738 *nid = gdbroot->my_node->nid;
763 op = vol_OidToObject(
764 &sts, oid, gdb_mLo_global, vol_mTrans_all, cvol_eHint_none);
770 vp = pool_Address(NULL, gdbroot->pool, op->l.vr);
800 gdb_sNode* np = NULL;
801 mvol_sAttribute attribute;
808 gdb_sCclass* ccp = NULL;
809 gdb_sCclass* ccpLocked = NULL;
817 pn = cdh_ParseName(&sts, &parseName, pwr_cNObjid, name, 0);
821 memset(&attribute, 0,
sizeof(attribute));
826 ap = vol_NameToAttribute(
827 &sts, &attribute, pn, gdb_mLo_global, vol_mTrans_all);
835 p = vol_AttributeToAddress(&sts, ap);
837 memcpy(bufp, p, MIN(ap->size, bufsize));
839 }
else if (ap->op->l.flags.m & gdb_mLo_native) {
845 arp = mvol_AttributeToAref(&sts, ap, &aref);
849 vp = pool_Address(NULL, gdbroot->pool, ap->op->l.vr);
850 np = hash_Search(&sts, gdbroot->nid_ht, &vp->g.nid);
856 if (!ap->op->u.c.flags.b.classChecked || !ap->op->u.c.flags.b.classEqual) {
857 ccp = cmvolc_GetCachedClass(&sts, np, vp, ap, &equal, &fetched, NULL);
865 if (ccpLocked == NULL && ccp != NULL && !equal) {
866 cmvolc_LockClass(NULL, ccp);
873 memset(&attribute, 0,
sizeof(attribute));
881 rarp = ndc_NarefToRaref(
882 &sts, ap, arp, ccp, &ridx, &raref, &equal, pn, ccpLocked, vp, np);
889 if (np != NULL &&
ODD(sts)) {
892 &sts, np, arp, NULL, NULL, UINT_MAX, ap, bufp, bufsize);
894 cvolc_GetObjectInfo(&sts, np, arp, ccp, rarp, ridx, ap, bufp, bufsize);
899 cmvolc_UnlockClass(NULL, ccpLocked);
925 gdb_sNode* np = NULL;
926 mvol_sAttribute attribute;
929 gdb_sCclass* ccp = NULL;
930 gdb_sCclass* ccpLocked = NULL;
937 memset(&attribute, 0,
sizeof(attribute));
942 ap = vol_ArefToAttribute(
943 &sts, &attribute, arp, gdb_mLo_global, vol_mTrans_all);
944 if (ap == NULL || ap->op == NULL)
949 p = vol_AttributeToAddress(&sts, ap);
951 memcpy(bufp, p, MIN(ap->size, bufsize));
953 }
else if ((ap->op->l.flags.m & gdb_mLo_native) != 0) {
959 vp = pool_Address(NULL, gdbroot->pool, ap->op->l.vr);
960 np = hash_Search(&sts, gdbroot->nid_ht, &vp->g.nid);
967 if (!ap->op->u.c.flags.b.classChecked || !ap->op->u.c.flags.b.classEqual) {
968 ccp = cmvolc_GetCachedClass(&sts, np, vp, ap, &equal, &fetched, NULL);
976 if (ccpLocked == NULL && ccp != NULL && !equal) {
977 cmvolc_LockClass(NULL, ccp);
983 memset(&attribute, 0,
sizeof(attribute));
991 rarp = ndc_NarefToRaref(
992 &sts, ap, arp, ccp, &ridx, &raref, &equal, NULL, ccpLocked, vp, np);
1000 if (np != NULL &&
ODD(sts)) {
1002 cvolc_GetObjectInfo(
1003 &sts, np, arp, NULL, NULL, UINT_MAX, ap, bufp, bufsize);
1005 cvolc_GetObjectInfo(&sts, np, arp, ccp, rarp, ridx, ap, bufp, bufsize);
1010 cmvolc_UnlockClass(NULL, ccpLocked);
1037 op = vol_OidToObject(
1038 &sts, oid, gdb_mLo_global, vol_mTrans_none, cvol_eHint_none);
1062 mvol_sAttribute Attribute;
1063 mvol_sAttribute* ap;
1070 if (name != NULL && *name !=
'\0') {
1071 pn = cdh_ParseName(&sts, &ParseName, pwr_cNObjid, name, 0);
1073 return GDH__BADNAME;
1075 return GDH__BADNAME;
1077 memset(&Attribute, 0,
sizeof(Attribute));
1081 op = vol_OidToObject(
1082 &sts, oid, gdb_mLo_global, vol_mTrans_none, cvol_eHint_none);
1088 ap = mvol_AnameToAttribute(&sts, &Attribute, op->g.cid, pn, NULL);
1094 sts = GDH__ATTRIBUTE;
1122 op = vol_OidToObject(
1123 &sts, oid, gdb_mLo_global, vol_mTrans_all, cvol_eHint_none);
1128 if (op->l.flags.b.isCached) {
1129 cp = hash_Search(&lsts, gdbroot->cid_ht, cid);
1131 cmvolc_GetNonExistingClass(&lsts, op, *cid);
1151 mvol_sAttribute* ap;
1152 mvol_sAttribute attribute;
1156 *tid = arp->
Body & ~7;
1157 return GDH__SUCCESS;
1165 memset(&attribute, 0,
sizeof(attribute));
1167 ap = vol_ArefToAttribute(
1168 &sts, &attribute, arp, gdb_mLo_global, vol_mTrans_all);
1170 touchObject(ap->op);
1174 if (ap != 0 && ap->adef != 0) {
1175 if (ap->adef->Info.Flags & PWR_MASK_CASTATTR) {
1180 if (
ODD(sts) && castid != pwr_cNCastId) {
1183 *tid = ap->adef->TypeRef;
1186 *tid = ap->adef->TypeRef;
1189 if (
cdh_tidIsCid(*tid) && !(ap->op->l.flags.m & gdb_mLo_native)) {
1192 cp = hash_Search(&sts, gdbroot->cid_ht, tid);
1194 cmvolc_GetNonExistingClass(&sts, ap->op, *tid);
1195 cp = hash_Search(&sts, gdbroot->cid_ht, tid);
1197 sts = GDH__NOSUCHCLASS;
1203 }
else if (ap != 0 && ap->adef == 0 &&
ODD(sts)) {
1228 if (location == NULL)
1233 op = vol_OidToObject(
1234 &sts, oid, gdb_mLo_global, vol_mTrans_all, cvol_eHint_none);
1237 *location = (op->l.flags.m & gdb_mLo_native) != 0;
1264 op = vol_OidToObject(
1265 &sts, oid, gdb_mLo_native, vol_mTrans_all, cvol_eHint_none);
1267 *count = op->u.n.dlcount;
1288 if (new_oid == NULL)
1293 op = vol_OidToObject(
1294 &sts, oid, gdb_mLo_global, vol_mTrans_all, cvol_eHint_none);
1297 if (op->g.f.poid.oix == pwr_cNObjectIx) {
1298 *new_oid = pwr_cNObjid;
1299 sts = GDH__NO_PARENT;
1301 *new_oid = op->g.f.poid;
1328 if (new_oid == NULL)
1333 op = vol_OidToObject(
1334 &sts, oid, gdb_mLo_global, vol_mTrans_none, cvol_eHint_none);
1337 if (op->g.f.poid.oix == pwr_cNObjectIx) {
1338 *new_oid = pwr_cNObjid;
1339 sts = GDH__NO_PARENT;
1341 *new_oid = op->g.f.poid;
1362 pwr_tTime* lastupdate,
1377 p = hash_Search(&sts, gdbroot->subc_ht, &sid);
1381 if (rid.
r.vid_3 == cdh_eVid3_subid) {
1382 cp = (sub_sClient*)p;
1386 if (lastupdate != NULL)
1387 memcpy(lastupdate, &cp->lastupdate,
sizeof(cp->lastupdate));
1390 }
else if (rid.
r.vid_3 == cdh_eVid3_dlid) {
1393 if (lastupdate != NULL)
1396 *status = GDH__SUCCESS;
1437 if (new_oid == NULL)
1442 op = vol_OidToObject(
1443 &sts, oid, gdb_mLo_global, vol_mTrans_all, cvol_eHint_child);
1446 if (op->g.flags.b.isParent) {
1447 *new_oid = op->g.soid;
1449 sts = GDH__NO_CHILD;
1471 gdb_sObject* pop = NULL;
1474 if (new_oid == NULL)
1479 op = vol_OidToObject(
1480 &sts, oid, gdb_mLo_global, vol_mTrans_none, cvol_eHint_next);
1483 noid.vid = op->g.oid.vid;
1484 noid.oix = op->g.sib.flink;
1485 pop = pool_Address(NULL, gdbroot->pool, op->l.por);
1493 if (pop == NULL || noid.oix == pop->g.soid.oix) {
1494 sts = GDH__NO_SIBLING;
1516 gdb_sObject* pop = NULL;
1519 if (new_oid == NULL)
1524 op = vol_OidToObject(
1525 &sts, oid, gdb_mLo_global, vol_mTrans_none, cvol_eHint_prev);
1528 noid.vid = op->g.oid.vid;
1529 noid.oix = op->g.sib.blink;
1530 pop = pool_Address(NULL, gdbroot->pool, op->l.por);
1538 if (pop == NULL || oid.oix == pop->g.soid.oix) {
1539 sts = GDH__NO_SIBLING;
1586 op = hash_Search(&sts, gdbroot->oid_ht, &gdbroot->my_volume->g.oid);
1588 if (op->g.flags.b.isParent) {
1591 sts = GDH__NOSUCHOBJ;
1632 gdb_sObject* op = NULL;
1636 op = mvol_ClassList(&sts, cid, pwr_cNObjid, mvol_eList_first);
1667 if (new_oid == NULL)
1672 op = mvol_ClassList(&sts, pwr_cNClassId, oid, mvol_eList_next);
1674 *new_oid = op->g.oid;
1721 mvol_ClassListAttrRef(&sts, cid, NULL, arp, mvol_eList_first);
1750 if (new_arp == NULL)
1755 mvol_ClassListAttrRef(&sts, cid, arp, new_arp, mvol_eList_next);
1779 mvol_ClassListAttrRef(&sts, cid, &ar, arp, mvol_eList_objectfirst);
1801 if (new_arp == NULL)
1806 mvol_ClassListAttrRef(&sts, cid, arp, new_arp, mvol_eList_objectnext);
1834 if (nid == pwr_cNNodeId) {
1835 *oid = gdbroot->db->nod_oid;
1837 np = hash_Search(&sts, gdbroot->nid_ht, &nid);
1866 np = hash_Search(&sts, gdbroot->nid_ht, &nid);
1869 ip->
nix = np->vol_oid.vid;
1871 ip->
objid = np->nod_oid;
1873 ip->
upcnt = np->upcnt;
1909 mvol_sAttribute attribute;
1910 mvol_sAttribute* ap;
1912 pn = cdh_ParseName(&sts, &parseName, pwr_cNObjid, name, 0);
1916 memset(&attribute, 0,
sizeof(attribute));
1920 ap = vol_NameToAttribute(
1921 &sts, &attribute, pn, gdb_mLo_global, vol_mTrans_all);
1923 touchObject(ap->op);
1960 mvol_sAttribute attribute;
1961 mvol_sAttribute* ap;
1963 memset(&attribute, 0,
sizeof(attribute));
1967 ap = vol_ArefToAttribute(
1968 &sts, &attribute, arp, gdb_mLo_global, vol_mTrans_all);
1970 touchObject(ap->op);
2000 mvol_sAttribute attribute;
2001 mvol_sAttribute* ap;
2003 memset(&attribute, 0,
sizeof(attribute));
2007 ap = vol_ArefToAttribute(
2008 &sts, &attribute, arp, gdb_mLo_global, vol_mTrans_all);
2010 touchObject(ap->op);
2015 *flags = ap->adef->Info.Flags;
2038 if (new_oid == NULL)
2043 op = mvol_ClassList(&sts, pwr_cNClassId, oid, mvol_eList_prev);
2045 *new_oid = op->g.oid;
2072 gdbroot = gdb_MapDb(&sts, NULL, name);
2111 mvol_sAttribute attribute;
2112 mvol_sAttribute* ap = NULL;
2115 pn = cdh_ParseName(&sts, &parseName, pwr_cNObjid, aname, 0);
2120 memset(&attribute, 0,
sizeof(attribute));
2125 ap = vol_ArefToAttribute(
2126 &sts, &attribute, arp, gdb_mLo_global, vol_mTrans_all);
2127 }
else if (cid != pwr_cNClassId) {
2128 ap = mvol_AnameToAttribute(&sts, ap, cid, pn, NULL);
2130 ap = vol_NameToAttribute(&sts, ap, pn, gdb_mLo_global, vol_mTrans_all);
2134 touchObject(ap->op);
2170 return GDH__NOSUCHOBJ;
2171 if (oid.oix == pwr_cNObjectIx)
2172 return GDH__NOTMOVABLE;
2173 if (poid.vid == pwr_cNVolumeId)
2175 if (oid.vid != poid.vid)
2176 return GDH__SAMEVOLUME;
2177 if (oid.oix == poid.oix)
2178 return GDH__CHILDSELF;
2182 dvol_MoveObject(&sts, oid, poid);
2209 gdb_sObject* op = NULL;
2216 pn = cdh_ParseName(&sts, &parseName, pwr_cNObjid, name, 0);
2222 op = vol_NameToObject(&sts, pn, gdb_mLo_global, vol_mTrans_all);
2247 gdb_sObject* op = NULL;
2254 pn = cdh_ParseName(&sts, &parseName, pwr_cNObjid, name, 0);
2260 op = vol_NameToObject(&sts, pn, gdb_mLo_global, vol_mTrans_all);
2262 *p = vol_ObjectToAddress(&sts, op);
2290 if (gdbroot->db->nethandler.qix != 0)
2293 sts = GDH__NONETHANDLER;
2330 mvol_sAttribute attribute;
2331 mvol_sAttribute* ap;
2336 pn = cdh_ParseName(&sts, &parseName, poid, name, 0);
2340 memset(&attribute, 0,
sizeof(attribute));
2344 ap = vol_NameToAttribute(
2345 &sts, &attribute, pn, gdb_mLo_global, vol_mTrans_all);
2349 touchObject(ap->op);
2350 mvol_AttributeToAref(&sts, ap, arp);
2384 if (namebuf == NULL)
2387 if (nametype == cdh_mNName)
2388 lnametype.m = cdh_mName_pathStrict;
2390 lnametype.m = nametype;
2393 return GDH__NOSUCHOBJ;
2397 op = vol_OidToObject(
2398 &sts, oid, gdb_mLo_global, vol_mTrans_none, cvol_eHint_none);
2403 s = vol_ObjectToName(&sts, op, lnametype.m, name);
2407 if (op == NULL && lnametype.
b.fallback != cdh_mName_eFallback_strict) {
2417 strncpy(namebuf, s, len + 1);
2443 op = vol_OidToObject(
2444 &sts, oid, gdb_mLo_native, vol_mTrans_all, cvol_eHint_none);
2448 if (op->u.n.lflags.b.readOnly) {
2449 sts = GDH__READONLY;
2453 *p = vol_ObjectToAddress(&sts, op);
2476 op = vol_OidToObject(
2477 &sts, oid, gdb_mLo_native, vol_mTrans_none, cvol_eHint_none);
2479 *p = vol_ObjectToAddress(&sts, op);
2505 op = vol_OidToObject(
2506 &sts, arp->
Objid, gdb_mLo_native, vol_mTrans_all, cvol_eHint_none);
2510 if (op->u.n.lflags.b.readOnly) {
2511 sts = GDH__READONLY;
2515 *p = vol_ObjectToAddress(&sts, op);
2516 *p = (
char*)*p + arp->
Offset;
2546 pn = cdh_ParseName(&sts, &parseName, pwr_cNObjid, name, 0);
2547 if (pn == NULL || pn->nObject != 1 || pn->flags.
b.idString)
2548 return GDH__BADNAME;
2552 dvol_RenameObject(&sts, oid, pn);
2582 unsigned int bufsize
2588 mvol_sAttribute attribute;
2589 mvol_sAttribute* ap;
2591 gdb_sNode* np = NULL;
2597 gdb_sCclass* ccp = NULL;
2598 gdb_sCclass* ccpLocked = NULL;
2608 pn = cdh_ParseName(&sts, &parseName, pwr_cNObjid, name, 0);
2612 memset(&attribute, 0,
sizeof(attribute));
2617 ap = vol_NameToAttribute(
2618 &sts, &attribute, pn, gdb_mLo_global, vol_mTrans_all);
2619 if (ap == NULL || ap->op == NULL)
2622 if (ap->op->u.n.lflags.b.readOnly
2623 || (ap->adef && ap->adef->Info.Flags & PWR_MASK_CONST)) {
2624 sts = GDH__READONLY;
2628 touchObject(ap->op);
2629 p = vol_AttributeToAddress(&sts, ap);
2631 memcpy(p, bufp, MIN(ap->size, bufsize));
2633 }
else if ((ap->op->l.flags.m & gdb_mLo_native) != 0) {
2639 memset(&aref, 0,
sizeof(aref));
2640 arp = mvol_AttributeToAref(&sts, ap, &aref);
2644 vp = pool_Address(NULL, gdbroot->pool, ap->op->l.vr);
2645 np = pool_Address(NULL, gdbroot->pool, vp->l.nr);
2651 if (!ap->op->u.c.flags.b.classChecked || !ap->op->u.c.flags.b.classEqual) {
2652 ccp = cmvolc_GetCachedClass(&sts, np, vp, ap, &equal, &fetched, NULL);
2660 if (ccpLocked == NULL && ccp != NULL && !equal) {
2661 cmvolc_LockClass(NULL, ccp);
2668 memset(&attribute, 0,
sizeof(attribute));
2676 rarp = ndc_NarefToRaref(
2677 &sts, ap, arp, ccp, &ridx, &raref, &equal, pn, ccpLocked, vp, np);
2684 if (np != NULL &&
ODD(sts)) {
2686 cvolc_SetObjectInfo(
2687 &sts, np, arp, NULL, NULL, UINT_MAX, ap, bufp, bufsize);
2689 cvolc_SetObjectInfo(&sts, np, arp, ccp, rarp, ridx, ap, bufp, bufsize);
2692 if (gdh_log_cb &&
ODD(sts))
2693 gdh_log_cb((
char *)name, bufp, bufsize);
2697 cmvolc_UnlockClass(NULL, ccpLocked);
2727 unsigned int bufsize
2731 mvol_sAttribute attribute;
2732 mvol_sAttribute* ap;
2734 gdb_sNode* np = NULL;
2736 gdb_sCclass* ccp = NULL;
2737 gdb_sCclass* ccpLocked = NULL;
2749 memset(&attribute, 0,
sizeof(attribute));
2753 ap = vol_ArefToAttribute(
2754 &sts, &attribute, arp, gdb_mLo_global, vol_mTrans_all);
2755 if (ap == NULL || ap->op == NULL)
2758 if (ap->op->u.n.lflags.b.readOnly
2759 || (ap->adef && ap->adef->Info.Flags & PWR_MASK_CONST)) {
2760 sts = GDH__READONLY;
2764 touchObject(ap->op);
2765 p = vol_AttributeToAddress(&sts, ap);
2767 memcpy(p, bufp, MIN(ap->size, bufsize));
2769 }
else if ((ap->op->l.flags.m & gdb_mLo_native) != 0) {
2776 vp = pool_Address(NULL, gdbroot->pool, ap->op->l.vr);
2777 np = pool_Address(NULL, gdbroot->pool, vp->l.nr);
2784 if (!ap->op->u.c.flags.b.classChecked || !ap->op->u.c.flags.b.classEqual) {
2785 ccp = cmvolc_GetCachedClass(&sts, np, vp, ap, &equal, &fetched, NULL);
2793 if (ccpLocked == NULL && ccp != NULL && !equal) {
2794 cmvolc_LockClass(NULL, ccp);
2800 memset(&attribute, 0,
sizeof(attribute));
2808 rarp = ndc_NarefToRaref(
2809 &sts, ap, arp, ccp, &ridx, &raref, &equal, NULL, ccpLocked, vp, np);
2811 equal = ap->op->u.c.flags.b.classEqual;
2819 if (np != NULL &&
ODD(sts)) {
2821 cvolc_SetObjectInfo(
2822 &sts, np, arp, NULL, NULL, UINT_MAX, ap, bufp, bufsize);
2824 cvolc_SetObjectInfo(&sts, np, arp, ccp, rarp, ridx, ap, bufp, bufsize);
2829 cmvolc_UnlockClass(NULL, ccpLocked);
2845 unsigned int nentries,
2874 lh = pool_Qalloc(NULL, gdbroot->pool);
2876 for (i = 0; i < nentries; i++) {
2887 cp = subc_Create(s, arp, lh);
2895 subc_ActivateList(lh, pwr_cNObjid);
2899 pool_Free(NULL, gdbroot->pool, lh);
2971 unsigned int nentries,
2977 sub_sClient* cp = NULL;
2989 lh = pool_Qalloc(NULL, gdbroot->pool);
2991 for (i = 0; i < nentries; i++) {
2994 if (rid.
r.vid_3 != cdh_eVid3_subid)
2995 sts = GDH__NOSUBCLI;
2997 cp = hash_Search(&sts, gdbroot->subc_ht, &sid[i]);
3000 retsts = (sts & ~STS_M_SEVERITY) |
STS_K_INFO;
3004 pool_Qremove(NULL, gdbroot->pool, &cp->subc_ll);
3005 pool_QinsertPred(NULL, gdbroot->pool, &cp->subc_ll, lh);
3016 subc_CancelList(lh);
3020 pool_Free(NULL, gdbroot->pool, lh);
3041 if (cdh_SubidIsNotNull(sidlst))
3056 subc_CancelUser(gdbroot->my_pid);
3072 const void* p = NULL;
3074 mvol_sAttribute attribute;
3075 mvol_sAttribute* ap;
3079 memset(&attribute, 0,
sizeof(attribute));
3083 cp = hash_Search(&sts, gdbroot->subc_ht, &sid);
3087 if (
EVEN(cp->sts)) {
3092 if ((cp->nid == gdbroot->db->nid) && (cp->userdata == pool_cNRef)) {
3095 ap = vol_ArefToAttribute(
3096 &sts, &attribute, &cp->aref, gdb_mLo_global, vol_mTrans_all);
3100 p = vol_AttributeToAddress(&sts, ap);
3107 dp = pool_Address(NULL, gdbroot->pool, cp->subdata);
3109 errh_Bugcheck(GDH__WEIRD,
"gdh_SubData");
3117 if (cp->cclass != pool_cNRef) {
3119 ndc_sRemoteToNative* tbl;
3123 ccp = pool_Address(NULL, gdbroot->pool, cp->cclass);
3125 errh_Bugcheck(GDH__WEIRD,
"gdh_SubData, get cached class address");
3127 if (!ccp->flags.b.rnConv)
3128 errh_Bugcheck(GDH__WEIRD,
"gdh_SubData, no conversion table");
3130 tbl = pool_Address(NULL, gdbroot->pool, ccp->rnConv);
3132 errh_Bugcheck(GDH__WEIRD,
"gdh_SubData, get cached class address");
3134 size = MIN(bsize, cp->aref.Size);
3135 ndc_ConvertRemoteToNativeTable(&sts, ccp, tbl, &cp->raref, &cp->aref,
3136 bp, p, &size, cp->aref.Offset, 0, 0, &first, cp->nid);
3139 memcpy(bp, p, MIN(bsize, cp->aref.Size));
3162 cp = hash_Search(&sts, gdbroot->subc_ht, &sid);
3166 if (
EVEN(cp->sts)) {
3169 *size = cp->aref.Size;
3190 unsigned int buffersize
3201 cp = hash_Search(&sts, gdbroot->subc_ht, &sid);
3205 if (cp->userdata == pool_cNRef) {
3206 cp->userdata = pool_RefAlloc(NULL, gdbroot->rtdb, buffersize);
3207 cp->usersize = buffersize;
3208 *buffer = pool_Address(NULL, gdbroot->rtdb, cp->userdata);
3210 if (cp->usersize >= buffersize) {
3215 *buffer = pool_Address(NULL, gdbroot->rtdb, cp->userdata);
3217 sts = GDH__SUBALRBUF;
3241 subc_SetDefaults(dt, tmo);
3242 return GDH__SUCCESS;
3292 object = calloc(n,
sizeof(*
object));
3303 objrefp = &objref[0];
3305 for (i = 0; i < n; i++, objrefp++) {
3313 if ( sts == GDH__NODYNLOCOBJ) {
3322 if ((s = strchr(an,
'.'))) {
3341 objrefp->
adrs = NULL;
3347 isattrref[nsub] = FALSE;
3348 xrefarr[nsub++] = i;
3360 for (i = 0; i < nsub; i++) {
3361 objrefp = &objref[xrefarr[i]];
3371 sid[xrefarr[i]] = subidarr[i];
3440 if (strlen(name) >=
sizeof(objref.
fullname))
3441 return GDH__NAMELEN;
3448 if (
ODD(sts) && objref.
adrs == NULL)
3449 return GDH__RTDBNULL;
3451 *infop = objref.
adrs;
3479 if (refid.
r.vid_3 == cdh_eVid3_dlid) {
3481 }
else if (refid.
r.vid_3 == cdh_eVid3_subid) {
3484 sts = GDH__NOSUBCLI;
3503 return GDH__SUCCESS;
3524 op = vol_OidToObject(
3525 &sts, oid, gdb_mLo_owned, vol_mTrans_none, cvol_eHint_none);
3531 vol_SetAlarmLevel(&sts, op, alarmlevel);
3555 op = vol_OidToObject(
3556 &sts, oid, gdb_mLo_owned, vol_mTrans_none, cvol_eHint_none);
3562 vol_SetBlockLevel(&sts, op, blocklevel);
3582 r = pool_Reference(NULL, gdbroot->rtdb, p);
3583 if (r == pool_cNRef)
3584 errh_Bugcheck(GDH__RTDBNULL,
"gdh_StoreRtdbPointer");
3595 return pool_Address(NULL, gdbroot->rtdb, r);
3603 if (is_alias == NULL)
3608 op = vol_OidToObject(
3609 &sts, oid, gdb_mLo_global, vol_mTrans_none, cvol_eHint_none);
3625 if (is_mount_clean == NULL)
3630 op = vol_OidToObject(
3631 &sts, oid, gdb_mLo_global, vol_mTrans_none, cvol_eHint_none);
3634 if (!op->l.flags.b.isOwned) {
3635 *is_mount_clean = 1;
3639 *is_mount_clean = (
pwr_tBoolean)op->u.n.flags.b.isMountClean;
3652 return GDH__OBSOLETE;
3687 vl = pool_Qsucc(NULL, gdbroot->pool, &gdbroot->db->vol_lh);
3688 if (vl == NULL || vl == &gdbroot->db->vol_lh)
3689 return GDH__NOSUCHVOL;
3691 vp = pool_Qitem(vl, gdb_sVolume, l.vol_ll);
3696 return GDH__SUCCESS;
3715 for (vl = pool_Qsucc(NULL, gdbroot->pool, &gdbroot->db->vol_lh);
3716 vl != &gdbroot->db->vol_lh; vl = pool_Qsucc(&sts, gdbroot->pool, vl)) {
3717 vp = pool_Qitem(vl, gdb_sVolume, l.vol_ll);
3718 if (vp->g.vid == pvid) {
3719 for (vl = pool_Qsucc(&sts, gdbroot->pool, vl);
3720 vl != &gdbroot->db->vol_lh;
3721 vl = pool_Qsucc(&sts, gdbroot->pool, vl)) {
3722 vp = pool_Qitem(vl, gdb_sVolume, l.vol_ll);
3723 if (vp->l.flags.b.isLoaded || vp->l.flags.b.isCached) {
3725 rsts = GDH__SUCCESS;
3729 if (rsts == GDH__SUCCESS || vl == &gdbroot->db->vol_lh)
3755 vp = hash_Search(&sts, gdbroot->vid_ht, &vid);
3757 if (strlen(vp->g.name.orig) >= size)
3758 rsts = GDH__NAMEBUF;
3759 strncpy(name, vp->g.name.orig, size);
3761 rsts = GDH__NOSUCHVOL;
3781 vp = hash_Search(&sts, gdbroot->vid_ht, &vid);
3783 info->
isCached = vp->l.flags.b.isCached ? 1 : 0;
3784 info->
isLoaded = vp->l.flags.b.isLoaded ? 1 : 0;
3785 info->
isMounted = vp->l.flags.b.isMounted ? 1 : 0;
3786 info->
time = net_NetTimeToTime(&vp->g.time);
3787 info->
cid = vp->g.cid;
3788 info->
nid = vp->g.nid;
3789 strcpy(info->
name, vp->g.name.orig);
3791 rsts = GDH__NOSUCHVOL;
3804 *vid = gdbroot->my_volume->g.vid;
3805 return GDH__SUCCESS;
3816 pwr_sObjBodyDef* bdef;
3822 gdb_sObject* a_super[20];
3828 cp = hash_Search(&sts, gdbroot->cid_ht, &cid);
3830 rsts = GDH__NOSUCHCLASS;
3834 bop = pool_Address(&sts, gdbroot->pool, cp->bor);
3836 rsts = GDH__ATTRIBUTE;
3840 bdef = pool_Address(NULL, gdbroot->rtdb, bop->u.n.body);
3841 acnt += bdef->NumOfParams;
3844 a_super[scnt++] = vol_OidToObject(
3845 &sts, bop->g.soid, gdb_mLo_local, vol_mTrans_none, cvol_eHint_none);
3846 while (a_super[scnt - 1]) {
3847 adef = pool_Address(NULL, gdbroot->rtdb, a_super[scnt - 1]->u.n.body);
3849 if (streq(a_super[scnt - 1]->g.f.name.orig,
"Super")
3851 cp = hash_Search(&sts, gdbroot->cid_ht, &adef->TypeRef);
3855 op = vol_OidToObject(
3856 &sts, oid, gdb_mLo_global, vol_mTrans_all, cvol_eHint_none);
3858 if (!(op->l.flags.m & gdb_mLo_native)) {
3859 cmvolc_GetNonExistingClass(&sts, op, adef->TypeRef);
3860 cp = hash_Search(&sts, gdbroot->cid_ht, &adef->TypeRef);
3862 rsts = GDH__NOSUCHCLASS;
3866 rsts = GDH__NOSUCHCLASS;
3870 rsts = GDH__NOSUCHCLASS;
3875 bop = pool_Address(&sts, gdbroot->pool, cp->bor);
3877 rsts = GDH__ATTRIBUTE;
3881 bdef = pool_Address(NULL, gdbroot->rtdb, bop->u.n.body);
3882 acnt += bdef->NumOfParams - 1;
3884 a_super[scnt++] = vol_OidToObject(
3885 &sts, bop->g.soid, gdb_mLo_local, vol_mTrans_none, cvol_eHint_none);
3894 for (i = scnt - 1; i >= 0; i--) {
3897 adef = pool_Address(NULL, gdbroot->rtdb, aop->u.n.body);
3898 if (!(aop == a_super[i] && streq(aop->g.f.name.orig,
"Super"))) {
3899 for (j = 0; j < i; j++)
3900 strcat(bd[acnt].attrName,
"Super.");
3901 strcat(bd[acnt].attrName, aop->g.f.name.orig);
3903 bd[acnt].
attr = (pwr_uParDef*)adef;
3908 noid.vid = aop->g.oid.vid;
3909 noid.oix = aop->g.sib.flink;
3910 aop = vol_OidToObject(
3911 &sts, noid, gdb_mLo_local, vol_mTrans_none, cvol_eHint_next);
3912 if (aop && aop == a_super[i])
3919 for (j = 0; j < acnt - 1; j++) {
3920 char* s1 = strrchr(bd[j].attrName,
'.');
3925 for (i = j + 1; i < acnt; i++) {
3926 char* s2 = strrchr(bd[i].attrName,
'.');
3931 if (str_NoCaseStrcmp(s1, s2) == 0) {
3955 pwr_sObjBodyDef* bdef;
3964 cp = hash_Search(&sts, gdbroot->cid_ht, &cid);
3966 rsts = GDH__NOSUCHCLASS;
3970 bop = pool_Address(&sts, gdbroot->pool, cp->bor);
3972 rsts = GDH__ATTRIBUTE;
3976 bdef = pool_Address(NULL, gdbroot->rtdb, bop->u.n.body);
3977 acnt = bdef->NumOfParams;
3983 aop = vol_OidToObject(
3984 &sts, bop->g.soid, gdb_mLo_local, vol_mTrans_none, cvol_eHint_none);
3986 adef = pool_Address(NULL, gdbroot->rtdb, aop->u.n.body);
3987 strcpy(bd[acnt].attrName, aop->g.f.name.orig);
3989 bd[acnt].
attr = (pwr_uParDef*)adef;
3992 noid.vid = aop->g.oid.vid;
3993 noid.oix = aop->g.sib.flink;
3994 aop = vol_OidToObject(
3995 &sts, noid, gdb_mLo_local, vol_mTrans_none, cvol_eHint_next);
3996 if (aop->g.oid.oix == bop->g.soid.oix)
4012 mvol_sAttribute Attribute;
4013 mvol_sAttribute* ap;
4019 ap = vol_ArefToAttribute(
4020 &sts, &Attribute, arp, gdb_mLo_global, vol_mTrans_all);
4022 rsts = GDH__ATTRIBUTE;
4024 touchObject(ap->op);
4026 adef = pool_Address(NULL, gdbroot->rtdb, ap->aop->u.n.body);
4027 strcpy(attrdef->
attrName, ap->aop->g.f.name.orig);
4029 attrdef->
attr = (pwr_uParDef*)adef;
4066 cp = hash_Search(&sts, gdbroot->cid_ht, &cid);
4068 if (!(cp->attr[0].flags.m & PWR_MASK_SUPERCLASS))
4069 sts = GDH__NOSUCHCLASS;
4071 sid = *supercid = cp->attr[0].tid;
4073 op = vol_OidToObject(
4074 &sts, oid, gdb_mLo_global, vol_mTrans_all, cvol_eHint_none);
4075 if (!(op->l.flags.m & gdb_mLo_native)) {
4076 cp = hash_Search(&sts, gdbroot->cid_ht, &sid);
4078 cmvolc_GetNonExistingClass(&sts, op, sid);
4079 cp = hash_Search(&sts, gdbroot->cid_ht, &sid);
4081 sts = GDH__NOSUCHCLASS;
4088 op = vol_OidToObject(
4089 &sts, oid, gdb_mLo_global, vol_mTrans_all, cvol_eHint_none);
4090 cmvolc_GetNonExistingClass(&sts, op, cid);
4091 cp = hash_Search(&sts, gdbroot->cid_ht, &cid);
4093 if (!(cp->attr[0].flags.m & PWR_MASK_SUPERCLASS))
4094 sts = GDH__NOSUCHCLASS;
4096 *supercid = cp->attr[0].tid;
4098 sts = GDH__NOSUCHCLASS;
4132 vol_mTrans_none, cvol_eHint_none);
4135 if (!top->g.flags.b.isParent) {
4136 sts = GDH__NOSUCHOBJ;
4141 valoid = top->g.soid;
4143 vop = vol_OidToObject(
4144 &sts, valoid, gdb_mLo_local, vol_mTrans_none, cvol_eHint_none);
4148 if (vop->g.cid == pwr_eClass_Value)
4151 valoid.oix = vop->g.sib.flink;
4153 if (valoid.oix == top->g.soid.oix)
4162 valoid = top->g.soid;
4165 vop = vol_OidToObject(
4166 &sts, valoid, gdb_mLo_local, vol_mTrans_none, cvol_eHint_none);
4170 if (vop->g.cid == pwr_eClass_Value) {
4171 valp = (pwr_sValue*)vol_ObjectToAddress(&sts, vop);
4175 strcpy((*vd)[vcnt].Name, vop->g.f.name.orig);
4176 (*vd)[vcnt].Value = valp;
4180 valoid.oix = vop->g.sib.flink;
4182 if (valoid.oix == top->g.soid.oix)
4218 vol_mTrans_none, cvol_eHint_none);
4221 if (!top->g.flags.b.isParent) {
4222 sts = GDH__NOSUCHOBJ;
4230 bop = vol_OidToObject(
4231 &sts, boid, gdb_mLo_local, vol_mTrans_none, cvol_eHint_none);
4235 if (bop->g.cid == pwr_eClass_Bit)
4238 boid.oix = bop->g.sib.flink;
4240 if (boid.oix == top->g.soid.oix)
4251 bop = vol_OidToObject(
4252 &sts, boid, gdb_mLo_local, vol_mTrans_none, cvol_eHint_none);
4256 if (bop->g.cid == pwr_eClass_Bit) {
4257 bp = (pwr_sBit*)vol_ObjectToAddress(&sts, bop);
4261 strcpy((*bd)[bcnt].Name, bop->g.f.name.orig);
4262 (*bd)[bcnt].Bit = bp;
4266 boid.oix = bop->g.sib.flink;
4268 if (boid.oix == top->g.soid.oix)
4289 mvol_sAttribute* ap;
4290 mvol_sAttribute attribute;
4294 memset(&attribute, 0,
sizeof(attribute));
4296 ap = vol_ArefToAttribute(
4297 &sts, &attribute, arp, gdb_mLo_global, vol_mTrans_all);
4299 touchObject(ap->op);
4303 if (ap != 0 && ap->adef != 0 && ap->adef->Info.Flags & PWR_MASK_DISABLEATTR) {
4304 daref = cdh_ArefToDisableAref(arp);
4315 char value_str[512];
4317 int i, j, rows, elements;
4324 sts = gdh_GetObjectBodyDef(cid, &bd, &rows, arp->
Objid);
4328 for (i = 0; i < rows; i++) {
4329 if (bd[i].attr->Param.Info.Flags & PWR_MASK_RTVIRTUAL
4330 || (bd[i].attr->Param.Info.Flags & PWR_MASK_PRIVATE
4331 && bd[i].attr->Param.Info.Flags & PWR_MASK_POINTER))
4334 strcpy(name, aname);
4336 strcat(name, bd[i].attrName);
4337 strcpy(attrName, bd[i].attrName);
4339 if (bd[i].attr->Param.Info.Flags & PWR_MASK_ARRAY)
4340 elements = bd[i].
attr->Param.Info.Elements;
4344 for (j = 0; j < elements; j++) {
4345 if (bd[i].attr->Param.Info.Flags & PWR_MASK_ARRAY) {
4346 sprintf(idx,
"[%d]", j);
4347 strcpy(name, aname);
4349 strcat(name, bd[i].attrName);
4351 strcpy(attrName, bd[i].attrName);
4352 strcat(attrName, idx);
4359 if (bd[i].attr->Param.Info.Flags & PWR_MASK_CLASS) {
4360 sts = gdh_FWriteObjectR(fp, ap + bd[i].attr->Param.Info.Offset
4361 + j * bd[i].attr->Param.Info.Size / elements,
4362 name, &aref, bd[i].attr->Param.Info.Type);
4365 bd[i].attr->Param.TypeRef, ap + bd[i].attr->Param.Info.Offset
4366 + j * bd[i].attr->Param.Info.Size / elements,
4367 value_str,
sizeof(value_str), &len, 0);
4369 switch (bd[i].attr->Param.Info.Type) {
4370 case pwr_eType_String:
4371 case pwr_eType_Text:
4372 case pwr_eType_Objid:
4373 case pwr_eType_AttrRef:
4374 case pwr_eType_ClassId:
4375 case pwr_eType_TypeId:
4376 case pwr_eType_CastId:
4377 case pwr_eType_Time:
4378 fprintf(fp,
"%s \"%s\"\n", &name[1], value_str);
4381 fprintf(fp,
"%s %s\n", &name[1], value_str);
4385 fprintf(fp,
"# %s Value could not be converted\n", &name[1]);
4392 return GDH__SUCCESS;
4419 return GDH__NOOBJECT;
4425 }
else if (arp->
Size == 0)
4428 ap = calloc(1, arp->
Size);
4430 return GDH__INSVIRMEM;
4436 dcli_translate_filename(fname, filename);
4437 fp = fopen(fname,
"w");
4441 sts = gdh_FWriteObjectR(fp, ap,
"", arp, tid);
4469 char line_elem[2][512];
4472 unsigned int a_size;
4473 unsigned int a_offs;
4474 unsigned int a_elem;
4483 return GDH__NOOBJECT;
4489 dcli_translate_filename(fname, filename);
4490 fp = fopen(fname,
"r");
4494 while (dcli_read_line(line,
sizeof(line), fp)) {
4495 str_trim(line, line);
4498 if (streq(line,
""))
4501 nr = dcli_parse(line,
" ",
"", (
char*)line_elem,
4502 sizeof(line_elem) /
sizeof(line_elem[0]),
sizeof(line_elem[0]), 1);
4515 case pwr_eType_String:
4516 case pwr_eType_Text:
4517 case pwr_eType_Objid:
4518 case pwr_eType_AttrRef:
4519 case pwr_eType_ClassId:
4520 case pwr_eType_TypeId:
4521 case pwr_eType_CastId:
4522 case pwr_eType_Time:
4523 if (line_elem[1][0] ==
'"'
4524 && line_elem[1][strlen(line_elem[1]) - 1] ==
'"') {
4525 line_elem[1][strlen(line_elem[1]) - 1] = 0;
4527 a_tid, &line_elem[1][1], buffer,
sizeof(buffer), a_size);
4530 a_tid, line_elem[1], buffer,
sizeof(buffer), a_size);
4534 a_tid, line_elem[1], buffer,
sizeof(buffer), a_size);
4561 case pwr_eType_Boolean: {
4565 *len = sprintf(str, format, *(
pwr_tBoolean*)value_ptr);
4568 case pwr_eType_Float32: {
4569 if ( *(
float *)value_ptr == FLT_MIN) {
4570 strcpy( str,
"FltMin");
4573 else if ( *(
float *)value_ptr == -FLT_MIN) {
4574 strcpy( str,
"FltNMin");
4577 else if ( *(
float *)value_ptr == FLT_MAX) {
4578 strcpy( str,
"FltMax");
4581 else if ( *(
float *)value_ptr == -FLT_MAX) {
4582 strcpy( str,
"FltNMax");
4586 *len = sprintf(str,
"%.7g", *(
float*)value_ptr);
4588 *len = sprintf(str, format, *(
float*)value_ptr);
4592 case pwr_eType_Float64: {
4594 *len = sprintf(str,
"%.17g", *(
double*)value_ptr);
4596 *len = sprintf(str, format, *(
double*)value_ptr);
4599 case pwr_eType_Char: {
4601 *len = sprintf(str,
"%c", *(
char*)value_ptr);
4603 *len = sprintf(str, format, *(
char*)value_ptr);
4606 case pwr_eType_Int8: {
4608 *len = sprintf(str,
"%d", *(
char*)value_ptr);
4610 *len = sprintf(str, format, *(
char*)value_ptr);
4613 case pwr_eType_Int16: {
4615 *len = sprintf(str,
"%hd", *(
short*)value_ptr);
4617 *len = sprintf(str, format, *(
short*)value_ptr);
4620 case pwr_eType_Int32: {
4621 if (*(
int*)value_ptr == INT_MIN) {
4622 strcpy(str,
"IntMin");
4624 }
else if (*(
int*)value_ptr == INT_MAX) {
4625 strcpy(str,
"IntMax");
4629 *len = sprintf(str,
"%d", *(
int*)value_ptr);
4631 *len = sprintf(str, format, *(
int*)value_ptr);
4635 case pwr_eType_Int64: {
4637 *len = sprintf(str, pwr_dFormatInt64, *(pwr_tInt64*)value_ptr);
4639 *len = sprintf(str, format, *(pwr_tInt64*)value_ptr);
4642 case pwr_eType_UInt8: {
4644 *len = sprintf(str,
"%u", *(
unsigned char*)value_ptr);
4646 *len = sprintf(str, format, *(
unsigned char*)value_ptr);
4649 case pwr_eType_UInt16: {
4651 *len = sprintf(str,
"%hu", *(
unsigned short*)value_ptr);
4653 *len = sprintf(str, format, *(
unsigned short*)value_ptr);
4656 case pwr_eType_UInt32:
4657 case pwr_eType_Mask:
4658 case pwr_eType_DisableAttr: {
4660 *len = sprintf(str,
"%u", *(
unsigned int*)value_ptr);
4662 *len = sprintf(str, format, *(
unsigned int*)value_ptr);
4665 case pwr_eType_UInt64: {
4667 *len = sprintf(str, pwr_dFormatUInt64, *(pwr_tUInt64*)value_ptr);
4669 *len = sprintf(str, format, *(pwr_tUInt64*)value_ptr);
4672 case pwr_eType_Enum: {
4674 *len = sprintf(str,
"%u", *(
unsigned int*)value_ptr);
4676 *len = sprintf(str, format, *(
unsigned int*)value_ptr);
4679 case pwr_eType_String: {
4680 strncpy(str, (
char*)value_ptr, size);
4685 case pwr_eType_Text: {
4688 for (s = (
char*)value_ptr, t = str; *s != 10 && *s != 0; s++, t++) {
4689 if (t - str >= size - 1)
4697 case pwr_eType_Objid: {
4704 objid, hiername,
sizeof(hiername), cdh_mName_volumeStrict);
4712 *len = sprintf(str,
"%s", hiername);
4715 case pwr_eType_AttrRef: {
4726 *len = sprintf(str,
"%s", hiername);
4729 case pwr_eType_DataRef: {
4731 pwr_tDataRef* dataref;
4733 dataref = (pwr_tDataRef*)value_ptr;
4735 &dataref->Aref, hiername,
sizeof(hiername), cdh_mNName);
4741 *len = sprintf(str,
"%s", hiername);
4744 case pwr_eType_Time: {
4747 if (memcmp(value_ptr, &pwr_cAtMin,
sizeof(pwr_tTime)) == 0) {
4748 strcpy(timstr,
"AtZero");
4750 }
else if (memcmp(value_ptr, &pwr_cAtMax,
sizeof(pwr_tTime)) == 0) {
4751 strcpy(timstr,
"AtMax");
4753 }
else if (format && format[0] ==
'%' && format[2] ==
't') {
4754 switch (format[1]) {
4775 timstr,
sizeof(timstr));
4787 timstr,
sizeof(timstr));
4792 timstr,
sizeof(timstr));
4796 timstr,
sizeof(timstr));
4798 strcpy(timstr,
"-");
4799 *len = sprintf(str,
"%s", timstr);
4802 case pwr_eType_DeltaTime: {
4806 strcpy(timstr,
"DtMin");
4807 else if (memcmp(value_ptr, &pwr_cDtMax,
sizeof(
pwr_tDeltaTime)) == 0)
4808 strcpy(timstr,
"DtMax");
4813 strcpy(timstr,
"Undefined time");
4815 *len = sprintf(str,
"%s", timstr);
4818 case pwr_eType_ObjectIx: {
4823 case pwr_eType_ClassId: {
4834 *len = sprintf(str,
"%s", hiername);
4837 case pwr_eType_TypeId:
4838 case pwr_eType_CastId: {
4849 *len = sprintf(str,
"%s", hiername);
4852 case pwr_eType_VolumeId: {
4857 case pwr_eType_RefId: {
4862 case pwr_eType_NetStatus:
4863 case pwr_eType_Status: {
4865 *len = sprintf(str,
"%u", *(
unsigned int*)value_ptr);
4867 *len = sprintf(str, format, *(
unsigned int*)value_ptr);
4871 return GDH__CONVERT;
4873 return GDH__SUCCESS;
4889 case pwr_eType_Boolean: {
4890 if (sscanf(value_str,
"%d", (
pwr_tBoolean*)buffer_ptr) != 1)
4891 return GDH__CONVERT;
4893 return GDH__CONVERT;
4896 case pwr_eType_Float32: {
4897 if (streq(value_str,
"FltMin"))
4898 *(
float*)buffer_ptr = FLT_MIN;
4899 else if (streq(value_str,
"FltNMin"))
4900 *(
float*)buffer_ptr = -FLT_MIN;
4901 else if (streq(value_str,
"FltMax"))
4902 *(
float*)buffer_ptr = FLT_MAX;
4903 else if (streq(value_str,
"FltNMax"))
4904 *(
float*)buffer_ptr = -FLT_MAX;
4905 else if (sscanf(value_str,
"%f", (
float*)buffer_ptr) != 1)
4906 return GDH__CONVERT;
4909 case pwr_eType_Float64: {
4911 if (sscanf(value_str,
"%lf", &d) != 1)
4912 return GDH__CONVERT;
4913 memcpy(buffer_ptr, (
char*)&d,
sizeof(d));
4917 case pwr_eType_Char: {
4918 if (sscanf(value_str,
"%c", (
char*)buffer_ptr) != 1)
4919 return GDH__CONVERT;
4922 case pwr_eType_Int8: {
4925 if (sscanf(value_str,
"%hd", &i16) != 1)
4926 return GDH__CONVERT;
4928 memcpy(buffer_ptr, (
char*)&i8,
sizeof(i8));
4931 case pwr_eType_Int16: {
4932 if (sscanf(value_str,
"%hd", (
short*)buffer_ptr) != 1)
4933 return GDH__CONVERT;
4936 case pwr_eType_Int32:
4937 case pwr_eType_Status:
4938 case pwr_eType_NetStatus: {
4939 if (streq(value_str,
"IntMin"))
4940 *(
int*)buffer_ptr = INT_MIN;
4941 else if (streq(value_str,
"IntMax"))
4942 *(
int*)buffer_ptr = INT_MAX;
4943 else if (sscanf(value_str,
"%d", (
int*)buffer_ptr) != 1)
4944 return GDH__CONVERT;
4947 case pwr_eType_Int64: {
4948 if (sscanf(value_str, pwr_dFormatInt64, (pwr_tInt64*)buffer_ptr) != 1)
4949 return GDH__CONVERT;
4952 case pwr_eType_UInt8: {
4955 if (sscanf(value_str,
"%hu", &i16) != 1)
4956 return GDH__CONVERT;
4958 memcpy(buffer_ptr, (
char*)&i8,
sizeof(i8));
4961 case pwr_eType_UInt16: {
4962 if (sscanf(value_str,
"%hu", (
unsigned short*)buffer_ptr) != 1)
4963 return GDH__CONVERT;
4966 case pwr_eType_UInt32:
4967 case pwr_eType_Mask:
4968 case pwr_eType_DisableAttr: {
4969 if (sscanf(value_str,
"%lu", (
unsigned long*)buffer_ptr) != 1)
4970 return GDH__CONVERT;
4973 case pwr_eType_UInt64: {
4974 if (sscanf(value_str, pwr_dFormatUInt64, (pwr_tUInt64*)buffer_ptr) != 1)
4975 return GDH__CONVERT;
4978 case pwr_eType_String:
4979 case pwr_eType_Text: {
4980 if ((
int)strlen(value_str) >= attr_size)
4981 return GDH__CONVERT;
4982 strncpy((
char*)buffer_ptr, value_str,
4983 attr_size < buff_size ? attr_size : buff_size);
4986 case pwr_eType_Objid: {
4989 if (streq(value_str,
"0"))
4990 objid = pwr_cNObjid;
4996 memcpy(buffer_ptr, &objid,
sizeof(objid));
4999 case pwr_eType_ClassId: {
5007 memcpy(buffer_ptr, (
char*)&classid,
sizeof(classid));
5010 case pwr_eType_TypeId:
5011 case pwr_eType_CastId: {
5019 memcpy(buffer_ptr, (
char*)&val_typeid,
sizeof(val_typeid));
5022 case pwr_eType_ObjectIx: {
5028 memcpy(buffer_ptr, (
char*)&objectix,
sizeof(objectix));
5031 case pwr_eType_VolumeId: {
5037 memcpy(buffer_ptr, (
char*)&volumeid,
sizeof(volumeid));
5040 case pwr_eType_RefId: {
5043 sts = cdh_StringToSubid(value_str, &subid);
5046 memcpy(buffer_ptr, (
char*)&subid,
sizeof(subid));
5049 case pwr_eType_AttrRef: {
5052 if (streq(value_str,
"0"))
5053 attrref = pwr_cNAttrRef;
5059 memcpy(buffer_ptr, &attrref,
sizeof(attrref));
5062 case pwr_eType_DataRef: {
5063 pwr_tDataRef dataref;
5069 memcpy(buffer_ptr, &dataref,
sizeof(dataref));
5072 case pwr_eType_Time: {
5075 if (streq(value_str,
"AtZero"))
5076 memcpy(buffer_ptr, &pwr_cAtMin,
sizeof(pwr_tTime));
5077 else if (streq(value_str,
"AtMax"))
5078 memcpy(buffer_ptr, &pwr_cAtMax,
sizeof(pwr_tTime));
5082 return GDH__CONVERT;
5083 memcpy(buffer_ptr, (
char*)&time,
sizeof(time));
5087 case pwr_eType_DeltaTime: {
5090 if (streq(value_str,
"DtMin"))
5092 else if (streq(value_str,
"DtMax"))
5097 return GDH__CONVERT;
5098 memcpy(buffer_ptr, (
char*)&deltatime,
sizeof(deltatime));
5102 case pwr_eType_Enum: {
5103 if (sscanf(value_str,
"%lu", (
unsigned long*)buffer_ptr) != 1)
5104 return GDH__CONVERT;
5108 return GDH__SUCCESS;
5119 sts = dcli_get_files(dir, pattern, filelist, filecnt);
5125 op = vol_OidToObject(
5126 &sts, oid, gdb_mLo_global, vol_mTrans_all, cvol_eHint_none);
5128 if (op->l.flags.b.isCached) {
5130 cvolc_FileList(&sts, op, dir, pattern, filelist, filecnt);
5136 sts = dcli_get_files(dir, pattern, filelist, filecnt);
5147 op = vol_OidToObject(
5148 &sts, oid, gdb_mLo_native, vol_mTrans_all, cvol_eHint_none);
5152 op->u.n.lflags.b.readOnly = 1;
5166 pwr_sSecurity* security
5176 gdbroot->db->nod_oid, name,
sizeof(name), cdh_mName_volumeStrict);
5179 strcat(name,
"-Security");
5189 if (cid != pwr_eClass_Security)
5190 return GDH__NOSUCHOBJ;
5196 void gdh_RegisterLogFunction(
void (*func)(
char*,
void*,
unsigned int))
5203 return gdh_GetNextSubClass(cid, 0, subcid);
5227 if (super_cid == cid) {
5229 return GDH__SUCCESS;
5232 return GDH__NOSUCHCLASS;
5251 for (i = 0; i < cidcnt; i++) {
5254 array_Push(arr, &aref);
5258 for (i = 0; i < cidcnt; i++) {
5262 array_Push(arr, &aref);
5269 if (node.
nid == mynode.
nid)
5272 cvolc_ClassList(&sts, node.
nid, cidcnt, cid, attrobjects, &clist, &ccnt);
5276 array_Concat(arr, clist, ccnt);
5280 *classlist = array_Copy(arr);
5283 sts = GDH__NOSUCHOBJ;
5285 *listcnt = arr->size;
5288 return GDH__SUCCESS;
5303 for (i = 0; i < cidcnt; i++) {
5306 array_Push(arr, &aref);
5310 for (i = 0; i < cidcnt; i++) {
5314 array_Push(arr, &aref);
5320 *classlist = array_Copy(arr);
5323 sts = GDH__NOSUCHOBJ;
5325 *listcnt = arr->size;
5328 return GDH__SUCCESS;
5337 op = vol_OidToObject(&sts, oid, gdb_mLo_local, vol_mTrans_none, cvol_eHint_none);
5342 return GDH__SUCCESS;
5354 op = vol_OidToObject(
5355 &sts, oid, gdb_mLo_native, vol_mTrans_all, cvol_eHint_none);
5357 p = (pwr_eType *)vol_ObjectToAddress(&sts, op);
5379 op = vol_OidToObject(&sts, oid, gdb_mLo_native, vol_mTrans_none,
5382 vol_MountDynObject(&sts, op);
5401 lck_Lock(lck_eLock_Time);
5403 lck_Unlock(lck_eLock_Time);
5418 lck_Lock(lck_eLock_Time);
5420 lck_Unlock(lck_eLock_Time);
5423 lck_Lock(lck_eLock_Time);
5425 lck_Unlock(lck_eLock_Time);
5441 lck_Lock(lck_eLock_Time);
5443 lck_Unlock(lck_eLock_Time);
5458 lck_Lock(lck_eLock_Time);
5460 lck_Unlock(lck_eLock_Time);
5475 lck_Lock(lck_eLock_Str);
5476 strncpy(str, sp, size);
5477 lck_Unlock(lck_eLock_Str);
5492 lck_Lock(lck_eLock_Str);
5493 strncpy(sp, str, size);
5494 lck_Unlock(lck_eLock_Str);
5512 lck_Lock(lck_eLock_Time);
5514 lck_Unlock(lck_eLock_Time);
5533 lck_Lock(lck_eLock_Time);
5535 lck_Unlock(lck_eLock_Time);
5554 lck_Lock(lck_eLock_Time);
5556 lck_Unlock(lck_eLock_Time);
5575 lck_Lock(lck_eLock_Time);
5577 lck_Unlock(lck_eLock_Time);
5597 lck_Lock(lck_eLock_Str);
5599 lck_Unlock(lck_eLock_Str);
5619 lck_Lock(lck_eLock_Str);
5621 lck_Unlock(lck_eLock_Str);
5634 pwr_sClassDef *cdef;
5639 cp = hash_Search(&sts, gdbroot->cid_ht, &cid);
5641 cdef = pool_Address(NULL, gdbroot->rtdb, cp->cbr);
5647 info->Editor = cdef->Editor;
5648 info->
Flags = cdef->Flags;
5649 info->Method = cdef->Method;
5650 info->PopEditor = cdef->PopEditor;
5652 return GDH__SUCCESS;
5663 return gdbroot == 0 ? 0 : 1;
Include file for Time management.
#define cdh_tidIsCid(Tid)
Check if type id is a class id.
char * cdh_VolumeIdToString(char *s, int size, pwr_tVid vid, int prefix, int suffix)
Converts a volume identifier, 'vid' to a string.
int cdh_ObjidIsNull(pwr_tOid Object)
Test if object identity is null.
void cdh_ObjectIxToString(char *s, int size, pwr_tOix oix, int prefix)
Converts a object index, 'oix' to a string.
pwr_tStatus cdh_StringToVolumeId(const char *s, pwr_tVid *tid)
Convert VolumeId string to id.
void cdh_SubidToString(char *s, int size, pwr_tSubid sid, int prefix)
Converts a subscription identifier, 'sid' to a string.
pwr_tStatus cdh_StringToObjectIx(const char *s, pwr_tOix *oix)
Converts ObjectIx string to index.
void cdh_OidToString(char *s, int size, pwr_tOid oid, int prefix)
Converts a object identifier, 'oid' to a string.
pwr_tCid cdh_ClassObjidToId(pwr_tOid Object)
Convert Objid to ClassId.
pwr_tOid cdh_ClassIdToObjid(pwr_tCid Class)
Convert ClassId to Objid.
pwr_tTid cdh_TypeObjidToId(pwr_tOid Object)
Convert Objid to TypeId.
void cdh_ArefToString(char *s, int size, pwr_sAttrRef *aref, int prefix)
Converts an attribute reference , 'aref' to a string.
pwr_sAttrRef cdh_ObjidToAref(pwr_tObjid Objid)
Converts an objid to an attrref.
pwr_tOid cdh_TypeIdToObjid(pwr_tTid Type)
Convert TypeId to Objid.
pwr_tStatus gdh_SubAssociateBuffer(pwr_tSubid sid, void **buffer, unsigned int buffersize)
Associate a buffer with the subscription.
pwr_tStatus gdh_GetNextSibling(pwr_tObjid oid, pwr_tObjid *new_oid)
Get the object identity of the next sibling (i.e. the next object with the same parent).
pwr_tStatus gdh_SubRefObjectInfoList(unsigned int nentries, void *object[], pwr_tBoolean is_aref[], pwr_tSubid subid[])
Sets up a list of subscriptions to an object/attribute.
pwr_tStatus gdh_GetObjectDLCount(pwr_tObjid oid, pwr_tUInt32 *count)
Gets the direct link count of an object.
pwr_tStatus gdh_SetObjectInfoStr(const char *name, const char *str, int size)
Store a string value in an attribute. Sets the string lock to ensure that the string is not modified ...
pwr_tStatus gdh_MountObjidToPointer(pwr_tObjid oid, void **p)
Get a pointer to a mount object.
pwr_tStatus gdh_GetClassList(pwr_tClassId cid, pwr_tObjid *oid)
Get the object identity of the first object in the list of objects of a specified class.
pwr_tBoolean gdh_IsInitialized()
Check if gdh is initialized. Returns TRUE if gdh is initialized, else FALSE.
pwr_tStatus gdh_NameToAttrref(pwr_tObjid poid, const char *name, pwr_sAttrRef *arp)
Converts from name string to attribute reference.
pwr_tStatus gdh_ClassAttrToAttrref(pwr_tClassId cid, const char *name, pwr_sAttrRef *arp)
Converts a class and attribute string to attrref format.
pwr_tStatus gdh_GetEnumValueDef(pwr_tTid tid, gdh_sValueDef **vd, int *rows)
Get definition information for an enumeration type.
pwr_tStatus gdh_ArefANameToAref(pwr_sAttrRef *arp, const char *aname, pwr_sAttrRef *oarp)
Get the attribute reference for an attribute in an object attribute reference, where the attribute is...
pwr_tStatus gdh_GetObjectInfoAttrref(pwr_sAttrRef *arp, void *bufp, unsigned int bufsize)
Fetch the data of an attribute or a whole object body.
pwr_tStatus gdh_GetObjectInfoStr(const char *name, char *str, int size)
Fetch a string value from an attribute. Sets the string lock to ensure that the string is not modifie...
pwr_tStatus gdh_NethandlerRunning(void)
Check if the Nethandler has started.
pwr_tStatus gdh_DeleteObjectTree(pwr_tObjid oid)
Remove a local object tree.
pwr_tStatus gdh_GetMaskBitDef(pwr_tTid tid, gdh_sBitDef **bd, int *rows)
Get definition information for a mask type.
pwr_tStatus gdh_GetParent(pwr_tObjid oid, pwr_tObjid *new_oid)
Get the object identity of the parent of an object.
pwr_tStatus gdh_FReadObject(char *filename, pwr_tAttrRef *arp)
Read a textfile into an object.
pwr_tStatus gdh_GetClassListAttrRef(pwr_tClassId cid, pwr_sAttrRef *arp)
Get the attribute reference of the first object in the list of objects of a specified class....
void gdh_SetDeltaTimeDL(pwr_tDeltaTime *dtp, pwr_tDeltaTime *time)
Thread save function to store a direct linked delta time value. Sets the time lock to ensure that the...
pwr_tStatus gdh_GetNextObject(pwr_tObjid oid, pwr_tObjid *new_oid)
Get the object identity of the next object in the list of objects of a certain class.
pwr_tStatus gdh_ArefDisabled(pwr_sAttrRef *arp, pwr_tDisableAttr *disabled)
Check if an attribute is disabled.
pwr_tStatus gdh_MoveObject(pwr_tObjid oid, pwr_tObjid poid)
Move a local object.
pwr_tStatus gdh_GetClassInfo(pwr_tCid cid, gdh_sClassInfo *info)
Get class info. Returns information from $ClassDef object.
void gdh_DLUnrefObjectInfoAll(void)
Removes all direct links set up by this process.
pwr_tStatus gdh_GetObjectInfo(const char *name, pwr_tAddress bufp, pwr_tUInt32 bufsize)
Fetch data from an object or an attribute.
void gdh_GetTimeDL(pwr_tTime *atp, pwr_tTime *time)
Thread save function to fetch a direct linked absolute time value. Sets the time lock to ensure that ...
pwr_tStatus gdh_SetAlarmLevel(pwr_tObjid oid, pwr_tUInt32 alarmlevel)
This routine sets the alarm level for a certain object.
void gdh_SetTimeDL(pwr_tTime *atp, pwr_tTime *time)
Thread save function to store a direct linked absolute time value. Sets the time lock to ensure that ...
pwr_tStatus gdh_ClassAttrrefToAttr(pwr_tClassId cid, pwr_sAttrRef *arp, char *name, int size)
Get the attribute name from a class and attrref.
pwr_tStatus gdh_SetAlarmBlockLevel(pwr_tObjid oid, pwr_tUInt32 blocklevel)
Sets the alarm block level for a certain object.
pwr_tStatus gdh_GetChild(pwr_tObjid oid, pwr_tObjid *new_oid)
Get the object identity of the first child of an object.
pwr_tStatus gdh_GetObjectClass(pwr_tObjid oid, pwr_tClassId *cid)
Get the class identifier of an object.
pwr_tStatus gdh_SetObjectInfoDeltaTime(const char *name, pwr_tDeltaTime *time)
Store a delta time value in an attribute. Sets the time lock to ensure that the time is not modified ...
pwr_tStatus gdh_ObjidToPointer(pwr_tObjid oid, void **p)
Gets the address of the data of an object, given its object identity.
pwr_tStatus gdh_ObjidToName(pwr_tObjid oid, char *namebuf, pwr_tUInt32 size, pwr_tBitMask nametype)
Get the name of an object identified by its object identity.
pwr_tStatus gdh_SubData(pwr_tSubid sid, void *bp, unsigned int bsize)
Fetch the data associated with a subscription.
void gdh_SetStrDL(char *sp, const char *str, int size)
Thread save function to store a direct linked string value. Sets the string lock to ensure that the s...
pwr_tStatus gdh_ClassNameToId(const char *name, pwr_tClassId *cid)
Get the class identity corresponding to a class specified by name.
pwr_tStatus gdh_GetVolumeInfo(pwr_tVid vid, gdh_sVolumeInfo *info)
Get info for a volume.
pwr_tStatus gdh_GetSecurityInfo(pwr_sSecurity *security)
Get security information.
pwr_tStatus gdh_UnrefObjectInfoAll(void)
Terminates all subscriptions set up by this process.
pwr_tStatus gdh_GetNextObjectAttrRef(pwr_tClassId cid, pwr_sAttrRef *arp, pwr_sAttrRef *new_arp)
Get the attrref of the next attribute object of a specified class in a specified object.
pwr_tStatus gdh_Init(const char *name)
Initialize the process to the Proview runtime environment.
pwr_tStatus gdh_GetNodeObject(pwr_tNodeId nid, pwr_tObjid *oid)
Return the objid of the node object for a node identified by a node identifier (of type pwr_tNodeId).
pwr_tStatus gdh_SubRefObjectInfoAttrref(pwr_sAttrRef *aref, pwr_tSubid *sid)
This routine returns a subid to the information that is denoted by 'aref'. The name can be either an ...
pwr_tStatus gdh_AttrStringToValue(int type_id, char *value_str, void *buffer_ptr, int buff_size, int attr_size)
Convert an attribute string to value.
pwr_tStatus gdh_AttrrefToName(pwr_sAttrRef *arp, char *name, unsigned int size, pwr_tBitMask nametype)
Translate an attribute referece to a name.
pwr_tStatus gdh_GetAlarmInfo(pwr_tObjid oid, pwr_tUInt32 *a, pwr_tUInt32 *maxa, pwr_tUInt32 *b, pwr_tUInt32 *maxb, pwr_tUInt32 *alarmvisibility)
Get the alarm status for a certain object.
pwr_tStatus gdh_GetObjectInfoDeltaTime(const char *name, pwr_tDeltaTime *time)
Fetch an delta time value from an attribute. Sets the time lock to ensure that the time is not modifi...
pwr_tStatus gdh_UnrefObjectInfo(pwr_tSubid sid)
Terminates the subscription defined by the subscription identity.
pwr_tStatus gdh_RefObjectInfo(char *name, void **infop, pwr_tSubid *sid, unsigned int size)
The routine returns an address to the data that is denoted by Name. The name can be either an object ...
pwr_tStatus gdh_SetObjectInfo(const char *name, void *bufp, unsigned int bufsize)
Change the value of an attribute or the whole body of an object.
pwr_tStatus gdh_GetPreviousSibling(pwr_tObjid oid, pwr_tObjid *new_oid)
Get the object identity of the previous sibling (i.e. the previous object with the same parent).
pwr_tStatus gdh_DeleteObject(pwr_tObjid oid)
Remove a local object.
pwr_tStatus gdh_NameToObjid(const char *name, pwr_tObjid *oid)
Get the object identity of an object with name 'name'.
pwr_tStatus gdh_DLUnrefObjectInfo(pwr_tDlid dlid)
Terminate direct linking of an object or an object attribute.
pwr_tStatus gdh_SubSize(pwr_tSubid sid, unsigned int *size)
Fetch the data size associated with a subscription.
pwr_tStatus gdh_GetNodeInfo(pwr_tNodeId nid, gdh_sNodeInfo *ip)
Return info for a node identified by a node identifier (of type pwr_tNodeId).
pwr_tStatus gdh_SubUnrefObjectInfoList(unsigned int nentries, pwr_tSubid *sid)
Terminates a list of subscriptions.
pwr_tStatus gdh_SubUnrefObjectInfo(pwr_tSubid sid)
Terminates subscription of an object or an attribute.
pwr_tStatus gdh_GetObjectSize(pwr_tObjid oid, pwr_tUInt32 *size)
Get the size of the body of an object.
void gdh_StoreRtdbPointer(unsigned long *rp, void *p)
Convert pointer to rtdb relative pointer.
pwr_tStatus gdh_AttrArefToObjectAref(pwr_sAttrRef *arp, pwr_sAttrRef *oarp)
Get the attribute reference to an object or attribute object, from the attribute reference to an attr...
void gdh_SubUnrefObjectInfoAll(void)
Terminates all subscriptions set up by this user (job/process).
pwr_tStatus gdh_SetSubscriptionDefaults(pwr_tInt32 dt, pwr_tInt32 tmo)
Sets default subscription timers for future subscription requests.
pwr_tStatus gdh_GetSubscriptionOldness(pwr_tSubid sid, pwr_tBoolean *old, pwr_tTime *lastupdate, pwr_tStatus *status)
Checks the oldness of a certain subscription.
pwr_tStatus gdh_GetVolumeList(pwr_tVid *vid)
Get the first volume.
pwr_tStatus gdh_SetObjectInfoAttrref(pwr_sAttrRef *arp, void *bufp, unsigned int bufsize)
Change the data of an object or an attribute.
pwr_tStatus gdh_AttrValueToString(pwr_eType type_id, pwr_tTid tid, void *value_ptr, char *str, int size, int *len, char *format)
Convert a string to attribute value.
pwr_tStatus gdh_GetObjectLocation(pwr_tObjid oid, pwr_tBoolean *location)
Return the location of an object.
pwr_tStatus gdh_NameToPointer(const char *name, void **p)
Get the address of the data of an object, given its name.
pwr_tStatus gdh_GetAttributeFlags(pwr_sAttrRef *arp, unsigned int *flags)
Get the flags of an attribute.
pwr_tStatus gdh_GetAttrRefTid(pwr_sAttrRef *arp, pwr_tTid *tid)
Get the type or class identifier of an attribute reference.
pwr_tStatus gdh_GetRootList(pwr_tObjid *oid)
Get the first root object in the object tree.
pwr_tStatus gdh_DLRefObjectInfoAttrref(pwr_sAttrRef *arp, void **infop, pwr_tDlid *dlid)
Request a direct link to the data denoted by an attribute reference.
pwr_tStatus gdh_VolumeIdToName(pwr_tVid vid, char *name, int size)
Get the name for a volume denoted by volume identity.
void * gdh_TranslateRtdbPointer(unsigned long r)
Convert rtdb relative pointer to absolute pointer.
void gdh_GetStrDL(char *sp, char *str, int size)
Thread save function to fetch a direct linked string value. Sets the string lock to ensure that the s...
pwr_tStatus gdh_AttrRefToPointer(pwr_sAttrRef *arp, void **p)
Gets the address of the data of an attribute reference.
pwr_tStatus gdh_GetObjectClassList(pwr_tCid cid, pwr_tOid oid, pwr_sAttrRef *arp)
Get the attribute reference of the first attribute object of a specified class in the specified objec...
pwr_tStatus gdh_GetNextAttrRef(pwr_tClassId cid, pwr_sAttrRef *arp, pwr_sAttrRef *new_arp)
Get the attrref of the next object in the list of objects of a certain class. The object can be a sol...
void gdh_GetDeltaTimeDL(pwr_tDeltaTime *dtp, pwr_tDeltaTime *time)
Thread save function to fetch a direct linked delta time value. Sets the time lock to ensure that the...
pwr_tStatus gdh_GetObjectInfoTime(const char *name, pwr_tTime *time)
Fetch an absolute time value from an attribute. Sets the time lock to ensure that the time is not mod...
pwr_tStatus gdh_GetPreviousObject(pwr_tObjid oid, pwr_tObjid *new_oid)
Get the object identity of the previous object in the list of objects of a certain class.
pwr_tStatus gdh_SubRefObjectInfoName(char *name, pwr_tSubid *sid)
Get the address of the data that is denoted by 'name'.
pwr_tStatus gdh_GetAttributeCharacteristics(char *name, pwr_tTypeId *tid, pwr_tUInt32 *size, pwr_tUInt32 *offs, pwr_tUInt32 *elem)
Get the characteristics of an attribute, given its name and the class it belongs to.
pwr_tStatus gdh_GetNextVolume(pwr_tVid pvid, pwr_tVid *vid)
Get the next volume in the volume list.
pwr_tStatus gdh_RenameObject(pwr_tObjid oid, char *name)
Rename a local object.
pwr_tStatus gdh_GetLocalParent(pwr_tObjid oid, pwr_tObjid *new_oid)
Get the object identity of the local parent of an object.
pwr_tStatus gdh_GetAttributeCharAttrref(pwr_sAttrRef *arp, pwr_tTypeId *tid, unsigned int *size, unsigned int *offs, unsigned int *elem)
Get the characteristics of an attribute.
pwr_tStatus gdh_GetNodeIndex(pwr_tNodeId *nid)
Get the node identity of the local node.
pwr_tStatus gdh_GetRootVolume(pwr_tVid *vid)
Get info for a volume.
pwr_tStatus gdh_CreateObject(char *name, pwr_tClassId cid, unsigned int size, pwr_tObjid *oid, pwr_tObjid req_oid, pwr_tBitMask flags, pwr_tObjid soid)
Create an object in a dynamic volume.
pwr_tStatus gdh_RefObjectInfoList(unsigned int n, gdh_sObjRef *objref, pwr_tSubid *sid)
This routine returns addresses to the information that is denoted by "objref[].fullname".
pwr_tStatus gdh_SetObjectInfoTime(const char *name, pwr_tTime *time)
Store an absolute time value in an attribute. Sets the time lock to ensure that the time is not modif...
pwr_tStatus gdh_GetDynamicAttrSize(pwr_tObjid oid, char *name, pwr_tUInt32 *size)
Get the size of a dynamic attribute.
pwr_tStatus gdh_FWriteObject(char *filename, pwr_tAttrRef *arp)
Write the content of an object to textfile.
pwr_tStatus gdh_GetSuperClass(pwr_tCid cid, pwr_tCid *supercid, pwr_tObjid oid)
Get the superclass for a class.
pwr_tStatus gdh_GetObjectNodeIndex(pwr_tObjid oid, pwr_tNodeId *nid)
Get the node identity of the owner node of an object.
pwr_tBoolean qcom_NextNode(pwr_tStatus *sts, qcom_sNode *node, pwr_tNodeId nid)
Get the next qcom node. If nid is pwr_cNNodeId the first node is returned.
pwr_tBoolean qcom_MyNode(pwr_tStatus *sts, qcom_sNode *node)
Get the local qcom node.
@ time_eFormat_ComprDateAndTime
Date and time compressed format, 70-01-01 00:00:00.
@ time_eFormat_TimeAndDate
Time and date format, 01:00:00 30/01/87.
@ time_eFormat_Time
Display time only 01:00:00.00.
@ time_eFormat_DateAndTime
Display date and time, 01-JAN-1970 01:00:00.00.
pwr_tStatus time_AsciiToA(const char *, pwr_tTime *)
Convert ascii time to timespec.
pwr_tStatus time_AsciiToD(const char *, pwr_tDeltaTime *)
Convert ascii to timespec.
pwr_tStatus time_DtoAscii(pwr_tDeltaTime *, int, char *, int)
Convert a delta time to ascii string.
int time_GetTime(pwr_tTime *ts)
Get current time.
pwr_tStatus time_AtoAscii(pwr_tTime *, time_eFormat, char *, int)
Convert timespec to ascii.
#define EVEN(a)
Check if value is even.
unsigned int pwr_tUInt32
32-bit unsigned integer type.
char pwr_tAName[399+1]
Full Aref Name type.
double pwr_tFloat64
64-bit float.
pwr_tNid pwr_tNodeId
Node identity type.
unsigned int pwr_tVid
Volume identity type.
pwr_tOix pwr_tObjectIx
Object index type.
pwr_tTypeId pwr_tCastId
CastId type.
unsigned int pwr_tBitMask
Bitmask type.
#define pwr_cNDlid
Zero direct link identity constant.
pwr_tTid pwr_tTypeId
Type identity type.
unsigned int pwr_tBoolean
Boolean type.
pwr_tCid pwr_tClassId
Class identity type.
char pwr_tInt8
8-bit integer type.
pwr_tRid pwr_tSubid
Subscription identity type.
char pwr_tFileName[255+1]
FileName type.
unsigned int pwr_tCid
Class identity type.
char pwr_tString40[40]
40 byte string type.
short pwr_tInt16
16-bit integer type.
int pwr_tInt32
32-bit integer type.
#define pwr_cNSubid
Zero subscription identity constant.
unsigned char pwr_tUInt8
8-bit unsigned integer type.
int pwr_tStatus
Status type.
void * pwr_tAddress
Generic pointer type.
pwr_tVid pwr_tVolumeId
Volume identity type.
pwr_tRid pwr_tDlid
Direct link identity type.
char pwr_tOName[199+1]
Full Object Name type.
#define ODD(a)
Check if value is odd.
pwr_tRid pwr_tRefId
Reference identity type.
unsigned int pwr_tTid
Type identity type.
unsigned int pwr_tDisableAttr
DisableAttr type.
pwr_tVolumeId pwr_tNid
Node identity type.
unsigned short pwr_tUInt16
16-bit unsigned integer type.
Include file for Gdh Global Data Handler.
pwr_tUInt32 Size
Attribute size.
pwr_tCid Body
Typeid of attribute, body or class.
pwr_tOid Objid
Object identity.
pwr_mAttrRef Flags
Attribute flags.
pwr_tUInt32 Offset
Offset in body.
pwr_tNodeId nid
node index
Name string format description.
struct cdh_mName::@4 b
Bit mask representation.
Type for representations of reference identity.
cdh_mRid r
Intern representation.
pwr_tRid pwr
Extern representation.
struct pwr_mAttrRef::@1 b
Bitmask representation.