The following code sample shows you how to interface with the KcsProfile class and its derivatives using the KcsGetAttribute() KCMS framework API wrapper function.
KcsStatusId
KcsGetAttribute(KcsProfileId profile, KcsAttributeName name,
KcsAttributeValue *value)
{
VirtualWorld vWorld(true, true);
KcsProfile * *profiles = 0;
if (gProfileArray == NULL)
// no profiles have been loaded or user has not handled a load
// error correctly
return(KCS_BAD_PROFILE_ID);
KcsStatusId stat;
profiles = (KcsProfile * *)KcsLockHandle(gProfileArray);
if (isValid(profile, profiles))
stat = profiles[profile]->getAttribute(name, value);
else
stat = KCS_BAD_PROFILE_ID;
KcsUnlockHandle(gProfileArray);
return(stat);
}
|
The following code sample shows you how to interface with the KcsProfile class and its derivatives using the KcsConnectProfiles() KCMS framework API wrapper function.
KcsStatusId
KcsConnectProfiles(KcsProfileId *resultProfileId,
unsigned long profileCount, KcsProfileId *profileSequence,
KcsOperationType operationLoadSet,
unsigned long *failedProfileIndex)
{
VirtualWorld vWorld(true, true);
KcsProfile * *profiles = 0;
KcsStatus result;
long i;
if (gProfileArray == NULL)
// no profiles have been loaded or user hasn't handled a load
// error correctly
return(KCS_BAD_PROFILE_ID);
result = getNewValidIndex(resultProfileId);
if (result != KCS_SUCCESS)
return(result);
profiles = (KcsProfile * *)KcsLockHandle(gProfileArray);
KcsMemoryBlock * memblk = new KcsMemoryBlock(&result,
sizeof(KcsProfile * ), profileCount);
if (memblk == NULL)
return(KCS_MEM_ALLOC_ERROR);
KcsProfile * *moreProfiles = (KcsProfile * *)memblk->lock();
KcsProfile * madeProfile = NULL;
long failingNum = 0;
for (i = 0; i < profileCount; i++) (
if (!isValid(profileSequence[i], profiles)) {
*failedProfileIndex = i;
*resultProfileId = BAD_PROFILE_ID;
memblk->unlock();
memblk->dettach();
KcsUnlockHandle(gProfileArray);
// also have to do a dettach here !!
return(KCS_BAD_PROFILE_ID);
}
else
moreProfiles[i] =
(KcsProfile *)profiles[profileSequence[i]]->attach();
}
result = profiles[profileSequence[0]]->connect(profileCount,
moreProfiles, operationLoadSet, madeProfile, &failingNum);
*failedProfileIndex = failingNum;
if (result == KCS_SUCCESS)
profiles[*resultProfileId] = madeProfile;
for (i = 0; i < profileCount; i++) {
moreProfiles[i]->dettach();
}
memblk->unlock();
memblk->dettach();
KcsUnlockHandle(gProfileArray);
gNumProfilesAllocated++;
return(result);
}
|