| void |
| constant(sv) |
| PREINIT: |
| #ifdef dXSTARG |
| dXSTARG; /* Faster if we have it. */ |
| #else |
| dTARGET; |
| #endif |
| STRLEN len; |
| int type; |
| IV iv; |
| /* NV nv; Uncomment this if you need to return NVs */ |
| /* const char *pv; Uncomment this if you need to return PVs */ |
| INPUT: |
| SV * sv; |
| const char * s = SvPV(sv, len); |
| PPCODE: |
| /* Change this to constant(aTHX_ s, len, &iv, &nv); |
| if you need to return both NVs and IVs */ |
| type = constant(aTHX_ s, len, &iv); |
| /* Return 1 or 2 items. First is error message, or undef if no error. |
| Second, if present, is found value */ |
| switch (type) { |
| case PERL_constant_NOTFOUND: |
| sv = sv_2mortal(newSVpvf("%s is not a valid NetSNMP::TrapReceiver macro", s)); |
| PUSHs(sv); |
| break; |
| case PERL_constant_NOTDEF: |
| sv = sv_2mortal(newSVpvf( |
| "Your vendor has not defined NetSNMP::TrapReceiver macro %s, used", s)); |
| PUSHs(sv); |
| break; |
| case PERL_constant_ISIV: |
| EXTEND(SP, 1); |
| PUSHs(&PL_sv_undef); |
| PUSHi(iv); |
| break; |
| /* Uncomment this if you need to return NOs |
| case PERL_constant_ISNO: |
| EXTEND(SP, 1); |
| PUSHs(&PL_sv_undef); |
| PUSHs(&PL_sv_no); |
| break; */ |
| /* Uncomment this if you need to return NVs |
| case PERL_constant_ISNV: |
| EXTEND(SP, 1); |
| PUSHs(&PL_sv_undef); |
| PUSHn(nv); |
| break; */ |
| /* Uncomment this if you need to return PVs |
| case PERL_constant_ISPV: |
| EXTEND(SP, 1); |
| PUSHs(&PL_sv_undef); |
| PUSHp(pv, strlen(pv)); |
| break; */ |
| /* Uncomment this if you need to return PVNs |
| case PERL_constant_ISPVN: |
| EXTEND(SP, 1); |
| PUSHs(&PL_sv_undef); |
| PUSHp(pv, iv); |
| break; */ |
| /* Uncomment this if you need to return SVs |
| case PERL_constant_ISSV: |
| EXTEND(SP, 1); |
| PUSHs(&PL_sv_undef); |
| PUSHs(sv); |
| break; */ |
| /* Uncomment this if you need to return UNDEFs |
| case PERL_constant_ISUNDEF: |
| break; */ |
| /* Uncomment this if you need to return UVs |
| case PERL_constant_ISUV: |
| EXTEND(SP, 1); |
| PUSHs(&PL_sv_undef); |
| PUSHu((UV)iv); |
| break; */ |
| /* Uncomment this if you need to return YESs |
| case PERL_constant_ISYES: |
| EXTEND(SP, 1); |
| PUSHs(&PL_sv_undef); |
| PUSHs(&PL_sv_yes); |
| break; */ |
| default: |
| sv = sv_2mortal(newSVpvf( |
| "Unexpected return type %d while processing NetSNMP::TrapReceiver macro %s, used", |
| type, s)); |
| PUSHs(sv); |
| } |