00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #ifndef _STDIO_H_
00040 #define _STDIO_H_ 1
00041
00042 #ifndef __ASSEMBLER__
00043
00044 #include <inttypes.h>
00045 #include <stdarg.h>
00046
00047 #define __need_NULL
00048 #define __need_size_t
00049 #include <stddef.h>
00050
00235 #if !defined(__DOXYGEN__)
00236
00237
00238
00239
00240
00241
00242 struct __file {
00243 char *buf;
00244 unsigned char unget;
00245 uint8_t flags;
00246 #define __SRD 0x0001
00247 #define __SWR 0x0002
00248 #define __SSTR 0x0004
00249 #define __SPGM 0x0008
00250 #define __SERR 0x0010
00251 #define __SEOF 0x0020
00252 #define __SUNGET 0x040
00253 #define __SMALLOC 0x80
00254 #if 0
00255
00256 #define __SRW 0x0100
00257 #define __SLBF 0x0200
00258 #define __SNBF 0x0400
00259 #define __SMBF 0x0800
00260 #endif
00261 int size;
00262 int len;
00263 int (*put)(char, struct __file *);
00264 int (*get)(struct __file *);
00265 void *udata;
00266 };
00267
00268 #endif
00269
00275 #define FILE struct __file
00276
00284 #define stdin (__iob[0])
00285
00293 #define stdout (__iob[1])
00294
00304 #define stderr (__iob[2])
00305
00312 #define EOF (-1)
00313
00319 #define fdev_set_udata(stream, u) do { (stream)->udata = u; } while(0)
00320
00323 #define fdev_get_udata(stream) ((stream)->udata)
00324
00325 #if defined(__DOXYGEN__)
00326
00346 #define fdev_setup_stream(stream, put, get, rwflag)
00347 #else
00348 #define fdev_setup_stream(stream, p, g, f) \
00349 do { \
00350 (stream)->put = p; \
00351 (stream)->get = g; \
00352 (stream)->flags = f; \
00353 (stream)->udata = 0; \
00354 } while(0)
00355 #endif
00356
00357 #define _FDEV_SETUP_READ __SRD
00358 #define _FDEV_SETUP_WRITE __SWR
00359 #define _FDEV_SETUP_RW (__SRD|__SWR)
00366 #define _FDEV_ERR (-1)
00367
00373 #define _FDEV_EOF (-2)
00374
00375 #if defined(__DOXYGEN__)
00376
00385 #define FDEV_SETUP_STREAM(put, get, rwflag)
00386 #else
00387 #define FDEV_SETUP_STREAM(p, g, f) \
00388 { \
00389 .put = p, \
00390 .get = g, \
00391 .flags = f, \
00392 .udata = 0, \
00393 }
00394 #endif
00395
00396 #ifdef __cplusplus
00397 extern "C" {
00398 #endif
00399
00400 #if !defined(__DOXYGEN__)
00401
00402
00403
00404
00405 extern struct __file *__iob[];
00406
00407 #if defined(__STDIO_FDEVOPEN_COMPAT_12)
00408
00409
00410
00411
00412
00413 extern FILE *fdevopen(int (*__put)(char), int (*__get)(void),
00414 int __opts __attribute__((unused)));
00415 #else
00416
00417 extern FILE *fdevopen(int (*__put)(char, FILE*), int (*__get)(FILE*));
00418 #endif
00419
00420 #endif
00421
00434 extern int fclose(FILE *__stream);
00435
00445 #if defined(__DOXYGEN__)
00446 # define fdev_close()
00447 #else
00448 # define fdev_close() ((void)0)
00449 #endif
00450
00608 extern int vfprintf(FILE *__stream, const char *__fmt, va_list __ap);
00609
00614 extern int vfprintf_P(FILE *__stream, const char *__fmt, va_list __ap);
00615
00621 extern int fputc(int __c, FILE *__stream);
00622
00623 #if !defined(__DOXYGEN__)
00624
00625
00626 extern int putc(int __c, FILE *__stream);
00627
00628
00629 extern int putchar(int __c);
00630
00631 #endif
00632
00638 #define putc(__c, __stream) fputc(__c, __stream)
00639
00643 #define putchar(__c) fputc(__c, stdout)
00644
00649 extern int printf(const char *__fmt, ...);
00650
00655 extern int printf_P(const char *__fmt, ...);
00656
00663 extern int vprintf(const char *__fmt, va_list __ap);
00664
00669 extern int sprintf(char *__s, const char *__fmt, ...);
00670
00675 extern int sprintf_P(char *__s, const char *__fmt, ...);
00676
00685 extern int snprintf(char *__s, size_t __n, const char *__fmt, ...);
00686
00691 extern int snprintf_P(char *__s, size_t __n, const char *__fmt, ...);
00692
00697 extern int vsprintf(char *__s, const char *__fmt, va_list ap);
00698
00703 extern int vsprintf_P(char *__s, const char *__fmt, va_list ap);
00704
00713 extern int vsnprintf(char *__s, size_t __n, const char *__fmt, va_list ap);
00714
00719 extern int vsnprintf_P(char *__s, size_t __n, const char *__fmt, va_list ap);
00724 extern int fprintf(FILE *__stream, const char *__fmt, ...);
00725
00730 extern int fprintf_P(FILE *__stream, const char *__fmt, ...);
00731
00737 extern int fputs(const char *__str, FILE *__stream);
00738
00742 extern int fputs_P(const char *__str, FILE *__stream);
00743
00748 extern int puts(const char *__str);
00749
00753 extern int puts_P(const char *__str);
00754
00762 extern size_t fwrite(const void *__ptr, size_t __size, size_t __nmemb,
00763 FILE *__stream);
00764
00771 extern int fgetc(FILE *__stream);
00772
00773 #if !defined(__DOXYGEN__)
00774
00775
00776 extern int getc(FILE *__stream);
00777
00778
00779 extern int getchar(void);
00780
00781 #endif
00782
00788 #define getc(__stream) fgetc(__stream)
00789
00794 #define getchar() fgetc(stdin)
00795
00810 extern int ungetc(int __c, FILE *__stream);
00811
00822 extern char *fgets(char *__str, int __size, FILE *__stream);
00823
00829 extern char *gets(char *__str);
00830
00840 extern size_t fread(void *__ptr, size_t __size, size_t __nmemb,
00841 FILE *__stream);
00842
00846 extern void clearerr(FILE *__stream);
00847
00848 #if !defined(__DOXYGEN__)
00849
00850 #define clearerror(s) do { (s)->flags &= ~(__SERR | __SEOF); } while(0)
00851 #endif
00852
00857 extern int feof(FILE *__stream);
00858
00859 #if !defined(__DOXYGEN__)
00860
00861 #define feof(s) ((s)->flags & __SEOF)
00862 #endif
00863
00868 extern int ferror(FILE *__stream);
00869
00870 #if !defined(__DOXYGEN__)
00871
00872 #define ferror(s) ((s)->flags & __SERR)
00873 #endif
00874
00875 extern int vfscanf(FILE *__stream, const char *__fmt, va_list __ap);
00876
00880 extern int vfscanf_P(FILE *__stream, const char *__fmt, va_list __ap);
00881
00888 extern int fscanf(FILE *__stream, const char *__fmt, ...);
00889
00893 extern int fscanf_P(FILE *__stream, const char *__fmt, ...);
00894
00900 extern int scanf(const char *__fmt, ...);
00901
00905 extern int scanf_P(const char *__fmt, ...);
00906
00913 extern int vscanf(const char *__fmt, va_list __ap);
00914
00921 extern int sscanf(const char *__buf, const char *__fmt, ...);
00922
00926 extern int sscanf_P(const char *__buf, const char *__fmt, ...);
00927
00928 #if defined(__DOXYGEN__)
00929
00936 extern int fflush(FILE *stream);
00937 #else
00938 static __inline__ int fflush(FILE *stream __attribute__((unused)))
00939 {
00940 return 0;
00941 }
00942 #endif
00943
00944 #ifdef __cplusplus
00945 }
00946 #endif
00947
00950
00951
00952
00953
00954
00955 #define SEEK_SET 0
00956 #define SEEK_CUR 1
00957 #define SEEK_END 2
00958
00959 #endif
00960
00961 #endif