/*
(*
** ATS2CPP:
** API for ATSLIB/stdio
*)
(* ****** ****** *)
(*
** Permission to use, copy, modify, and distribute this software for any
** purpose with or without fee is hereby granted, provided that the above
** copyright notice and this permission notice appear in all copies.
** 
** THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
** WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
** MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
** ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
** WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
** ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
** OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*)
*/
/* ****** ****** */

#ifndef ATS2CPP_LIBATS_LIBC_CATS_STDIO
#define ATS2CPP_LIBATS_LIBC_CATS_STDIO

/* ****** ****** */
//
#include <stdio.h>
#include <stdlib.h>
/*
extern
void
perror (const char* str) ; // in [stdio.h]
extern void exit (int status) ; // in [stdlib.h]
*/
//
/* ****** ****** */

#define \
atslib_libats_libc_clearerr(p) clearerr(((FILE*)p))

/* ****** ****** */

#define atslib_libats_libc_fopen fopen
#define atslib_libats_libc_fopen_ref_exn atslib_libats_libc_fopen_exn

/* ****** ****** */

#define atslib_libats_libc_fclose fclose
#define atslib_libats_libc_fclose0 atslib_libats_libc_fclose
#define atslib_libats_libc_fclose1 atslib_libats_libc_fclose
#define atslib_libats_libc_fclose0_exn atslib_libats_libc_fclose_exn
#define atslib_libats_libc_fclose1_exn atslib_libats_libc_fclose_exn

/*
#define atslib_libats_libc_fclose_stdin() atslib_libats_libc_fclose_exn(stdin)
#define atslib_libats_libc_fclose_stdout() atslib_libats_libc_fclose_exn(stdout)
#define atslib_libats_libc_fclose_stderr() atslib_libats_libc_fclose_exn(stderr)
*/

/* ****** ****** */
//
#define atslib_libats_libc_fflush fflush
#define atslib_libats_libc_fflush0 atslib_libats_libc_fflush
#define atslib_libats_libc_fflush1 atslib_libats_libc_fflush
#define atslib_libats_libc_fflush0_exn atslib_libats_libc_fflush_exn
#define atslib_libats_libc_fflush1_exn atslib_libats_libc_fflush_exn
//
#define atslib_libats_libc_fflush_all() atslib_libats_libc_fclose_exn((FILE*)0)
#define atslib_libats_libc_fflush_stdout() atslib_libats_libc_fclose_exn(stdout)
//
/* ****** ****** */

#define atslib_libats_libc_fileno fileno
#define atslib_libats_libc_fileno0 atslib_libats_libc_fileno
#define atslib_libats_libc_fileno1 atslib_libats_libc_fileno

/* ****** ****** */

#define atslib_libats_libc_fdopen fdopen

/* ****** ****** */

#define \
atslib_libats_libc_feof(p) feof(((FILE*)p))
#define atslib_libats_libc_feof0 atslib_libats_libc_feof
#define atslib_libats_libc_feof1 atslib_libats_libc_feof

/* ****** ****** */

#define \
atslib_libats_libc_ferror(p) ferror(((FILE*)p))
#define atslib_libats_libc_ferror0 atslib_libats_libc_ferror
#define atslib_libats_libc_ferror1 atslib_libats_libc_ferror

/* ****** ****** */

#define atslib_libats_libc_fgetc fgetc
#define atslib_libats_libc_fgetc0 atslib_libats_libc_fgetc
#define atslib_libats_libc_fgetc1 atslib_libats_libc_fgetc

/* ****** ****** */

#define atslib_libats_libc_getchar getchar
#define atslib_libats_libc_getchar0 atslib_libats_libc_getchar
#define atslib_libats_libc_getchar1 atslib_libats_libc_getchar

/* ****** ****** */

#define atslib_libats_libc_fputc fputc
#define atslib_libats_libc_fputc0_int atslib_libats_libc_fputc
#define atslib_libats_libc_fputc0_char(c, fp) atslib_libats_libc_fputc((int)c, fp)
#define atslib_libats_libc_fputc1_int atslib_libats_libc_fputc
#define atslib_libats_libc_fputc1_char(c, fp) atslib_libats_libc_fputc((int)c, fp)

#define atslib_libats_libc_fputc0_exn_int atslib_libats_libc_fputc_exn
#define atslib_libats_libc_fputc0_exn_char atslib_libats_libc_fputc_exn

/* ****** ****** */

#define atslib_libats_libc_putchar putchar
#define atslib_libats_libc_putchar0 atslib_libats_libc_putchar
#define atslib_libats_libc_putchar1 atslib_libats_libc_putchar

/* ****** ****** */

#define atslib_libats_libc_fgets fgets
#define atslib_libats_libc_fgets0 atslib_libats_libc_fgets
#define atslib_libats_libc_fgets1 atslib_libats_libc_fgets
#define atslib_libats_libc_fgets1_err atslib_libats_libc_fgets
#define atslib_libats_libc_fgets0_gc atslib_libats_libc_fgets_gc
#define atslib_libats_libc_fgets1_gc atslib_libats_libc_fgets_gc

/* ****** ****** */

#define atslib_libats_libc_fputs fputs
#define atslib_libats_libc_fputs0 atslib_libats_libc_fputs
#define atslib_libats_libc_fputs1 atslib_libats_libc_fputs
#define atslib_libats_libc_fputs0_exn atslib_libats_libc_fputs_exn
#define atslib_libats_libc_fputs1_exn atslib_libats_libc_fputs_exn

/* ****** ****** */

#define atslib_libats_libc_puts puts

/* ****** ****** */

#define atslib_libats_libc_fread fread
#define atslib_libats_libc_fread0 atslib_libats_libc_fread
#define atslib_libats_libc_fread1 atslib_libats_libc_fread

/* ****** ****** */

#define atslib_libats_libc_fwrite fwrite
#define atslib_libats_libc_fwrite0 atslib_libats_libc_fwrite
#define atslib_libats_libc_fwrite1 atslib_libats_libc_fwrite

/* ****** ****** */

#define atslib_libats_libc_fseek fseek
#define atslib_libats_libc_fseek0 atslib_libats_libc_fseek
#define atslib_libats_libc_fseek1 atslib_libats_libc_fseek

/* ****** ****** */

#define atslib_libats_libc_ftell ftell
#define atslib_libats_libc_ftell0 atslib_libats_libc_ftell
#define atslib_libats_libc_ftell1 atslib_libats_libc_ftell

/* ****** ****** */

#define atslib_libats_libc_perror perror

/* ****** ****** */

#define atslib_libats_libc_popen popen

/* ****** ****** */

#define atslib_libats_libc_pclose0_exn atslib_libats_libc_pclose_exn
#define atslib_libats_libc_pclose1_exn atslib_libats_libc_pclose_exn

/* ****** ****** */

#define atslib_libats_libc_remove remove
#define atslib_libats_libc_rename rename

/* ****** ****** */

#define atslib_libats_libc_rewind rewind
#define atslib_libats_libc_rewind0 atslib_libats_libc_rewind
#define atslib_libats_libc_rewind1 atslib_libats_libc_rewind

/* ****** ****** */

#define atslib_libats_libc_tmpfile tmpfile
#define atslib_libats_libc_tmpfile_ref_exn atslib_libats_libc_tmpfile_exn

/* ****** ****** */

#endif // end of ifndef(ATS2CPP_LIBATS_LIBC_CATS_STDIO)

/* ****** ****** */

/* end of [stdio.cats] */
