home *** CD-ROM | disk | FTP | other *** search
/ CD Actual Thematic 7: Programming / CDAT7.iso / Share / Editores / Perl5 / perl / lib / CORE / perl.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-08-10  |  56.9 KB  |  2,222 lines

  1. /*    perl.h
  2.  *
  3.  *    Copyright (c) 1987-1997, 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. #define OVERLOAD
  12.  
  13. #ifdef PERL_FOR_X2P
  14. /*
  15.  * This file is being used for x2p stuff. 
  16.  * Above symbol is defined via -D in 'x2p/Makefile.SH'
  17.  * Decouple x2p stuff from some of perls more extreme eccentricities. 
  18.  */
  19. #undef EMBED
  20. #undef NO_EMBED
  21. #define NO_EMBED
  22. #undef MULTIPLICITY
  23. #undef USE_STDIO
  24. #define USE_STDIO
  25. #endif /* PERL_FOR_X2P */
  26.  
  27. #define VOIDUSED 1
  28. #include "config.h"
  29.  
  30. #include "embed.h"
  31.  
  32. /*
  33.  * STMT_START { statements; } STMT_END;
  34.  * can be used as a single statement, as in
  35.  * if (x) STMT_START { ... } STMT_END; else ...
  36.  *
  37.  * Trying to select a version that gives no warnings...
  38.  */
  39. #if !(defined(STMT_START) && defined(STMT_END))
  40. # if defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(__cplusplus)
  41. #   define STMT_START    (void)(    /* gcc supports ``({ STATEMENTS; })'' */
  42. #   define STMT_END    )
  43. # else
  44.    /* Now which other defined()s do we need here ??? */
  45. #  if (VOIDFLAGS) && (defined(sun) || defined(__sun__))
  46. #   define STMT_START    if (1)
  47. #   define STMT_END    else (void)0
  48. #  else
  49. #   define STMT_START    do
  50. #   define STMT_END    while (0)
  51. #  endif
  52. # endif
  53. #endif
  54.  
  55. /*
  56.  * SOFT_CAST can be used for args to prototyped functions to retain some
  57.  * type checking; it only casts if the compiler does not know prototypes.
  58.  */
  59. #if defined(CAN_PROTOTYPE) && defined(DEBUGGING_COMPILE)
  60. #define SOFT_CAST(type)    
  61. #else
  62. #define SOFT_CAST(type)    (type)
  63. #endif
  64.  
  65. #ifndef BYTEORDER
  66. #   define BYTEORDER 0x1234
  67. #endif
  68.  
  69. /* Overall memory policy? */
  70. #ifndef CONSERVATIVE
  71. #   define LIBERAL 1
  72. #endif
  73.  
  74. /*
  75.  * The following contortions are brought to you on behalf of all the
  76.  * standards, semi-standards, de facto standards, not-so-de-facto standards
  77.  * of the world, as well as all the other botches anyone ever thought of.
  78.  * The basic theory is that if we work hard enough here, the rest of the
  79.  * code can be a lot prettier.  Well, so much for theory.  Sorry, Henry...
  80.  */
  81.  
  82. /* define this once if either system, instead of cluttering up the src */
  83. #if defined(MSDOS) || defined(atarist) || defined(WIN32)
  84. #define DOSISH 1
  85. #endif
  86.  
  87. #if defined(__STDC__) || defined(vax11c) || defined(_AIX) || defined(__stdc__) || defined(__cplusplus)
  88. # define STANDARD_C 1
  89. #endif
  90.  
  91. #if defined(__cplusplus) || defined(WIN32)
  92. # define DONT_DECLARE_STD 1
  93. #endif
  94.  
  95. #if defined(HASVOLATILE) || defined(STANDARD_C)
  96. #   ifdef __cplusplus
  97. #    define VOL        // to temporarily suppress warnings
  98. #   else
  99. #    define VOL volatile
  100. #   endif
  101. #else
  102. #   define VOL
  103. #endif
  104.  
  105. #define TAINT        (tainted = TRUE)
  106. #define TAINT_NOT    (tainted = FALSE)
  107. #define TAINT_IF(c)    if (c) { tainted = TRUE; }
  108. #define TAINT_ENV()    if (tainting) { taint_env(); }
  109. #define TAINT_PROPER(s)    if (tainting) { taint_proper(no_security, s); }
  110.  
  111. /* XXX All process group stuff is handled in pp_sys.c.  Should these 
  112.    defines move there?  If so, I could simplify this a lot. --AD  9/96.
  113. */
  114. /* Process group stuff changed from traditional BSD to POSIX.
  115.    perlfunc.pod documents the traditional BSD-style syntax, so we'll
  116.    try to preserve that, if possible.
  117. */
  118. #ifdef HAS_SETPGID
  119. #  define BSD_SETPGRP(pid, pgrp)    setpgid((pid), (pgrp))
  120. #else
  121. #  if defined(HAS_SETPGRP) && defined(USE_BSD_SETPGRP)
  122. #    define BSD_SETPGRP(pid, pgrp)    setpgrp((pid), (pgrp))
  123. #  else
  124. #    ifdef HAS_SETPGRP2  /* DG/UX */
  125. #      define BSD_SETPGRP(pid, pgrp)    setpgrp2((pid), (pgrp))
  126. #    endif
  127. #  endif
  128. #endif
  129. #if defined(BSD_SETPGRP) && !defined(HAS_SETPGRP)
  130. #  define HAS_SETPGRP  /* Well, effectively it does . . . */
  131. #endif
  132.  
  133. /* getpgid isn't POSIX, but at least Solaris and Linux have it, and it makes
  134.     our life easier :-) so we'll try it.
  135. */
  136. #ifdef HAS_GETPGID
  137. #  define BSD_GETPGRP(pid)        getpgid((pid))
  138. #else
  139. #  if defined(HAS_GETPGRP) && defined(USE_BSD_GETPGRP)
  140. #    define BSD_GETPGRP(pid)        getpgrp((pid))
  141. #  else
  142. #    ifdef HAS_GETPGRP2  /* DG/UX */
  143. #      define BSD_GETPGRP(pid)        getpgrp2((pid))
  144. #    endif
  145. #  endif
  146. #endif
  147. #if defined(BSD_GETPGRP) && !defined(HAS_GETPGRP)
  148. #  define HAS_GETPGRP  /* Well, effectively it does . . . */
  149. #endif
  150.  
  151. /* These are not exact synonyms, since setpgrp() and getpgrp() may 
  152.    have different behaviors, but perl.h used to define USE_BSDPGRP
  153.    (prior to 5.003_05) so some extension might depend on it.
  154. */
  155. #if defined(USE_BSD_SETPGRP) || defined(USE_BSD_GETPGRP)
  156. #  ifndef USE_BSDPGRP
  157. #    define USE_BSDPGRP
  158. #  endif
  159. #endif
  160.  
  161. #ifndef _TYPES_        /* If types.h defines this it's easy. */
  162. #   ifndef major        /* Does everyone's types.h define this? */
  163. #    include <sys/types.h>
  164. #   endif
  165. #endif
  166.  
  167. #ifdef __cplusplus
  168. #  ifndef I_STDARG
  169. #    define I_STDARG 1
  170. #  endif
  171. #endif
  172.  
  173. #ifdef I_STDARG
  174. #  include <stdarg.h>
  175. #else
  176. #  ifdef I_VARARGS
  177. #    include <varargs.h>
  178. #  endif
  179. #endif
  180.  
  181. #include "perlio.h"
  182.  
  183. #ifdef USE_NEXT_CTYPE
  184.  
  185. #if NX_CURRENT_COMPILER_RELEASE >= 400
  186. #include <objc/NXCType.h>
  187. #else /*  NX_CURRENT_COMPILER_RELEASE < 400 */
  188. #include <appkit/NXCType.h>
  189. #endif /*  NX_CURRENT_COMPILER_RELEASE >= 400 */
  190.  
  191. #else /* !USE_NEXT_CTYPE */
  192. #include <ctype.h>
  193. #endif /* USE_NEXT_CTYPE */
  194.  
  195. #ifdef METHOD     /* Defined by OSF/1 v3.0 by ctype.h */
  196. #undef METHOD
  197. #endif
  198.  
  199. #ifdef I_LOCALE
  200. #   include <locale.h>
  201. #endif
  202.  
  203. #if !defined(NO_LOCALE) && defined(HAS_SETLOCALE)
  204. #   define USE_LOCALE
  205. #   if !defined(NO_LOCALE_COLLATE) && defined(LC_COLLATE) \
  206.        && defined(HAS_STRXFRM)
  207. #    define USE_LOCALE_COLLATE
  208. #   endif
  209. #   if !defined(NO_LOCALE_CTYPE) && defined(LC_CTYPE)
  210. #    define USE_LOCALE_CTYPE
  211. #   endif
  212. #   if !defined(NO_LOCALE_NUMERIC) && defined(LC_NUMERIC)
  213. #    define USE_LOCALE_NUMERIC
  214. #   endif
  215. #endif /* !NO_LOCALE && HAS_SETLOCALE */
  216.  
  217. #include <setjmp.h>
  218.  
  219. #ifdef I_SYS_PARAM
  220. #   ifdef PARAM_NEEDS_TYPES
  221. #    include <sys/types.h>
  222. #   endif
  223. #   include <sys/param.h>
  224. #endif
  225.  
  226.  
  227. /* Use all the "standard" definitions? */
  228. #if defined(STANDARD_C) && defined(I_STDLIB)
  229. #   include <stdlib.h>
  230. #endif
  231.  
  232. /* This comes after <stdlib.h> so we don't try to change the standard
  233.  * library prototypes; we'll use our own in proto.h instead. */
  234.  
  235. #ifdef MYMALLOC
  236.  
  237. #   ifdef HIDEMYMALLOC
  238. #    define malloc  Mymalloc
  239. #    define calloc  Mycalloc
  240. #    define realloc Myremalloc
  241. #    define free    Myfree
  242. #   endif
  243. #   ifdef EMBEDMYMALLOC
  244. #    define malloc  Perl_malloc
  245. #    define calloc  Perl_calloc
  246. #    define realloc Perl_realloc
  247. #    define free    Perl_free
  248. #   endif
  249.  
  250. #   undef safemalloc
  251. #   undef safecalloc
  252. #   undef saferealloc
  253. #   undef safefree
  254. #   define safemalloc  malloc
  255. #   define safecalloc  calloc
  256. #   define saferealloc realloc
  257. #   define safefree    free
  258.  
  259. #endif /* MYMALLOC */
  260.  
  261. #define MEM_SIZE Size_t
  262.  
  263. #if defined(STANDARD_C) && defined(I_STDDEF)
  264. #   include <stddef.h>
  265. #   define STRUCT_OFFSET(s,m)  offsetof(s,m)
  266. #else
  267. #   define STRUCT_OFFSET(s,m)  (Size_t)(&(((s *)0)->m))
  268. #endif
  269.  
  270. #if defined(I_STRING) || defined(__cplusplus)
  271. #   include <string.h>
  272. #else
  273. #   include <strings.h>
  274. #endif
  275.  
  276. #if !defined(HAS_STRCHR) && defined(HAS_INDEX) && !defined(strchr)
  277. #define strchr index
  278. #define strrchr rindex
  279. #endif
  280.  
  281. #ifdef I_MEMORY
  282. #  include <memory.h>
  283. #endif
  284.  
  285. #ifdef HAS_MEMCPY
  286. #  if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
  287. #    ifndef memcpy
  288.         extern char * memcpy _((char*, char*, int));
  289. #    endif
  290. #  endif
  291. #else
  292. #   ifndef memcpy
  293. #    ifdef HAS_BCOPY
  294. #        define memcpy(d,s,l) bcopy(s,d,l)
  295. #    else
  296. #        define memcpy(d,s,l) my_bcopy(s,d,l)
  297. #    endif
  298. #   endif
  299. #endif /* HAS_MEMCPY */
  300.  
  301. #ifdef HAS_MEMSET
  302. #  if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
  303. #    ifndef memset
  304.     extern char *memset _((char*, int, int));
  305. #    endif
  306. #  endif
  307. #else
  308. #  define memset(d,c,l) my_memset(d,c,l)
  309. #endif /* HAS_MEMSET */
  310.  
  311. #if !defined(HAS_MEMMOVE) && !defined(memmove)
  312. #   if defined(HAS_BCOPY) && defined(HAS_SAFE_BCOPY)
  313. #    define memmove(d,s,l) bcopy(s,d,l)
  314. #   else
  315. #    if defined(HAS_MEMCPY) && defined(HAS_SAFE_MEMCPY)
  316. #        define memmove(d,s,l) memcpy(d,s,l)
  317. #    else
  318. #        define memmove(d,s,l) my_bcopy(s,d,l)
  319. #    endif
  320. #   endif
  321. #endif
  322.  
  323. #if defined(mips) && defined(ultrix) && !defined(__STDC__)
  324. #   undef HAS_MEMCMP
  325. #endif
  326.  
  327. #if defined(HAS_MEMCMP) && defined(HAS_SANE_MEMCMP)
  328. #  if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
  329. #    ifndef memcmp
  330.     extern int memcmp _((char*, char*, int));
  331. #    endif
  332. #  endif
  333. #  ifdef BUGGY_MSC
  334.   #  pragma function(memcmp)
  335. #  endif
  336. #else
  337. #   ifndef memcmp
  338. #    define memcmp     my_memcmp
  339. #   endif
  340. #endif /* HAS_MEMCMP && HAS_SANE_MEMCMP */
  341.  
  342. #ifndef memzero
  343. #   ifdef HAS_MEMSET
  344. #    define memzero(d,l) memset(d,0,l)
  345. #   else
  346. #    ifdef HAS_BZERO
  347. #        define memzero(d,l) bzero(d,l)
  348. #    else
  349. #        define memzero(d,l) my_bzero(d,l)
  350. #    endif
  351. #   endif
  352. #endif
  353.  
  354. #ifndef HAS_BCMP
  355. #   ifndef bcmp
  356. #    define bcmp(s1,s2,l) memcmp(s1,s2,l)
  357. #   endif
  358. #endif /* !HAS_BCMP */
  359.  
  360. #ifdef I_NETINET_IN
  361. #   include <netinet/in.h>
  362. #endif
  363.  
  364. #if defined(SF_APPEND) && defined(USE_SFIO) && defined(I_SFIO)
  365. /* <sfio.h> defines SF_APPEND and <sys/stat.h> might define SF_APPEND
  366.  * (the neo-BSD seem to do this).  */
  367. #   undef SF_APPEND
  368. #endif
  369.  
  370. #ifdef I_SYS_STAT
  371. #   include <sys/stat.h>
  372. #endif
  373.  
  374. /* The stat macros for Amdahl UTS, Unisoft System V/88 (and derivatives
  375.    like UTekV) are broken, sometimes giving false positives.  Undefine
  376.    them here and let the code below set them to proper values.
  377.  
  378.    The ghs macro stands for GreenHills Software C-1.8.5 which
  379.    is the C compiler for sysV88 and the various derivatives.
  380.    This header file bug is corrected in gcc-2.5.8 and later versions.
  381.    --Kaveh Ghazi (ghazi@noc.rutgers.edu) 10/3/94.  */
  382.  
  383. #if defined(uts) || (defined(m88k) && defined(ghs))
  384. #   undef S_ISDIR
  385. #   undef S_ISCHR
  386. #   undef S_ISBLK
  387. #   undef S_ISREG
  388. #   undef S_ISFIFO
  389. #   undef S_ISLNK
  390. #endif
  391.  
  392. #ifdef I_TIME
  393. #   include <time.h>
  394. #endif
  395.  
  396. #ifdef I_SYS_TIME
  397. #   ifdef I_SYS_TIME_KERNEL
  398. #    define KERNEL
  399. #   endif
  400. #   include <sys/time.h>
  401. #   ifdef I_SYS_TIME_KERNEL
  402. #    undef KERNEL
  403. #   endif
  404. #endif
  405.  
  406. #if defined(HAS_TIMES) && defined(I_SYS_TIMES)
  407. #    include <sys/times.h>
  408. #endif
  409.  
  410. #if defined(HAS_STRERROR) && (!defined(HAS_MKDIR) || !defined(HAS_RMDIR))
  411. #   undef HAS_STRERROR
  412. #endif
  413.  
  414. #ifndef HAS_MKFIFO
  415. #  ifndef mkfifo
  416. #    define mkfifo(path, mode) (mknod((path), (mode) | S_IFIFO, 0))
  417. #  endif
  418. #endif /* !HAS_MKFIFO */
  419.  
  420. #include <errno.h>
  421. #ifdef HAS_SOCKET
  422. #   ifdef I_NET_ERRNO
  423. #     include <net/errno.h>
  424. #   endif
  425. #endif
  426.  
  427. #ifdef VMS
  428. #   define SETERRNO(errcode,vmserrcode) \
  429.     STMT_START {            \
  430.         set_errno(errcode);        \
  431.         set_vaxc_errno(vmserrcode);    \
  432.     } STMT_END
  433. #else
  434. #   define SETERRNO(errcode,vmserrcode) errno = (errcode)
  435. #endif
  436.  
  437. #ifndef errno
  438.     extern int errno;     /* ANSI allows errno to be an lvalue expr */
  439. #endif
  440.  
  441. #ifdef HAS_STRERROR
  442. #       ifdef VMS
  443.     char *strerror _((int,...));
  444. #       else
  445. #ifndef DONT_DECLARE_STD
  446.     char *strerror _((int));
  447. #endif
  448. #       endif
  449. #       ifndef Strerror
  450. #           define Strerror strerror
  451. #       endif
  452. #else
  453. #    ifdef HAS_SYS_ERRLIST
  454.     extern int sys_nerr;
  455.     extern char *sys_errlist[];
  456. #       ifndef Strerror
  457. #           define Strerror(e) \
  458.         ((e) < 0 || (e) >= sys_nerr ? "(unknown)" : sys_errlist[e])
  459. #       endif
  460. #   endif
  461. #endif
  462.  
  463. #ifdef I_SYS_IOCTL
  464. #   ifndef _IOCTL_
  465. #    include <sys/ioctl.h>
  466. #   endif
  467. #endif
  468.  
  469. #if defined(mc300) || defined(mc500) || defined(mc700) || defined(mc6000)
  470. #   ifdef HAS_SOCKETPAIR
  471. #    undef HAS_SOCKETPAIR
  472. #   endif
  473. #   ifdef I_NDBM
  474. #    undef I_NDBM
  475. #   endif
  476. #endif
  477.  
  478. #if INTSIZE == 2
  479. #   define htoni htons
  480. #   define ntohi ntohs
  481. #else
  482. #   define htoni htonl
  483. #   define ntohi ntohl
  484. #endif
  485.  
  486. /* Configure already sets Direntry_t */
  487. #if defined(I_DIRENT)
  488. #   include <dirent.h>
  489. #   if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
  490. #    include <sys/dir.h>
  491. #   endif
  492. #else
  493. #   ifdef I_SYS_NDIR
  494. #    include <sys/ndir.h>
  495. #   else
  496. #    ifdef I_SYS_DIR
  497. #        ifdef hp9000s500
  498. #        include <ndir.h>    /* may be wrong in the future */
  499. #        else
  500. #        include <sys/dir.h>
  501. #        endif
  502. #    endif
  503. #   endif
  504. #endif
  505.  
  506. #ifdef FPUTS_BOTCH
  507. /* work around botch in SunOS 4.0.1 and 4.0.2 */
  508. #   ifndef fputs
  509. #    define fputs(sv,fp) fprintf(fp,"%s",sv)
  510. #   endif
  511. #endif
  512.  
  513. /*
  514.  * The following gobbledygook brought to you on behalf of __STDC__.
  515.  * (I could just use #ifndef __STDC__, but this is more bulletproof
  516.  * in the face of half-implementations.)
  517.  */
  518.  
  519. #ifndef S_IFMT
  520. #   ifdef _S_IFMT
  521. #    define S_IFMT _S_IFMT
  522. #   else
  523. #    define S_IFMT 0170000
  524. #   endif
  525. #endif
  526.  
  527. #ifndef S_ISDIR
  528. #   define S_ISDIR(m) ((m & S_IFMT) == S_IFDIR)
  529. #endif
  530.  
  531. #ifndef S_ISCHR
  532. #   define S_ISCHR(m) ((m & S_IFMT) == S_IFCHR)
  533. #endif
  534.  
  535. #ifndef S_ISBLK
  536. #   ifdef S_IFBLK
  537. #    define S_ISBLK(m) ((m & S_IFMT) == S_IFBLK)
  538. #   else
  539. #    define S_ISBLK(m) (0)
  540. #   endif
  541. #endif
  542.  
  543. #ifndef S_ISREG
  544. #   define S_ISREG(m) ((m & S_IFMT) == S_IFREG)
  545. #endif
  546.  
  547. #ifndef S_ISFIFO
  548. #   ifdef S_IFIFO
  549. #    define S_ISFIFO(m) ((m & S_IFMT) == S_IFIFO)
  550. #   else
  551. #    define S_ISFIFO(m) (0)
  552. #   endif
  553. #endif
  554.  
  555. #ifndef S_ISLNK
  556. #   ifdef _S_ISLNK
  557. #    define S_ISLNK(m) _S_ISLNK(m)
  558. #   else
  559. #    ifdef _S_IFLNK
  560. #        define S_ISLNK(m) ((m & S_IFMT) == _S_IFLNK)
  561. #    else
  562. #        ifdef S_IFLNK
  563. #        define S_ISLNK(m) ((m & S_IFMT) == S_IFLNK)
  564. #        else
  565. #        define S_ISLNK(m) (0)
  566. #        endif
  567. #    endif
  568. #   endif
  569. #endif
  570.  
  571. #ifndef S_ISSOCK
  572. #   ifdef _S_ISSOCK
  573. #    define S_ISSOCK(m) _S_ISSOCK(m)
  574. #   else
  575. #    ifdef _S_IFSOCK
  576. #        define S_ISSOCK(m) ((m & S_IFMT) == _S_IFSOCK)
  577. #    else
  578. #        ifdef S_IFSOCK
  579. #        define S_ISSOCK(m) ((m & S_IFMT) == S_IFSOCK)
  580. #        else
  581. #        define S_ISSOCK(m) (0)
  582. #        endif
  583. #    endif
  584. #   endif
  585. #endif
  586.  
  587. #ifndef S_IRUSR
  588. #   ifdef S_IREAD
  589. #    define S_IRUSR S_IREAD
  590. #    define S_IWUSR S_IWRITE
  591. #    define S_IXUSR S_IEXEC
  592. #   else
  593. #    define S_IRUSR 0400
  594. #    define S_IWUSR 0200
  595. #    define S_IXUSR 0100
  596. #   endif
  597. #   define S_IRGRP (S_IRUSR>>3)
  598. #   define S_IWGRP (S_IWUSR>>3)
  599. #   define S_IXGRP (S_IXUSR>>3)
  600. #   define S_IROTH (S_IRUSR>>6)
  601. #   define S_IWOTH (S_IWUSR>>6)
  602. #   define S_IXOTH (S_IXUSR>>6)
  603. #endif
  604.  
  605. #ifndef S_ISUID
  606. #   define S_ISUID 04000
  607. #endif
  608.  
  609. #ifndef S_ISGID
  610. #   define S_ISGID 02000
  611. #endif
  612.  
  613. #ifdef ff_next
  614. #   undef ff_next
  615. #endif
  616.  
  617. #if defined(cray) || defined(gould) || defined(i860) || defined(pyr)
  618. #   define SLOPPYDIVIDE
  619. #endif
  620.  
  621. #ifdef UV
  622. #undef UV
  623. #endif
  624.  
  625. /*  XXX QUAD stuff is not currently supported on most systems.
  626.     Specifically, perl internals don't support long long.  Among
  627.     the many problems is that some compilers support long long,
  628.     but the underlying library functions (such as sprintf) don't.
  629.     Some things do work (such as quad pack/unpack on convex);
  630.     also some systems use long long for the fpos_t typedef.  That
  631.     seems to work too.
  632.  
  633.     The IV type is supposed to be long enough to hold any integral
  634.     value or a pointer.
  635.     --Andy Dougherty    August 1996
  636. */
  637.  
  638. #ifdef cray
  639. #   define Quad_t int
  640. #else
  641. #   ifdef convex
  642. #    define Quad_t long long
  643. #   else
  644. #    if BYTEORDER > 0xFFFF
  645. #        define Quad_t long
  646. #    endif
  647. #   endif
  648. #endif
  649.  
  650. #ifdef Quad_t
  651. #   define HAS_QUAD
  652.     typedef Quad_t IV;
  653.     typedef unsigned Quad_t UV;
  654. #   define IV_MAX PERL_QUAD_MAX
  655. #   define IV_MIN PERL_QUAD_MIN
  656. #   define UV_MAX PERL_UQUAD_MAX
  657. #   define UV_MIN PERL_UQUAD_MIN
  658. #else
  659.     typedef long IV;
  660.     typedef unsigned long UV;
  661. #   define IV_MAX PERL_LONG_MAX
  662. #   define IV_MIN PERL_LONG_MIN
  663. #   define UV_MAX PERL_ULONG_MAX
  664. #   define UV_MIN PERL_ULONG_MIN
  665. #endif
  666.  
  667. /* Previously these definitions used hardcoded figures. 
  668.  * It is hoped these formula are more portable, although
  669.  * no data one way or another is presently known to me.
  670.  * The "PERL_" names are used because these calculated constants
  671.  * do not meet the ANSI requirements for LONG_MAX, etc., which
  672.  * need to be constants acceptable to #if - kja
  673.  *    define PERL_LONG_MAX        2147483647L
  674.  *    define PERL_LONG_MIN        (-LONG_MAX - 1)
  675.  *    define PERL ULONG_MAX       4294967295L
  676.  */
  677.  
  678. #ifdef I_LIMITS  /* Needed for cast_xxx() functions below. */
  679. #  include <limits.h>
  680. #else
  681. #ifdef I_VALUES
  682. #  include <values.h>
  683. #endif
  684. #endif
  685.  
  686. /*
  687.  * Try to figure out max and min values for the integral types.  THE CORRECT
  688.  * SOLUTION TO THIS MESS: ADAPT enquire.c FROM GCC INTO CONFIGURE.  The
  689.  * following hacks are used if neither limits.h or values.h provide them:
  690.  * U<TYPE>_MAX: for types >= int: ~(unsigned TYPE)0
  691.  *              for types <  int:  (unsigned TYPE)~(unsigned)0
  692.  *    The argument to ~ must be unsigned so that later signed->unsigned
  693.  *    conversion can't modify the value's bit pattern (e.g. -0 -> +0),
  694.  *    and it must not be smaller than int because ~ does integral promotion.
  695.  * <type>_MAX: (<type>) (U<type>_MAX >> 1)
  696.  * <type>_MIN: -<type>_MAX - <is_twos_complement_architecture: (3 & -1) == 3>.
  697.  *    The latter is a hack which happens to work on some machines but
  698.  *    does *not* catch any random system, or things like integer types
  699.  *    with NaN if that is possible.
  700.  *
  701.  * All of the types are explicitly cast to prevent accidental loss of
  702.  * numeric range, and in the hope that they will be less likely to confuse
  703.  * over-eager optimizers.
  704.  *
  705.  */
  706.  
  707. #define PERL_UCHAR_MIN ((unsigned char)0)
  708.  
  709. #ifdef UCHAR_MAX
  710. #  define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX)
  711. #else
  712. #  ifdef MAXUCHAR
  713. #    define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR)
  714. #  else
  715. #    define PERL_UCHAR_MAX       ((unsigned char)~(unsigned)0)
  716. #  endif
  717. #endif
  718.  
  719. /*
  720.  * CHAR_MIN and CHAR_MAX are not included here, as the (char) type may be
  721.  * ambiguous. It may be equivalent to (signed char) or (unsigned char)
  722.  * depending on local options. Until Configure detects this (or at least
  723.  * detects whether the "signed" keyword is available) the CHAR ranges
  724.  * will not be included. UCHAR functions normally.
  725.  *                                                           - kja
  726.  */
  727.  
  728. #define PERL_USHORT_MIN ((unsigned short)0)
  729.  
  730. #ifdef USHORT_MAX
  731. #  define PERL_USHORT_MAX ((unsigned short)USHORT_MAX)
  732. #else
  733. #  ifdef MAXUSHORT
  734. #    define PERL_USHORT_MAX ((unsigned short)MAXUSHORT)
  735. #  else
  736. #    define PERL_USHORT_MAX       ((unsigned short)~(unsigned)0)
  737. #  endif
  738. #endif
  739.  
  740. #ifdef SHORT_MAX
  741. #  define PERL_SHORT_MAX ((short)SHORT_MAX)
  742. #else
  743. #  ifdef MAXSHORT    /* Often used in <values.h> */
  744. #    define PERL_SHORT_MAX ((short)MAXSHORT)
  745. #  else
  746. #    define PERL_SHORT_MAX      ((short) (PERL_USHORT_MAX >> 1))
  747. #  endif
  748. #endif
  749.  
  750. #ifdef SHORT_MIN
  751. #  define PERL_SHORT_MIN ((short)SHORT_MIN)
  752. #else
  753. #  ifdef MINSHORT
  754. #    define PERL_SHORT_MIN ((short)MINSHORT)
  755. #  else
  756. #    define PERL_SHORT_MIN        (-PERL_SHORT_MAX - ((3 & -1) == 3))
  757. #  endif
  758. #endif
  759.  
  760. #ifdef UINT_MAX
  761. #  define PERL_UINT_MAX ((unsigned int)UINT_MAX)
  762. #else
  763. #  ifdef MAXUINT
  764. #    define PERL_UINT_MAX ((unsigned int)MAXUINT)
  765. #  else
  766. #    define PERL_UINT_MAX       (~(unsigned int)0)
  767. #  endif
  768. #endif
  769.  
  770. #define PERL_UINT_MIN ((unsigned int)0)
  771.  
  772. #ifdef INT_MAX
  773. #  define PERL_INT_MAX ((int)INT_MAX)
  774. #else
  775. #  ifdef MAXINT    /* Often used in <values.h> */
  776. #    define PERL_INT_MAX ((int)MAXINT)
  777. #  else
  778. #    define PERL_INT_MAX        ((int)(PERL_UINT_MAX >> 1))
  779. #  endif
  780. #endif
  781.  
  782. #ifdef INT_MIN
  783. #  define PERL_INT_MIN ((int)INT_MIN)
  784. #else
  785. #  ifdef MININT
  786. #    define PERL_INT_MIN ((int)MININT)
  787. #  else
  788. #    define PERL_INT_MIN        (-PERL_INT_MAX - ((3 & -1) == 3))
  789. #  endif
  790. #endif
  791.  
  792. #ifdef ULONG_MAX
  793. #  define PERL_ULONG_MAX ((unsigned long)ULONG_MAX)
  794. #else
  795. #  ifdef MAXULONG
  796. #    define PERL_ULONG_MAX ((unsigned long)MAXULONG)
  797. #  else
  798. #    define PERL_ULONG_MAX       (~(unsigned long)0)
  799. #  endif
  800. #endif
  801.  
  802. #define PERL_ULONG_MIN ((unsigned long)0L)
  803.  
  804. #ifdef LONG_MAX
  805. #  define PERL_LONG_MAX ((long)LONG_MAX)
  806. #else
  807. #  ifdef MAXLONG    /* Often used in <values.h> */
  808. #    define PERL_LONG_MAX ((long)MAXLONG)
  809. #  else
  810. #    define PERL_LONG_MAX        ((long) (PERL_ULONG_MAX >> 1))
  811. #  endif
  812. #endif
  813.  
  814. #ifdef LONG_MIN
  815. #  define PERL_LONG_MIN ((long)LONG_MIN)
  816. #else
  817. #  ifdef MINLONG
  818. #    define PERL_LONG_MIN ((long)MINLONG)
  819. #  else
  820. #    define PERL_LONG_MIN        (-PERL_LONG_MAX - ((3 & -1) == 3))
  821. #  endif
  822. #endif
  823.  
  824. #ifdef HAS_QUAD
  825.  
  826. #  ifdef UQUAD_MAX
  827. #    define PERL_UQUAD_MAX ((UV)UQUAD_MAX)
  828. #  else
  829. #    define PERL_UQUAD_MAX    (~(UV)0)
  830. #  endif
  831.  
  832. #  define PERL_UQUAD_MIN ((UV)0)
  833.  
  834. #  ifdef QUAD_MAX
  835. #    define PERL_QUAD_MAX ((IV)QUAD_MAX)
  836. #  else
  837. #    define PERL_QUAD_MAX     ((IV) (PERL_UQUAD_MAX >> 1))
  838. #  endif
  839.  
  840. #  ifdef QUAD_MIN
  841. #    define PERL_QUAD_MIN ((IV)QUAD_MIN)
  842. #  else
  843. #    define PERL_QUAD_MIN     (-PERL_QUAD_MAX - ((3 & -1) == 3))
  844. #  endif
  845.  
  846. #endif
  847.  
  848. typedef MEM_SIZE STRLEN;
  849.  
  850. typedef struct op OP;
  851. typedef struct cop COP;
  852. typedef struct unop UNOP;
  853. typedef struct binop BINOP;
  854. typedef struct listop LISTOP;
  855. typedef struct logop LOGOP;
  856. typedef struct condop CONDOP;
  857. typedef struct pmop PMOP;
  858. typedef struct svop SVOP;
  859. typedef struct gvop GVOP;
  860. typedef struct pvop PVOP;
  861. typedef struct loop LOOP;
  862.  
  863. typedef struct Outrec Outrec;
  864. typedef struct interpreter PerlInterpreter;
  865. #ifndef __BORLANDC__
  866. typedef struct ff FF;        /* XXX not defined anywhere, should go? */
  867. #endif
  868. typedef struct sv SV;
  869. typedef struct av AV;
  870. typedef struct hv HV;
  871. typedef struct cv CV;
  872. typedef struct regexp REGEXP;
  873. typedef struct gp GP;
  874. typedef struct gv GV;
  875. typedef struct io IO;
  876. typedef struct context CONTEXT;
  877. typedef struct block BLOCK;
  878.  
  879. typedef struct magic MAGIC;
  880. typedef struct xrv XRV;
  881. typedef struct xpv XPV;
  882. typedef struct xpviv XPVIV;
  883. typedef struct xpvuv XPVUV;
  884. typedef struct xpvnv XPVNV;
  885. typedef struct xpvmg XPVMG;
  886. typedef struct xpvlv XPVLV;
  887. typedef struct xpvav XPVAV;
  888. typedef struct xpvhv XPVHV;
  889. typedef struct xpvgv XPVGV;
  890. typedef struct xpvcv XPVCV;
  891. typedef struct xpvbm XPVBM;
  892. typedef struct xpvfm XPVFM;
  893. typedef struct xpvio XPVIO;
  894. typedef struct mgvtbl MGVTBL;
  895. typedef union any ANY;
  896.  
  897. #include "handy.h"
  898.  
  899. typedef I32 (*filter_t) _((int, SV *, int));
  900. #define FILTER_READ(idx, sv, len)  filter_read(idx, sv, len)
  901. #define FILTER_DATA(idx)       (AvARRAY(rsfp_filters)[idx])
  902. #define FILTER_ISREADER(idx)       (idx >= AvFILL(rsfp_filters))
  903.  
  904. #ifdef DOSISH
  905. # if defined(OS2)
  906. #   include "os2ish.h"
  907. # else
  908. #   include "dosish.h"
  909. # endif
  910. #else
  911. # if defined(VMS)
  912. #   include "vmsish.h"
  913. # else
  914. #   if defined(PLAN9)
  915. #     include "./plan9/plan9ish.h"
  916. #   else
  917. #     include "unixish.h"
  918. #   endif
  919. # endif
  920. #endif
  921.   
  922. #ifdef VMS
  923. #   define STATUS_NATIVE    statusvalue_vms
  924. #   define STATUS_NATIVE_EXPORT \
  925.     ((I32)statusvalue_vms == -1 ? 44 : statusvalue_vms)
  926. #   define STATUS_NATIVE_SET(n)                        \
  927.     STMT_START {                            \
  928.         statusvalue_vms = (n);                    \
  929.         if ((I32)statusvalue_vms == -1)                \
  930.         statusvalue = -1;                    \
  931.         else if (statusvalue_vms & STS$M_SUCCESS)            \
  932.         statusvalue = 0;                    \
  933.         else if ((statusvalue_vms & STS$M_SEVERITY) == 0)        \
  934.         statusvalue = 1 << 8;                    \
  935.         else                            \
  936.         statusvalue = (statusvalue_vms & STS$M_SEVERITY) << 8;    \
  937.     } STMT_END
  938. #   define STATUS_POSIX    statusvalue
  939. #   ifdef VMSISH_STATUS
  940. #    define STATUS_CURRENT    (VMSISH_STATUS ? STATUS_NATIVE : STATUS_POSIX)
  941. #   else
  942. #    define STATUS_CURRENT    STATUS_POSIX
  943. #   endif
  944. #   define STATUS_POSIX_SET(n)                \
  945.     STMT_START {                    \
  946.         statusvalue = (n);                \
  947.         if (statusvalue != -1) {            \
  948.         statusvalue &= 0xFFFF;            \
  949.         statusvalue_vms = statusvalue ? 44 : 1;    \
  950.         }                        \
  951.         else statusvalue_vms = -1;            \
  952.     } STMT_END
  953. #   define STATUS_ALL_SUCCESS    (statusvalue = 0, statusvalue_vms = 1)
  954. #   define STATUS_ALL_FAILURE    (statusvalue = 1, statusvalue_vms = 44)
  955. #else
  956. #   define STATUS_NATIVE    STATUS_POSIX
  957. #   define STATUS_NATIVE_EXPORT    STATUS_POSIX
  958. #   define STATUS_NATIVE_SET    STATUS_POSIX_SET
  959. #   define STATUS_POSIX        statusvalue
  960. #   define STATUS_POSIX_SET(n)        \
  961.     STMT_START {            \
  962.         statusvalue = (n);        \
  963.         if (statusvalue != -1)    \
  964.         statusvalue &= 0xFFFF;    \
  965.     } STMT_END
  966. #   define STATUS_CURRENT STATUS_POSIX
  967. #   define STATUS_ALL_SUCCESS    (statusvalue = 0)
  968. #   define STATUS_ALL_FAILURE    (statusvalue = 1)
  969. #endif
  970.  
  971. /* Some unistd.h's give a prototype for pause() even though
  972.    HAS_PAUSE ends up undefined.  This causes the #define
  973.    below to be rejected by the compmiler.  Sigh.
  974. */
  975. #ifdef HAS_PAUSE
  976. #define Pause    pause
  977. #else
  978. #define Pause() sleep((32767<<16)+32767)
  979. #endif
  980.  
  981. #ifndef IOCPARM_LEN
  982. #   ifdef IOCPARM_MASK
  983.     /* on BSDish systes we're safe */
  984. #    define IOCPARM_LEN(x)  (((x) >> 16) & IOCPARM_MASK)
  985. #   else
  986.     /* otherwise guess at what's safe */
  987. #    define IOCPARM_LEN(x)    256
  988. #   endif
  989. #endif
  990.  
  991. union any {
  992.     void*    any_ptr;
  993.     I32        any_i32;
  994.     IV        any_iv;
  995.     long    any_long;
  996.     void    (*any_dptr) _((void*));
  997. };
  998.  
  999. /* Work around some cygwin32 problems with importing global symbols */
  1000. #if defined(CYGWIN32) && defined(DLLIMPORT) 
  1001. #   include "cw32imp.h"
  1002. #endif
  1003.  
  1004. #include "regexp.h"
  1005. #include "sv.h"
  1006. #include "util.h"
  1007. #include "form.h"
  1008. #include "gv.h"
  1009. #include "cv.h"
  1010. #include "opcode.h"
  1011. #include "op.h"
  1012. #include "cop.h"
  1013. #include "av.h"
  1014. #include "hv.h"
  1015. #include "mg.h"
  1016. #include "scope.h"
  1017.  
  1018. /* work around some libPW problems */
  1019. #ifdef DOINIT
  1020. EXT char Error[1];
  1021. #endif
  1022.  
  1023. #if defined(iAPX286) || defined(M_I286) || defined(I80286)
  1024. #   define I286
  1025. #endif
  1026.  
  1027. #if defined(htonl) && !defined(HAS_HTONL)
  1028. #define HAS_HTONL
  1029. #endif
  1030. #if defined(htons) && !defined(HAS_HTONS)
  1031. #define HAS_HTONS
  1032. #endif
  1033. #if defined(ntohl) && !defined(HAS_NTOHL)
  1034. #define HAS_NTOHL
  1035. #endif
  1036. #if defined(ntohs) && !defined(HAS_NTOHS)
  1037. #define HAS_NTOHS
  1038. #endif
  1039. #ifndef HAS_HTONL
  1040. #if (BYTEORDER & 0xffff) != 0x4321
  1041. #define HAS_HTONS
  1042. #define HAS_HTONL
  1043. #define HAS_NTOHS
  1044. #define HAS_NTOHL
  1045. #define MYSWAP
  1046. #define htons my_swap
  1047. #define htonl my_htonl
  1048. #define ntohs my_swap
  1049. #define ntohl my_ntohl
  1050. #endif
  1051. #else
  1052. #if (BYTEORDER & 0xffff) == 0x4321
  1053. #undef HAS_HTONS
  1054. #undef HAS_HTONL
  1055. #undef HAS_NTOHS
  1056. #undef HAS_NTOHL
  1057. #endif
  1058. #endif
  1059.  
  1060. /*
  1061.  * Little-endian byte order functions - 'v' for 'VAX', or 'reVerse'.
  1062.  * -DWS
  1063.  */
  1064. #if BYTEORDER != 0x1234
  1065. # define HAS_VTOHL
  1066. # define HAS_VTOHS
  1067. # define HAS_HTOVL
  1068. # define HAS_HTOVS
  1069. # if BYTEORDER == 0x4321
  1070. #  define vtohl(x)    ((((x)&0xFF)<<24)    \
  1071.             +(((x)>>24)&0xFF)    \
  1072.             +(((x)&0x0000FF00)<<8)    \
  1073.             +(((x)&0x00FF0000)>>8)    )
  1074. #  define vtohs(x)    ((((x)&0xFF)<<8) + (((x)>>8)&0xFF))
  1075. #  define htovl(x)    vtohl(x)
  1076. #  define htovs(x)    vtohs(x)
  1077. # endif
  1078.     /* otherwise default to functions in util.c */
  1079. #endif
  1080.  
  1081. #ifdef CASTNEGFLOAT
  1082. #define U_S(what) ((U16)(what))
  1083. #define U_I(what) ((unsigned int)(what))
  1084. #define U_L(what) ((U32)(what))
  1085. #else
  1086. #  ifdef __cplusplus
  1087.     extern "C" {
  1088. #  endif
  1089. U32 cast_ulong _((double));
  1090. #  ifdef __cplusplus
  1091.     }
  1092. #  endif
  1093. #define U_S(what) ((U16)cast_ulong((double)(what)))
  1094. #define U_I(what) ((unsigned int)cast_ulong((double)(what)))
  1095. #define U_L(what) (cast_ulong((double)(what)))
  1096. #endif
  1097.  
  1098. #ifdef CASTI32
  1099. #define I_32(what) ((I32)(what))
  1100. #define I_V(what) ((IV)(what))
  1101. #define U_V(what) ((UV)(what))
  1102. #else
  1103. #  ifdef __cplusplus
  1104.     extern "C" {
  1105. #  endif
  1106. I32 cast_i32 _((double));
  1107. IV cast_iv _((double));
  1108. UV cast_uv _((double));
  1109. #  ifdef __cplusplus
  1110.     }
  1111. #  endif
  1112. #define I_32(what) (cast_i32((double)(what)))
  1113. #define I_V(what) (cast_iv((double)(what)))
  1114. #define U_V(what) (cast_uv((double)(what)))
  1115. #endif
  1116.  
  1117. struct Outrec {
  1118.     I32        o_lines;
  1119.     char    *o_str;
  1120.     U32        o_len;
  1121. };
  1122.  
  1123. #ifndef MAXSYSFD
  1124. #   define MAXSYSFD 2
  1125. #endif
  1126.  
  1127. #ifndef TMPPATH
  1128. #  define TMPPATH "/tmp/perl-eXXXXXX"
  1129. #endif
  1130.  
  1131. #ifndef __cplusplus
  1132. Uid_t getuid _((void));
  1133. Uid_t geteuid _((void));
  1134. Gid_t getgid _((void));
  1135. Gid_t getegid _((void));
  1136. #endif
  1137.  
  1138. #ifdef DEBUGGING
  1139. #ifndef Perl_debug_log
  1140. #define Perl_debug_log    PerlIO_stderr()
  1141. #endif
  1142. #define YYDEBUG 1
  1143. #define DEB(a)                 a
  1144. #define DEBUG(a)   if (debug)        a
  1145. #define DEBUG_p(a) if (debug & 1)    a
  1146. #define DEBUG_s(a) if (debug & 2)    a
  1147. #define DEBUG_l(a) if (debug & 4)    a
  1148. #define DEBUG_t(a) if (debug & 8)    a
  1149. #define DEBUG_o(a) if (debug & 16)    a
  1150. #define DEBUG_c(a) if (debug & 32)    a
  1151. #define DEBUG_P(a) if (debug & 64)    a
  1152. #define DEBUG_m(a) if (curinterp && debug & 128)    a
  1153. #define DEBUG_f(a) if (debug & 256)    a
  1154. #define DEBUG_r(a) if (debug & 512)    a
  1155. #define DEBUG_x(a) if (debug & 1024)    a
  1156. #define DEBUG_u(a) if (debug & 2048)    a
  1157. #define DEBUG_L(a) if (debug & 4096)    a
  1158. #define DEBUG_H(a) if (debug & 8192)    a
  1159. #define DEBUG_X(a) if (debug & 16384)    a
  1160. #define DEBUG_D(a) if (debug & 32768)    a
  1161. #else
  1162. #define DEB(a)
  1163. #define DEBUG(a)
  1164. #define DEBUG_p(a)
  1165. #define DEBUG_s(a)
  1166. #define DEBUG_l(a)
  1167. #define DEBUG_t(a)
  1168. #define DEBUG_o(a)
  1169. #define DEBUG_c(a)
  1170. #define DEBUG_P(a)
  1171. #define DEBUG_m(a)
  1172. #define DEBUG_f(a)
  1173. #define DEBUG_r(a)
  1174. #define DEBUG_x(a)
  1175. #define DEBUG_u(a)
  1176. #define DEBUG_L(a)
  1177. #define DEBUG_H(a)
  1178. #define DEBUG_X(a)
  1179. #define DEBUG_D(a)
  1180. #endif
  1181. #define YYMAXDEPTH 300
  1182.  
  1183. #ifndef assert  /* <assert.h> might have been included somehow */
  1184. #define assert(what)    DEB( {                        \
  1185.     if (!(what)) {                            \
  1186.         croak("Assertion failed: file \"%s\", line %d",        \
  1187.         __FILE__, __LINE__);                    \
  1188.         exit(1);                            \
  1189.     }})
  1190. #endif
  1191.  
  1192. struct ufuncs {
  1193.     I32 (*uf_val)_((IV, SV*));
  1194.     I32 (*uf_set)_((IV, SV*));
  1195.     IV uf_index;
  1196. };
  1197.  
  1198. /* Fix these up for __STDC__ */
  1199. #ifndef DONT_DECLARE_STD
  1200. char *mktemp _((char*));
  1201. double atof _((const char*));
  1202. #endif
  1203.  
  1204. #ifndef STANDARD_C
  1205. /* All of these are in stdlib.h or time.h for ANSI C */
  1206. Time_t time();
  1207. struct tm *gmtime(), *localtime();
  1208. char *strchr(), *strrchr();
  1209. char *strcpy(), *strcat();
  1210. #endif /* ! STANDARD_C */
  1211.  
  1212.  
  1213. #ifdef I_MATH
  1214. #    include <math.h>
  1215. #else
  1216. #   ifdef __cplusplus
  1217.     extern "C" {
  1218. #   endif
  1219.         double exp _((double));
  1220.         double log _((double));
  1221.         double log10 _((double));
  1222.         double sqrt _((double));
  1223.         double frexp _((double,int*));
  1224.         double ldexp _((double,int));
  1225.         double modf _((double,double*));
  1226.         double sin _((double));
  1227.         double cos _((double));
  1228.         double atan2 _((double,double));
  1229.         double pow _((double,double));
  1230. #   ifdef __cplusplus
  1231.     };
  1232. #   endif
  1233. #endif
  1234.  
  1235. #ifndef __cplusplus
  1236. #ifdef __NeXT__ /* or whatever catches all NeXTs */
  1237. char *crypt ();       /* Maybe more hosts will need the unprototyped version */
  1238. #else
  1239. char *crypt _((const char*, const char*));
  1240. #endif
  1241. #ifndef DONT_DECLARE_STD
  1242. #ifndef getenv
  1243. char *getenv _((const char*));
  1244. #endif
  1245. Off_t lseek _((int,Off_t,int));
  1246. #endif
  1247. char *getlogin _((void));
  1248. #endif
  1249.  
  1250. #ifdef UNLINK_ALL_VERSIONS /* Currently only makes sense for VMS */
  1251. #define UNLINK unlnk
  1252. I32 unlnk _((char*));
  1253. #else
  1254. #define UNLINK unlink
  1255. #endif
  1256.  
  1257. #ifndef HAS_SETREUID
  1258. #  ifdef HAS_SETRESUID
  1259. #    define setreuid(r,e) setresuid(r,e,(Uid_t)-1)
  1260. #    define HAS_SETREUID
  1261. #  endif
  1262. #endif
  1263. #ifndef HAS_SETREGID
  1264. #  ifdef HAS_SETRESGID
  1265. #    define setregid(r,e) setresgid(r,e,(Gid_t)-1)
  1266. #    define HAS_SETREGID
  1267. #  endif
  1268. #endif
  1269.  
  1270. typedef Signal_t (*Sighandler_t) _((int));
  1271.  
  1272. #ifdef HAS_SIGACTION
  1273. typedef struct sigaction Sigsave_t;
  1274. #else
  1275. typedef Sighandler_t Sigsave_t;
  1276. #endif
  1277.  
  1278. #define SCAN_DEF 0
  1279. #define SCAN_TR 1
  1280. #define SCAN_REPL 2
  1281.  
  1282. #ifdef DEBUGGING
  1283. # ifndef register
  1284. #  define register
  1285. # endif
  1286. # define PAD_SV(po) pad_sv(po)
  1287. #else
  1288. # define PAD_SV(po) curpad[po]
  1289. #endif
  1290.  
  1291. /****************/
  1292. /* Truly global */
  1293. /****************/
  1294.  
  1295. /* global state */
  1296. EXT PerlInterpreter *    curinterp;    /* currently running interpreter */
  1297. /* VMS doesn't use environ array and NeXT has problems with crt0.o globals */
  1298. #if !defined(VMS) && !(defined(NeXT) && defined(__DYNAMIC__))
  1299. #ifndef DONT_DECLARE_STD
  1300. extern char **    environ;    /* environment variables supplied via exec */
  1301. #endif
  1302. #else
  1303. #  if defined(NeXT) && defined(__DYNAMIC__)
  1304.  
  1305. #  include <mach-o/dyld.h>
  1306. EXT char *** environ_pointer;
  1307. #  define environ (*environ_pointer)
  1308. #  endif
  1309. #endif /* environ processing */
  1310.  
  1311. EXT int        uid;        /* current real user id */
  1312. EXT int        euid;        /* current effective user id */
  1313. EXT int        gid;        /* current real group id */
  1314. EXT int        egid;        /* current effective group id */
  1315. EXT bool    nomemok;    /* let malloc context handle nomem */
  1316. EXT U32        an;        /* malloc sequence number */
  1317. EXT U32        cop_seqmax;    /* statement sequence number */
  1318. EXT U16        op_seqmax;    /* op sequence number */
  1319. EXT U32        evalseq;    /* eval sequence number */
  1320. EXT U32        sub_generation;    /* inc to force methods to be looked up again */
  1321. EXT char **    origenviron;
  1322. EXT U32        origalen;
  1323. EXT HV *    pidstatus;    /* pid-to-status mappings for waitpid */
  1324. EXT U32 *    profiledata;
  1325. EXT int        maxo INIT(MAXO);/* Number of ops */
  1326. EXT char *    osname;        /* operating system */
  1327. EXT char *    sh_path INIT(SH_PATH); /* full path of shell */
  1328.  
  1329. EXT XPV*    xiv_arenaroot;    /* list of allocated xiv areas */
  1330. EXT IV **    xiv_root;    /* free xiv list--shared by interpreters */
  1331. EXT double *    xnv_root;    /* free xnv list--shared by interpreters */
  1332. EXT XRV *    xrv_root;    /* free xrv list--shared by interpreters */
  1333. EXT XPV *    xpv_root;    /* free xpv list--shared by interpreters */
  1334. EXT HE *    he_root;    /* free he list--shared by interpreters */
  1335. EXT char *    nice_chunk;    /* a nice chunk of memory to reuse */
  1336. EXT U32        nice_chunk_size;/* how nice the chunk of memory is */
  1337.  
  1338. /* Stack for currently executing thread--context switch must handle this.     */
  1339. EXT SV **    stack_base;    /* stack->array_ary */
  1340. EXT SV **    stack_sp;    /* stack pointer now */
  1341. EXT SV **    stack_max;    /* stack->array_ary + stack->array_max */
  1342.  
  1343. /* likewise for these */
  1344.  
  1345. EXT OP *    op;        /* current op--oughta be in a global register */
  1346.  
  1347. EXT I32 *    scopestack;    /* blocks we've entered */
  1348. EXT I32        scopestack_ix;
  1349. EXT I32        scopestack_max;
  1350.  
  1351. EXT ANY*    savestack;    /* to save non-local values on */
  1352. EXT I32        savestack_ix;
  1353. EXT I32        savestack_max;
  1354.  
  1355. EXT OP **    retstack;    /* returns we've pushed */
  1356. EXT I32        retstack_ix;
  1357. EXT I32        retstack_max;
  1358.  
  1359. EXT I32 *    markstack;    /* stackmarks we're remembering */
  1360. EXT I32 *    markstack_ptr;    /* stackmarks we're remembering */
  1361. EXT I32 *    markstack_max;    /* stackmarks we're remembering */
  1362.  
  1363. EXT SV **    curpad;
  1364.  
  1365. /* temp space */
  1366. EXT SV *    Sv;
  1367. EXT XPV *    Xpv;
  1368. EXT char    tokenbuf[256];
  1369. EXT struct stat    statbuf;
  1370. #ifdef HAS_TIMES
  1371. EXT struct tms    timesbuf;
  1372. #endif
  1373. EXT STRLEN na;        /* for use in SvPV when length is Not Applicable */
  1374.  
  1375. /* for tmp use in stupid debuggers */
  1376. EXT int *    di;
  1377. EXT short *    ds;
  1378. EXT char *    dc;
  1379.  
  1380. /* handy constants */
  1381. EXTCONST char *    Yes INIT("1");
  1382. EXTCONST char *    No INIT("");
  1383. EXTCONST char *    hexdigit INIT("0123456789abcdef0123456789ABCDEFx");
  1384. EXTCONST char *    patleave INIT("\\.^$@dDwWsSbB+*?|()-nrtfeaxc0123456789[{]}");
  1385. EXTCONST char *    vert INIT("|");
  1386.  
  1387. EXTCONST char warn_uninit[]
  1388.   INIT("Use of uninitialized value");
  1389. EXTCONST char warn_nosemi[]
  1390.   INIT("Semicolon seems to be missing");
  1391. EXTCONST char warn_reserved[]
  1392.   INIT("Unquoted string \"%s\" may clash with future reserved word");
  1393. EXTCONST char warn_nl[]
  1394.   INIT("Unsuccessful %s on filename containing newline");
  1395. EXTCONST char no_wrongref[]
  1396.   INIT("Can't use %s ref as %s ref");
  1397. EXTCONST char no_symref[]
  1398.   INIT("Can't use string (\"%.32s\") as %s ref while \"strict refs\" in use");
  1399. EXTCONST char no_usym[]
  1400.   INIT("Can't use an undefined value as %s reference");
  1401. EXTCONST char no_aelem[]
  1402.   INIT("Modification of non-creatable array value attempted, subscript %d");
  1403. EXTCONST char no_helem[]
  1404.   INIT("Modification of non-creatable hash value attempted, subscript \"%s\"");
  1405. EXTCONST char no_modify[]
  1406.   INIT("Modification of a read-only value attempted");
  1407. EXTCONST char no_mem[]
  1408.   INIT("Out of memory!\n");
  1409. EXTCONST char no_security[]
  1410.   INIT("Insecure dependency in %s%s");
  1411. EXTCONST char no_sock_func[]
  1412.   INIT("Unsupported socket function \"%s\" called");
  1413. EXTCONST char no_dir_func[]
  1414.   INIT("Unsupported directory function \"%s\" called");
  1415. EXTCONST char no_func[]
  1416.   INIT("The %s function is unimplemented");
  1417. EXTCONST char no_myglob[]
  1418.   INIT("\"my\" variable %s can't be in a package");
  1419.  
  1420. EXT SV        sv_undef;
  1421. EXT SV        sv_no;
  1422. EXT SV        sv_yes;
  1423. #ifdef CSH
  1424.     EXT char *    cshname INIT(CSH);
  1425.     EXT I32    cshlen;
  1426. #endif
  1427.  
  1428. #ifdef DOINIT
  1429. EXT char *sig_name[] = { SIG_NAME };
  1430. EXT int   sig_num[]  = { SIG_NUM };
  1431. EXT SV    * psig_ptr[sizeof(sig_num)/sizeof(*sig_num)];
  1432. EXT SV  * psig_name[sizeof(sig_num)/sizeof(*sig_num)];
  1433. #else
  1434. EXT char *sig_name[];
  1435. EXT int   sig_num[];
  1436. EXT SV  * psig_ptr[];
  1437. EXT SV  * psig_name[];
  1438. #endif
  1439.  
  1440. /* fast case folding tables */
  1441.  
  1442. #ifdef DOINIT
  1443. EXTCONST  unsigned char fold[] = {
  1444.     0,    1,    2,    3,    4,    5,    6,    7,
  1445.     8,    9,    10,    11,    12,    13,    14,    15,
  1446.     16,    17,    18,    19,    20,    21,    22,    23,
  1447.     24,    25,    26,    27,    28,    29,    30,    31,
  1448.     32,    33,    34,    35,    36,    37,    38,    39,
  1449.     40,    41,    42,    43,    44,    45,    46,    47,
  1450.     48,    49,    50,    51,    52,    53,    54,    55,
  1451.     56,    57,    58,    59,    60,    61,    62,    63,
  1452.     64,    'a',    'b',    'c',    'd',    'e',    'f',    'g',
  1453.     'h',    'i',    'j',    'k',    'l',    'm',    'n',    'o',
  1454.     'p',    'q',    'r',    's',    't',    'u',    'v',    'w',
  1455.     'x',    'y',    'z',    91,    92,    93,    94,    95,
  1456.     96,    'A',    'B',    'C',    'D',    'E',    'F',    'G',
  1457.     'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
  1458.     'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',
  1459.     'X',    'Y',    'Z',    123,    124,    125,    126,    127,
  1460.     128,    129,    130,    131,    132,    133,    134,    135,
  1461.     136,    137,    138,    139,    140,    141,    142,    143,
  1462.     144,    145,    146,    147,    148,    149,    150,    151,
  1463.     152,    153,    154,    155,    156,    157,    158,    159,
  1464.     160,    161,    162,    163,    164,    165,    166,    167,
  1465.     168,    169,    170,    171,    172,    173,    174,    175,
  1466.     176,    177,    178,    179,    180,    181,    182,    183,
  1467.     184,    185,    186,    187,    188,    189,    190,    191,
  1468.     192,    193,    194,    195,    196,    197,    198,    199,
  1469.     200,    201,    202,    203,    204,    205,    206,    207,
  1470.     208,    209,    210,    211,    212,    213,    214,    215,
  1471.     216,    217,    218,    219,    220,    221,    222,    223,    
  1472.     224,    225,    226,    227,    228,    229,    230,    231,
  1473.     232,    233,    234,    235,    236,    237,    238,    239,
  1474.     240,    241,    242,    243,    244,    245,    246,    247,
  1475.     248,    249,    250,    251,    252,    253,    254,    255
  1476. };
  1477. #else
  1478. EXTCONST unsigned char fold[];
  1479. #endif
  1480.  
  1481. #ifdef DOINIT
  1482. EXT unsigned char fold_locale[] = {
  1483.     0,    1,    2,    3,    4,    5,    6,    7,
  1484.     8,    9,    10,    11,    12,    13,    14,    15,
  1485.     16,    17,    18,    19,    20,    21,    22,    23,
  1486.     24,    25,    26,    27,    28,    29,    30,    31,
  1487.     32,    33,    34,    35,    36,    37,    38,    39,
  1488.     40,    41,    42,    43,    44,    45,    46,    47,
  1489.     48,    49,    50,    51,    52,    53,    54,    55,
  1490.     56,    57,    58,    59,    60,    61,    62,    63,
  1491.     64,    'a',    'b',    'c',    'd',    'e',    'f',    'g',
  1492.     'h',    'i',    'j',    'k',    'l',    'm',    'n',    'o',
  1493.     'p',    'q',    'r',    's',    't',    'u',    'v',    'w',
  1494.     'x',    'y',    'z',    91,    92,    93,    94,    95,
  1495.     96,    'A',    'B',    'C',    'D',    'E',    'F',    'G',
  1496.     'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
  1497.     'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',
  1498.     'X',    'Y',    'Z',    123,    124,    125,    126,    127,
  1499.     128,    129,    130,    131,    132,    133,    134,    135,
  1500.     136,    137,    138,    139,    140,    141,    142,    143,
  1501.     144,    145,    146,    147,    148,    149,    150,    151,
  1502.     152,    153,    154,    155,    156,    157,    158,    159,
  1503.     160,    161,    162,    163,    164,    165,    166,    167,
  1504.     168,    169,    170,    171,    172,    173,    174,    175,
  1505.     176,    177,    178,    179,    180,    181,    182,    183,
  1506.     184,    185,    186,    187,    188,    189,    190,    191,
  1507.     192,    193,    194,    195,    196,    197,    198,    199,
  1508.     200,    201,    202,    203,    204,    205,    206,    207,
  1509.     208,    209,    210,    211,    212,    213,    214,    215,
  1510.     216,    217,    218,    219,    220,    221,    222,    223,    
  1511.     224,    225,    226,    227,    228,    229,    230,    231,
  1512.     232,    233,    234,    235,    236,    237,    238,    239,
  1513.     240,    241,    242,    243,    244,    245,    246,    247,
  1514.     248,    249,    250,    251,    252,    253,    254,    255
  1515. };
  1516. #else
  1517. EXT unsigned char fold_locale[];
  1518. #endif
  1519.  
  1520. #ifdef DOINIT
  1521. EXTCONST unsigned char freq[] = {    /* letter frequencies for mixed English/C */
  1522.     1,    2,    84,    151,    154,    155,    156,    157,
  1523.     165,    246,    250,    3,    158,    7,    18,    29,
  1524.     40,    51,    62,    73,    85,    96,    107,    118,
  1525.     129,    140,    147,    148,    149,    150,    152,    153,
  1526.     255,    182,    224,    205,    174,    176,    180,    217,
  1527.     233,    232,    236,    187,    235,    228,    234,    226,
  1528.     222,    219,    211,    195,    188,    193,    185,    184,
  1529.     191,    183,    201,    229,    181,    220,    194,    162,
  1530.     163,    208,    186,    202,    200,    218,    198,    179,
  1531.     178,    214,    166,    170,    207,    199,    209,    206,
  1532.     204,    160,    212,    216,    215,    192,    175,    173,
  1533.     243,    172,    161,    190,    203,    189,    164,    230,
  1534.     167,    248,    227,    244,    242,    255,    241,    231,
  1535.     240,    253,    169,    210,    245,    237,    249,    247,
  1536.     239,    168,    252,    251,    254,    238,    223,    221,
  1537.     213,    225,    177,    197,    171,    196,    159,    4,
  1538.     5,    6,    8,    9,    10,    11,    12,    13,
  1539.     14,    15,    16,    17,    19,    20,    21,    22,
  1540.     23,    24,    25,    26,    27,    28,    30,    31,
  1541.     32,    33,    34,    35,    36,    37,    38,    39,
  1542.     41,    42,    43,    44,    45,    46,    47,    48,
  1543.     49,    50,    52,    53,    54,    55,    56,    57,
  1544.     58,    59,    60,    61,    63,    64,    65,    66,
  1545.     67,    68,    69,    70,    71,    72,    74,    75,
  1546.     76,    77,    78,    79,    80,    81,    82,    83,
  1547.     86,    87,    88,    89,    90,    91,    92,    93,
  1548.     94,    95,    97,    98,    99,    100,    101,    102,
  1549.     103,    104,    105,    106,    108,    109,    110,    111,
  1550.     112,    113,    114,    115,    116,    117,    119,    120,
  1551.     121,    122,    123,    124,    125,    126,    127,    128,
  1552.     130,    131,    132,    133,    134,    135,    136,    137,
  1553.     138,    139,    141,    142,    143,    144,    145,    146
  1554. };
  1555. #else
  1556. EXTCONST unsigned char freq[];
  1557. #endif
  1558.  
  1559. #ifdef DEBUGGING
  1560. #ifdef DOINIT
  1561. EXTCONST char* block_type[] = {
  1562.     "NULL",
  1563.     "SUB",
  1564.     "EVAL",
  1565.     "LOOP",
  1566.     "SUBST",
  1567.     "BLOCK",
  1568. };
  1569. #else
  1570. EXTCONST char* block_type[];
  1571. #endif
  1572. #endif
  1573.  
  1574. /*****************************************************************************/
  1575. /* This lexer/parser stuff is currently global since yacc is hard to reenter */
  1576. /*****************************************************************************/
  1577. /* XXX This needs to be revisited, since BEGIN makes yacc re-enter... */
  1578.  
  1579. #include "perly.h"
  1580.  
  1581. typedef enum {
  1582.     XOPERATOR,
  1583.     XTERM,
  1584.     XREF,
  1585.     XSTATE,
  1586.     XBLOCK,
  1587.     XTERMBLOCK
  1588. } expectation;
  1589.  
  1590. EXT U32        lex_state;    /* next token is determined */
  1591. EXT U32        lex_defer;    /* state after determined token */
  1592. EXT expectation    lex_expect;    /* expect after determined token */
  1593. EXT I32        lex_brackets;    /* bracket count */
  1594. EXT I32        lex_formbrack;    /* bracket count at outer format level */
  1595. EXT I32        lex_fakebrack;    /* outer bracket is mere delimiter */
  1596. EXT I32        lex_casemods;    /* casemod count */
  1597. EXT I32        lex_dojoin;    /* doing an array interpolation */
  1598. EXT I32        lex_starts;    /* how many interps done on level */
  1599. EXT SV *    lex_stuff;    /* runtime pattern from m// or s/// */
  1600. EXT SV *    lex_repl;    /* runtime replacement from s/// */
  1601. EXT OP *    lex_op;        /* extra info to pass back on op */
  1602. EXT OP *    lex_inpat;    /* in pattern $) and $| are special */
  1603. EXT I32        lex_inwhat;    /* what kind of quoting are we in */
  1604. EXT char *    lex_brackstack;    /* what kind of brackets to pop */
  1605. EXT char *    lex_casestack;    /* what kind of case mods in effect */
  1606.  
  1607. /* What we know when we're in LEX_KNOWNEXT state. */
  1608. EXT YYSTYPE    nextval[5];    /* value of next token, if any */
  1609. EXT I32        nexttype[5];    /* type of next token */
  1610. EXT I32        nexttoke;
  1611.  
  1612. EXT PerlIO * VOL    rsfp INIT(Nullfp);
  1613. EXT SV *    linestr;
  1614. EXT char *    bufptr;
  1615. EXT char *    oldbufptr;
  1616. EXT char *    oldoldbufptr;
  1617. EXT char *    bufend;
  1618. EXT expectation expect INIT(XSTATE);    /* how to interpret ambiguous tokens */
  1619. EXT AV *     rsfp_filters;
  1620.  
  1621. EXT I32        multi_start;    /* 1st line of multi-line string */
  1622. EXT I32        multi_end;    /* last line of multi-line string */
  1623. EXT I32        multi_open;    /* delimiter of said string */
  1624. EXT I32        multi_close;    /* delimiter of said string */
  1625.  
  1626. EXT GV *    scrgv;
  1627. EXT I32        error_count;    /* how many errors so far, max 10 */
  1628. EXT I32        subline;    /* line this subroutine began on */
  1629. EXT SV *    subname;    /* name of current subroutine */
  1630.  
  1631. EXT CV *    compcv;        /* currently compiling subroutine */
  1632. EXT AV *    comppad;    /* storage for lexically scoped temporaries */
  1633. EXT AV *    comppad_name;    /* variable names for "my" variables */
  1634. EXT I32        comppad_name_fill;/* last "introduced" variable offset */
  1635. EXT I32        comppad_name_floor;/* start of vars in innermost block */
  1636. EXT I32        min_intro_pending;/* start of vars to introduce */
  1637. EXT I32        max_intro_pending;/* end of vars to introduce */
  1638. EXT I32        padix;        /* max used index in current "register" pad */
  1639. EXT I32        padix_floor;    /* how low may inner block reset padix */
  1640. EXT I32        pad_reset_pending; /* reset pad on next attempted alloc */
  1641. EXT COP        compiling;
  1642.  
  1643. EXT I32        thisexpr;    /* name id for nothing_in_common() */
  1644. EXT char *    last_uni;    /* position of last named-unary operator */
  1645. EXT char *    last_lop;    /* position of last list operator */
  1646. EXT OPCODE    last_lop_op;    /* last list operator */
  1647. EXT bool    in_my;        /* we're compiling a "my" declaration */
  1648. #ifdef FCRYPT
  1649. EXT I32        cryptseen;    /* has fast crypt() been initialized? */
  1650. #endif
  1651.  
  1652. EXT U32        hints;        /* various compilation flags */
  1653.  
  1654.                 /* Note: the lowest 8 bits are reserved for
  1655.                    stuffing into op->op_private */
  1656. #define HINT_INTEGER        0x00000001
  1657. #define HINT_STRICT_REFS    0x00000002
  1658.  
  1659. #define HINT_BLOCK_SCOPE    0x00000100
  1660. #define HINT_STRICT_SUBS    0x00000200
  1661. #define HINT_STRICT_VARS    0x00000400
  1662. #define HINT_LOCALE        0x00000800
  1663.  
  1664. /**************************************************************************/
  1665. /* This regexp stuff is global since it always happens within 1 expr eval */
  1666. /**************************************************************************/
  1667.  
  1668. EXT char *    regprecomp;    /* uncompiled string. */
  1669. EXT char *    regparse;    /* Input-scan pointer. */
  1670. EXT char *    regxend;    /* End of input for compile */
  1671. EXT I32        regnpar;    /* () count. */
  1672. EXT char *    regcode;    /* Code-emit pointer; ®dummy = don't. */
  1673. EXT I32        regsize;    /* Code size. */
  1674. EXT I32        regnaughty;    /* How bad is this pattern? */
  1675. EXT I32        regsawback;    /* Did we see \1, ...? */
  1676.  
  1677. EXT char *    reginput;    /* String-input pointer. */
  1678. EXT char *    regbol;        /* Beginning of input, for ^ check. */
  1679. EXT char *    regeol;        /* End of input, for $ check. */
  1680. EXT char **    regstartp;    /* Pointer to startp array. */
  1681. EXT char **    regendp;    /* Ditto for endp. */
  1682. EXT U32 *    reglastparen;    /* Similarly for lastparen. */
  1683. EXT char *    regtill;    /* How far we are required to go. */
  1684. EXT U16        regflags;    /* are we folding, multilining? */
  1685. EXT char    regprev;    /* char before regbol, \n if none */
  1686.  
  1687. EXT bool    do_undump;    /* -u or dump seen? */
  1688. EXT VOL U32    debug;
  1689.  
  1690. /***********************************************/
  1691. /* Global only to current interpreter instance */
  1692. /***********************************************/
  1693.  
  1694. #ifdef MULTIPLICITY
  1695. #define IEXT
  1696. #define IINIT(x)
  1697. struct interpreter {
  1698. #else
  1699. #define IEXT EXT
  1700. #define IINIT(x) INIT(x)
  1701. #endif
  1702.  
  1703. /* pseudo environmental stuff */
  1704. IEXT int    Iorigargc;
  1705. IEXT char **    Iorigargv;
  1706. IEXT GV *    Ienvgv;
  1707. IEXT GV *    Isiggv;
  1708. IEXT GV *    Iincgv;
  1709. IEXT char *    Iorigfilename;
  1710. IEXT SV *    Idiehook;
  1711. IEXT SV *    Iwarnhook;
  1712. IEXT SV *    Iparsehook;
  1713.  
  1714. /* Various states of an input record separator SV (rs, nrs) */
  1715. #define RsSNARF(sv)   (! SvOK(sv))
  1716. #define RsSIMPLE(sv)  (SvOK(sv) && SvCUR(sv))
  1717. #define RsPARA(sv)    (SvOK(sv) && ! SvCUR(sv))
  1718.  
  1719. /* switches */
  1720. IEXT char *    Icddir;
  1721. IEXT bool    Iminus_c;
  1722. IEXT char    Ipatchlevel[10];
  1723. IEXT char **    Ilocalpatches;
  1724. IEXT SV *    Inrs;
  1725. IEXT char *    Isplitstr IINIT(" ");
  1726. IEXT bool    Ipreprocess;
  1727. IEXT bool    Iminus_n;
  1728. IEXT bool    Iminus_p;
  1729. IEXT bool    Iminus_l;
  1730. IEXT bool    Iminus_a;
  1731. IEXT bool    Iminus_F;
  1732. IEXT bool    Idoswitches;
  1733. IEXT bool    Idowarn;
  1734. IEXT bool    Idoextract;
  1735. IEXT bool    Isawampersand;    /* must save all match strings */
  1736. IEXT bool    Isawstudy;    /* do fbm_instr on all strings */
  1737. IEXT bool    Isawvec;
  1738. IEXT bool    Iunsafe;
  1739. IEXT char *    Iinplace;
  1740. IEXT char *    Ie_tmpname;
  1741. IEXT PerlIO *    Ie_fp;
  1742. IEXT U32    Iperldb;
  1743.     /* This value may be raised by extensions for testing purposes */
  1744. IEXT int    Iperl_destruct_level IINIT(0);    /* 0=none, 1=full, 2=full with checks */
  1745.  
  1746. /* magical thingies */
  1747. IEXT Time_t    Ibasetime;        /* $^T */
  1748. IEXT SV *    Iformfeed;        /* $^L */
  1749. IEXT char *    Ichopset IINIT(" \n-");    /* $: */
  1750. IEXT SV *    Irs;            /* $/ */
  1751. IEXT char *    Iofs;            /* $, */
  1752. IEXT STRLEN    Iofslen;
  1753. IEXT char *    Iors;            /* $\ */
  1754. IEXT STRLEN    Iorslen;
  1755. IEXT char *    Iofmt;            /* $# */
  1756. IEXT I32    Imaxsysfd IINIT(MAXSYSFD); /* top fd to pass to subprocesses */
  1757. IEXT int    Imultiline;        /* $*--do strings hold >1 line? */
  1758. IEXT I32    Istatusvalue;        /* $? */
  1759. #ifdef VMS
  1760. IEXT U32    Istatusvalue_vms;
  1761. #endif
  1762.  
  1763. IEXT struct stat Istatcache;        /* _ */
  1764. IEXT GV *    Istatgv;
  1765. IEXT SV *    Istatname IINIT(Nullsv);
  1766.  
  1767. /* shortcuts to various I/O objects */
  1768. IEXT GV *    Istdingv;
  1769. IEXT GV *    Ilast_in_gv;
  1770. IEXT GV *    Idefgv;
  1771. IEXT GV *    Iargvgv;
  1772. IEXT GV *    Idefoutgv;
  1773. IEXT GV *    Iargvoutgv;
  1774.  
  1775. /* shortcuts to regexp stuff */
  1776. IEXT GV *    Ileftgv;
  1777. IEXT GV *    Iampergv;
  1778. IEXT GV *    Irightgv;
  1779. IEXT PMOP *    Icurpm;        /* what to do \ interps from */
  1780. IEXT I32 *    Iscreamfirst;
  1781. IEXT I32 *    Iscreamnext;
  1782. IEXT I32    Imaxscream IINIT(-1);
  1783. IEXT SV *    Ilastscream;
  1784.  
  1785. /* shortcuts to misc objects */
  1786. IEXT GV *    Ierrgv;
  1787.  
  1788. /* shortcuts to debugging objects */
  1789. IEXT GV *    IDBgv;
  1790. IEXT GV *    IDBline;
  1791. IEXT GV *    IDBsub;
  1792. IEXT SV *    IDBsingle;
  1793. IEXT SV *    IDBtrace;
  1794. IEXT SV *    IDBsignal;
  1795. IEXT AV *    Ilineary;    /* lines of script for debugger */
  1796. IEXT AV *    Idbargs;    /* args to call listed by caller function */
  1797.  
  1798. /* symbol tables */
  1799. IEXT HV *    Idefstash;    /* main symbol table */
  1800. IEXT HV *    Icurstash;    /* symbol table for current package */
  1801. IEXT HV *    Idebstash;    /* symbol table for perldb package */
  1802. IEXT SV *    Icurstname;    /* name of current package */
  1803. IEXT AV *    Ibeginav;    /* names of BEGIN subroutines */
  1804. IEXT AV *    Iendav;        /* names of END subroutines */
  1805. IEXT HV *    Istrtab;    /* shared string table */
  1806.  
  1807. /* memory management */
  1808. IEXT SV **    Itmps_stack;
  1809. IEXT I32    Itmps_ix IINIT(-1);
  1810. IEXT I32    Itmps_floor IINIT(-1);
  1811. IEXT I32    Itmps_max;
  1812. IEXT I32    Isv_count;    /* how many SV* are currently allocated */
  1813. IEXT I32    Isv_objcount;    /* how many objects are currently allocated */
  1814. IEXT SV*    Isv_root;    /* storage for SVs belonging to interp */
  1815. IEXT SV*    Isv_arenaroot;    /* list of areas for garbage collection */
  1816.  
  1817. /* funky return mechanisms */
  1818. IEXT I32    Ilastspbase;
  1819. IEXT I32    Ilastsize;
  1820. IEXT int    Iforkprocess;    /* so do_open |- can return proc# */
  1821.  
  1822. /* subprocess state */
  1823. IEXT AV *    Ifdpid;        /* keep fd-to-pid mappings for my_popen */
  1824.  
  1825. /* internal state */
  1826. IEXT VOL int    Iin_eval;    /* trap "fatal" errors? */
  1827. IEXT OP *    Irestartop;    /* Are we propagating an error from croak? */
  1828. IEXT int    Idelaymagic;    /* ($<,$>) = ... */
  1829. IEXT bool    Idirty;        /* In the middle of tearing things down? */
  1830. IEXT U8        Ilocalizing;    /* are we processing a local() list? */
  1831. IEXT bool    Itainted;    /* using variables controlled by $< */
  1832. IEXT bool    Itainting;    /* doing taint checks */
  1833. IEXT char *    Iop_mask IINIT(NULL);    /* masked operations for safe evals */
  1834.  
  1835. /* trace state */
  1836. IEXT I32    Idlevel;
  1837. IEXT I32    Idlmax IINIT(128);
  1838. IEXT char *    Idebname;
  1839. IEXT char *    Idebdelim;
  1840.  
  1841. /* current interpreter roots */
  1842. IEXT CV *    Imain_cv;
  1843. IEXT OP *    Imain_root;
  1844. IEXT OP *    Imain_start;
  1845. IEXT OP *    Ieval_root;
  1846. IEXT OP *    Ieval_start;
  1847.  
  1848. /* runtime control stuff */
  1849. IEXT COP * VOL    Icurcop IINIT(&compiling);
  1850. IEXT COP *    Icurcopdb IINIT(NULL);
  1851. IEXT line_t    Icopline IINIT(NOLINE);
  1852. IEXT CONTEXT *    Icxstack;
  1853. IEXT I32    Icxstack_ix IINIT(-1);
  1854. IEXT I32    Icxstack_max IINIT(128);
  1855. IEXT JMPENV     Istart_env;    /* empty startup sigjmp() environment */
  1856. IEXT JMPENV *    Itop_env;    /* ptr. to current sigjmp() environment */
  1857. IEXT I32    Irunlevel;
  1858.  
  1859. /* stack stuff */
  1860. IEXT AV *    Icurstack;        /* THE STACK */
  1861. IEXT AV *    Imainstack;    /* the stack when nothing funny is happening */
  1862. IEXT SV **    Imystack_base;    /* stack->array_ary */
  1863. IEXT SV **    Imystack_sp;    /* stack pointer now */
  1864. IEXT SV **    Imystack_max;    /* stack->array_ary + stack->array_max */
  1865.  
  1866. /* format accumulators */
  1867. IEXT SV *    Iformtarget;
  1868. IEXT SV *    Ibodytarget;
  1869. IEXT SV *    Itoptarget;
  1870.  
  1871. /* statics moved here for shared library purposes */
  1872. IEXT SV        Istrchop;    /* return value from chop */
  1873. IEXT int    Ifilemode;    /* so nextargv() can preserve mode */
  1874. IEXT int    Ilastfd;    /* what to preserve mode on */
  1875. IEXT char *    Ioldname;    /* what to preserve mode on */
  1876. IEXT char **    IArgv;        /* stuff to free from do_aexec, vfork safe */
  1877. IEXT char *    ICmd;        /* stuff to free from do_aexec, vfork safe */
  1878. IEXT OP *    Isortcop;    /* user defined sort routine */
  1879. IEXT HV *    Isortstash;    /* which is in some package or other */
  1880. IEXT GV *    Ifirstgv;    /* $a */
  1881. IEXT GV *    Isecondgv;    /* $b */
  1882. IEXT AV *    Isortstack;    /* temp stack during pp_sort() */
  1883. IEXT AV *    Isignalstack;    /* temp stack during sighandler() */
  1884. IEXT SV *    Imystrk;    /* temp key string for do_each() */
  1885. IEXT I32    Idumplvl;    /* indentation level on syntax tree dump */
  1886. IEXT PMOP *    Ioldlastpm;    /* for saving regexp context during debugger */
  1887. IEXT I32    Igensym;    /* next symbol for getsym() to define */
  1888. IEXT bool    Ipreambled;
  1889. IEXT AV *    Ipreambleav;
  1890. IEXT int    Ilaststatval IINIT(-1);
  1891. IEXT I32    Ilaststype IINIT(OP_STAT);
  1892. IEXT SV *    Imess_sv;
  1893.  
  1894. #undef IEXT
  1895. #undef IINIT
  1896.  
  1897. #ifdef MULTIPLICITY
  1898. };
  1899. #else
  1900. struct interpreter {
  1901.     char broiled;
  1902. };
  1903. #endif
  1904.  
  1905. #include "pp.h"
  1906.  
  1907. #ifdef __cplusplus
  1908. extern "C" {
  1909. #endif
  1910.  
  1911. #include "proto.h"
  1912.  
  1913. #ifdef EMBED
  1914. #define Perl_sv_setptrobj(rv,ptr,name) Perl_sv_setref_iv(rv,name,(IV)ptr)
  1915. #define Perl_sv_setptrref(rv,ptr) Perl_sv_setref_iv(rv,Nullch,(IV)ptr)
  1916. #else
  1917. #define sv_setptrobj(rv,ptr,name) sv_setref_iv(rv,name,(IV)ptr)
  1918. #define sv_setptrref(rv,ptr) sv_setref_iv(rv,Nullch,(IV)ptr)
  1919. #endif
  1920.  
  1921. #ifdef __cplusplus
  1922. };
  1923. #endif
  1924.  
  1925. /* The following must follow proto.h */
  1926.  
  1927. #ifdef DOINIT
  1928.  
  1929. EXT MGVTBL vtbl_sv =    {magic_get,
  1930.                 magic_set,
  1931.                     magic_len,
  1932.                         0,    0};
  1933. EXT MGVTBL vtbl_env =    {0,    0,    0,    magic_clear_all_env,
  1934.                             0};
  1935. EXT MGVTBL vtbl_envelem =    {0,    magic_setenv,
  1936.                     0,    magic_clearenv,
  1937.                             0};
  1938. EXT MGVTBL vtbl_sig =    {0,    0,         0, 0, 0};
  1939. EXT MGVTBL vtbl_sigelem =    {magic_getsig,
  1940.                     magic_setsig,
  1941.                     0,    magic_clearsig,
  1942.                             0};
  1943. EXT MGVTBL vtbl_pack =    {0,    0,    0,    magic_wipepack,
  1944.                             0};
  1945. EXT MGVTBL vtbl_packelem =    {magic_getpack,
  1946.                 magic_setpack,
  1947.                     0,    magic_clearpack,
  1948.                             0};
  1949. EXT MGVTBL vtbl_dbline =    {0,    magic_setdbline,
  1950.                     0,    0,    0};
  1951. EXT MGVTBL vtbl_isa =    {0,    magic_setisa,
  1952.                     0,    0,    0};
  1953. EXT MGVTBL vtbl_isaelem =    {0,    magic_setisa,
  1954.                     0,    0,    0};
  1955. EXT MGVTBL vtbl_arylen =    {magic_getarylen,
  1956.                 magic_setarylen,
  1957.                     0,    0,    0};
  1958. EXT MGVTBL vtbl_glob =    {magic_getglob,
  1959.                 magic_setglob,
  1960.                     0,    0,    0};
  1961. EXT MGVTBL vtbl_mglob =    {0,    magic_setmglob,
  1962.                     0,    0,    0};
  1963. EXT MGVTBL vtbl_nkeys =    {0,    magic_setnkeys,
  1964.                     0,    0,    0};
  1965. EXT MGVTBL vtbl_taint =    {magic_gettaint,magic_settaint,
  1966.                     0,    0,    0};
  1967. EXT MGVTBL vtbl_substr =    {0,    magic_setsubstr,
  1968.                     0,    0,    0};
  1969. EXT MGVTBL vtbl_vec =    {0,    magic_setvec,
  1970.                     0,    0,    0};
  1971. EXT MGVTBL vtbl_pos =    {magic_getpos,
  1972.                 magic_setpos,
  1973.                     0,    0,    0};
  1974. EXT MGVTBL vtbl_bm =    {0,    magic_setbm,
  1975.                     0,    0,    0};
  1976. EXT MGVTBL vtbl_fm =    {0,    magic_setfm,
  1977.                     0,    0,    0};
  1978. EXT MGVTBL vtbl_uvar =    {magic_getuvar,
  1979.                 magic_setuvar,
  1980.                     0,    0,    0};
  1981. EXT MGVTBL vtbl_defelem = {magic_getdefelem,magic_setdefelem,
  1982.                     0,    0,    magic_freedefelem};
  1983.  
  1984. #ifdef USE_LOCALE_COLLATE
  1985. EXT MGVTBL vtbl_collxfrm = {0,
  1986.                 magic_setcollxfrm,
  1987.                     0,    0,    0};
  1988. #endif
  1989.  
  1990. #ifdef OVERLOAD
  1991. EXT MGVTBL vtbl_amagic =       {0,     magic_setamagic,
  1992.                                         0,      0,      magic_setamagic};
  1993. EXT MGVTBL vtbl_amagicelem =   {0,     magic_setamagic,
  1994.                                         0,      0,      magic_setamagic};
  1995. #endif /* OVERLOAD */
  1996.  
  1997. #else /* !DOINIT */
  1998.  
  1999. EXT MGVTBL vtbl_sv;
  2000. EXT MGVTBL vtbl_env;
  2001. EXT MGVTBL vtbl_envelem;
  2002. EXT MGVTBL vtbl_sig;
  2003. EXT MGVTBL vtbl_sigelem;
  2004. EXT MGVTBL vtbl_pack;
  2005. EXT MGVTBL vtbl_packelem;
  2006. EXT MGVTBL vtbl_dbline;
  2007. EXT MGVTBL vtbl_isa;
  2008. EXT MGVTBL vtbl_isaelem;
  2009. EXT MGVTBL vtbl_arylen;
  2010. EXT MGVTBL vtbl_glob;
  2011. EXT MGVTBL vtbl_mglob;
  2012. EXT MGVTBL vtbl_nkeys;
  2013. EXT MGVTBL vtbl_taint;
  2014. EXT MGVTBL vtbl_substr;
  2015. EXT MGVTBL vtbl_vec;
  2016. EXT MGVTBL vtbl_pos;
  2017. EXT MGVTBL vtbl_bm;
  2018. EXT MGVTBL vtbl_fm;
  2019. EXT MGVTBL vtbl_uvar;
  2020. EXT MGVTBL vtbl_defelem;
  2021.  
  2022. #ifdef USE_LOCALE_COLLATE
  2023. EXT MGVTBL vtbl_collxfrm;
  2024. #endif
  2025.  
  2026. #ifdef OVERLOAD
  2027. EXT MGVTBL vtbl_amagic;
  2028. EXT MGVTBL vtbl_amagicelem;
  2029. #endif /* OVERLOAD */
  2030.  
  2031. #endif /* !DOINIT */
  2032.  
  2033. #ifdef OVERLOAD
  2034.  
  2035. EXT long amagic_generation;
  2036.  
  2037. #define NofAMmeth 58
  2038. #ifdef DOINIT
  2039. EXTCONST char * AMG_names[NofAMmeth] = {
  2040.   "fallback",    "abs",            /* "fallback" should be the first. */
  2041.   "bool",    "nomethod",
  2042.   "\"\"",    "0+",
  2043.   "+",        "+=",
  2044.   "-",        "-=",
  2045.   "*",        "*=",
  2046.   "/",        "/=",
  2047.   "%",        "%=",
  2048.   "**",        "**=",
  2049.   "<<",        "<<=",
  2050.   ">>",        ">>=",
  2051.   "&",        "&=",
  2052.   "|",        "|=",
  2053.   "^",        "^=",
  2054.   "<",        "<=",
  2055.   ">",        ">=",
  2056.   "==",        "!=",
  2057.   "<=>",    "cmp",
  2058.   "lt",        "le",
  2059.   "gt",        "ge",
  2060.   "eq",        "ne",
  2061.   "!",        "~",
  2062.   "++",        "--",
  2063.   "atan2",    "cos",
  2064.   "sin",    "exp",
  2065.   "log",    "sqrt",
  2066.   "x",        "x=",
  2067.   ".",        ".=",
  2068.   "=",        "neg"
  2069. };
  2070. #else
  2071. EXTCONST char * AMG_names[NofAMmeth];
  2072. #endif /* def INITAMAGIC */
  2073.  
  2074. struct am_table {
  2075.   long was_ok_sub;
  2076.   long was_ok_am;
  2077.   U32 flags;
  2078.   CV* table[NofAMmeth];
  2079.   long fallback;
  2080. };
  2081. struct am_table_short {
  2082.   long was_ok_sub;
  2083.   long was_ok_am;
  2084.   U32 flags;
  2085. };
  2086. typedef struct am_table AMT;
  2087. typedef struct am_table_short AMTS;
  2088.  
  2089. #define AMGfallNEVER    1
  2090. #define AMGfallNO    2
  2091. #define AMGfallYES    3
  2092.  
  2093. #define AMTf_AMAGIC        1
  2094. #define AMT_AMAGIC(amt)        ((amt)->flags & AMTf_AMAGIC)
  2095. #define AMT_AMAGIC_on(amt)    ((amt)->flags |= AMTf_AMAGIC)
  2096. #define AMT_AMAGIC_off(amt)    ((amt)->flags &= ~AMTf_AMAGIC)
  2097.  
  2098. enum {
  2099.   fallback_amg,    abs_amg,
  2100.   bool__amg,    nomethod_amg,
  2101.   string_amg,    numer_amg,
  2102.   add_amg,    add_ass_amg,
  2103.   subtr_amg,    subtr_ass_amg,
  2104.   mult_amg,    mult_ass_amg,
  2105.   div_amg,    div_ass_amg,
  2106.   mod_amg,    mod_ass_amg,
  2107.   pow_amg,    pow_ass_amg,
  2108.   lshift_amg,    lshift_ass_amg,
  2109.   rshift_amg,    rshift_ass_amg,
  2110.   band_amg,    band_ass_amg,
  2111.   bor_amg,    bor_ass_amg,
  2112.   bxor_amg,    bxor_ass_amg,
  2113.   lt_amg,    le_amg,
  2114.   gt_amg,    ge_amg,
  2115.   eq_amg,    ne_amg,
  2116.   ncmp_amg,    scmp_amg,
  2117.   slt_amg,    sle_amg,
  2118.   sgt_amg,    sge_amg,
  2119.   seq_amg,    sne_amg,
  2120.   not_amg,    compl_amg,
  2121.   inc_amg,    dec_amg,
  2122.   atan2_amg,    cos_amg,
  2123.   sin_amg,    exp_amg,
  2124.   log_amg,    sqrt_amg,
  2125.   repeat_amg,   repeat_ass_amg,
  2126.   concat_amg,    concat_ass_amg,
  2127.   copy_amg,    neg_amg
  2128. };
  2129.  
  2130. /*
  2131.  * some compilers like to redefine cos et alia as faster
  2132.  * (and less accurate?) versions called F_cos et cetera (Quidquid
  2133.  * latine dictum sit, altum viditur.)  This trick collides with
  2134.  * the Perl overloading (amg).  The following #defines fool both.
  2135.  */
  2136.  
  2137. #ifdef _FASTMATH
  2138. #   ifdef atan2
  2139. #       define F_atan2_amg  atan2_amg
  2140. #   endif
  2141. #   ifdef cos
  2142. #       define F_cos_amg    cos_amg
  2143. #   endif
  2144. #   ifdef exp
  2145. #       define F_exp_amg    exp_amg
  2146. #   endif
  2147. #   ifdef log
  2148. #       define F_log_amg    log_amg
  2149. #   endif
  2150. #   ifdef pow
  2151. #       define F_pow_amg    pow_amg
  2152. #   endif
  2153. #   ifdef sin
  2154. #       define F_sin_amg    sin_amg
  2155. #   endif
  2156. #   ifdef sqrt
  2157. #       define F_sqrt_amg   sqrt_amg
  2158. #   endif
  2159. #endif /* _FASTMATH */
  2160.  
  2161. #endif /* OVERLOAD */
  2162.  
  2163. #define PERLDB_ALL    0xff
  2164. #define PERLDBf_SUB    0x01        /* Debug sub enter/exit. */
  2165. #define PERLDBf_LINE    0x02        /* Keep line #. */
  2166. #define PERLDBf_NOOPT    0x04        /* Switch off optimizations. */
  2167. #define PERLDBf_INTER    0x08        /* Preserve more data for
  2168.                        later inspections.  */
  2169. #define PERLDBf_SUBLINE    0x10        /* Keep subr source lines. */
  2170. #define PERLDBf_SINGLE    0x20        /* Start with single-step on. */
  2171.  
  2172. #define PERLDB_SUB    (perldb && (perldb & PERLDBf_SUB))
  2173. #define PERLDB_LINE    (perldb && (perldb & PERLDBf_LINE))
  2174. #define PERLDB_NOOPT    (perldb && (perldb & PERLDBf_NOOPT))
  2175. #define PERLDB_INTER    (perldb && (perldb & PERLDBf_INTER))
  2176. #define PERLDB_SUBLINE    (perldb && (perldb & PERLDBf_SUBLINE))
  2177. #define PERLDB_SINGLE    (perldb && (perldb & PERLDBf_SINGLE))
  2178.  
  2179. #ifdef USE_LOCALE_COLLATE
  2180. EXT U32        collation_ix;        /* Collation generation index */
  2181. EXT char *    collation_name;        /* Name of current collation */
  2182. EXT bool    collation_standard INIT(TRUE); /* Assume simple collation */
  2183. EXT Size_t    collxfrm_base;        /* Basic overhead in *xfrm() */
  2184. EXT Size_t    collxfrm_mult INIT(2);    /* Expansion factor in *xfrm() */
  2185. #endif /* USE_LOCALE_COLLATE */
  2186.  
  2187. #ifdef USE_LOCALE_NUMERIC
  2188.  
  2189. EXT char *    numeric_name;        /* Name of current numeric locale */
  2190. EXT bool    numeric_standard INIT(TRUE); /* Assume simple numerics */
  2191. EXT bool    numeric_local INIT(TRUE);    /* Assume local numerics */
  2192.  
  2193. #define SET_NUMERIC_STANDARD() \
  2194.     STMT_START {                \
  2195.     if (! numeric_standard)            \
  2196.         perl_set_numeric_standard();    \
  2197.     } STMT_END
  2198.  
  2199. #define SET_NUMERIC_LOCAL() \
  2200.     STMT_START {                \
  2201.     if (! numeric_local)            \
  2202.         perl_set_numeric_local();        \
  2203.     } STMT_END
  2204.  
  2205. #else /* !USE_LOCALE_NUMERIC */
  2206.  
  2207. #define SET_NUMERIC_STANDARD()  /**/
  2208. #define SET_NUMERIC_LOCAL()     /**/
  2209.  
  2210. #endif /* !USE_LOCALE_NUMERIC */
  2211.  
  2212. #if !defined(PERLIO_IS_STDIO) && defined(HAS_ATTRIBUTE)
  2213. /* 
  2214.  * Now we have __attribute__ out of the way 
  2215.  * Remap printf 
  2216.  */
  2217. #define printf PerlIO_stdoutf
  2218. #endif
  2219.  
  2220. #endif /* Include guard */
  2221.  
  2222.