text: /*
   * Copyright (c) 2008-2013 Travis Geiselbrecht
   *
   * Permission is hereby granted, free of charge, to any person obtaining
   * a copy of this software and associated documentation files
   * (the "Software"), to deal in the Software without restriction,
   * including without limitation the rights to use, copy, modify, merge,
   * publish, distribute, sublicense, and/or sell copies of the Software,
   * and to permit persons to whom the Software is furnished to do so,
   * subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be
   * included in all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
   * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
   * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
   * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
   * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
   * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   */
  #ifndef __STDIO_H
  #define __STDIO_H
  
  #include <compiler.h>
  #include <printf.h>
  #include <sys/types.h>
  
  __BEGIN_CDECLS
  
  typedef struct FILE {
  	void *ctx;
  	int (*fputc)(void *ctx, int c);
  	int (*fputs)(void *ctx, const char *s);
  	int (*fgetc)(void *ctx);
  	int (*vfprintf)(void *ctx, const char *fmt, va_list ap);
  } FILE;
  
  extern FILE __stdio_FILEs[];
  
  #define stdin  (&__stdio_FILEs[0])
  #define stdout (&__stdio_FILEs[1])
  #define stderr (&__stdio_FILEs[2])
  
  FILE *fopen(const char *filename, const char *mode);
  int fclose(FILE *stream);
  size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
  size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
  int fflush(FILE *stream);
  int feof(FILE *stream);
  
  #define SEEK_SET 0
  #define SEEK_CUR 1
  #define SEEK_END 2
  
  int fseek(FILE *stream, long offset, int whence);
  long ftell(FILE *stream);
  
  int fputc(int c, FILE *fp);
  #define putc(c, fp) fputc(c, fp)
  int putchar(int c);
  
  int fputs(const char *s, FILE *fp);
  int puts(const char *str);
  
  int getc(FILE *fp);
  int getchar(void);
  
  int fprintf(FILE *fp, const char *fmt, ...);
  int vfprintf(FILE *fp, const char *fmt, va_list ap);
  
  __END_CDECLS
  
  #endif
  
  