1 void
2 constant(sv)
3     PREINIT:
4 #ifdef dXSTARG
5 	dXSTARG; /* Faster if we have it.  */
6 #else
7 	dTARGET;
8 #endif
9 	STRLEN		len;
10         int		type;
11 	IV		iv;
12 	/* NV		nv;	Uncomment this if you need to return NVs */
13 	const char	*pv;
14     INPUT:
15 	SV *		sv;
16         const char *	s = SvPV(sv, len);
17     PPCODE:
18         /* Change this to constant(aTHX_ s, len, &iv, &nv);
19            if you need to return both NVs and IVs */
20 	type = constant(aTHX_ s, len, &iv, &pv);
21       /* Return 1 or 2 items. First is error message, or undef if no error.
22            Second, if present, is found value */
23         switch (type) {
24         case PERL_constant_NOTFOUND:
25           sv =
26 	    sv_2mortal(newSVpvf("%s is not a valid Zlib macro", s));
27           PUSHs(sv);
28           break;
29         case PERL_constant_NOTDEF:
30           sv = sv_2mortal(newSVpvf(
31 	    "Your vendor has not defined Zlib macro %s, used",
32 				   s));
33           PUSHs(sv);
34           break;
35         case PERL_constant_ISIV:
36           EXTEND(SP, 1);
37           PUSHs(&PL_sv_undef);
38           PUSHi(iv);
39           break;
40 	/* Uncomment this if you need to return NOs
41         case PERL_constant_ISNO:
42           EXTEND(SP, 1);
43           PUSHs(&PL_sv_undef);
44           PUSHs(&PL_sv_no);
45           break; */
46 	/* Uncomment this if you need to return NVs
47         case PERL_constant_ISNV:
48           EXTEND(SP, 1);
49           PUSHs(&PL_sv_undef);
50           PUSHn(nv);
51           break; */
52         case PERL_constant_ISPV:
53           EXTEND(SP, 1);
54           PUSHs(&PL_sv_undef);
55           PUSHp(pv, strlen(pv));
56           break;
57 	/* Uncomment this if you need to return PVNs
58         case PERL_constant_ISPVN:
59           EXTEND(SP, 1);
60           PUSHs(&PL_sv_undef);
61           PUSHp(pv, iv);
62           break; */
63 	/* Uncomment this if you need to return SVs
64         case PERL_constant_ISSV:
65           EXTEND(SP, 1);
66           PUSHs(&PL_sv_undef);
67           PUSHs(sv);
68           break; */
69 	/* Uncomment this if you need to return UNDEFs
70         case PERL_constant_ISUNDEF:
71           break; */
72 	/* Uncomment this if you need to return UVs
73         case PERL_constant_ISUV:
74           EXTEND(SP, 1);
75           PUSHs(&PL_sv_undef);
76           PUSHu((UV)iv);
77           break; */
78 	/* Uncomment this if you need to return YESs
79         case PERL_constant_ISYES:
80           EXTEND(SP, 1);
81           PUSHs(&PL_sv_undef);
82           PUSHs(&PL_sv_yes);
83           break; */
84         default:
85           sv = sv_2mortal(newSVpvf(
86 	    "Unexpected return type %d while processing Zlib macro %s, used",
87                type, s));
88           PUSHs(sv);
89         }
90