Start implementing CRT I/O
[monolithium.git] / crt / include / stdio.h
1 /*
2  * stdio.h
3  *
4  * Copyright (C) 2017 Aleksandar Andrejevic <theflash@sdf.lonestar.org>
5  *
6  * This program is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU Affero General Public License as
8  * published by the Free Software Foundation, either version 3 of the
9  * License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU Affero General Public License for more details.
15  *
16  * You should have received a copy of the GNU Affero General Public License
17  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18  */
19
20 #ifndef _STDIO_H_
21 #define _STDIO_H_
22
23 #include <stdlib.h>
24 #include <stdarg.h>
25
26 #define EOF -1
27
28 #define getc(s) fgetc(s)
29 #define getchar() fgetc(stdin)
30 #define putc(c, s) fputc(c, s)
31 #define putchar(c) fputc(c, stdout)
32
33 #define getc_unlocked(s) fgetc_unlocked(s)
34 #define getchar_unlocked() fgetc_unlocked(stdin)
35 #define putc_unlocked(c, s) fputc_unlocked(c, s)
36 #define putchar_unlocked(c) fputc(c, stdout)
37
38 struct __crt_file;
39 typedef struct __crt_file FILE;
40
41 extern FILE *stdin;
42 extern FILE *stdout;
43 extern FILE *stderr;
44
45 int fgetc(FILE *stream);
46 int fputc(int c, FILE *stream);
47 char *fgets(char *s, int size, FILE *stream);
48 int fputs(const char *s, FILE *stream);
49 int ungetc(int c, FILE *stream);
50 char *gets(char *s);
51 int puts(const char *s);
52
53 int fgetc_unlocked(FILE *stream);
54 int fputc_unlocked(int c, FILE *stream);
55 char *fgets_unlocked(char *s, int size, FILE *stream);
56 int fputs_unlocked(const char *s, FILE *stream);
57
58 FILE *fmemopen(void *buf, size_t size, const char *mode);
59 int fclose(FILE *stream);
60
61 #endif