2 # creates a C API file from proto.h
3 # takes one argument, the path to lib/CORE directory.
4 # creates 2 files: "perlCAPI.cpp" and "perlCAPI.h".
6 my $hdrfile = "$ARGV[0]/perlCAPI.h";
7 my $infile = '../proto.h';
8 my @embedsyms = ('../global.sym', '../pp.sym');
15 my ($syms, @files) = @_;
18 foreach my $file (@files) {
21 or die "$0: Can't open $file: $!\n";
23 s/[ \t]*#.*$//; # delete comments
24 if (/^\s*(\S+)\s*$/) {
26 $$syms{$sym} = "Perl_$sym";
33 readsyms %embed, @embedsyms;
37 foreach my $symbol (@$list) {
38 $skip_list{$symbol} = 1;
82 if (!open(INFILE, "<$infile")) {
83 print "open of $infile failed: $!\n";
87 if (!open(OUTFILE, ">perlCAPI.cpp")) {
88 print "open of perlCAPI.cpp failed: $!\n";
92 print OUTFILE <<ENDCODE;
97 #define DESTRUCTORFUNC (void (*)(void*))
101 print OUTFILE "#ifdef SetCPerlObj_defined\n" unless ($separateObj == 0);
103 print OUTFILE <<ENDCODE;
104 extern "C" void SetCPerlObj(CPerlObj* pP)
111 print OUTFILE "#endif\n" unless ($separateObj == 0);
114 last unless defined ($_ = <INFILE>);
120 $_ =~ s/^VIRTUAL\s*//;
121 $_ =~ s/\s*__attribute__.*$/;/;
122 if ( /(.*)\s([A-z_]*[0-9A-z_]+\s)\((.*)\);/ ||
123 /(.*)\*([A-z_]*[0-9A-z_]+\s)\((.*)\);/ ) {
130 next if (defined $skip_list{$name});
132 if($args eq "ARGSproto") {
136 $return = ($type eq "void" or $type eq "Free_t") ? "\t" : "\treturn";
138 if(defined $embed{$name}) {
139 $funcName = $embed{$name};
144 @args = split(',', $args);
145 if ($args[$#args] =~ /\s*\.\.\.\s*/) {
146 if(($name eq "croak") or ($name eq "deb") or ($name eq "die")
147 or ($name eq "form") or ($name eq "warn")
148 or ($name eq "warner")) {
149 print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
150 for (@args) { $_ = $1 if /(\w+)\W*$/; }
151 $arg = $args[$#args-1];
153 $start = join(', ',@args[0 .. ($#args - 2)]) if @args > 2;
154 $start .= ', ' if $start;
155 print OUTFILE <<ENDCODE;
158 extern "C" $type $funcName ($args)
162 va_start(args, $arg);
163 pmsg = pPerl->Perl_sv_2mortal(pPerl->Perl_newSVsv(pPerl->Perl_mess($arg, &args)));
164 $return pPerl->Perl_$name($start SvPV_nolen(pmsg));
168 print OUTFILE "#endif\n" unless ($separateObj == 0);
170 elsif($name eq "newSVpvf") {
171 print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
172 $args[0] =~ /(\w+)\W*$/;
174 print OUTFILE <<ENDCODE;
177 extern "C" $type $funcName ($args)
181 va_start(args, $arg);
182 sv = pPerl->Perl_newSV(0);
183 pPerl->Perl_sv_vcatpvfn(sv, $arg, strlen($arg), &args, NULL, 0, NULL);
188 print OUTFILE "#endif\n" unless ($separateObj == 0);
190 elsif($name eq "sv_catpvf") {
191 print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
192 $args[0] =~ /(\w+)\W*$/;
194 $args[1] =~ /(\w+)\W*$/;
196 print OUTFILE <<ENDCODE;
199 extern "C" $type $funcName ($args)
202 va_start(args, $arg1);
203 pPerl->Perl_sv_vcatpvfn($arg0, $arg1, strlen($arg1), &args, NULL, 0, NULL);
207 print OUTFILE "#endif\n" unless ($separateObj == 0);
209 elsif($name eq "sv_catpvf_mg") {
210 print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
211 $args[0] =~ /(\w+)\W*$/;
213 $args[1] =~ /(\w+)\W*$/;
215 print OUTFILE <<ENDCODE;
219 #define mg_set pPerl->Perl_mg_set
221 extern "C" $type $funcName ($args)
224 va_start(args, $arg1);
225 pPerl->Perl_sv_vcatpvfn($arg0, $arg1, strlen($arg1), &args, NULL, 0, NULL);
230 print OUTFILE "#endif\n" unless ($separateObj == 0);
232 elsif($name eq "sv_setpvf") {
233 print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
234 $args[0] =~ /(\w+)\W*$/;
236 $args[1] =~ /(\w+)\W*$/;
238 print OUTFILE <<ENDCODE;
241 extern "C" $type $funcName ($args)
244 va_start(args, $arg1);
245 pPerl->Perl_sv_vsetpvfn($arg0, $arg1, strlen($arg1), &args, NULL, 0, NULL);
249 print OUTFILE "#endif\n" unless ($separateObj == 0);
251 elsif($name eq "sv_setpvf_mg") {
252 print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
253 $args[0] =~ /(\w+)\W*$/;
255 $args[1] =~ /(\w+)\W*$/;
257 print OUTFILE <<ENDCODE;
261 #define mg_set pPerl->Perl_mg_set
263 extern "C" $type $funcName ($args)
266 va_start(args, $arg1);
267 pPerl->Perl_sv_vsetpvfn($arg0, $arg1, strlen($arg1), &args, NULL, 0, NULL);
272 print OUTFILE "#endif\n" unless ($separateObj == 0);
274 elsif($name eq "fprintf") {
275 print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
276 $args[0] =~ /(\w+)\W*$/;
278 $args[1] =~ /(\w+)\W*$/;
280 print OUTFILE <<ENDCODE;
283 extern "C" $type $name ($args)
287 va_start(args, $arg1);
288 nRet = PerlIO_vprintf($arg0, $arg1, args);
293 print OUTFILE "#endif\n" unless ($separateObj == 0);
295 print "Warning: can't handle varargs function '$name'\n";
301 if ($name eq "newXS") {
305 print OUTFILE "\n#ifdef $name" . "defined" unless ($separateObj == 0);
307 # handle specical case for save_destructor
308 if ($name eq "save_destructor") {
311 # handle specical case for sighandler
312 if ($name eq "sighandler") {
315 # handle special case for sv_grow
316 if ($name eq "sv_grow" and $args eq "SV* sv, unsigned long newlen") {
319 # handle special case for newSV
320 if ($name eq "newSV" and $args eq "I32 x, STRLEN len") {
323 # handle special case for perl_parse
324 if ($name eq "perl_parse") {
325 print OUTFILE <<ENDCODE;
328 extern "C" $type $name ($args)
330 return pPerl->perl_parse(xsinit, argc, argv, env);
333 print OUTFILE "#endif\n" unless ($separateObj == 0);
336 # handle special case for perl_atexit
337 if ($name eq "perl_atexit") {
338 print OUTFILE <<ENDCODE;
341 extern "C" $type $name ($args)
343 pPerl->perl_atexit(fn, ptr);
346 print OUTFILE "#endif\n" unless ($separateObj == 0);
351 if($name eq "byterun" and $args eq "struct bytestream bs") {
356 if ($args eq "void") {
357 print OUTFILE <<ENDCODE;
360 extern "C" $type $funcName ()
362 $return pPerl->$funcName();
366 print OUTFILE "#endif\n" unless ($separateObj == 0);
370 # foo(char *s, const int bar);
371 print OUTFILE <<ENDCODE;
374 extern "C" $type $funcName ($args)
377 print OUTFILE "$return pPerl->$funcName";
379 foreach $arg (@args) {
380 if ($arg =~ /(\w+)\W*$/) {
382 print OUTFILE ", $1";
390 print OUTFILE ");\n}\n";
391 print OUTFILE "#endif\n" unless ($separateObj == 0);
394 print "failed to match $_";
505 my ($syms, $file, $pre) = @_;
508 open(FILE, "< $file")
509 or die "$0: Can't open $file: $!\n";
511 s/[ \t]*#.*//; # Delete comments.
512 if (/PERLVARI?C?\($pre(\w+),\s*([^,)]+)/) {
523 readvars %intrp, '..\intrpvar.h','I';
524 readvars %thread, '..\thrdvar.h','T';
525 readvars %globvar, '..\perlvars.h','G';
527 open(HDRFILE, ">$hdrfile") or die "$0: Can't open $hdrfile: $!\n";
528 print HDRFILE <<ENDCODE;
529 void SetCPerlObj(void* pP);
530 void boot_CAPI_handler(CV *cv, void (*subaddr)(CV *c), void *pP);
531 CV* Perl_newXS(char* name, void (*subaddr)(CV* cv), char* filename);
539 return if (defined $skip_list{$name});
540 return if ($type eq 'struct perl_thread *');
542 print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
543 print OUTFILE <<ENDCODE;
545 extern "C" $type * _PL_$name ()
547 return (($type *)&pPerl->PL_$name);
552 print OUTFILE "#endif\n" unless ($separateObj == 0);
554 print HDRFILE <<ENDCODE;
557 $type * _PL_$name ();
558 #define PL_$name (*_PL_$name())
564 foreach $key (keys %intrp) {
565 DoVariable ($key, $intrp{$key});
568 foreach $key (keys %thread) {
569 DoVariable ($key, $thread{$key});
572 foreach $key (keys %globvar) {
573 DoVariable ($key, $globvar{$key});
576 print OUTFILE <<EOCODE;
582 char ** _Perl_op_desc(void)
584 return pPerl->Perl_get_op_descs();
587 char ** _Perl_op_name(void)
589 return pPerl->Perl_get_op_names();
592 char * _Perl_no_modify(void)
594 return pPerl->Perl_get_no_modify();
597 U32 * _Perl_opargs(void)
599 return pPerl->Perl_get_opargs();
602 void boot_CAPI_handler(CV *cv, void (*subaddr)(CV *c), void *pP)
605 XSLock localLock((CPerlObj*)pP);
610 void xs_handler(CV* cv, CPerlObj* p)
614 MAGIC* m = pPerl->Perl_mg_find((SV*)cv, '~');
620 func = (void(*)(CV*))SvIVX(sv);
624 func = (void(*)(CV*))pPerl->Perl_sv_2iv(sv);
630 CV* Perl_newXS(char* name, void (*subaddr)(CV* cv), char* filename)
632 CV* cv = pPerl->Perl_newXS(name, xs_handler, filename);
633 pPerl->Perl_sv_magic((SV*)cv, pPerl->Perl_sv_2mortal(pPerl->Perl_newSViv((IV)subaddr)), '~', "CAPI", 4);
638 void Perl_deb(const char pat, ...)
650 int * _win32_errno(void)
652 return &pPerl->ErrorNo();
655 FILE* _win32_stdin(void)
657 return (FILE*)pPerl->PL_piStdIO->Stdin();
660 FILE* _win32_stdout(void)
662 return (FILE*)pPerl->PL_piStdIO->Stdout();
665 FILE* _win32_stderr(void)
667 return (FILE*)pPerl->PL_piStdIO->Stderr();
670 int _win32_ferror(FILE *fp)
672 return pPerl->PL_piStdIO->Error((PerlIO*)fp, ErrorNo());
675 int _win32_feof(FILE *fp)
677 return pPerl->PL_piStdIO->Eof((PerlIO*)fp, ErrorNo());
680 char* _win32_strerror(int e)
685 void _win32_perror(const char *str)
690 int _win32_vfprintf(FILE *pf, const char *format, va_list arg)
692 return pPerl->PL_piStdIO->Vprintf((PerlIO*)pf, ErrorNo(), format, arg);
695 int _win32_vprintf(const char *format, va_list arg)
697 return pPerl->PL_piStdIO->Vprintf(pPerl->PL_piStdIO->Stdout(), ErrorNo(), format, arg);
700 int _win32_fprintf(FILE *pf, const char *format, ...)
704 va_start(args, format);
705 ret = _win32_vfprintf(pf, format, args);
710 int _win32_printf(const char *format, ...)
714 va_start(args, format);
715 ret = _win32_vprintf(format, args);
720 size_t _win32_fread(void *buf, size_t size, size_t count, FILE *pf)
722 return pPerl->PL_piStdIO->Read((PerlIO*)pf, buf, (size*count), ErrorNo());
725 size_t _win32_fwrite(const void *buf, size_t size, size_t count, FILE *pf)
727 return pPerl->PL_piStdIO->Write((PerlIO*)pf, buf, (size*count), ErrorNo());
730 FILE* _win32_fopen(const char *path, const char *mode)
732 return (FILE*)pPerl->PL_piStdIO->Open(path, mode, ErrorNo());
735 FILE* _win32_fdopen(int fh, const char *mode)
737 return (FILE*)pPerl->PL_piStdIO->Fdopen(fh, mode, ErrorNo());
740 FILE* _win32_freopen(const char *path, const char *mode, FILE *pf)
742 return (FILE*)pPerl->PL_piStdIO->Reopen(path, mode, (PerlIO*)pf, ErrorNo());
745 int _win32_fclose(FILE *pf)
747 return pPerl->PL_piStdIO->Close((PerlIO*)pf, ErrorNo());
750 int _win32_fputs(const char *s,FILE *pf)
752 return pPerl->PL_piStdIO->Puts((PerlIO*)pf, s, ErrorNo());
755 int _win32_fputc(int c,FILE *pf)
757 return pPerl->PL_piStdIO->Putc((PerlIO*)pf, c, ErrorNo());
760 int _win32_ungetc(int c,FILE *pf)
762 return pPerl->PL_piStdIO->Ungetc((PerlIO*)pf, c, ErrorNo());
765 int _win32_getc(FILE *pf)
767 return pPerl->PL_piStdIO->Getc((PerlIO*)pf, ErrorNo());
770 int _win32_fileno(FILE *pf)
772 return pPerl->PL_piStdIO->Fileno((PerlIO*)pf, ErrorNo());
775 void _win32_clearerr(FILE *pf)
777 pPerl->PL_piStdIO->Clearerr((PerlIO*)pf, ErrorNo());
780 int _win32_fflush(FILE *pf)
782 return pPerl->PL_piStdIO->Flush((PerlIO*)pf, ErrorNo());
785 long _win32_ftell(FILE *pf)
787 return pPerl->PL_piStdIO->Tell((PerlIO*)pf, ErrorNo());
790 int _win32_fseek(FILE *pf,long offset,int origin)
792 return pPerl->PL_piStdIO->Seek((PerlIO*)pf, offset, origin, ErrorNo());
795 int _win32_fgetpos(FILE *pf,fpos_t *p)
797 return pPerl->PL_piStdIO->Getpos((PerlIO*)pf, p, ErrorNo());
800 int _win32_fsetpos(FILE *pf,const fpos_t *p)
802 return pPerl->PL_piStdIO->Setpos((PerlIO*)pf, p, ErrorNo());
805 void _win32_rewind(FILE *pf)
807 pPerl->PL_piStdIO->Rewind((PerlIO*)pf, ErrorNo());
810 FILE* _win32_tmpfile(void)
812 return (FILE*)pPerl->PL_piStdIO->Tmpfile(ErrorNo());
815 void _win32_setbuf(FILE *pf, char *buf)
817 pPerl->PL_piStdIO->SetBuf((PerlIO*)pf, buf, ErrorNo());
820 int _win32_setvbuf(FILE *pf, char *buf, int type, size_t size)
822 return pPerl->PL_piStdIO->SetVBuf((PerlIO*)pf, buf, type, size, ErrorNo());
825 char* _win32_fgets(char *s, int n, FILE *pf)
827 return pPerl->PL_piStdIO->Gets((PerlIO*)pf, s, n, ErrorNo());
830 char* _win32_gets(char *s)
832 return _win32_fgets(s, 80, (FILE*)pPerl->PL_piStdIO->Stdin());
835 int _win32_fgetc(FILE *pf)
837 return pPerl->PL_piStdIO->Getc((PerlIO*)pf, ErrorNo());
840 int _win32_putc(int c, FILE *pf)
842 return pPerl->PL_piStdIO->Putc((PerlIO*)pf, c, ErrorNo());
845 int _win32_puts(const char *s)
847 return pPerl->PL_piStdIO->Puts(pPerl->PL_piStdIO->Stdout(), s, ErrorNo());
850 int _win32_getchar(void)
852 return pPerl->PL_piStdIO->Getc(pPerl->PL_piStdIO->Stdin(), ErrorNo());
855 int _win32_putchar(int c)
857 return pPerl->PL_piStdIO->Putc(pPerl->PL_piStdIO->Stdout(), c, ErrorNo());
860 void* _win32_malloc(size_t size)
862 return pPerl->PL_piMem->Malloc(size);
865 void* _win32_calloc(size_t numitems, size_t size)
867 return pPerl->PL_piMem->Malloc(numitems*size);
870 void* _win32_realloc(void *block, size_t size)
872 return pPerl->PL_piMem->Realloc(block, size);
875 void _win32_free(void *block)
877 pPerl->PL_piMem->Free(block);
880 void _win32_abort(void)
882 pPerl->PL_piProc->Abort();
885 int _win32_pipe(int *phandles, unsigned int psize, int textmode)
887 return pPerl->PL_piProc->Pipe(phandles);
890 FILE* _win32_popen(const char *command, const char *mode)
892 return (FILE*)pPerl->PL_piProc->Popen(command, mode);
895 int _win32_pclose(FILE *pf)
897 return pPerl->PL_piProc->Pclose((PerlIO*)pf);
900 unsigned _win32_sleep(unsigned int t)
902 return pPerl->PL_piProc->Sleep(t);
905 int _win32_spawnvp(int mode, const char *cmdname, const char *const *argv)
907 return pPerl->PL_piProc->Spawnvp(mode, cmdname, argv);
910 int _win32_mkdir(const char *dir, int mode)
912 return pPerl->PL_piDir->Makedir(dir, mode, ErrorNo());
915 int _win32_rmdir(const char *dir)
917 return pPerl->PL_piDir->Rmdir(dir, ErrorNo());
920 int _win32_chdir(const char *dir)
922 return pPerl->PL_piDir->Chdir(dir, ErrorNo());
926 int _win32_fstat(int fd,struct stat *sbufptr)
928 return pPerl->PL_piLIO->FileStat(fd, sbufptr, ErrorNo());
931 int _win32_stat(const char *name,struct stat *sbufptr)
933 return pPerl->PL_piLIO->NameStat(name, sbufptr, ErrorNo());
936 int _win32_rename(const char *oname, const char *newname)
938 return pPerl->PL_piLIO->Rename(oname, newname, ErrorNo());
941 int _win32_setmode(int fd, int mode)
943 return pPerl->PL_piLIO->Setmode(fd, mode, ErrorNo());
946 long _win32_lseek(int fd, long offset, int origin)
948 return pPerl->PL_piLIO->Lseek(fd, offset, origin, ErrorNo());
951 long _win32_tell(int fd)
953 return pPerl->PL_piStdIO->Tell((PerlIO*)fd, ErrorNo());
956 int _win32_dup(int fd)
958 return pPerl->PL_piLIO->Dup(fd, ErrorNo());
961 int _win32_dup2(int h1, int h2)
963 return pPerl->PL_piLIO->Dup2(h1, h2, ErrorNo());
966 int _win32_open(const char *path, int oflag,...)
968 return pPerl->PL_piLIO->Open(path, oflag, ErrorNo());
971 int _win32_close(int fd)
973 return pPerl->PL_piLIO->Close(fd, ErrorNo());
976 int _win32_read(int fd, void *buf, unsigned int cnt)
978 return pPerl->PL_piLIO->Read(fd, buf, cnt, ErrorNo());
981 int _win32_write(int fd, const void *buf, unsigned int cnt)
983 return pPerl->PL_piLIO->Write(fd, buf, cnt, ErrorNo());
986 int _win32_times(struct tms *timebuf)
988 return pPerl->PL_piProc->Times(timebuf);
991 int _win32_ioctl(int i, unsigned int u, char *data)
993 return pPerl->PL_piLIO->IOCtl(i, u, data, ErrorNo());
996 int _win32_utime(const char *f, struct utimbuf *t)
998 return pPerl->PL_piLIO->Utime((char*)f, t, ErrorNo());
1001 int _win32_uname(struct utsname *name)
1003 return pPerl->PL_piENV->Uname(name, ErrorNo());
1006 char* _win32_getenv(const char *name)
1008 return pPerl->PL_piENV->Getenv(name, ErrorNo());
1011 int _win32_putenv(const char *name)
1013 return pPerl->PL_piENV->Putenv(name, ErrorNo());
1016 int _win32_open_osfhandle(long handle, int flags)
1018 return pPerl->PL_piStdIO->OpenOSfhandle(handle, flags);
1021 long _win32_get_osfhandle(int fd)
1023 return pPerl->PL_piStdIO->GetOSfhandle(fd);
1026 u_long _win32_htonl (u_long hostlong)
1028 return pPerl->PL_piSock->Htonl(hostlong);
1031 u_short _win32_htons (u_short hostshort)
1033 return pPerl->PL_piSock->Htons(hostshort);
1036 u_long _win32_ntohl (u_long netlong)
1038 return pPerl->PL_piSock->Ntohl(netlong);
1041 u_short _win32_ntohs (u_short netshort)
1043 return pPerl->PL_piSock->Ntohs(netshort);
1046 unsigned long _win32_inet_addr (const char * cp)
1048 return pPerl->PL_piSock->InetAddr(cp, ErrorNo());
1051 char * _win32_inet_ntoa (struct in_addr in)
1053 return pPerl->PL_piSock->InetNtoa(in, ErrorNo());
1056 SOCKET _win32_socket (int af, int type, int protocol)
1058 return pPerl->PL_piSock->Socket(af, type, protocol, ErrorNo());
1061 int _win32_bind (SOCKET s, const struct sockaddr *addr, int namelen)
1063 return pPerl->PL_piSock->Bind(s, addr, namelen, ErrorNo());
1066 int _win32_listen (SOCKET s, int backlog)
1068 return pPerl->PL_piSock->Listen(s, backlog, ErrorNo());
1071 SOCKET _win32_accept (SOCKET s, struct sockaddr *addr, int *addrlen)
1073 return pPerl->PL_piSock->Accept(s, addr, addrlen, ErrorNo());
1076 int _win32_connect (SOCKET s, const struct sockaddr *name, int namelen)
1078 return pPerl->PL_piSock->Connect(s, name, namelen, ErrorNo());
1081 int _win32_send (SOCKET s, const char * buf, int len, int flags)
1083 return pPerl->PL_piSock->Send(s, buf, len, flags, ErrorNo());
1086 int _win32_sendto (SOCKET s, const char * buf, int len, int flags,
1087 const struct sockaddr *to, int tolen)
1089 return pPerl->PL_piSock->Sendto(s, buf, len, flags, to, tolen, ErrorNo());
1092 int _win32_recv (SOCKET s, char * buf, int len, int flags)
1094 return pPerl->PL_piSock->Recv(s, buf, len, flags, ErrorNo());
1097 int _win32_recvfrom (SOCKET s, char * buf, int len, int flags,
1098 struct sockaddr *from, int * fromlen)
1100 return pPerl->PL_piSock->Recvfrom(s, buf, len, flags, from, fromlen, ErrorNo());
1103 int _win32_shutdown (SOCKET s, int how)
1105 return pPerl->PL_piSock->Shutdown(s, how, ErrorNo());
1108 int _win32_closesocket (SOCKET s)
1110 return pPerl->PL_piSock->Closesocket(s, ErrorNo());
1113 int _win32_ioctlsocket (SOCKET s, long cmd, u_long *argp)
1115 return pPerl->PL_piSock->Ioctlsocket(s, cmd, argp, ErrorNo());
1118 int _win32_setsockopt (SOCKET s, int level, int optname,
1119 const char * optval, int optlen)
1121 return pPerl->PL_piSock->Setsockopt(s, level, optname, optval, optlen, ErrorNo());
1124 int _win32_getsockopt (SOCKET s, int level, int optname, char * optval, int *optlen)
1126 return pPerl->PL_piSock->Getsockopt(s, level, optname, optval, optlen, ErrorNo());
1129 int _win32_getpeername (SOCKET s, struct sockaddr *name, int * namelen)
1131 return pPerl->PL_piSock->Getpeername(s, name, namelen, ErrorNo());
1134 int _win32_getsockname (SOCKET s, struct sockaddr *name, int * namelen)
1136 return pPerl->PL_piSock->Getsockname(s, name, namelen, ErrorNo());
1139 int _win32_gethostname (char * name, int namelen)
1141 return pPerl->PL_piSock->Gethostname(name, namelen, ErrorNo());
1144 struct hostent * _win32_gethostbyname(const char * name)
1146 return pPerl->PL_piSock->Gethostbyname(name, ErrorNo());
1149 struct hostent * _win32_gethostbyaddr(const char * addr, int len, int type)
1151 return pPerl->PL_piSock->Gethostbyaddr(addr, len, type, ErrorNo());
1154 struct protoent * _win32_getprotobyname(const char * name)
1156 return pPerl->PL_piSock->Getprotobyname(name, ErrorNo());
1159 struct protoent * _win32_getprotobynumber(int proto)
1161 return pPerl->PL_piSock->Getprotobynumber(proto, ErrorNo());
1164 struct servent * _win32_getservbyname(const char * name, const char * proto)
1166 return pPerl->PL_piSock->Getservbyname(name, proto, ErrorNo());
1169 struct servent * _win32_getservbyport(int port, const char * proto)
1171 return pPerl->PL_piSock->Getservbyport(port, proto, ErrorNo());
1174 int _win32_select (int nfds, Perl_fd_set *rfds, Perl_fd_set *wfds, Perl_fd_set *xfds,
1175 const struct timeval *timeout)
1177 return pPerl->PL_piSock->Select(nfds, (char*)rfds, (char*)wfds, (char*)xfds, timeout, ErrorNo());
1180 void _win32_endnetent(void)
1182 pPerl->PL_piSock->Endnetent(ErrorNo());
1185 void _win32_endhostent(void)
1187 pPerl->PL_piSock->Endhostent(ErrorNo());
1190 void _win32_endprotoent(void)
1192 pPerl->PL_piSock->Endprotoent(ErrorNo());
1195 void _win32_endservent(void)
1197 pPerl->PL_piSock->Endservent(ErrorNo());
1200 struct netent * _win32_getnetent(void)
1202 return pPerl->PL_piSock->Getnetent(ErrorNo());
1205 struct netent * _win32_getnetbyname(char *name)
1207 return pPerl->PL_piSock->Getnetbyname(name, ErrorNo());
1210 struct netent * _win32_getnetbyaddr(long net, int type)
1212 return pPerl->PL_piSock->Getnetbyaddr(net, type, ErrorNo());
1215 struct protoent *_win32_getprotoent(void)
1217 return pPerl->PL_piSock->Getprotoent(ErrorNo());
1220 struct servent *_win32_getservent(void)
1222 return pPerl->PL_piSock->Getservent(ErrorNo());
1225 void _win32_sethostent(int stayopen)
1227 pPerl->PL_piSock->Sethostent(stayopen, ErrorNo());
1230 void _win32_setnetent(int stayopen)
1232 pPerl->PL_piSock->Setnetent(stayopen, ErrorNo());
1235 void _win32_setprotoent(int stayopen)
1237 pPerl->PL_piSock->Setprotoent(stayopen, ErrorNo());
1240 void _win32_setservent(int stayopen)
1242 pPerl->PL_piSock->Setservent(stayopen, ErrorNo());
1248 print HDRFILE <<EOCODE;
1250 char ** _Perl_op_desc ();
1251 #define Perl_op_desc (_Perl_op_desc())
1254 char ** _Perl_op_name ();
1255 #define Perl_op_name (_Perl_op_name())
1257 #undef Perl_no_modify
1258 char * _Perl_no_modify ();
1259 #define Perl_no_modify (_Perl_no_modify())
1262 U32 * _Perl_opargs ();
1263 #define Perl_opargs (_Perl_opargs())
1272 #undef win32_fprintf
1274 #undef win32_vfprintf
1275 #undef win32_vprintf
1280 #undef win32_freopen
1287 #undef win32_clearerr
1291 #undef win32_fgetpos
1292 #undef win32_fsetpos
1294 #undef win32_tmpfile
1302 #undef win32_setmode
1316 #undef win32_setvbuf
1322 #undef win32_getchar
1323 #undef win32_putchar
1326 #undef win32_realloc
1339 #undef win32_inet_addr
1340 #undef win32_inet_ntoa
1346 #undef win32_connect
1350 #undef win32_recvfrom
1351 #undef win32_shutdown
1352 #undef win32_closesocket
1353 #undef win32_ioctlsocket
1354 #undef win32_setsockopt
1355 #undef win32_getsockopt
1356 #undef win32_getpeername
1357 #undef win32_getsockname
1358 #undef win32_gethostname
1359 #undef win32_gethostbyname
1360 #undef win32_gethostbyaddr
1361 #undef win32_getprotobyname
1362 #undef win32_getprotobynumber
1363 #undef win32_getservbyname
1364 #undef win32_getservbyport
1366 #undef win32_endhostent
1367 #undef win32_endnetent
1368 #undef win32_endprotoent
1369 #undef win32_endservent
1370 #undef win32_getnetent
1371 #undef win32_getnetbyname
1372 #undef win32_getnetbyaddr
1373 #undef win32_getprotoent
1374 #undef win32_getservent
1375 #undef win32_sethostent
1376 #undef win32_setnetent
1377 #undef win32_setprotoent
1378 #undef win32_setservent
1380 #define win32_errno _win32_errno
1381 #define win32_stdin _win32_stdin
1382 #define win32_stdout _win32_stdout
1383 #define win32_stderr _win32_stderr
1384 #define win32_ferror _win32_ferror
1385 #define win32_feof _win32_feof
1386 #define win32_strerror _win32_strerror
1387 #define win32_perror _win32_perror
1388 #define win32_fprintf _win32_fprintf
1389 #define win32_printf _win32_printf
1390 #define win32_vfprintf _win32_vfprintf
1391 #define win32_vprintf _win32_vprintf
1392 #define win32_fread _win32_fread
1393 #define win32_fwrite _win32_fwrite
1394 #define win32_fopen _win32_fopen
1395 #define win32_fdopen _win32_fdopen
1396 #define win32_freopen _win32_freopen
1397 #define win32_fclose _win32_fclose
1398 #define win32_fputs _win32_fputs
1399 #define win32_fputc _win32_fputc
1400 #define win32_ungetc _win32_ungetc
1401 #define win32_getc _win32_getc
1402 #define win32_fileno _win32_fileno
1403 #define win32_clearerr _win32_clearerr
1404 #define win32_fflush _win32_fflush
1405 #define win32_ftell _win32_ftell
1406 #define win32_fseek _win32_fseek
1407 #define win32_fgetpos _win32_fgetpos
1408 #define win32_fsetpos _win32_fsetpos
1409 #define win32_rewind _win32_rewind
1410 #define win32_tmpfile _win32_tmpfile
1411 #define win32_abort _win32_abort
1412 #define win32_fstat _win32_fstat
1413 #define win32_stat _win32_stat
1414 #define win32_pipe _win32_pipe
1415 #define win32_popen _win32_popen
1416 #define win32_pclose _win32_pclose
1417 #define win32_rename _win32_rename
1418 #define win32_setmode _win32_setmode
1419 #define win32_lseek _win32_lseek
1420 #define win32_tell _win32_tell
1421 #define win32_dup _win32_dup
1422 #define win32_dup2 _win32_dup2
1423 #define win32_open _win32_open
1424 #define win32_close _win32_close
1425 #define win32_eof _win32_eof
1426 #define win32_read _win32_read
1427 #define win32_write _win32_write
1428 #define win32_mkdir _win32_mkdir
1429 #define win32_rmdir _win32_rmdir
1430 #define win32_chdir _win32_chdir
1431 #define win32_setbuf _win32_setbuf
1432 #define win32_setvbuf _win32_setvbuf
1433 #define win32_fgetc _win32_fgetc
1434 #define win32_fgets _win32_fgets
1435 #define win32_gets _win32_gets
1436 #define win32_putc _win32_putc
1437 #define win32_puts _win32_puts
1438 #define win32_getchar _win32_getchar
1439 #define win32_putchar _win32_putchar
1440 #define win32_malloc _win32_malloc
1441 #define win32_calloc _win32_calloc
1442 #define win32_realloc _win32_realloc
1443 #define win32_free _win32_free
1444 #define win32_sleep _win32_sleep
1445 #define win32_spawnvp _win32_spawnvp
1446 #define win32_times _win32_times
1447 #define win32_stat _win32_stat
1448 #define win32_ioctl _win32_ioctl
1449 #define win32_utime _win32_utime
1450 #define win32_getenv _win32_getenv
1451 #define win32_open_osfhandle _win32_open_osfhandle
1452 #define win32_get_osfhandle _win32_get_osfhandle
1454 #define win32_htonl _win32_htonl
1455 #define win32_htons _win32_htons
1456 #define win32_ntohl _win32_ntohl
1457 #define win32_ntohs _win32_ntohs
1458 #define win32_inet_addr _win32_inet_addr
1459 #define win32_inet_ntoa _win32_inet_ntoa
1461 #define win32_socket _win32_socket
1462 #define win32_bind _win32_bind
1463 #define win32_listen _win32_listen
1464 #define win32_accept _win32_accept
1465 #define win32_connect _win32_connect
1466 #define win32_send _win32_send
1467 #define win32_sendto _win32_sendto
1468 #define win32_recv _win32_recv
1469 #define win32_recvfrom _win32_recvfrom
1470 #define win32_shutdown _win32_shutdown
1471 #define win32_closesocket _win32_closesocket
1472 #define win32_ioctlsocket _win32_ioctlsocket
1473 #define win32_setsockopt _win32_setsockopt
1474 #define win32_getsockopt _win32_getsockopt
1475 #define win32_getpeername _win32_getpeername
1476 #define win32_getsockname _win32_getsockname
1477 #define win32_gethostname _win32_gethostname
1478 #define win32_gethostbyname _win32_gethostbyname
1479 #define win32_gethostbyaddr _win32_gethostbyaddr
1480 #define win32_getprotobyname _win32_getprotobyname
1481 #define win32_getprotobynumber _win32_getprotobynumber
1482 #define win32_getservbyname _win32_getservbyname
1483 #define win32_getservbyport _win32_getservbyport
1484 #define win32_select _win32_select
1485 #define win32_endhostent _win32_endhostent
1486 #define win32_endnetent _win32_endnetent
1487 #define win32_endprotoent _win32_endprotoent
1488 #define win32_endservent _win32_endservent
1489 #define win32_getnetent _win32_getnetent
1490 #define win32_getnetbyname _win32_getnetbyname
1491 #define win32_getnetbyaddr _win32_getnetbyaddr
1492 #define win32_getprotoent _win32_getprotoent
1493 #define win32_getservent _win32_getservent
1494 #define win32_sethostent _win32_sethostent
1495 #define win32_setnetent _win32_setnetent
1496 #define win32_setprotoent _win32_setprotoent
1497 #define win32_setservent _win32_setservent
1499 int * _win32_errno(void);
1500 FILE* _win32_stdin(void);
1501 FILE* _win32_stdout(void);
1502 FILE* _win32_stderr(void);
1503 int _win32_ferror(FILE *fp);
1504 int _win32_feof(FILE *fp);
1505 char* _win32_strerror(int e);
1506 void _win32_perror(const char *str);
1507 int _win32_fprintf(FILE *pf, const char *format, ...);
1508 int _win32_printf(const char *format, ...);
1509 int _win32_vfprintf(FILE *pf, const char *format, va_list arg);
1510 int _win32_vprintf(const char *format, va_list arg);
1511 size_t _win32_fread(void *buf, size_t size, size_t count, FILE *pf);
1512 size_t _win32_fwrite(const void *buf, size_t size, size_t count, FILE *pf);
1513 FILE* _win32_fopen(const char *path, const char *mode);
1514 FILE* _win32_fdopen(int fh, const char *mode);
1515 FILE* _win32_freopen(const char *path, const char *mode, FILE *pf);
1516 int _win32_fclose(FILE *pf);
1517 int _win32_fputs(const char *s,FILE *pf);
1518 int _win32_fputc(int c,FILE *pf);
1519 int _win32_ungetc(int c,FILE *pf);
1520 int _win32_getc(FILE *pf);
1521 int _win32_fileno(FILE *pf);
1522 void _win32_clearerr(FILE *pf);
1523 int _win32_fflush(FILE *pf);
1524 long _win32_ftell(FILE *pf);
1525 int _win32_fseek(FILE *pf,long offset,int origin);
1526 int _win32_fgetpos(FILE *pf,fpos_t *p);
1527 int _win32_fsetpos(FILE *pf,const fpos_t *p);
1528 void _win32_rewind(FILE *pf);
1529 FILE* _win32_tmpfile(void);
1530 void _win32_abort(void);
1531 int _win32_fstat(int fd,struct stat *sbufptr);
1532 int _win32_stat(const char *name,struct stat *sbufptr);
1533 int _win32_pipe( int *phandles, unsigned int psize, int textmode );
1534 FILE* _win32_popen( const char *command, const char *mode );
1535 int _win32_pclose( FILE *pf);
1536 int _win32_rename( const char *oldname, const char *newname);
1537 int _win32_setmode( int fd, int mode);
1538 long _win32_lseek( int fd, long offset, int origin);
1539 long _win32_tell( int fd);
1540 int _win32_dup( int fd);
1541 int _win32_dup2(int h1, int h2);
1542 int _win32_open(const char *path, int oflag,...);
1543 int _win32_close(int fd);
1544 int _win32_eof(int fd);
1545 int _win32_read(int fd, void *buf, unsigned int cnt);
1546 int _win32_write(int fd, const void *buf, unsigned int cnt);
1547 int _win32_mkdir(const char *dir, int mode);
1548 int _win32_rmdir(const char *dir);
1549 int _win32_chdir(const char *dir);
1550 void _win32_setbuf(FILE *pf, char *buf);
1551 int _win32_setvbuf(FILE *pf, char *buf, int type, size_t size);
1552 char* _win32_fgets(char *s, int n, FILE *pf);
1553 char* _win32_gets(char *s);
1554 int _win32_fgetc(FILE *pf);
1555 int _win32_putc(int c, FILE *pf);
1556 int _win32_puts(const char *s);
1557 int _win32_getchar(void);
1558 int _win32_putchar(int c);
1559 void* _win32_malloc(size_t size);
1560 void* _win32_calloc(size_t numitems, size_t size);
1561 void* _win32_realloc(void *block, size_t size);
1562 void _win32_free(void *block);
1563 unsigned _win32_sleep(unsigned int);
1564 int _win32_spawnvp(int mode, const char *cmdname, const char *const *argv);
1565 int _win32_times(struct tms *timebuf);
1566 int _win32_stat(const char *path, struct stat *buf);
1567 int _win32_ioctl(int i, unsigned int u, char *data);
1568 int _win32_utime(const char *f, struct utimbuf *t);
1569 char* _win32_getenv(const char *name);
1570 int _win32_open_osfhandle(long handle, int flags);
1571 long _win32_get_osfhandle(int fd);
1573 u_long _win32_htonl (u_long hostlong);
1574 u_short _win32_htons (u_short hostshort);
1575 u_long _win32_ntohl (u_long netlong);
1576 u_short _win32_ntohs (u_short netshort);
1577 unsigned long _win32_inet_addr (const char * cp);
1578 char * _win32_inet_ntoa (struct in_addr in);
1580 SOCKET _win32_socket (int af, int type, int protocol);
1581 int _win32_bind (SOCKET s, const struct sockaddr *addr, int namelen);
1582 int _win32_listen (SOCKET s, int backlog);
1583 SOCKET _win32_accept (SOCKET s, struct sockaddr *addr, int *addrlen);
1584 int _win32_connect (SOCKET s, const struct sockaddr *name, int namelen);
1585 int _win32_send (SOCKET s, const char * buf, int len, int flags);
1586 int _win32_sendto (SOCKET s, const char * buf, int len, int flags,
1587 const struct sockaddr *to, int tolen);
1588 int _win32_recv (SOCKET s, char * buf, int len, int flags);
1589 int _win32_recvfrom (SOCKET s, char * buf, int len, int flags,
1590 struct sockaddr *from, int * fromlen);
1591 int _win32_shutdown (SOCKET s, int how);
1592 int _win32_closesocket (SOCKET s);
1593 int _win32_ioctlsocket (SOCKET s, long cmd, u_long *argp);
1594 int _win32_setsockopt (SOCKET s, int level, int optname,
1595 const char * optval, int optlen);
1596 int _win32_getsockopt (SOCKET s, int level, int optname, char * optval, int *optlen);
1597 int _win32_getpeername (SOCKET s, struct sockaddr *name, int * namelen);
1598 int _win32_getsockname (SOCKET s, struct sockaddr *name, int * namelen);
1599 int _win32_gethostname (char * name, int namelen);
1600 struct hostent * _win32_gethostbyname(const char * name);
1601 struct hostent * _win32_gethostbyaddr(const char * addr, int len, int type);
1602 struct protoent * _win32_getprotobyname(const char * name);
1603 struct protoent * _win32_getprotobynumber(int proto);
1604 struct servent * _win32_getservbyname(const char * name, const char * proto);
1605 struct servent * _win32_getservbyport(int port, const char * proto);
1606 int _win32_select (int nfds, Perl_fd_set *rfds, Perl_fd_set *wfds, Perl_fd_set *xfds,
1607 const struct timeval *timeout);
1608 void _win32_endnetent(void);
1609 void _win32_endhostent(void);
1610 void _win32_endprotoent(void);
1611 void _win32_endservent(void);
1612 struct netent * _win32_getnetent(void);
1613 struct netent * _win32_getnetbyname(char *name);
1614 struct netent * _win32_getnetbyaddr(long net, int type);
1615 struct protoent *_win32_getprotoent(void);
1616 struct servent *_win32_getservent(void);
1617 void _win32_sethostent(int stayopen);
1618 void _win32_setnetent(int stayopen);
1619 void _win32_setprotoent(int stayopen);
1620 void _win32_setservent(int stayopen);
1622 #pragma warning(once : 4113)