change#3612 was buggy and failed to build Tk; applied Ilya's
[p5sagit/p5-mst-13.2.git] / win32 / GenCAPI.pl
index 5e7868d..703a156 100644 (file)
@@ -23,7 +23,7 @@ sub readsyms(\%@) {
            s/[ \t]*#.*$//;     # delete comments
            if (/^\s*(\S+)\s*$/) {
                my $sym = $1;
-               $$syms{$sym} = "Perl_$sym";
+               $$syms{$sym} = $sym;
            }
        }
        close(FILE);
@@ -40,39 +40,66 @@ sub skip_these {
 }
 
 skip_these [qw(
-yylex
-cando
-cast_ulong
-my_chsize
-condpair_magic
-deb
-deb_growlevel
-debprofdump
-debop
-debstack
-debstackptrs
-dump_fds
-dump_mstats
+Perl_yylex
+Perl_cando
+Perl_cast_ulong
+Perl_my_chsize
+Perl_condpair_magic
+Perl_deb
+Perl_deb_growlevel
+Perl_debprofdump
+Perl_debop
+Perl_debstack
+Perl_debstackptrs
+Perl_dump_fds
+Perl_dump_mstats
 fprintf
-find_threadsv
-magic_mutexfree
-my_memcmp
-my_memset
-my_pclose
-my_popen
-my_swap
-my_htonl
-my_ntohl
-new_struct_thread
-same_dirent
-unlnk
-unlock_condpair
-safexmalloc
-safexcalloc
-safexrealloc
-safexfree
+Perl_find_threadsv
+Perl_magic_mutexfree
+Perl_my_memcmp
+Perl_my_memset
+Perl_my_pclose
+Perl_my_popen
+Perl_my_swap
+Perl_my_htonl
+Perl_my_ntohl
+Perl_new_struct_thread
+Perl_same_dirent
+Perl_unlnk
+Perl_unlock_condpair
+Perl_safexmalloc
+Perl_safexcalloc
+Perl_safexrealloc
+Perl_safexfree
 Perl_GetVars
-malloced_size
+Perl_malloced_size
+Perl_do_exec3
+Perl_getenv_len
+Perl_dump_indent
+Perl_default_protect
+Perl_croak_nocontext
+Perl_die_nocontext
+Perl_form_nocontext
+Perl_warn_nocontext
+Perl_newSVpvf_nocontext
+Perl_sv_catpvf_nocontext
+Perl_sv_catpvf_mg_nocontext
+Perl_sv_setpvf_nocontext
+Perl_sv_setpvf_mg_nocontext
+Perl_do_ipcctl
+Perl_do_ipcget
+Perl_do_msgrcv
+Perl_do_msgsnd
+Perl_do_semop
+Perl_do_shmio
+Perl_my_bzero
+perl_parse
+perl_alloc
+Perl_call_atexit
+Perl_malloc
+Perl_calloc
+Perl_realloc
+Perl_mfree
 )];
 
 
@@ -92,8 +119,15 @@ print OUTFILE <<ENDCODE;
 #include "perl.h"
 #include "XSUB.h"
   
-#define DESTRUCTORFUNC (void (*)(void*))
-  
+/*#define DESTRUCTORFUNC (void (*)(void*))*/
+
+#undef Perl_sv_2mortal
+#undef Perl_newSVsv
+#undef Perl_mess
+#undef Perl_sv_2pv
+#undef Perl_sv_vcatpvfn
+#undef Perl_sv_vsetpvfn
+#undef Perl_newSV
 ENDCODE
 
 print OUTFILE "#ifdef SetCPerlObj_defined\n" unless ($separateObj == 0);
@@ -108,17 +142,18 @@ ENDCODE
 
 print OUTFILE "#endif\n" unless ($separateObj == 0); 
 
+my %done;
+
 while () {
     last unless defined ($_ = <INFILE>);
-    if (/^VIRTUAL\s/) {
+    if (/^VIRTUAL\s+/) {
         while (!/;$/) {
             chomp;
             $_ .= <INFILE>;
         }
         $_ =~ s/^VIRTUAL\s*//;
         $_ =~ s/\s*__attribute__.*$/;/;
-        if ( /(.*)\s([A-z_]*[0-9A-z_]+\s)_\(\((.*)\)\);/ ||
-             /(.*)\*([A-z_]*[0-9A-z_]+\s)_\(\((.*)\)\);/ ) {
+        if ( /^(.+)\t(\w+)\((.*)\);/ ) {
             $type = $1;
             $name = $2;
             $args = $3;
@@ -126,10 +161,14 @@ while () {
             $name =~ s/\s*$//;
             $type =~ s/\s*$//;
            next if (defined $skip_list{$name});
+           next if $name =~ /^S_/;
+           next if exists $done{$name};
 
-           if($args eq "ARGSproto") {
+           $done{$name}++;
+           if($args eq "ARGSproto" or $args eq "pTHX") {
                $args = "void";
            }
+           $args =~ s/^pTHX_ //;
 
             $return = ($type eq "void" or $type eq "Free_t") ? "\t" : "\treturn";
 
@@ -141,9 +180,7 @@ while () {
 
             @args = split(',', $args);
             if ($args[$#args] =~ /\s*\.\.\.\s*/) {
-                if(($name eq "croak") or ($name eq "deb") or ($name eq "die")
-                       or ($name eq "form") or ($name eq "warn")
-                       or ($name eq "warner")) {
+                if ($name =~ /^Perl_(croak|deb|die|warn|form|warner)$/) {
                     print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
                     for (@args) { $_ = $1 if /(\w+)\W*$/; }
                     $arg = $args[$#args-1];
@@ -155,20 +192,17 @@ while () {
 #undef $name
 extern "C" $type $funcName ($args)
 {
-    char *pstr;
-    char *pmsg;
+    SV *pmsg;
     va_list args;
     va_start(args, $arg);
-    pmsg = pPerl->Perl_mess($arg, &args);
-    New(0, pstr, strlen(pmsg)+1, char);
-    strcpy(pstr, pmsg);
-$return pPerl->Perl_$name($start pstr);
+    pmsg = pPerl->Perl_sv_2mortal(pPerl->Perl_newSVsv(pPerl->Perl_mess($arg, &args)));
+$return pPerl->$name($start SvPV_nolen(pmsg));
     va_end(args);
 }
 ENDCODE
                     print OUTFILE "#endif\n" unless ($separateObj == 0);
                 }
-                elsif($name eq "newSVpvf") {
+                elsif($name =~ /^Perl_newSVpvf/) {
                     print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
                     $args[0] =~ /(\w+)\W*$/; 
                     $arg = $1;
@@ -188,7 +222,7 @@ extern "C" $type $funcName ($args)
 ENDCODE
                     print OUTFILE "#endif\n" unless ($separateObj == 0);
                 }
-                elsif($name eq "sv_catpvf") {
+                elsif($name =~ /^Perl_sv_catpvf/) {
                     print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
                     $args[0] =~ /(\w+)\W*$/; 
                     $arg0 = $1;
@@ -207,7 +241,7 @@ extern "C" $type $funcName ($args)
 ENDCODE
                     print OUTFILE "#endif\n" unless ($separateObj == 0);
                 }
-                elsif($name eq "sv_catpvf_mg") {
+                elsif($name =~ /^Perl_sv_catpvf_mg/) {
                     print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
                     $args[0] =~ /(\w+)\W*$/; 
                     $arg0 = $1;
@@ -230,7 +264,7 @@ extern "C" $type $funcName ($args)
 ENDCODE
                     print OUTFILE "#endif\n" unless ($separateObj == 0);
                 }
-                elsif($name eq "sv_setpvf") {
+                elsif($name =~ /^Perl_sv_setpvf/) {
                     print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
                     $args[0] =~ /(\w+)\W*$/; 
                     $arg0 = $1;
@@ -249,7 +283,7 @@ extern "C" $type $funcName ($args)
 ENDCODE
                     print OUTFILE "#endif\n" unless ($separateObj == 0);
                 }
-                elsif($name eq "sv_setpvf_mg") {
+                elsif($name =~ /^Perl_sv_setpvf_mg/) {
                     print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
                     $args[0] =~ /(\w+)\W*$/; 
                     $arg0 = $1;
@@ -299,26 +333,26 @@ ENDCODE
             }
 
            # newXS special case
-           if ($name eq "newXS") {
+           if ($name eq "Perl_newXS") {
                next;
            }
             
             print OUTFILE "\n#ifdef $name" . "defined" unless ($separateObj == 0);
 
            # handle specical case for save_destructor
-           if ($name eq "save_destructor") {
+           if ($name eq "Perl_save_destructor") {
                next;
            }
            # handle specical case for sighandler
-           if ($name eq "sighandler") {
+           if ($name eq "Perl_sighandler") {
                next;
            }
            # handle special case for sv_grow
-           if ($name eq "sv_grow" and $args eq "SV* sv, unsigned long newlen") {
+           if ($name eq "Perl_sv_grow" and $args eq "SV* sv, unsigned long newlen") {
                next;
            }
            # handle special case for newSV
-           if ($name eq "newSV" and $args eq "I32 x, STRLEN len") {
+           if ($name eq "Perl_newSV" and $args eq "I32 x, STRLEN len") {
                next;
            }
            # handle special case for perl_parse
@@ -335,13 +369,13 @@ ENDCODE
                next;
            }
            # handle special case for perl_atexit
-           if ($name eq "perl_atexit") {
+           if ($name eq "Perl_call_atexit") {
                print OUTFILE <<ENDCODE;
 
 #undef $name
 extern "C" $type $name ($args)
 {
-    pPerl->perl_atexit(fn, ptr);
+    pPerl->perl_call_atexit(fn, ptr);
 }
 ENDCODE
                 print OUTFILE "#endif\n" unless ($separateObj == 0);
@@ -349,7 +383,7 @@ ENDCODE
            }
 
 
-           if($name eq "byterun" and $args eq "struct bytestream bs") {
+           if($name eq "Perl_byterun" and $args eq "struct bytestream bs") {
                next;
            }
 
@@ -477,13 +511,13 @@ statusvalue_vms
 sublex_info
 thrsv
 threadnum
-PL_piMem
-PL_piENV
-PL_piStdIO
-PL_piLIO
-PL_piDir
-PL_piSock
-PL_piProc
+PL_Mem
+PL_Env
+PL_StdIO
+PL_LIO
+PL_Dir
+PL_Sock
+PL_Proc
 cshname
 threadsv_names
 thread
@@ -510,7 +544,7 @@ sub readvars(\%$$) {
        or die "$0: Can't open $file: $!\n";
     while (<FILE>) {
        s/[ \t]*#.*//;          # Delete comments.
-       if (/PERLVARI?C?\($pre(\w+),\s*([^,)]+)/) {
+       if (/PERLVARA?I?C?\($pre(\w+),\s*([^,)]+)/) {
            $$syms{$1} = $2;
        }
     }
@@ -528,6 +562,7 @@ readvars %globvar, '..\perlvars.h','G';
 open(HDRFILE, ">$hdrfile") or die "$0: Can't open $hdrfile: $!\n";
 print HDRFILE <<ENDCODE;
 void SetCPerlObj(void* pP);
+void boot_CAPI_handler(CV *cv, void (*subaddr)(CV *c), void *pP);
 CV* Perl_newXS(char* name, void (*subaddr)(CV* cv), char* filename);
 
 ENDCODE
@@ -599,7 +634,15 @@ U32 *      _Perl_opargs(void)
     return pPerl->Perl_get_opargs();
 }
 
-void xs_handler(CV* cv, CPerlObj* p)
+void boot_CAPI_handler(CV *cv, void (*subaddr)(CV *c), void *pP)
+{
+#ifndef NO_XSLOCKS
+    XSLock localLock((CPerlObj*)pP);
+#endif
+    subaddr(cv);
+}
+
+void xs_handler(CPerlObj* p, CV* cv)
 {
     void(*func)(CV*);
     SV* sv;
@@ -619,6 +662,7 @@ void xs_handler(CV* cv, CPerlObj* p)
     }
 }
 
+#undef Perl_newXS
 CV* Perl_newXS(char* name, void (*subaddr)(CV* cv), char* filename)
 {
     CV* cv = pPerl->Perl_newXS(name, xs_handler, filename);
@@ -626,18 +670,18 @@ CV* Perl_newXS(char* name, void (*subaddr)(CV* cv), char* filename)
     return cv;
 }
 
-
+#undef Perl_deb
 void Perl_deb(const char pat, ...)
 {
 }
 
-#undef PL_piMem
-#undef PL_piENV
-#undef PL_piStdIO
-#undef PL_piLIO
-#undef PL_piDir
-#undef PL_piSock
-#undef PL_piProc
+#undef PL_Mem
+#undef PL_Env
+#undef PL_StdIO
+#undef PL_LIO
+#undef PL_Dir
+#undef PL_Sock
+#undef PL_Proc
 
 int *        _win32_errno(void)
 {
@@ -646,27 +690,27 @@ int *        _win32_errno(void)
 
 FILE*        _win32_stdin(void)
 {
-    return (FILE*)pPerl->PL_piStdIO->Stdin();
+    return (FILE*)pPerl->PL_StdIO->Stdin();
 }
 
 FILE*        _win32_stdout(void)
 {
-    return (FILE*)pPerl->PL_piStdIO->Stdout();
+    return (FILE*)pPerl->PL_StdIO->Stdout();
 }
 
 FILE*        _win32_stderr(void)
 {
-    return (FILE*)pPerl->PL_piStdIO->Stderr();
+    return (FILE*)pPerl->PL_StdIO->Stderr();
 }
 
 int          _win32_ferror(FILE *fp)
 {
-    return pPerl->PL_piStdIO->Error((PerlIO*)fp, ErrorNo());
+    return pPerl->PL_StdIO->Error((PerlIO*)fp, ErrorNo());
 }
 
 int          _win32_feof(FILE *fp)
 {
-    return pPerl->PL_piStdIO->Eof((PerlIO*)fp, ErrorNo());
+    return pPerl->PL_StdIO->Eof((PerlIO*)fp, ErrorNo());
 }
 
 char*       _win32_strerror(int e)
@@ -681,12 +725,12 @@ void           _win32_perror(const char *str)
 
 int          _win32_vfprintf(FILE *pf, const char *format, va_list arg)
 {
-    return pPerl->PL_piStdIO->Vprintf((PerlIO*)pf, ErrorNo(), format, arg);
+    return pPerl->PL_StdIO->Vprintf((PerlIO*)pf, ErrorNo(), format, arg);
 }
 
 int          _win32_vprintf(const char *format, va_list arg)
 {
-    return pPerl->PL_piStdIO->Vprintf(pPerl->PL_piStdIO->Stdout(), ErrorNo(), format, arg);
+    return pPerl->PL_StdIO->Vprintf(pPerl->PL_StdIO->Stdout(), ErrorNo(), format, arg);
 }
 
 int          _win32_fprintf(FILE *pf, const char *format, ...)
@@ -711,517 +755,532 @@ int          _win32_printf(const char *format, ...)
 
 size_t       _win32_fread(void *buf, size_t size, size_t count, FILE *pf)
 {
-    return pPerl->PL_piStdIO->Read((PerlIO*)pf, buf, (size*count), ErrorNo());
+    return pPerl->PL_StdIO->Read((PerlIO*)pf, buf, (size*count), ErrorNo());
 }
 
 size_t       _win32_fwrite(const void *buf, size_t size, size_t count, FILE *pf)
 {
-    return pPerl->PL_piStdIO->Write((PerlIO*)pf, buf, (size*count), ErrorNo());
+    return pPerl->PL_StdIO->Write((PerlIO*)pf, buf, (size*count), ErrorNo());
 }
 
 FILE*        _win32_fopen(const char *path, const char *mode)
 {
-    return (FILE*)pPerl->PL_piStdIO->Open(path, mode, ErrorNo());
+    return (FILE*)pPerl->PL_StdIO->Open(path, mode, ErrorNo());
 }
 
 FILE*        _win32_fdopen(int fh, const char *mode)
 {
-    return (FILE*)pPerl->PL_piStdIO->Fdopen(fh, mode, ErrorNo());
+    return (FILE*)pPerl->PL_StdIO->Fdopen(fh, mode, ErrorNo());
 }
 
 FILE*        _win32_freopen(const char *path, const char *mode, FILE *pf)
 {
-    return (FILE*)pPerl->PL_piStdIO->Reopen(path, mode, (PerlIO*)pf, ErrorNo());
+    return (FILE*)pPerl->PL_StdIO->Reopen(path, mode, (PerlIO*)pf, ErrorNo());
 }
 
 int          _win32_fclose(FILE *pf)
 {
-    return pPerl->PL_piStdIO->Close((PerlIO*)pf, ErrorNo());
+    return pPerl->PL_StdIO->Close((PerlIO*)pf, ErrorNo());
 }
 
 int          _win32_fputs(const char *s,FILE *pf)
 {
-    return pPerl->PL_piStdIO->Puts((PerlIO*)pf, s, ErrorNo());
+    return pPerl->PL_StdIO->Puts((PerlIO*)pf, s, ErrorNo());
 }
 
 int          _win32_fputc(int c,FILE *pf)
 {
-    return pPerl->PL_piStdIO->Putc((PerlIO*)pf, c, ErrorNo());
+    return pPerl->PL_StdIO->Putc((PerlIO*)pf, c, ErrorNo());
 }
 
 int          _win32_ungetc(int c,FILE *pf)
 {
-    return pPerl->PL_piStdIO->Ungetc((PerlIO*)pf, c, ErrorNo());
+    return pPerl->PL_StdIO->Ungetc((PerlIO*)pf, c, ErrorNo());
 }
 
 int          _win32_getc(FILE *pf)
 {
-    return pPerl->PL_piStdIO->Getc((PerlIO*)pf, ErrorNo());
+    return pPerl->PL_StdIO->Getc((PerlIO*)pf, ErrorNo());
 }
 
 int          _win32_fileno(FILE *pf)
 {
-    return pPerl->PL_piStdIO->Fileno((PerlIO*)pf, ErrorNo());
+    return pPerl->PL_StdIO->Fileno((PerlIO*)pf, ErrorNo());
 }
 
 void         _win32_clearerr(FILE *pf)
 {
-    pPerl->PL_piStdIO->Clearerr((PerlIO*)pf, ErrorNo());
+    pPerl->PL_StdIO->Clearerr((PerlIO*)pf, ErrorNo());
 }
 
 int          _win32_fflush(FILE *pf)
 {
-    return pPerl->PL_piStdIO->Flush((PerlIO*)pf, ErrorNo());
+    return pPerl->PL_StdIO->Flush((PerlIO*)pf, ErrorNo());
 }
 
 long         _win32_ftell(FILE *pf)
 {
-    return pPerl->PL_piStdIO->Tell((PerlIO*)pf, ErrorNo());
+    return pPerl->PL_StdIO->Tell((PerlIO*)pf, ErrorNo());
 }
 
 int          _win32_fseek(FILE *pf,long offset,int origin)
 {
-    return pPerl->PL_piStdIO->Seek((PerlIO*)pf, offset, origin, ErrorNo());
+    return pPerl->PL_StdIO->Seek((PerlIO*)pf, offset, origin, ErrorNo());
 }
 
 int          _win32_fgetpos(FILE *pf,fpos_t *p)
 {
-    return pPerl->PL_piStdIO->Getpos((PerlIO*)pf, p, ErrorNo());
+    return pPerl->PL_StdIO->Getpos((PerlIO*)pf, p, ErrorNo());
 }
 
 int          _win32_fsetpos(FILE *pf,const fpos_t *p)
 {
-    return pPerl->PL_piStdIO->Setpos((PerlIO*)pf, p, ErrorNo());
+    return pPerl->PL_StdIO->Setpos((PerlIO*)pf, p, ErrorNo());
 }
 
 void         _win32_rewind(FILE *pf)
 {
-    pPerl->PL_piStdIO->Rewind((PerlIO*)pf, ErrorNo());
+    pPerl->PL_StdIO->Rewind((PerlIO*)pf, ErrorNo());
 }
 
 FILE*        _win32_tmpfile(void)
 {
-    return (FILE*)pPerl->PL_piStdIO->Tmpfile(ErrorNo());
+    return (FILE*)pPerl->PL_StdIO->Tmpfile(ErrorNo());
 }
 
 void         _win32_setbuf(FILE *pf, char *buf)
 {
-    pPerl->PL_piStdIO->SetBuf((PerlIO*)pf, buf, ErrorNo());
+    pPerl->PL_StdIO->SetBuf((PerlIO*)pf, buf, ErrorNo());
 }
 
 int          _win32_setvbuf(FILE *pf, char *buf, int type, size_t size)
 {
-    return pPerl->PL_piStdIO->SetVBuf((PerlIO*)pf, buf, type, size, ErrorNo());
+    return pPerl->PL_StdIO->SetVBuf((PerlIO*)pf, buf, type, size, ErrorNo());
 }
 
 char*          _win32_fgets(char *s, int n, FILE *pf)
 {
-    return pPerl->PL_piStdIO->Gets((PerlIO*)pf, s, n, ErrorNo());
+    return pPerl->PL_StdIO->Gets((PerlIO*)pf, s, n, ErrorNo());
 }
 
 char*          _win32_gets(char *s)
 {
-    return _win32_fgets(s, 80, (FILE*)pPerl->PL_piStdIO->Stdin());
+    return _win32_fgets(s, 80, (FILE*)pPerl->PL_StdIO->Stdin());
 }
 
 int          _win32_fgetc(FILE *pf)
 {
-    return pPerl->PL_piStdIO->Getc((PerlIO*)pf, ErrorNo());
+    return pPerl->PL_StdIO->Getc((PerlIO*)pf, ErrorNo());
 }
 
 int          _win32_putc(int c, FILE *pf)
 {
-    return pPerl->PL_piStdIO->Putc((PerlIO*)pf, c, ErrorNo());
+    return pPerl->PL_StdIO->Putc((PerlIO*)pf, c, ErrorNo());
 }
 
 int          _win32_puts(const char *s)
 {
-    return pPerl->PL_piStdIO->Puts(pPerl->PL_piStdIO->Stdout(), s, ErrorNo());
+    return pPerl->PL_StdIO->Puts(pPerl->PL_StdIO->Stdout(), s, ErrorNo());
 }
 
 int          _win32_getchar(void)
 {
-    return pPerl->PL_piStdIO->Getc(pPerl->PL_piStdIO->Stdin(), ErrorNo());
+    return pPerl->PL_StdIO->Getc(pPerl->PL_StdIO->Stdin(), ErrorNo());
 }
 
 int          _win32_putchar(int c)
 {
-    return pPerl->PL_piStdIO->Putc(pPerl->PL_piStdIO->Stdout(), c, ErrorNo());
+    return pPerl->PL_StdIO->Putc(pPerl->PL_StdIO->Stdout(), c, ErrorNo());
 }
 
 void*        _win32_malloc(size_t size)
 {
-    return pPerl->PL_piMem->Malloc(size);
+    return pPerl->PL_Mem->Malloc(size);
 }
 
 void*        _win32_calloc(size_t numitems, size_t size)
 {
-    return pPerl->PL_piMem->Malloc(numitems*size);
+    return pPerl->PL_Mem->Malloc(numitems*size);
 }
 
 void*        _win32_realloc(void *block, size_t size)
 {
-    return pPerl->PL_piMem->Realloc(block, size);
+    return pPerl->PL_Mem->Realloc(block, size);
 }
 
 void         _win32_free(void *block)
 {
-    pPerl->PL_piMem->Free(block);
+    pPerl->PL_Mem->Free(block);
 }
 
 void         _win32_abort(void)
 {
-    pPerl->PL_piProc->Abort();
+    pPerl->PL_Proc->Abort();
 }
 
 int          _win32_pipe(int *phandles, unsigned int psize, int textmode)
 {
-    return pPerl->PL_piProc->Pipe(phandles);
+    return pPerl->PL_Proc->Pipe(phandles);
 }
 
 FILE*        _win32_popen(const char *command, const char *mode)
 {
-    return (FILE*)pPerl->PL_piProc->Popen(command, mode);
+    return (FILE*)pPerl->PL_Proc->Popen(command, mode);
 }
 
 int          _win32_pclose(FILE *pf)
 {
-    return pPerl->PL_piProc->Pclose((PerlIO*)pf);
+    return pPerl->PL_Proc->Pclose((PerlIO*)pf);
 }
 
 unsigned     _win32_sleep(unsigned int t)
 {
-    return pPerl->PL_piProc->Sleep(t);
+    return pPerl->PL_Proc->Sleep(t);
 }
 
 int    _win32_spawnvp(int mode, const char *cmdname, const char *const *argv)
 {
-    return pPerl->PL_piProc->Spawnvp(mode, cmdname, argv);
+    return pPerl->PL_Proc->Spawnvp(mode, cmdname, argv);
 }
 
 int          _win32_mkdir(const char *dir, int mode)
 {
-    return pPerl->PL_piDir->Makedir(dir, mode, ErrorNo());
+    return pPerl->PL_Dir->Makedir(dir, mode, ErrorNo());
 }
 
 int          _win32_rmdir(const char *dir)
 {
-    return pPerl->PL_piDir->Rmdir(dir, ErrorNo());
+    return pPerl->PL_Dir->Rmdir(dir, ErrorNo());
 }
 
 int          _win32_chdir(const char *dir)
 {
-    return pPerl->PL_piDir->Chdir(dir, ErrorNo());
+    return pPerl->PL_Dir->Chdir(dir, ErrorNo());
 }
 
 #undef stat
 int          _win32_fstat(int fd,struct stat *sbufptr)
 {
-    return pPerl->PL_piLIO->FileStat(fd, sbufptr, ErrorNo());
+    return pPerl->PL_LIO->FileStat(fd, sbufptr, ErrorNo());
 }
 
 int          _win32_stat(const char *name,struct stat *sbufptr)
 {
-    return pPerl->PL_piLIO->NameStat(name, sbufptr, ErrorNo());
+    return pPerl->PL_LIO->NameStat(name, sbufptr, ErrorNo());
 }
 
 int          _win32_rename(const char *oname, const char *newname)
 {
-    return pPerl->PL_piLIO->Rename(oname, newname, ErrorNo());
+    return pPerl->PL_LIO->Rename(oname, newname, ErrorNo());
 }
 
 int          _win32_setmode(int fd, int mode)
 {
-    return pPerl->PL_piLIO->Setmode(fd, mode, ErrorNo());
+    return pPerl->PL_LIO->Setmode(fd, mode, ErrorNo());
 }
 
 long         _win32_lseek(int fd, long offset, int origin)
 {
-    return pPerl->PL_piLIO->Lseek(fd, offset, origin, ErrorNo());
+    return pPerl->PL_LIO->Lseek(fd, offset, origin, ErrorNo());
 }
 
 long         _win32_tell(int fd)
 {
-    return pPerl->PL_piStdIO->Tell((PerlIO*)fd, ErrorNo());
+    return pPerl->PL_StdIO->Tell((PerlIO*)fd, ErrorNo());
 }
 
 int          _win32_dup(int fd)
 {
-    return pPerl->PL_piLIO->Dup(fd, ErrorNo());
+    return pPerl->PL_LIO->Dup(fd, ErrorNo());
 }
 
 int          _win32_dup2(int h1, int h2)
 {
-    return pPerl->PL_piLIO->Dup2(h1, h2, ErrorNo());
+    return pPerl->PL_LIO->Dup2(h1, h2, ErrorNo());
 }
 
 int          _win32_open(const char *path, int oflag,...)
 {
-    return pPerl->PL_piLIO->Open(path, oflag, ErrorNo());
+    return pPerl->PL_LIO->Open(path, oflag, ErrorNo());
 }
 
 int          _win32_close(int fd)
 {
-    return pPerl->PL_piLIO->Close(fd, ErrorNo());
+    return pPerl->PL_LIO->Close(fd, ErrorNo());
 }
 
 int          _win32_read(int fd, void *buf, unsigned int cnt)
 {
-    return pPerl->PL_piLIO->Read(fd, buf, cnt, ErrorNo());
+    return pPerl->PL_LIO->Read(fd, buf, cnt, ErrorNo());
 }
 
 int          _win32_write(int fd, const void *buf, unsigned int cnt)
 {
-    return pPerl->PL_piLIO->Write(fd, buf, cnt, ErrorNo());
+    return pPerl->PL_LIO->Write(fd, buf, cnt, ErrorNo());
 }
 
 int          _win32_times(struct tms *timebuf)
 {
-    return pPerl->PL_piProc->Times(timebuf);
+    return pPerl->PL_Proc->Times(timebuf);
 }
 
 int          _win32_ioctl(int i, unsigned int u, char *data)
 {
-    return pPerl->PL_piLIO->IOCtl(i, u, data, ErrorNo());
+    return pPerl->PL_LIO->IOCtl(i, u, data, ErrorNo());
 }
 
 int          _win32_utime(const char *f, struct utimbuf *t)
 {
-    return pPerl->PL_piLIO->Utime((char*)f, t, ErrorNo());
+    return pPerl->PL_LIO->Utime((char*)f, t, ErrorNo());
+}
+
+int          _win32_uname(struct utsname *name)
+{
+    return pPerl->PL_Env->Uname(name, ErrorNo());
+}
+
+unsigned long _win32_os_id(void)
+{
+    return pPerl->PL_Env->OsID();
 }
 
 char*   _win32_getenv(const char *name)
 {
-    return pPerl->PL_piENV->Getenv(name, ErrorNo());
+    return pPerl->PL_Env->Getenv(name, ErrorNo());
+}
+
+int   _win32_putenv(const char *name)
+{
+    return pPerl->PL_Env->Putenv(name, ErrorNo());
 }
 
 int          _win32_open_osfhandle(long handle, int flags)
 {
-    return pPerl->PL_piStdIO->OpenOSfhandle(handle, flags);
+    return pPerl->PL_StdIO->OpenOSfhandle(handle, flags);
 }
 
 long         _win32_get_osfhandle(int fd)
 {
-    return pPerl->PL_piStdIO->GetOSfhandle(fd);
+    return pPerl->PL_StdIO->GetOSfhandle(fd);
 }
 
 u_long _win32_htonl (u_long hostlong)
 {
-    return pPerl->PL_piSock->Htonl(hostlong);
+    return pPerl->PL_Sock->Htonl(hostlong);
 }
 
 u_short _win32_htons (u_short hostshort)
 {
-    return pPerl->PL_piSock->Htons(hostshort);
+    return pPerl->PL_Sock->Htons(hostshort);
 }
 
 u_long _win32_ntohl (u_long netlong)
 {
-    return pPerl->PL_piSock->Ntohl(netlong);
+    return pPerl->PL_Sock->Ntohl(netlong);
 }
 
 u_short _win32_ntohs (u_short netshort)
 {
-    return pPerl->PL_piSock->Ntohs(netshort);
+    return pPerl->PL_Sock->Ntohs(netshort);
 }
 
 unsigned long _win32_inet_addr (const char * cp)
 {
-    return pPerl->PL_piSock->InetAddr(cp, ErrorNo());
+    return pPerl->PL_Sock->InetAddr(cp, ErrorNo());
 }
 
 char * _win32_inet_ntoa (struct in_addr in)
 {
-    return pPerl->PL_piSock->InetNtoa(in, ErrorNo());
+    return pPerl->PL_Sock->InetNtoa(in, ErrorNo());
 }
 
 SOCKET _win32_socket (int af, int type, int protocol)
 {
-    return pPerl->PL_piSock->Socket(af, type, protocol, ErrorNo());
+    return pPerl->PL_Sock->Socket(af, type, protocol, ErrorNo());
 }
 
 int _win32_bind (SOCKET s, const struct sockaddr *addr, int namelen)
 {
-    return pPerl->PL_piSock->Bind(s, addr, namelen, ErrorNo());
+    return pPerl->PL_Sock->Bind(s, addr, namelen, ErrorNo());
 }
 
 int _win32_listen (SOCKET s, int backlog)
 {
-    return pPerl->PL_piSock->Listen(s, backlog, ErrorNo());
+    return pPerl->PL_Sock->Listen(s, backlog, ErrorNo());
 }
 
 SOCKET _win32_accept (SOCKET s, struct sockaddr *addr, int *addrlen)
 {
-    return pPerl->PL_piSock->Accept(s, addr, addrlen, ErrorNo());
+    return pPerl->PL_Sock->Accept(s, addr, addrlen, ErrorNo());
 }
 
 int _win32_connect (SOCKET s, const struct sockaddr *name, int namelen)
 {
-    return pPerl->PL_piSock->Connect(s, name, namelen, ErrorNo());
+    return pPerl->PL_Sock->Connect(s, name, namelen, ErrorNo());
 }
 
 int _win32_send (SOCKET s, const char * buf, int len, int flags)
 {
-    return pPerl->PL_piSock->Send(s, buf, len, flags, ErrorNo());
+    return pPerl->PL_Sock->Send(s, buf, len, flags, ErrorNo());
 }
 
 int _win32_sendto (SOCKET s, const char * buf, int len, int flags,
                        const struct sockaddr *to, int tolen)
 {
-    return pPerl->PL_piSock->Sendto(s, buf, len, flags, to, tolen, ErrorNo());
+    return pPerl->PL_Sock->Sendto(s, buf, len, flags, to, tolen, ErrorNo());
 }
 
 int _win32_recv (SOCKET s, char * buf, int len, int flags)
 {
-    return pPerl->PL_piSock->Recv(s, buf, len, flags, ErrorNo());
+    return pPerl->PL_Sock->Recv(s, buf, len, flags, ErrorNo());
 }
 
 int _win32_recvfrom (SOCKET s, char * buf, int len, int flags,
                          struct sockaddr *from, int * fromlen)
 {
-    return pPerl->PL_piSock->Recvfrom(s, buf, len, flags, from, fromlen, ErrorNo());
+    return pPerl->PL_Sock->Recvfrom(s, buf, len, flags, from, fromlen, ErrorNo());
 }
 
 int _win32_shutdown (SOCKET s, int how)
 {
-    return pPerl->PL_piSock->Shutdown(s, how, ErrorNo());
+    return pPerl->PL_Sock->Shutdown(s, how, ErrorNo());
 }
 
 int _win32_closesocket (SOCKET s)
 {
-    return pPerl->PL_piSock->Closesocket(s, ErrorNo());
+    return pPerl->PL_Sock->Closesocket(s, ErrorNo());
 }
 
 int _win32_ioctlsocket (SOCKET s, long cmd, u_long *argp)
 {
-    return pPerl->PL_piSock->Ioctlsocket(s, cmd, argp, ErrorNo());
+    return pPerl->PL_Sock->Ioctlsocket(s, cmd, argp, ErrorNo());
 }
 
 int _win32_setsockopt (SOCKET s, int level, int optname,
                            const char * optval, int optlen)
 {
-    return pPerl->PL_piSock->Setsockopt(s, level, optname, optval, optlen, ErrorNo());
+    return pPerl->PL_Sock->Setsockopt(s, level, optname, optval, optlen, ErrorNo());
 }
 
 int _win32_getsockopt (SOCKET s, int level, int optname, char * optval, int *optlen)
 {
-    return pPerl->PL_piSock->Getsockopt(s, level, optname, optval, optlen, ErrorNo());
+    return pPerl->PL_Sock->Getsockopt(s, level, optname, optval, optlen, ErrorNo());
 }
 
 int _win32_getpeername (SOCKET s, struct sockaddr *name, int * namelen)
 {
-    return pPerl->PL_piSock->Getpeername(s, name, namelen, ErrorNo());
+    return pPerl->PL_Sock->Getpeername(s, name, namelen, ErrorNo());
 }
 
 int _win32_getsockname (SOCKET s, struct sockaddr *name, int * namelen)
 {
-    return pPerl->PL_piSock->Getsockname(s, name, namelen, ErrorNo());
+    return pPerl->PL_Sock->Getsockname(s, name, namelen, ErrorNo());
 }
 
 int _win32_gethostname (char * name, int namelen)
 {
-    return pPerl->PL_piSock->Gethostname(name, namelen, ErrorNo());
+    return pPerl->PL_Sock->Gethostname(name, namelen, ErrorNo());
 }
 
 struct hostent * _win32_gethostbyname(const char * name)
 {
-    return pPerl->PL_piSock->Gethostbyname(name, ErrorNo());
+    return pPerl->PL_Sock->Gethostbyname(name, ErrorNo());
 }
 
 struct hostent * _win32_gethostbyaddr(const char * addr, int len, int type)
 {
-    return pPerl->PL_piSock->Gethostbyaddr(addr, len, type, ErrorNo());
+    return pPerl->PL_Sock->Gethostbyaddr(addr, len, type, ErrorNo());
 }
 
 struct protoent * _win32_getprotobyname(const char * name)
 {
-    return pPerl->PL_piSock->Getprotobyname(name, ErrorNo());
+    return pPerl->PL_Sock->Getprotobyname(name, ErrorNo());
 }
 
 struct protoent * _win32_getprotobynumber(int proto)
 {
-    return pPerl->PL_piSock->Getprotobynumber(proto, ErrorNo());
+    return pPerl->PL_Sock->Getprotobynumber(proto, ErrorNo());
 }
 
 struct servent * _win32_getservbyname(const char * name, const char * proto)
 {
-    return pPerl->PL_piSock->Getservbyname(name, proto, ErrorNo());
+    return pPerl->PL_Sock->Getservbyname(name, proto, ErrorNo());
 }
 
 struct servent * _win32_getservbyport(int port, const char * proto)
 {
-    return pPerl->PL_piSock->Getservbyport(port, proto, ErrorNo());
+    return pPerl->PL_Sock->Getservbyport(port, proto, ErrorNo());
 }
 
 int _win32_select (int nfds, Perl_fd_set *rfds, Perl_fd_set *wfds, Perl_fd_set *xfds,
                  const struct timeval *timeout)
 {
-    return pPerl->PL_piSock->Select(nfds, (char*)rfds, (char*)wfds, (char*)xfds, timeout, ErrorNo());
+    return pPerl->PL_Sock->Select(nfds, (char*)rfds, (char*)wfds, (char*)xfds, timeout, ErrorNo());
 }
 
 void _win32_endnetent(void)
 {
-    pPerl->PL_piSock->Endnetent(ErrorNo());
+    pPerl->PL_Sock->Endnetent(ErrorNo());
 }
 
 void _win32_endhostent(void)
 {
-    pPerl->PL_piSock->Endhostent(ErrorNo());
+    pPerl->PL_Sock->Endhostent(ErrorNo());
 }
 
 void _win32_endprotoent(void)
 {
-    pPerl->PL_piSock->Endprotoent(ErrorNo());
+    pPerl->PL_Sock->Endprotoent(ErrorNo());
 }
 
 void _win32_endservent(void)
 {
-    pPerl->PL_piSock->Endservent(ErrorNo());
+    pPerl->PL_Sock->Endservent(ErrorNo());
 }
 
 struct netent * _win32_getnetent(void)
 {
-    return pPerl->PL_piSock->Getnetent(ErrorNo());
+    return pPerl->PL_Sock->Getnetent(ErrorNo());
 }
 
 struct netent * _win32_getnetbyname(char *name)
 {
-    return pPerl->PL_piSock->Getnetbyname(name, ErrorNo());
+    return pPerl->PL_Sock->Getnetbyname(name, ErrorNo());
 }
 
 struct netent * _win32_getnetbyaddr(long net, int type)
 {
-    return pPerl->PL_piSock->Getnetbyaddr(net, type, ErrorNo());
+    return pPerl->PL_Sock->Getnetbyaddr(net, type, ErrorNo());
 }
 
 struct protoent *_win32_getprotoent(void)
 {
-    return pPerl->PL_piSock->Getprotoent(ErrorNo());
+    return pPerl->PL_Sock->Getprotoent(ErrorNo());
 }
 
 struct servent *_win32_getservent(void)
 {
-    return pPerl->PL_piSock->Getservent(ErrorNo());
+    return pPerl->PL_Sock->Getservent(ErrorNo());
 }
 
 void _win32_sethostent(int stayopen)
 {
-    pPerl->PL_piSock->Sethostent(stayopen, ErrorNo());
+    pPerl->PL_Sock->Sethostent(stayopen, ErrorNo());
 }
 
 void _win32_setnetent(int stayopen)
 {
-    pPerl->PL_piSock->Setnetent(stayopen, ErrorNo());
+    pPerl->PL_Sock->Setnetent(stayopen, ErrorNo());
 }
 
 void _win32_setprotoent(int stayopen)
 {
-    pPerl->PL_piSock->Setprotoent(stayopen, ErrorNo());
+    pPerl->PL_Sock->Setprotoent(stayopen, ErrorNo());
 }
 
 void _win32_setservent(int stayopen)
 {
-    pPerl->PL_piSock->Setservent(stayopen, ErrorNo());
+    pPerl->PL_Sock->Setservent(stayopen, ErrorNo());
 }
 } /* extern "C" */
 EOCODE
@@ -1312,6 +1371,8 @@ U32 * _Perl_opargs ();
 #undef win32_stat
 #undef win32_ioctl
 #undef win32_utime
+#undef win32_uname
+#undef win32_os_id
 #undef win32_getenv
 
 #undef win32_htonl
@@ -1429,6 +1490,8 @@ U32 * _Perl_opargs ();
 #define win32_stat     _win32_stat
 #define win32_ioctl    _win32_ioctl
 #define win32_utime    _win32_utime
+#define win32_uname    _win32_uname
+#define win32_os_id    _win32_os_id
 #define win32_getenv   _win32_getenv
 #define win32_open_osfhandle _win32_open_osfhandle
 #define win32_get_osfhandle  _win32_get_osfhandle
@@ -1548,6 +1611,8 @@ int       _win32_times(struct tms *timebuf);
 int    _win32_stat(const char *path, struct stat *buf);
 int    _win32_ioctl(int i, unsigned int u, char *data);
 int    _win32_utime(const char *f, struct utimbuf *t);
+int    _win32_uname(struct utsname *n);
+unsigned long  _win32_os_id(void);
 char*   _win32_getenv(const char *name);
 int     _win32_open_osfhandle(long handle, int flags);
 long    _win32_get_osfhandle(int fd);