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