b8c9790701d60a705a33a11bef9e400c99b302fd
[p5sagit/p5-mst-13.2.git] / NetWare / nwperlsys.h
1 /*
2  * Copyright © 2001 Novell, Inc. All Rights Reserved.
3  *
4  * You may distribute under the terms of either the GNU General Public
5  * License or the Artistic License, as specified in the README file.
6  *
7  */
8
9 /*
10  * FILENAME             :       nwperlsys.h
11  * DESCRIPTION  :       Derives from iperlsys.h and define the platform specific function
12  * Author               :       SGP
13  * Date Created :       June 12th 2001.
14  * Date Modified:
15  */
16
17 #ifndef ___NWPerlSys_H___
18 #define ___NWPerlSys_H___
19
20
21 #include "iperlsys.h"
22
23 //Socket related calls
24 #include "nw5sck.h"
25
26 //Store the Watcom hash list
27 #include "nwtinfo.h"
28
29 //Watcom hash list
30 #include <wchash.h>
31
32 /* IPerlMem - Memory management - Begin ==================================================*/
33
34 void* PerlMemMalloc(struct IPerlMem* piPerl, size_t size);
35 void* PerlMemRealloc(struct IPerlMem* piPerl, void* ptr, size_t size);
36 void  PerlMemFree(struct IPerlMem* piPerl, void* ptr);
37 void* PerlMemCalloc(struct IPerlMem* piPerl, size_t num, size_t size);
38
39 struct IPerlMem perlMem =
40 {
41     PerlMemMalloc,
42     PerlMemRealloc,
43     PerlMemFree,
44     PerlMemCalloc,
45 };
46
47 /* IPerlMem - Memory management - End   ==================================================*/
48
49 /* IPerlDir     - Directory Manipulation - Begin =============================================*/
50
51 int PerlDirMakedir(struct IPerlDir* piPerl, const char *dirname, int mode);
52 int PerlDirChdir(struct IPerlDir* piPerl, const char *dirname);
53 int PerlDirRmdir(struct IPerlDir* piPerl, const char *dirname);
54 int PerlDirClose(struct IPerlDir* piPerl, DIR *dirp);
55 DIR* PerlDirOpen(struct IPerlDir* piPerl, char *filename);
56 struct direct * PerlDirRead(struct IPerlDir* piPerl, DIR *dirp);
57 void PerlDirRewind(struct IPerlDir* piPerl, DIR *dirp);
58 void PerlDirSeek(struct IPerlDir* piPerl, DIR *dirp, long loc);
59 long PerlDirTell(struct IPerlDir* piPerl, DIR *dirp);
60
61 struct IPerlDir perlDir =
62 {
63         PerlDirMakedir,
64     PerlDirChdir,
65     PerlDirRmdir,
66     PerlDirClose,
67     PerlDirOpen,
68     PerlDirRead,
69     PerlDirRewind,
70     PerlDirSeek,
71     PerlDirTell,
72 };
73
74 /* IPerlDir     - Directory Manipulation - End   =============================================*/
75
76 /* IPerlEnv     - Environment related functions - Begin ======================================*/
77
78 char* PerlEnvGetenv(struct IPerlEnv* piPerl, const char *varname);
79 int PerlEnvPutenv(struct IPerlEnv* piPerl, const char *envstring);
80 char* PerlEnvGetenv_len(struct IPerlEnv* piPerl, const char* varname, unsigned long* len);
81 int PerlEnvUname(struct IPerlEnv* piPerl, struct utsname *name);
82 void PerlEnvClearenv(struct IPerlEnv* piPerl);
83
84 //Uncomment the following prototypes and the function names in the structure below
85 //whenever it is implemented.
86 //The function definition to be put in nwperlsys.c
87
88 /*void* PerlEnvGetChildenv(struct IPerlEnv* piPerl);
89 void PerlEnvFreeChildenv(struct IPerlEnv* piPerl, void* childEnv);
90 char* PerlEnvGetChilddir(struct IPerlEnv* piPerl);
91 void PerlEnvFreeChilddir(struct IPerlEnv* piPerl, char* childDir);*/
92
93 struct IPerlEnv perlEnv = 
94 {
95         PerlEnvGetenv,
96         PerlEnvPutenv,
97     PerlEnvGetenv_len,
98     PerlEnvUname,
99     PerlEnvClearenv,
100 /*    PerlEnvGetChildenv,
101     PerlEnvFreeChildenv,
102     PerlEnvGetChilddir,
103     PerlEnvFreeChilddir,*/
104 };
105
106 /* IPerlEnv     - Environment related functions - Begin ======================================*/
107
108 /* IPerlStdio   - Stdio functions - Begin ================================================*/
109
110 FILE* PerlStdIOStdin(struct IPerlStdIO* piPerl);
111 FILE* PerlStdIOStdout(struct IPerlStdIO* piPerl);
112 FILE* PerlStdIOStderr(struct IPerlStdIO* piPerl);
113 FILE* PerlStdIOOpen(struct IPerlStdIO* piPerl, const char *path, const char *mode);
114 int PerlStdIOClose(struct IPerlStdIO* piPerl, FILE* pf);
115 int PerlStdIOEof(struct IPerlStdIO* piPerl, FILE* pf);
116 int PerlStdIOError(struct IPerlStdIO* piPerl, FILE* pf);
117 void PerlStdIOClearerr(struct IPerlStdIO* piPerl, FILE* pf);
118 int PerlStdIOGetc(struct IPerlStdIO* piPerl, FILE* pf);
119 char* PerlStdIOGetBase(struct IPerlStdIO* piPerl, FILE* pf);
120 int PerlStdIOGetBufsiz(struct IPerlStdIO* piPerl, FILE* pf);
121 int PerlStdIOGetCnt(struct IPerlStdIO* piPerl, FILE* pf);
122 char* PerlStdIOGetPtr(struct IPerlStdIO* piPerl, FILE* pf);
123 char* PerlStdIOGets(struct IPerlStdIO* piPerl, FILE* pf, char* s, int n);
124 int PerlStdIOPutc(struct IPerlStdIO* piPerl, FILE* pf, int c);
125 int PerlStdIOPuts(struct IPerlStdIO* piPerl, FILE* pf, const char *s);
126 int PerlStdIOFlush(struct IPerlStdIO* piPerl, FILE* pf);
127 int PerlStdIOUngetc(struct IPerlStdIO* piPerl, int c, FILE* pf);
128 int PerlStdIOFileno(struct IPerlStdIO* piPerl, FILE* pf);
129 FILE* PerlStdIOFdopen(struct IPerlStdIO* piPerl, int fd, const char *mode);
130 FILE* PerlStdIOReopen(struct IPerlStdIO* piPerl, const char*path, const char*mode, FILE* pf);
131 SSize_t PerlStdIORead(struct IPerlStdIO* piPerl, void *buffer, Size_t size, Size_t count, FILE* pf);
132 SSize_t PerlStdIOWrite(struct IPerlStdIO* piPerl, const void *buffer, Size_t size, Size_t count, FILE* pf);
133 void PerlStdIOSetBuf(struct IPerlStdIO* piPerl, FILE* pf, char* buffer);
134 int PerlStdIOSetVBuf(struct IPerlStdIO* piPerl, FILE* pf, char* buffer, int type, Size_t size);
135 void PerlStdIOSetCnt(struct IPerlStdIO* piPerl, FILE* pf, int n);
136 void PerlStdIOSetPtr(struct IPerlStdIO* piPerl, FILE* pf, char * ptr);
137 void PerlStdIOSetlinebuf(struct IPerlStdIO* piPerl, FILE* pf);
138 int PerlStdIOPrintf(struct IPerlStdIO* piPerl, FILE* pf, const char *format,...);
139 int PerlStdIOVprintf(struct IPerlStdIO* piPerl, FILE* pf, const char *format, va_list arglist);
140 long PerlStdIOTell(struct IPerlStdIO* piPerl, FILE* pf);
141 int PerlStdIOSeek(struct IPerlStdIO* piPerl, FILE* pf, off_t offset, int origin);
142 void PerlStdIORewind(struct IPerlStdIO* piPerl, FILE* pf);
143 FILE* PerlStdIOTmpfile(struct IPerlStdIO* piPerl);
144 int PerlStdIOGetpos(struct IPerlStdIO* piPerl, FILE* pf, Fpos_t *p);
145 int PerlStdIOSetpos(struct IPerlStdIO* piPerl, FILE* pf, const Fpos_t *p);
146 void PerlStdIOInit(struct IPerlStdIO* piPerl);
147 void PerlStdIOInitOSExtras(struct IPerlStdIO* piPerl);
148 int PerlStdIOOpenOSfhandle(struct IPerlStdIO* piPerl, long osfhandle, int flags);
149 int PerlStdIOGetOSfhandle(struct IPerlStdIO* piPerl, int filenum);
150 FILE* PerlStdIOFdupopen(struct IPerlStdIO* piPerl, FILE* pf);
151
152 struct IPerlStdIO perlStdIO =
153 {
154         PerlStdIOStdin,
155     PerlStdIOStdout,
156     PerlStdIOStderr,
157     PerlStdIOOpen,
158     PerlStdIOClose,
159     PerlStdIOEof,
160     PerlStdIOError,
161     PerlStdIOClearerr,
162     PerlStdIOGetc,
163     PerlStdIOGetBase,
164     PerlStdIOGetBufsiz,
165     PerlStdIOGetCnt,
166     PerlStdIOGetPtr,
167     PerlStdIOGets,
168     PerlStdIOPutc,
169     PerlStdIOPuts,
170     PerlStdIOFlush,
171     PerlStdIOUngetc,
172     PerlStdIOFileno,
173     PerlStdIOFdopen,
174     PerlStdIOReopen,
175     PerlStdIORead,
176     PerlStdIOWrite,
177     PerlStdIOSetBuf,
178     PerlStdIOSetVBuf,
179     PerlStdIOSetCnt,
180     PerlStdIOSetPtr,
181     PerlStdIOSetlinebuf,
182     PerlStdIOPrintf,
183     PerlStdIOVprintf,
184     PerlStdIOTell,
185     PerlStdIOSeek,
186     PerlStdIORewind,
187     PerlStdIOTmpfile,
188     PerlStdIOGetpos,
189     PerlStdIOSetpos,
190     PerlStdIOInit,
191     PerlStdIOInitOSExtras,
192     PerlStdIOFdupopen,
193 };
194
195 /* IPerlStdio   - Stdio functions - End   ================================================*/
196
197 /* IPerlLIO     - Low-level IO functions - Begin =============================================*/
198
199 int PerlLIOAccess(struct IPerlLIO* piPerl, const char *path, int mode);
200 int PerlLIOChmod(struct IPerlLIO* piPerl, const char *filename, int pmode);
201 int PerlLIOChown(struct IPerlLIO* piPerl, const char *filename, uid_t owner, gid_t group);
202 int PerlLIOChsize(struct IPerlLIO* piPerl, int handle, long size);
203 int PerlLIOClose(struct IPerlLIO* piPerl, int handle);
204 int PerlLIODup(struct IPerlLIO* piPerl, int handle);
205 int PerlLIODup2(struct IPerlLIO* piPerl, int handle1, int handle2);
206 int PerlLIOFlock(struct IPerlLIO* piPerl, int fd, int oper);
207 int PerlLIOFileStat(struct IPerlLIO* piPerl, int handle, struct stat *buffer);
208 int PerlLIOIOCtl(struct IPerlLIO* piPerl, int i, unsigned int u, char *data);
209 int PerlLIOIsatty(struct IPerlLIO* piPerl, int fd);
210 int PerlLIOLink(struct IPerlLIO* piPerl, const char*oldname, const char *newname);
211 long PerlLIOLseek(struct IPerlLIO* piPerl, int handle, long offset, int origin);
212 int PerlLIOLstat(struct IPerlLIO* piPerl, const char *path, struct stat *buffer);
213 char* PerlLIOMktemp(struct IPerlLIO* piPerl, char *Template);
214 int PerlLIOOpen(struct IPerlLIO* piPerl, const char *filename, int oflag);
215 int PerlLIOOpen3(struct IPerlLIO* piPerl, const char *filename, int oflag, int pmode);
216 int PerlLIORead(struct IPerlLIO* piPerl, int handle, void *buffer, unsigned int count);
217 int PerlLIORename(struct IPerlLIO* piPerl, const char *OldFileName, const char *newname);
218 int PerlLIOSetmode(struct IPerlLIO* piPerl, FILE *fp, int mode);
219 int PerlLIONameStat(struct IPerlLIO* piPerl, const char *path, struct stat *buffer);
220 char* PerlLIOTmpnam(struct IPerlLIO* piPerl, char *string);
221 int PerlLIOUmask(struct IPerlLIO* piPerl, int pmode);
222 int PerlLIOUnlink(struct IPerlLIO* piPerl, const char *filename);
223 int PerlLIOUtime(struct IPerlLIO* piPerl, char *filename, struct utimbuf *times);
224 int PerlLIOWrite(struct IPerlLIO* piPerl, int handle, const void *buffer, unsigned int count);
225
226 struct IPerlLIO perlLIO =
227 {
228         PerlLIOAccess,
229     PerlLIOChmod,
230     PerlLIOChown,
231     PerlLIOChsize,
232     PerlLIOClose,
233     PerlLIODup,
234     PerlLIODup2,
235     PerlLIOFlock,
236     PerlLIOFileStat,
237     PerlLIOIOCtl,
238     PerlLIOIsatty,
239     PerlLIOLink,
240     PerlLIOLseek,
241     PerlLIOLstat,
242     PerlLIOMktemp,
243     PerlLIOOpen,
244     PerlLIOOpen3,
245     PerlLIORead,
246     PerlLIORename,
247     PerlLIOSetmode,
248     PerlLIONameStat,
249     PerlLIOTmpnam,
250     PerlLIOUmask,
251     PerlLIOUnlink,
252     PerlLIOUtime,
253     PerlLIOWrite,    
254 };
255
256 /* IPerlLIO     - Low-level IO functions - End ==============================================*/
257
258 /* IPerlProc - Process control functions - Begin =========================================*/
259
260 void PerlProcAbort(struct IPerlProc* piPerl);
261 char * PerlProcCrypt(struct IPerlProc* piPerl, const char* clear, const char* salt);
262 void PerlProcExit(struct IPerlProc* piPerl, int status);
263 void PerlProc_Exit(struct IPerlProc* piPerl, int status);
264 int PerlProcExecl(struct IPerlProc* piPerl, const char *cmdname, const char *arg0, const char *arg1, const char *arg2, const char *arg3);
265 int PerlProcExecv(struct IPerlProc* piPerl, const char *cmdname, const char *const *argv);
266 int PerlProcExecvp(struct IPerlProc* piPerl, const char *cmdname, const char *const *argv);
267 uid_t PerlProcGetuid(struct IPerlProc* piPerl);
268 uid_t PerlProcGeteuid(struct IPerlProc* piPerl);
269 gid_t PerlProcGetgid(struct IPerlProc* piPerl);
270 gid_t PerlProcGetegid(struct IPerlProc* piPerl);
271 char * PerlProcGetlogin(struct IPerlProc* piPerl);
272 int PerlProcKill(struct IPerlProc* piPerl, int pid, int sig);
273 int PerlProcKillpg(struct IPerlProc* piPerl, int pid, int sig);
274 int PerlProcPauseProc(struct IPerlProc* piPerl);
275 PerlIO* PerlProcPopen(struct IPerlProc* piPerl, const char *command, const char *mode);
276 int PerlProcPclose(struct IPerlProc* piPerl, PerlIO *stream);
277 int PerlProcPipe(struct IPerlProc* piPerl, int *phandles);
278 int PerlProcSetuid(struct IPerlProc* piPerl, uid_t u);
279 int PerlProcSetgid(struct IPerlProc* piPerl, gid_t g);
280 int PerlProcSleep(struct IPerlProc* piPerl, unsigned int s);
281 int PerlProcTimes(struct IPerlProc* piPerl, struct tms *timebuf);
282 int PerlProcWait(struct IPerlProc* piPerl, int *status);
283 int PerlProcWaitpid(struct IPerlProc* piPerl, int pid, int *status, int flags);
284 Sighandler_t PerlProcSignal(struct IPerlProc* piPerl, int sig, Sighandler_t subcode);
285 int PerlProcFork(struct IPerlProc* piPerl);
286 int PerlProcGetpid(struct IPerlProc* piPerl);
287 int PerlProcSpawn(struct IPerlProc* piPerl, char* cmds);
288 int PerlProcSpawnvp(struct IPerlProc* piPerl, int mode, const char *cmdname, const char *const *argv);
289 int PerlProcASpawn(struct IPerlProc* piPerl, void *vreally, void **vmark, void **vsp);
290
291 struct IPerlProc perlProc =
292 {
293     PerlProcAbort,
294     PerlProcCrypt,
295     PerlProcExit,
296     PerlProc_Exit,
297     PerlProcExecl,
298     PerlProcExecv,
299     PerlProcExecvp,
300     PerlProcGetuid,
301     PerlProcGeteuid,
302     PerlProcGetgid,
303     PerlProcGetegid,
304     PerlProcGetlogin,
305     PerlProcKill,
306     PerlProcKillpg,
307     PerlProcPauseProc,
308     PerlProcPopen,
309     PerlProcPclose,
310     PerlProcPipe,
311     PerlProcSetuid,
312     PerlProcSetgid,
313     PerlProcSleep,
314     PerlProcTimes,
315     PerlProcWait,
316     PerlProcWaitpid,
317     PerlProcSignal,
318     PerlProcFork,
319     PerlProcGetpid,
320     //PerlProcLastHost;
321     //PerlProcPopenList;
322 };
323
324 /* IPerlProc - Process control functions - End   =========================================*/
325
326 /* IPerlSock - Socket functions - Begin ==================================================*/
327
328 u_long PerlSockHtonl(struct IPerlSock* piPerl, u_long hostlong);
329 u_short PerlSockHtons(struct IPerlSock* piPerl, u_short hostshort);
330 u_long PerlSockNtohl(struct IPerlSock* piPerl, u_long netlong);
331 u_short PerlSockNtohs(struct IPerlSock* piPerl, u_short netshort);
332 SOCKET PerlSockAccept(struct IPerlSock* piPerl, SOCKET s, struct sockaddr* addr, int* addrlen);
333 int PerlSockBind(struct IPerlSock* piPerl, SOCKET s, const struct sockaddr* name, int namelen);
334 int PerlSockConnect(struct IPerlSock* piPerl, SOCKET s, const struct sockaddr* name, int namelen);
335 void PerlSockEndhostent(struct IPerlSock* piPerl);
336 void PerlSockEndnetent(struct IPerlSock* piPerl);
337 void PerlSockEndprotoent(struct IPerlSock* piPerl);
338 void PerlSockEndservent(struct IPerlSock* piPerl);
339 struct hostent* PerlSockGethostbyaddr(struct IPerlSock* piPerl, const char* addr, int len, int type);
340 struct hostent* PerlSockGethostbyname(struct IPerlSock* piPerl, const char* name);
341 struct hostent* PerlSockGethostent(struct IPerlSock* piPerl);
342 int PerlSockGethostname(struct IPerlSock* piPerl, char* name, int namelen);
343 struct netent * PerlSockGetnetbyaddr(struct IPerlSock* piPerl, long net, int type);
344 struct netent * PerlSockGetnetbyname(struct IPerlSock* piPerl, const char *name);
345 struct netent * PerlSockGetnetent(struct IPerlSock* piPerl);
346 int PerlSockGetpeername(struct IPerlSock* piPerl, SOCKET s, struct sockaddr* name, int* namelen);
347 struct protoent* PerlSockGetprotobyname(struct IPerlSock* piPerl, const char* name);
348 struct protoent* PerlSockGetprotobynumber(struct IPerlSock* piPerl, int number);
349 struct protoent* PerlSockGetprotoent(struct IPerlSock* piPerl);
350 struct servent* PerlSockGetservbyname(struct IPerlSock* piPerl, const char* name, const char* proto);
351 struct servent* PerlSockGetservbyport(struct IPerlSock* piPerl, int port, const char* proto);
352 struct servent* PerlSockGetservent(struct IPerlSock* piPerl);
353 int PerlSockGetsockname(struct IPerlSock* piPerl, SOCKET s, struct sockaddr* name, int* namelen);
354 int PerlSockGetsockopt(struct IPerlSock* piPerl, SOCKET s, int level, int optname, char* optval, int* optlen);
355 unsigned long PerlSockInetAddr(struct IPerlSock* piPerl, const char* cp);
356 char* PerlSockInetNtoa(struct IPerlSock* piPerl, struct in_addr in);
357 int PerlSockListen(struct IPerlSock* piPerl, SOCKET s, int backlog);
358 int PerlSockRecv(struct IPerlSock* piPerl, SOCKET s, char* buffer, int len, int flags);
359 int PerlSockRecvfrom(struct IPerlSock* piPerl, SOCKET s, char* buffer, int len, int flags, struct sockaddr* from, int* fromlen);
360 int PerlSockSelect(struct IPerlSock* piPerl, int nfds, char* readfds, char* writefds, char* exceptfds, const struct timeval* timeout);
361 int PerlSockSend(struct IPerlSock* piPerl, SOCKET s, const char* buffer, int len, int flags);
362 int PerlSockSendto(struct IPerlSock* piPerl, SOCKET s, const char* buffer, int len, int flags, const struct sockaddr* to, int tolen);
363 void PerlSockSethostent(struct IPerlSock* piPerl, int stayopen);
364 void PerlSockSetnetent(struct IPerlSock* piPerl, int stayopen);
365 void PerlSockSetprotoent(struct IPerlSock* piPerl, int stayopen);
366 void PerlSockSetservent(struct IPerlSock* piPerl, int stayopen);
367 int PerlSockSetsockopt(struct IPerlSock* piPerl, SOCKET s, int level, int optname, const char* optval, int optlen);
368 int PerlSockShutdown(struct IPerlSock* piPerl, SOCKET s, int how);
369 SOCKET PerlSockSocket(struct IPerlSock* piPerl, int af, int type, int protocol);
370 int PerlSockSocketpair(struct IPerlSock* piPerl, int domain, int type, int protocol, int* fds);
371 int PerlSockIoctlsocket(struct IPerlSock* piPerl, SOCKET s, long cmd, u_long *argp);
372
373 struct IPerlSock  perlSock =
374 {
375         PerlSockHtonl,
376     PerlSockHtons,
377     PerlSockNtohl,
378     PerlSockNtohs,
379     PerlSockAccept,
380     PerlSockBind,
381     PerlSockConnect,
382     PerlSockEndhostent,
383     PerlSockEndnetent,
384     PerlSockEndprotoent,
385     PerlSockEndservent,
386     PerlSockGethostname,
387     PerlSockGetpeername,
388     PerlSockGethostbyaddr,
389     PerlSockGethostbyname,
390     PerlSockGethostent,
391     PerlSockGetnetbyaddr,
392     PerlSockGetnetbyname,
393     PerlSockGetnetent,
394     PerlSockGetprotobyname,
395     PerlSockGetprotobynumber,
396     PerlSockGetprotoent,
397     PerlSockGetservbyname,
398     PerlSockGetservbyport,
399     PerlSockGetservent,
400     PerlSockGetsockname,
401     PerlSockGetsockopt,
402     PerlSockInetAddr,
403         PerlSockInetNtoa,
404         PerlSockListen,
405     PerlSockRecv,
406     PerlSockRecvfrom,
407     PerlSockSelect,
408     PerlSockSend,
409     PerlSockSendto,
410     PerlSockSethostent,
411     PerlSockSetnetent,
412     PerlSockSetprotoent,
413     PerlSockSetservent,
414     PerlSockSetsockopt,
415     PerlSockShutdown,
416         PerlSockSocket,
417     PerlSockSocketpair,
418 };
419
420 /* IPerlSock - Socket functions - End ====================================================*/
421
422 #endif /* ___NWPerlSys_H___ */