ARSperl
view release on metacpan or search on metacpan
supportrev.c view on Meta::CPAN
if (!d) {
ARError_add(AR_RETURN_ERROR, AP_ERR_GENERAL,
"rev_ARDisplayStruct_helper: DisplayList param is NULL");
return -1;
}
if (SvTYPE((SV *) h) == SVt_PVHV) {
if (hv_exists(h, k, strlen(k) )) {
val = hv_fetch(h, k, strlen(k) , 0);
if (val && *val) {
/* hash value should be an hash reference */
if (SvTYPE(SvRV(*val)) == SVt_PVHV) {
if (rev_ARDisplayStruct(ctrl, (HV *) SvRV(*val), d) != 0)
return -1;
return 0;
} else
ARError_add(AR_RETURN_ERROR, AP_ERR_GENERAL,
"rev_ARDisplayStruct_helper: hash value is not an array reference");
} else {
ARError_add(AR_RETURN_WARNING, AP_ERR_GENERAL,
"rev_ARDisplayStruct_helper: hv_fetch returned null");
return -2;
}
} else {
ARError_add(AR_RETURN_WARNING, AP_ERR_GENERAL,
"rev_ARDisplayStruct_helper: key doesn't exist");
return -2;
}
} else
ARError_add(AR_RETURN_ERROR, AP_ERR_GENERAL,
"rev_ARDisplayStruct_helper: first argument is not a hash");
return -1;
}
/* ROUTINE
* rev_ARDisplayStruct(hv, displayStruct)
*
* DESCRIPTION
* given a hash that contains displaystruct keys
* and an empty (preallocated) displaystruct, fill
* in the display struct.
*/
int
rev_ARDisplayStruct(ARControlStruct * ctrl, HV * h, ARDisplayStruct * d)
{
int rv = 0, rv2 = 0;
char buf[1024];
rv += strcpyHVal(h, "displayTag", d->displayTag, AR_MAX_NAME_SIZE);
rv += strcpyHVal(h, "label", d->label, AR_MAX_NAME_SIZE);
rv += intcpyHVal(h, "x", &(d->x));
rv += intcpyHVal(h, "y", &(d->y));
rv += uintcpyHVal(h, "length", &(d->length));
rv += uintcpyHVal(h, "numRows", &(d->numRows));
/* variables that need some decoding before we store them */
/*
* "option" will be either "VISIBLE" or "HIDDEN" default: Visible
*/
if ((rv2 = strcpyHVal(h, "option", buf, sizeof(buf)-1)) == 0) {
if (strncasecmp(buf, "HIDDEN", sizeof(buf)) == 0)
d->option = AR_DISPLAY_OPT_HIDDEN;
else
d->option = AR_DISPLAY_OPT_VISIBLE;
} else
rv += rv2;
/*
* "labelLocation" will be either "Left" or "Top" default: Left
*/
if ((rv2 = strcpyHVal(h, "labelLocation", buf, sizeof(buf)-1)) == 0) {
if (strncasecmp(buf, "Top", sizeof(buf)) == 0)
d->labelLocation = AR_DISPLAY_LABEL_TOP;
else
d->labelLocation = AR_DISPLAY_LABEL_LEFT;
} else
rv += rv2;
/*
* "type" will be one of: NONE, TEXT, NUMTEXT, CHECKBOX, CHOICE,
* BUTTON default: NONE
*/
if ((rv2 = strcpyHVal(h, "type", buf, sizeof(buf)-1)) == 0) {
if (strncasecmp(buf, "TEXT", sizeof(buf)) == 0)
d->type = AR_DISPLAY_TYPE_TEXT;
else if (strncasecmp(buf, "NUMTEXT", sizeof(buf)) == 0)
d->type = AR_DISPLAY_TYPE_NUMTEXT;
else if (strncasecmp(buf, "CHECKBOX", sizeof(buf)) == 0)
d->type = AR_DISPLAY_TYPE_CHECKBOX;
else if (strncasecmp(buf, "CHOICE", sizeof(buf)) == 0)
d->type = AR_DISPLAY_TYPE_CHOICE;
else if (strncasecmp(buf, "BUTTON", sizeof(buf)) == 0)
d->type = AR_DISPLAY_TYPE_BUTTON;
else
d->type = AR_DISPLAY_TYPE_NONE;
} else
rv += rv2;
return rv;
}
/* ROUTINE
* rev_ARInternalIdList(hv, key, idliststruct)
*
* DESCRIPTION
* given a hash, a key and an empty idliststruct,
* pull out the hash value and populate the structure.
*
* RETURNS
* 0 on success
* -1 on failure
* -2 on warning
*/
int
rev_ARInternalIdList(ARControlStruct * ctrl, HV * h, char *k, ARInternalIdList * il)
{
if (!il || !h || !k) {
ARError_add(AR_RETURN_ERROR, AP_ERR_GENERAL,
"rev_ARInternalIdList: required param is NULL");
return -1;
}
if (SvTYPE((SV *) h) == SVt_PVHV) {
if (hv_exists(h, k, strlen(k) )) {
SV **val = hv_fetch(h, k, strlen(k) , 0);
if (val && *val) {
/* hash value should be an array reference */
if (SvTYPE(SvRV(*val)) == SVt_PVAV) {
AV *ar = (AV *) SvRV((SV *) * val);
int i;
/*
* allocate space for display
* structure list
*/
il->numItems = av_len(ar) + 1;
supportrev.c view on Meta::CPAN
if (rev_ARValueStructDiary(ctrl, h, k, &(m->u.diaryVal)) == -1)
return -1;
break;
case AR_DATA_TYPE_ENUM:
m->u.enumVal = (unsigned long) SvIV(*val);
break;
case AR_DATA_TYPE_TIME:
m->u.timeVal = (ARTimestamp) SvIV(*val);
break;
case AR_DATA_TYPE_BITMASK:
m->u.maskVal = (unsigned long) SvIV(*val);
break;
#if AR_EXPORT_VERSION >= 3
case AR_DATA_TYPE_BYTES:
m->u.byteListVal = (ARByteList *) MALLOCNN(sizeof(ARByteList));
if (rev_ARByteList(ctrl, h, k, m->u.byteListVal) == -1)
return -1;
break;
case AR_DATA_TYPE_JOIN:
return -1; /* FIX: implement */
break;
case AR_DATA_TYPE_TRIM:
return -1; /* FIX: implement */
break;
case AR_DATA_TYPE_CONTROL:
return -1; /* FIX: implement */
break;
case AR_DATA_TYPE_COORDS:
m->u.coordListVal = (ARCoordList *) MALLOCNN(sizeof(ARCoordList));
if (rev_ARCoordList(ctrl, h, k, m->u.coordListVal) == -1)
return -1;
break;
case AR_DATA_TYPE_ULONG:
m->u.ulongVal = (unsigned long) SvIV(*val);
break;
#endif
#if AR_EXPORT_VERSION >= 4
case AR_DATA_TYPE_DECIMAL:
if (strmakHVal(h, k, &(m->u.decimalVal)) == -1)
return -1;
break;
#endif
#if AR_EXPORT_VERSION >= 7
case AR_DATA_TYPE_DATE:
m->u.dateVal = SvIV(*val);
break;
case AR_DATA_TYPE_TIME_OF_DAY:
m->u.timeOfDayVal = (ARTime) SvIV(*val);
break;
case AR_DATA_TYPE_CURRENCY:
m->u.currencyVal = (ARCurrencyStruct*) MALLOCNN(sizeof(ARCurrencyStruct));
if( sv_to_ARCurrencyStruct(ctrl,*val,m->u.currencyVal) == -1 )
return -1;
break;
case AR_DATA_TYPE_VIEW:
case AR_DATA_TYPE_DISPLAY:
if (strmakHVal(h, k, &(m->u.charVal)) == -1)
return -1;
break;
#endif
default:
ARError_add(AR_RETURN_WARNING, AP_ERR_GENERAL,
"rev_ARValueStruct: unknown data type:");
ARError_add(AR_RETURN_WARNING, AP_ERR_CONTINUE,
tp);
return -2;
}
return 0;
}
ARError_add(AR_RETURN_WARNING, AP_ERR_GENERAL,
"rev_ARValueStruct: hash value(s) were invalid for keys:");
ARError_add(AR_RETURN_WARNING, AP_ERR_CONTINUE, k);
ARError_add(AR_RETURN_WARNING, AP_ERR_CONTINUE, t);
return -2;
}
static int
rev_ARValueStructStr2Type(ARControlStruct * ctrl, char *type, unsigned int *n)
{
int i = 0;
if (type && *type) {
for (i = 0; DataTypeMap[i].number != TYPEMAP_LAST; i++)
if (strcasecmp(type, DataTypeMap[i].name) == 0)
break;
if (DataTypeMap[i].number != TYPEMAP_LAST) {
*n = DataTypeMap[i].number;
return 0;
}
ARError_add(AR_RETURN_ERROR, AP_ERR_GENERAL,
"rev_ARValueStructStr2Type: type given is unknown:");
ARError_add(AR_RETURN_ERROR, AP_ERR_CONTINUE,
type);
} else
ARError_add(AR_RETURN_ERROR, AP_ERR_GENERAL,
"rev_ARValueStructStr2Type: type param is NULL");
return -1;
}
static int
rev_ARValueStructKW2KN(ARControlStruct * ctrl, char *keyword, unsigned int *n)
{
int i;
if (keyword && (*keyword == '\0')) {
for (i = 0; KeyWordMap[i].number != TYPEMAP_LAST; i++) {
if (compmem(keyword, KeyWordMap[i].name, KeyWordMap[i].len) == 0)
break;
}
if (KeyWordMap[i].number != TYPEMAP_LAST) {
*n = KeyWordMap[i].number;
return 0;
}
ARError_add(AR_RETURN_ERROR, AP_ERR_GENERAL,
"rev_ARValueStructKW2KN: keyword given is unknown:");
ARError_add(AR_RETURN_ERROR, AP_ERR_CONTINUE,
keyword);
} else
ARError_add(AR_RETURN_ERROR, AP_ERR_GENERAL,
"rev_ARValueStructKW2KN: keyword param is NULL");
supportrev.c view on Meta::CPAN
return -1;
}
}
}else{
ARError_add( AR_RETURN_ERROR, AP_ERR_GENERAL, "rev_ARReferenceStruct: hash value is not a hash reference" );
return -1;
}
}
break;
case ARREF_DATA_EXTREF:
{
if( SvTYPE(SvRV(*val)) == SVt_PVHV ){
int i = 0, num = 0;
HV *h = (HV* ) SvRV((SV*) *val);
char k[256];
k[255] = '\0';
{
SV **val;
strncpy( k, "permittedGroups", 255 );
val = hv_fetch( h, "permittedGroups", 15, 0 );
if( val && *val ){
rev_ARInternalIdList( ctrl, h, k, &(p->reference.u.extRef.permittedGroups) );
}else{
ARError_add( AR_RETURN_ERROR, AP_ERR_GENERAL, "hv_fetch error: key \"permittedGroups\"" );
return -1;
}
}
{
SV **val;
strncpy( k, "value", 255 );
val = hv_fetch( h, "value", 5, 0 );
if( val && *val ){
rev_ARValueStruct( ctrl, h, k, "value_dataType", &(p->reference.u.extRef.value) );
}else{
ARError_add( AR_RETURN_ERROR, AP_ERR_GENERAL, "hv_fetch error: key \"value\"" );
return -1;
}
}
}else{
ARError_add( AR_RETURN_ERROR, AP_ERR_GENERAL, "rev_ARReferenceStruct: hash value is not a hash reference" );
return -1;
}
}
break;
default:
sprintf( errText, "rev_ARReferenceStruct: invalid switch value %d", p->reference.dataType );
ARError_add( AR_RETURN_ERROR, AP_ERR_GENERAL, errText );
}
}
if( SvTYPE(SvRV(*val)) == SVt_PVHV ){
int i = 0, num = 0;
HV *h = (HV* ) SvRV((SV*) *val);
char k[256];
k[255] = '\0';
{
SV **val;
strncpy( k, "type", 255 );
val = hv_fetch( h, "type", 4, 0 );
if( val && *val ){
{
p->type = SvIV(*val);
}
}else{
ARError_add( AR_RETURN_ERROR, AP_ERR_GENERAL, "hv_fetch error: key \"type\"" );
return -1;
}
}
{
SV **val;
strncpy( k, "label", 255 );
val = hv_fetch( h, "label", 5, 0 );
if( val && *val ){
{
p->label = strdup( SvPV_nolen(*val) );
}
}else{
ARError_add( AR_RETURN_ERROR, AP_ERR_GENERAL, "hv_fetch error: key \"label\"" );
return -1;
}
}
{
SV **val;
strncpy( k, "description", 255 );
val = hv_fetch( h, "description", 11, 0 );
if( val && *val ){
{
p->description = strdup( SvPV_nolen(*val) );
}
}else{
ARError_add( AR_RETURN_ERROR, AP_ERR_GENERAL, "hv_fetch error: key \"description\"" );
return -1;
}
}
supportrev.c view on Meta::CPAN
strncpy( k, "menuValue", 255 );
val = hv_fetch( h, "menuValue", 9, 0 );
if( val && *val ){
{
p->u.menuValue = strdup( SvPV_nolen(*val) );
}
}else{
ARError_add( AR_RETURN_ERROR, AP_ERR_GENERAL, "hv_fetch error: key \"menuValue\"" );
return -1;
}
}
}else{
ARError_add( AR_RETURN_ERROR, AP_ERR_GENERAL, "rev_ARCharMenuItemStruct: hash value is not a hash reference" );
return -1;
}
}
break;
case AR_MENU_TYPE_MENU:
{
if( SvTYPE(SvRV(*val)) == SVt_PVHV ){
int i = 0, num = 0;
HV *h = (HV* ) SvRV((SV*) *val);
char k[256];
k[255] = '\0';
{
SV **val;
strncpy( k, "childMenu", 255 );
val = hv_fetch( h, "childMenu", 9, 0 );
if( val && *val ){
{
p->u.childMenu = (ARCharMenuStruct*) MALLOCNN( sizeof(ARCharMenuStruct) );
p->u.childMenu->menuType = AR_CHAR_MENU_LIST;
rev_ARCharMenuList( ctrl, h, k, &(p->u.childMenu->u.menuList) );
}
}else{
ARError_add( AR_RETURN_ERROR, AP_ERR_GENERAL, "hv_fetch error: key \"childMenu\"" );
return -1;
}
}
}else{
ARError_add( AR_RETURN_ERROR, AP_ERR_GENERAL, "rev_ARCharMenuItemStruct: hash value is not a hash reference" );
return -1;
}
}
break;
default:
sprintf( errText, "rev_ARCharMenuItemStruct: invalid switch value %d", p->menuType );
ARError_add( AR_RETURN_ERROR, AP_ERR_GENERAL, errText );
}
}
if( SvTYPE(SvRV(*val)) == SVt_PVHV ){
int i = 0, num = 0;
HV *h = (HV* ) SvRV((SV*) *val);
char k[256];
k[255] = '\0';
{
SV **val;
strncpy( k, "menuLabel", 255 );
val = hv_fetch( h, "menuLabel", 9, 0 );
if( val && *val ){
{
strncpy( p->menuLabel, SvPV_nolen(*val), sizeof(p->menuLabel) );
}
}else{
ARError_add( AR_RETURN_ERROR, AP_ERR_GENERAL, "hv_fetch error: key \"menuLabel\"" );
return -1;
}
}
}else{
ARError_add( AR_RETURN_ERROR, AP_ERR_GENERAL, "rev_ARCharMenuItemStruct: hash value is not a hash reference" );
return -1;
}
}
}else{
ARError_add(AR_RETURN_WARNING, AP_ERR_GENERAL, "rev_ARCharMenuItemStruct: hv_fetch returned null");
return -2;
}
}else{
ARError_add(AR_RETURN_WARNING, AP_ERR_GENERAL, "rev_ARCharMenuItemStruct: key doesn't exist");
ARError_add(AR_RETURN_WARNING, AP_ERR_GENERAL, k );
return -2;
}
}else{
ARError_add(AR_RETURN_ERROR, AP_ERR_GENERAL, "rev_ARCharMenuItemStruct: first argument is not a hash");
return -1;
}
return 0;
}
#if AR_EXPORT_VERSION >= 8L
int
rev_ARArchiveInfoStruct( ARControlStruct *ctrl, HV *h, char *k, ARArchiveInfoStruct *p ){
SV **val;
( run in 0.550 second using v1.01-cache-2.11-cpan-39bf76dae61 )