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*$/) {
33 readsyms %embed, @embedsyms;
37 foreach my $symbol (@$list) {
38 $skip_list{$symbol} = 1;
66 Perl_new_struct_thread
84 Perl_newSVpvf_nocontext
85 Perl_sv_catpvf_nocontext
86 Perl_sv_catpvf_mg_nocontext
87 Perl_sv_setpvf_nocontext
88 Perl_sv_setpvf_mg_nocontext
107 if (!open(INFILE, "<$infile")) {
108 print "open of $infile failed: $!\n";
112 if (!open(OUTFILE, ">perlCAPI.cpp")) {
113 print "open of perlCAPI.cpp failed: $!\n";
117 print OUTFILE <<ENDCODE;
122 /*#define DESTRUCTORFUNC (void (*)(void*))*/
124 #undef Perl_sv_2mortal
128 #undef Perl_sv_vcatpvfn
129 #undef Perl_sv_vsetpvfn
133 print OUTFILE "#ifdef SetCPerlObj_defined\n" unless ($separateObj == 0);
135 print OUTFILE <<ENDCODE;
136 extern "C" void SetCPerlObj(CPerlObj* pP)
143 print OUTFILE "#endif\n" unless ($separateObj == 0);
148 last unless defined ($_ = <INFILE>);
154 $_ =~ s/^VIRTUAL\s*//;
155 $_ =~ s/\s*__attribute__.*$/;/;
156 if ( /^(.+)\t(\w+)\((.*)\);/ ) {
163 next if (defined $skip_list{$name});
164 next if $name =~ /^S_/;
165 next if exists $done{$name};
168 if($args eq "ARGSproto" or $args eq "pTHX") {
171 $args =~ s/^pTHX_ //;
173 $return = ($type eq "void" or $type eq "Free_t") ? "\t" : "\treturn";
175 if(defined $embed{$name}) {
176 $funcName = $embed{$name};
181 @args = split(',', $args);
182 if ($args[$#args] =~ /\s*\.\.\.\s*/) {
183 if ($name =~ /^Perl_(croak|deb|die|warn|form|warner)$/) {
184 print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
185 for (@args) { $_ = $1 if /(\w+)\W*$/; }
186 $arg = $args[$#args-1];
188 $start = join(', ',@args[0 .. ($#args - 2)]) if @args > 2;
189 $start .= ', ' if $start;
190 print OUTFILE <<ENDCODE;
193 extern "C" $type $funcName ($args)
197 va_start(args, $arg);
198 pmsg = pPerl->Perl_sv_2mortal(pPerl->Perl_newSVsv(pPerl->Perl_mess($arg, &args)));
199 $return pPerl->$name($start SvPV_nolen(pmsg));
203 print OUTFILE "#endif\n" unless ($separateObj == 0);
205 elsif($name =~ /^Perl_newSVpvf/) {
206 print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
207 $args[0] =~ /(\w+)\W*$/;
209 print OUTFILE <<ENDCODE;
212 extern "C" $type $funcName ($args)
216 va_start(args, $arg);
217 sv = pPerl->Perl_newSV(0);
218 pPerl->Perl_sv_vcatpvfn(sv, $arg, strlen($arg), &args, NULL, 0, NULL);
223 print OUTFILE "#endif\n" unless ($separateObj == 0);
225 elsif($name =~ /^Perl_sv_catpvf/) {
226 print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
227 $args[0] =~ /(\w+)\W*$/;
229 $args[1] =~ /(\w+)\W*$/;
231 print OUTFILE <<ENDCODE;
234 extern "C" $type $funcName ($args)
237 va_start(args, $arg1);
238 pPerl->Perl_sv_vcatpvfn($arg0, $arg1, strlen($arg1), &args, NULL, 0, NULL);
242 print OUTFILE "#endif\n" unless ($separateObj == 0);
244 elsif($name =~ /^Perl_sv_catpvf_mg/) {
245 print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
246 $args[0] =~ /(\w+)\W*$/;
248 $args[1] =~ /(\w+)\W*$/;
250 print OUTFILE <<ENDCODE;
254 #define mg_set pPerl->Perl_mg_set
256 extern "C" $type $funcName ($args)
259 va_start(args, $arg1);
260 pPerl->Perl_sv_vcatpvfn($arg0, $arg1, strlen($arg1), &args, NULL, 0, NULL);
265 print OUTFILE "#endif\n" unless ($separateObj == 0);
267 elsif($name =~ /^Perl_sv_setpvf/) {
268 print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
269 $args[0] =~ /(\w+)\W*$/;
271 $args[1] =~ /(\w+)\W*$/;
273 print OUTFILE <<ENDCODE;
276 extern "C" $type $funcName ($args)
279 va_start(args, $arg1);
280 pPerl->Perl_sv_vsetpvfn($arg0, $arg1, strlen($arg1), &args, NULL, 0, NULL);
284 print OUTFILE "#endif\n" unless ($separateObj == 0);
286 elsif($name =~ /^Perl_sv_setpvf_mg/) {
287 print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
288 $args[0] =~ /(\w+)\W*$/;
290 $args[1] =~ /(\w+)\W*$/;
292 print OUTFILE <<ENDCODE;
296 #define mg_set pPerl->Perl_mg_set
298 extern "C" $type $funcName ($args)
301 va_start(args, $arg1);
302 pPerl->Perl_sv_vsetpvfn($arg0, $arg1, strlen($arg1), &args, NULL, 0, NULL);
307 print OUTFILE "#endif\n" unless ($separateObj == 0);
309 elsif($name eq "fprintf") {
310 print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
311 $args[0] =~ /(\w+)\W*$/;
313 $args[1] =~ /(\w+)\W*$/;
315 print OUTFILE <<ENDCODE;
318 extern "C" $type $name ($args)
322 va_start(args, $arg1);
323 nRet = PerlIO_vprintf($arg0, $arg1, args);
328 print OUTFILE "#endif\n" unless ($separateObj == 0);
330 print "Warning: can't handle varargs function '$name'\n";
336 if ($name eq "Perl_newXS") {
340 print OUTFILE "\n#ifdef $name" . "defined" unless ($separateObj == 0);
342 # handle specical case for save_destructor
343 if ($name eq "Perl_save_destructor") {
346 # handle specical case for sighandler
347 if ($name eq "Perl_sighandler") {
350 # handle special case for sv_grow
351 if ($name eq "Perl_sv_grow" and $args eq "SV* sv, unsigned long newlen") {
354 # handle special case for newSV
355 if ($name eq "Perl_newSV" and $args eq "I32 x, STRLEN len") {
358 # handle special case for perl_parse
359 if ($name eq "perl_parse") {
360 print OUTFILE <<ENDCODE;
363 extern "C" $type $name ($args)
365 return pPerl->perl_parse(xsinit, argc, argv, env);
368 print OUTFILE "#endif\n" unless ($separateObj == 0);
371 # handle special case for perl_atexit
372 if ($name eq "Perl_call_atexit") {
373 print OUTFILE <<ENDCODE;
376 extern "C" $type $name ($args)
378 pPerl->perl_call_atexit(fn, ptr);
381 print OUTFILE "#endif\n" unless ($separateObj == 0);
386 if($name eq "Perl_byterun" and $args eq "struct bytestream bs") {
391 if ($args eq "void") {
392 print OUTFILE <<ENDCODE;
395 extern "C" $type $funcName ()
397 $return pPerl->$funcName();
401 print OUTFILE "#endif\n" unless ($separateObj == 0);
405 # foo(char *s, const int bar);
406 print OUTFILE <<ENDCODE;
409 extern "C" $type $funcName ($args)
412 print OUTFILE "$return pPerl->$funcName";
414 foreach $arg (@args) {
415 if ($arg =~ /(\w+)\W*$/) {
417 print OUTFILE ", $1";
425 print OUTFILE ");\n}\n";
426 print OUTFILE "#endif\n" unless ($separateObj == 0);
429 print "failed to match $_";
540 my ($syms, $file, $pre) = @_;
543 open(FILE, "< $file")
544 or die "$0: Can't open $file: $!\n";
546 s/[ \t]*#.*//; # Delete comments.
547 if (/PERLVARA?I?C?\($pre(\w+),\s*([^,)]+)/) {
558 readvars %intrp, '..\intrpvar.h','I';
559 readvars %thread, '..\thrdvar.h','T';
560 readvars %globvar, '..\perlvars.h','G';
562 open(HDRFILE, ">$hdrfile") or die "$0: Can't open $hdrfile: $!\n";
563 print HDRFILE <<ENDCODE;
564 void SetCPerlObj(void* pP);
565 void boot_CAPI_handler(CV *cv, void (*subaddr)(CV *c), void *pP);
566 CV* Perl_newXS(char* name, void (*subaddr)(CV* cv), char* filename);
574 return if (defined $skip_list{$name});
575 return if ($type eq 'struct perl_thread *');
577 print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
578 print OUTFILE <<ENDCODE;
580 extern "C" $type * _PL_$name ()
582 return (($type *)&pPerl->PL_$name);
587 print OUTFILE "#endif\n" unless ($separateObj == 0);
589 print HDRFILE <<ENDCODE;
592 $type * _PL_$name ();
593 #define PL_$name (*_PL_$name())
599 foreach $key (keys %intrp) {
600 DoVariable ($key, $intrp{$key});
603 foreach $key (keys %thread) {
604 DoVariable ($key, $thread{$key});
607 foreach $key (keys %globvar) {
608 DoVariable ($key, $globvar{$key});
611 print OUTFILE <<EOCODE;
617 char ** _Perl_op_desc(void)
619 return pPerl->Perl_get_op_descs();
622 char ** _Perl_op_name(void)
624 return pPerl->Perl_get_op_names();
627 char * _Perl_no_modify(void)
629 return pPerl->Perl_get_no_modify();
632 U32 * _Perl_opargs(void)
634 return pPerl->Perl_get_opargs();
637 void boot_CAPI_handler(CV *cv, void (*subaddr)(CV *c), void *pP)
640 XSLock localLock((CPerlObj*)pP);
645 void xs_handler(CPerlObj* p, CV* cv)
649 MAGIC* m = pPerl->Perl_mg_find((SV*)cv, '~');
655 func = (void(*)(CV*))SvIVX(sv);
659 func = (void(*)(CV*))pPerl->Perl_sv_2iv(sv);
666 CV* Perl_newXS(char* name, void (*subaddr)(CV* cv), char* filename)
668 CV* cv = pPerl->Perl_newXS(name, xs_handler, filename);
669 pPerl->Perl_sv_magic((SV*)cv, pPerl->Perl_sv_2mortal(pPerl->Perl_newSViv((IV)subaddr)), '~', "CAPI", 4);
674 void Perl_deb(const char pat, ...)
686 int * _win32_errno(void)
688 return &pPerl->ErrorNo();
691 FILE* _win32_stdin(void)
693 return (FILE*)pPerl->PL_StdIO->Stdin();
696 FILE* _win32_stdout(void)
698 return (FILE*)pPerl->PL_StdIO->Stdout();
701 FILE* _win32_stderr(void)
703 return (FILE*)pPerl->PL_StdIO->Stderr();
706 int _win32_ferror(FILE *fp)
708 return pPerl->PL_StdIO->Error((PerlIO*)fp, ErrorNo());
711 int _win32_feof(FILE *fp)
713 return pPerl->PL_StdIO->Eof((PerlIO*)fp, ErrorNo());
716 char* _win32_strerror(int e)
721 void _win32_perror(const char *str)
726 int _win32_vfprintf(FILE *pf, const char *format, va_list arg)
728 return pPerl->PL_StdIO->Vprintf((PerlIO*)pf, ErrorNo(), format, arg);
731 int _win32_vprintf(const char *format, va_list arg)
733 return pPerl->PL_StdIO->Vprintf(pPerl->PL_StdIO->Stdout(), ErrorNo(), format, arg);
736 int _win32_fprintf(FILE *pf, const char *format, ...)
740 va_start(args, format);
741 ret = _win32_vfprintf(pf, format, args);
746 int _win32_printf(const char *format, ...)
750 va_start(args, format);
751 ret = _win32_vprintf(format, args);
756 size_t _win32_fread(void *buf, size_t size, size_t count, FILE *pf)
758 return pPerl->PL_StdIO->Read((PerlIO*)pf, buf, (size*count), ErrorNo());
761 size_t _win32_fwrite(const void *buf, size_t size, size_t count, FILE *pf)
763 return pPerl->PL_StdIO->Write((PerlIO*)pf, buf, (size*count), ErrorNo());
766 FILE* _win32_fopen(const char *path, const char *mode)
768 return (FILE*)pPerl->PL_StdIO->Open(path, mode, ErrorNo());
771 FILE* _win32_fdopen(int fh, const char *mode)
773 return (FILE*)pPerl->PL_StdIO->Fdopen(fh, mode, ErrorNo());
776 FILE* _win32_freopen(const char *path, const char *mode, FILE *pf)
778 return (FILE*)pPerl->PL_StdIO->Reopen(path, mode, (PerlIO*)pf, ErrorNo());
781 int _win32_fclose(FILE *pf)
783 return pPerl->PL_StdIO->Close((PerlIO*)pf, ErrorNo());
786 int _win32_fputs(const char *s,FILE *pf)
788 return pPerl->PL_StdIO->Puts((PerlIO*)pf, s, ErrorNo());
791 int _win32_fputc(int c,FILE *pf)
793 return pPerl->PL_StdIO->Putc((PerlIO*)pf, c, ErrorNo());
796 int _win32_ungetc(int c,FILE *pf)
798 return pPerl->PL_StdIO->Ungetc((PerlIO*)pf, c, ErrorNo());
801 int _win32_getc(FILE *pf)
803 return pPerl->PL_StdIO->Getc((PerlIO*)pf, ErrorNo());
806 int _win32_fileno(FILE *pf)
808 return pPerl->PL_StdIO->Fileno((PerlIO*)pf, ErrorNo());
811 void _win32_clearerr(FILE *pf)
813 pPerl->PL_StdIO->Clearerr((PerlIO*)pf, ErrorNo());
816 int _win32_fflush(FILE *pf)
818 return pPerl->PL_StdIO->Flush((PerlIO*)pf, ErrorNo());
821 long _win32_ftell(FILE *pf)
823 return pPerl->PL_StdIO->Tell((PerlIO*)pf, ErrorNo());
826 int _win32_fseek(FILE *pf,long offset,int origin)
828 return pPerl->PL_StdIO->Seek((PerlIO*)pf, offset, origin, ErrorNo());
831 int _win32_fgetpos(FILE *pf,fpos_t *p)
833 return pPerl->PL_StdIO->Getpos((PerlIO*)pf, p, ErrorNo());
836 int _win32_fsetpos(FILE *pf,const fpos_t *p)
838 return pPerl->PL_StdIO->Setpos((PerlIO*)pf, p, ErrorNo());
841 void _win32_rewind(FILE *pf)
843 pPerl->PL_StdIO->Rewind((PerlIO*)pf, ErrorNo());
846 FILE* _win32_tmpfile(void)
848 return (FILE*)pPerl->PL_StdIO->Tmpfile(ErrorNo());
851 void _win32_setbuf(FILE *pf, char *buf)
853 pPerl->PL_StdIO->SetBuf((PerlIO*)pf, buf, ErrorNo());
856 int _win32_setvbuf(FILE *pf, char *buf, int type, size_t size)
858 return pPerl->PL_StdIO->SetVBuf((PerlIO*)pf, buf, type, size, ErrorNo());
861 char* _win32_fgets(char *s, int n, FILE *pf)
863 return pPerl->PL_StdIO->Gets((PerlIO*)pf, s, n, ErrorNo());
866 char* _win32_gets(char *s)
868 return _win32_fgets(s, 80, (FILE*)pPerl->PL_StdIO->Stdin());
871 int _win32_fgetc(FILE *pf)
873 return pPerl->PL_StdIO->Getc((PerlIO*)pf, ErrorNo());
876 int _win32_putc(int c, FILE *pf)
878 return pPerl->PL_StdIO->Putc((PerlIO*)pf, c, ErrorNo());
881 int _win32_puts(const char *s)
883 return pPerl->PL_StdIO->Puts(pPerl->PL_StdIO->Stdout(), s, ErrorNo());
886 int _win32_getchar(void)
888 return pPerl->PL_StdIO->Getc(pPerl->PL_StdIO->Stdin(), ErrorNo());
891 int _win32_putchar(int c)
893 return pPerl->PL_StdIO->Putc(pPerl->PL_StdIO->Stdout(), c, ErrorNo());
896 void* _win32_malloc(size_t size)
898 return pPerl->PL_Mem->Malloc(size);
901 void* _win32_calloc(size_t numitems, size_t size)
903 return pPerl->PL_Mem->Malloc(numitems*size);
906 void* _win32_realloc(void *block, size_t size)
908 return pPerl->PL_Mem->Realloc(block, size);
911 void _win32_free(void *block)
913 pPerl->PL_Mem->Free(block);
916 void _win32_abort(void)
918 pPerl->PL_Proc->Abort();
921 int _win32_pipe(int *phandles, unsigned int psize, int textmode)
923 return pPerl->PL_Proc->Pipe(phandles);
926 FILE* _win32_popen(const char *command, const char *mode)
928 return (FILE*)pPerl->PL_Proc->Popen(command, mode);
931 int _win32_pclose(FILE *pf)
933 return pPerl->PL_Proc->Pclose((PerlIO*)pf);
936 unsigned _win32_sleep(unsigned int t)
938 return pPerl->PL_Proc->Sleep(t);
941 int _win32_spawnvp(int mode, const char *cmdname, const char *const *argv)
943 return pPerl->PL_Proc->Spawnvp(mode, cmdname, argv);
946 int _win32_mkdir(const char *dir, int mode)
948 return pPerl->PL_Dir->Makedir(dir, mode, ErrorNo());
951 int _win32_rmdir(const char *dir)
953 return pPerl->PL_Dir->Rmdir(dir, ErrorNo());
956 int _win32_chdir(const char *dir)
958 return pPerl->PL_Dir->Chdir(dir, ErrorNo());
962 int _win32_fstat(int fd,struct stat *sbufptr)
964 return pPerl->PL_LIO->FileStat(fd, sbufptr, ErrorNo());
967 int _win32_stat(const char *name,struct stat *sbufptr)
969 return pPerl->PL_LIO->NameStat(name, sbufptr, ErrorNo());
972 int _win32_rename(const char *oname, const char *newname)
974 return pPerl->PL_LIO->Rename(oname, newname, ErrorNo());
977 int _win32_setmode(int fd, int mode)
979 return pPerl->PL_LIO->Setmode(fd, mode, ErrorNo());
982 long _win32_lseek(int fd, long offset, int origin)
984 return pPerl->PL_LIO->Lseek(fd, offset, origin, ErrorNo());
987 long _win32_tell(int fd)
989 return pPerl->PL_StdIO->Tell((PerlIO*)fd, ErrorNo());
992 int _win32_dup(int fd)
994 return pPerl->PL_LIO->Dup(fd, ErrorNo());
997 int _win32_dup2(int h1, int h2)
999 return pPerl->PL_LIO->Dup2(h1, h2, ErrorNo());
1002 int _win32_open(const char *path, int oflag,...)
1004 return pPerl->PL_LIO->Open(path, oflag, ErrorNo());
1007 int _win32_close(int fd)
1009 return pPerl->PL_LIO->Close(fd, ErrorNo());
1012 int _win32_read(int fd, void *buf, unsigned int cnt)
1014 return pPerl->PL_LIO->Read(fd, buf, cnt, ErrorNo());
1017 int _win32_write(int fd, const void *buf, unsigned int cnt)
1019 return pPerl->PL_LIO->Write(fd, buf, cnt, ErrorNo());
1022 int _win32_times(struct tms *timebuf)
1024 return pPerl->PL_Proc->Times(timebuf);
1027 int _win32_ioctl(int i, unsigned int u, char *data)
1029 return pPerl->PL_LIO->IOCtl(i, u, data, ErrorNo());
1032 int _win32_utime(const char *f, struct utimbuf *t)
1034 return pPerl->PL_LIO->Utime((char*)f, t, ErrorNo());
1037 int _win32_uname(struct utsname *name)
1039 return pPerl->PL_Env->Uname(name, ErrorNo());
1042 unsigned long _win32_os_id(void)
1044 return pPerl->PL_Env->OsID();
1047 char* _win32_getenv(const char *name)
1049 return pPerl->PL_Env->Getenv(name, ErrorNo());
1052 int _win32_putenv(const char *name)
1054 return pPerl->PL_Env->Putenv(name, ErrorNo());
1057 int _win32_open_osfhandle(long handle, int flags)
1059 return pPerl->PL_StdIO->OpenOSfhandle(handle, flags);
1062 long _win32_get_osfhandle(int fd)
1064 return pPerl->PL_StdIO->GetOSfhandle(fd);
1067 u_long _win32_htonl (u_long hostlong)
1069 return pPerl->PL_Sock->Htonl(hostlong);
1072 u_short _win32_htons (u_short hostshort)
1074 return pPerl->PL_Sock->Htons(hostshort);
1077 u_long _win32_ntohl (u_long netlong)
1079 return pPerl->PL_Sock->Ntohl(netlong);
1082 u_short _win32_ntohs (u_short netshort)
1084 return pPerl->PL_Sock->Ntohs(netshort);
1087 unsigned long _win32_inet_addr (const char * cp)
1089 return pPerl->PL_Sock->InetAddr(cp, ErrorNo());
1092 char * _win32_inet_ntoa (struct in_addr in)
1094 return pPerl->PL_Sock->InetNtoa(in, ErrorNo());
1097 SOCKET _win32_socket (int af, int type, int protocol)
1099 return pPerl->PL_Sock->Socket(af, type, protocol, ErrorNo());
1102 int _win32_bind (SOCKET s, const struct sockaddr *addr, int namelen)
1104 return pPerl->PL_Sock->Bind(s, addr, namelen, ErrorNo());
1107 int _win32_listen (SOCKET s, int backlog)
1109 return pPerl->PL_Sock->Listen(s, backlog, ErrorNo());
1112 SOCKET _win32_accept (SOCKET s, struct sockaddr *addr, int *addrlen)
1114 return pPerl->PL_Sock->Accept(s, addr, addrlen, ErrorNo());
1117 int _win32_connect (SOCKET s, const struct sockaddr *name, int namelen)
1119 return pPerl->PL_Sock->Connect(s, name, namelen, ErrorNo());
1122 int _win32_send (SOCKET s, const char * buf, int len, int flags)
1124 return pPerl->PL_Sock->Send(s, buf, len, flags, ErrorNo());
1127 int _win32_sendto (SOCKET s, const char * buf, int len, int flags,
1128 const struct sockaddr *to, int tolen)
1130 return pPerl->PL_Sock->Sendto(s, buf, len, flags, to, tolen, ErrorNo());
1133 int _win32_recv (SOCKET s, char * buf, int len, int flags)
1135 return pPerl->PL_Sock->Recv(s, buf, len, flags, ErrorNo());
1138 int _win32_recvfrom (SOCKET s, char * buf, int len, int flags,
1139 struct sockaddr *from, int * fromlen)
1141 return pPerl->PL_Sock->Recvfrom(s, buf, len, flags, from, fromlen, ErrorNo());
1144 int _win32_shutdown (SOCKET s, int how)
1146 return pPerl->PL_Sock->Shutdown(s, how, ErrorNo());
1149 int _win32_closesocket (SOCKET s)
1151 return pPerl->PL_Sock->Closesocket(s, ErrorNo());
1154 int _win32_ioctlsocket (SOCKET s, long cmd, u_long *argp)
1156 return pPerl->PL_Sock->Ioctlsocket(s, cmd, argp, ErrorNo());
1159 int _win32_setsockopt (SOCKET s, int level, int optname,
1160 const char * optval, int optlen)
1162 return pPerl->PL_Sock->Setsockopt(s, level, optname, optval, optlen, ErrorNo());
1165 int _win32_getsockopt (SOCKET s, int level, int optname, char * optval, int *optlen)
1167 return pPerl->PL_Sock->Getsockopt(s, level, optname, optval, optlen, ErrorNo());
1170 int _win32_getpeername (SOCKET s, struct sockaddr *name, int * namelen)
1172 return pPerl->PL_Sock->Getpeername(s, name, namelen, ErrorNo());
1175 int _win32_getsockname (SOCKET s, struct sockaddr *name, int * namelen)
1177 return pPerl->PL_Sock->Getsockname(s, name, namelen, ErrorNo());
1180 int _win32_gethostname (char * name, int namelen)
1182 return pPerl->PL_Sock->Gethostname(name, namelen, ErrorNo());
1185 struct hostent * _win32_gethostbyname(const char * name)
1187 return pPerl->PL_Sock->Gethostbyname(name, ErrorNo());
1190 struct hostent * _win32_gethostbyaddr(const char * addr, int len, int type)
1192 return pPerl->PL_Sock->Gethostbyaddr(addr, len, type, ErrorNo());
1195 struct protoent * _win32_getprotobyname(const char * name)
1197 return pPerl->PL_Sock->Getprotobyname(name, ErrorNo());
1200 struct protoent * _win32_getprotobynumber(int proto)
1202 return pPerl->PL_Sock->Getprotobynumber(proto, ErrorNo());
1205 struct servent * _win32_getservbyname(const char * name, const char * proto)
1207 return pPerl->PL_Sock->Getservbyname(name, proto, ErrorNo());
1210 struct servent * _win32_getservbyport(int port, const char * proto)
1212 return pPerl->PL_Sock->Getservbyport(port, proto, ErrorNo());
1215 int _win32_select (int nfds, Perl_fd_set *rfds, Perl_fd_set *wfds, Perl_fd_set *xfds,
1216 const struct timeval *timeout)
1218 return pPerl->PL_Sock->Select(nfds, (char*)rfds, (char*)wfds, (char*)xfds, timeout, ErrorNo());
1221 void _win32_endnetent(void)
1223 pPerl->PL_Sock->Endnetent(ErrorNo());
1226 void _win32_endhostent(void)
1228 pPerl->PL_Sock->Endhostent(ErrorNo());
1231 void _win32_endprotoent(void)
1233 pPerl->PL_Sock->Endprotoent(ErrorNo());
1236 void _win32_endservent(void)
1238 pPerl->PL_Sock->Endservent(ErrorNo());
1241 struct netent * _win32_getnetent(void)
1243 return pPerl->PL_Sock->Getnetent(ErrorNo());
1246 struct netent * _win32_getnetbyname(char *name)
1248 return pPerl->PL_Sock->Getnetbyname(name, ErrorNo());
1251 struct netent * _win32_getnetbyaddr(long net, int type)
1253 return pPerl->PL_Sock->Getnetbyaddr(net, type, ErrorNo());
1256 struct protoent *_win32_getprotoent(void)
1258 return pPerl->PL_Sock->Getprotoent(ErrorNo());
1261 struct servent *_win32_getservent(void)
1263 return pPerl->PL_Sock->Getservent(ErrorNo());
1266 void _win32_sethostent(int stayopen)
1268 pPerl->PL_Sock->Sethostent(stayopen, ErrorNo());
1271 void _win32_setnetent(int stayopen)
1273 pPerl->PL_Sock->Setnetent(stayopen, ErrorNo());
1276 void _win32_setprotoent(int stayopen)
1278 pPerl->PL_Sock->Setprotoent(stayopen, ErrorNo());
1281 void _win32_setservent(int stayopen)
1283 pPerl->PL_Sock->Setservent(stayopen, ErrorNo());
1289 print HDRFILE <<EOCODE;
1291 char ** _Perl_op_desc ();
1292 #define Perl_op_desc (_Perl_op_desc())
1295 char ** _Perl_op_name ();
1296 #define Perl_op_name (_Perl_op_name())
1298 #undef Perl_no_modify
1299 char * _Perl_no_modify ();
1300 #define Perl_no_modify (_Perl_no_modify())
1303 U32 * _Perl_opargs ();
1304 #define Perl_opargs (_Perl_opargs())
1313 #undef win32_fprintf
1315 #undef win32_vfprintf
1316 #undef win32_vprintf
1321 #undef win32_freopen
1328 #undef win32_clearerr
1332 #undef win32_fgetpos
1333 #undef win32_fsetpos
1335 #undef win32_tmpfile
1343 #undef win32_setmode
1357 #undef win32_setvbuf
1363 #undef win32_getchar
1364 #undef win32_putchar
1367 #undef win32_realloc
1382 #undef win32_inet_addr
1383 #undef win32_inet_ntoa
1389 #undef win32_connect
1393 #undef win32_recvfrom
1394 #undef win32_shutdown
1395 #undef win32_closesocket
1396 #undef win32_ioctlsocket
1397 #undef win32_setsockopt
1398 #undef win32_getsockopt
1399 #undef win32_getpeername
1400 #undef win32_getsockname
1401 #undef win32_gethostname
1402 #undef win32_gethostbyname
1403 #undef win32_gethostbyaddr
1404 #undef win32_getprotobyname
1405 #undef win32_getprotobynumber
1406 #undef win32_getservbyname
1407 #undef win32_getservbyport
1409 #undef win32_endhostent
1410 #undef win32_endnetent
1411 #undef win32_endprotoent
1412 #undef win32_endservent
1413 #undef win32_getnetent
1414 #undef win32_getnetbyname
1415 #undef win32_getnetbyaddr
1416 #undef win32_getprotoent
1417 #undef win32_getservent
1418 #undef win32_sethostent
1419 #undef win32_setnetent
1420 #undef win32_setprotoent
1421 #undef win32_setservent
1423 #define win32_errno _win32_errno
1424 #define win32_stdin _win32_stdin
1425 #define win32_stdout _win32_stdout
1426 #define win32_stderr _win32_stderr
1427 #define win32_ferror _win32_ferror
1428 #define win32_feof _win32_feof
1429 #define win32_strerror _win32_strerror
1430 #define win32_perror _win32_perror
1431 #define win32_fprintf _win32_fprintf
1432 #define win32_printf _win32_printf
1433 #define win32_vfprintf _win32_vfprintf
1434 #define win32_vprintf _win32_vprintf
1435 #define win32_fread _win32_fread
1436 #define win32_fwrite _win32_fwrite
1437 #define win32_fopen _win32_fopen
1438 #define win32_fdopen _win32_fdopen
1439 #define win32_freopen _win32_freopen
1440 #define win32_fclose _win32_fclose
1441 #define win32_fputs _win32_fputs
1442 #define win32_fputc _win32_fputc
1443 #define win32_ungetc _win32_ungetc
1444 #define win32_getc _win32_getc
1445 #define win32_fileno _win32_fileno
1446 #define win32_clearerr _win32_clearerr
1447 #define win32_fflush _win32_fflush
1448 #define win32_ftell _win32_ftell
1449 #define win32_fseek _win32_fseek
1450 #define win32_fgetpos _win32_fgetpos
1451 #define win32_fsetpos _win32_fsetpos
1452 #define win32_rewind _win32_rewind
1453 #define win32_tmpfile _win32_tmpfile
1454 #define win32_abort _win32_abort
1455 #define win32_fstat _win32_fstat
1456 #define win32_stat _win32_stat
1457 #define win32_pipe _win32_pipe
1458 #define win32_popen _win32_popen
1459 #define win32_pclose _win32_pclose
1460 #define win32_rename _win32_rename
1461 #define win32_setmode _win32_setmode
1462 #define win32_lseek _win32_lseek
1463 #define win32_tell _win32_tell
1464 #define win32_dup _win32_dup
1465 #define win32_dup2 _win32_dup2
1466 #define win32_open _win32_open
1467 #define win32_close _win32_close
1468 #define win32_eof _win32_eof
1469 #define win32_read _win32_read
1470 #define win32_write _win32_write
1471 #define win32_mkdir _win32_mkdir
1472 #define win32_rmdir _win32_rmdir
1473 #define win32_chdir _win32_chdir
1474 #define win32_setbuf _win32_setbuf
1475 #define win32_setvbuf _win32_setvbuf
1476 #define win32_fgetc _win32_fgetc
1477 #define win32_fgets _win32_fgets
1478 #define win32_gets _win32_gets
1479 #define win32_putc _win32_putc
1480 #define win32_puts _win32_puts
1481 #define win32_getchar _win32_getchar
1482 #define win32_putchar _win32_putchar
1483 #define win32_malloc _win32_malloc
1484 #define win32_calloc _win32_calloc
1485 #define win32_realloc _win32_realloc
1486 #define win32_free _win32_free
1487 #define win32_sleep _win32_sleep
1488 #define win32_spawnvp _win32_spawnvp
1489 #define win32_times _win32_times
1490 #define win32_stat _win32_stat
1491 #define win32_ioctl _win32_ioctl
1492 #define win32_utime _win32_utime
1493 #define win32_uname _win32_uname
1494 #define win32_os_id _win32_os_id
1495 #define win32_getenv _win32_getenv
1496 #define win32_open_osfhandle _win32_open_osfhandle
1497 #define win32_get_osfhandle _win32_get_osfhandle
1499 #define win32_htonl _win32_htonl
1500 #define win32_htons _win32_htons
1501 #define win32_ntohl _win32_ntohl
1502 #define win32_ntohs _win32_ntohs
1503 #define win32_inet_addr _win32_inet_addr
1504 #define win32_inet_ntoa _win32_inet_ntoa
1506 #define win32_socket _win32_socket
1507 #define win32_bind _win32_bind
1508 #define win32_listen _win32_listen
1509 #define win32_accept _win32_accept
1510 #define win32_connect _win32_connect
1511 #define win32_send _win32_send
1512 #define win32_sendto _win32_sendto
1513 #define win32_recv _win32_recv
1514 #define win32_recvfrom _win32_recvfrom
1515 #define win32_shutdown _win32_shutdown
1516 #define win32_closesocket _win32_closesocket
1517 #define win32_ioctlsocket _win32_ioctlsocket
1518 #define win32_setsockopt _win32_setsockopt
1519 #define win32_getsockopt _win32_getsockopt
1520 #define win32_getpeername _win32_getpeername
1521 #define win32_getsockname _win32_getsockname
1522 #define win32_gethostname _win32_gethostname
1523 #define win32_gethostbyname _win32_gethostbyname
1524 #define win32_gethostbyaddr _win32_gethostbyaddr
1525 #define win32_getprotobyname _win32_getprotobyname
1526 #define win32_getprotobynumber _win32_getprotobynumber
1527 #define win32_getservbyname _win32_getservbyname
1528 #define win32_getservbyport _win32_getservbyport
1529 #define win32_select _win32_select
1530 #define win32_endhostent _win32_endhostent
1531 #define win32_endnetent _win32_endnetent
1532 #define win32_endprotoent _win32_endprotoent
1533 #define win32_endservent _win32_endservent
1534 #define win32_getnetent _win32_getnetent
1535 #define win32_getnetbyname _win32_getnetbyname
1536 #define win32_getnetbyaddr _win32_getnetbyaddr
1537 #define win32_getprotoent _win32_getprotoent
1538 #define win32_getservent _win32_getservent
1539 #define win32_sethostent _win32_sethostent
1540 #define win32_setnetent _win32_setnetent
1541 #define win32_setprotoent _win32_setprotoent
1542 #define win32_setservent _win32_setservent
1544 int * _win32_errno(void);
1545 FILE* _win32_stdin(void);
1546 FILE* _win32_stdout(void);
1547 FILE* _win32_stderr(void);
1548 int _win32_ferror(FILE *fp);
1549 int _win32_feof(FILE *fp);
1550 char* _win32_strerror(int e);
1551 void _win32_perror(const char *str);
1552 int _win32_fprintf(FILE *pf, const char *format, ...);
1553 int _win32_printf(const char *format, ...);
1554 int _win32_vfprintf(FILE *pf, const char *format, va_list arg);
1555 int _win32_vprintf(const char *format, va_list arg);
1556 size_t _win32_fread(void *buf, size_t size, size_t count, FILE *pf);
1557 size_t _win32_fwrite(const void *buf, size_t size, size_t count, FILE *pf);
1558 FILE* _win32_fopen(const char *path, const char *mode);
1559 FILE* _win32_fdopen(int fh, const char *mode);
1560 FILE* _win32_freopen(const char *path, const char *mode, FILE *pf);
1561 int _win32_fclose(FILE *pf);
1562 int _win32_fputs(const char *s,FILE *pf);
1563 int _win32_fputc(int c,FILE *pf);
1564 int _win32_ungetc(int c,FILE *pf);
1565 int _win32_getc(FILE *pf);
1566 int _win32_fileno(FILE *pf);
1567 void _win32_clearerr(FILE *pf);
1568 int _win32_fflush(FILE *pf);
1569 long _win32_ftell(FILE *pf);
1570 int _win32_fseek(FILE *pf,long offset,int origin);
1571 int _win32_fgetpos(FILE *pf,fpos_t *p);
1572 int _win32_fsetpos(FILE *pf,const fpos_t *p);
1573 void _win32_rewind(FILE *pf);
1574 FILE* _win32_tmpfile(void);
1575 void _win32_abort(void);
1576 int _win32_fstat(int fd,struct stat *sbufptr);
1577 int _win32_stat(const char *name,struct stat *sbufptr);
1578 int _win32_pipe( int *phandles, unsigned int psize, int textmode );
1579 FILE* _win32_popen( const char *command, const char *mode );
1580 int _win32_pclose( FILE *pf);
1581 int _win32_rename( const char *oldname, const char *newname);
1582 int _win32_setmode( int fd, int mode);
1583 long _win32_lseek( int fd, long offset, int origin);
1584 long _win32_tell( int fd);
1585 int _win32_dup( int fd);
1586 int _win32_dup2(int h1, int h2);
1587 int _win32_open(const char *path, int oflag,...);
1588 int _win32_close(int fd);
1589 int _win32_eof(int fd);
1590 int _win32_read(int fd, void *buf, unsigned int cnt);
1591 int _win32_write(int fd, const void *buf, unsigned int cnt);
1592 int _win32_mkdir(const char *dir, int mode);
1593 int _win32_rmdir(const char *dir);
1594 int _win32_chdir(const char *dir);
1595 void _win32_setbuf(FILE *pf, char *buf);
1596 int _win32_setvbuf(FILE *pf, char *buf, int type, size_t size);
1597 char* _win32_fgets(char *s, int n, FILE *pf);
1598 char* _win32_gets(char *s);
1599 int _win32_fgetc(FILE *pf);
1600 int _win32_putc(int c, FILE *pf);
1601 int _win32_puts(const char *s);
1602 int _win32_getchar(void);
1603 int _win32_putchar(int c);
1604 void* _win32_malloc(size_t size);
1605 void* _win32_calloc(size_t numitems, size_t size);
1606 void* _win32_realloc(void *block, size_t size);
1607 void _win32_free(void *block);
1608 unsigned _win32_sleep(unsigned int);
1609 int _win32_spawnvp(int mode, const char *cmdname, const char *const *argv);
1610 int _win32_times(struct tms *timebuf);
1611 int _win32_stat(const char *path, struct stat *buf);
1612 int _win32_ioctl(int i, unsigned int u, char *data);
1613 int _win32_utime(const char *f, struct utimbuf *t);
1614 int _win32_uname(struct utsname *n);
1615 unsigned long _win32_os_id(void);
1616 char* _win32_getenv(const char *name);
1617 int _win32_open_osfhandle(long handle, int flags);
1618 long _win32_get_osfhandle(int fd);
1620 u_long _win32_htonl (u_long hostlong);
1621 u_short _win32_htons (u_short hostshort);
1622 u_long _win32_ntohl (u_long netlong);
1623 u_short _win32_ntohs (u_short netshort);
1624 unsigned long _win32_inet_addr (const char * cp);
1625 char * _win32_inet_ntoa (struct in_addr in);
1627 SOCKET _win32_socket (int af, int type, int protocol);
1628 int _win32_bind (SOCKET s, const struct sockaddr *addr, int namelen);
1629 int _win32_listen (SOCKET s, int backlog);
1630 SOCKET _win32_accept (SOCKET s, struct sockaddr *addr, int *addrlen);
1631 int _win32_connect (SOCKET s, const struct sockaddr *name, int namelen);
1632 int _win32_send (SOCKET s, const char * buf, int len, int flags);
1633 int _win32_sendto (SOCKET s, const char * buf, int len, int flags,
1634 const struct sockaddr *to, int tolen);
1635 int _win32_recv (SOCKET s, char * buf, int len, int flags);
1636 int _win32_recvfrom (SOCKET s, char * buf, int len, int flags,
1637 struct sockaddr *from, int * fromlen);
1638 int _win32_shutdown (SOCKET s, int how);
1639 int _win32_closesocket (SOCKET s);
1640 int _win32_ioctlsocket (SOCKET s, long cmd, u_long *argp);
1641 int _win32_setsockopt (SOCKET s, int level, int optname,
1642 const char * optval, int optlen);
1643 int _win32_getsockopt (SOCKET s, int level, int optname, char * optval, int *optlen);
1644 int _win32_getpeername (SOCKET s, struct sockaddr *name, int * namelen);
1645 int _win32_getsockname (SOCKET s, struct sockaddr *name, int * namelen);
1646 int _win32_gethostname (char * name, int namelen);
1647 struct hostent * _win32_gethostbyname(const char * name);
1648 struct hostent * _win32_gethostbyaddr(const char * addr, int len, int type);
1649 struct protoent * _win32_getprotobyname(const char * name);
1650 struct protoent * _win32_getprotobynumber(int proto);
1651 struct servent * _win32_getservbyname(const char * name, const char * proto);
1652 struct servent * _win32_getservbyport(int port, const char * proto);
1653 int _win32_select (int nfds, Perl_fd_set *rfds, Perl_fd_set *wfds, Perl_fd_set *xfds,
1654 const struct timeval *timeout);
1655 void _win32_endnetent(void);
1656 void _win32_endhostent(void);
1657 void _win32_endprotoent(void);
1658 void _win32_endservent(void);
1659 struct netent * _win32_getnetent(void);
1660 struct netent * _win32_getnetbyname(char *name);
1661 struct netent * _win32_getnetbyaddr(long net, int type);
1662 struct protoent *_win32_getprotoent(void);
1663 struct servent *_win32_getservent(void);
1664 void _win32_sethostent(int stayopen);
1665 void _win32_setnetent(int stayopen);
1666 void _win32_setprotoent(int stayopen);
1667 void _win32_setservent(int stayopen);
1669 #pragma warning(once : 4113)