]> pd.if.org Git - pdclib/blobdiff - includes/stdio.h
Porting current working set from CVS.
[pdclib] / includes / stdio.h
index df9bfe4261d16de6ec6e309803e7dbdbb4eb07df..274966e87963c9508a3a700cf693a1010b023043 100644 (file)
    Permission is granted to use, modify, and / or redistribute at will.
 */
 
-/* TODO: This is a dummy header to avoid errors when mixing PDCLIB <stdarg.h> */
-/* with glibc <stdio.h>.                                                      */
-
 #ifndef _PDCLIB_STDIO_H
 #define _PDCLIB_STDIO_H _PDCLIB_STDIO_H
 
-#ifndef _PDCLIB_AUX_H
-#define _PDCLIB_AUX_H _PDCLIB_AUX_H
-#include <_PDCLIB_aux.h>
+#ifndef _PDCLIB_INT_H
+#define _PDCLIB_INT_H _PDCLIB_INT_H
+#include <_PDCLIB_int.h>
+#endif
+
+#ifndef _PDCLIB_SIZE_T_DEFINED
+#define _PDCLIB_SIZE_T_DEFINED _PDCLIB_SIZE_T_DEFINED
+typedef _PDCLIB_size_t size_t;
 #endif
 
-typedef void * FILE;
+#ifndef _PDCLIB_NULL_DEFINED
+#define _PDCLIB_NULL_DEFINED _PDCLIB_NULL_DEFINED
+#define NULL _PDCLIB_NULL
+#endif
+
+/* See setvbuf(), third argument */
+/* Fully buffered - transmit block-wise */
+#define _IOFBF 1
+/* Line buffered - transmit line-wise */
+#define _IOLBF 2
+/* Not buffered - transmit immediately */
+#define _IONBF 4
+
+/* See setbuf(). Minimum 256. */
+#define BUFSIZ 1024
+
+/* Internal-only flags for representing mode */
+#define _PDCLIB_FREAD    1
+#define _PDCLIB_FWRITE   2
+#define _PDCLIB_FAPPEND  4
+#define _PDCLIB_FRW      8
+#define _PDCLIB_FBIN    16
+
+typedef struct _PDCLIB_file_t FILE;
+typedef _PDCLIB_fpos_t        fpos_t;
+
+/* Must be integer and of negative value */
+#define EOF -1
+
+/* Maximum number of files this implementation can open simultaneously. Minimum 8. */
+#define FOPEN_MAX 1
+
+/* Maximum file name length (plus terminating \0) this implementation does
+   guarantee can be opened. If there is no limit on the length of filenames,
+   this should be a recommended size for filename buffers.
+*/
+#define FILENAME_MAX 1024
 
-extern void * stderr;
+/* Buffer size for tmpnam() */
+#define L_tmpnam 1024
 
+/* Number of distinct file names that can be generated by tmpnam(). */
+#define TMP_MAX 50
+
+/* See fseek(), third argument */
+#define SEEK_CUR 1
+#define SEEK_END 2
+#define SEEK_SET 4
+
+typedef struct
+{
+    _PDCLIB_fd_t   handle;   /* OS-specific file descriptor */
+    _PDCLIB_fpos_t position; /* file position indicator */
+    void *         buffer;   /* file buffer */
+    size_t         bufsize;  /* size of buffer */
+    int            status;   /* misc. status bits */
+  /*mbstate_t      mbstate;*//* multibyte parse state */ /* TODO: Unmask. */
+    FILE *         next;     /* provisions for linked list handling */
+} FILE;
+
+/* Text-mode I/O is at liberty to skip non-printing characters and trailing spaces.
+   Binary I/O is at liberty to add trailing zero bytes.
+   First operation decides "orientation" of the stream (wide / byte).
+   freopen() removes orientation; see also fwide().
+   Binary wide-oriented streams have the file-positioning restrictions ascribed to both text and binary streams.
+   For wide-oriented streams, after a successful call to a file-positioning function that leaves the file position indicator prior to the end-of-file, a wide character output function can overwrite a partial multibyte character; any file contents beyond the byte(s) written are henceforth indeterminate.
+   Whether a file of zero length (unwritten-to) actually exists is implementation-defined.
+   Wide text input from file: fgetwc() / mbrtowc()
+   Wide text output to file: wcrtomb() / fputwc()
+   Multibyte encoding in file may contain embedded null bytes
+   Multibyte encoding in file need not begin / end in initial shift state.
+   Conversion may trigger EILSEQ.
+*/
+
+/* Operations on files */
+int remove( const char * filename );
+int rename( const char * old, const char * new );
+FILE * tmpfile( void ); /* TODO: Implement. */
+char * tmpnam( char * s ); /* TODO: Implement. */
+
+/* File access functions */
+int fclose( FILE * stream );
+int fflush( FILE * stream );
+FILE * fopen( const char * _PDCLIB_restrict filename, const char * _PDCLIB_restrict mode );
+FILE * freopen( const char * _PDCLIB_restrict filename, const char * _PDCLIB_restrict mode, FILE * _PDCLIB_restrict stream );
+void setbuf( FILE * _PDCLIB_restrict stream, char * _PDCLIB_restrict buf );
+int setvbuf( FILE * _PDCLIB_restrict stream, char * _PDCLIB_restrict buf, int mode, size_t size );
+
+/* Formatted input/output functions */
+int fprintf( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict format, ... );
+int fscanf( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict format, ... );
 int printf( const char * _PDCLIB_restrict format, ... );
+int scanf( const char * _PDCLIB_restrict format, ... );
+int snprintf( char * _PDCLIB_restrict s, size_t n, const char * _PDCLIB_restrict format, ... );
+int sprintf( char * _PDCLIB_restrict s, const char * _PDCLIB_restrict format, ... );
+int sscanf( const char * _PDCLIB_restrict s, const char * _PDCLIB_restrict format, ... );
+int vfprintf( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg );
+int vfscanf( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg );
+int vprintf( const char * _PDCLIB_restrict format, _PDCLIB_va_list arg );
+int vscanf( const char * _PDCLIB_restrict format, _PDCLIB_va_list arg );
+int vsnprintf( char * _PDCLIB_restrict s, size_t n, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg );
+int vsprintf( char * _PDCLIB_restrict s, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg );
+int vsscanf( const char * _PDCLIB_restrict s, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg );
+
+/* Character input/output functions */
+int fgetc( FILE * stream );
+char * fgets( char * _PDCLIB_restrict s, int n, FILE * _PDCLIB_restrict stream );
+int fputc( int c, FILE * stream );
 int fputs( const char * _PDCLIB_restrict s, FILE * _PDCLIB_restrict stream );
-int puts( const char * _PDCLIB_restrict s );
+int getc( FILE * stream );
+int getchar( void );
+char * gets( char * s );
+int putc( int c, FILE * stream );
+int putchar( int c );
+int puts( const char * s );
+int ungetc( int c, FILE * stream );
+
+/* Direct input/output functions */
+size_t fread( void * _PDCLIB_restrict ptr, size_t size, size_t nmemb, FILE * _PDCLIB_restrict stream );
+size_t fwrite( const void * _PDCLIB_restrict ptr, size_t size, size_t nmemb, FILE * _PDCLIB_restrict stream );
+
+/* File positioning functions */
+int fgetpos( FILE * _PDCLIB_restrict stream, fpos_t * _PDCLIB_restrict pos );
+int fseek( FILE * stream, long int offset, int whence );
+int fsetpos( FILE * stream, const fpos_t * pos );
+long int ftell( FILE * stream );
+void rewind( FILE * stream );
+
+/* Error-handling functions */
+void clearerr( FILE * stream );
+int feof( FILE * stream );
+int ferror( FILE * stream );
+void perror( const char * s );
 
 #endif