home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / perl560.zip / iperlsys.h < prev    next >
C/C++ Source or Header  |  2000-03-05  |  49KB  |  1,486 lines

  1. /*
  2.  * iperlsys.h - Perl's interface to the system
  3.  *
  4.  * This file defines the system level functionality that perl needs.
  5.  *
  6.  * When using C, this definition is in the form of a set of macros
  7.  * that can be #defined to the system-level function (or a wrapper
  8.  * provided elsewhere).
  9.  *
  10.  * When using C++ with -DPERL_OBJECT, this definition is in the
  11.  * form of a set of virtual base classes which must be subclassed to
  12.  * provide a real implementation.  The Perl Object will use instances
  13.  * of this implementation to use the system-level functionality.
  14.  *
  15.  * GSAR 21-JUN-98
  16.  */
  17.  
  18. #ifndef __Inc__IPerl___
  19. #define __Inc__IPerl___
  20.  
  21. /*
  22.  *    PerlXXX_YYY explained - DickH and DougL @ ActiveState.com
  23.  *
  24.  * XXX := functional group
  25.  * YYY := stdlib/OS function name
  26.  *
  27.  * Continuing with the theme of PerlIO, all OS functionality was
  28.  * encapsulated into one of several interfaces.
  29.  *
  30.  * PerlIO - stdio
  31.  * PerlLIO - low level I/O
  32.  * PerlMem - malloc, realloc, free
  33.  * PerlDir - directory related
  34.  * PerlEnv - process environment handling
  35.  * PerlProc - process control
  36.  * PerlSock - socket functions
  37.  *
  38.  *
  39.  * The features of this are:
  40.  * 1. All OS dependant code is in the Perl Host and not the Perl Core.
  41.  *    (At least this is the holy grail goal of this work)
  42.  * 2. The Perl Host (see perl.h for description) can provide a new and
  43.  *    improved interface to OS functionality if required.
  44.  * 3. Developers can easily hook into the OS calls for instrumentation
  45.  *    or diagnostic purposes.
  46.  *
  47.  * What was changed to do this:
  48.  * 1. All calls to OS functions were replaced with PerlXXX_YYY
  49.  *
  50.  */
  51.  
  52.  
  53. /*
  54.     Interface for perl stdio functions
  55. */
  56.  
  57.  
  58. /* Clean up (or at least document) the various possible #defines.
  59.    This section attempts to match the 5.003_03 Configure variables
  60.    onto the 5.003_02 header file values.
  61.    I can't figure out where USE_STDIO was supposed to be set.
  62.    --AD
  63. */
  64. #ifndef USE_PERLIO
  65. # define PERLIO_IS_STDIO
  66. #endif
  67.  
  68. /* Below is the 5.003_02 stuff. */
  69. #ifdef USE_STDIO
  70. #  ifndef PERLIO_IS_STDIO
  71. #      define PERLIO_IS_STDIO
  72. #  endif
  73. #else
  74. extern void PerlIO_init (void);
  75. #endif
  76.  
  77. #ifndef Sighandler_t
  78. typedef Signal_t (*Sighandler_t) (int);
  79. #endif
  80.  
  81. #if defined(PERL_IMPLICIT_SYS)
  82.  
  83. #ifndef PerlIO
  84. typedef struct _PerlIO PerlIO;
  85. #endif
  86.  
  87. /* IPerlStdIO        */
  88. struct IPerlStdIO;
  89. struct IPerlStdIOInfo;
  90. typedef PerlIO*        (*LPStdin)(struct IPerlStdIO*);
  91. typedef PerlIO*        (*LPStdout)(struct IPerlStdIO*);
  92. typedef PerlIO*        (*LPStderr)(struct IPerlStdIO*);
  93. typedef PerlIO*        (*LPOpen)(struct IPerlStdIO*, const char*,
  94.                 const char*);
  95. typedef int        (*LPClose)(struct IPerlStdIO*, PerlIO*);
  96. typedef int        (*LPEof)(struct IPerlStdIO*, PerlIO*);
  97. typedef int        (*LPError)(struct IPerlStdIO*, PerlIO*);
  98. typedef void        (*LPClearerr)(struct IPerlStdIO*, PerlIO*);
  99. typedef int        (*LPGetc)(struct IPerlStdIO*, PerlIO*);
  100. typedef char*        (*LPGetBase)(struct IPerlStdIO*, PerlIO*);
  101. typedef int        (*LPGetBufsiz)(struct IPerlStdIO*, PerlIO*);
  102. typedef int        (*LPGetCnt)(struct IPerlStdIO*, PerlIO*);
  103. typedef char*        (*LPGetPtr)(struct IPerlStdIO*, PerlIO*);
  104. typedef char*        (*LPGets)(struct IPerlStdIO*, PerlIO*, char*, int);
  105. typedef int        (*LPPutc)(struct IPerlStdIO*, PerlIO*, int);
  106. typedef int        (*LPPuts)(struct IPerlStdIO*, PerlIO*, const char*);
  107. typedef int        (*LPFlush)(struct IPerlStdIO*, PerlIO*);
  108. typedef int        (*LPUngetc)(struct IPerlStdIO*, PerlIO*,int);
  109. typedef int        (*LPFileno)(struct IPerlStdIO*, PerlIO*);
  110. typedef PerlIO*        (*LPFdopen)(struct IPerlStdIO*, int, const char*);
  111. typedef PerlIO*        (*LPReopen)(struct IPerlStdIO*, const char*,
  112.                 const char*, PerlIO*);
  113. typedef SSize_t        (*LPRead)(struct IPerlStdIO*, PerlIO*, void*, Size_t);
  114. typedef SSize_t        (*LPWrite)(struct IPerlStdIO*, PerlIO*, const void*,
  115.                 Size_t);
  116. typedef void        (*LPSetBuf)(struct IPerlStdIO*, PerlIO*, char*);
  117. typedef int        (*LPSetVBuf)(struct IPerlStdIO*, PerlIO*, char*, int,
  118.                 Size_t);
  119. typedef void        (*LPSetCnt)(struct IPerlStdIO*, PerlIO*, int);
  120. typedef void        (*LPSetPtrCnt)(struct IPerlStdIO*, PerlIO*, char*,
  121.                 int);
  122. typedef void        (*LPSetlinebuf)(struct IPerlStdIO*, PerlIO*);
  123. typedef int        (*LPPrintf)(struct IPerlStdIO*, PerlIO*, const char*, 
  124.                 ...);
  125. typedef int        (*LPVprintf)(struct IPerlStdIO*, PerlIO*, const char*,
  126.                 va_list);
  127. typedef long        (*LPTell)(struct IPerlStdIO*, PerlIO*);
  128. typedef int        (*LPSeek)(struct IPerlStdIO*, PerlIO*, Off_t, int);
  129. typedef void        (*LPRewind)(struct IPerlStdIO*, PerlIO*);
  130. typedef PerlIO*        (*LPTmpfile)(struct IPerlStdIO*);
  131. typedef int        (*LPGetpos)(struct IPerlStdIO*, PerlIO*, Fpos_t*);
  132. typedef int        (*LPSetpos)(struct IPerlStdIO*, PerlIO*,
  133.                 const Fpos_t*);
  134. typedef void        (*LPInit)(struct IPerlStdIO*);
  135. typedef void        (*LPInitOSExtras)(struct IPerlStdIO*);
  136. typedef PerlIO*        (*LPFdupopen)(struct IPerlStdIO*, PerlIO*);
  137.  
  138. struct IPerlStdIO
  139. {
  140.     LPStdin        pStdin;
  141.     LPStdout        pStdout;
  142.     LPStderr        pStderr;
  143.     LPOpen        pOpen;
  144.     LPClose        pClose;
  145.     LPEof        pEof;
  146.     LPError        pError;
  147.     LPClearerr        pClearerr;
  148.     LPGetc        pGetc;
  149.     LPGetBase        pGetBase;
  150.     LPGetBufsiz        pGetBufsiz;
  151.     LPGetCnt        pGetCnt;
  152.     LPGetPtr        pGetPtr;
  153.     LPGets        pGets;
  154.     LPPutc        pPutc;
  155.     LPPuts        pPuts;
  156.     LPFlush        pFlush;
  157.     LPUngetc        pUngetc;
  158.     LPFileno        pFileno;
  159.     LPFdopen        pFdopen;
  160.     LPReopen        pReopen;
  161.     LPRead        pRead;
  162.     LPWrite        pWrite;
  163.     LPSetBuf        pSetBuf;
  164.     LPSetVBuf        pSetVBuf;
  165.     LPSetCnt        pSetCnt;
  166.     LPSetPtrCnt        pSetPtrCnt;
  167.     LPSetlinebuf    pSetlinebuf;
  168.     LPPrintf        pPrintf;
  169.     LPVprintf        pVprintf;
  170.     LPTell        pTell;
  171.     LPSeek        pSeek;
  172.     LPRewind        pRewind;
  173.     LPTmpfile        pTmpfile;
  174.     LPGetpos        pGetpos;
  175.     LPSetpos        pSetpos;
  176.     LPInit        pInit;
  177.     LPInitOSExtras    pInitOSExtras;
  178.     LPFdupopen        pFdupopen;
  179. };
  180.  
  181. struct IPerlStdIOInfo
  182. {
  183.     unsigned long    nCount;        /* number of entries expected */
  184.     struct IPerlStdIO    perlStdIOList;
  185. };
  186.  
  187. #ifdef USE_STDIO_PTR
  188. #  define PerlIO_has_cntptr(f)        1       
  189. #  ifdef STDIO_CNT_LVALUE
  190. #    define PerlIO_canset_cnt(f)    1      
  191. #    ifdef STDIO_PTR_LVALUE
  192. #      define PerlIO_fast_gets(f)    1        
  193. #    endif
  194. #  else
  195. #    define PerlIO_canset_cnt(f)    0      
  196. #  endif
  197. #else  /* USE_STDIO_PTR */
  198. #  define PerlIO_has_cntptr(f)        0
  199. #  define PerlIO_canset_cnt(f)        0
  200. #endif /* USE_STDIO_PTR */
  201.  
  202. #ifndef PerlIO_fast_gets
  203. #define PerlIO_fast_gets(f)        0        
  204. #endif
  205.  
  206. #ifdef FILE_base
  207. #define PerlIO_has_base(f)        1
  208. #else
  209. #define PerlIO_has_base(f)        0
  210. #endif
  211.  
  212. #define PerlIO_stdin()                            \
  213.     (*PL_StdIO->pStdin)(PL_StdIO)
  214. #define PerlIO_stdout()                            \
  215.     (*PL_StdIO->pStdout)(PL_StdIO)
  216. #define PerlIO_stderr()                            \
  217.     (*PL_StdIO->pStderr)(PL_StdIO)
  218. #define PerlIO_open(x,y)                        \
  219.     (*PL_StdIO->pOpen)(PL_StdIO, (x),(y))
  220. #define PerlIO_close(f)                            \
  221.     (*PL_StdIO->pClose)(PL_StdIO, (f))
  222. #define PerlIO_eof(f)                            \
  223.     (*PL_StdIO->pEof)(PL_StdIO, (f))
  224. #define PerlIO_error(f)                            \
  225.     (*PL_StdIO->pError)(PL_StdIO, (f))
  226. #define PerlIO_clearerr(f)                        \
  227.     (*PL_StdIO->pClearerr)(PL_StdIO, (f))
  228. #define PerlIO_getc(f)                            \
  229.     (*PL_StdIO->pGetc)(PL_StdIO, (f))
  230. #define PerlIO_get_base(f)                        \
  231.     (*PL_StdIO->pGetBase)(PL_StdIO, (f))
  232. #define PerlIO_get_bufsiz(f)                        \
  233.     (*PL_StdIO->pGetBufsiz)(PL_StdIO, (f))
  234. #define PerlIO_get_cnt(f)                        \
  235.     (*PL_StdIO->pGetCnt)(PL_StdIO, (f))
  236. #define PerlIO_get_ptr(f)                        \
  237.     (*PL_StdIO->pGetPtr)(PL_StdIO, (f))
  238. #define PerlIO_putc(f,c)                        \
  239.     (*PL_StdIO->pPutc)(PL_StdIO, (f),(c))
  240. #define PerlIO_puts(f,s)                        \
  241.     (*PL_StdIO->pPuts)(PL_StdIO, (f),(s))
  242. #define PerlIO_flush(f)                            \
  243.     (*PL_StdIO->pFlush)(PL_StdIO, (f))
  244. #define PerlIO_gets(s, n, fp)                        \
  245.     (*PL_StdIO->pGets)(PL_StdIO, (fp), s, n)
  246. #define PerlIO_ungetc(f,c)                        \
  247.     (*PL_StdIO->pUngetc)(PL_StdIO, (f),(c))
  248. #define PerlIO_fileno(f)                        \
  249.     (*PL_StdIO->pFileno)(PL_StdIO, (f))
  250. #define PerlIO_fdopen(f, s)                        \
  251.     (*PL_StdIO->pFdopen)(PL_StdIO, (f),(s))
  252. #define PerlIO_reopen(p, m, f)                        \
  253.     (*PL_StdIO->pReopen)(PL_StdIO, (p), (m), (f))
  254. #define PerlIO_read(f,buf,count)                    \
  255.     (SSize_t)(*PL_StdIO->pRead)(PL_StdIO, (f), (buf), (count))
  256. #define PerlIO_write(f,buf,count)                    \
  257.     (*PL_StdIO->pWrite)(PL_StdIO, (f), (buf), (count))
  258. #define PerlIO_setbuf(f,b)                        \
  259.     (*PL_StdIO->pSetBuf)(PL_StdIO, (f), (b))
  260. #define PerlIO_setvbuf(f,b,t,s)                        \
  261.     (*PL_StdIO->pSetVBuf)(PL_StdIO, (f),(b),(t),(s))
  262. #define PerlIO_set_cnt(f,c)                        \
  263.     (*PL_StdIO->pSetCnt)(PL_StdIO, (f), (c))
  264. #define PerlIO_set_ptrcnt(f,p,c)                    \
  265.     (*PL_StdIO->pSetPtrCnt)(PL_StdIO, (f), (p), (c))
  266. #define PerlIO_setlinebuf(f)                        \
  267.     (*PL_StdIO->pSetlinebuf)(PL_StdIO, (f))
  268. #define PerlIO_printf        Perl_fprintf_nocontext
  269. #define PerlIO_stdoutf        *PL_StdIO->pPrintf
  270. #define PerlIO_vprintf(f,fmt,a)                        \
  271.     (*PL_StdIO->pVprintf)(PL_StdIO, (f),(fmt),a)          
  272. #define PerlIO_tell(f)                            \
  273.     (*PL_StdIO->pTell)(PL_StdIO, (f))
  274. #define PerlIO_seek(f,o,w)                        \
  275.     (*PL_StdIO->pSeek)(PL_StdIO, (f),(o),(w))
  276. #define PerlIO_getpos(f,p)                        \
  277.     (*PL_StdIO->pGetpos)(PL_StdIO, (f),(p))
  278. #define PerlIO_setpos(f,p)                        \
  279.     (*PL_StdIO->pSetpos)(PL_StdIO, (f),(p))
  280. #define PerlIO_rewind(f)                        \
  281.     (*PL_StdIO->pRewind)(PL_StdIO, (f))
  282. #define PerlIO_tmpfile()                        \
  283.     (*PL_StdIO->pTmpfile)(PL_StdIO)
  284. #define PerlIO_init()                            \
  285.     (*PL_StdIO->pInit)(PL_StdIO)
  286. #undef     init_os_extras
  287. #define init_os_extras()                        \
  288.     (*PL_StdIO->pInitOSExtras)(PL_StdIO)
  289. #define PerlIO_fdupopen(f)                        \
  290.     (*PL_StdIO->pFdupopen)(PL_StdIO, (f))
  291.  
  292. #else    /* PERL_IMPLICIT_SYS */
  293.  
  294. #include "perlsdio.h"
  295. #include "perl.h"
  296. #define PerlIO_fdupopen(f)        (f)
  297.  
  298. #endif    /* PERL_IMPLICIT_SYS */
  299.  
  300. #ifndef PERLIO_IS_STDIO
  301. #ifdef USE_SFIO
  302. #include "perlsfio.h"
  303. #endif /* USE_SFIO */
  304. #endif /* PERLIO_IS_STDIO */
  305.  
  306. #ifndef EOF
  307. #define EOF (-1)
  308. #endif
  309.  
  310. /* This is to catch case with no stdio */
  311. #ifndef BUFSIZ
  312. #define BUFSIZ 1024
  313. #endif
  314.  
  315. #ifndef SEEK_SET
  316. #define SEEK_SET 0
  317. #endif
  318.  
  319. #ifndef SEEK_CUR
  320. #define SEEK_CUR 1
  321. #endif
  322.  
  323. #ifndef SEEK_END
  324. #define SEEK_END 2
  325. #endif
  326.  
  327. #ifndef PerlIO
  328. struct _PerlIO;
  329. #define PerlIO struct _PerlIO
  330. #endif /* No PerlIO */
  331.  
  332. #ifndef Fpos_t
  333. #define Fpos_t long
  334. #endif
  335.  
  336. #ifndef NEXT30_NO_ATTRIBUTE
  337. #ifndef HASATTRIBUTE       /* disable GNU-cc attribute checking? */
  338. #ifdef  __attribute__      /* Avoid possible redefinition errors */
  339. #undef  __attribute__
  340. #endif
  341. #define __attribute__(attr)
  342. #endif
  343. #endif
  344.  
  345. #ifndef PerlIO_stdoutf
  346. extern int    PerlIO_stdoutf        (const char *,...)
  347.                     __attribute__((__format__ (__printf__, 1, 2)));
  348. #endif
  349. #ifndef PerlIO_puts
  350. extern int    PerlIO_puts        (PerlIO *,const char *);
  351. #endif
  352. #ifndef PerlIO_open
  353. extern PerlIO *    PerlIO_open        (const char *,const char *);
  354. #endif
  355. #ifndef PerlIO_close
  356. extern int    PerlIO_close        (PerlIO *);
  357. #endif
  358. #ifndef PerlIO_eof
  359. extern int    PerlIO_eof        (PerlIO *);
  360. #endif
  361. #ifndef PerlIO_error
  362. extern int    PerlIO_error        (PerlIO *);
  363. #endif
  364. #ifndef PerlIO_clearerr
  365. extern void    PerlIO_clearerr        (PerlIO *);
  366. #endif
  367. #ifndef PerlIO_getc
  368. extern int    PerlIO_getc        (PerlIO *);
  369. #endif
  370. #ifndef PerlIO_putc
  371. extern int    PerlIO_putc        (PerlIO *,int);
  372. #endif
  373. #ifndef PerlIO_flush
  374. extern int    PerlIO_flush        (PerlIO *);
  375. #endif
  376. #ifndef PerlIO_ungetc
  377. extern int    PerlIO_ungetc        (PerlIO *,int);
  378. #endif
  379. #ifndef PerlIO_fileno
  380. extern int    PerlIO_fileno        (PerlIO *);
  381. #endif
  382. #ifndef PerlIO_fdopen
  383. extern PerlIO *    PerlIO_fdopen        (int, const char *);
  384. #endif
  385. #ifndef PerlIO_importFILE
  386. extern PerlIO *    PerlIO_importFILE    (FILE *,int);
  387. #endif
  388. #ifndef PerlIO_exportFILE
  389. extern FILE *    PerlIO_exportFILE    (PerlIO *,int);
  390. #endif
  391. #ifndef PerlIO_findFILE
  392. extern FILE *    PerlIO_findFILE        (PerlIO *);
  393. #endif
  394. #ifndef PerlIO_releaseFILE
  395. extern void    PerlIO_releaseFILE    (PerlIO *,FILE *);
  396. #endif
  397. #ifndef PerlIO_read
  398. extern SSize_t    PerlIO_read        (PerlIO *,void *,Size_t);
  399. #endif
  400. #ifndef PerlIO_write
  401. extern SSize_t    PerlIO_write        (PerlIO *,const void *,Size_t);
  402. #endif
  403. #ifndef PerlIO_setlinebuf
  404. extern void    PerlIO_setlinebuf    (PerlIO *);
  405. #endif
  406. #ifndef PerlIO_printf
  407. extern int    PerlIO_printf        (PerlIO *, const char *,...)
  408.                     __attribute__((__format__ (__printf__, 2, 3)));
  409. #endif
  410. #ifndef PerlIO_sprintf
  411. extern int    PerlIO_sprintf        (char *, int, const char *,...)
  412.                     __attribute__((__format__ (__printf__, 3, 4)));
  413. #endif
  414. #ifndef PerlIO_vprintf
  415. extern int    PerlIO_vprintf        (PerlIO *, const char *, va_list);
  416. #endif
  417. #ifndef PerlIO_tell
  418. extern Off_t    PerlIO_tell        (PerlIO *);
  419. #endif
  420. #ifndef PerlIO_seek
  421. extern int    PerlIO_seek        (PerlIO *, Off_t, int);
  422. #endif
  423. #ifndef PerlIO_rewind
  424. extern void    PerlIO_rewind        (PerlIO *);
  425. #endif
  426. #ifndef PerlIO_has_base
  427. extern int    PerlIO_has_base        (PerlIO *);
  428. #endif
  429. #ifndef PerlIO_has_cntptr
  430. extern int    PerlIO_has_cntptr    (PerlIO *);
  431. #endif
  432. #ifndef PerlIO_fast_gets
  433. extern int    PerlIO_fast_gets    (PerlIO *);
  434. #endif
  435. #ifndef PerlIO_canset_cnt
  436. extern int    PerlIO_canset_cnt    (PerlIO *);
  437. #endif
  438. #ifndef PerlIO_get_ptr
  439. extern STDCHAR * PerlIO_get_ptr        (PerlIO *);
  440. #endif
  441. #ifndef PerlIO_get_cnt
  442. extern int    PerlIO_get_cnt        (PerlIO *);
  443. #endif
  444. #ifndef PerlIO_set_cnt
  445. extern void    PerlIO_set_cnt        (PerlIO *,int);
  446. #endif
  447. #ifndef PerlIO_set_ptrcnt
  448. extern void    PerlIO_set_ptrcnt    (PerlIO *,STDCHAR *,int);
  449. #endif
  450. #ifndef PerlIO_get_base
  451. extern STDCHAR * PerlIO_get_base    (PerlIO *);
  452. #endif
  453. #ifndef PerlIO_get_bufsiz
  454. extern int    PerlIO_get_bufsiz    (PerlIO *);
  455. #endif
  456. #ifndef PerlIO_tmpfile
  457. extern PerlIO *    PerlIO_tmpfile        (void);
  458. #endif
  459. #ifndef PerlIO_stdin
  460. extern PerlIO *    PerlIO_stdin    (void);
  461. #endif
  462. #ifndef PerlIO_stdout
  463. extern PerlIO *    PerlIO_stdout    (void);
  464. #endif
  465. #ifndef PerlIO_stderr
  466. extern PerlIO *    PerlIO_stderr    (void);
  467. #endif
  468. #ifndef PerlIO_getpos
  469. extern int    PerlIO_getpos        (PerlIO *,Fpos_t *);
  470. #endif
  471. #ifndef PerlIO_setpos
  472. extern int    PerlIO_setpos        (PerlIO *,const Fpos_t *);
  473. #endif
  474. #ifndef PerlIO_fdupopen
  475. extern PerlIO *    PerlIO_fdupopen        (PerlIO *);
  476. #endif
  477.  
  478.  
  479. /*
  480.  *   Interface for directory functions
  481.  */
  482.  
  483. #if defined(PERL_IMPLICIT_SYS)
  484.  
  485. /* IPerlDir        */
  486. struct IPerlDir;
  487. struct IPerlDirInfo;
  488. typedef int        (*LPMakedir)(struct IPerlDir*, const char*, int);
  489. typedef int        (*LPChdir)(struct IPerlDir*, const char*);
  490. typedef int        (*LPRmdir)(struct IPerlDir*, const char*);
  491. typedef int        (*LPDirClose)(struct IPerlDir*, DIR*);
  492. typedef DIR*        (*LPDirOpen)(struct IPerlDir*, char*);
  493. typedef struct direct*    (*LPDirRead)(struct IPerlDir*, DIR*);
  494. typedef void        (*LPDirRewind)(struct IPerlDir*, DIR*);
  495. typedef void        (*LPDirSeek)(struct IPerlDir*, DIR*, long);
  496. typedef long        (*LPDirTell)(struct IPerlDir*, DIR*);
  497. #ifdef WIN32
  498. typedef char*        (*LPDirMapPathA)(struct IPerlDir*, const char*);
  499. typedef WCHAR*        (*LPDirMapPathW)(struct IPerlDir*, const WCHAR*);
  500. #endif
  501.  
  502. struct IPerlDir
  503. {
  504.     LPMakedir        pMakedir;
  505.     LPChdir        pChdir;
  506.     LPRmdir        pRmdir;
  507.     LPDirClose        pClose;
  508.     LPDirOpen        pOpen;
  509.     LPDirRead        pRead;
  510.     LPDirRewind        pRewind;
  511.     LPDirSeek        pSeek;
  512.     LPDirTell        pTell;
  513. #ifdef WIN32
  514.     LPDirMapPathA    pMapPathA;
  515.     LPDirMapPathW    pMapPathW;
  516. #endif
  517. };
  518.  
  519. struct IPerlDirInfo
  520. {
  521.     unsigned long    nCount;        /* number of entries expected */
  522.     struct IPerlDir    perlDirList;
  523. };
  524.  
  525. #define PerlDir_mkdir(name, mode)                \
  526.     (*PL_Dir->pMakedir)(PL_Dir, (name), (mode))
  527. #define PerlDir_chdir(name)                    \
  528.     (*PL_Dir->pChdir)(PL_Dir, (name))
  529. #define PerlDir_rmdir(name)                    \
  530.     (*PL_Dir->pRmdir)(PL_Dir, (name))
  531. #define PerlDir_close(dir)                    \
  532.     (*PL_Dir->pClose)(PL_Dir, (dir))
  533. #define PerlDir_open(name)                    \
  534.     (*PL_Dir->pOpen)(PL_Dir, (name))
  535. #define PerlDir_read(dir)                    \
  536.     (*PL_Dir->pRead)(PL_Dir, (dir))
  537. #define PerlDir_rewind(dir)                    \
  538.     (*PL_Dir->pRewind)(PL_Dir, (dir))
  539. #define PerlDir_seek(dir, loc)                    \
  540.     (*PL_Dir->pSeek)(PL_Dir, (dir), (loc))
  541. #define PerlDir_tell(dir)                    \
  542.     (*PL_Dir->pTell)(PL_Dir, (dir))
  543. #ifdef WIN32
  544. #define PerlDir_mapA(dir)                    \
  545.     (*PL_Dir->pMapPathA)(PL_Dir, (dir))
  546. #define PerlDir_mapW(dir)                    \
  547.     (*PL_Dir->pMapPathW)(PL_Dir, (dir))
  548. #endif
  549.  
  550. #else    /* PERL_IMPLICIT_SYS */
  551.  
  552. #define PerlDir_mkdir(name, mode)    Mkdir((name), (mode))
  553. #ifdef VMS
  554. #  define PerlDir_chdir(n)        chdir(((n) && *(n)) ? (n) : "SYS$LOGIN")
  555. #else 
  556. #  define PerlDir_chdir(name)        chdir((name))
  557. #endif
  558. #define PerlDir_rmdir(name)        rmdir((name))
  559. #define PerlDir_close(dir)        closedir((dir))
  560. #define PerlDir_open(name)        opendir((name))
  561. #define PerlDir_read(dir)        readdir((dir))
  562. #define PerlDir_rewind(dir)        rewinddir((dir))
  563. #define PerlDir_seek(dir, loc)        seekdir((dir), (loc))
  564. #define PerlDir_tell(dir)        telldir((dir))
  565. #ifdef WIN32
  566. #define PerlDir_mapA(dir)        dir
  567. #define PerlDir_mapW(dir)        dir
  568. #endif
  569.  
  570. #endif    /* PERL_IMPLICIT_SYS */
  571.  
  572. /*
  573.     Interface for perl environment functions
  574. */
  575.  
  576. #if defined(PERL_IMPLICIT_SYS)
  577.  
  578. /* IPerlEnv        */
  579. struct IPerlEnv;
  580. struct IPerlEnvInfo;
  581. typedef char*        (*LPEnvGetenv)(struct IPerlEnv*, const char*);
  582. typedef int        (*LPEnvPutenv)(struct IPerlEnv*, const char*);
  583. typedef char*        (*LPEnvGetenv_len)(struct IPerlEnv*,
  584.                     const char *varname, unsigned long *len);
  585. typedef int        (*LPEnvUname)(struct IPerlEnv*, struct utsname *name);
  586. typedef void        (*LPEnvClearenv)(struct IPerlEnv*);
  587. typedef void*        (*LPEnvGetChildenv)(struct IPerlEnv*);
  588. typedef void        (*LPEnvFreeChildenv)(struct IPerlEnv*, void* env);
  589. typedef char*        (*LPEnvGetChilddir)(struct IPerlEnv*);
  590. typedef void        (*LPEnvFreeChilddir)(struct IPerlEnv*, char* dir);
  591. #ifdef HAS_ENVGETENV
  592. typedef char*        (*LPENVGetenv)(struct IPerlEnv*, const char *varname);
  593. typedef char*        (*LPENVGetenv_len)(struct IPerlEnv*,
  594.                     const char *varname, unsigned long *len);
  595. #endif
  596. #ifdef WIN32
  597. typedef unsigned long    (*LPEnvOsID)(struct IPerlEnv*);
  598. typedef char*        (*LPEnvLibPath)(struct IPerlEnv*, const char*);
  599. typedef char*        (*LPEnvSiteLibPath)(struct IPerlEnv*, const char*);
  600. typedef char*        (*LPEnvVendorLibPath)(struct IPerlEnv*, const char*);
  601. typedef void        (*LPEnvGetChildIO)(struct IPerlEnv*, child_IO_table*);
  602. #endif
  603.  
  604. struct IPerlEnv
  605. {
  606.     LPEnvGetenv        pGetenv;
  607.     LPEnvPutenv        pPutenv;
  608.     LPEnvGetenv_len    pGetenv_len;
  609.     LPEnvUname        pEnvUname;
  610.     LPEnvClearenv    pClearenv;
  611.     LPEnvGetChildenv    pGetChildenv;
  612.     LPEnvFreeChildenv    pFreeChildenv;
  613.     LPEnvGetChilddir    pGetChilddir;
  614.     LPEnvFreeChilddir    pFreeChilddir;
  615. #ifdef HAS_ENVGETENV
  616.     LPENVGetenv        pENVGetenv;
  617.     LPENVGetenv_len    pENVGetenv_len;
  618. #endif
  619. #ifdef WIN32
  620.     LPEnvOsID        pEnvOsID;
  621.     LPEnvLibPath    pLibPath;
  622.     LPEnvSiteLibPath    pSiteLibPath;
  623.     LPEnvVendorLibPath    pVendorLibPath;
  624.     LPEnvGetChildIO    pGetChildIO;
  625. #endif
  626. };
  627.  
  628. struct IPerlEnvInfo
  629. {
  630.     unsigned long    nCount;        /* number of entries expected */
  631.     struct IPerlEnv    perlEnvList;
  632. };
  633.  
  634. #define PerlEnv_putenv(str)                    \
  635.     (*PL_Env->pPutenv)(PL_Env,(str))
  636. #define PerlEnv_getenv(str)                    \
  637.     (*PL_Env->pGetenv)(PL_Env,(str))
  638. #define PerlEnv_getenv_len(str,l)                \
  639.     (*PL_Env->pGetenv_len)(PL_Env,(str), (l))
  640. #define PerlEnv_clearenv()                    \
  641.     (*PL_Env->pClearenv)(PL_Env)
  642. #define PerlEnv_get_childenv()                    \
  643.     (*PL_Env->pGetChildenv)(PL_Env)
  644. #define PerlEnv_free_childenv(e)                \
  645.     (*PL_Env->pFreeChildenv)(PL_Env, (e))
  646. #define PerlEnv_get_childdir()                    \
  647.     (*PL_Env->pGetChilddir)(PL_Env)
  648. #define PerlEnv_free_childdir(d)                \
  649.     (*PL_Env->pFreeChilddir)(PL_Env, (d))
  650. #ifdef HAS_ENVGETENV
  651. #  define PerlEnv_ENVgetenv(str)                \
  652.     (*PL_Env->pENVGetenv)(PL_Env,(str))
  653. #  define PerlEnv_ENVgetenv_len(str,l)                \
  654.     (*PL_Env->pENVGetenv_len)(PL_Env,(str), (l))
  655. #else
  656. #  define PerlEnv_ENVgetenv(str)                \
  657.     PerlEnv_getenv((str))
  658. #  define PerlEnv_ENVgetenv_len(str,l)                \
  659.     PerlEnv_getenv_len((str),(l))
  660. #endif
  661. #define PerlEnv_uname(name)                    \
  662.     (*PL_Env->pEnvUname)(PL_Env,(name))
  663. #ifdef WIN32
  664. #define PerlEnv_os_id()                        \
  665.     (*PL_Env->pEnvOsID)(PL_Env)
  666. #define PerlEnv_lib_path(str)                    \
  667.     (*PL_Env->pLibPath)(PL_Env,(str))
  668. #define PerlEnv_sitelib_path(str)                \
  669.     (*PL_Env->pSiteLibPath)(PL_Env,(str))
  670. #define PerlEnv_vendorlib_path(str)                \
  671.     (*PL_Env->pVendorLibPath)(PL_Env,(str))
  672. #define PerlEnv_get_child_IO(ptr)                \
  673.     (*PL_Env->pGetChildIO)(PL_Env, ptr)
  674. #endif
  675.  
  676. #else    /* PERL_IMPLICIT_SYS */
  677.  
  678. #define PerlEnv_putenv(str)        putenv((str))
  679. #define PerlEnv_getenv(str)        getenv((str))
  680. #define PerlEnv_getenv_len(str,l)    getenv_len((str), (l))
  681. #define PerlEnv_clearenv()        clearenv()
  682. #define PerlEnv_get_childenv()        get_childenv()
  683. #define PerlEnv_free_childenv(e)    free_childenv((e))
  684. #define PerlEnv_get_childdir()        get_childdir()
  685. #define PerlEnv_free_childdir(d)    free_childdir((d))
  686. #ifdef HAS_ENVGETENV
  687. #  define PerlEnv_ENVgetenv(str)    ENVgetenv((str))
  688. #  define PerlEnv_ENVgetenv_len(str,l)    ENVgetenv_len((str), (l))
  689. #else
  690. #  define PerlEnv_ENVgetenv(str)    PerlEnv_getenv((str))
  691. #  define PerlEnv_ENVgetenv_len(str,l)    PerlEnv_getenv_len((str), (l))
  692. #endif
  693. #define PerlEnv_uname(name)        uname((name))
  694.  
  695. #ifdef WIN32
  696. #define PerlEnv_os_id()            win32_os_id()
  697. #define PerlEnv_lib_path(str)        win32_get_privlib(str)
  698. #define PerlEnv_sitelib_path(str)    win32_get_sitelib(str)
  699. #define PerlEnv_vendorlib_path(str)    win32_get_vendorlib(str)
  700. #define PerlEnv_get_child_IO(ptr)    win32_get_child_IO(ptr)
  701. #endif
  702.  
  703. #endif    /* PERL_IMPLICIT_SYS */
  704.  
  705. /*
  706.     Interface for perl low-level IO functions
  707. */
  708.  
  709. #if defined(PERL_IMPLICIT_SYS)
  710.  
  711. /* IPerlLIO        */
  712. struct IPerlLIO;
  713. struct IPerlLIOInfo;
  714. typedef int        (*LPLIOAccess)(struct IPerlLIO*, const char*, int);
  715. typedef int        (*LPLIOChmod)(struct IPerlLIO*, const char*, int);
  716. typedef int        (*LPLIOChown)(struct IPerlLIO*, const char*, uid_t,
  717.                 gid_t);
  718. typedef int        (*LPLIOChsize)(struct IPerlLIO*, int, long);
  719. typedef int        (*LPLIOClose)(struct IPerlLIO*, int);
  720. typedef int        (*LPLIODup)(struct IPerlLIO*, int);
  721. typedef int        (*LPLIODup2)(struct IPerlLIO*, int, int);
  722. typedef int        (*LPLIOFlock)(struct IPerlLIO*, int, int);
  723. typedef int        (*LPLIOFileStat)(struct IPerlLIO*, int, struct stat*);
  724. typedef int        (*LPLIOIOCtl)(struct IPerlLIO*, int, unsigned int,
  725.                 char*);
  726. typedef int        (*LPLIOIsatty)(struct IPerlLIO*, int);
  727. typedef int        (*LPLIOLink)(struct IPerlLIO*, const char*,
  728.                      const char *);
  729. typedef long        (*LPLIOLseek)(struct IPerlLIO*, int, long, int);
  730. typedef int        (*LPLIOLstat)(struct IPerlLIO*, const char*,
  731.                 struct stat*);
  732. typedef char*        (*LPLIOMktemp)(struct IPerlLIO*, char*);
  733. typedef int        (*LPLIOOpen)(struct IPerlLIO*, const char*, int);    
  734. typedef int        (*LPLIOOpen3)(struct IPerlLIO*, const char*, int, int);    
  735. typedef int        (*LPLIORead)(struct IPerlLIO*, int, void*, unsigned int);
  736. typedef int        (*LPLIORename)(struct IPerlLIO*, const char*,
  737.                 const char*);
  738. typedef int        (*LPLIOSetmode)(struct IPerlLIO*, int, int);
  739. typedef int        (*LPLIONameStat)(struct IPerlLIO*, const char*,
  740.                 struct stat*);
  741. typedef char*        (*LPLIOTmpnam)(struct IPerlLIO*, char*);
  742. typedef int        (*LPLIOUmask)(struct IPerlLIO*, int);
  743. typedef int        (*LPLIOUnlink)(struct IPerlLIO*, const char*);
  744. typedef int        (*LPLIOUtime)(struct IPerlLIO*, char*, struct utimbuf*);
  745. typedef int        (*LPLIOWrite)(struct IPerlLIO*, int, const void*,
  746.                 unsigned int);
  747.  
  748. struct IPerlLIO
  749. {
  750.     LPLIOAccess        pAccess;
  751.     LPLIOChmod        pChmod;
  752.     LPLIOChown        pChown;
  753.     LPLIOChsize        pChsize;
  754.     LPLIOClose        pClose;
  755.     LPLIODup        pDup;
  756.     LPLIODup2        pDup2;
  757.     LPLIOFlock        pFlock;
  758.     LPLIOFileStat    pFileStat;
  759.     LPLIOIOCtl        pIOCtl;
  760.     LPLIOIsatty        pIsatty;
  761.     LPLIOLink        pLink;
  762.     LPLIOLseek        pLseek;
  763.     LPLIOLstat        pLstat;
  764.     LPLIOMktemp        pMktemp;
  765.     LPLIOOpen        pOpen;
  766.     LPLIOOpen3        pOpen3;
  767.     LPLIORead        pRead;
  768.     LPLIORename        pRename;
  769.     LPLIOSetmode    pSetmode;
  770.     LPLIONameStat    pNameStat;
  771.     LPLIOTmpnam        pTmpnam;
  772.     LPLIOUmask        pUmask;
  773.     LPLIOUnlink        pUnlink;
  774.     LPLIOUtime        pUtime;
  775.     LPLIOWrite        pWrite;
  776. };
  777.  
  778. struct IPerlLIOInfo
  779. {
  780.     unsigned long    nCount;        /* number of entries expected */
  781.     struct IPerlLIO    perlLIOList;
  782. };
  783.  
  784. #define PerlLIO_access(file, mode)                    \
  785.     (*PL_LIO->pAccess)(PL_LIO, (file), (mode))
  786. #define PerlLIO_chmod(file, mode)                    \
  787.     (*PL_LIO->pChmod)(PL_LIO, (file), (mode))
  788. #define PerlLIO_chown(file, owner, group)                \
  789.     (*PL_LIO->pChown)(PL_LIO, (file), (owner), (group))
  790. #define PerlLIO_chsize(fd, size)                    \
  791.     (*PL_LIO->pChsize)(PL_LIO, (fd), (size))
  792. #define PerlLIO_close(fd)                        \
  793.     (*PL_LIO->pClose)(PL_LIO, (fd))
  794. #define PerlLIO_dup(fd)                            \
  795.     (*PL_LIO->pDup)(PL_LIO, (fd))
  796. #define PerlLIO_dup2(fd1, fd2)                        \
  797.     (*PL_LIO->pDup2)(PL_LIO, (fd1), (fd2))
  798. #define PerlLIO_flock(fd, op)                        \
  799.     (*PL_LIO->pFlock)(PL_LIO, (fd), (op))
  800. #define PerlLIO_fstat(fd, buf)                        \
  801.     (*PL_LIO->pFileStat)(PL_LIO, (fd), (buf))
  802. #define PerlLIO_ioctl(fd, u, buf)                    \
  803.     (*PL_LIO->pIOCtl)(PL_LIO, (fd), (u), (buf))
  804. #define PerlLIO_isatty(fd)                        \
  805.     (*PL_LIO->pIsatty)(PL_LIO, (fd))
  806. #define PerlLIO_link(oldname, newname)                    \
  807.     (*PL_LIO->pLink)(PL_LIO, (oldname), (newname))
  808. #define PerlLIO_lseek(fd, offset, mode)                    \
  809.     (*PL_LIO->pLseek)(PL_LIO, (fd), (offset), (mode))
  810. #define PerlLIO_lstat(name, buf)                    \
  811.     (*PL_LIO->pLstat)(PL_LIO, (name), (buf))
  812. #define PerlLIO_mktemp(file)                        \
  813.     (*PL_LIO->pMktemp)(PL_LIO, (file))
  814. #define PerlLIO_open(file, flag)                    \
  815.     (*PL_LIO->pOpen)(PL_LIO, (file), (flag))
  816. #define PerlLIO_open3(file, flag, perm)                    \
  817.     (*PL_LIO->pOpen3)(PL_LIO, (file), (flag), (perm))
  818. #define PerlLIO_read(fd, buf, count)                    \
  819.     (*PL_LIO->pRead)(PL_LIO, (fd), (buf), (count))
  820. #define PerlLIO_rename(oname, newname)                    \
  821.     (*PL_LIO->pRename)(PL_LIO, (oname), (newname))
  822. #define PerlLIO_setmode(fd, mode)                    \
  823.     (*PL_LIO->pSetmode)(PL_LIO, (fd), (mode))
  824. #define PerlLIO_stat(name, buf)                        \
  825.     (*PL_LIO->pNameStat)(PL_LIO, (name), (buf))
  826. #define PerlLIO_tmpnam(str)                        \
  827.     (*PL_LIO->pTmpnam)(PL_LIO, (str))
  828. #define PerlLIO_umask(mode)                        \
  829.     (*PL_LIO->pUmask)(PL_LIO, (mode))
  830. #define PerlLIO_unlink(file)                        \
  831.     (*PL_LIO->pUnlink)(PL_LIO, (file))
  832. #define PerlLIO_utime(file, time)                    \
  833.     (*PL_LIO->pUtime)(PL_LIO, (file), (time))
  834. #define PerlLIO_write(fd, buf, count)                    \
  835.     (*PL_LIO->pWrite)(PL_LIO, (fd), (buf), (count))
  836.  
  837. #else    /* PERL_IMPLICIT_SYS */
  838.  
  839. #define PerlLIO_access(file, mode)    access((file), (mode))
  840. #define PerlLIO_chmod(file, mode)    chmod((file), (mode))
  841. #define PerlLIO_chown(file, owner, grp)    chown((file), (owner), (grp))
  842. #define PerlLIO_chsize(fd, size)    chsize((fd), (size))
  843. #define PerlLIO_close(fd)        close((fd))
  844. #define PerlLIO_dup(fd)            dup((fd))
  845. #define PerlLIO_dup2(fd1, fd2)        dup2((fd1), (fd2))
  846. #define PerlLIO_flock(fd, op)        FLOCK((fd), (op))
  847. #define PerlLIO_fstat(fd, buf)        Fstat((fd), (buf))
  848. #define PerlLIO_ioctl(fd, u, buf)    ioctl((fd), (u), (buf))
  849. #define PerlLIO_isatty(fd)        isatty((fd))
  850. #define PerlLIO_link(oldname, newname)    link((oldname), (newname))
  851. #define PerlLIO_lseek(fd, offset, mode)    lseek((fd), (offset), (mode))
  852. #define PerlLIO_stat(name, buf)        Stat((name), (buf))
  853. #ifdef HAS_LSTAT
  854. #  define PerlLIO_lstat(name, buf)    lstat((name), (buf))
  855. #else
  856. #  define PerlLIO_lstat(name, buf)    PerlLIO_stat((name), (buf))
  857. #endif
  858. #define PerlLIO_mktemp(file)        mktemp((file))
  859. #define PerlLIO_mkstemp(file)        mkstemp((file))
  860. #define PerlLIO_open(file, flag)    open((file), (flag))
  861. #define PerlLIO_open3(file, flag, perm)    open((file), (flag), (perm))
  862. #define PerlLIO_read(fd, buf, count)    read((fd), (buf), (count))
  863. #define PerlLIO_rename(old, new)    rename((old), (new))
  864. #define PerlLIO_setmode(fd, mode)    setmode((fd), (mode))
  865. #define PerlLIO_tmpnam(str)        tmpnam((str))
  866. #define PerlLIO_umask(mode)        umask((mode))
  867. #define PerlLIO_unlink(file)        unlink((file))
  868. #define PerlLIO_utime(file, time)    utime((file), (time))
  869. #define PerlLIO_write(fd, buf, count)    write((fd), (buf), (count))
  870.  
  871. #endif    /* PERL_IMPLICIT_SYS */
  872.  
  873. /*
  874.     Interface for perl memory allocation
  875. */
  876.  
  877. #if defined(PERL_IMPLICIT_SYS)
  878.  
  879. /* IPerlMem        */
  880. struct IPerlMem;
  881. struct IPerlMemInfo;
  882. typedef void*        (*LPMemMalloc)(struct IPerlMem*, size_t);
  883. typedef void*        (*LPMemRealloc)(struct IPerlMem*, void*, size_t);
  884. typedef void        (*LPMemFree)(struct IPerlMem*, void*);
  885. typedef void*        (*LPMemCalloc)(struct IPerlMem*, size_t, size_t);
  886. typedef void        (*LPMemGetLock)(struct IPerlMem*);
  887. typedef void        (*LPMemFreeLock)(struct IPerlMem*);
  888. typedef int        (*LPMemIsLocked)(struct IPerlMem*);
  889.  
  890. struct IPerlMem
  891. {
  892.     LPMemMalloc        pMalloc;
  893.     LPMemRealloc    pRealloc;
  894.     LPMemFree        pFree;
  895.     LPMemCalloc        pCalloc;
  896.     LPMemGetLock    pGetLock;
  897.     LPMemFreeLock    pFreeLock;
  898.     LPMemIsLocked    pIsLocked;
  899. };
  900.  
  901. struct IPerlMemInfo
  902. {
  903.     unsigned long    nCount;        /* number of entries expected */
  904.     struct IPerlMem    perlMemList;
  905. };
  906.  
  907. /* Interpreter specific memory macros */
  908. #define PerlMem_malloc(size)                    \
  909.     (*PL_Mem->pMalloc)(PL_Mem, (size))
  910. #define PerlMem_realloc(buf, size)                \
  911.     (*PL_Mem->pRealloc)(PL_Mem, (buf), (size))
  912. #define PerlMem_free(buf)                    \
  913.     (*PL_Mem->pFree)(PL_Mem, (buf))
  914. #define PerlMem_calloc(num, size)                \
  915.     (*PL_Mem->pCalloc)(PL_Mem, (num), (size))
  916. #define PerlMem_get_lock()                    \
  917.     (*PL_Mem->pGetLock)(PL_Mem)
  918. #define PerlMem_free_lock()                    \
  919.     (*PL_Mem->pFreeLock)(PL_Mem)
  920. #define PerlMem_is_locked()                    \
  921.     (*PL_Mem->pIsLocked)(PL_Mem)
  922.  
  923. /* Shared memory macros */
  924. #define PerlMemShared_malloc(size)                \
  925.     (*PL_MemShared->pMalloc)(PL_Mem, (size))
  926. #define PerlMemShared_realloc(buf, size)            \
  927.     (*PL_MemShared->pRealloc)(PL_Mem, (buf), (size))
  928. #define PerlMemShared_free(buf)                    \
  929.     (*PL_MemShared->pFree)(PL_Mem, (buf))
  930. #define PerlMemShared_calloc(num, size)                \
  931.     (*PL_MemShared->pCalloc)(PL_Mem, (num), (size))
  932. #define PerlMemShared_get_lock()                \
  933.     (*PL_MemShared->pGetLock)(PL_Mem)
  934. #define PerlMemShared_free_lock()                \
  935.     (*PL_MemShared->pFreeLock)(PL_Mem)
  936. #define PerlMemShared_is_locked()                \
  937.     (*PL_MemShared->pIsLocked)(PL_Mem)
  938.  
  939.  
  940. /* Parse tree memory macros */
  941. #define PerlMemParse_malloc(size)                \
  942.     (*PL_MemParse->pMalloc)(PL_Mem, (size))
  943. #define PerlMemParse_realloc(buf, size)                \
  944.     (*PL_MemParse->pRealloc)(PL_Mem, (buf), (size))
  945. #define PerlMemParse_free(buf)                    \
  946.     (*PL_MemParse->pFree)(PL_Mem, (buf))
  947. #define PerlMemParse_calloc(num, size)                \
  948.     (*PL_MemParse->pCalloc)(PL_Mem, (num), (size))
  949. #define PerlMemParse_get_lock()                    \
  950.     (*PL_MemParse->pGetLock)(PL_Mem)
  951. #define PerlMemParse_free_lock()                \
  952.     (*PL_MemParse->pFreeLock)(PL_Mem)
  953. #define PerlMemParse_is_locked()                \
  954.     (*PL_MemParse->pIsLocked)(PL_Mem)
  955.  
  956.  
  957. #else    /* PERL_IMPLICIT_SYS */
  958.  
  959. /* Interpreter specific memory macros */
  960. #define PerlMem_malloc(size)        malloc((size))
  961. #define PerlMem_realloc(buf, size)    realloc((buf), (size))
  962. #define PerlMem_free(buf)        free((buf))
  963. #define PerlMem_calloc(num, size)    calloc((num), (size))
  964. #define PerlMem_get_lock()        
  965. #define PerlMem_free_lock()
  966. #define PerlMem_is_locked()        0
  967.  
  968. /* Shared memory macros */
  969. #define PerlMemShared_malloc(size)        malloc((size))
  970. #define PerlMemShared_realloc(buf, size)    realloc((buf), (size))
  971. #define PerlMemShared_free(buf)            free((buf))
  972. #define PerlMemShared_calloc(num, size)        calloc((num), (size))
  973. #define PerlMemShared_get_lock()        
  974. #define PerlMemShared_free_lock()
  975. #define PerlMemShared_is_locked()        0
  976.  
  977. /* Parse tree memory macros */
  978. #define PerlMemParse_malloc(size)    malloc((size))
  979. #define PerlMemParse_realloc(buf, size)    realloc((buf), (size))
  980. #define PerlMemParse_free(buf)        free((buf))
  981. #define PerlMemParse_calloc(num, size)    calloc((num), (size))
  982. #define PerlMemParse_get_lock()        
  983. #define PerlMemParse_free_lock()
  984. #define PerlMemParse_is_locked()    0
  985.  
  986. #endif    /* PERL_IMPLICIT_SYS */
  987.  
  988. /*
  989.     Interface for perl process functions
  990. */
  991.  
  992.  
  993. #if defined(PERL_IMPLICIT_SYS)
  994.  
  995. #ifndef jmp_buf
  996. #include <setjmp.h>
  997. #endif
  998.  
  999. /* IPerlProc        */
  1000. struct IPerlProc;
  1001. struct IPerlProcInfo;
  1002. typedef void        (*LPProcAbort)(struct IPerlProc*);
  1003. typedef char*        (*LPProcCrypt)(struct IPerlProc*, const char*,
  1004.                 const char*);
  1005. typedef void        (*LPProcExit)(struct IPerlProc*, int);
  1006. typedef void        (*LPProc_Exit)(struct IPerlProc*, int);
  1007. typedef int        (*LPProcExecl)(struct IPerlProc*, const char*,
  1008.                 const char*, const char*, const char*,
  1009.                 const char*);
  1010. typedef int        (*LPProcExecv)(struct IPerlProc*, const char*,
  1011.                 const char*const*);
  1012. typedef int        (*LPProcExecvp)(struct IPerlProc*, const char*,
  1013.                 const char*const*);
  1014. typedef uid_t        (*LPProcGetuid)(struct IPerlProc*);
  1015. typedef uid_t        (*LPProcGeteuid)(struct IPerlProc*);
  1016. typedef gid_t        (*LPProcGetgid)(struct IPerlProc*);
  1017. typedef gid_t        (*LPProcGetegid)(struct IPerlProc*);
  1018. typedef char*        (*LPProcGetlogin)(struct IPerlProc*);
  1019. typedef int        (*LPProcKill)(struct IPerlProc*, int, int);
  1020. typedef int        (*LPProcKillpg)(struct IPerlProc*, int, int);
  1021. typedef int        (*LPProcPauseProc)(struct IPerlProc*);
  1022. typedef PerlIO*        (*LPProcPopen)(struct IPerlProc*, const char*,
  1023.                 const char*);
  1024. typedef int        (*LPProcPclose)(struct IPerlProc*, PerlIO*);
  1025. typedef int        (*LPProcPipe)(struct IPerlProc*, int*);
  1026. typedef int        (*LPProcSetuid)(struct IPerlProc*, uid_t);
  1027. typedef int        (*LPProcSetgid)(struct IPerlProc*, gid_t);
  1028. typedef int        (*LPProcSleep)(struct IPerlProc*, unsigned int);
  1029. typedef int        (*LPProcTimes)(struct IPerlProc*, struct tms*);
  1030. typedef int        (*LPProcWait)(struct IPerlProc*, int*);
  1031. typedef int        (*LPProcWaitpid)(struct IPerlProc*, int, int*, int);
  1032. typedef Sighandler_t    (*LPProcSignal)(struct IPerlProc*, int, Sighandler_t);
  1033. typedef int        (*LPProcFork)(struct IPerlProc*);
  1034. typedef int        (*LPProcGetpid)(struct IPerlProc*);
  1035. #ifdef WIN32
  1036. typedef void*        (*LPProcDynaLoader)(struct IPerlProc*, const char*);
  1037. typedef void        (*LPProcGetOSError)(struct IPerlProc*,
  1038.                 SV* sv, DWORD dwErr);
  1039. typedef void        (*LPProcFreeBuf)(struct IPerlProc*, char*);
  1040. typedef BOOL        (*LPProcDoCmd)(struct IPerlProc*, char*);
  1041. typedef int        (*LPProcSpawn)(struct IPerlProc*, char*);
  1042. typedef int        (*LPProcSpawnvp)(struct IPerlProc*, int, const char*,
  1043.                 const char*const*);
  1044. typedef int        (*LPProcASpawn)(struct IPerlProc*, void*, void**, void**);
  1045. #endif
  1046.  
  1047. struct IPerlProc
  1048. {
  1049.     LPProcAbort        pAbort;
  1050.     LPProcCrypt        pCrypt;
  1051.     LPProcExit        pExit;
  1052.     LPProc_Exit        p_Exit;
  1053.     LPProcExecl        pExecl;
  1054.     LPProcExecv        pExecv;
  1055.     LPProcExecvp    pExecvp;
  1056.     LPProcGetuid    pGetuid;
  1057.     LPProcGeteuid    pGeteuid;
  1058.     LPProcGetgid    pGetgid;
  1059.     LPProcGetegid    pGetegid;
  1060.     LPProcGetlogin    pGetlogin;
  1061.     LPProcKill        pKill;
  1062.     LPProcKillpg    pKillpg;
  1063.     LPProcPauseProc    pPauseProc;
  1064.     LPProcPopen        pPopen;
  1065.     LPProcPclose    pPclose;
  1066.     LPProcPipe        pPipe;
  1067.     LPProcSetuid    pSetuid;
  1068.     LPProcSetgid    pSetgid;
  1069.     LPProcSleep        pSleep;
  1070.     LPProcTimes        pTimes;
  1071.     LPProcWait        pWait;
  1072.     LPProcWaitpid    pWaitpid;
  1073.     LPProcSignal    pSignal;
  1074.     LPProcFork        pFork;
  1075.     LPProcGetpid    pGetpid;
  1076. #ifdef WIN32
  1077.     LPProcDynaLoader    pDynaLoader;
  1078.     LPProcGetOSError    pGetOSError;
  1079.     LPProcDoCmd        pDoCmd;
  1080.     LPProcSpawn        pSpawn;
  1081.     LPProcSpawnvp    pSpawnvp;
  1082.     LPProcASpawn    pASpawn;
  1083. #endif
  1084. };
  1085.  
  1086. struct IPerlProcInfo
  1087. {
  1088.     unsigned long    nCount;        /* number of entries expected */
  1089.     struct IPerlProc    perlProcList;
  1090. };
  1091.  
  1092. #define PerlProc_abort()                        \
  1093.     (*PL_Proc->pAbort)(PL_Proc)
  1094. #define PerlProc_crypt(c,s)                        \
  1095.     (*PL_Proc->pCrypt)(PL_Proc, (c), (s))
  1096. #define PerlProc_exit(s)                        \
  1097.     (*PL_Proc->pExit)(PL_Proc, (s))
  1098. #define PerlProc__exit(s)                        \
  1099.     (*PL_Proc->p_Exit)(PL_Proc, (s))
  1100. #define PerlProc_execl(c, w, x, y, z)                    \
  1101.     (*PL_Proc->pExecl)(PL_Proc, (c), (w), (x), (y), (z))
  1102. #define PerlProc_execv(c, a)                        \
  1103.     (*PL_Proc->pExecv)(PL_Proc, (c), (a))
  1104. #define PerlProc_execvp(c, a)                        \
  1105.     (*PL_Proc->pExecvp)(PL_Proc, (c), (a))
  1106. #define PerlProc_getuid()                        \
  1107.     (*PL_Proc->pGetuid)(PL_Proc)
  1108. #define PerlProc_geteuid()                        \
  1109.     (*PL_Proc->pGeteuid)(PL_Proc)
  1110. #define PerlProc_getgid()                        \
  1111.     (*PL_Proc->pGetgid)(PL_Proc)
  1112. #define PerlProc_getegid()                        \
  1113.     (*PL_Proc->pGetegid)(PL_Proc)
  1114. #define PerlProc_getlogin()                        \
  1115.     (*PL_Proc->pGetlogin)(PL_Proc)
  1116. #define PerlProc_kill(i, a)                        \
  1117.     (*PL_Proc->pKill)(PL_Proc, (i), (a))
  1118. #define PerlProc_killpg(i, a)                        \
  1119.     (*PL_Proc->pKillpg)(PL_Proc, (i), (a))
  1120. #define PerlProc_pause()                        \
  1121.     (*PL_Proc->pPauseProc)(PL_Proc)
  1122. #define PerlProc_popen(c, m)                        \
  1123.     (*PL_Proc->pPopen)(PL_Proc, (c), (m))
  1124. #define PerlProc_pclose(f)                        \
  1125.     (*PL_Proc->pPclose)(PL_Proc, (f))
  1126. #define PerlProc_pipe(fd)                        \
  1127.     (*PL_Proc->pPipe)(PL_Proc, (fd))
  1128. #define PerlProc_setuid(u)                        \
  1129.     (*PL_Proc->pSetuid)(PL_Proc, (u))
  1130. #define PerlProc_setgid(g)                        \
  1131.     (*PL_Proc->pSetgid)(PL_Proc, (g))
  1132. #define PerlProc_sleep(t)                        \
  1133.     (*PL_Proc->pSleep)(PL_Proc, (t))
  1134. #define PerlProc_times(t)                        \
  1135.     (*PL_Proc->pTimes)(PL_Proc, (t))
  1136. #define PerlProc_wait(t)                        \
  1137.     (*PL_Proc->pWait)(PL_Proc, (t))
  1138. #define PerlProc_waitpid(p,s,f)                        \
  1139.     (*PL_Proc->pWaitpid)(PL_Proc, (p), (s), (f))
  1140. #define PerlProc_signal(n, h)                        \
  1141.     (*PL_Proc->pSignal)(PL_Proc, (n), (h))
  1142. #define PerlProc_fork()                            \
  1143.     (*PL_Proc->pFork)(PL_Proc)
  1144. #define PerlProc_getpid()                        \
  1145.     (*PL_Proc->pGetpid)(PL_Proc)
  1146. #define PerlProc_setjmp(b, n) Sigsetjmp((b), (n))
  1147. #define PerlProc_longjmp(b, n) Siglongjmp((b), (n))
  1148.  
  1149. #ifdef WIN32
  1150. #define PerlProc_DynaLoad(f)                        \
  1151.     (*PL_Proc->pDynaLoader)(PL_Proc, (f))
  1152. #define PerlProc_GetOSError(s,e)                    \
  1153.     (*PL_Proc->pGetOSError)(PL_Proc, (s), (e))
  1154. #define PerlProc_Cmd(s)                            \
  1155.     (*PL_Proc->pDoCmd)(PL_Proc, (s))
  1156. #define do_spawn(s)                            \
  1157.     (*PL_Proc->pSpawn)(PL_Proc, (s))
  1158. #define do_spawnvp(m, c, a)                        \
  1159.     (*PL_Proc->pSpawnvp)(PL_Proc, (m), (c), (a))
  1160. #define PerlProc_aspawn(m,c,a)                        \
  1161.     (*PL_Proc->pASpawn)(PL_Proc, (m), (c), (a))
  1162. #endif
  1163.  
  1164. #else    /* PERL_IMPLICIT_SYS */
  1165.  
  1166. #define PerlProc_abort()    abort()
  1167. #define PerlProc_crypt(c,s)    crypt((c), (s))
  1168. #define PerlProc_exit(s)    exit((s))
  1169. #define PerlProc__exit(s)    _exit((s))
  1170. #define PerlProc_execl(c,w,x,y,z)                    \
  1171.     execl((c), (w), (x), (y), (z))
  1172. #define PerlProc_execv(c, a)    execv((c), (a))
  1173. #define PerlProc_execvp(c, a)    execvp((c), (a))
  1174. #define PerlProc_getuid()    getuid()
  1175. #define PerlProc_geteuid()    geteuid()
  1176. #define PerlProc_getgid()    getgid()
  1177. #define PerlProc_getegid()    getegid()
  1178. #define PerlProc_getlogin()    getlogin()
  1179. #define PerlProc_kill(i, a)    kill((i), (a))
  1180. #define PerlProc_killpg(i, a)    killpg((i), (a))
  1181. #define PerlProc_pause()    Pause()
  1182. #define PerlProc_popen(c, m)    my_popen((c), (m))
  1183. #define PerlProc_pclose(f)    my_pclose((f))
  1184. #define PerlProc_pipe(fd)    pipe((fd))
  1185. #define PerlProc_setuid(u)    setuid((u))
  1186. #define PerlProc_setgid(g)    setgid((g))
  1187. #define PerlProc_sleep(t)    sleep((t))
  1188. #define PerlProc_times(t)    times((t))
  1189. #define PerlProc_wait(t)    wait((t))
  1190. #define PerlProc_waitpid(p,s,f)    waitpid((p), (s), (f))
  1191. #define PerlProc_setjmp(b, n)    Sigsetjmp((b), (n))
  1192. #define PerlProc_longjmp(b, n)    Siglongjmp((b), (n))
  1193. #define PerlProc_signal(n, h)    signal((n), (h))
  1194. #define PerlProc_fork()        fork()
  1195. #define PerlProc_getpid()    getpid()
  1196.  
  1197. #ifdef WIN32
  1198. #define PerlProc_DynaLoad(f)                        \
  1199.     win32_dynaload((f))
  1200. #define PerlProc_GetOSError(s,e)                    \
  1201.     win32_str_os_error((s), (e))
  1202. #endif
  1203. #endif    /* PERL_IMPLICIT_SYS */
  1204.  
  1205. /*
  1206.     Interface for perl socket functions
  1207. */
  1208.  
  1209. #if defined(PERL_IMPLICIT_SYS)
  1210.  
  1211. /* PerlSock        */
  1212. struct IPerlSock;
  1213. struct IPerlSockInfo;
  1214. typedef u_long        (*LPHtonl)(struct IPerlSock*, u_long);
  1215. typedef u_short        (*LPHtons)(struct IPerlSock*, u_short);
  1216. typedef u_long        (*LPNtohl)(struct IPerlSock*, u_long);
  1217. typedef u_short        (*LPNtohs)(struct IPerlSock*, u_short);
  1218. typedef SOCKET        (*LPAccept)(struct IPerlSock*, SOCKET,
  1219.                 struct sockaddr*, int*);
  1220. typedef int        (*LPBind)(struct IPerlSock*, SOCKET,
  1221.                 const struct sockaddr*, int);
  1222. typedef int        (*LPConnect)(struct IPerlSock*, SOCKET,
  1223.                 const struct sockaddr*, int);
  1224. typedef void        (*LPEndhostent)(struct IPerlSock*);
  1225. typedef void        (*LPEndnetent)(struct IPerlSock*);
  1226. typedef void        (*LPEndprotoent)(struct IPerlSock*);
  1227. typedef void        (*LPEndservent)(struct IPerlSock*);
  1228. typedef int        (*LPGethostname)(struct IPerlSock*, char*, int);
  1229. typedef int        (*LPGetpeername)(struct IPerlSock*, SOCKET,
  1230.                 struct sockaddr*, int*);
  1231. typedef struct hostent*    (*LPGethostbyaddr)(struct IPerlSock*, const char*,
  1232.                 int, int);
  1233. typedef struct hostent*    (*LPGethostbyname)(struct IPerlSock*, const char*);
  1234. typedef struct hostent*    (*LPGethostent)(struct IPerlSock*);
  1235. typedef struct netent*    (*LPGetnetbyaddr)(struct IPerlSock*, long, int);
  1236. typedef struct netent*    (*LPGetnetbyname)(struct IPerlSock*, const char*);
  1237. typedef struct netent*    (*LPGetnetent)(struct IPerlSock*);
  1238. typedef struct protoent*(*LPGetprotobyname)(struct IPerlSock*, const char*);
  1239. typedef struct protoent*(*LPGetprotobynumber)(struct IPerlSock*, int);
  1240. typedef struct protoent*(*LPGetprotoent)(struct IPerlSock*);
  1241. typedef struct servent*    (*LPGetservbyname)(struct IPerlSock*, const char*,
  1242.                 const char*);
  1243. typedef struct servent*    (*LPGetservbyport)(struct IPerlSock*, int,
  1244.                 const char*);
  1245. typedef struct servent*    (*LPGetservent)(struct IPerlSock*);
  1246. typedef int        (*LPGetsockname)(struct IPerlSock*, SOCKET,
  1247.                 struct sockaddr*, int*);
  1248. typedef int        (*LPGetsockopt)(struct IPerlSock*, SOCKET, int, int,
  1249.                 char*, int*);
  1250. typedef unsigned long    (*LPInetAddr)(struct IPerlSock*, const char*);
  1251. typedef char*        (*LPInetNtoa)(struct IPerlSock*, struct in_addr);
  1252. typedef int        (*LPListen)(struct IPerlSock*, SOCKET, int);
  1253. typedef int        (*LPRecv)(struct IPerlSock*, SOCKET, char*, int, int);
  1254. typedef int        (*LPRecvfrom)(struct IPerlSock*, SOCKET, char*, int,
  1255.                 int, struct sockaddr*, int*);
  1256. typedef int        (*LPSelect)(struct IPerlSock*, int, char*, char*,
  1257.                 char*, const struct timeval*);
  1258. typedef int        (*LPSend)(struct IPerlSock*, SOCKET, const char*, int,
  1259.                 int); 
  1260. typedef int        (*LPSendto)(struct IPerlSock*, SOCKET, const char*,
  1261.                 int, int, const struct sockaddr*, int);
  1262. typedef void        (*LPSethostent)(struct IPerlSock*, int);
  1263. typedef void        (*LPSetnetent)(struct IPerlSock*, int);
  1264. typedef void        (*LPSetprotoent)(struct IPerlSock*, int);
  1265. typedef void        (*LPSetservent)(struct IPerlSock*, int);
  1266. typedef int        (*LPSetsockopt)(struct IPerlSock*, SOCKET, int, int,
  1267.                 const char*, int);
  1268. typedef int        (*LPShutdown)(struct IPerlSock*, SOCKET, int);
  1269. typedef SOCKET        (*LPSocket)(struct IPerlSock*, int, int, int);
  1270. typedef int        (*LPSocketpair)(struct IPerlSock*, int, int, int,
  1271.                 int*);
  1272. #ifdef WIN32
  1273. typedef int        (*LPClosesocket)(struct IPerlSock*, SOCKET s);
  1274. #endif
  1275.  
  1276. struct IPerlSock
  1277. {
  1278.     LPHtonl        pHtonl;
  1279.     LPHtons        pHtons;
  1280.     LPNtohl        pNtohl;
  1281.     LPNtohs        pNtohs;
  1282.     LPAccept        pAccept;
  1283.     LPBind        pBind;
  1284.     LPConnect        pConnect;
  1285.     LPEndhostent    pEndhostent;
  1286.     LPEndnetent        pEndnetent;
  1287.     LPEndprotoent    pEndprotoent;
  1288.     LPEndservent    pEndservent;
  1289.     LPGethostname    pGethostname;
  1290.     LPGetpeername    pGetpeername;
  1291.     LPGethostbyaddr    pGethostbyaddr;
  1292.     LPGethostbyname    pGethostbyname;
  1293.     LPGethostent    pGethostent;
  1294.     LPGetnetbyaddr    pGetnetbyaddr;
  1295.     LPGetnetbyname    pGetnetbyname;
  1296.     LPGetnetent        pGetnetent;
  1297.     LPGetprotobyname    pGetprotobyname;
  1298.     LPGetprotobynumber    pGetprotobynumber;
  1299.     LPGetprotoent    pGetprotoent;
  1300.     LPGetservbyname    pGetservbyname;
  1301.     LPGetservbyport    pGetservbyport;
  1302.     LPGetservent    pGetservent;
  1303.     LPGetsockname    pGetsockname;
  1304.     LPGetsockopt    pGetsockopt;
  1305.     LPInetAddr        pInetAddr;
  1306.     LPInetNtoa        pInetNtoa;
  1307.     LPListen        pListen;
  1308.     LPRecv        pRecv;
  1309.     LPRecvfrom        pRecvfrom;
  1310.     LPSelect        pSelect;
  1311.     LPSend        pSend;
  1312.     LPSendto        pSendto;
  1313.     LPSethostent    pSethostent;
  1314.     LPSetnetent        pSetnetent;
  1315.     LPSetprotoent    pSetprotoent;
  1316.     LPSetservent    pSetservent;
  1317.     LPSetsockopt    pSetsockopt;
  1318.     LPShutdown        pShutdown;
  1319.     LPSocket        pSocket;
  1320.     LPSocketpair    pSocketpair;
  1321. #ifdef WIN32
  1322.     LPClosesocket    pClosesocket;
  1323. #endif
  1324. };
  1325.  
  1326. struct IPerlSockInfo
  1327. {
  1328.     unsigned long    nCount;        /* number of entries expected */
  1329.     struct IPerlSock    perlSockList;
  1330. };
  1331.  
  1332. #define PerlSock_htonl(x)                        \
  1333.     (*PL_Sock->pHtonl)(PL_Sock, x)
  1334. #define PerlSock_htons(x)                        \
  1335.     (*PL_Sock->pHtons)(PL_Sock, x)
  1336. #define PerlSock_ntohl(x)                        \
  1337.     (*PL_Sock->pNtohl)(PL_Sock, x)
  1338. #define PerlSock_ntohs(x)                        \
  1339.     (*PL_Sock->pNtohs)(PL_Sock, x)
  1340. #define PerlSock_accept(s, a, l)                    \
  1341.     (*PL_Sock->pAccept)(PL_Sock, s, a, l)
  1342. #define PerlSock_bind(s, n, l)                        \
  1343.     (*PL_Sock->pBind)(PL_Sock, s, n, l)
  1344. #define PerlSock_connect(s, n, l)                    \
  1345.     (*PL_Sock->pConnect)(PL_Sock, s, n, l)
  1346. #define PerlSock_endhostent()                        \
  1347.     (*PL_Sock->pEndhostent)(PL_Sock)
  1348. #define PerlSock_endnetent()                        \
  1349.     (*PL_Sock->pEndnetent)(PL_Sock)
  1350. #define PerlSock_endprotoent()                        \
  1351.     (*PL_Sock->pEndprotoent)(PL_Sock)
  1352. #define PerlSock_endservent()                        \
  1353.     (*PL_Sock->pEndservent)(PL_Sock)
  1354. #define PerlSock_gethostbyaddr(a, l, t)                    \
  1355.     (*PL_Sock->pGethostbyaddr)(PL_Sock, a, l, t)
  1356. #define PerlSock_gethostbyname(n)                    \
  1357.     (*PL_Sock->pGethostbyname)(PL_Sock, n)
  1358. #define PerlSock_gethostent()                        \
  1359.     (*PL_Sock->pGethostent)(PL_Sock)
  1360. #define PerlSock_gethostname(n, l)                    \
  1361.     (*PL_Sock->pGethostname)(PL_Sock, n, l)
  1362. #define PerlSock_getnetbyaddr(n, t)                    \
  1363.     (*PL_Sock->pGetnetbyaddr)(PL_Sock, n, t)
  1364. #define PerlSock_getnetbyname(c)                    \
  1365.     (*PL_Sock->pGetnetbyname)(PL_Sock, c)
  1366. #define PerlSock_getnetent()                        \
  1367.     (*PL_Sock->pGetnetent)(PL_Sock)
  1368. #define PerlSock_getpeername(s, n, l)                    \
  1369.     (*PL_Sock->pGetpeername)(PL_Sock, s, n, l)
  1370. #define PerlSock_getprotobyname(n)                    \
  1371.     (*PL_Sock->pGetprotobyname)(PL_Sock, n)
  1372. #define PerlSock_getprotobynumber(n)                    \
  1373.     (*PL_Sock->pGetprotobynumber)(PL_Sock, n)
  1374. #define PerlSock_getprotoent()                        \
  1375.     (*PL_Sock->pGetprotoent)(PL_Sock)
  1376. #define PerlSock_getservbyname(n, p)                    \
  1377.     (*PL_Sock->pGetservbyname)(PL_Sock, n, p)
  1378. #define PerlSock_getservbyport(port, p)                    \
  1379.     (*PL_Sock->pGetservbyport)(PL_Sock, port, p)
  1380. #define PerlSock_getservent()                        \
  1381.     (*PL_Sock->pGetservent)(PL_Sock)
  1382. #define PerlSock_getsockname(s, n, l)                    \
  1383.     (*PL_Sock->pGetsockname)(PL_Sock, s, n, l)
  1384. #define PerlSock_getsockopt(s,l,n,v,i)                    \
  1385.     (*PL_Sock->pGetsockopt)(PL_Sock, s, l, n, v, i)
  1386. #define PerlSock_inet_addr(c)                        \
  1387.     (*PL_Sock->pInetAddr)(PL_Sock, c)
  1388. #define PerlSock_inet_ntoa(i)                        \
  1389.     (*PL_Sock->pInetNtoa)(PL_Sock, i)
  1390. #define PerlSock_listen(s, b)                        \
  1391.     (*PL_Sock->pListen)(PL_Sock, s, b)
  1392. #define PerlSock_recv(s, b, l, f)                    \
  1393.     (*PL_Sock->pRecv)(PL_Sock, s, b, l, f)
  1394. #define PerlSock_recvfrom(s,b,l,f,from,fromlen)                \
  1395.     (*PL_Sock->pRecvfrom)(PL_Sock, s, b, l, f, from, fromlen)
  1396. #define PerlSock_select(n, r, w, e, t)                    \
  1397.     (*PL_Sock->pSelect)(PL_Sock, n, (char*)r, (char*)w, (char*)e, t)
  1398. #define PerlSock_send(s, b, l, f)                    \
  1399.     (*PL_Sock->pSend)(PL_Sock, s, b, l, f)
  1400. #define PerlSock_sendto(s, b, l, f, t, tlen)                \
  1401.     (*PL_Sock->pSendto)(PL_Sock, s, b, l, f, t, tlen)
  1402. #define PerlSock_sethostent(f)                        \
  1403.     (*PL_Sock->pSethostent)(PL_Sock, f)
  1404. #define PerlSock_setnetent(f)                        \
  1405.     (*PL_Sock->pSetnetent)(PL_Sock, f)
  1406. #define PerlSock_setprotoent(f)                        \
  1407.     (*PL_Sock->pSetprotoent)(PL_Sock, f)
  1408. #define PerlSock_setservent(f)                        \
  1409.     (*PL_Sock->pSetservent)(PL_Sock, f)
  1410. #define PerlSock_setsockopt(s, l, n, v, len)                \
  1411.     (*PL_Sock->pSetsockopt)(PL_Sock, s, l, n, v, len)
  1412. #define PerlSock_shutdown(s, h)                        \
  1413.     (*PL_Sock->pShutdown)(PL_Sock, s, h)
  1414. #define PerlSock_socket(a, t, p)                    \
  1415.     (*PL_Sock->pSocket)(PL_Sock, a, t, p)
  1416. #define PerlSock_socketpair(a, t, p, f)                    \
  1417.     (*PL_Sock->pSocketpair)(PL_Sock, a, t, p, f)
  1418.  
  1419. #ifdef WIN32
  1420. #define    PerlSock_closesocket(s)                        \
  1421.     (*PL_Sock->pClosesocket)(PL_Sock, s)
  1422. #endif
  1423.  
  1424. #else    /* PERL_IMPLICIT_SYS */
  1425.  
  1426. #define PerlSock_htonl(x)        htonl(x)
  1427. #define PerlSock_htons(x)        htons(x)
  1428. #define PerlSock_ntohl(x)        ntohl(x)
  1429. #define PerlSock_ntohs(x)        ntohs(x)
  1430. #define PerlSock_accept(s, a, l)    accept(s, a, l)
  1431. #define PerlSock_bind(s, n, l)        bind(s, n, l)
  1432. #define PerlSock_connect(s, n, l)    connect(s, n, l)
  1433.  
  1434. #define PerlSock_gethostbyaddr(a, l, t)    gethostbyaddr(a, l, t)
  1435. #define PerlSock_gethostbyname(n)    gethostbyname(n)
  1436. #define PerlSock_gethostent        gethostent
  1437. #define PerlSock_endhostent        endhostent
  1438. #define PerlSock_gethostname(n, l)    gethostname(n, l)
  1439.  
  1440. #define PerlSock_getnetbyaddr(n, t)    getnetbyaddr(n, t)
  1441. #define PerlSock_getnetbyname(n)    getnetbyname(n)
  1442. #define PerlSock_getnetent        getnetent
  1443. #define PerlSock_endnetent        endnetent
  1444. #define PerlSock_getpeername(s, n, l)    getpeername(s, n, l)
  1445.  
  1446. #define PerlSock_getprotobyname(n)    getprotobyname(n)
  1447. #define PerlSock_getprotobynumber(n)    getprotobynumber(n)
  1448. #define PerlSock_getprotoent        getprotoent
  1449. #define PerlSock_endprotoent        endprotoent
  1450.  
  1451. #define PerlSock_getservbyname(n, p)    getservbyname(n, p)
  1452. #define PerlSock_getservbyport(port, p)    getservbyport(port, p)
  1453. #define PerlSock_getservent        getservent
  1454. #define PerlSock_endservent        endservent
  1455.  
  1456. #define PerlSock_getsockname(s, n, l)    getsockname(s, n, l)
  1457. #define PerlSock_getsockopt(s,l,n,v,i)    getsockopt(s, l, n, v, i)
  1458. #define PerlSock_inet_addr(c)        inet_addr(c)
  1459. #define PerlSock_inet_ntoa(i)        inet_ntoa(i)
  1460. #define PerlSock_listen(s, b)        listen(s, b)
  1461. #define PerlSock_recv(s, b, l, f)    recv(s, b, l, f)
  1462. #define PerlSock_recvfrom(s, b, l, f, from, fromlen)            \
  1463.     recvfrom(s, b, l, f, from, fromlen)
  1464. #define PerlSock_select(n, r, w, e, t)    select(n, r, w, e, t)
  1465. #define PerlSock_send(s, b, l, f)    send(s, b, l, f)
  1466. #define PerlSock_sendto(s, b, l, f, t, tlen)                \
  1467.     sendto(s, b, l, f, t, tlen)
  1468. #define PerlSock_sethostent(f)        sethostent(f)
  1469. #define PerlSock_setnetent(f)        setnetent(f)
  1470. #define PerlSock_setprotoent(f)        setprotoent(f)
  1471. #define PerlSock_setservent(f)        setservent(f)
  1472. #define PerlSock_setsockopt(s, l, n, v, len)                \
  1473.     setsockopt(s, l, n, v, len)
  1474. #define PerlSock_shutdown(s, h)        shutdown(s, h)
  1475. #define PerlSock_socket(a, t, p)    socket(a, t, p)
  1476. #define PerlSock_socketpair(a, t, p, f)    socketpair(a, t, p, f)
  1477.  
  1478. #ifdef WIN32
  1479. #define PerlSock_closesocket(s)        closesocket(s)
  1480. #endif
  1481.  
  1482. #endif    /* PERL_IMPLICIT_SYS */
  1483.  
  1484. #endif    /* __Inc__IPerl___ */
  1485.  
  1486.