home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / perl560.zip / perl.h < prev    next >
C/C++ Source or Header  |  2000-03-18  |  89KB  |  3,328 lines

  1. /*    perl.h
  2.  *
  3.  *    Copyright (c) 1987-2000, Larry Wall
  4.  *
  5.  *    You may distribute under the terms of either the GNU General Public
  6.  *    License or the Artistic License, as specified in the README file.
  7.  *
  8.  */
  9. #ifndef H_PERL
  10. #define H_PERL 1
  11.  
  12. #ifdef PERL_FOR_X2P
  13. /*
  14.  * This file is being used for x2p stuff. 
  15.  * Above symbol is defined via -D in 'x2p/Makefile.SH'
  16.  * Decouple x2p stuff from some of perls more extreme eccentricities. 
  17.  */
  18. #undef MULTIPLICITY
  19. #undef USE_STDIO
  20. #define USE_STDIO
  21. #endif /* PERL_FOR_X2P */
  22.  
  23. #define VOIDUSED 1
  24. #include "config.h"
  25.  
  26. #if defined(USE_ITHREADS) && defined(USE_5005THREADS)
  27. #  include "error: USE_ITHREADS and USE_5005THREADS are incompatible"
  28. #endif
  29.  
  30. /* XXX This next guard can disappear if the sources are revised
  31.    to use USE_5005THREADS throughout. -- A.D  1/6/2000
  32. */
  33. #if defined(USE_ITHREADS) && defined(USE_THREADS)
  34. #  include "error: USE_ITHREADS and USE_THREADS are incompatible"
  35. #endif
  36.  
  37. /* See L<perlguts/"The Perl API"> for detailed notes on
  38.  * PERL_IMPLICIT_CONTEXT and PERL_IMPLICIT_SYS */
  39.  
  40. #ifdef USE_ITHREADS
  41. #  if !defined(MULTIPLICITY) && !defined(PERL_OBJECT)
  42. #    define MULTIPLICITY
  43. #  endif
  44. #endif
  45.  
  46. #ifdef USE_THREADS
  47. #  ifndef PERL_IMPLICIT_CONTEXT
  48. #    define PERL_IMPLICIT_CONTEXT
  49. #  endif
  50. #endif
  51.  
  52. #if defined(MULTIPLICITY)
  53. #  ifndef PERL_IMPLICIT_CONTEXT
  54. #    define PERL_IMPLICIT_CONTEXT
  55. #  endif
  56. #endif
  57.  
  58. #ifdef PERL_CAPI
  59. #  undef PERL_OBJECT
  60. #  ifndef MULTIPLICITY
  61. #    define MULTIPLICITY
  62. #  endif
  63. #  ifndef PERL_IMPLICIT_CONTEXT
  64. #    define PERL_IMPLICIT_CONTEXT
  65. #  endif
  66. #  ifndef PERL_IMPLICIT_SYS
  67. #    define PERL_IMPLICIT_SYS
  68. #  endif
  69. #endif
  70.  
  71. #ifdef PERL_OBJECT
  72. #  ifndef PERL_IMPLICIT_CONTEXT
  73. #    define PERL_IMPLICIT_CONTEXT
  74. #  endif
  75. #  ifndef PERL_IMPLICIT_SYS
  76. #    define PERL_IMPLICIT_SYS
  77. #  endif
  78. #endif
  79.  
  80. #ifdef PERL_OBJECT
  81.  
  82. /* PERL_OBJECT explained  - DickH and DougL @ ActiveState.com
  83.  
  84. Defining PERL_OBJECT turns on creation of a C++ object that
  85. contains all writable core perl global variables and functions.
  86. Stated another way, all necessary global variables and functions
  87. are members of a big C++ object. This object's class is CPerlObj.
  88. This allows a Perl Host to have multiple, independent perl
  89. interpreters in the same process space. This is very important on
  90. Win32 systems as the overhead of process creation is quite high --
  91. this could be even higher than the script compile and execute time
  92. for small scripts.
  93.  
  94. The perl executable implementation on Win32 is composed of perl.exe
  95. (the Perl Host) and perlX.dll. (the Perl Core). This allows the
  96. same Perl Core to easily be embedded in other applications that use
  97. the perl interpreter.
  98.  
  99. +-----------+
  100. | Perl Host |
  101. +-----------+
  102.       ^
  103.       |
  104.       v
  105. +-----------+   +-----------+
  106. | Perl Core |<->| Extension |
  107. +-----------+   +-----------+ ...
  108.  
  109. Defining PERL_OBJECT has the following effects:
  110.  
  111. PERL CORE
  112. 1. CPerlObj is defined (this is the PERL_OBJECT)
  113. 2. all static functions that needed to access either global
  114. variables or functions needed are made member functions
  115. 3. all writable static variables are made member variables
  116. 4. all global variables and functions are defined as:
  117.     #define var CPerlObj::PL_var
  118.     #define func CPerlObj::Perl_func
  119.     * these are in embed.h
  120. This necessitated renaming some local variables and functions that
  121. had the same name as a global variable or function. This was
  122. probably a _good_ thing anyway.
  123.  
  124.  
  125. EXTENSIONS
  126. 1. Access to global variables and perl functions is through a
  127. pointer to the PERL_OBJECT. This pointer type is CPerlObj*. This is
  128. made transparent to extension developers by the following macros:
  129.     #define var pPerl->PL_var
  130.     #define func pPerl->Perl_func
  131.     * these are done in objXSUB.h
  132. This requires that the extension be compiled as C++, which means
  133. that the code must be ANSI C and not K&R C. For K&R extensions,
  134. please see the C API notes located in Win32/GenCAPI.pl. This script
  135. creates a perlCAPI.lib that provides a K & R compatible C interface
  136. to the PERL_OBJECT.
  137. 2. Local variables and functions cannot have the same name as perl's
  138. variables or functions since the macros will redefine these. Look for
  139. this if you get some strange error message and it does not look like
  140. the code that you had written. This often happens with variables that
  141. are local to a function.
  142.  
  143. PERL HOST
  144. 1. The perl host is linked with perlX.lib to get perl_alloc. This
  145. function will return a pointer to CPerlObj (the PERL_OBJECT). It
  146. takes pointers to the various PerlXXX_YYY interfaces (see iperlsys.h
  147. for more information on this).
  148. 2. The perl host calls the same functions as normally would be
  149. called in setting up and running a perl script, except that the
  150. functions are now member functions of the PERL_OBJECT.
  151.  
  152. */
  153.  
  154.  
  155. class CPerlObj;
  156.  
  157. #define STATIC
  158. #define CPERLscope(x)        CPerlObj::x
  159. #define CALL_FPTR(fptr)        (aTHXo->*fptr)
  160.  
  161. #define pTHXo            CPerlObj *pPerl
  162. #define pTHXo_            pTHXo,
  163. #define aTHXo            this
  164. #define aTHXo_            this,
  165. #define PERL_OBJECT_THIS    aTHXo
  166. #define PERL_OBJECT_THIS_    aTHXo_
  167. #define dTHXoa(a)        pTHXo = a
  168. #define dTHXo            dTHXoa(PERL_GET_THX)
  169.  
  170. #define pTHXx        void
  171. #define pTHXx_
  172. #define aTHXx
  173. #define aTHXx_
  174.  
  175. #else /* !PERL_OBJECT */
  176.  
  177. #ifdef PERL_IMPLICIT_CONTEXT
  178. #  ifdef USE_THREADS
  179. struct perl_thread;
  180. #    define pTHX    register struct perl_thread *thr
  181. #    define aTHX    thr
  182. #    define dTHR    dNOOP
  183. #  else
  184. #    ifndef MULTIPLICITY
  185. #      define MULTIPLICITY
  186. #    endif
  187. #    define pTHX    register PerlInterpreter *my_perl
  188. #    define aTHX    my_perl
  189. #  endif
  190. #  define dTHXa(a)    pTHX = a
  191. #  define dTHX        dTHXa(PERL_GET_THX)
  192. #  define pTHX_        pTHX,
  193. #  define aTHX_        aTHX,
  194. #  define pTHX_1    2    
  195. #  define pTHX_2    3
  196. #  define pTHX_3    4
  197. #  define pTHX_4    5
  198. #endif
  199.  
  200. #define STATIC static
  201. #define CPERLscope(x) x
  202. #define CPERLarg void
  203. #define CPERLarg_
  204. #define _CPERLarg
  205. #define PERL_OBJECT_THIS
  206. #define _PERL_OBJECT_THIS
  207. #define PERL_OBJECT_THIS_
  208. #define CALL_FPTR(fptr) (*fptr)
  209.  
  210. #endif /* PERL_OBJECT */
  211.  
  212. #define CALLRUNOPS  CALL_FPTR(PL_runops)
  213. #define CALLREGCOMP CALL_FPTR(PL_regcompp)
  214. #define CALLREGEXEC CALL_FPTR(PL_regexecp)
  215. #define CALLREG_INTUIT_START CALL_FPTR(PL_regint_start)
  216. #define CALLREG_INTUIT_STRING CALL_FPTR(PL_regint_string)
  217. #define CALLREGFREE CALL_FPTR(PL_regfree)
  218.  
  219. #ifdef PERL_FLEXIBLE_EXCEPTIONS
  220. #  define CALLPROTECT CALL_FPTR(PL_protect)
  221. #endif
  222.  
  223. #define NOOP (void)0
  224. #define dNOOP extern int Perl___notused
  225.  
  226. #ifndef pTHX
  227. #  define pTHX        void
  228. #  define pTHX_
  229. #  define aTHX
  230. #  define aTHX_
  231. #  define dTHXa(a)    dNOOP
  232. #  define dTHX        dNOOP
  233. #  define pTHX_1    1    
  234. #  define pTHX_2    2
  235. #  define pTHX_3    3
  236. #  define pTHX_4    4
  237. #endif
  238.  
  239. #ifndef pTHXo
  240. #  define pTHXo        pTHX
  241. #  define pTHXo_    pTHX_
  242. #  define aTHXo        aTHX
  243. #  define aTHXo_    aTHX_
  244. #  define dTHXo        dTHX
  245. #endif
  246.  
  247. #ifndef pTHXx
  248. #  define pTHXx        register PerlInterpreter *my_perl
  249. #  define pTHXx_    pTHXx,
  250. #  define aTHXx        my_perl
  251. #  define aTHXx_    aTHXx,
  252. #  define dTHXx        dTHX
  253. #endif
  254.  
  255. #undef START_EXTERN_C
  256. #undef END_EXTERN_C
  257. #undef EXTERN_C
  258. #ifdef __cplusplus
  259. #  define START_EXTERN_C extern "C" {
  260. #  define END_EXTERN_C }
  261. #  define EXTERN_C extern "C"
  262. #else
  263. #  define START_EXTERN_C 
  264. #  define END_EXTERN_C 
  265. #  define EXTERN_C extern
  266. #endif
  267.  
  268. #ifdef OP_IN_REGISTER
  269. #  ifdef __GNUC__
  270. #    define stringify_immed(s) #s
  271. #    define stringify(s) stringify_immed(s)
  272. register struct op *Perl_op asm(stringify(OP_IN_REGISTER));
  273. #  endif
  274. #endif
  275.  
  276. /*
  277.  * STMT_START { statements; } STMT_END;
  278.  * can be used as a single statement, as in
  279.  * if (x) STMT_START { ... } STMT_END; else ...
  280.  *
  281.  * Trying to select a version that gives no warnings...
  282.  */
  283. #if !(defined(STMT_START) && defined(STMT_END))
  284. # if defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(__cplusplus)
  285. #   define STMT_START    (void)(    /* gcc supports ``({ STATEMENTS; })'' */
  286. #   define STMT_END    )
  287. # else
  288.    /* Now which other defined()s do we need here ??? */
  289. #  if (VOIDFLAGS) && (defined(sun) || defined(__sun__))
  290. #   define STMT_START    if (1)
  291. #   define STMT_END    else (void)0
  292. #  else
  293. #   define STMT_START    do
  294. #   define STMT_END    while (0)
  295. #  endif
  296. # endif
  297. #endif
  298.  
  299. #define WITH_THX(s) STMT_START { dTHX; s; } STMT_END
  300. #define WITH_THR(s) STMT_START { dTHR; s; } STMT_END
  301.  
  302. /*
  303.  * SOFT_CAST can be used for args to prototyped functions to retain some
  304.  * type checking; it only casts if the compiler does not know prototypes.
  305.  */
  306. #if defined(CAN_PROTOTYPE) && defined(DEBUGGING_COMPILE)
  307. #define SOFT_CAST(type)    
  308. #else
  309. #define SOFT_CAST(type)    (type)
  310. #endif
  311.  
  312. #ifndef BYTEORDER  /* Should never happen -- byteorder is in config.h */
  313. #   define BYTEORDER 0x1234
  314. #endif
  315.  
  316. /* Overall memory policy? */
  317. #ifndef CONSERVATIVE
  318. #   define LIBERAL 1
  319. #endif
  320.  
  321. #if 'A' == 65 && 'I' == 73 && 'J' == 74 && 'Z' == 90
  322. #define ASCIIish
  323. #else
  324. #undef  ASCIIish
  325. #endif
  326.  
  327. /*
  328.  * The following contortions are brought to you on behalf of all the
  329.  * standards, semi-standards, de facto standards, not-so-de-facto standards
  330.  * of the world, as well as all the other botches anyone ever thought of.
  331.  * The basic theory is that if we work hard enough here, the rest of the
  332.  * code can be a lot prettier.  Well, so much for theory.  Sorry, Henry...
  333.  */
  334.  
  335. /* define this once if either system, instead of cluttering up the src */
  336. #if defined(MSDOS) || defined(atarist) || defined(WIN32)
  337. #define DOSISH 1
  338. #endif
  339.  
  340. #if defined(__STDC__) || defined(vax11c) || defined(_AIX) || defined(__stdc__) || defined(__cplusplus) || defined( EPOC)
  341. # define STANDARD_C 1
  342. #endif
  343.  
  344. #if defined(__cplusplus) || defined(WIN32) || defined(__sgi) || defined(OS2) || defined(__DGUX) || defined( EPOC) || defined(__QNX__)
  345. # define DONT_DECLARE_STD 1
  346. #endif
  347.  
  348. #if defined(HASVOLATILE) || defined(STANDARD_C)
  349. #   ifdef __cplusplus
  350. #    define VOL        // to temporarily suppress warnings
  351. #   else
  352. #    define VOL volatile
  353. #   endif
  354. #else
  355. #   define VOL
  356. #endif
  357.  
  358. #define TAINT        (PL_tainted = TRUE)
  359. #define TAINT_NOT    (PL_tainted = FALSE)
  360. #define TAINT_IF(c)    if (c) { PL_tainted = TRUE; }
  361. #define TAINT_ENV()    if (PL_tainting) { taint_env(); }
  362. #define TAINT_PROPER(s)    if (PL_tainting) { taint_proper(Nullch, s); }
  363.  
  364. /* XXX All process group stuff is handled in pp_sys.c.  Should these 
  365.    defines move there?  If so, I could simplify this a lot. --AD  9/96.
  366. */
  367. /* Process group stuff changed from traditional BSD to POSIX.
  368.    perlfunc.pod documents the traditional BSD-style syntax, so we'll
  369.    try to preserve that, if possible.
  370. */
  371. #ifdef HAS_SETPGID
  372. #  define BSD_SETPGRP(pid, pgrp)    setpgid((pid), (pgrp))
  373. #else
  374. #  if defined(HAS_SETPGRP) && defined(USE_BSD_SETPGRP)
  375. #    define BSD_SETPGRP(pid, pgrp)    setpgrp((pid), (pgrp))
  376. #  else
  377. #    ifdef HAS_SETPGRP2  /* DG/UX */
  378. #      define BSD_SETPGRP(pid, pgrp)    setpgrp2((pid), (pgrp))
  379. #    endif
  380. #  endif
  381. #endif
  382. #if defined(BSD_SETPGRP) && !defined(HAS_SETPGRP)
  383. #  define HAS_SETPGRP  /* Well, effectively it does . . . */
  384. #endif
  385.  
  386. /* getpgid isn't POSIX, but at least Solaris and Linux have it, and it makes
  387.     our life easier :-) so we'll try it.
  388. */
  389. #ifdef HAS_GETPGID
  390. #  define BSD_GETPGRP(pid)        getpgid((pid))
  391. #else
  392. #  if defined(HAS_GETPGRP) && defined(USE_BSD_GETPGRP)
  393. #    define BSD_GETPGRP(pid)        getpgrp((pid))
  394. #  else
  395. #    ifdef HAS_GETPGRP2  /* DG/UX */
  396. #      define BSD_GETPGRP(pid)        getpgrp2((pid))
  397. #    endif
  398. #  endif
  399. #endif
  400. #if defined(BSD_GETPGRP) && !defined(HAS_GETPGRP)
  401. #  define HAS_GETPGRP  /* Well, effectively it does . . . */
  402. #endif
  403.  
  404. /* These are not exact synonyms, since setpgrp() and getpgrp() may 
  405.    have different behaviors, but perl.h used to define USE_BSDPGRP
  406.    (prior to 5.003_05) so some extension might depend on it.
  407. */
  408. #if defined(USE_BSD_SETPGRP) || defined(USE_BSD_GETPGRP)
  409. #  ifndef USE_BSDPGRP
  410. #    define USE_BSDPGRP
  411. #  endif
  412. #endif
  413.  
  414. /* HP-UX 10.X CMA (Common Multithreaded Architecure) insists that
  415.    pthread.h must be included before all other header files.
  416. */
  417. #if (defined(USE_THREADS) || defined(USE_ITHREADS)) \
  418.     && defined(PTHREAD_H_FIRST) && defined(I_PTHREAD)
  419. #  include <pthread.h>
  420. #endif
  421.  
  422. #ifndef _TYPES_        /* If types.h defines this it's easy. */
  423. #   ifndef major        /* Does everyone's types.h define this? */
  424. #    include <sys/types.h>
  425. #   endif
  426. #endif
  427.  
  428. #ifdef __cplusplus
  429. #  ifndef I_STDARG
  430. #    define I_STDARG 1
  431. #  endif
  432. #endif
  433.  
  434. #ifdef I_STDARG
  435. #  include <stdarg.h>
  436. #else
  437. #  ifdef I_VARARGS
  438. #    include <varargs.h>
  439. #  endif
  440. #endif
  441.  
  442. #ifdef USE_NEXT_CTYPE
  443.  
  444. #if NX_CURRENT_COMPILER_RELEASE >= 500
  445. #  include <bsd/ctypes.h>
  446. #else
  447. #  if NX_CURRENT_COMPILER_RELEASE >= 400
  448. #    include <objc/NXCType.h>
  449. #  else /*  NX_CURRENT_COMPILER_RELEASE < 400 */
  450. #    include <appkit/NXCType.h>
  451. #  endif /*  NX_CURRENT_COMPILER_RELEASE >= 400 */
  452. #endif /*  NX_CURRENT_COMPILER_RELEASE >= 500 */
  453.  
  454. #else /* !USE_NEXT_CTYPE */
  455. #include <ctype.h>
  456. #endif /* USE_NEXT_CTYPE */
  457.  
  458. #ifdef METHOD     /* Defined by OSF/1 v3.0 by ctype.h */
  459. #undef METHOD
  460. #endif
  461.  
  462. #ifdef I_LOCALE
  463. #   include <locale.h>
  464. #endif
  465.  
  466. #if !defined(NO_LOCALE) && defined(HAS_SETLOCALE)
  467. #   define USE_LOCALE
  468. #   if !defined(NO_LOCALE_COLLATE) && defined(LC_COLLATE) \
  469.        && defined(HAS_STRXFRM)
  470. #    define USE_LOCALE_COLLATE
  471. #   endif
  472. #   if !defined(NO_LOCALE_CTYPE) && defined(LC_CTYPE)
  473. #    define USE_LOCALE_CTYPE
  474. #   endif
  475. #   if !defined(NO_LOCALE_NUMERIC) && defined(LC_NUMERIC)
  476. #    define USE_LOCALE_NUMERIC
  477. #   endif
  478. #endif /* !NO_LOCALE && HAS_SETLOCALE */
  479.  
  480. #include <setjmp.h>
  481.  
  482. #ifdef I_SYS_PARAM
  483. #   ifdef PARAM_NEEDS_TYPES
  484. #    include <sys/types.h>
  485. #   endif
  486. #   include <sys/param.h>
  487. #endif
  488.  
  489.  
  490. /* Use all the "standard" definitions? */
  491. #if defined(STANDARD_C) && defined(I_STDLIB)
  492. #   include <stdlib.h>
  493. #endif
  494.  
  495. #ifdef PERL_MICRO /* Last chance to export Perl_my_swap */
  496. #  define MYSWAP
  497. #endif
  498.  
  499. #if !defined(PERL_FOR_X2P) && !defined(WIN32)
  500. #  include "embed.h"
  501. #endif
  502.  
  503. #define MEM_SIZE Size_t
  504.  
  505. #if defined(STANDARD_C) && defined(I_STDDEF)
  506. #   include <stddef.h>
  507. #   define STRUCT_OFFSET(s,m)  offsetof(s,m)
  508. #else
  509. #   define STRUCT_OFFSET(s,m)  (Size_t)(&(((s *)0)->m))
  510. #endif
  511.  
  512. #if defined(I_STRING) || defined(__cplusplus)
  513. #   include <string.h>
  514. #else
  515. #   include <strings.h>
  516. #endif
  517.  
  518. /* This comes after <stdlib.h> so we don't try to change the standard
  519.  * library prototypes; we'll use our own in proto.h instead. */
  520.  
  521. #ifdef MYMALLOC
  522. #  ifdef PERL_POLLUTE_MALLOC
  523. #   ifndef PERL_EXTMALLOC_DEF
  524. #    define Perl_malloc        malloc
  525. #    define Perl_calloc        calloc
  526. #    define Perl_realloc    realloc
  527. #    define Perl_mfree        free
  528. #   endif
  529. #  else
  530. #    define EMBEDMYMALLOC    /* for compatibility */
  531. #  endif
  532. Malloc_t Perl_malloc (MEM_SIZE nbytes);
  533. Malloc_t Perl_calloc (MEM_SIZE elements, MEM_SIZE size);
  534. Malloc_t Perl_realloc (Malloc_t where, MEM_SIZE nbytes);
  535. /* 'mfree' rather than 'free', since there is already a 'perl_free'
  536.  * that causes clashes with case-insensitive linkers */
  537. Free_t   Perl_mfree (Malloc_t where);
  538.  
  539. typedef struct perl_mstats perl_mstats_t;
  540.  
  541. struct perl_mstats {
  542.     unsigned long *nfree;
  543.     unsigned long *ntotal;
  544.     long topbucket, topbucket_ev, topbucket_odd, totfree, total, total_chain;
  545.     long total_sbrk, sbrks, sbrk_good, sbrk_slack, start_slack, sbrked_remains;
  546.     long minbucket;
  547.     /* Level 1 info */
  548.     unsigned long *bucket_mem_size;
  549.     unsigned long *bucket_available_size;
  550. };
  551.  
  552. #  define safemalloc  Perl_malloc
  553. #  define safecalloc  Perl_calloc
  554. #  define saferealloc Perl_realloc
  555. #  define safefree    Perl_mfree
  556. #else  /* MYMALLOC */
  557. #  define safemalloc  safesysmalloc
  558. #  define safecalloc  safesyscalloc
  559. #  define saferealloc safesysrealloc
  560. #  define safefree    safesysfree
  561. #endif /* MYMALLOC */
  562.  
  563. #if !defined(HAS_STRCHR) && defined(HAS_INDEX) && !defined(strchr)
  564. #define strchr index
  565. #define strrchr rindex
  566. #endif
  567.  
  568. #ifdef I_MEMORY
  569. #  include <memory.h>
  570. #endif
  571.  
  572. #ifdef HAS_MEMCPY
  573. #  if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
  574. #    ifndef memcpy
  575.         extern char * memcpy (char*, char*, int);
  576. #    endif
  577. #  endif
  578. #else
  579. #   ifndef memcpy
  580. #    ifdef HAS_BCOPY
  581. #        define memcpy(d,s,l) bcopy(s,d,l)
  582. #    else
  583. #        define memcpy(d,s,l) my_bcopy(s,d,l)
  584. #    endif
  585. #   endif
  586. #endif /* HAS_MEMCPY */
  587.  
  588. #ifdef HAS_MEMSET
  589. #  if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
  590. #    ifndef memset
  591.     extern char *memset (char*, int, int);
  592. #    endif
  593. #  endif
  594. #else
  595. #  define memset(d,c,l) my_memset(d,c,l)
  596. #endif /* HAS_MEMSET */
  597.  
  598. #if !defined(HAS_MEMMOVE) && !defined(memmove)
  599. #   if defined(HAS_BCOPY) && defined(HAS_SAFE_BCOPY)
  600. #    define memmove(d,s,l) bcopy(s,d,l)
  601. #   else
  602. #    if defined(HAS_MEMCPY) && defined(HAS_SAFE_MEMCPY)
  603. #        define memmove(d,s,l) memcpy(d,s,l)
  604. #    else
  605. #        define memmove(d,s,l) my_bcopy(s,d,l)
  606. #    endif
  607. #   endif
  608. #endif
  609.  
  610. #if defined(mips) && defined(ultrix) && !defined(__STDC__)
  611. #   undef HAS_MEMCMP
  612. #endif
  613.  
  614. #if defined(HAS_MEMCMP) && defined(HAS_SANE_MEMCMP)
  615. #  if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
  616. #    ifndef memcmp
  617.     extern int memcmp (char*, char*, int);
  618. #    endif
  619. #  endif
  620. #  ifdef BUGGY_MSC
  621.   #  pragma function(memcmp)
  622. #  endif
  623. #else
  624. #   ifndef memcmp
  625. #    define memcmp     my_memcmp
  626. #   endif
  627. #endif /* HAS_MEMCMP && HAS_SANE_MEMCMP */
  628.  
  629. #ifndef memzero
  630. #   ifdef HAS_MEMSET
  631. #    define memzero(d,l) memset(d,0,l)
  632. #   else
  633. #    ifdef HAS_BZERO
  634. #        define memzero(d,l) bzero(d,l)
  635. #    else
  636. #        define memzero(d,l) my_bzero(d,l)
  637. #    endif
  638. #   endif
  639. #endif
  640.  
  641. #ifndef memchr
  642. #   ifndef HAS_MEMCHR
  643. #       define memchr(s,c,n) ninstr((char*)(s), ((char*)(s)) + n, &(c), &(c) + 1)
  644. #   endif
  645. #endif
  646.  
  647. #ifndef HAS_BCMP
  648. #   ifndef bcmp
  649. #    define bcmp(s1,s2,l) memcmp(s1,s2,l)
  650. #   endif
  651. #endif /* !HAS_BCMP */
  652.  
  653. #ifdef I_NETINET_IN
  654. #   include <netinet/in.h>
  655. #endif
  656.  
  657. #ifdef I_ARPA_INET
  658. #   include <arpa/inet.h>
  659. #endif
  660.  
  661. #if defined(SF_APPEND) && defined(USE_SFIO) && defined(I_SFIO)
  662. /* <sfio.h> defines SF_APPEND and <sys/stat.h> might define SF_APPEND
  663.  * (the neo-BSD seem to do this).  */
  664. #   undef SF_APPEND
  665. #endif
  666.  
  667. #ifdef I_SYS_STAT
  668. #   include <sys/stat.h>
  669. #endif
  670.  
  671. /* The stat macros for Amdahl UTS, Unisoft System V/88 (and derivatives
  672.    like UTekV) are broken, sometimes giving false positives.  Undefine
  673.    them here and let the code below set them to proper values.
  674.  
  675.    The ghs macro stands for GreenHills Software C-1.8.5 which
  676.    is the C compiler for sysV88 and the various derivatives.
  677.    This header file bug is corrected in gcc-2.5.8 and later versions.
  678.    --Kaveh Ghazi (ghazi@noc.rutgers.edu) 10/3/94.  */
  679.  
  680. #if defined(uts) || (defined(m88k) && defined(ghs))
  681. #   undef S_ISDIR
  682. #   undef S_ISCHR
  683. #   undef S_ISBLK
  684. #   undef S_ISREG
  685. #   undef S_ISFIFO
  686. #   undef S_ISLNK
  687. #endif
  688.  
  689. #ifdef I_TIME
  690. #   include <time.h>
  691. #endif
  692.  
  693. #ifdef I_SYS_TIME
  694. #   ifdef I_SYS_TIME_KERNEL
  695. #    define KERNEL
  696. #   endif
  697. #   include <sys/time.h>
  698. #   ifdef I_SYS_TIME_KERNEL
  699. #    undef KERNEL
  700. #   endif
  701. #endif
  702.  
  703. #if defined(HAS_TIMES) && defined(I_SYS_TIMES)
  704. #    include <sys/times.h>
  705. #endif
  706.  
  707. #if defined(HAS_STRERROR) && (!defined(HAS_MKDIR) || !defined(HAS_RMDIR))
  708. #   undef HAS_STRERROR
  709. #endif
  710.  
  711. #include <errno.h>
  712. #ifdef HAS_SOCKET
  713. #   ifdef I_NET_ERRNO
  714. #     include <net/errno.h>
  715. #   endif
  716. #endif
  717.  
  718. #ifdef VMS
  719. #   define SETERRNO(errcode,vmserrcode) \
  720.     STMT_START {            \
  721.         set_errno(errcode);        \
  722.         set_vaxc_errno(vmserrcode);    \
  723.     } STMT_END
  724. #else
  725. #   define SETERRNO(errcode,vmserrcode) (errno = (errcode))
  726. #endif
  727.  
  728. #ifdef USE_THREADS
  729. #  define ERRSV (thr->errsv)
  730. #  define DEFSV THREADSV(0)
  731. #  define SAVE_DEFSV save_threadsv(0)
  732. #else
  733. #  define ERRSV GvSV(PL_errgv)
  734. #  define DEFSV GvSV(PL_defgv)
  735. #  define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv))
  736. #endif /* USE_THREADS */
  737.  
  738. #define ERRHV GvHV(PL_errgv)    /* XXX unused, here for compatibility */
  739.  
  740. #ifndef errno
  741.     extern int errno;     /* ANSI allows errno to be an lvalue expr.
  742.                    * For example in multithreaded environments
  743.                    * something like this might happen:
  744.                    * extern int *_errno(void);
  745.                    * #define errno (*_errno()) */
  746. #endif
  747.  
  748. #ifdef HAS_STRERROR
  749. #       ifdef VMS
  750.     char *strerror (int,...);
  751. #       else
  752. #ifndef DONT_DECLARE_STD
  753.     char *strerror (int);
  754. #endif
  755. #       endif
  756. #       ifndef Strerror
  757. #           define Strerror strerror
  758. #       endif
  759. #else
  760. #    ifdef HAS_SYS_ERRLIST
  761.     extern int sys_nerr;
  762.     extern char *sys_errlist[];
  763. #       ifndef Strerror
  764. #           define Strerror(e) \
  765.         ((e) < 0 || (e) >= sys_nerr ? "(unknown)" : sys_errlist[e])
  766. #       endif
  767. #   endif
  768. #endif
  769.  
  770. #ifdef I_SYS_IOCTL
  771. #   ifndef _IOCTL_
  772. #    include <sys/ioctl.h>
  773. #   endif
  774. #endif
  775.  
  776. #if defined(mc300) || defined(mc500) || defined(mc700) || defined(mc6000)
  777. #   ifdef HAS_SOCKETPAIR
  778. #    undef HAS_SOCKETPAIR
  779. #   endif
  780. #   ifdef I_NDBM
  781. #    undef I_NDBM
  782. #   endif
  783. #endif
  784.  
  785. #if INTSIZE == 2
  786. #   define htoni htons
  787. #   define ntohi ntohs
  788. #else
  789. #   define htoni htonl
  790. #   define ntohi ntohl
  791. #endif
  792.  
  793. /* Configure already sets Direntry_t */
  794. #if defined(I_DIRENT)
  795. #   include <dirent.h>
  796.     /* NeXT needs dirent + sys/dir.h */
  797. #   if  defined(I_SYS_DIR) && (defined(NeXT) || defined(__NeXT__))
  798. #    include <sys/dir.h>
  799. #   endif
  800. #else
  801. #   ifdef I_SYS_NDIR
  802. #    include <sys/ndir.h>
  803. #   else
  804. #    ifdef I_SYS_DIR
  805. #        ifdef hp9000s500
  806. #        include <ndir.h>    /* may be wrong in the future */
  807. #        else
  808. #        include <sys/dir.h>
  809. #        endif
  810. #    endif
  811. #   endif
  812. #endif
  813.  
  814. #ifdef FPUTS_BOTCH
  815. /* work around botch in SunOS 4.0.1 and 4.0.2 */
  816. #   ifndef fputs
  817. #    define fputs(sv,fp) fprintf(fp,"%s",sv)
  818. #   endif
  819. #endif
  820.  
  821. /*
  822.  * The following gobbledygook brought to you on behalf of __STDC__.
  823.  * (I could just use #ifndef __STDC__, but this is more bulletproof
  824.  * in the face of half-implementations.)
  825.  */
  826.  
  827. #ifdef I_SYSMODE
  828. #include <sys/mode.h>
  829. #endif
  830.  
  831. #ifndef S_IFMT
  832. #   ifdef _S_IFMT
  833. #    define S_IFMT _S_IFMT
  834. #   else
  835. #    define S_IFMT 0170000
  836. #   endif
  837. #endif
  838.  
  839. #ifndef S_ISDIR
  840. #   define S_ISDIR(m) ((m & S_IFMT) == S_IFDIR)
  841. #endif
  842.  
  843. #ifndef S_ISCHR
  844. #   define S_ISCHR(m) ((m & S_IFMT) == S_IFCHR)
  845. #endif
  846.  
  847. #ifndef S_ISBLK
  848. #   ifdef S_IFBLK
  849. #    define S_ISBLK(m) ((m & S_IFMT) == S_IFBLK)
  850. #   else
  851. #    define S_ISBLK(m) (0)
  852. #   endif
  853. #endif
  854.  
  855. #ifndef S_ISREG
  856. #   define S_ISREG(m) ((m & S_IFMT) == S_IFREG)
  857. #endif
  858.  
  859. #ifndef S_ISFIFO
  860. #   ifdef S_IFIFO
  861. #    define S_ISFIFO(m) ((m & S_IFMT) == S_IFIFO)
  862. #   else
  863. #    define S_ISFIFO(m) (0)
  864. #   endif
  865. #endif
  866.  
  867. #ifndef S_ISLNK
  868. #   ifdef _S_ISLNK
  869. #    define S_ISLNK(m) _S_ISLNK(m)
  870. #   else
  871. #    ifdef _S_IFLNK
  872. #        define S_ISLNK(m) ((m & S_IFMT) == _S_IFLNK)
  873. #    else
  874. #        ifdef S_IFLNK
  875. #        define S_ISLNK(m) ((m & S_IFMT) == S_IFLNK)
  876. #        else
  877. #        define S_ISLNK(m) (0)
  878. #        endif
  879. #    endif
  880. #   endif
  881. #endif
  882.  
  883. #ifndef S_ISSOCK
  884. #   ifdef _S_ISSOCK
  885. #    define S_ISSOCK(m) _S_ISSOCK(m)
  886. #   else
  887. #    ifdef _S_IFSOCK
  888. #        define S_ISSOCK(m) ((m & S_IFMT) == _S_IFSOCK)
  889. #    else
  890. #        ifdef S_IFSOCK
  891. #        define S_ISSOCK(m) ((m & S_IFMT) == S_IFSOCK)
  892. #        else
  893. #        define S_ISSOCK(m) (0)
  894. #        endif
  895. #    endif
  896. #   endif
  897. #endif
  898.  
  899. #ifndef S_IRUSR
  900. #   ifdef S_IREAD
  901. #    define S_IRUSR S_IREAD
  902. #    define S_IWUSR S_IWRITE
  903. #    define S_IXUSR S_IEXEC
  904. #   else
  905. #    define S_IRUSR 0400
  906. #    define S_IWUSR 0200
  907. #    define S_IXUSR 0100
  908. #   endif
  909. #endif
  910.  
  911. #ifndef S_IRGRP
  912. #   ifdef S_IRUSR
  913. #       define S_IRGRP (S_IRUSR>>3)
  914. #       define S_IWGRP (S_IWUSR>>3)
  915. #       define S_IXGRP (S_IXUSR>>3)
  916. #   else
  917. #       define S_IRGRP 0040
  918. #       define S_IWGRP 0020
  919. #       define S_IXGRP 0010
  920. #   endif
  921. #endif
  922.  
  923. #ifndef S_IROTH
  924. #   ifdef S_IRUSR
  925. #       define S_IROTH (S_IRUSR>>6)
  926. #       define S_IWOTH (S_IWUSR>>6)
  927. #       define S_IXOTH (S_IXUSR>>6)
  928. #   else
  929. #       define S_IROTH 0040
  930. #       define S_IWOTH 0020
  931. #       define S_IXOTH 0010
  932. #   endif
  933. #endif
  934.  
  935. #ifndef S_ISUID
  936. #   define S_ISUID 04000
  937. #endif
  938.  
  939. #ifndef S_ISGID
  940. #   define S_ISGID 02000
  941. #endif
  942.  
  943. #ifndef S_IRWXU
  944. #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
  945. #endif 
  946.  
  947. #ifndef S_IRWXG
  948. #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
  949. #endif 
  950.  
  951. #ifndef S_IRWXO
  952. #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
  953. #endif 
  954.  
  955. #ifndef S_IREAD
  956. #   define S_IREAD S_IRUSR
  957. #endif
  958.  
  959. #ifndef S_IWRITE
  960. #   define S_IWRITE S_IWUSR
  961. #endif
  962.  
  963. #ifndef S_IEXEC
  964. #   define S_IEXEC S_IXUSR
  965. #endif
  966.  
  967. #ifdef ff_next
  968. #   undef ff_next
  969. #endif
  970.  
  971. #if defined(cray) || defined(gould) || defined(i860) || defined(pyr)
  972. #   define SLOPPYDIVIDE
  973. #endif
  974.  
  975. #ifdef UV
  976. #undef UV
  977. #endif
  978.  
  979. /*
  980.     The IV type is supposed to be long enough to hold any integral
  981.     value or a pointer.
  982.     --Andy Dougherty    August 1996
  983. */
  984.  
  985. typedef IVTYPE IV;
  986. typedef UVTYPE UV;
  987.  
  988. #if defined(USE_64_BIT_INT) && defined(HAS_QUAD)
  989. #  if QUADKIND == QUAD_IS_INT64_T && defined(INT64_MAX)
  990. #    define IV_MAX INT64_MAX
  991. #    define IV_MIN INT64_MIN
  992. #    define UV_MAX UINT64_MAX
  993. #    ifndef UINT64_MIN
  994. #      define UINT64_MIN 0
  995. #    endif
  996. #    define UV_MIN UINT64_MIN
  997. #  else
  998. #    define IV_MAX PERL_QUAD_MAX
  999. #    define IV_MIN PERL_QUAD_MIN
  1000. #    define UV_MAX PERL_UQUAD_MAX
  1001. #    define UV_MIN PERL_UQUAD_MIN
  1002. #  endif
  1003. #  define IV_IS_QUAD
  1004. #  define UV_IS_QUAD
  1005. #else
  1006. #  if defined(INT32_MAX) && IVSIZE == 4
  1007. #    define IV_MAX INT32_MAX
  1008. #    define IV_MIN INT32_MIN
  1009. #    ifndef UINT32_MAX_BROKEN /* e.g. HP-UX with gcc messes this up */
  1010. #        define UV_MAX UINT32_MAX
  1011. #    else
  1012. #        define UV_MAX 4294967295U
  1013. #    endif
  1014. #    ifndef UINT32_MIN
  1015. #      define UINT32_MIN 0
  1016. #    endif
  1017. #    define UV_MIN UINT32_MIN
  1018. #  else
  1019. #    define IV_MAX PERL_LONG_MAX
  1020. #    define IV_MIN PERL_LONG_MIN
  1021. #    define UV_MAX PERL_ULONG_MAX
  1022. #    define UV_MIN PERL_ULONG_MIN
  1023. #  endif
  1024. #  if IVSIZE == 8
  1025. #    define IV_IS_QUAD
  1026. #    define UV_IS_QUAD
  1027. #    ifndef HAS_QUAD
  1028. #      define HAS_QUAD
  1029. #    endif
  1030. #  else
  1031. #    undef IV_IS_QUAD
  1032. #    undef UV_IS_QUAD
  1033. #    undef HAS_QUAD
  1034. #  endif
  1035. #endif
  1036.  
  1037. #define IV_DIG (BIT_DIGITS(IVSIZE * 8))
  1038. #define UV_DIG (BIT_DIGITS(UVSIZE * 8))
  1039.  
  1040. /*   
  1041.  *  The macros INT2PTR and NUM2PTR are (despite their names)
  1042.  *  bi-directional: they will convert int/float to or from pointers.
  1043.  *  However the conversion to int/float are named explicitly:
  1044.  *  PTR2IV, PTR2UV, PTR2NV.
  1045.  *
  1046.  *  For int conversions we do not need two casts if pointers are
  1047.  *  the same size as IV and UV.   Otherwise we need an explicit
  1048.  *  cast (PTRV) to avoid compiler warnings.
  1049.  */
  1050. #if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
  1051. #  define PTRV            UV
  1052. #  define INT2PTR(any,d)    (any)(d)
  1053. #else
  1054. #  if PTRSIZE == LONGSIZE 
  1055. #    define PTRV        unsigned long
  1056. #  else
  1057. #    define PTRV        unsigned
  1058. #  endif
  1059. #  define INT2PTR(any,d)    (any)(PTRV)(d)
  1060. #endif
  1061. #define NUM2PTR(any,d)    (any)(PTRV)(d)
  1062. #define PTR2IV(p)    INT2PTR(IV,p)
  1063. #define PTR2UV(p)    INT2PTR(UV,p)
  1064. #define PTR2NV(p)    NUM2PTR(NV,p)
  1065.   
  1066. #ifdef USE_LONG_DOUBLE
  1067. #  if !(defined(HAS_LONG_DOUBLE) && (LONG_DOUBLESIZE > DOUBLESIZE))
  1068. #     undef USE_LONG_DOUBLE /* Ouch! */
  1069. #  endif
  1070. #endif
  1071.  
  1072. #ifdef OVR_DBL_DIG
  1073. /* Use an overridden DBL_DIG */
  1074. # ifdef DBL_DIG
  1075. #  undef DBL_DIG
  1076. # endif
  1077. # define DBL_DIG OVR_DBL_DIG
  1078. #else
  1079. /* The following is all to get DBL_DIG, in order to pick a nice
  1080.    default value for printing floating point numbers in Gconvert.
  1081.    (see config.h)
  1082. */
  1083. #ifdef I_LIMITS
  1084. #include <limits.h>
  1085. #endif
  1086. #ifdef I_FLOAT
  1087. #include <float.h>
  1088. #endif
  1089. #ifndef HAS_DBL_DIG
  1090. #define DBL_DIG    15   /* A guess that works lots of places */
  1091. #endif
  1092. #endif
  1093. #ifdef I_FLOAT
  1094. #include <float.h>
  1095. #endif
  1096. #ifndef HAS_DBL_DIG
  1097. #define DBL_DIG    15   /* A guess that works lots of places */
  1098. #endif
  1099.  
  1100. #ifdef OVR_LDBL_DIG
  1101. /* Use an overridden LDBL_DIG */
  1102. # ifdef LDBL_DIG
  1103. #  undef LDBL_DIG
  1104. # endif
  1105. # define LDBL_DIG OVR_LDBL_DIG
  1106. #else
  1107. /* The following is all to get LDBL_DIG, in order to pick a nice
  1108.    default value for printing floating point numbers in Gconvert.
  1109.    (see config.h)
  1110. */
  1111. # ifdef I_LIMITS
  1112. #   include <limits.h>
  1113. # endif
  1114. # ifdef I_FLOAT
  1115. #  include <float.h>
  1116. # endif
  1117. # ifndef HAS_LDBL_DIG
  1118. #  if LONG_DOUBLESIZE == 10
  1119. #   define LDBL_DIG 18 /* assume IEEE */
  1120. #  else
  1121. #   if LONG_DOUBLESIZE == 12
  1122. #    define LDBL_DIG 18 /* gcc? */
  1123. #   else
  1124. #    if LONG_DOUBLESIZE == 16
  1125. #     define LDBL_DIG 33 /* assume IEEE */
  1126. #    else
  1127. #     if LONG_DOUBLESIZE == DOUBLESIZE
  1128. #      define LDBL_DIG DBL_DIG /* bummer */
  1129. #     endif
  1130. #    endif
  1131. #   endif
  1132. #  endif
  1133. # endif
  1134. #endif
  1135.  
  1136. typedef NVTYPE NV;
  1137.  
  1138. #ifdef I_IEEEFP
  1139. #   include <ieeefp.h>
  1140. #endif
  1141.  
  1142. #ifdef USE_LONG_DOUBLE
  1143. #   ifdef I_SUNMATH
  1144. #       include <sunmath.h>
  1145. #   endif
  1146. #   define NV_DIG LDBL_DIG
  1147. #   ifdef HAS_SQRTL
  1148.         /* libsunmath doesn't have modfl and frexpl as of mid-March 2000 */
  1149.     /* XXX Configure probe for modfl and frexpl needed XXX */
  1150. #       if defined(__sun) && defined(__svr4)
  1151. #           define Perl_modf(x,y) ((long double)modf((double)(x),(double*)(y)))
  1152. #           define Perl_frexp(x) ((long double)frexp((double)(x)))
  1153. #       else
  1154. #           define Perl_modf modfl
  1155. #           define Perl_frexp frexpl
  1156. #       endif
  1157. #       define Perl_cos cosl
  1158. #       define Perl_sin sinl
  1159. #       define Perl_sqrt sqrtl
  1160. #       define Perl_exp expl
  1161. #       define Perl_log logl
  1162. #       define Perl_atan2 atan2l
  1163. #       define Perl_pow powl
  1164. #       define Perl_floor floorl
  1165. #       define Perl_fmod fmodl
  1166. #   endif
  1167. #else
  1168. #   define NV_DIG DBL_DIG
  1169. #   define Perl_modf modf
  1170. #   define Perl_frexp frexp
  1171. #   define Perl_cos cos
  1172. #   define Perl_sin sin
  1173. #   define Perl_sqrt sqrt
  1174. #   define Perl_exp exp
  1175. #   define Perl_log log
  1176. #   define Perl_atan2 atan2
  1177. #   define Perl_pow pow
  1178. #   define Perl_floor floor
  1179. #   define Perl_fmod fmod
  1180. #endif
  1181.  
  1182. #if !defined(Perl_atof) && defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
  1183. #   if !defined(Perl_atof) && defined(HAS_STRTOLD) 
  1184. #       define Perl_atof(s) strtold(s, (char**)NULL)
  1185. #   endif
  1186. #   if !defined(Perl_atof) && defined(HAS_ATOLF)
  1187. #       define Perl_atof atolf
  1188. #   endif
  1189. #endif
  1190. #if !defined(Perl_atof)
  1191. #   define Perl_atof atof /* we assume atof being available anywhere */
  1192. #endif
  1193.  
  1194. /* Previously these definitions used hardcoded figures. 
  1195.  * It is hoped these formula are more portable, although
  1196.  * no data one way or another is presently known to me.
  1197.  * The "PERL_" names are used because these calculated constants
  1198.  * do not meet the ANSI requirements for LONG_MAX, etc., which
  1199.  * need to be constants acceptable to #if - kja
  1200.  *    define PERL_LONG_MAX        2147483647L
  1201.  *    define PERL_LONG_MIN        (-LONG_MAX - 1)
  1202.  *    define PERL ULONG_MAX       4294967295L
  1203.  */
  1204.  
  1205. #ifdef I_LIMITS  /* Needed for cast_xxx() functions below. */
  1206. #  include <limits.h>
  1207. #else
  1208. #ifdef I_VALUES
  1209. #  include <values.h>
  1210. #endif
  1211. #endif
  1212.  
  1213. /*
  1214.  * Try to figure out max and min values for the integral types.  THE CORRECT
  1215.  * SOLUTION TO THIS MESS: ADAPT enquire.c FROM GCC INTO CONFIGURE.  The
  1216.  * following hacks are used if neither limits.h or values.h provide them:
  1217.  * U<TYPE>_MAX: for types >= int: ~(unsigned TYPE)0
  1218.  *              for types <  int:  (unsigned TYPE)~(unsigned)0
  1219.  *    The argument to ~ must be unsigned so that later signed->unsigned
  1220.  *    conversion can't modify the value's bit pattern (e.g. -0 -> +0),
  1221.  *    and it must not be smaller than int because ~ does integral promotion.
  1222.  * <type>_MAX: (<type>) (U<type>_MAX >> 1)
  1223.  * <type>_MIN: -<type>_MAX - <is_twos_complement_architecture: (3 & -1) == 3>.
  1224.  *    The latter is a hack which happens to work on some machines but
  1225.  *    does *not* catch any random system, or things like integer types
  1226.  *    with NaN if that is possible.
  1227.  *
  1228.  * All of the types are explicitly cast to prevent accidental loss of
  1229.  * numeric range, and in the hope that they will be less likely to confuse
  1230.  * over-eager optimizers.
  1231.  *
  1232.  */
  1233.  
  1234. #define PERL_UCHAR_MIN ((unsigned char)0)
  1235.  
  1236. #ifdef UCHAR_MAX
  1237. #  define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX)
  1238. #else
  1239. #  ifdef MAXUCHAR
  1240. #    define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR)
  1241. #  else
  1242. #    define PERL_UCHAR_MAX       ((unsigned char)~(unsigned)0)
  1243. #  endif
  1244. #endif
  1245.  
  1246. /*
  1247.  * CHAR_MIN and CHAR_MAX are not included here, as the (char) type may be
  1248.  * ambiguous. It may be equivalent to (signed char) or (unsigned char)
  1249.  * depending on local options. Until Configure detects this (or at least
  1250.  * detects whether the "signed" keyword is available) the CHAR ranges
  1251.  * will not be included. UCHAR functions normally.
  1252.  *                                                           - kja
  1253.  */
  1254.  
  1255. #define PERL_USHORT_MIN ((unsigned short)0)
  1256.  
  1257. #ifdef USHORT_MAX
  1258. #  define PERL_USHORT_MAX ((unsigned short)USHORT_MAX)
  1259. #else
  1260. #  ifdef MAXUSHORT
  1261. #    define PERL_USHORT_MAX ((unsigned short)MAXUSHORT)
  1262. #  else
  1263. #    ifdef USHRT_MAX
  1264. #      define PERL_USHORT_MAX ((unsigned short)USHRT_MAX)
  1265. #    else
  1266. #      define PERL_USHORT_MAX       ((unsigned short)~(unsigned)0)
  1267. #    endif
  1268. #  endif
  1269. #endif
  1270.  
  1271. #ifdef SHORT_MAX
  1272. #  define PERL_SHORT_MAX ((short)SHORT_MAX)
  1273. #else
  1274. #  ifdef MAXSHORT    /* Often used in <values.h> */
  1275. #    define PERL_SHORT_MAX ((short)MAXSHORT)
  1276. #  else
  1277. #    ifdef SHRT_MAX
  1278. #      define PERL_SHORT_MAX ((short)SHRT_MAX)
  1279. #    else
  1280. #      define PERL_SHORT_MAX      ((short) (PERL_USHORT_MAX >> 1))
  1281. #    endif
  1282. #  endif
  1283. #endif
  1284.  
  1285. #ifdef SHORT_MIN
  1286. #  define PERL_SHORT_MIN ((short)SHORT_MIN)
  1287. #else
  1288. #  ifdef MINSHORT
  1289. #    define PERL_SHORT_MIN ((short)MINSHORT)
  1290. #  else
  1291. #    ifdef SHRT_MIN
  1292. #      define PERL_SHORT_MIN ((short)SHRT_MIN)
  1293. #    else
  1294. #      define PERL_SHORT_MIN        (-PERL_SHORT_MAX - ((3 & -1) == 3))
  1295. #    endif
  1296. #  endif
  1297. #endif
  1298.  
  1299. #ifdef UINT_MAX
  1300. #  define PERL_UINT_MAX ((unsigned int)UINT_MAX)
  1301. #else
  1302. #  ifdef MAXUINT
  1303. #    define PERL_UINT_MAX ((unsigned int)MAXUINT)
  1304. #  else
  1305. #    define PERL_UINT_MAX       (~(unsigned int)0)
  1306. #  endif
  1307. #endif
  1308.  
  1309. #define PERL_UINT_MIN ((unsigned int)0)
  1310.  
  1311. #ifdef INT_MAX
  1312. #  define PERL_INT_MAX ((int)INT_MAX)
  1313. #else
  1314. #  ifdef MAXINT    /* Often used in <values.h> */
  1315. #    define PERL_INT_MAX ((int)MAXINT)
  1316. #  else
  1317. #    define PERL_INT_MAX        ((int)(PERL_UINT_MAX >> 1))
  1318. #  endif
  1319. #endif
  1320.  
  1321. #ifdef INT_MIN
  1322. #  define PERL_INT_MIN ((int)INT_MIN)
  1323. #else
  1324. #  ifdef MININT
  1325. #    define PERL_INT_MIN ((int)MININT)
  1326. #  else
  1327. #    define PERL_INT_MIN        (-PERL_INT_MAX - ((3 & -1) == 3))
  1328. #  endif
  1329. #endif
  1330.  
  1331. #ifdef ULONG_MAX
  1332. #  define PERL_ULONG_MAX ((unsigned long)ULONG_MAX)
  1333. #else
  1334. #  ifdef MAXULONG
  1335. #    define PERL_ULONG_MAX ((unsigned long)MAXULONG)
  1336. #  else
  1337. #    define PERL_ULONG_MAX       (~(unsigned long)0)
  1338. #  endif
  1339. #endif
  1340.  
  1341. #define PERL_ULONG_MIN ((unsigned long)0L)
  1342.  
  1343. #ifdef LONG_MAX
  1344. #  define PERL_LONG_MAX ((long)LONG_MAX)
  1345. #else
  1346. #  ifdef MAXLONG    /* Often used in <values.h> */
  1347. #    define PERL_LONG_MAX ((long)MAXLONG)
  1348. #  else
  1349. #    define PERL_LONG_MAX        ((long) (PERL_ULONG_MAX >> 1))
  1350. #  endif
  1351. #endif
  1352.  
  1353. #ifdef LONG_MIN
  1354. #  define PERL_LONG_MIN ((long)LONG_MIN)
  1355. #else
  1356. #  ifdef MINLONG
  1357. #    define PERL_LONG_MIN ((long)MINLONG)
  1358. #  else
  1359. #    define PERL_LONG_MIN        (-PERL_LONG_MAX - ((3 & -1) == 3))
  1360. #  endif
  1361. #endif
  1362.  
  1363. #ifdef UV_IS_QUAD
  1364.  
  1365. #  ifdef UQUAD_MAX
  1366. #    define PERL_UQUAD_MAX ((UV)UQUAD_MAX)
  1367. #  else
  1368. #    define PERL_UQUAD_MAX    (~(UV)0)
  1369. #  endif
  1370.  
  1371. #  define PERL_UQUAD_MIN ((UV)0)
  1372.  
  1373. #  ifdef QUAD_MAX
  1374. #    define PERL_QUAD_MAX ((IV)QUAD_MAX)
  1375. #  else
  1376. #    define PERL_QUAD_MAX     ((IV) (PERL_UQUAD_MAX >> 1))
  1377. #  endif
  1378.  
  1379. #  ifdef QUAD_MIN
  1380. #    define PERL_QUAD_MIN ((IV)QUAD_MIN)
  1381. #  else
  1382. #    define PERL_QUAD_MIN     (-PERL_QUAD_MAX - ((3 & -1) == 3))
  1383. #  endif
  1384.  
  1385. #endif
  1386.  
  1387. typedef MEM_SIZE STRLEN;
  1388.  
  1389. typedef struct op OP;
  1390. typedef struct cop COP;
  1391. typedef struct unop UNOP;
  1392. typedef struct binop BINOP;
  1393. typedef struct listop LISTOP;
  1394. typedef struct logop LOGOP;
  1395. typedef struct pmop PMOP;
  1396. typedef struct svop SVOP;
  1397. typedef struct padop PADOP;
  1398. typedef struct pvop PVOP;
  1399. typedef struct loop LOOP;
  1400.  
  1401. typedef struct interpreter PerlInterpreter;
  1402. typedef struct sv SV;
  1403. typedef struct av AV;
  1404. typedef struct hv HV;
  1405. typedef struct cv CV;
  1406. typedef struct regexp REGEXP;
  1407. typedef struct gp GP;
  1408. typedef struct gv GV;
  1409. typedef struct io IO;
  1410. typedef struct context PERL_CONTEXT;
  1411. typedef struct block BLOCK;
  1412.  
  1413. typedef struct magic MAGIC;
  1414. typedef struct xrv XRV;
  1415. typedef struct xpv XPV;
  1416. typedef struct xpviv XPVIV;
  1417. typedef struct xpvuv XPVUV;
  1418. typedef struct xpvnv XPVNV;
  1419. typedef struct xpvmg XPVMG;
  1420. typedef struct xpvlv XPVLV;
  1421. typedef struct xpvav XPVAV;
  1422. typedef struct xpvhv XPVHV;
  1423. typedef struct xpvgv XPVGV;
  1424. typedef struct xpvcv XPVCV;
  1425. typedef struct xpvbm XPVBM;
  1426. typedef struct xpvfm XPVFM;
  1427. typedef struct xpvio XPVIO;
  1428. typedef struct mgvtbl MGVTBL;
  1429. typedef union any ANY;
  1430. typedef struct ptr_tbl_ent PTR_TBL_ENT_t;
  1431. typedef struct ptr_tbl PTR_TBL_t;
  1432.  
  1433. #include "handy.h"
  1434.  
  1435. #if defined(USE_LARGE_FILES) && !defined(NO_64_BIT_RAWIO)
  1436. #   if LSEEKSIZE == 8 && !defined(USE_64_BIT_RAWIO)
  1437. #       define USE_64_BIT_RAWIO    /* implicit */
  1438. #   endif
  1439. #endif
  1440.  
  1441. /* Notice the use of HAS_FSEEKO: now we are obligated to always use
  1442.  * fseeko/ftello if possible.  Don't go #defining ftell to ftello yourself,
  1443.  * however, because operating systems like to do that themself. */
  1444. #ifndef FSEEKSIZE
  1445. #   ifdef HAS_FSEEKO
  1446. #       define FSEEKSIZE LSEEKSIZE
  1447. #   else
  1448. #       define FSEEKSIZE LONGSIZE
  1449. #   endif  
  1450. #endif
  1451.  
  1452. #if defined(USE_LARGE_FILES) && !defined(NO_64_BIT_STDIO)
  1453. #   if FSEEKSIZE == 8 && !defined(USE_64_BIT_STDIO)
  1454. #       define USE_64_BIT_STDIO /* implicit */
  1455. #   endif
  1456. #endif
  1457.  
  1458. #ifdef USE_64_BIT_RAWIO
  1459. #   ifdef HAS_OFF64_T
  1460. #       undef Off_t
  1461. #       define Off_t off64_t
  1462. #       undef LSEEKSIZE
  1463. #       define LSEEKSIZE 8
  1464. #   endif
  1465. /* Most 64-bit environments have defines like _LARGEFILE_SOURCE that
  1466.  * will trigger defines like the ones below.  Some 64-bit environments,
  1467.  * however, do not.  Therefore we have to explicitly mix and match. */
  1468. #   if defined(USE_OPEN64)
  1469. #       define open open64
  1470. #   endif
  1471. #   if defined(USE_LSEEK64)
  1472. #       define lseek lseek64
  1473. #   else
  1474. #       if defined(USE_LLSEEK)
  1475. #           define lseek llseek
  1476. #       endif
  1477. #   endif
  1478. #   if defined(USE_STAT64)
  1479. #       define stat stat64
  1480. #   endif
  1481. #   if defined(USE_FSTAT64)
  1482. #       define fstat fstat64
  1483. #   endif
  1484. #   if defined(USE_LSTAT64)
  1485. #       define lstat lstat64
  1486. #   endif
  1487. #   if defined(USE_FLOCK64)
  1488. #       define flock flock64
  1489. #   endif
  1490. #   if defined(USE_LOCKF64)
  1491. #       define lockf lockf64
  1492. #   endif
  1493. #   if defined(USE_FCNTL64)
  1494. #       define fcntl fcntl64
  1495. #   endif
  1496. #   if defined(USE_TRUNCATE64)
  1497. #       define truncate truncate64
  1498. #   endif
  1499. #   if defined(USE_FTRUNCATE64)
  1500. #       define ftruncate ftruncate64
  1501. #   endif
  1502. #endif
  1503.  
  1504. #ifdef USE_64_BIT_STDIO
  1505. #   ifdef HAS_FPOS64_T
  1506. #       undef Fpos_t
  1507. #       define Fpos_t fpos64_t
  1508. #   endif
  1509. /* Most 64-bit environments have defines like _LARGEFILE_SOURCE that
  1510.  * will trigger defines like the ones below.  Some 64-bit environments,
  1511.  * however, do not. */
  1512. #   if defined(USE_FOPEN64)
  1513. #       define fopen fopen64
  1514. #   endif
  1515. #   if defined(USE_FSEEK64)
  1516. #       define fseek fseek64 /* don't do fseeko here, see perlio.c */
  1517. #   endif
  1518. #   if defined(USE_FTELL64)
  1519. #       define ftell ftell64 /* don't do ftello here, see perlio.c */
  1520. #   endif
  1521. #   if defined(USE_FSETPOS64)
  1522. #       define fsetpos fsetpos64
  1523. #   endif
  1524. #   if defined(USE_FGETPOS64)
  1525. #       define fgetpos fgetpos64
  1526. #   endif
  1527. #   if defined(USE_TMPFILE64)
  1528. #       define tmpfile tmpfile64
  1529. #   endif
  1530. #   if defined(USE_FREOPEN64)
  1531. #       define freopen freopen64
  1532. #   endif
  1533. #endif
  1534.  
  1535. #if defined(OS2)
  1536. #  include "iperlsys.h"
  1537. #endif
  1538.  
  1539. #if defined(__OPEN_VM)
  1540. # include "vmesa/vmesaish.h"
  1541. #endif
  1542.  
  1543. #ifdef DOSISH
  1544. # if defined(OS2)
  1545. #   include "os2ish.h"
  1546. # else
  1547. #   include "dosish.h"
  1548. # endif
  1549. #else
  1550. # if defined(VMS)
  1551. #   include "vmsish.h"
  1552. # else
  1553. #   if defined(PLAN9)
  1554. #     include "./plan9/plan9ish.h"
  1555. #   else
  1556. #     if defined(MPE)
  1557. #       include "mpeix/mpeixish.h"
  1558. #     else
  1559. #       if defined(__VOS__)
  1560. #         include "vosish.h"
  1561. #       else
  1562. #         if defined(EPOC)
  1563. #           include "epocish.h"
  1564. #         else
  1565. #           if defined(MACOS_TRADITIONAL)
  1566. #             include "macos/macish.h"
  1567. #           else
  1568. #             include "unixish.h"
  1569. #           endif
  1570. #         endif
  1571. #       endif
  1572. #     endif
  1573. #   endif
  1574. # endif
  1575. #endif         
  1576.  
  1577. #ifndef PERL_SYS_INIT3
  1578. #  define PERL_SYS_INIT3(argvp,argcp,envp) PERL_SYS_INIT(argvp,argcp)
  1579. #endif
  1580.  
  1581. #ifndef MAXPATHLEN
  1582. #  ifdef PATH_MAX
  1583. #    ifdef _POSIX_PATH_MAX
  1584. #       if PATH_MAX > _POSIX_PATH_MAX
  1585. /* MAXPATHLEN is supposed to include the final null character,
  1586.  * as opposed to PATH_MAX and _POSIX_PATH_MAX. */
  1587. #         define MAXPATHLEN (PATH_MAX+1)
  1588. #       else
  1589. #         define MAXPATHLEN (_POSIX_PATH_MAX+1)
  1590. #       endif
  1591. #    else
  1592. #      define MAXPATHLEN (PATH_MAX+1)
  1593. #    endif
  1594. #  else
  1595. #    ifdef _POSIX_PATH_MAX
  1596. #       define MAXPATHLEN (_POSIX_PATH_MAX+1)
  1597. #    else
  1598. #       define MAXPATHLEN 1024    /* Err on the large side. */
  1599. #    endif
  1600. #  endif
  1601. #endif
  1602.  
  1603. /* 
  1604.  * USE_THREADS needs to be after unixish.h as <pthread.h> includes
  1605.  * <sys/signal.h> which defines NSIG - which will stop inclusion of <signal.h>
  1606.  * this results in many functions being undeclared which bothers C++
  1607.  * May make sense to have threads after "*ish.h" anyway
  1608.  */
  1609.  
  1610. #if defined(USE_THREADS) || defined(USE_ITHREADS)
  1611. #  if defined(USE_THREADS)
  1612.    /* pending resolution of licensing issues, we avoid the erstwhile
  1613.     * atomic.h everywhere */
  1614. #  define EMULATE_ATOMIC_REFCOUNTS
  1615. #  endif
  1616. #  ifdef FAKE_THREADS
  1617. #    include "fakethr.h"
  1618. #  else
  1619. #    ifdef WIN32
  1620. #      include <win32thread.h>
  1621. #    else
  1622. #      ifdef OS2
  1623. #        include "os2thread.h"
  1624. #      else
  1625. #        ifdef I_MACH_CTHREADS
  1626. #          include <mach/cthreads.h>
  1627. #          if (defined(NeXT) || defined(__NeXT__)) && defined(PERL_POLLUTE_MALLOC)
  1628. #            define MUTEX_INIT_CALLS_MALLOC
  1629. #          endif
  1630. typedef cthread_t    perl_os_thread;
  1631. typedef mutex_t        perl_mutex;
  1632. typedef condition_t    perl_cond;
  1633. typedef void *        perl_key;
  1634. #        else /* Posix threads */
  1635. #          ifdef I_PTHREAD
  1636. #            include <pthread.h>
  1637. #          endif
  1638. typedef pthread_t    perl_os_thread;
  1639. typedef pthread_mutex_t    perl_mutex;
  1640. typedef pthread_cond_t    perl_cond;
  1641. typedef pthread_key_t    perl_key;
  1642. #        endif /* I_MACH_CTHREADS */
  1643. #      endif /* OS2 */
  1644. #    endif /* WIN32 */
  1645. #  endif /* FAKE_THREADS */
  1646. #endif /* USE_THREADS || USE_ITHREADS */
  1647.  
  1648. #ifdef WIN32
  1649. #  include "win32.h"
  1650. #endif
  1651.  
  1652. #ifdef VMS
  1653. #   define STATUS_NATIVE    PL_statusvalue_vms
  1654. #   define STATUS_NATIVE_EXPORT \
  1655.     (((I32)PL_statusvalue_vms == -1 ? 44 : PL_statusvalue_vms) | (VMSISH_HUSHED ? 0x10000000 : 0))
  1656. #   define STATUS_NATIVE_SET(n)                        \
  1657.     STMT_START {                            \
  1658.         PL_statusvalue_vms = (n);                    \
  1659.         if ((I32)PL_statusvalue_vms == -1)                \
  1660.         PL_statusvalue = -1;                    \
  1661.         else if (PL_statusvalue_vms & STS$M_SUCCESS)        \
  1662.         PL_statusvalue = 0;                    \
  1663.         else if ((PL_statusvalue_vms & STS$M_SEVERITY) == 0)    \
  1664.         PL_statusvalue = 1 << 8;                \
  1665.         else                            \
  1666.         PL_statusvalue = (PL_statusvalue_vms & STS$M_SEVERITY) << 8;    \
  1667.     } STMT_END
  1668. #   define STATUS_POSIX    PL_statusvalue
  1669. #   ifdef VMSISH_STATUS
  1670. #    define STATUS_CURRENT    (VMSISH_STATUS ? STATUS_NATIVE : STATUS_POSIX)
  1671. #   else
  1672. #    define STATUS_CURRENT    STATUS_POSIX
  1673. #   endif
  1674. #   define STATUS_POSIX_SET(n)                \
  1675.     STMT_START {                    \
  1676.         PL_statusvalue = (n);                \
  1677.         if (PL_statusvalue != -1) {            \
  1678.         PL_statusvalue &= 0xFFFF;            \
  1679.         PL_statusvalue_vms = PL_statusvalue ? 44 : 1;    \
  1680.         }                        \
  1681.         else PL_statusvalue_vms = -1;            \
  1682.     } STMT_END
  1683. #   define STATUS_ALL_SUCCESS    (PL_statusvalue = 0, PL_statusvalue_vms = 1)
  1684. #   define STATUS_ALL_FAILURE    (PL_statusvalue = 1, PL_statusvalue_vms = 44)
  1685. #else
  1686. #   define STATUS_NATIVE    STATUS_POSIX
  1687. #   define STATUS_NATIVE_EXPORT    STATUS_POSIX
  1688. #   define STATUS_NATIVE_SET    STATUS_POSIX_SET
  1689. #   define STATUS_POSIX        PL_statusvalue
  1690. #   define STATUS_POSIX_SET(n)        \
  1691.     STMT_START {            \
  1692.         PL_statusvalue = (n);        \
  1693.         if (PL_statusvalue != -1)    \
  1694.         PL_statusvalue &= 0xFFFF;    \
  1695.     } STMT_END
  1696. #   define STATUS_CURRENT STATUS_POSIX
  1697. #   define STATUS_ALL_SUCCESS    (PL_statusvalue = 0)
  1698. #   define STATUS_ALL_FAILURE    (PL_statusvalue = 1)
  1699. #endif
  1700.  
  1701. /* flags in PL_exit_flags for nature of exit() */
  1702. #define PERL_EXIT_EXPECTED    0x01
  1703.  
  1704. #ifndef MEMBER_TO_FPTR
  1705. #  define MEMBER_TO_FPTR(name)        name
  1706. #endif
  1707.  
  1708. /* format to use for version numbers in file/directory names */
  1709. /* XXX move to Configure? */
  1710. #ifndef PERL_FS_VER_FMT
  1711. #  define PERL_FS_VER_FMT    "%d.%d.%d"
  1712. #endif
  1713.  
  1714. /* This defines a way to flush all output buffers.  This may be a
  1715.  * performance issue, so we allow people to disable it.
  1716.  */
  1717. #ifndef PERL_FLUSHALL_FOR_CHILD
  1718. # if defined(FFLUSH_NULL) || defined(USE_SFIO)
  1719. #  define PERL_FLUSHALL_FOR_CHILD    PerlIO_flush((PerlIO*)NULL)
  1720. # else
  1721. #  ifdef FFLUSH_ALL
  1722. #   define PERL_FLUSHALL_FOR_CHILD    my_fflush_all()
  1723. #  else
  1724. #   define PERL_FLUSHALL_FOR_CHILD    NOOP
  1725. #  endif
  1726. # endif
  1727. #endif
  1728.  
  1729. #ifndef PERL_WAIT_FOR_CHILDREN
  1730. #  define PERL_WAIT_FOR_CHILDREN    NOOP
  1731. #endif
  1732.  
  1733. /* the traditional thread-unsafe notion of "current interpreter". */
  1734. #ifndef PERL_SET_INTERP
  1735. #  define PERL_SET_INTERP(i)        (PL_curinterp = (PerlInterpreter*)(i))
  1736. #endif
  1737.  
  1738. #ifndef PERL_GET_INTERP
  1739. #  define PERL_GET_INTERP        (PL_curinterp)
  1740. #endif
  1741.  
  1742. #if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_GET_THX)
  1743. #  ifdef USE_THREADS
  1744. #    define PERL_GET_THX        ((struct perl_thread *)PERL_GET_CONTEXT)
  1745. #  else
  1746. #  ifdef MULTIPLICITY
  1747. #    define PERL_GET_THX        ((PerlInterpreter *)PERL_GET_CONTEXT)
  1748. #  else
  1749. #  ifdef PERL_OBJECT
  1750. #    define PERL_GET_THX        ((CPerlObj *)PERL_GET_CONTEXT)
  1751. #  endif
  1752. #  endif
  1753. #  endif
  1754. #  define PERL_SET_THX(t)        PERL_SET_CONTEXT(t)
  1755. #endif
  1756.  
  1757. #ifndef SVf
  1758. #  ifdef CHECK_FORMAT
  1759. #    define SVf "p"
  1760. #  else
  1761. #    define SVf "_"
  1762. #  endif 
  1763. #endif
  1764.  
  1765. /* Some unistd.h's give a prototype for pause() even though
  1766.    HAS_PAUSE ends up undefined.  This causes the #define
  1767.    below to be rejected by the compmiler.  Sigh.
  1768. */
  1769. #ifdef HAS_PAUSE
  1770. #define Pause    pause
  1771. #else
  1772. #define Pause() sleep((32767<<16)+32767)
  1773. #endif
  1774.  
  1775. #ifndef IOCPARM_LEN
  1776. #   ifdef IOCPARM_MASK
  1777.     /* on BSDish systes we're safe */
  1778. #    define IOCPARM_LEN(x)  (((x) >> 16) & IOCPARM_MASK)
  1779. #   else
  1780.     /* otherwise guess at what's safe */
  1781. #    define IOCPARM_LEN(x)    256
  1782. #   endif
  1783. #endif
  1784.  
  1785. #if defined(__CYGWIN__)
  1786. /* USEMYBINMODE
  1787.  *   This symbol, if defined, indicates that the program should
  1788.  *   use the routine my_binmode(FILE *fp, char iotype, int mode) to insure
  1789.  *   that a file is in "binary" mode -- that is, that no translation
  1790.  *   of bytes occurs on read or write operations.
  1791.  */
  1792. #  define USEMYBINMODE / **/
  1793. #  define my_binmode(fp, iotype, mode) \
  1794.             (PerlLIO_setmode(PerlIO_fileno(fp), mode) != -1 ? TRUE : FALSE)
  1795. #endif
  1796.  
  1797. #ifdef UNION_ANY_DEFINITION
  1798. UNION_ANY_DEFINITION;
  1799. #else
  1800. union any {
  1801.     void*    any_ptr;
  1802.     I32        any_i32;
  1803.     IV        any_iv;
  1804.     long    any_long;
  1805.     void    (*any_dptr) (void*);
  1806.     void    (*any_dxptr) (pTHXo_ void*);
  1807. };
  1808. #endif
  1809.  
  1810. #ifdef USE_THREADS
  1811. #define ARGSproto struct perl_thread *thr
  1812. #else
  1813. #define ARGSproto
  1814. #endif /* USE_THREADS */
  1815.  
  1816. typedef I32 (*filter_t) (pTHXo_ int, SV *, int);
  1817.  
  1818. #define FILTER_READ(idx, sv, len)  filter_read(idx, sv, len)
  1819. #define FILTER_DATA(idx)       (AvARRAY(PL_rsfp_filters)[idx])
  1820. #define FILTER_ISREADER(idx)       (idx >= AvFILLp(PL_rsfp_filters))
  1821.  
  1822. #if !defined(OS2)
  1823. #  include "iperlsys.h"
  1824. #endif
  1825. #include "regexp.h"
  1826. #include "sv.h"
  1827. #include "util.h"
  1828. #include "form.h"
  1829. #include "gv.h"
  1830. #include "cv.h"
  1831. #include "opnames.h"
  1832. #include "op.h"
  1833. #include "cop.h"
  1834. #include "av.h"
  1835. #include "hv.h"
  1836. #include "mg.h"
  1837. #include "scope.h"
  1838. #include "warnings.h"
  1839. #include "utf8.h"
  1840.  
  1841. /* Current curly descriptor */
  1842. typedef struct curcur CURCUR;
  1843. struct curcur {
  1844.     int        parenfloor;    /* how far back to strip paren data */
  1845.     int        cur;        /* how many instances of scan we've matched */
  1846.     int        min;        /* the minimal number of scans to match */
  1847.     int        max;        /* the maximal number of scans to match */
  1848.     int        minmod;        /* whether to work our way up or down */
  1849.     regnode *    scan;        /* the thing to match */
  1850.     regnode *    next;        /* what has to match after it */
  1851.     char *    lastloc;    /* where we started matching this scan */
  1852.     CURCUR *    oldcc;        /* current curly before we started this one */
  1853. };
  1854.  
  1855. typedef struct _sublex_info SUBLEXINFO;
  1856. struct _sublex_info {
  1857.     I32 super_state;    /* lexer state to save */
  1858.     I32 sub_inwhat;    /* "lex_inwhat" to use */
  1859.     OP *sub_op;        /* "lex_op" to use */
  1860.     char *super_bufptr;    /* PL_bufptr that was */
  1861.     char *super_bufend;    /* PL_bufend that was */
  1862. };
  1863.  
  1864. typedef struct magic_state MGS;    /* struct magic_state defined in mg.c */
  1865.  
  1866. struct scan_data_t;        /* Used in S_* functions in regcomp.c */
  1867. struct regnode_charclass_class;    /* Used in S_* functions in regcomp.c */
  1868.  
  1869. typedef I32 CHECKPOINT;
  1870.  
  1871. struct ptr_tbl_ent {
  1872.     struct ptr_tbl_ent*        next;
  1873.     void*            oldval;
  1874.     void*            newval;
  1875. };
  1876.  
  1877. struct ptr_tbl {
  1878.     struct ptr_tbl_ent**    tbl_ary;
  1879.     UV                tbl_max;
  1880.     UV                tbl_items;
  1881. };
  1882.  
  1883. #if defined(iAPX286) || defined(M_I286) || defined(I80286)
  1884. #   define I286
  1885. #endif
  1886.  
  1887. #if defined(htonl) && !defined(HAS_HTONL)
  1888. #define HAS_HTONL
  1889. #endif
  1890. #if defined(htons) && !defined(HAS_HTONS)
  1891. #define HAS_HTONS
  1892. #endif
  1893. #if defined(ntohl) && !defined(HAS_NTOHL)
  1894. #define HAS_NTOHL
  1895. #endif
  1896. #if defined(ntohs) && !defined(HAS_NTOHS)
  1897. #define HAS_NTOHS
  1898. #endif
  1899. #ifndef HAS_HTONL
  1900. #if (BYTEORDER & 0xffff) != 0x4321
  1901. #define HAS_HTONS
  1902. #define HAS_HTONL
  1903. #define HAS_NTOHS
  1904. #define HAS_NTOHL
  1905. #define MYSWAP
  1906. #define htons my_swap
  1907. #define htonl my_htonl
  1908. #define ntohs my_swap
  1909. #define ntohl my_ntohl
  1910. #endif
  1911. #else
  1912. #if (BYTEORDER & 0xffff) == 0x4321
  1913. #undef HAS_HTONS
  1914. #undef HAS_HTONL
  1915. #undef HAS_NTOHS
  1916. #undef HAS_NTOHL
  1917. #endif
  1918. #endif
  1919.  
  1920. /*
  1921.  * Little-endian byte order functions - 'v' for 'VAX', or 'reVerse'.
  1922.  * -DWS
  1923.  */
  1924. #if BYTEORDER != 0x1234
  1925. # define HAS_VTOHL
  1926. # define HAS_VTOHS
  1927. # define HAS_HTOVL
  1928. # define HAS_HTOVS
  1929. # if BYTEORDER == 0x4321 || BYTEORDER == 0x87654321
  1930. #  define vtohl(x)    ((((x)&0xFF)<<24)    \
  1931.             +(((x)>>24)&0xFF)    \
  1932.             +(((x)&0x0000FF00)<<8)    \
  1933.             +(((x)&0x00FF0000)>>8)    )
  1934. #  define vtohs(x)    ((((x)&0xFF)<<8) + (((x)>>8)&0xFF))
  1935. #  define htovl(x)    vtohl(x)
  1936. #  define htovs(x)    vtohs(x)
  1937. # endif
  1938.     /* otherwise default to functions in util.c */
  1939. #endif
  1940.  
  1941. #ifdef CASTNEGFLOAT
  1942. #define U_S(what) ((U16)(what))
  1943. #define U_I(what) ((unsigned int)(what))
  1944. #define U_L(what) ((U32)(what))
  1945. #else
  1946. #define U_S(what) ((U16)cast_ulong((NV)(what)))
  1947. #define U_I(what) ((unsigned int)cast_ulong((NV)(what)))
  1948. #define U_L(what) (cast_ulong((NV)(what)))
  1949. #endif
  1950.  
  1951. #ifdef CASTI32
  1952. #define I_32(what) ((I32)(what))
  1953. #define I_V(what) ((IV)(what))
  1954. #define U_V(what) ((UV)(what))
  1955. #else
  1956. #define I_32(what) (cast_i32((NV)(what)))
  1957. #define I_V(what) (cast_iv((NV)(what)))
  1958. #define U_V(what) (cast_uv((NV)(what)))
  1959. #endif
  1960.  
  1961. /* These do not care about the fractional part, only about the range. */
  1962. #define NV_WITHIN_IV(nv) (I_V(nv) >= IV_MIN && I_V(nv) <= IV_MAX)
  1963. #define NV_WITHIN_UV(nv) ((nv)>=0.0 && U_V(nv) >= UV_MIN && U_V(nv) <= UV_MAX)
  1964.  
  1965. /* Used with UV/IV arguments: */
  1966.                     /* XXXX: need to speed it up */
  1967. #define CLUMP_2UV(iv)    ((iv) < 0 ? 0 : (UV)(iv))
  1968. #define CLUMP_2IV(uv)    ((uv) > (UV)IV_MAX ? IV_MAX : (IV)(uv))
  1969.  
  1970. #ifndef MAXSYSFD
  1971. #   define MAXSYSFD 2
  1972. #endif
  1973.  
  1974. #ifndef __cplusplus
  1975. Uid_t getuid (void);
  1976. Uid_t geteuid (void);
  1977. Gid_t getgid (void);
  1978. Gid_t getegid (void);
  1979. #endif
  1980.  
  1981. #ifndef Perl_debug_log
  1982. #  define Perl_debug_log    PerlIO_stderr()
  1983. #endif
  1984.  
  1985. #ifndef Perl_error_log
  1986. #  define Perl_error_log    (PL_stderrgv            \
  1987.                  && IoOFP(GvIOp(PL_stderrgv))    \
  1988.                  ? IoOFP(GvIOp(PL_stderrgv))    \
  1989.                  : PerlIO_stderr())
  1990. #endif
  1991.  
  1992. #ifdef DEBUGGING
  1993. #undef  YYDEBUG
  1994. #define YYDEBUG 1
  1995. #define DEB(a)                 a
  1996. #define DEBUG(a)   if (PL_debug)        a
  1997. #define DEBUG_p(a) if (PL_debug & 1)    a
  1998. #define DEBUG_s(a) if (PL_debug & 2)    a
  1999. #define DEBUG_l(a) if (PL_debug & 4)    a
  2000. #define DEBUG_t(a) if (PL_debug & 8)    a
  2001. #define DEBUG_o(a) if (PL_debug & 16)    a
  2002. #define DEBUG_c(a) if (PL_debug & 32)    a
  2003. #define DEBUG_P(a) if (PL_debug & 64)    a
  2004. #  if defined(PERL_OBJECT)
  2005. #    define DEBUG_m(a) if (PL_debug & 128)    a
  2006. #  else
  2007. #    define DEBUG_m(a)  \
  2008.     STMT_START {                            \
  2009.     if (PERL_GET_INTERP) { dTHX; if (PL_debug & 128) { a; } }    \
  2010.     } STMT_END
  2011. #  endif
  2012. #define DEBUG_f(a) if (PL_debug & 256)    a
  2013. #define DEBUG_r(a) if (PL_debug & 512)    a
  2014. #define DEBUG_x(a) if (PL_debug & 1024)    a
  2015. #define DEBUG_u(a) if (PL_debug & 2048)    a
  2016. #define DEBUG_L(a) if (PL_debug & 4096)    a
  2017. #define DEBUG_H(a) if (PL_debug & 8192)    a
  2018. #define DEBUG_X(a) if (PL_debug & 16384)    a
  2019. #define DEBUG_D(a) if (PL_debug & 32768)    a
  2020. #  ifdef USE_THREADS
  2021. #    define DEBUG_S(a) if (PL_debug & (1<<16))    a
  2022. #  else
  2023. #    define DEBUG_S(a)
  2024. #  endif
  2025. #else
  2026. #define DEB(a)
  2027. #define DEBUG(a)
  2028. #define DEBUG_p(a)
  2029. #define DEBUG_s(a)
  2030. #define DEBUG_l(a)
  2031. #define DEBUG_t(a)
  2032. #define DEBUG_o(a)
  2033. #define DEBUG_c(a)
  2034. #define DEBUG_P(a)
  2035. #define DEBUG_m(a)
  2036. #define DEBUG_f(a)
  2037. #define DEBUG_r(a)
  2038. #define DEBUG_x(a)
  2039. #define DEBUG_u(a)
  2040. #define DEBUG_S(a)
  2041. #define DEBUG_H(a)
  2042. #define DEBUG_X(a)
  2043. #define DEBUG_D(a)
  2044. #define DEBUG_S(a)
  2045. #endif
  2046. #define YYMAXDEPTH 300
  2047.  
  2048. #ifndef assert  /* <assert.h> might have been included somehow */
  2049. #define assert(what)    DEB( {                        \
  2050.     if (!(what)) {                            \
  2051.         Perl_croak(aTHX_ "Assertion failed: file \"%s\", line %d",    \
  2052.         __FILE__, __LINE__);                    \
  2053.         PerlProc_exit(1);                        \
  2054.     }})
  2055. #endif
  2056.  
  2057. struct ufuncs {
  2058.     I32 (*uf_val)(IV, SV*);
  2059.     I32 (*uf_set)(IV, SV*);
  2060.     IV uf_index;
  2061. };
  2062.  
  2063. /* Fix these up for __STDC__ */
  2064. #ifndef DONT_DECLARE_STD
  2065. char *mktemp (char*);
  2066. #ifndef atof
  2067. double atof (const char*);
  2068. #endif
  2069. #endif
  2070.  
  2071. #ifndef STANDARD_C
  2072. /* All of these are in stdlib.h or time.h for ANSI C */
  2073. Time_t time();
  2074. struct tm *gmtime(), *localtime();
  2075. #if defined(OEMVS) || defined(__OPEN_VM)
  2076. char *(strchr)(), *(strrchr)();
  2077. char *(strcpy)(), *(strcat)();
  2078. #else
  2079. char *strchr(), *strrchr();
  2080. char *strcpy(), *strcat();
  2081. #endif
  2082. #endif /* ! STANDARD_C */
  2083.  
  2084.  
  2085. #ifdef I_MATH
  2086. #    include <math.h>
  2087. #else
  2088. START_EXTERN_C
  2089.         double exp (double);
  2090.         double log (double);
  2091.         double log10 (double);
  2092.         double sqrt (double);
  2093.         double frexp (double,int*);
  2094.         double ldexp (double,int);
  2095.         double modf (double,double*);
  2096.         double sin (double);
  2097.         double cos (double);
  2098.         double atan2 (double,double);
  2099.         double pow (double,double);
  2100. END_EXTERN_C
  2101. #endif
  2102.  
  2103. #ifndef __cplusplus
  2104. #  if defined(NeXT) || defined(__NeXT__) /* or whatever catches all NeXTs */
  2105. char *crypt ();       /* Maybe more hosts will need the unprototyped version */
  2106. #  else
  2107. #    if !defined(WIN32)
  2108. char *crypt (const char*, const char*);
  2109. #    endif /* !WIN32 */
  2110. #  endif /* !NeXT && !__NeXT__ */
  2111. #  ifndef DONT_DECLARE_STD
  2112. #    ifndef getenv
  2113. char *getenv (const char*);
  2114. #    endif /* !getenv */
  2115. #    if !defined(EPOC) && !(defined(__hpux) && defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64) && !defined(HAS_LSEEK_PROTO)
  2116. Off_t lseek (int,Off_t,int);
  2117. #    endif
  2118. #  endif /* !DONT_DECLARE_STD */
  2119. char *getlogin (void);
  2120. #endif /* !__cplusplus */
  2121.  
  2122. #ifdef UNLINK_ALL_VERSIONS /* Currently only makes sense for VMS */
  2123. #define UNLINK unlnk
  2124. I32 unlnk (char*);
  2125. #else
  2126. #define UNLINK PerlLIO_unlink
  2127. #endif
  2128.  
  2129. #ifndef HAS_SETREUID
  2130. #  ifdef HAS_SETRESUID
  2131. #    define setreuid(r,e) setresuid(r,e,(Uid_t)-1)
  2132. #    define HAS_SETREUID
  2133. #  endif
  2134. #endif
  2135. #ifndef HAS_SETREGID
  2136. #  ifdef HAS_SETRESGID
  2137. #    define setregid(r,e) setresgid(r,e,(Gid_t)-1)
  2138. #    define HAS_SETREGID
  2139. #  endif
  2140. #endif
  2141.  
  2142. /* Sighandler_t defined in iperlsys.h */
  2143.  
  2144. #ifdef HAS_SIGACTION
  2145. typedef struct sigaction Sigsave_t;
  2146. #else
  2147. typedef Sighandler_t Sigsave_t;
  2148. #endif
  2149.  
  2150. #define SCAN_DEF 0
  2151. #define SCAN_TR 1
  2152. #define SCAN_REPL 2
  2153.  
  2154. #ifdef DEBUGGING
  2155. # ifndef register
  2156. #  define register
  2157. # endif
  2158. # define PAD_SV(po) pad_sv(po)
  2159. # define RUNOPS_DEFAULT Perl_runops_debug
  2160. #else
  2161. # define PAD_SV(po) PL_curpad[po]
  2162. # define RUNOPS_DEFAULT Perl_runops_standard
  2163. #endif
  2164.  
  2165. #ifdef MYMALLOC
  2166. #  ifdef MUTEX_INIT_CALLS_MALLOC
  2167. #    define MALLOC_INIT                    \
  2168.     STMT_START {                    \
  2169.         PL_malloc_mutex = NULL;            \
  2170.         MUTEX_INIT(&PL_malloc_mutex);        \
  2171.     } STMT_END
  2172. #    define MALLOC_TERM                    \
  2173.     STMT_START {                    \
  2174.         perl_mutex tmp = PL_malloc_mutex;    \
  2175.         PL_malloc_mutex = NULL;            \
  2176.         MUTEX_DESTROY(&tmp);            \
  2177.     } STMT_END
  2178. #  else
  2179. #    define MALLOC_INIT MUTEX_INIT(&PL_malloc_mutex)
  2180. #    define MALLOC_TERM MUTEX_DESTROY(&PL_malloc_mutex)
  2181. #  endif
  2182. #else
  2183. #  define MALLOC_INIT
  2184. #  define MALLOC_TERM
  2185. #endif
  2186.  
  2187.  
  2188. typedef int (CPERLscope(*runops_proc_t)) (pTHX);
  2189. typedef OP* (CPERLscope(*PPADDR_t)[]) (pTHX);
  2190.  
  2191. /* _ (for $_) must be first in the following list (DEFSV requires it) */
  2192. #define THREADSV_NAMES "_123456789&`'+/.,\\\";^-%=|~:\001\005!@"
  2193.  
  2194. /* NeXT has problems with crt0.o globals */
  2195. #if defined(__DYNAMIC__) && \
  2196.     (defined(NeXT) || defined(__NeXT__) || defined(__APPLE__))
  2197. #  if defined(NeXT) || defined(__NeXT)
  2198. #    include <mach-o/dyld.h>
  2199. #    define environ (*environ_pointer)
  2200. EXT char *** environ_pointer;
  2201. #  else
  2202. #    if defined(__APPLE__)
  2203. #      include <crt_externs.h>    /* for the env array */
  2204. #      define environ (*_NSGetEnviron())
  2205. #    endif
  2206. #  endif
  2207. #else
  2208.    /* VMS and some other platforms don't use the environ array */
  2209. #  if !defined(VMS)
  2210. #    if !defined(DONT_DECLARE_STD) || \
  2211.         (defined(__svr4__) && defined(__GNUC__) && defined(sun)) || \
  2212.         defined(__sgi) || \
  2213.         defined(__DGUX) || defined(EPOC)
  2214. extern char **    environ;    /* environment variables supplied via exec */
  2215. #    endif
  2216. #  endif
  2217. #endif
  2218.  
  2219. START_EXTERN_C
  2220.  
  2221. /* handy constants */
  2222. EXTCONST char PL_warn_uninit[]
  2223.   INIT("Use of uninitialized value%s%s");
  2224. EXTCONST char PL_warn_nosemi[]
  2225.   INIT("Semicolon seems to be missing");
  2226. EXTCONST char PL_warn_reserved[]
  2227.   INIT("Unquoted string \"%s\" may clash with future reserved word");
  2228. EXTCONST char PL_warn_nl[]
  2229.   INIT("Unsuccessful %s on filename containing newline");
  2230. EXTCONST char PL_no_wrongref[]
  2231.   INIT("Can't use %s ref as %s ref");
  2232. EXTCONST char PL_no_symref[]
  2233.   INIT("Can't use string (\"%.32s\") as %s ref while \"strict refs\" in use");
  2234. EXTCONST char PL_no_usym[]
  2235.   INIT("Can't use an undefined value as %s reference");
  2236. EXTCONST char PL_no_aelem[]
  2237.   INIT("Modification of non-creatable array value attempted, subscript %d");
  2238. EXTCONST char PL_no_helem[]
  2239.   INIT("Modification of non-creatable hash value attempted, subscript \"%s\"");
  2240. EXTCONST char PL_no_modify[]
  2241.   INIT("Modification of a read-only value attempted");
  2242. EXTCONST char PL_no_mem[]
  2243.   INIT("Out of memory!\n");
  2244. EXTCONST char PL_no_security[]
  2245.   INIT("Insecure dependency in %s%s");
  2246. EXTCONST char PL_no_sock_func[]
  2247.   INIT("Unsupported socket function \"%s\" called");
  2248. EXTCONST char PL_no_dir_func[]
  2249.   INIT("Unsupported directory function \"%s\" called");
  2250. EXTCONST char PL_no_func[]
  2251.   INIT("The %s function is unimplemented");
  2252. EXTCONST char PL_no_myglob[]
  2253.   INIT("\"my\" variable %s can't be in a package");
  2254.  
  2255. EXTCONST char PL_uuemap[65]
  2256.   INIT("`!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_");
  2257.  
  2258.  
  2259. #ifdef DOINIT
  2260. EXT char *PL_sig_name[] = { SIG_NAME };
  2261. EXT int   PL_sig_num[]  = { SIG_NUM };
  2262. #else
  2263. EXT char *PL_sig_name[];
  2264. EXT int   PL_sig_num[];
  2265. #endif
  2266.  
  2267. /* fast case folding tables */
  2268.  
  2269. #ifdef DOINIT
  2270. #ifdef EBCDIC
  2271. EXT unsigned char PL_fold[] = { /* fast EBCDIC case folding table */
  2272.     0,      1,      2,      3,      4,      5,      6,      7,
  2273.     8,      9,      10,     11,     12,     13,     14,     15,
  2274.     16,     17,     18,     19,     20,     21,     22,     23,
  2275.     24,     25,     26,     27,     28,     29,     30,     31,
  2276.     32,     33,     34,     35,     36,     37,     38,     39,
  2277.     40,     41,     42,     43,     44,     45,     46,     47,
  2278.     48,     49,     50,     51,     52,     53,     54,     55,
  2279.     56,     57,     58,     59,     60,     61,     62,     63,
  2280.     64,     65,     66,     67,     68,     69,     70,     71,
  2281.     72,     73,     74,     75,     76,     77,     78,     79,
  2282.     80,     81,     82,     83,     84,     85,     86,     87,
  2283.     88,     89,     90,     91,     92,     93,     94,     95,
  2284.     96,     97,     98,     99,     100,    101,    102,    103,
  2285.     104,    105,    106,    107,    108,    109,    110,    111,
  2286.     112,    113,    114,    115,    116,    117,    118,    119,
  2287.     120,    121,    122,    123,    124,    125,    126,    127,
  2288.     128,    'A',    'B',    'C',    'D',    'E',    'F',    'G',
  2289.     'H',    'I',    138,    139,    140,    141,    142,    143,
  2290.     144,    'J',    'K',    'L',    'M',    'N',    'O',    'P',
  2291.     'Q',    'R',    154,    155,    156,    157,    158,    159,
  2292.     160,    161,    'S',    'T',    'U',    'V',    'W',    'X',
  2293.     'Y',    'Z',    170,    171,    172,    173,    174,    175,
  2294.     176,    177,    178,    179,    180,    181,    182,    183,
  2295.     184,    185,    186,    187,    188,    189,    190,    191,
  2296.     192,    'a',    'b',    'c',    'd',    'e',    'f',    'g',
  2297.     'h',    'i',    202,    203,    204,    205,    206,    207,
  2298.     208,    'j',    'k',    'l',    'm',    'n',    'o',    'p',
  2299.     'q',    'r',    218,    219,    220,    221,    222,    223,
  2300.     224,    225,    's',    't',    'u',    'v',    'w',    'x',
  2301.     'y',    'z',    234,    235,    236,    237,    238,    239,
  2302.     240,    241,    242,    243,    244,    245,    246,    247,
  2303.     248,    249,    250,    251,    252,    253,    254,    255
  2304. };
  2305. #else   /* ascii rather than ebcdic */
  2306. EXTCONST  unsigned char PL_fold[] = {
  2307.     0,    1,    2,    3,    4,    5,    6,    7,
  2308.     8,    9,    10,    11,    12,    13,    14,    15,
  2309.     16,    17,    18,    19,    20,    21,    22,    23,
  2310.     24,    25,    26,    27,    28,    29,    30,    31,
  2311.     32,    33,    34,    35,    36,    37,    38,    39,
  2312.     40,    41,    42,    43,    44,    45,    46,    47,
  2313.     48,    49,    50,    51,    52,    53,    54,    55,
  2314.     56,    57,    58,    59,    60,    61,    62,    63,
  2315.     64,    'a',    'b',    'c',    'd',    'e',    'f',    'g',
  2316.     'h',    'i',    'j',    'k',    'l',    'm',    'n',    'o',
  2317.     'p',    'q',    'r',    's',    't',    'u',    'v',    'w',
  2318.     'x',    'y',    'z',    91,    92,    93,    94,    95,
  2319.     96,    'A',    'B',    'C',    'D',    'E',    'F',    'G',
  2320.     'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
  2321.     'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',
  2322.     'X',    'Y',    'Z',    123,    124,    125,    126,    127,
  2323.     128,    129,    130,    131,    132,    133,    134,    135,
  2324.     136,    137,    138,    139,    140,    141,    142,    143,
  2325.     144,    145,    146,    147,    148,    149,    150,    151,
  2326.     152,    153,    154,    155,    156,    157,    158,    159,
  2327.     160,    161,    162,    163,    164,    165,    166,    167,
  2328.     168,    169,    170,    171,    172,    173,    174,    175,
  2329.     176,    177,    178,    179,    180,    181,    182,    183,
  2330.     184,    185,    186,    187,    188,    189,    190,    191,
  2331.     192,    193,    194,    195,    196,    197,    198,    199,
  2332.     200,    201,    202,    203,    204,    205,    206,    207,
  2333.     208,    209,    210,    211,    212,    213,    214,    215,
  2334.     216,    217,    218,    219,    220,    221,    222,    223,    
  2335.     224,    225,    226,    227,    228,    229,    230,    231,
  2336.     232,    233,    234,    235,    236,    237,    238,    239,
  2337.     240,    241,    242,    243,    244,    245,    246,    247,
  2338.     248,    249,    250,    251,    252,    253,    254,    255
  2339. };
  2340. #endif  /* !EBCDIC */
  2341. #else
  2342. EXTCONST unsigned char PL_fold[];
  2343. #endif
  2344.  
  2345. #ifdef DOINIT
  2346. EXT unsigned char PL_fold_locale[] = {
  2347.     0,    1,    2,    3,    4,    5,    6,    7,
  2348.     8,    9,    10,    11,    12,    13,    14,    15,
  2349.     16,    17,    18,    19,    20,    21,    22,    23,
  2350.     24,    25,    26,    27,    28,    29,    30,    31,
  2351.     32,    33,    34,    35,    36,    37,    38,    39,
  2352.     40,    41,    42,    43,    44,    45,    46,    47,
  2353.     48,    49,    50,    51,    52,    53,    54,    55,
  2354.     56,    57,    58,    59,    60,    61,    62,    63,
  2355.     64,    'a',    'b',    'c',    'd',    'e',    'f',    'g',
  2356.     'h',    'i',    'j',    'k',    'l',    'm',    'n',    'o',
  2357.     'p',    'q',    'r',    's',    't',    'u',    'v',    'w',
  2358.     'x',    'y',    'z',    91,    92,    93,    94,    95,
  2359.     96,    'A',    'B',    'C',    'D',    'E',    'F',    'G',
  2360.     'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
  2361.     'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',
  2362.     'X',    'Y',    'Z',    123,    124,    125,    126,    127,
  2363.     128,    129,    130,    131,    132,    133,    134,    135,
  2364.     136,    137,    138,    139,    140,    141,    142,    143,
  2365.     144,    145,    146,    147,    148,    149,    150,    151,
  2366.     152,    153,    154,    155,    156,    157,    158,    159,
  2367.     160,    161,    162,    163,    164,    165,    166,    167,
  2368.     168,    169,    170,    171,    172,    173,    174,    175,
  2369.     176,    177,    178,    179,    180,    181,    182,    183,
  2370.     184,    185,    186,    187,    188,    189,    190,    191,
  2371.     192,    193,    194,    195,    196,    197,    198,    199,
  2372.     200,    201,    202,    203,    204,    205,    206,    207,
  2373.     208,    209,    210,    211,    212,    213,    214,    215,
  2374.     216,    217,    218,    219,    220,    221,    222,    223,    
  2375.     224,    225,    226,    227,    228,    229,    230,    231,
  2376.     232,    233,    234,    235,    236,    237,    238,    239,
  2377.     240,    241,    242,    243,    244,    245,    246,    247,
  2378.     248,    249,    250,    251,    252,    253,    254,    255
  2379. };
  2380. #else
  2381. EXT unsigned char PL_fold_locale[];
  2382. #endif
  2383.  
  2384. #ifdef DOINIT
  2385. #ifdef EBCDIC
  2386. EXT unsigned char PL_freq[] = {/* EBCDIC frequencies for mixed English/C */
  2387.     1,      2,      84,     151,    154,    155,    156,    157,
  2388.     165,    246,    250,    3,      158,    7,      18,     29,
  2389.     40,     51,     62,     73,     85,     96,     107,    118,
  2390.     129,    140,    147,    148,    149,    150,    152,    153,
  2391.     255,      6,      8,      9,     10,     11,     12,     13,
  2392.      14,     15,     24,     25,     26,     27,     28,    226,
  2393.      29,     30,     31,     32,     33,     43,     44,     45,
  2394.      46,     47,     48,     49,     50,     76,     77,     78,
  2395.      79,     80,     81,     82,     83,     84,     85,     86,
  2396.      87,     94,     95,    234,    181,    233,    187,    190,
  2397.     180,     96,     97,     98,     99,    100,    101,    102,
  2398.     104,    112,    182,    174,    236,    232,    229,    103,
  2399.     228,    226,    114,    115,    116,    117,    118,    119,
  2400.     120,    121,    122,    235,    176,    230,    194,    162,
  2401.     130,    131,    132,    133,    134,    135,    136,    137,
  2402.     138,    139,    201,    205,    163,    217,    220,    224,
  2403.     5,      248,    227,    244,    242,    255,    241,    231,
  2404.     240,    253,    16,     197,    19,     20,     21,     187,
  2405.     23,     169,    210,    245,    237,    249,    247,    239,
  2406.     168,    252,    34,     196,    36,     37,     38,     39,
  2407.     41,     42,     251,    254,    238,    223,    221,    213,
  2408.     225,    177,    52,     53,     54,     55,     56,     57,
  2409.     58,     59,     60,     61,     63,     64,     65,     66,
  2410.     67,     68,     69,     70,     71,     72,     74,     75,
  2411.     205,    208,    186,    202,    200,    218,    198,    179,
  2412.     178,    214,    88,     89,     90,     91,     92,     93,
  2413.     217,    166,    170,    207,    199,    209,    206,    204,
  2414.     160,    212,    105,    106,    108,    109,    110,    111,
  2415.     203,    113,    216,    215,    192,    175,    193,    243,
  2416.     172,    161,    123,    124,    125,    126,    127,    128,
  2417.     222,    219,    211,    195,    188,    193,    185,    184,
  2418.     191,    183,    141,    142,    143,    144,    145,    146
  2419. };
  2420. #else  /* ascii rather than ebcdic */
  2421. EXTCONST unsigned char PL_freq[] = {    /* letter frequencies for mixed English/C */
  2422.     1,    2,    84,    151,    154,    155,    156,    157,
  2423.     165,    246,    250,    3,    158,    7,    18,    29,
  2424.     40,    51,    62,    73,    85,    96,    107,    118,
  2425.     129,    140,    147,    148,    149,    150,    152,    153,
  2426.     255,    182,    224,    205,    174,    176,    180,    217,
  2427.     233,    232,    236,    187,    235,    228,    234,    226,
  2428.     222,    219,    211,    195,    188,    193,    185,    184,
  2429.     191,    183,    201,    229,    181,    220,    194,    162,
  2430.     163,    208,    186,    202,    200,    218,    198,    179,
  2431.     178,    214,    166,    170,    207,    199,    209,    206,
  2432.     204,    160,    212,    216,    215,    192,    175,    173,
  2433.     243,    172,    161,    190,    203,    189,    164,    230,
  2434.     167,    248,    227,    244,    242,    255,    241,    231,
  2435.     240,    253,    169,    210,    245,    237,    249,    247,
  2436.     239,    168,    252,    251,    254,    238,    223,    221,
  2437.     213,    225,    177,    197,    171,    196,    159,    4,
  2438.     5,    6,    8,    9,    10,    11,    12,    13,
  2439.     14,    15,    16,    17,    19,    20,    21,    22,
  2440.     23,    24,    25,    26,    27,    28,    30,    31,
  2441.     32,    33,    34,    35,    36,    37,    38,    39,
  2442.     41,    42,    43,    44,    45,    46,    47,    48,
  2443.     49,    50,    52,    53,    54,    55,    56,    57,
  2444.     58,    59,    60,    61,    63,    64,    65,    66,
  2445.     67,    68,    69,    70,    71,    72,    74,    75,
  2446.     76,    77,    78,    79,    80,    81,    82,    83,
  2447.     86,    87,    88,    89,    90,    91,    92,    93,
  2448.     94,    95,    97,    98,    99,    100,    101,    102,
  2449.     103,    104,    105,    106,    108,    109,    110,    111,
  2450.     112,    113,    114,    115,    116,    117,    119,    120,
  2451.     121,    122,    123,    124,    125,    126,    127,    128,
  2452.     130,    131,    132,    133,    134,    135,    136,    137,
  2453.     138,    139,    141,    142,    143,    144,    145,    146
  2454. };
  2455. #endif
  2456. #else
  2457. EXTCONST unsigned char PL_freq[];
  2458. #endif
  2459.  
  2460. #ifdef DEBUGGING
  2461. #ifdef DOINIT
  2462. EXTCONST char* PL_block_type[] = {
  2463.     "NULL",
  2464.     "SUB",
  2465.     "EVAL",
  2466.     "LOOP",
  2467.     "SUBST",
  2468.     "BLOCK",
  2469. };
  2470. #else
  2471. EXTCONST char* PL_block_type[];
  2472. #endif
  2473. #endif
  2474.  
  2475. END_EXTERN_C
  2476.  
  2477. /*****************************************************************************/
  2478. /* This lexer/parser stuff is currently global since yacc is hard to reenter */
  2479. /*****************************************************************************/
  2480. /* XXX This needs to be revisited, since BEGIN makes yacc re-enter... */
  2481.  
  2482. #include "perly.h"
  2483.  
  2484. #define LEX_NOTPARSING        11    /* borrowed from toke.c */
  2485.  
  2486. typedef enum {
  2487.     XOPERATOR,
  2488.     XTERM,
  2489.     XREF,
  2490.     XSTATE,
  2491.     XBLOCK,
  2492.     XATTRBLOCK,
  2493.     XATTRTERM,
  2494.     XTERMBLOCK
  2495. } expectation;
  2496.  
  2497. enum {        /* pass one of these to get_vtbl */
  2498.     want_vtbl_sv,
  2499.     want_vtbl_env,
  2500.     want_vtbl_envelem,
  2501.     want_vtbl_sig,
  2502.     want_vtbl_sigelem,
  2503.     want_vtbl_pack,
  2504.     want_vtbl_packelem,
  2505.     want_vtbl_dbline,
  2506.     want_vtbl_isa,
  2507.     want_vtbl_isaelem,
  2508.     want_vtbl_arylen,
  2509.     want_vtbl_glob,
  2510.     want_vtbl_mglob,
  2511.     want_vtbl_nkeys,
  2512.     want_vtbl_taint,
  2513.     want_vtbl_substr,
  2514.     want_vtbl_vec,
  2515.     want_vtbl_pos,
  2516.     want_vtbl_bm,
  2517.     want_vtbl_fm,
  2518.     want_vtbl_uvar,
  2519.     want_vtbl_defelem,
  2520.     want_vtbl_regexp,
  2521.     want_vtbl_collxfrm,
  2522.     want_vtbl_amagic,
  2523.     want_vtbl_amagicelem,
  2524. #ifdef USE_THREADS
  2525.     want_vtbl_mutex,
  2526. #endif
  2527.     want_vtbl_regdata,
  2528.     want_vtbl_regdatum,
  2529.     want_vtbl_backref
  2530. };
  2531.  
  2532.                 /* Note: the lowest 8 bits are reserved for
  2533.                    stuffing into op->op_private */
  2534. #define HINT_PRIVATE_MASK    0x000000ff
  2535. #define HINT_INTEGER        0x00000001
  2536. #define HINT_STRICT_REFS    0x00000002
  2537. /* #define HINT_notused4    0x00000004 */
  2538. #define HINT_BYTE        0x00000008
  2539. /* #define HINT_notused10    0x00000010 */
  2540.                 /* Note: 20,40,80 used for NATIVE_HINTS */
  2541.  
  2542. #define HINT_BLOCK_SCOPE    0x00000100
  2543. #define HINT_STRICT_SUBS    0x00000200
  2544. #define HINT_STRICT_VARS    0x00000400
  2545. #define HINT_LOCALE        0x00000800
  2546.  
  2547. #define HINT_NEW_INTEGER    0x00001000
  2548. #define HINT_NEW_FLOAT        0x00002000
  2549. #define HINT_NEW_BINARY        0x00004000
  2550. #define HINT_NEW_STRING        0x00008000
  2551. #define HINT_NEW_RE        0x00010000
  2552. #define HINT_LOCALIZE_HH    0x00020000 /* %^H needs to be copied */
  2553.  
  2554. #define HINT_RE_TAINT        0x00100000
  2555. #define HINT_RE_EVAL        0x00200000
  2556.  
  2557. #define HINT_FILETEST_ACCESS    0x00400000
  2558. #define HINT_UTF8        0x00800000
  2559.  
  2560. /* Various states of an input record separator SV (rs, nrs) */
  2561. #define RsSNARF(sv)   (! SvOK(sv))
  2562. #define RsSIMPLE(sv)  (SvOK(sv) && (! SvPOK(sv) || SvCUR(sv)))
  2563. #define RsPARA(sv)    (SvPOK(sv) && ! SvCUR(sv))
  2564. #define RsRECORD(sv)  (SvROK(sv) && (SvIV(SvRV(sv)) > 0))
  2565.  
  2566. /* Enable variables which are pointers to functions */
  2567. typedef regexp*(CPERLscope(*regcomp_t)) (pTHX_ char* exp, char* xend, PMOP* pm);
  2568. typedef I32 (CPERLscope(*regexec_t)) (pTHX_ regexp* prog, char* stringarg,
  2569.                       char* strend, char* strbeg, I32 minend,
  2570.                       SV* screamer, void* data, U32 flags);
  2571. typedef char* (CPERLscope(*re_intuit_start_t)) (pTHX_ regexp *prog, SV *sv,
  2572.                         char *strpos, char *strend,
  2573.                         U32 flags,
  2574.                         struct re_scream_pos_data_s *d);
  2575. typedef SV*    (CPERLscope(*re_intuit_string_t)) (pTHX_ regexp *prog);
  2576. typedef void    (CPERLscope(*regfree_t)) (pTHX_ struct regexp* r);
  2577.  
  2578. #ifdef USE_PURE_BISON
  2579. int Perl_yylex(pTHX_ YYSTYPE *lvalp, int *lcharp);
  2580. #endif
  2581.  
  2582. typedef void (*DESTRUCTORFUNC_NOCONTEXT_t) (void*);
  2583. typedef void (*DESTRUCTORFUNC_t) (pTHXo_ void*);
  2584. typedef void (*SVFUNC_t) (pTHXo_ SV*);
  2585. typedef I32  (*SVCOMPARE_t) (pTHXo_ SV*, SV*);
  2586. typedef void (*XSINIT_t) (pTHXo);
  2587. typedef void (*ATEXIT_t) (pTHXo_ void*);
  2588. typedef void (*XSUBADDR_t) (pTHXo_ CV *);
  2589.  
  2590. /* Set up PERLVAR macros for populating structs */
  2591. #define PERLVAR(var,type) type var;
  2592. #define PERLVARA(var,n,type) type var[n];
  2593. #define PERLVARI(var,type,init) type var;
  2594. #define PERLVARIC(var,type,init) type var;
  2595.  
  2596. /* Interpreter exitlist entry */
  2597. typedef struct exitlistentry {
  2598.     void (*fn) (pTHXo_ void*);
  2599.     void *ptr;
  2600. } PerlExitListEntry;
  2601.  
  2602. #ifdef PERL_GLOBAL_STRUCT
  2603. struct perl_vars {
  2604. #  include "perlvars.h"
  2605. };
  2606.  
  2607. #  ifdef PERL_CORE
  2608. EXT struct perl_vars PL_Vars;
  2609. EXT struct perl_vars *PL_VarsPtr INIT(&PL_Vars);
  2610. #  else /* PERL_CORE */
  2611. #    if !defined(__GNUC__) || !defined(WIN32)
  2612. EXT
  2613. #    endif /* WIN32 */
  2614. struct perl_vars *PL_VarsPtr;
  2615. #    define PL_Vars (*((PL_VarsPtr) \
  2616.                ? PL_VarsPtr : (PL_VarsPtr = Perl_GetVars(aTHX))))
  2617. #  endif /* PERL_CORE */
  2618. #endif /* PERL_GLOBAL_STRUCT */
  2619.  
  2620. #if defined(MULTIPLICITY) || defined(PERL_OBJECT)
  2621. /* If we have multiple interpreters define a struct 
  2622.    holding variables which must be per-interpreter
  2623.    If we don't have threads anything that would have 
  2624.    be per-thread is per-interpreter.
  2625. */
  2626.  
  2627. struct interpreter {
  2628. #  ifndef USE_THREADS
  2629. #    include "thrdvar.h"
  2630. #  endif
  2631. #  include "intrpvar.h"
  2632. /*
  2633.  * The following is a buffer where new variables must
  2634.  * be defined to maintain binary compatibility with PERL_OBJECT
  2635.  */
  2636. PERLVARA(object_compatibility,30,    char)
  2637. };
  2638.  
  2639. #else
  2640. struct interpreter {
  2641.     char broiled;
  2642. };
  2643. #endif /* MULTIPLICITY || PERL_OBJECT */
  2644.  
  2645. #ifdef USE_THREADS
  2646. /* If we have threads define a struct with all the variables
  2647.  * that have to be per-thread
  2648.  */
  2649.  
  2650.  
  2651. struct perl_thread {
  2652. #include "thrdvar.h"
  2653. };
  2654.  
  2655. typedef struct perl_thread *Thread;
  2656.  
  2657. #else
  2658. typedef void *Thread;
  2659. #endif
  2660.  
  2661. /* Done with PERLVAR macros for now ... */
  2662. #undef PERLVAR
  2663. #undef PERLVARA
  2664. #undef PERLVARI
  2665. #undef PERLVARIC
  2666.  
  2667. #include "thread.h"
  2668. #include "pp.h"
  2669.  
  2670. #ifndef PERL_CALLCONV
  2671. #  define PERL_CALLCONV
  2672. #endif 
  2673.  
  2674. #ifndef NEXT30_NO_ATTRIBUTE
  2675. #  ifndef HASATTRIBUTE       /* disable GNU-cc attribute checking? */
  2676. #    ifdef  __attribute__      /* Avoid possible redefinition errors */
  2677. #      undef  __attribute__
  2678. #    endif
  2679. #    define __attribute__(attr)
  2680. #  endif
  2681. #endif
  2682.  
  2683. #ifdef PERL_OBJECT
  2684. #  define PERL_DECL_PROT
  2685. #endif
  2686.  
  2687. #undef PERL_CKDEF
  2688. #undef PERL_PPDEF
  2689. #define PERL_CKDEF(s)    OP *s (pTHX_ OP *o);
  2690. #define PERL_PPDEF(s)    OP *s (pTHX);
  2691.  
  2692. #include "proto.h"
  2693.  
  2694. #ifdef PERL_OBJECT
  2695. #  undef PERL_DECL_PROT
  2696. #endif
  2697.  
  2698. #ifndef PERL_OBJECT
  2699. /* this has structure inits, so it cannot be included before here */
  2700. #  include "opcode.h"
  2701. #endif
  2702.  
  2703. /* The following must follow proto.h as #defines mess up syntax */
  2704.  
  2705. #if !defined(PERL_FOR_X2P)
  2706. #  include "embedvar.h"
  2707. #endif
  2708.  
  2709. /* Now include all the 'global' variables 
  2710.  * If we don't have threads or multiple interpreters
  2711.  * these include variables that would have been their struct-s 
  2712.  */
  2713.                          
  2714. #define PERLVAR(var,type) EXT type PL_##var;
  2715. #define PERLVARA(var,n,type) EXT type PL_##var[n];
  2716. #define PERLVARI(var,type,init) EXT type  PL_##var INIT(init);
  2717. #define PERLVARIC(var,type,init) EXTCONST type PL_##var INIT(init);
  2718.  
  2719. #if !defined(MULTIPLICITY) && !defined(PERL_OBJECT)
  2720. START_EXTERN_C
  2721. #  include "intrpvar.h"
  2722. #  ifndef USE_THREADS
  2723. #    include "thrdvar.h"
  2724. #  endif
  2725. END_EXTERN_C
  2726. #endif
  2727.  
  2728. #ifdef PERL_OBJECT
  2729. #  include "embed.h"
  2730.  
  2731. #  ifdef DOINIT
  2732. #    include "INTERN.h"
  2733. #  else
  2734. #    include "EXTERN.h"
  2735. #  endif
  2736.  
  2737. /* this has structure inits, so it cannot be included before here */
  2738. #  include "opcode.h"
  2739.  
  2740. #else
  2741. #  if defined(WIN32)
  2742. #    include "embed.h"
  2743. #  endif
  2744. #endif  /* PERL_OBJECT */
  2745.  
  2746. #ifndef PERL_GLOBAL_STRUCT
  2747. START_EXTERN_C
  2748.  
  2749. #  include "perlvars.h"
  2750.  
  2751. END_EXTERN_C
  2752. #endif
  2753.  
  2754. #undef PERLVAR
  2755. #undef PERLVARA
  2756. #undef PERLVARI
  2757. #undef PERLVARIC
  2758.  
  2759. START_EXTERN_C
  2760.  
  2761. #ifdef DOINIT
  2762.  
  2763. EXT MGVTBL PL_vtbl_sv =    {MEMBER_TO_FPTR(Perl_magic_get),
  2764.                 MEMBER_TO_FPTR(Perl_magic_set),
  2765.                     MEMBER_TO_FPTR(Perl_magic_len),
  2766.                         0,    0};
  2767. EXT MGVTBL PL_vtbl_env =    {0,    MEMBER_TO_FPTR(Perl_magic_set_all_env),
  2768.                 0,    MEMBER_TO_FPTR(Perl_magic_clear_all_env),
  2769.                             0};
  2770. EXT MGVTBL PL_vtbl_envelem =    {0,    MEMBER_TO_FPTR(Perl_magic_setenv),
  2771.                     0,    MEMBER_TO_FPTR(Perl_magic_clearenv),
  2772.                             0};
  2773. EXT MGVTBL PL_vtbl_sig =    {0,    0,         0, 0, 0};
  2774. EXT MGVTBL PL_vtbl_sigelem =    {MEMBER_TO_FPTR(Perl_magic_getsig),
  2775.                     MEMBER_TO_FPTR(Perl_magic_setsig),
  2776.                     0,    MEMBER_TO_FPTR(Perl_magic_clearsig),
  2777.                             0};
  2778. EXT MGVTBL PL_vtbl_pack =    {0,    0,    MEMBER_TO_FPTR(Perl_magic_sizepack),    MEMBER_TO_FPTR(Perl_magic_wipepack),
  2779.                             0};
  2780. EXT MGVTBL PL_vtbl_packelem =    {MEMBER_TO_FPTR(Perl_magic_getpack),
  2781.                 MEMBER_TO_FPTR(Perl_magic_setpack),
  2782.                     0,    MEMBER_TO_FPTR(Perl_magic_clearpack),
  2783.                             0};
  2784. EXT MGVTBL PL_vtbl_dbline =    {0,    MEMBER_TO_FPTR(Perl_magic_setdbline),
  2785.                     0,    0,    0};
  2786. EXT MGVTBL PL_vtbl_isa =    {0,    MEMBER_TO_FPTR(Perl_magic_setisa),
  2787.                     0,    MEMBER_TO_FPTR(Perl_magic_setisa),
  2788.                             0};
  2789. EXT MGVTBL PL_vtbl_isaelem =    {0,    MEMBER_TO_FPTR(Perl_magic_setisa),
  2790.                     0,    0,    0};
  2791. EXT MGVTBL PL_vtbl_arylen =    {MEMBER_TO_FPTR(Perl_magic_getarylen),
  2792.                 MEMBER_TO_FPTR(Perl_magic_setarylen),
  2793.                     0,    0,    0};
  2794. EXT MGVTBL PL_vtbl_glob =    {MEMBER_TO_FPTR(Perl_magic_getglob),
  2795.                 MEMBER_TO_FPTR(Perl_magic_setglob),
  2796.                     0,    0,    0};
  2797. EXT MGVTBL PL_vtbl_mglob =    {0,    MEMBER_TO_FPTR(Perl_magic_setmglob),
  2798.                     0,    0,    0};
  2799. EXT MGVTBL PL_vtbl_nkeys =    {MEMBER_TO_FPTR(Perl_magic_getnkeys),
  2800.                 MEMBER_TO_FPTR(Perl_magic_setnkeys),
  2801.                     0,    0,    0};
  2802. EXT MGVTBL PL_vtbl_taint =    {MEMBER_TO_FPTR(Perl_magic_gettaint),MEMBER_TO_FPTR(Perl_magic_settaint),
  2803.                     0,    0,    0};
  2804. EXT MGVTBL PL_vtbl_substr =    {MEMBER_TO_FPTR(Perl_magic_getsubstr), MEMBER_TO_FPTR(Perl_magic_setsubstr),
  2805.                     0,    0,    0};
  2806. EXT MGVTBL PL_vtbl_vec =    {MEMBER_TO_FPTR(Perl_magic_getvec),
  2807.                 MEMBER_TO_FPTR(Perl_magic_setvec),
  2808.                     0,    0,    0};
  2809. EXT MGVTBL PL_vtbl_pos =    {MEMBER_TO_FPTR(Perl_magic_getpos),
  2810.                 MEMBER_TO_FPTR(Perl_magic_setpos),
  2811.                     0,    0,    0};
  2812. EXT MGVTBL PL_vtbl_bm =    {0,    MEMBER_TO_FPTR(Perl_magic_setbm),
  2813.                     0,    0,    0};
  2814. EXT MGVTBL PL_vtbl_fm =    {0,    MEMBER_TO_FPTR(Perl_magic_setfm),
  2815.                     0,    0,    0};
  2816. EXT MGVTBL PL_vtbl_uvar =    {MEMBER_TO_FPTR(Perl_magic_getuvar),
  2817.                 MEMBER_TO_FPTR(Perl_magic_setuvar),
  2818.                     0,    0,    0};
  2819. #ifdef USE_THREADS
  2820. EXT MGVTBL PL_vtbl_mutex =    {0,    0,    0,    0,    MEMBER_TO_FPTR(Perl_magic_mutexfree)};
  2821. #endif /* USE_THREADS */
  2822. EXT MGVTBL PL_vtbl_defelem = {MEMBER_TO_FPTR(Perl_magic_getdefelem),MEMBER_TO_FPTR(Perl_magic_setdefelem),
  2823.                     0,    0,    0};
  2824.  
  2825. EXT MGVTBL PL_vtbl_regexp = {0,0,0,0, MEMBER_TO_FPTR(Perl_magic_freeregexp)};
  2826. EXT MGVTBL PL_vtbl_regdata = {0, 0, MEMBER_TO_FPTR(Perl_magic_regdata_cnt), 0, 0};
  2827. EXT MGVTBL PL_vtbl_regdatum = {MEMBER_TO_FPTR(Perl_magic_regdatum_get), 0, 0, 0, 0};
  2828.  
  2829. #ifdef USE_LOCALE_COLLATE
  2830. EXT MGVTBL PL_vtbl_collxfrm = {0,
  2831.                 MEMBER_TO_FPTR(Perl_magic_setcollxfrm),
  2832.                     0,    0,    0};
  2833. #endif
  2834.  
  2835. EXT MGVTBL PL_vtbl_amagic =       {0,     MEMBER_TO_FPTR(Perl_magic_setamagic),
  2836.                                         0,      0,      MEMBER_TO_FPTR(Perl_magic_setamagic)};
  2837. EXT MGVTBL PL_vtbl_amagicelem =   {0,     MEMBER_TO_FPTR(Perl_magic_setamagic),
  2838.                                         0,      0,      MEMBER_TO_FPTR(Perl_magic_setamagic)};
  2839.  
  2840. EXT MGVTBL PL_vtbl_backref =       {0,    0,
  2841.                     0,    0,    MEMBER_TO_FPTR(Perl_magic_killbackrefs)};
  2842.  
  2843. #else /* !DOINIT */
  2844.  
  2845. EXT MGVTBL PL_vtbl_sv;
  2846. EXT MGVTBL PL_vtbl_env;
  2847. EXT MGVTBL PL_vtbl_envelem;
  2848. EXT MGVTBL PL_vtbl_sig;
  2849. EXT MGVTBL PL_vtbl_sigelem;
  2850. EXT MGVTBL PL_vtbl_pack;
  2851. EXT MGVTBL PL_vtbl_packelem;
  2852. EXT MGVTBL PL_vtbl_dbline;
  2853. EXT MGVTBL PL_vtbl_isa;
  2854. EXT MGVTBL PL_vtbl_isaelem;
  2855. EXT MGVTBL PL_vtbl_arylen;
  2856. EXT MGVTBL PL_vtbl_glob;
  2857. EXT MGVTBL PL_vtbl_mglob;
  2858. EXT MGVTBL PL_vtbl_nkeys;
  2859. EXT MGVTBL PL_vtbl_taint;
  2860. EXT MGVTBL PL_vtbl_substr;
  2861. EXT MGVTBL PL_vtbl_vec;
  2862. EXT MGVTBL PL_vtbl_pos;
  2863. EXT MGVTBL PL_vtbl_bm;
  2864. EXT MGVTBL PL_vtbl_fm;
  2865. EXT MGVTBL PL_vtbl_uvar;
  2866.  
  2867. #ifdef USE_THREADS
  2868. EXT MGVTBL PL_vtbl_mutex;
  2869. #endif /* USE_THREADS */
  2870.  
  2871. EXT MGVTBL PL_vtbl_defelem;
  2872. EXT MGVTBL PL_vtbl_regexp;
  2873. EXT MGVTBL PL_vtbl_regdata;
  2874. EXT MGVTBL PL_vtbl_regdatum;
  2875.  
  2876. #ifdef USE_LOCALE_COLLATE
  2877. EXT MGVTBL PL_vtbl_collxfrm;
  2878. #endif
  2879.  
  2880. EXT MGVTBL PL_vtbl_amagic;
  2881. EXT MGVTBL PL_vtbl_amagicelem;
  2882.  
  2883. EXT MGVTBL PL_vtbl_backref;
  2884.  
  2885. #endif /* !DOINIT */
  2886.  
  2887. enum {
  2888.   fallback_amg,        abs_amg,
  2889.   bool__amg,   nomethod_amg,
  2890.   string_amg,  numer_amg,
  2891.   add_amg,     add_ass_amg,
  2892.   subtr_amg,   subtr_ass_amg,
  2893.   mult_amg,    mult_ass_amg,
  2894.   div_amg,     div_ass_amg,
  2895.   modulo_amg,  modulo_ass_amg,
  2896.   pow_amg,     pow_ass_amg,
  2897.   lshift_amg,  lshift_ass_amg,
  2898.   rshift_amg,  rshift_ass_amg,
  2899.   band_amg,    band_ass_amg,
  2900.   bor_amg,     bor_ass_amg,
  2901.   bxor_amg,    bxor_ass_amg,
  2902.   lt_amg,      le_amg,
  2903.   gt_amg,      ge_amg,
  2904.   eq_amg,      ne_amg,
  2905.   ncmp_amg,    scmp_amg,
  2906.   slt_amg,     sle_amg,
  2907.   sgt_amg,     sge_amg,
  2908.   seq_amg,     sne_amg,
  2909.   not_amg,     compl_amg,
  2910.   inc_amg,     dec_amg,
  2911.   atan2_amg,   cos_amg,
  2912.   sin_amg,     exp_amg,
  2913.   log_amg,     sqrt_amg,
  2914.   repeat_amg,   repeat_ass_amg,
  2915.   concat_amg,  concat_ass_amg,
  2916.   copy_amg,    neg_amg,
  2917.   to_sv_amg,   to_av_amg,
  2918.   to_hv_amg,   to_gv_amg,
  2919.   to_cv_amg,   iter_amg,    
  2920.   max_amg_code
  2921.   /* Do not leave a trailing comma here.  C9X allows it, C89 doesn't. */
  2922. };
  2923.  
  2924. #define NofAMmeth max_amg_code
  2925.  
  2926. #ifdef DOINIT
  2927. EXTCONST char * PL_AMG_names[NofAMmeth] = {
  2928.   "fallback",    "abs",            /* "fallback" should be the first. */
  2929.   "bool",    "nomethod",
  2930.   "\"\"",    "0+",
  2931.   "+",        "+=",
  2932.   "-",        "-=",
  2933.   "*",        "*=",
  2934.   "/",        "/=",
  2935.   "%",        "%=",
  2936.   "**",        "**=",
  2937.   "<<",        "<<=",
  2938.   ">>",        ">>=",
  2939.   "&",        "&=",
  2940.   "|",        "|=",
  2941.   "^",        "^=",
  2942.   "<",        "<=",
  2943.   ">",        ">=",
  2944.   "==",        "!=",
  2945.   "<=>",    "cmp",
  2946.   "lt",        "le",
  2947.   "gt",        "ge",
  2948.   "eq",        "ne",
  2949.   "!",        "~",
  2950.   "++",        "--",
  2951.   "atan2",    "cos",
  2952.   "sin",    "exp",
  2953.   "log",    "sqrt",
  2954.   "x",        "x=",
  2955.   ".",        ".=",
  2956.   "=",        "neg",
  2957.   "${}",    "@{}",
  2958.   "%{}",    "*{}",
  2959.   "&{}",    "<>",
  2960. };
  2961. #else
  2962. EXTCONST char * PL_AMG_names[NofAMmeth];
  2963. #endif /* def INITAMAGIC */
  2964.  
  2965. END_EXTERN_C
  2966.  
  2967. struct am_table {
  2968.   long was_ok_sub;
  2969.   long was_ok_am;
  2970.   U32 flags;
  2971.   CV* table[NofAMmeth];
  2972.   long fallback;
  2973. };
  2974. struct am_table_short {
  2975.   long was_ok_sub;
  2976.   long was_ok_am;
  2977.   U32 flags;
  2978. };
  2979. typedef struct am_table AMT;
  2980. typedef struct am_table_short AMTS;
  2981.  
  2982. #define AMGfallNEVER    1
  2983. #define AMGfallNO    2
  2984. #define AMGfallYES    3
  2985.  
  2986. #define AMTf_AMAGIC        1
  2987. #define AMT_AMAGIC(amt)        ((amt)->flags & AMTf_AMAGIC)
  2988. #define AMT_AMAGIC_on(amt)    ((amt)->flags |= AMTf_AMAGIC)
  2989. #define AMT_AMAGIC_off(amt)    ((amt)->flags &= ~AMTf_AMAGIC)
  2990.  
  2991.  
  2992. /*
  2993.  * some compilers like to redefine cos et alia as faster
  2994.  * (and less accurate?) versions called F_cos et cetera (Quidquid
  2995.  * latine dictum sit, altum viditur.)  This trick collides with
  2996.  * the Perl overloading (amg).  The following #defines fool both.
  2997.  */
  2998.  
  2999. #ifdef _FASTMATH
  3000. #   ifdef atan2
  3001. #       define F_atan2_amg  atan2_amg
  3002. #   endif
  3003. #   ifdef cos
  3004. #       define F_cos_amg    cos_amg
  3005. #   endif
  3006. #   ifdef exp
  3007. #       define F_exp_amg    exp_amg
  3008. #   endif
  3009. #   ifdef log
  3010. #       define F_log_amg    log_amg
  3011. #   endif
  3012. #   ifdef pow
  3013. #       define F_pow_amg    pow_amg
  3014. #   endif
  3015. #   ifdef sin
  3016. #       define F_sin_amg    sin_amg
  3017. #   endif
  3018. #   ifdef sqrt
  3019. #       define F_sqrt_amg   sqrt_amg
  3020. #   endif
  3021. #endif /* _FASTMATH */
  3022.  
  3023. #define PERLDB_ALL        (PERLDBf_SUB    | PERLDBf_LINE    |    \
  3024.                  PERLDBf_NOOPT    | PERLDBf_INTER    |    \
  3025.                  PERLDBf_SUBLINE| PERLDBf_SINGLE|    \
  3026.                  PERLDBf_NAMEEVAL| PERLDBf_NAMEANON)
  3027.                     /* No _NONAME, _GOTO */
  3028. #define PERLDBf_SUB        0x01    /* Debug sub enter/exit */
  3029. #define PERLDBf_LINE        0x02    /* Keep line # */
  3030. #define PERLDBf_NOOPT        0x04    /* Switch off optimizations */
  3031. #define PERLDBf_INTER        0x08    /* Preserve more data for
  3032.                        later inspections  */
  3033. #define PERLDBf_SUBLINE        0x10    /* Keep subr source lines */
  3034. #define PERLDBf_SINGLE        0x20    /* Start with single-step on */
  3035. #define PERLDBf_NONAME        0x40    /* For _SUB: no name of the subr */
  3036. #define PERLDBf_GOTO        0x80    /* Report goto: call DB::goto */
  3037. #define PERLDBf_NAMEEVAL    0x100    /* Informative names for evals */
  3038. #define PERLDBf_NAMEANON    0x200    /* Informative names for anon subs */
  3039.  
  3040. #define PERLDB_SUB    (PL_perldb && (PL_perldb & PERLDBf_SUB))
  3041. #define PERLDB_LINE    (PL_perldb && (PL_perldb & PERLDBf_LINE))
  3042. #define PERLDB_NOOPT    (PL_perldb && (PL_perldb & PERLDBf_NOOPT))
  3043. #define PERLDB_INTER    (PL_perldb && (PL_perldb & PERLDBf_INTER))
  3044. #define PERLDB_SUBLINE    (PL_perldb && (PL_perldb & PERLDBf_SUBLINE))
  3045. #define PERLDB_SINGLE    (PL_perldb && (PL_perldb & PERLDBf_SINGLE))
  3046. #define PERLDB_SUB_NN    (PL_perldb && (PL_perldb & (PERLDBf_NONAME)))
  3047. #define PERLDB_GOTO    (PL_perldb && (PL_perldb & PERLDBf_GOTO))
  3048. #define PERLDB_NAMEEVAL    (PL_perldb && (PL_perldb & PERLDBf_NAMEEVAL))
  3049. #define PERLDB_NAMEANON    (PL_perldb && (PL_perldb & PERLDBf_NAMEANON))
  3050.  
  3051.  
  3052. #ifdef USE_LOCALE_NUMERIC
  3053.  
  3054. #define SET_NUMERIC_STANDARD() \
  3055.     STMT_START {                \
  3056.     if (! PL_numeric_standard)        \
  3057.         set_numeric_standard();        \
  3058.     } STMT_END
  3059.  
  3060. #define SET_NUMERIC_LOCAL() \
  3061.     STMT_START {                \
  3062.     if (! PL_numeric_local)            \
  3063.         set_numeric_local();        \
  3064.     } STMT_END
  3065.  
  3066. #define IS_NUMERIC_RADIX(c)    \
  3067.     ((PL_hints & HINT_LOCALE) && \
  3068.       PL_numeric_radix && (c) == PL_numeric_radix)
  3069.  
  3070. #define RESTORE_NUMERIC_LOCAL()        if ((PL_hints & HINT_LOCALE) && PL_numeric_standard) SET_NUMERIC_LOCAL()
  3071. #define RESTORE_NUMERIC_STANDARD()    if ((PL_hints & HINT_LOCALE) && PL_numeric_local) SET_NUMERIC_STANDARD()
  3072. #define Atof                my_atof
  3073.  
  3074. #else /* !USE_LOCALE_NUMERIC */
  3075.  
  3076. #define SET_NUMERIC_STANDARD()      /**/
  3077. #define SET_NUMERIC_LOCAL()         /**/
  3078. #define IS_NUMERIC_RADIX(c)        (0)
  3079. #define RESTORE_NUMERIC_LOCAL()        /**/
  3080. #define RESTORE_NUMERIC_STANDARD()    /**/
  3081. #define Atof                Perl_atof
  3082.  
  3083. #endif /* !USE_LOCALE_NUMERIC */
  3084.  
  3085. #if !defined(Strtol) && defined(USE_64_BIT_INT) && defined(IV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG
  3086. #    ifdef __hpux
  3087. #        define strtoll __strtoll    /* secret handshake */
  3088. #    endif
  3089. #   if !defined(Strtol) && defined(HAS_STRTOLL)
  3090. #       define Strtol    strtoll
  3091. #   endif
  3092. /* is there atoq() anywhere? */
  3093. #endif
  3094. #if !defined(Strtol) && defined(HAS_STRTOL)
  3095. #   define Strtol    strtol
  3096. #endif
  3097. #ifndef Atol
  3098. /* It would be more fashionable to use Strtol() to define atol()
  3099.  * (as is done for Atoul(), see below) but for backward compatibility
  3100.  * we just assume atol(). */
  3101. #   if defined(USE_64_BIT_INT) && defined(IV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG && defined(HAS_ATOLL)
  3102. #       define Atol    atoll
  3103. #   else
  3104. #       define Atol    atol
  3105. #   endif
  3106. #endif
  3107.  
  3108. #if !defined(Strtoul) && defined(USE_64_BIT_INT) && defined(UV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG
  3109. #    ifdef __hpux
  3110. #        define strtoull __strtoull    /* secret handshake */
  3111. #    endif
  3112. #    if !defined(Strtoul) && defined(HAS_STRTOULL)
  3113. #       define Strtoul    strtoull
  3114. #    endif
  3115. #    if !defined(Strtoul) && defined(HAS_STRTOUQ)
  3116. #       define Strtoul    strtouq
  3117. #    endif
  3118. /* is there atouq() anywhere? */
  3119. #endif
  3120. #if !defined(Strtoul) && defined(HAS_STRTOUL)
  3121. #   define Strtoul    strtoul
  3122. #endif
  3123. #ifndef Atoul
  3124. #   define Atoul(s)    Strtoul(s, (char **)NULL, 10)
  3125. #endif
  3126.  
  3127. #if !defined(PERLIO_IS_STDIO) && defined(HASATTRIBUTE)
  3128. /* 
  3129.  * Now we have __attribute__ out of the way 
  3130.  * Remap printf 
  3131.  */
  3132. #undef printf
  3133. #define printf PerlIO_stdoutf
  3134. #endif
  3135.  
  3136. /* if these never got defined, they need defaults */
  3137. #ifndef PERL_SET_CONTEXT
  3138. #  define PERL_SET_CONTEXT(i)        PERL_SET_INTERP(i)
  3139. #endif
  3140.  
  3141. #ifndef PERL_GET_CONTEXT
  3142. #  define PERL_GET_CONTEXT        PERL_GET_INTERP
  3143. #endif
  3144.  
  3145. #ifndef PERL_GET_THX
  3146. #  define PERL_GET_THX            ((void*)NULL)
  3147. #endif
  3148.  
  3149. #ifndef PERL_SET_THX
  3150. #  define PERL_SET_THX(t)        NOOP
  3151. #endif
  3152.  
  3153. #ifndef PERL_SCRIPT_MODE
  3154. #define PERL_SCRIPT_MODE "r"
  3155. #endif
  3156.  
  3157. /*
  3158.  * Some operating systems are stingy with stack allocation,
  3159.  * so perl may have to guard against stack overflow.
  3160.  */
  3161. #ifndef PERL_STACK_OVERFLOW_CHECK
  3162. #define PERL_STACK_OVERFLOW_CHECK()  NOOP
  3163. #endif
  3164.  
  3165. /*
  3166.  * Some nonpreemptive operating systems find it convenient to
  3167.  * check for asynchronous conditions after each op execution.
  3168.  * Keep this check simple, or it may slow down execution
  3169.  * massively.
  3170.  */
  3171. #ifndef PERL_ASYNC_CHECK
  3172. #define PERL_ASYNC_CHECK()  NOOP
  3173. #endif
  3174.  
  3175. /*
  3176.  * On some operating systems, a memory allocation may succeed,
  3177.  * but put the process too close to the system's comfort limit.
  3178.  * In this case, PERL_ALLOC_CHECK frees the pointer and sets
  3179.  * it to NULL.
  3180.  */
  3181. #ifndef PERL_ALLOC_CHECK
  3182. #define PERL_ALLOC_CHECK(p)  NOOP
  3183. #endif
  3184.  
  3185. /*
  3186.  * nice_chunk and nice_chunk size need to be set
  3187.  * and queried under the protection of sv_mutex
  3188.  */
  3189. #define offer_nice_chunk(chunk, chunk_size) do {    \
  3190.     LOCK_SV_MUTEX;                    \
  3191.     if (!PL_nice_chunk) {                \
  3192.         PL_nice_chunk = (char*)(chunk);        \
  3193.         PL_nice_chunk_size = (chunk_size);        \
  3194.     }                        \
  3195.     else {                        \
  3196.         Safefree(chunk);                \
  3197.     }                        \
  3198.     UNLOCK_SV_MUTEX;                \
  3199.     } while (0)
  3200.  
  3201. #ifdef HAS_SEM
  3202. #   include <sys/ipc.h>
  3203. #   include <sys/sem.h>
  3204. #   ifndef HAS_UNION_SEMUN    /* Provide the union semun. */
  3205.     union semun {
  3206.     int        val;
  3207.     struct semid_ds    *buf;
  3208.     unsigned short    *array;
  3209.     };
  3210. #   endif
  3211. #   ifdef USE_SEMCTL_SEMUN
  3212. #    ifdef IRIX32_SEMUN_BROKEN_BY_GCC
  3213.             union gccbug_semun {
  3214.         int             val;
  3215.         struct semid_ds *buf;
  3216.         unsigned short  *array;
  3217.         char            __dummy[5];
  3218.         };
  3219. #           define semun gccbug_semun
  3220. #    endif
  3221. #       define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun)
  3222. #   else
  3223. #       ifdef USE_SEMCTL_SEMID_DS
  3224. #           ifdef EXTRA_F_IN_SEMUN_BUF
  3225. #               define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun.buff)
  3226. #           else
  3227. #               define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun.buf)
  3228. #           endif
  3229. #       endif
  3230. #   endif
  3231. #endif
  3232.  
  3233. #ifdef I_FCNTL
  3234. #  include <fcntl.h>
  3235. #endif
  3236.  
  3237. #ifdef I_SYS_FILE
  3238. #  include <sys/file.h>
  3239. #endif
  3240.  
  3241. #ifndef O_RDONLY
  3242. /* Assume UNIX defaults */
  3243. #    define O_RDONLY    0000
  3244. #    define O_WRONLY    0001
  3245. #    define O_RDWR    0002
  3246. #    define O_CREAT    0100
  3247. #endif
  3248.  
  3249. #ifndef O_BINARY
  3250. #  define O_BINARY 0
  3251. #endif
  3252.  
  3253. #ifndef O_TEXT
  3254. #  define O_TEXT 0
  3255. #endif
  3256.  
  3257. #ifdef IAMSUID
  3258.  
  3259. #ifdef I_SYS_STATVFS
  3260. #   include <sys/statvfs.h>     /* for f?statvfs() */
  3261. #endif
  3262. #ifdef I_SYS_MOUNT
  3263. #   include <sys/mount.h>       /* for *BSD f?statfs() */
  3264. #endif
  3265. #ifdef I_MNTENT
  3266. #   include <mntent.h>          /* for getmntent() */
  3267. #endif
  3268. #ifdef I_SYS_STATFS
  3269. #   include <sys/statfs.h>      /* for some statfs() */
  3270. #endif
  3271. #ifdef I_SYS_VFS
  3272. #  ifdef __sgi
  3273. #    define sv IRIX_sv        /* kludge: IRIX has an sv of its own */
  3274. #  endif
  3275. #    include <sys/vfs.h>    /* for some statfs() */
  3276. #  ifdef __sgi
  3277. #    undef IRIX_sv
  3278. #  endif
  3279. #endif
  3280. #ifdef I_USTAT
  3281. #   include <ustat.h>           /* for ustat() */
  3282. #endif
  3283.  
  3284. #if !defined(PERL_MOUNT_NOSUID) && defined(MOUNT_NOSUID)
  3285. #    define PERL_MOUNT_NOSUID MOUNT_NOSUID
  3286. #endif
  3287. #if !defined(PERL_MOUNT_NOSUID) && defined(MNT_NOSUID)
  3288. #    define PERL_MOUNT_NOSUID MNT_NOSUID
  3289. #endif
  3290. #if !defined(PERL_MOUNT_NOSUID) && defined(MS_NOSUID)
  3291. #   define PERL_MOUNT_NOSUID MS_NOSUID
  3292. #endif
  3293. #if !defined(PERL_MOUNT_NOSUID) && defined(M_NOSUID)
  3294. #   define PERL_MOUNT_NOSUID M_NOSUID
  3295. #endif
  3296.  
  3297. #endif /* IAMSUID */
  3298.  
  3299. /* and finally... */
  3300. #define PERL_PATCHLEVEL_H_IMPLICIT
  3301. #include "patchlevel.h"
  3302. #undef PERL_PATCHLEVEL_H_IMPLICIT
  3303.  
  3304. /* Mention
  3305.    
  3306.    NV_PRESERVES_UV
  3307.  
  3308.    HAS_ICONV
  3309.    I_ICONV
  3310.  
  3311.    HAS_MKSTEMP
  3312.    HAS_MKSTEMPS
  3313.    HAS_MKDTEMP
  3314.  
  3315.    HAS_GETCWD
  3316.  
  3317.    HAS_MMAP
  3318.    HAS_MPROTECT
  3319.    HAS_MSYNC
  3320.    HAS_MADVISE
  3321.    HAS_MUNMAP
  3322.    I_SYSMMAN
  3323.    Mmap_t
  3324.  
  3325.    so that Configure picks them up. */
  3326.  
  3327. #endif /* Include guard */
  3328.