1 #ifdef __cplusplus 2 /* Needed on some windows machines---since MS plays funny games with the header files under C++ */ 3 #include <math.h> 4 #include <stdlib.h> 5 extern "C" { 6 #endif 7 #include "EXTERN.h" 8 #include "perl.h" 9 #include "XSUB.h" 10 11 /* Add in functionality missing in older versions of Perl. Much of this is based on Devel-PPPort on cpan. */ 12 13 /* Add PERL_REVISION, PERL_VERSION, PERL_SUBVERSION if missing */ 14 #ifndef PERL_REVISION 15 # if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION)) 16 # define PERL_PATCHLEVEL_H_IMPLICIT 17 # include <patchlevel.h> 18 # endif 19 # if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL))) 20 # include <could_not_find_Perl_patchlevel.h> 21 # endif 22 # ifndef PERL_REVISION 23 # define PERL_REVISION (5) 24 # define PERL_VERSION PATCHLEVEL 25 # define PERL_SUBVERSION SUBVERSION 26 # endif 27 #endif 28 29 #if defined(WIN32) && defined(PERL_OBJECT) && !defined(PerlIO_exportFILE) 30 #define PerlIO_exportFILE(fh,fl) (FILE*)(fh) 31 #endif 32 33 #ifndef SvIOK_UV 34 # define SvIOK_UV(sv) (SvIOK(sv) && (SvUVX(sv) == SvIVX(sv))) 35 #endif 36 37 #ifndef SvUOK 38 # define SvUOK(sv) SvIOK_UV(sv) 39 #endif 40 41 #if ((PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION <= 5))) 42 # define PL_sv_undef sv_undef 43 # define PL_na na 44 # define PL_errgv errgv 45 # define PL_sv_no sv_no 46 # define PL_sv_yes sv_yes 47 # define PL_markstack_ptr markstack_ptr 48 #endif 49 50 #ifndef IVSIZE 51 # ifdef LONGSIZE 52 # define IVSIZE LONGSIZE 53 # else 54 # define IVSIZE 4 /* A bold guess, but the best we can make. */ 55 # endif 56 #endif 57 58 #ifndef INT2PTR 59 # if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE) 60 # define PTRV UV 61 # define INT2PTR(any,d) (any)(d) 62 # else 63 # if PTRSIZE == LONGSIZE 64 # define PTRV unsigned long 65 # else 66 # define PTRV unsigned 67 # endif 68 # define INT2PTR(any,d) (any)(PTRV)(d) 69 # endif 70 71 # define NUM2PTR(any,d) (any)(PTRV)(d) 72 # define PTR2IV(p) INT2PTR(IV,p) 73 # define PTR2UV(p) INT2PTR(UV,p) 74 # define PTR2NV(p) NUM2PTR(NV,p) 75 76 # if PTRSIZE == LONGSIZE 77 # define PTR2ul(p) (unsigned long)(p) 78 # else 79 # define PTR2ul(p) INT2PTR(unsigned long,p) 80 # endif 81 #endif /* !INT2PTR */ 82 83 #ifndef SvPV_nolen 84 # define SvPV_nolen(x) SvPV(x,PL_na) 85 #endif 86 87 #ifndef get_sv 88 # define get_sv perl_get_sv 89 #endif 90 91 #ifndef ERRSV 92 # define ERRSV get_sv("@",FALSE) 93 #endif 94 95 #ifndef pTHX_ 96 #define pTHX_ 97 #endif 98 99 #include <string.h> 100 #ifdef __cplusplus 101 } 102 #endif 103