xref: /openbsd-src/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/fallback/constants.xs (revision b39c515898423c8d899e35282f4b395f7cad3298)
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;	Uncomment this if you need to return PVs */
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);
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 = sv_2mortal(newSVpvf("%s is not a valid Bzip2 macro", s));
26           PUSHs(sv);
27           break;
28         case PERL_constant_NOTDEF:
29           sv = sv_2mortal(newSVpvf(
30 	    "Your vendor has not defined Bzip2 macro %s, used", s));
31           PUSHs(sv);
32           break;
33         case PERL_constant_ISIV:
34           EXTEND(SP, 1);
35           PUSHs(&PL_sv_undef);
36           PUSHi(iv);
37           break;
38 	/* Uncomment this if you need to return NOs
39         case PERL_constant_ISNO:
40           EXTEND(SP, 1);
41           PUSHs(&PL_sv_undef);
42           PUSHs(&PL_sv_no);
43           break; */
44 	/* Uncomment this if you need to return NVs
45         case PERL_constant_ISNV:
46           EXTEND(SP, 1);
47           PUSHs(&PL_sv_undef);
48           PUSHn(nv);
49           break; */
50 	/* Uncomment this if you need to return PVs
51         case PERL_constant_ISPV:
52           EXTEND(SP, 1);
53           PUSHs(&PL_sv_undef);
54           PUSHp(pv, strlen(pv));
55           break; */
56 	/* Uncomment this if you need to return PVNs
57         case PERL_constant_ISPVN:
58           EXTEND(SP, 1);
59           PUSHs(&PL_sv_undef);
60           PUSHp(pv, iv);
61           break; */
62 	/* Uncomment this if you need to return SVs
63         case PERL_constant_ISSV:
64           EXTEND(SP, 1);
65           PUSHs(&PL_sv_undef);
66           PUSHs(sv);
67           break; */
68 	/* Uncomment this if you need to return UNDEFs
69         case PERL_constant_ISUNDEF:
70           break; */
71 	/* Uncomment this if you need to return UVs
72         case PERL_constant_ISUV:
73           EXTEND(SP, 1);
74           PUSHs(&PL_sv_undef);
75           PUSHu((UV)iv);
76           break; */
77 	/* Uncomment this if you need to return YESs
78         case PERL_constant_ISYES:
79           EXTEND(SP, 1);
80           PUSHs(&PL_sv_undef);
81           PUSHs(&PL_sv_yes);
82           break; */
83         default:
84           sv = sv_2mortal(newSVpvf(
85 	    "Unexpected return type %d while processing Bzip2 macro %s, used",
86                type, s));
87           PUSHs(sv);
88         }
89