-#ifndef PerlIO_stdoutf
-extern int PerlIO_stdoutf _((const char *,...))
- __attribute__((format (printf, 1, 2)));
-#endif
-#ifndef PerlIO_puts
-extern int PerlIO_puts _((PerlIO *,const char *));
-#endif
-#ifndef PerlIO_open
-extern PerlIO * PerlIO_open _((const char *,const char *));
-#endif
-#ifndef PerlIO_close
-extern int PerlIO_close _((PerlIO *));
-#endif
-#ifndef PerlIO_eof
-extern int PerlIO_eof _((PerlIO *));
-#endif
-#ifndef PerlIO_error
-extern int PerlIO_error _((PerlIO *));
-#endif
-#ifndef PerlIO_clearerr
-extern void PerlIO_clearerr _((PerlIO *));
-#endif
-#ifndef PerlIO_getc
-extern int PerlIO_getc _((PerlIO *));
-#endif
-#ifndef PerlIO_putc
-extern int PerlIO_putc _((PerlIO *,int));
-#endif
-#ifndef PerlIO_flush
-extern int PerlIO_flush _((PerlIO *));
-#endif
-#ifndef PerlIO_ungetc
-extern int PerlIO_ungetc _((PerlIO *,int));
-#endif
-#ifndef PerlIO_fileno
-extern int PerlIO_fileno _((PerlIO *));
-#endif
-#ifndef PerlIO_fdopen
-extern PerlIO * PerlIO_fdopen _((int, const char *));
-#endif
-#ifndef PerlIO_importFILE
-extern PerlIO * PerlIO_importFILE _((FILE *,int));
-#endif
-#ifndef PerlIO_exportFILE
-extern FILE * PerlIO_exportFILE _((PerlIO *,int));
-#endif
-#ifndef PerlIO_findFILE
-extern FILE * PerlIO_findFILE _((PerlIO *));
-#endif
-#ifndef PerlIO_releaseFILE
-extern void PerlIO_releaseFILE _((PerlIO *,FILE *));
-#endif
-#ifndef PerlIO_read
-extern SSize_t PerlIO_read _((PerlIO *,void *,Size_t));
-#endif
-#ifndef PerlIO_write
-extern SSize_t PerlIO_write _((PerlIO *,const void *,Size_t));
-#endif
-#ifndef PerlIO_setlinebuf
-extern void PerlIO_setlinebuf _((PerlIO *));
-#endif
-#ifndef PerlIO_printf
-extern int PerlIO_printf _((PerlIO *, const char *,...))
- __attribute__((format (printf, 2, 3)));
-#endif
-#ifndef PerlIO_sprintf
-extern int PerlIO_sprintf _((char *, int, const char *,...))
- __attribute__((format (printf, 3, 4)));
-#endif
-#ifndef PerlIO_vprintf
-extern int PerlIO_vprintf _((PerlIO *, const char *, va_list));
-#endif
-#ifndef PerlIO_tell
-extern long PerlIO_tell _((PerlIO *));
-#endif
-#ifndef PerlIO_seek
-extern int PerlIO_seek _((PerlIO *,off_t,int));
-#endif
-#ifndef PerlIO_rewind
-extern void PerlIO_rewind _((PerlIO *));
-#endif
-#ifndef PerlIO_has_base
-extern int PerlIO_has_base _((PerlIO *));
-#endif
-#ifndef PerlIO_has_cntptr
-extern int PerlIO_has_cntptr _((PerlIO *));
-#endif
-#ifndef PerlIO_fast_gets
-extern int PerlIO_fast_gets _((PerlIO *));
-#endif
-#ifndef PerlIO_canset_cnt
-extern int PerlIO_canset_cnt _((PerlIO *));
-#endif
-#ifndef PerlIO_get_ptr
-extern STDCHAR * PerlIO_get_ptr _((PerlIO *));
-#endif
-#ifndef PerlIO_get_cnt
-extern int PerlIO_get_cnt _((PerlIO *));
-#endif
-#ifndef PerlIO_set_cnt
-extern void PerlIO_set_cnt _((PerlIO *,int));
-#endif
-#ifndef PerlIO_set_ptrcnt
-extern void PerlIO_set_ptrcnt _((PerlIO *,STDCHAR *,int));
-#endif
-#ifndef PerlIO_get_base
-extern STDCHAR * PerlIO_get_base _((PerlIO *));
-#endif
-#ifndef PerlIO_get_bufsiz
-extern int PerlIO_get_bufsiz _((PerlIO *));
-#endif
-#ifndef PerlIO_tmpfile
-extern PerlIO * PerlIO_tmpfile _((void));
+/* 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(f,c) \
+ (*PL_StdIO->pPutc)(PL_StdIO, (f),(c))
+#define PerlSIO_fputs(f,s) \
+ (*PL_StdIO->pPuts)(PL_StdIO, (f),(s))
+#define PerlSIO_fflush(f) \
+ (*PL_StdIO->pFlush)(PL_StdIO, (f))
+#define PerlSIO_fgets(s, n, fp) \
+ (*PL_StdIO->pGets)(PL_StdIO, (fp), s, n)
+#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)
+#undef init_os_extras
+#define init_os_extras() \
+ (*PL_StdIO->pInitOSExtras)(PL_StdIO)
+#define PerlSIO_fdupopen(f) \
+ (*PL_StdIO->pFdupopen)(PL_StdIO, (f))
+
+#else /* PERL_IMPLICIT_SYS */
+
+#define PerlSIO_stdin stdin
+#define PerlSIO_stdout stdout
+#define PerlSIO_stderr stderr
+#define PerlSIO_fopen(x,y) fopen(x,y)
+#ifdef __VOS__
+/* Work around VOS bug posix-979, wrongly setting errno when at end of file. */
+#define PerlSIO_fclose(f) (((errno==1025)?errno=0:0),fclose(f))
+#define PerlSIO_feof(f) (((errno==1025)?errno=0:0),feof(f))
+#define PerlSIO_ferror(f) (((errno==1025)?errno=0:0),ferror(f))
+#else
+#define PerlSIO_fclose(f) fclose(f)
+#define PerlSIO_feof(f) feof(f)
+#define PerlSIO_ferror(f) ferror(f)