703a156795557d1d20efa0ffd9237bb0ebce5cb5
[p5sagit/p5-mst-13.2.git] / win32 / GenCAPI.pl
1
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".
5
6 my $hdrfile = "$ARGV[0]/perlCAPI.h";
7 my $infile = '../proto.h';
8 my @embedsyms = ('../global.sym', '../pp.sym');
9 my $separateObj = 0;
10
11 my %skip_list;
12 my %embed;
13
14 sub readsyms(\%@) {
15     my ($syms, @files) = @_;
16     my ($line, @words);
17     %$syms = ();
18     foreach my $file (@files) {
19         local (*FILE, $_);
20         open(FILE, "< $file")
21             or die "$0: Can't open $file: $!\n";
22         while (<FILE>) {
23             s/[ \t]*#.*$//;     # delete comments
24             if (/^\s*(\S+)\s*$/) {
25                 my $sym = $1;
26                 $$syms{$sym} = $sym;
27             }
28         }
29         close(FILE);
30     }
31 }
32
33 readsyms %embed, @embedsyms;
34
35 sub skip_these {
36     my $list = shift;
37     foreach my $symbol (@$list) {
38         $skip_list{$symbol} = 1;
39     }
40 }
41
42 skip_these [qw(
43 Perl_yylex
44 Perl_cando
45 Perl_cast_ulong
46 Perl_my_chsize
47 Perl_condpair_magic
48 Perl_deb
49 Perl_deb_growlevel
50 Perl_debprofdump
51 Perl_debop
52 Perl_debstack
53 Perl_debstackptrs
54 Perl_dump_fds
55 Perl_dump_mstats
56 fprintf
57 Perl_find_threadsv
58 Perl_magic_mutexfree
59 Perl_my_memcmp
60 Perl_my_memset
61 Perl_my_pclose
62 Perl_my_popen
63 Perl_my_swap
64 Perl_my_htonl
65 Perl_my_ntohl
66 Perl_new_struct_thread
67 Perl_same_dirent
68 Perl_unlnk
69 Perl_unlock_condpair
70 Perl_safexmalloc
71 Perl_safexcalloc
72 Perl_safexrealloc
73 Perl_safexfree
74 Perl_GetVars
75 Perl_malloced_size
76 Perl_do_exec3
77 Perl_getenv_len
78 Perl_dump_indent
79 Perl_default_protect
80 Perl_croak_nocontext
81 Perl_die_nocontext
82 Perl_form_nocontext
83 Perl_warn_nocontext
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
89 Perl_do_ipcctl
90 Perl_do_ipcget
91 Perl_do_msgrcv
92 Perl_do_msgsnd
93 Perl_do_semop
94 Perl_do_shmio
95 Perl_my_bzero
96 perl_parse
97 perl_alloc
98 Perl_call_atexit
99 Perl_malloc
100 Perl_calloc
101 Perl_realloc
102 Perl_mfree
103 )];
104
105
106
107 if (!open(INFILE, "<$infile")) {
108     print "open of $infile failed: $!\n";
109     return 1;
110 }
111
112 if (!open(OUTFILE, ">perlCAPI.cpp")) {
113     print "open of perlCAPI.cpp failed: $!\n";
114     return 1;
115 }
116
117 print OUTFILE <<ENDCODE;
118 #include "EXTERN.h"
119 #include "perl.h"
120 #include "XSUB.h"
121   
122 /*#define DESTRUCTORFUNC (void (*)(void*))*/
123
124 #undef Perl_sv_2mortal
125 #undef Perl_newSVsv
126 #undef Perl_mess
127 #undef Perl_sv_2pv
128 #undef Perl_sv_vcatpvfn
129 #undef Perl_sv_vsetpvfn
130 #undef Perl_newSV
131 ENDCODE
132
133 print OUTFILE "#ifdef SetCPerlObj_defined\n" unless ($separateObj == 0);
134
135 print OUTFILE <<ENDCODE;
136 extern "C" void SetCPerlObj(CPerlObj* pP)
137 {
138     pPerl = pP;
139 }
140   
141 ENDCODE
142
143 print OUTFILE "#endif\n" unless ($separateObj == 0); 
144
145 my %done;
146
147 while () {
148     last unless defined ($_ = <INFILE>);
149     if (/^VIRTUAL\s+/) {
150         while (!/;$/) {
151             chomp;
152             $_ .= <INFILE>;
153         }
154         $_ =~ s/^VIRTUAL\s*//;
155         $_ =~ s/\s*__attribute__.*$/;/;
156         if ( /^(.+)\t(\w+)\((.*)\);/ ) {
157             $type = $1;
158             $name = $2;
159             $args = $3;
160  
161             $name =~ s/\s*$//;
162             $type =~ s/\s*$//;
163             next if (defined $skip_list{$name});
164             next if $name =~ /^S_/;
165             next if exists $done{$name};
166
167             $done{$name}++;
168             if($args eq "ARGSproto" or $args eq "pTHX") {
169                 $args = "void";
170             }
171             $args =~ s/^pTHX_ //;
172
173             $return = ($type eq "void" or $type eq "Free_t") ? "\t" : "\treturn";
174
175             if(defined $embed{$name}) {
176                 $funcName = $embed{$name};
177             } else {
178                 $funcName = $name;
179             }
180
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];
187                     my $start = '';
188                     $start = join(', ',@args[0 .. ($#args - 2)]) if @args > 2;
189                     $start .= ', ' if $start;
190                     print OUTFILE <<ENDCODE;
191
192 #undef $name
193 extern "C" $type $funcName ($args)
194 {
195     SV *pmsg;
196     va_list 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));
200     va_end(args);
201 }
202 ENDCODE
203                     print OUTFILE "#endif\n" unless ($separateObj == 0);
204                 }
205                 elsif($name =~ /^Perl_newSVpvf/) {
206                     print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
207                     $args[0] =~ /(\w+)\W*$/; 
208                     $arg = $1;
209                     print OUTFILE <<ENDCODE;
210
211 #undef $name
212 extern "C" $type $funcName ($args)
213 {
214     SV *sv;
215     va_list 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);
219     va_end(args);
220     return sv;
221 }
222 ENDCODE
223                     print OUTFILE "#endif\n" unless ($separateObj == 0);
224                 }
225                 elsif($name =~ /^Perl_sv_catpvf/) {
226                     print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
227                     $args[0] =~ /(\w+)\W*$/; 
228                     $arg0 = $1;
229                     $args[1] =~ /(\w+)\W*$/; 
230                     $arg1 = $1;
231                     print OUTFILE <<ENDCODE;
232
233 #undef $name
234 extern "C" $type $funcName ($args)
235 {
236     va_list args;
237     va_start(args, $arg1);
238     pPerl->Perl_sv_vcatpvfn($arg0, $arg1, strlen($arg1), &args, NULL, 0, NULL);
239     va_end(args);
240 }
241 ENDCODE
242                     print OUTFILE "#endif\n" unless ($separateObj == 0);
243                 }
244                 elsif($name =~ /^Perl_sv_catpvf_mg/) {
245                     print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
246                     $args[0] =~ /(\w+)\W*$/; 
247                     $arg0 = $1;
248                     $args[1] =~ /(\w+)\W*$/; 
249                     $arg1 = $1;
250                     print OUTFILE <<ENDCODE;
251
252 #undef $name
253 #ifndef mg_set
254 #define mg_set pPerl->Perl_mg_set
255 #endif
256 extern "C" $type $funcName ($args)
257 {
258     va_list args;
259     va_start(args, $arg1);
260     pPerl->Perl_sv_vcatpvfn($arg0, $arg1, strlen($arg1), &args, NULL, 0, NULL);
261     va_end(args);
262     SvSETMAGIC(sv);
263 }
264 ENDCODE
265                     print OUTFILE "#endif\n" unless ($separateObj == 0);
266                 }
267                 elsif($name =~ /^Perl_sv_setpvf/) {
268                     print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
269                     $args[0] =~ /(\w+)\W*$/; 
270                     $arg0 = $1;
271                     $args[1] =~ /(\w+)\W*$/; 
272                     $arg1 = $1;
273                     print OUTFILE <<ENDCODE;
274
275 #undef $name
276 extern "C" $type $funcName ($args)
277 {
278     va_list args;
279     va_start(args, $arg1);
280     pPerl->Perl_sv_vsetpvfn($arg0, $arg1, strlen($arg1), &args, NULL, 0, NULL);
281     va_end(args);
282 }
283 ENDCODE
284                     print OUTFILE "#endif\n" unless ($separateObj == 0);
285                 }
286                 elsif($name =~ /^Perl_sv_setpvf_mg/) {
287                     print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
288                     $args[0] =~ /(\w+)\W*$/; 
289                     $arg0 = $1;
290                     $args[1] =~ /(\w+)\W*$/; 
291                     $arg1 = $1;
292                     print OUTFILE <<ENDCODE;
293
294 #undef $name
295 #ifndef mg_set
296 #define mg_set pPerl->Perl_mg_set
297 #endif
298 extern "C" $type $funcName ($args)
299 {
300     va_list args;
301     va_start(args, $arg1);
302     pPerl->Perl_sv_vsetpvfn($arg0, $arg1, strlen($arg1), &args, NULL, 0, NULL);
303     va_end(args);
304     SvSETMAGIC(sv);
305 }
306 ENDCODE
307                     print OUTFILE "#endif\n" unless ($separateObj == 0);
308                 }
309                 elsif($name eq "fprintf") {
310                     print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
311                     $args[0] =~ /(\w+)\W*$/; 
312                     $arg0 = $1;
313                     $args[1] =~ /(\w+)\W*$/; 
314                     $arg1 = $1;
315                     print OUTFILE <<ENDCODE;
316
317 #undef $name
318 extern "C" $type $name ($args)
319 {
320     int nRet;
321     va_list args;
322     va_start(args, $arg1);
323     nRet = PerlIO_vprintf($arg0, $arg1, args);
324     va_end(args);
325     return nRet;
326 }
327 ENDCODE
328                     print OUTFILE "#endif\n" unless ($separateObj == 0);
329                 } else {
330                     print "Warning: can't handle varargs function '$name'\n";
331                 }
332                 next;
333             }
334
335             # newXS special case
336             if ($name eq "Perl_newXS") {
337                 next;
338             }
339             
340             print OUTFILE "\n#ifdef $name" . "defined" unless ($separateObj == 0);
341
342             # handle specical case for save_destructor
343             if ($name eq "Perl_save_destructor") {
344                 next;
345             }
346             # handle specical case for sighandler
347             if ($name eq "Perl_sighandler") {
348                 next;
349             }
350             # handle special case for sv_grow
351             if ($name eq "Perl_sv_grow" and $args eq "SV* sv, unsigned long newlen") {
352                 next;
353             }
354             # handle special case for newSV
355             if ($name eq "Perl_newSV" and $args eq "I32 x, STRLEN len") {
356                 next;
357             }
358             # handle special case for perl_parse
359             if ($name eq "perl_parse") {
360                 print OUTFILE <<ENDCODE;
361
362 #undef $name
363 extern "C" $type $name ($args)
364 {
365     return pPerl->perl_parse(xsinit, argc, argv, env);
366 }
367 ENDCODE
368                 print OUTFILE "#endif\n" unless ($separateObj == 0);
369                 next;
370             }
371             # handle special case for perl_atexit
372             if ($name eq "Perl_call_atexit") {
373                 print OUTFILE <<ENDCODE;
374
375 #undef $name
376 extern "C" $type $name ($args)
377 {
378     pPerl->perl_call_atexit(fn, ptr);
379 }
380 ENDCODE
381                 print OUTFILE "#endif\n" unless ($separateObj == 0);
382                 next;
383             }
384
385
386             if($name eq "Perl_byterun" and $args eq "struct bytestream bs") {
387                 next;
388             }
389
390             # foo(void);
391             if ($args eq "void") {
392                 print OUTFILE <<ENDCODE;
393
394 #undef $name
395 extern "C" $type $funcName ()
396 {
397 $return pPerl->$funcName();
398 }
399
400 ENDCODE
401                 print OUTFILE "#endif\n" unless ($separateObj == 0);
402                 next;
403             }
404
405             # foo(char *s, const int bar);
406             print OUTFILE <<ENDCODE;
407
408 #undef $name
409 extern "C" $type $funcName ($args)
410 {
411 ENDCODE
412             print OUTFILE "$return pPerl->$funcName";
413             $doneone = 0;
414             foreach $arg (@args) {
415                 if ($arg =~ /(\w+)\W*$/) {
416                     if ($doneone) {
417                         print OUTFILE ", $1";
418                     }
419                     else {
420                         print OUTFILE "($1";
421                         $doneone++;
422                     }
423                 }
424             }
425             print OUTFILE ");\n}\n";
426             print OUTFILE "#endif\n" unless ($separateObj == 0);
427         }
428         else {
429             print "failed to match $_";
430         }
431     }
432 }
433
434 close INFILE;
435
436 %skip_list = ();
437
438 skip_these [qw(
439 strchop
440 filemode
441 lastfd
442 oldname
443 curinterp
444 Argv
445 Cmd
446 sortcop
447 sortstash
448 firstgv
449 secondgv
450 sortstack
451 signalstack
452 mystrk
453 oldlastpm
454 gensym
455 preambled
456 preambleav
457 Ilaststatval
458 Ilaststype
459 mess_sv
460 ors
461 opsave
462 eval_mutex
463 strtab_mutex
464 orslen
465 ofmt
466 modcount
467 generation
468 DBcv
469 archpat_auto
470 sortcxix
471 lastgotoprobe
472 regdummy
473 regcomp_parse
474 regxend
475 regcode
476 regnaughty
477 regsawback
478 regprecomp
479 regnpar
480 regsize
481 regflags
482 regseen
483 seen_zerolen
484 regcomp_rx
485 extralen
486 colorset
487 colors
488 reginput
489 regbol
490 regeol
491 regstartp
492 regendp
493 reglastparen
494 regtill
495 regprev
496 reg_start_tmp
497 reg_start_tmpl
498 regdata
499 bostr
500 reg_flags
501 reg_eval_set
502 regnarrate
503 regprogram
504 regindent
505 regcc
506 in_clean_objs
507 in_clean_all
508 linestart
509 pending_ident
510 statusvalue_vms
511 sublex_info
512 thrsv
513 threadnum
514 PL_Mem
515 PL_Env
516 PL_StdIO
517 PL_LIO
518 PL_Dir
519 PL_Sock
520 PL_Proc
521 cshname
522 threadsv_names
523 thread
524 nthreads
525 thr_key
526 threads_mutex
527 malloc_mutex
528 svref_mutex
529 sv_mutex
530 cred_mutex
531 nthreads_cond
532 eval_cond
533 cryptseen
534 cshlen
535 watchaddr
536 watchok
537 )];
538
539 sub readvars(\%$$) {
540     my ($syms, $file, $pre) = @_;
541     %$syms = ();
542     local (*FILE, $_);
543     open(FILE, "< $file")
544         or die "$0: Can't open $file: $!\n";
545     while (<FILE>) {
546         s/[ \t]*#.*//;          # Delete comments.
547         if (/PERLVARA?I?C?\($pre(\w+),\s*([^,)]+)/) {
548             $$syms{$1} = $2;
549         }
550     }
551     close(FILE);
552 }
553
554 my %intrp;
555 my %thread;
556 my %globvar;
557
558 readvars %intrp,  '..\intrpvar.h','I';
559 readvars %thread, '..\thrdvar.h','T';
560 readvars %globvar, '..\perlvars.h','G';
561
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);
567
568 ENDCODE
569
570 sub DoVariable($$) {
571     my $name = shift;
572     my $type = shift;
573
574     return if (defined $skip_list{$name});
575     return if ($type eq 'struct perl_thread *');
576
577     print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
578     print OUTFILE <<ENDCODE;
579 #undef PL_$name
580 extern "C" $type * _PL_$name ()
581 {
582     return (($type *)&pPerl->PL_$name);
583 }
584
585 ENDCODE
586
587     print OUTFILE "#endif\n" unless ($separateObj == 0);
588
589     print HDRFILE <<ENDCODE;
590
591 #undef PL_$name
592 $type * _PL_$name ();
593 #define PL_$name (*_PL_$name())
594
595 ENDCODE
596
597 }
598
599 foreach $key (keys %intrp) {
600     DoVariable ($key, $intrp{$key});
601 }
602
603 foreach $key (keys %thread) {
604     DoVariable ($key, $thread{$key});
605 }
606
607 foreach $key (keys %globvar) {
608     DoVariable ($key, $globvar{$key});
609 }
610
611 print OUTFILE <<EOCODE;
612
613
614 extern "C" {
615
616
617 char ** _Perl_op_desc(void)
618 {
619     return pPerl->Perl_get_op_descs();
620 }
621
622 char ** _Perl_op_name(void)
623 {
624     return pPerl->Perl_get_op_names();
625 }
626
627 char *  _Perl_no_modify(void)
628 {
629     return pPerl->Perl_get_no_modify();
630 }
631
632 U32 *   _Perl_opargs(void)
633 {
634     return pPerl->Perl_get_opargs();
635 }
636
637 void boot_CAPI_handler(CV *cv, void (*subaddr)(CV *c), void *pP)
638 {
639 #ifndef NO_XSLOCKS
640     XSLock localLock((CPerlObj*)pP);
641 #endif
642     subaddr(cv);
643 }
644
645 void xs_handler(CPerlObj* p, CV* cv)
646 {
647     void(*func)(CV*);
648     SV* sv;
649     MAGIC* m = pPerl->Perl_mg_find((SV*)cv, '~');
650     if(m != NULL)
651     {
652         sv = m->mg_obj;
653         if(SvIOK(sv))
654         {
655             func = (void(*)(CV*))SvIVX(sv);
656         }
657         else
658         {
659             func = (void(*)(CV*))pPerl->Perl_sv_2iv(sv);
660         }
661         func(cv);
662     }
663 }
664
665 #undef Perl_newXS
666 CV* Perl_newXS(char* name, void (*subaddr)(CV* cv), char* filename)
667 {
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);
670     return cv;
671 }
672
673 #undef Perl_deb
674 void Perl_deb(const char pat, ...)
675 {
676 }
677
678 #undef PL_Mem
679 #undef PL_Env
680 #undef PL_StdIO
681 #undef PL_LIO
682 #undef PL_Dir
683 #undef PL_Sock
684 #undef PL_Proc
685
686 int *        _win32_errno(void)
687 {
688     return &pPerl->ErrorNo();
689 }
690
691 FILE*        _win32_stdin(void)
692 {
693     return (FILE*)pPerl->PL_StdIO->Stdin();
694 }
695
696 FILE*        _win32_stdout(void)
697 {
698     return (FILE*)pPerl->PL_StdIO->Stdout();
699 }
700
701 FILE*        _win32_stderr(void)
702 {
703     return (FILE*)pPerl->PL_StdIO->Stderr();
704 }
705
706 int          _win32_ferror(FILE *fp)
707 {
708     return pPerl->PL_StdIO->Error((PerlIO*)fp, ErrorNo());
709 }
710
711 int          _win32_feof(FILE *fp)
712 {
713     return pPerl->PL_StdIO->Eof((PerlIO*)fp, ErrorNo());
714 }
715
716 char*        _win32_strerror(int e)
717 {
718     return strerror(e);
719 }
720
721 void         _win32_perror(const char *str)
722 {
723     perror(str);
724 }
725
726 int          _win32_vfprintf(FILE *pf, const char *format, va_list arg)
727 {
728     return pPerl->PL_StdIO->Vprintf((PerlIO*)pf, ErrorNo(), format, arg);
729 }
730
731 int          _win32_vprintf(const char *format, va_list arg)
732 {
733     return pPerl->PL_StdIO->Vprintf(pPerl->PL_StdIO->Stdout(), ErrorNo(), format, arg);
734 }
735
736 int          _win32_fprintf(FILE *pf, const char *format, ...)
737 {
738     int ret;
739     va_list args;
740     va_start(args, format);
741     ret = _win32_vfprintf(pf, format, args);
742     va_end(args);
743     return ret;
744 }
745
746 int          _win32_printf(const char *format, ...)
747 {
748     int ret;
749     va_list args;
750     va_start(args, format);
751     ret = _win32_vprintf(format, args);
752     va_end(args);
753     return ret;
754 }
755
756 size_t       _win32_fread(void *buf, size_t size, size_t count, FILE *pf)
757 {
758     return pPerl->PL_StdIO->Read((PerlIO*)pf, buf, (size*count), ErrorNo());
759 }
760
761 size_t       _win32_fwrite(const void *buf, size_t size, size_t count, FILE *pf)
762 {
763     return pPerl->PL_StdIO->Write((PerlIO*)pf, buf, (size*count), ErrorNo());
764 }
765
766 FILE*        _win32_fopen(const char *path, const char *mode)
767 {
768     return (FILE*)pPerl->PL_StdIO->Open(path, mode, ErrorNo());
769 }
770
771 FILE*        _win32_fdopen(int fh, const char *mode)
772 {
773     return (FILE*)pPerl->PL_StdIO->Fdopen(fh, mode, ErrorNo());
774 }
775
776 FILE*        _win32_freopen(const char *path, const char *mode, FILE *pf)
777 {
778     return (FILE*)pPerl->PL_StdIO->Reopen(path, mode, (PerlIO*)pf, ErrorNo());
779 }
780
781 int          _win32_fclose(FILE *pf)
782 {
783     return pPerl->PL_StdIO->Close((PerlIO*)pf, ErrorNo());
784 }
785
786 int          _win32_fputs(const char *s,FILE *pf)
787 {
788     return pPerl->PL_StdIO->Puts((PerlIO*)pf, s, ErrorNo());
789 }
790
791 int          _win32_fputc(int c,FILE *pf)
792 {
793     return pPerl->PL_StdIO->Putc((PerlIO*)pf, c, ErrorNo());
794 }
795
796 int          _win32_ungetc(int c,FILE *pf)
797 {
798     return pPerl->PL_StdIO->Ungetc((PerlIO*)pf, c, ErrorNo());
799 }
800
801 int          _win32_getc(FILE *pf)
802 {
803     return pPerl->PL_StdIO->Getc((PerlIO*)pf, ErrorNo());
804 }
805
806 int          _win32_fileno(FILE *pf)
807 {
808     return pPerl->PL_StdIO->Fileno((PerlIO*)pf, ErrorNo());
809 }
810
811 void         _win32_clearerr(FILE *pf)
812 {
813     pPerl->PL_StdIO->Clearerr((PerlIO*)pf, ErrorNo());
814 }
815
816 int          _win32_fflush(FILE *pf)
817 {
818     return pPerl->PL_StdIO->Flush((PerlIO*)pf, ErrorNo());
819 }
820
821 long         _win32_ftell(FILE *pf)
822 {
823     return pPerl->PL_StdIO->Tell((PerlIO*)pf, ErrorNo());
824 }
825
826 int          _win32_fseek(FILE *pf,long offset,int origin)
827 {
828     return pPerl->PL_StdIO->Seek((PerlIO*)pf, offset, origin, ErrorNo());
829 }
830
831 int          _win32_fgetpos(FILE *pf,fpos_t *p)
832 {
833     return pPerl->PL_StdIO->Getpos((PerlIO*)pf, p, ErrorNo());
834 }
835
836 int          _win32_fsetpos(FILE *pf,const fpos_t *p)
837 {
838     return pPerl->PL_StdIO->Setpos((PerlIO*)pf, p, ErrorNo());
839 }
840
841 void         _win32_rewind(FILE *pf)
842 {
843     pPerl->PL_StdIO->Rewind((PerlIO*)pf, ErrorNo());
844 }
845
846 FILE*        _win32_tmpfile(void)
847 {
848     return (FILE*)pPerl->PL_StdIO->Tmpfile(ErrorNo());
849 }
850
851 void         _win32_setbuf(FILE *pf, char *buf)
852 {
853     pPerl->PL_StdIO->SetBuf((PerlIO*)pf, buf, ErrorNo());
854 }
855
856 int          _win32_setvbuf(FILE *pf, char *buf, int type, size_t size)
857 {
858     return pPerl->PL_StdIO->SetVBuf((PerlIO*)pf, buf, type, size, ErrorNo());
859 }
860
861 char*           _win32_fgets(char *s, int n, FILE *pf)
862 {
863     return pPerl->PL_StdIO->Gets((PerlIO*)pf, s, n, ErrorNo());
864 }
865
866 char*           _win32_gets(char *s)
867 {
868     return _win32_fgets(s, 80, (FILE*)pPerl->PL_StdIO->Stdin());
869 }
870
871 int          _win32_fgetc(FILE *pf)
872 {
873     return pPerl->PL_StdIO->Getc((PerlIO*)pf, ErrorNo());
874 }
875
876 int          _win32_putc(int c, FILE *pf)
877 {
878     return pPerl->PL_StdIO->Putc((PerlIO*)pf, c, ErrorNo());
879 }
880
881 int          _win32_puts(const char *s)
882 {
883     return pPerl->PL_StdIO->Puts(pPerl->PL_StdIO->Stdout(), s, ErrorNo());
884 }
885
886 int          _win32_getchar(void)
887 {
888     return pPerl->PL_StdIO->Getc(pPerl->PL_StdIO->Stdin(), ErrorNo());
889 }
890
891 int          _win32_putchar(int c)
892 {
893     return pPerl->PL_StdIO->Putc(pPerl->PL_StdIO->Stdout(), c, ErrorNo());
894 }
895
896 void*        _win32_malloc(size_t size)
897 {
898     return pPerl->PL_Mem->Malloc(size);
899 }
900
901 void*        _win32_calloc(size_t numitems, size_t size)
902 {
903     return pPerl->PL_Mem->Malloc(numitems*size);
904 }
905
906 void*        _win32_realloc(void *block, size_t size)
907 {
908     return pPerl->PL_Mem->Realloc(block, size);
909 }
910
911 void         _win32_free(void *block)
912 {
913     pPerl->PL_Mem->Free(block);
914 }
915
916 void         _win32_abort(void)
917 {
918     pPerl->PL_Proc->Abort();
919 }
920
921 int          _win32_pipe(int *phandles, unsigned int psize, int textmode)
922 {
923     return pPerl->PL_Proc->Pipe(phandles);
924 }
925
926 FILE*        _win32_popen(const char *command, const char *mode)
927 {
928     return (FILE*)pPerl->PL_Proc->Popen(command, mode);
929 }
930
931 int          _win32_pclose(FILE *pf)
932 {
933     return pPerl->PL_Proc->Pclose((PerlIO*)pf);
934 }
935
936 unsigned     _win32_sleep(unsigned int t)
937 {
938     return pPerl->PL_Proc->Sleep(t);
939 }
940
941 int     _win32_spawnvp(int mode, const char *cmdname, const char *const *argv)
942 {
943     return pPerl->PL_Proc->Spawnvp(mode, cmdname, argv);
944 }
945
946 int          _win32_mkdir(const char *dir, int mode)
947 {
948     return pPerl->PL_Dir->Makedir(dir, mode, ErrorNo());
949 }
950
951 int          _win32_rmdir(const char *dir)
952 {
953     return pPerl->PL_Dir->Rmdir(dir, ErrorNo());
954 }
955
956 int          _win32_chdir(const char *dir)
957 {
958     return pPerl->PL_Dir->Chdir(dir, ErrorNo());
959 }
960
961 #undef stat
962 int          _win32_fstat(int fd,struct stat *sbufptr)
963 {
964     return pPerl->PL_LIO->FileStat(fd, sbufptr, ErrorNo());
965 }
966
967 int          _win32_stat(const char *name,struct stat *sbufptr)
968 {
969     return pPerl->PL_LIO->NameStat(name, sbufptr, ErrorNo());
970 }
971
972 int          _win32_rename(const char *oname, const char *newname)
973 {
974     return pPerl->PL_LIO->Rename(oname, newname, ErrorNo());
975 }
976
977 int          _win32_setmode(int fd, int mode)
978 {
979     return pPerl->PL_LIO->Setmode(fd, mode, ErrorNo());
980 }
981
982 long         _win32_lseek(int fd, long offset, int origin)
983 {
984     return pPerl->PL_LIO->Lseek(fd, offset, origin, ErrorNo());
985 }
986
987 long         _win32_tell(int fd)
988 {
989     return pPerl->PL_StdIO->Tell((PerlIO*)fd, ErrorNo());
990 }
991
992 int          _win32_dup(int fd)
993 {
994     return pPerl->PL_LIO->Dup(fd, ErrorNo());
995 }
996
997 int          _win32_dup2(int h1, int h2)
998 {
999     return pPerl->PL_LIO->Dup2(h1, h2, ErrorNo());
1000 }
1001
1002 int          _win32_open(const char *path, int oflag,...)
1003 {
1004     return pPerl->PL_LIO->Open(path, oflag, ErrorNo());
1005 }
1006
1007 int          _win32_close(int fd)
1008 {
1009     return pPerl->PL_LIO->Close(fd, ErrorNo());
1010 }
1011
1012 int          _win32_read(int fd, void *buf, unsigned int cnt)
1013 {
1014     return pPerl->PL_LIO->Read(fd, buf, cnt, ErrorNo());
1015 }
1016
1017 int          _win32_write(int fd, const void *buf, unsigned int cnt)
1018 {
1019     return pPerl->PL_LIO->Write(fd, buf, cnt, ErrorNo());
1020 }
1021
1022 int          _win32_times(struct tms *timebuf)
1023 {
1024     return pPerl->PL_Proc->Times(timebuf);
1025 }
1026
1027 int          _win32_ioctl(int i, unsigned int u, char *data)
1028 {
1029     return pPerl->PL_LIO->IOCtl(i, u, data, ErrorNo());
1030 }
1031
1032 int          _win32_utime(const char *f, struct utimbuf *t)
1033 {
1034     return pPerl->PL_LIO->Utime((char*)f, t, ErrorNo());
1035 }
1036
1037 int          _win32_uname(struct utsname *name)
1038 {
1039     return pPerl->PL_Env->Uname(name, ErrorNo());
1040 }
1041
1042 unsigned long _win32_os_id(void)
1043 {
1044     return pPerl->PL_Env->OsID();
1045 }
1046
1047 char*   _win32_getenv(const char *name)
1048 {
1049     return pPerl->PL_Env->Getenv(name, ErrorNo());
1050 }
1051
1052 int   _win32_putenv(const char *name)
1053 {
1054     return pPerl->PL_Env->Putenv(name, ErrorNo());
1055 }
1056
1057 int          _win32_open_osfhandle(long handle, int flags)
1058 {
1059     return pPerl->PL_StdIO->OpenOSfhandle(handle, flags);
1060 }
1061
1062 long         _win32_get_osfhandle(int fd)
1063 {
1064     return pPerl->PL_StdIO->GetOSfhandle(fd);
1065 }
1066
1067 u_long _win32_htonl (u_long hostlong)
1068 {
1069     return pPerl->PL_Sock->Htonl(hostlong);
1070 }
1071
1072 u_short _win32_htons (u_short hostshort)
1073 {
1074     return pPerl->PL_Sock->Htons(hostshort);
1075 }
1076
1077 u_long _win32_ntohl (u_long netlong)
1078 {
1079     return pPerl->PL_Sock->Ntohl(netlong);
1080 }
1081
1082 u_short _win32_ntohs (u_short netshort)
1083 {
1084     return pPerl->PL_Sock->Ntohs(netshort);
1085 }
1086
1087 unsigned long _win32_inet_addr (const char * cp)
1088 {
1089     return pPerl->PL_Sock->InetAddr(cp, ErrorNo());
1090 }
1091
1092 char * _win32_inet_ntoa (struct in_addr in)
1093 {
1094     return pPerl->PL_Sock->InetNtoa(in, ErrorNo());
1095 }
1096
1097 SOCKET _win32_socket (int af, int type, int protocol)
1098 {
1099     return pPerl->PL_Sock->Socket(af, type, protocol, ErrorNo());
1100 }
1101
1102 int _win32_bind (SOCKET s, const struct sockaddr *addr, int namelen)
1103 {
1104     return pPerl->PL_Sock->Bind(s, addr, namelen, ErrorNo());
1105 }
1106
1107 int _win32_listen (SOCKET s, int backlog)
1108 {
1109     return pPerl->PL_Sock->Listen(s, backlog, ErrorNo());
1110 }
1111
1112 SOCKET _win32_accept (SOCKET s, struct sockaddr *addr, int *addrlen)
1113 {
1114     return pPerl->PL_Sock->Accept(s, addr, addrlen, ErrorNo());
1115 }
1116
1117 int _win32_connect (SOCKET s, const struct sockaddr *name, int namelen)
1118 {
1119     return pPerl->PL_Sock->Connect(s, name, namelen, ErrorNo());
1120 }
1121
1122 int _win32_send (SOCKET s, const char * buf, int len, int flags)
1123 {
1124     return pPerl->PL_Sock->Send(s, buf, len, flags, ErrorNo());
1125 }
1126
1127 int _win32_sendto (SOCKET s, const char * buf, int len, int flags,
1128                        const struct sockaddr *to, int tolen)
1129 {
1130     return pPerl->PL_Sock->Sendto(s, buf, len, flags, to, tolen, ErrorNo());
1131 }
1132
1133 int _win32_recv (SOCKET s, char * buf, int len, int flags)
1134 {
1135     return pPerl->PL_Sock->Recv(s, buf, len, flags, ErrorNo());
1136 }
1137
1138 int _win32_recvfrom (SOCKET s, char * buf, int len, int flags,
1139                          struct sockaddr *from, int * fromlen)
1140 {
1141     return pPerl->PL_Sock->Recvfrom(s, buf, len, flags, from, fromlen, ErrorNo());
1142 }
1143
1144 int _win32_shutdown (SOCKET s, int how)
1145 {
1146     return pPerl->PL_Sock->Shutdown(s, how, ErrorNo());
1147 }
1148
1149 int _win32_closesocket (SOCKET s)
1150 {
1151     return pPerl->PL_Sock->Closesocket(s, ErrorNo());
1152 }
1153
1154 int _win32_ioctlsocket (SOCKET s, long cmd, u_long *argp)
1155 {
1156     return pPerl->PL_Sock->Ioctlsocket(s, cmd, argp, ErrorNo());
1157 }
1158
1159 int _win32_setsockopt (SOCKET s, int level, int optname,
1160                            const char * optval, int optlen)
1161 {
1162     return pPerl->PL_Sock->Setsockopt(s, level, optname, optval, optlen, ErrorNo());
1163 }
1164
1165 int _win32_getsockopt (SOCKET s, int level, int optname, char * optval, int *optlen)
1166 {
1167     return pPerl->PL_Sock->Getsockopt(s, level, optname, optval, optlen, ErrorNo());
1168 }
1169
1170 int _win32_getpeername (SOCKET s, struct sockaddr *name, int * namelen)
1171 {
1172     return pPerl->PL_Sock->Getpeername(s, name, namelen, ErrorNo());
1173 }
1174
1175 int _win32_getsockname (SOCKET s, struct sockaddr *name, int * namelen)
1176 {
1177     return pPerl->PL_Sock->Getsockname(s, name, namelen, ErrorNo());
1178 }
1179
1180 int _win32_gethostname (char * name, int namelen)
1181 {
1182     return pPerl->PL_Sock->Gethostname(name, namelen, ErrorNo());
1183 }
1184
1185 struct hostent * _win32_gethostbyname(const char * name)
1186 {
1187     return pPerl->PL_Sock->Gethostbyname(name, ErrorNo());
1188 }
1189
1190 struct hostent * _win32_gethostbyaddr(const char * addr, int len, int type)
1191 {
1192     return pPerl->PL_Sock->Gethostbyaddr(addr, len, type, ErrorNo());
1193 }
1194
1195 struct protoent * _win32_getprotobyname(const char * name)
1196 {
1197     return pPerl->PL_Sock->Getprotobyname(name, ErrorNo());
1198 }
1199
1200 struct protoent * _win32_getprotobynumber(int proto)
1201 {
1202     return pPerl->PL_Sock->Getprotobynumber(proto, ErrorNo());
1203 }
1204
1205 struct servent * _win32_getservbyname(const char * name, const char * proto)
1206 {
1207     return pPerl->PL_Sock->Getservbyname(name, proto, ErrorNo());
1208 }
1209
1210 struct servent * _win32_getservbyport(int port, const char * proto)
1211 {
1212     return pPerl->PL_Sock->Getservbyport(port, proto, ErrorNo());
1213 }
1214
1215 int _win32_select (int nfds, Perl_fd_set *rfds, Perl_fd_set *wfds, Perl_fd_set *xfds,
1216                   const struct timeval *timeout)
1217 {
1218     return pPerl->PL_Sock->Select(nfds, (char*)rfds, (char*)wfds, (char*)xfds, timeout, ErrorNo());
1219 }
1220
1221 void _win32_endnetent(void)
1222 {
1223     pPerl->PL_Sock->Endnetent(ErrorNo());
1224 }
1225
1226 void _win32_endhostent(void)
1227 {
1228     pPerl->PL_Sock->Endhostent(ErrorNo());
1229 }
1230
1231 void _win32_endprotoent(void)
1232 {
1233     pPerl->PL_Sock->Endprotoent(ErrorNo());
1234 }
1235
1236 void _win32_endservent(void)
1237 {
1238     pPerl->PL_Sock->Endservent(ErrorNo());
1239 }
1240
1241 struct netent * _win32_getnetent(void)
1242 {
1243     return pPerl->PL_Sock->Getnetent(ErrorNo());
1244 }
1245
1246 struct netent * _win32_getnetbyname(char *name)
1247 {
1248     return pPerl->PL_Sock->Getnetbyname(name, ErrorNo());
1249 }
1250
1251 struct netent * _win32_getnetbyaddr(long net, int type)
1252 {
1253     return pPerl->PL_Sock->Getnetbyaddr(net, type, ErrorNo());
1254 }
1255
1256 struct protoent *_win32_getprotoent(void)
1257 {
1258     return pPerl->PL_Sock->Getprotoent(ErrorNo());
1259 }
1260
1261 struct servent *_win32_getservent(void)
1262 {
1263     return pPerl->PL_Sock->Getservent(ErrorNo());
1264 }
1265
1266 void _win32_sethostent(int stayopen)
1267 {
1268     pPerl->PL_Sock->Sethostent(stayopen, ErrorNo());
1269 }
1270
1271 void _win32_setnetent(int stayopen)
1272 {
1273     pPerl->PL_Sock->Setnetent(stayopen, ErrorNo());
1274 }
1275
1276 void _win32_setprotoent(int stayopen)
1277 {
1278     pPerl->PL_Sock->Setprotoent(stayopen, ErrorNo());
1279 }
1280
1281 void _win32_setservent(int stayopen)
1282 {
1283     pPerl->PL_Sock->Setservent(stayopen, ErrorNo());
1284 }
1285 } /* extern "C" */
1286 EOCODE
1287
1288
1289 print HDRFILE <<EOCODE;
1290 #undef Perl_op_desc
1291 char ** _Perl_op_desc ();
1292 #define Perl_op_desc (_Perl_op_desc())
1293
1294 #undef Perl_op_name
1295 char ** _Perl_op_name ();
1296 #define Perl_op_name (_Perl_op_name())
1297
1298 #undef Perl_no_modify
1299 char * _Perl_no_modify ();
1300 #define Perl_no_modify (_Perl_no_modify())
1301
1302 #undef Perl_opargs
1303 U32 * _Perl_opargs ();
1304 #define Perl_opargs (_Perl_opargs())
1305
1306
1307 #undef win32_errno
1308 #undef win32_stdin
1309 #undef win32_stdout
1310 #undef win32_stderr
1311 #undef win32_ferror
1312 #undef win32_feof
1313 #undef win32_fprintf
1314 #undef win32_printf
1315 #undef win32_vfprintf
1316 #undef win32_vprintf
1317 #undef win32_fread
1318 #undef win32_fwrite
1319 #undef win32_fopen
1320 #undef win32_fdopen
1321 #undef win32_freopen
1322 #undef win32_fclose
1323 #undef win32_fputs
1324 #undef win32_fputc
1325 #undef win32_ungetc
1326 #undef win32_getc
1327 #undef win32_fileno
1328 #undef win32_clearerr
1329 #undef win32_fflush
1330 #undef win32_ftell
1331 #undef win32_fseek
1332 #undef win32_fgetpos
1333 #undef win32_fsetpos
1334 #undef win32_rewind
1335 #undef win32_tmpfile
1336 #undef win32_abort
1337 #undef win32_fstat
1338 #undef win32_stat
1339 #undef win32_pipe
1340 #undef win32_popen
1341 #undef win32_pclose
1342 #undef win32_rename
1343 #undef win32_setmode
1344 #undef win32_lseek
1345 #undef win32_tell
1346 #undef win32_dup
1347 #undef win32_dup2
1348 #undef win32_open
1349 #undef win32_close
1350 #undef win32_eof
1351 #undef win32_read
1352 #undef win32_write
1353 #undef win32_mkdir
1354 #undef win32_rmdir
1355 #undef win32_chdir
1356 #undef win32_setbuf
1357 #undef win32_setvbuf
1358 #undef win32_fgetc
1359 #undef win32_fgets
1360 #undef win32_gets
1361 #undef win32_putc
1362 #undef win32_puts
1363 #undef win32_getchar
1364 #undef win32_putchar
1365 #undef win32_malloc
1366 #undef win32_calloc
1367 #undef win32_realloc
1368 #undef win32_free
1369 #undef win32_sleep
1370 #undef win32_times
1371 #undef win32_stat
1372 #undef win32_ioctl
1373 #undef win32_utime
1374 #undef win32_uname
1375 #undef win32_os_id
1376 #undef win32_getenv
1377
1378 #undef win32_htonl
1379 #undef win32_htons
1380 #undef win32_ntohl
1381 #undef win32_ntohs
1382 #undef win32_inet_addr
1383 #undef win32_inet_ntoa
1384
1385 #undef win32_socket
1386 #undef win32_bind
1387 #undef win32_listen
1388 #undef win32_accept
1389 #undef win32_connect
1390 #undef win32_send
1391 #undef win32_sendto
1392 #undef win32_recv
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
1408 #undef win32_select
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
1422
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
1498
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
1505
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
1543
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);
1619
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);
1626
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);
1668
1669 #pragma warning(once : 4113)
1670 EOCODE
1671
1672
1673 close HDRFILE;
1674 close OUTFILE;