cleanup file permissions from windows, add use Carp
[perl-ctypes:perl-ctypes.git] / const-xs.inc
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 =
26             sv_2mortal(newSVpvf("%s is not a valid Ctypes macro", s));
27           PUSHs(sv);
28           break;
29         case PERL_constant_NOTDEF:
30           sv = sv_2mortal(newSVpvf(
31             "Your vendor has not defined Ctypes 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         /* Uncomment this if you need to return PVs
53         case PERL_constant_ISPV:
54           EXTEND(SP, 1);
55           PUSHs(&PL_sv_undef);
56           PUSHp(pv, strlen(pv));
57           break; */
58         /* Uncomment this if you need to return PVNs
59         case PERL_constant_ISPVN:
60           EXTEND(SP, 1);
61           PUSHs(&PL_sv_undef);
62           PUSHp(pv, iv);
63           break; */
64         /* Uncomment this if you need to return SVs
65         case PERL_constant_ISSV:
66           EXTEND(SP, 1);
67           PUSHs(&PL_sv_undef);
68           PUSHs(sv);
69           break; */
70         /* Uncomment this if you need to return UNDEFs
71         case PERL_constant_ISUNDEF:
72           break; */
73         /* Uncomment this if you need to return UVs
74         case PERL_constant_ISUV:
75           EXTEND(SP, 1);
76           PUSHs(&PL_sv_undef);
77           PUSHu((UV)iv);
78           break; */
79         /* Uncomment this if you need to return YESs
80         case PERL_constant_ISYES:
81           EXTEND(SP, 1);
82           PUSHs(&PL_sv_undef);
83           PUSHs(&PL_sv_yes);
84           break; */
85         default:
86           sv = sv_2mortal(newSVpvf(
87             "Unexpected return type %d while processing Ctypes macro %s, used",
88                type, s));
89           PUSHs(sv);
90         }