-#define PerlIO_has_base(f) 0
-#endif
-
-#define PerlIO_stdin() PL_piStdIO->Stdin()
-#define PerlIO_stdout() PL_piStdIO->Stdout()
-#define PerlIO_stderr() PL_piStdIO->Stderr()
-#define PerlIO_open(x,y) PL_piStdIO->Open((x),(y), ErrorNo())
-#define PerlIO_close(f) PL_piStdIO->Close((f), ErrorNo())
-#define PerlIO_eof(f) PL_piStdIO->Eof((f), ErrorNo())
-#define PerlIO_error(f) PL_piStdIO->Error((f), ErrorNo())
-#define PerlIO_clearerr(f) PL_piStdIO->Clearerr((f), ErrorNo())
-#define PerlIO_getc(f) PL_piStdIO->Getc((f), ErrorNo())
-#define PerlIO_get_base(f) PL_piStdIO->GetBase((f), ErrorNo())
-#define PerlIO_get_bufsiz(f) PL_piStdIO->GetBufsiz((f), ErrorNo())
-#define PerlIO_get_cnt(f) PL_piStdIO->GetCnt((f), ErrorNo())
-#define PerlIO_get_ptr(f) PL_piStdIO->GetPtr((f), ErrorNo())
-#define PerlIO_putc(f,c) PL_piStdIO->Putc((f),(c), ErrorNo())
-#define PerlIO_puts(f,s) PL_piStdIO->Puts((f),(s), ErrorNo())
-#define PerlIO_flush(f) PL_piStdIO->Flush((f), ErrorNo())
-#define PerlIO_gets(s, n, fp) PL_piStdIO->Gets((fp), s, n, ErrorNo())
-#define PerlIO_ungetc(f,c) PL_piStdIO->Ungetc((f),(c), ErrorNo())
-#define PerlIO_fileno(f) PL_piStdIO->Fileno((f), ErrorNo())
-#define PerlIO_fdopen(f, s) PL_piStdIO->Fdopen((f),(s), ErrorNo())
-#define PerlIO_reopen(p, m, f) PL_piStdIO->Reopen((p), (m), (f), ErrorNo())
-#define PerlIO_read(f,buf,count) \
- (SSize_t)PL_piStdIO->Read((f), (buf), (count), ErrorNo())
-#define PerlIO_write(f,buf,count) \
- PL_piStdIO->Write((f), (buf), (count), ErrorNo())
-#define PerlIO_setbuf(f,b) PL_piStdIO->SetBuf((f), (b), ErrorNo())
-#define PerlIO_setvbuf(f,b,t,s) PL_piStdIO->SetVBuf((f), (b), (t), (s), ErrorNo())
-#define PerlIO_set_cnt(f,c) PL_piStdIO->SetCnt((f), (c), ErrorNo())
-#define PerlIO_set_ptrcnt(f,p,c) \
- PL_piStdIO->SetPtrCnt((f), (p), (c), ErrorNo())
-#define PerlIO_setlinebuf(f) PL_piStdIO->Setlinebuf((f), ErrorNo())
-#define PerlIO_printf fprintf
-#define PerlIO_stdoutf PL_piStdIO->Printf
-#define PerlIO_vprintf(f,fmt,a) PL_piStdIO->Vprintf((f), ErrorNo(), (fmt),a)
-#define PerlIO_tell(f) PL_piStdIO->Tell((f), ErrorNo())
-#define PerlIO_seek(f,o,w) PL_piStdIO->Seek((f),(o),(w), ErrorNo())
-#define PerlIO_getpos(f,p) PL_piStdIO->Getpos((f),(p), ErrorNo())
-#define PerlIO_setpos(f,p) PL_piStdIO->Setpos((f),(p), ErrorNo())
-#define PerlIO_rewind(f) PL_piStdIO->Rewind((f), ErrorNo())
-#define PerlIO_tmpfile() PL_piStdIO->Tmpfile(ErrorNo())
-#define PerlIO_init() PL_piStdIO->Init(ErrorNo())
+#define PerlSIO_has_base(f) 0
+#endif
+
+/* Now take FILE * via function table */
+
+#define PerlSIO_stdin \
+ (*PL_StdIO->pStdin)(PL_StdIO)
+#define PerlSIO_stdout \
+ (*PL_StdIO->pStdout)(PL_StdIO)
+#define PerlSIO_stderr \
+ (*PL_StdIO->pStderr)(PL_StdIO)
+#define PerlSIO_fopen(x,y) \
+ (*PL_StdIO->pOpen)(PL_StdIO, (x),(y))
+#define PerlSIO_fclose(f) \
+ (*PL_StdIO->pClose)(PL_StdIO, (f))
+#define PerlSIO_feof(f) \
+ (*PL_StdIO->pEof)(PL_StdIO, (f))
+#define PerlSIO_ferror(f) \
+ (*PL_StdIO->pError)(PL_StdIO, (f))
+#define PerlSIO_clearerr(f) \
+ (*PL_StdIO->pClearerr)(PL_StdIO, (f))
+#define PerlSIO_fgetc(f) \
+ (*PL_StdIO->pGetc)(PL_StdIO, (f))
+#define PerlSIO_get_base(f) \
+ (*PL_StdIO->pGetBase)(PL_StdIO, (f))
+#define PerlSIO_get_bufsiz(f) \
+ (*PL_StdIO->pGetBufsiz)(PL_StdIO, (f))
+#define PerlSIO_get_cnt(f) \
+ (*PL_StdIO->pGetCnt)(PL_StdIO, (f))
+#define PerlSIO_get_ptr(f) \
+ (*PL_StdIO->pGetPtr)(PL_StdIO, (f))
+#define PerlSIO_fputc(c,f) \
+ (*PL_StdIO->pPutc)(PL_StdIO, (c),(f))
+#define PerlSIO_fputs(s,f) \
+ (*PL_StdIO->pPuts)(PL_StdIO, (s),(f))
+#define PerlSIO_fflush(f) \
+ (*PL_StdIO->pFlush)(PL_StdIO, (f))
+#define PerlSIO_fgets(s, n, f) \
+ (*PL_StdIO->pGets)(PL_StdIO, s, n, (f))
+#define PerlSIO_ungetc(c,f) \
+ (*PL_StdIO->pUngetc)(PL_StdIO, (c),(f))
+#define PerlSIO_fileno(f) \
+ (*PL_StdIO->pFileno)(PL_StdIO, (f))
+#define PerlSIO_fdopen(f, s) \
+ (*PL_StdIO->pFdopen)(PL_StdIO, (f),(s))
+#define PerlSIO_freopen(p, m, f) \
+ (*PL_StdIO->pReopen)(PL_StdIO, (p), (m), (f))
+#define PerlSIO_fread(buf,sz,count,f) \
+ (*PL_StdIO->pRead)(PL_StdIO, (buf), (sz), (count), (f))
+#define PerlSIO_fwrite(buf,sz,count,f) \
+ (*PL_StdIO->pWrite)(PL_StdIO, (buf), (sz), (count), (f))
+#define PerlSIO_setbuf(f,b) \
+ (*PL_StdIO->pSetBuf)(PL_StdIO, (f), (b))
+#define PerlSIO_setvbuf(f,b,t,s) \
+ (*PL_StdIO->pSetVBuf)(PL_StdIO, (f),(b),(t),(s))
+#define PerlSIO_set_cnt(f,c) \
+ (*PL_StdIO->pSetCnt)(PL_StdIO, (f), (c))
+#define PerlSIO_set_ptr(f,p) \
+ (*PL_StdIO->pSetPtr)(PL_StdIO, (f), (p))
+#define PerlSIO_setlinebuf(f) \
+ (*PL_StdIO->pSetlinebuf)(PL_StdIO, (f))
+#define PerlSIO_printf Perl_fprintf_nocontext
+#define PerlSIO_stdoutf Perl_printf_nocontext
+#define PerlSIO_vprintf(f,fmt,a) \
+ (*PL_StdIO->pVprintf)(PL_StdIO, (f),(fmt),a)
+#define PerlSIO_ftell(f) \
+ (*PL_StdIO->pTell)(PL_StdIO, (f))
+#define PerlSIO_fseek(f,o,w) \
+ (*PL_StdIO->pSeek)(PL_StdIO, (f),(o),(w))
+#define PerlSIO_fgetpos(f,p) \
+ (*PL_StdIO->pGetpos)(PL_StdIO, (f),(p))
+#define PerlSIO_fsetpos(f,p) \
+ (*PL_StdIO->pSetpos)(PL_StdIO, (f),(p))
+#define PerlSIO_rewind(f) \
+ (*PL_StdIO->pRewind)(PL_StdIO, (f))
+#define PerlSIO_tmpfile() \
+ (*PL_StdIO->pTmpfile)(PL_StdIO)
+#define PerlSIO_init() \
+ (*PL_StdIO->pInit)(PL_StdIO)