39#if !defined(__AVR_TINY__) && !defined(__cplusplus)
180# define FSTR(str) ({ static const __flash char c[] = (str); &c[0]; })
201# define FXSTR(str) ({ static const __flashx char c[] = (str); &c[0]; })
263#define FLIT(str) ((const __flash char[]) { str })
270#define FXLIT(str) ((const __flashx char[]) { str })
1029#define vfprintf_FSTR(stream, fmt, ap) vfprintf_F(stream, FSTR(fmt), ap)
1034#define printf_FSTR(fmt, ...) printf_F(FSTR(fmt), ##__VA_ARGS__)
1039#define sprintf_FSTR(s, fmt, ...) sprintf_F(s, FSTR(fmt), ##__VA_ARGS__)
1044#define snprintf_FSTR(s, n, fmt, ...) snprintf_F(s, n, FSTR(fmt), ##__VA_ARGS__)
1049#define vsprintf_FSTR(s, fmt, ap) vsprintf_F(s, FSTR(fmt), ap)
1054#define vsnprintf_FSTR(s, n, fmt, ap) vsnprintf_F(s, n, FSTR(fmt), ap);
1059#define fprintf_FSTR(stream, fmt, ...) fprintf_F(stream, FSTR(fmt), ##__VA_ARGS__)
1064#define fputs_FSTR(str, stream) fputs_F(FSTR(str), stream);
1069#define puts_FSTR(str) puts_F(FSTR(str));
1074#define vfscanf_FSTR(stream, fmt, ap) vfscanf_F(stream, FSTR(fmt), ap);
1079#define fscanf_FSTR(stream, fmt, ...) fscanf_F(stream, FSTR(fmt), ##__VA_ARGS__)
1084#define scanf_FSTR(fmt, ...) scanf_F(FSTR(fmt), ##__VA_ARGS__)
1089#define sscanf_FSTR(buf, fmt, ...) sscanf_F(buf, FSTR(fmt), ##__VA_ARGS__)
1223#define __need_size_t
1225#include <bits/attribs.h>
1229#define FSTR(s) (__extension__({static const __flash char __c[] = (s); &__c[0];}))
1230#define FLIT(lit) ((const __flash char[]) { lit })
1232extern const __flash void *
memchr_F(
const __flash void *,
int __val,
size_t __len) __asm(
"memchr_P") __ATTR_CONST__;
1242extern __ATTR_ALWAYS_INLINE__ __ATTR_GNU_INLINE__
1245 register const __flash char *__r24 __asm(
"24") = __hay;
1246 register int __r22 __asm(
"22") = __val;
1247 __asm (
"%~call strchr_P"
1248 :
"+r" (__r24) :
"r" (__r22) :
"0",
"30",
"31");
1266extern
char *
strtok_F(
char *, const
__flash char * __delim) __asm("strtok_P");
1270extern __ATTR_ALWAYS_INLINE__ __ATTR_GNU_INLINE__
1273 register size_t __r20 __asm(
"20") = __s;
1275 __asm
volatile (
"%~call __memcpy_P" :
"+x" (__x),
"+z" (__z),
"+r" (__r20)
1281extern int strcmp_F (
const char*,
const __flash char*) __asm (
"strcmp_P");
1282extern __ATTR_ALWAYS_INLINE__ __ATTR_GNU_INLINE__
1285 register int __ret __asm(
"24");
1286 __asm (
"%~call __strcmp_P"
1287 :
"=r" (__ret),
"+x" (__x),
"+z" (__z) ::
"memory");
1293extern char*
strcpy_F (
char *__x,
const __flash char *__z) __asm(
"strcpy_P");
1294extern __ATTR_ALWAYS_INLINE__ __ATTR_GNU_INLINE__
1298 __asm
volatile (
"%~call __strcpy_P"
1299 :
"+x" (__x),
"+z" (__z) ::
"0",
"memory");
1304extern char*
stpcpy_F (
char *__x,
const __flash char *__z) __asm(
"stpcpy_P");
1305extern __ATTR_ALWAYS_INLINE__ __ATTR_GNU_INLINE__
1308 __asm
volatile (
"%~call __strcpy_P"
1309 :
"+x" (__x),
"+z" (__z) ::
"0",
"memory");
1316extern __ATTR_ALWAYS_INLINE__ __ATTR_GNU_INLINE__
1319#ifdef __BUILTIN_AVR_STRLEN_FLASH
1320 if (__builtin_constant_p (__builtin_avr_strlen_flash (__s)))
1321 return __builtin_avr_strlen_flash (__s);
1324 register const __flash char *__r24 __asm(
"24") = __s;
1325 register size_t __res __asm(
"24");
1326 __asm (
"%~call strlen_P" :
"=r" (__res) :
"r" (__r24)
1352#define FXSTR(s) (__extension__({static const __flashx char __c[] = (s); &__c[0];}))
1353#define FXLIT(lit) ((const __flashx char[]) { lit })
1355extern size_t strnlen_FX(
const __flashx char *,
size_t) __asm(
"strnlen_PF") __ATTR_CONST__;
1372#ifdef __BUILTIN_AVR_STRLEN_FLASHX
1373extern size_t __strlen_FX(
const __flashx char*) __asm(
"strlen_PF") __ATTR_CONST__;
1375static inline __ATTR_ALWAYS_INLINE__
size_t
1378 return __builtin_constant_p (__builtin_avr_strlen_flashx (__s))
1379 ? __builtin_avr_strlen_flashx (__s)
1380 : __strlen_FX (__s);
1392#include <bits/lpm-elpm.h>
1393#include <bits/def-flash-read.h>
1395#if __SIZEOF_LONG_LONG__ == 8
1397_Avrlibc_Def_F_8 (i64,
int64_t)
1400#if __SIZEOF_DOUBLE__ == 8
1401_Avrlibc_Def_F_8 (
double,
double)
1403_Avrlibc_Def_F_4 (
double,
double)
1406#if __SIZEOF_LONG_DOUBLE__ == 8
1407_Avrlibc_Def_F_8 (long_double,
long double)
1409_Avrlibc_Def_F_4 (long_double,
long double)
1416#include <bits/lpm-elpm.h>
1418#if defined(__AVR_HAVE_ELPM__)
1419#define __ELPM__8fx(r,a,T) __ELPM__8(r,a,T)
1421#define __ELPM__8fx(r,a,T) uint16_t __a = (uint16_t)(__uint24) a; __LPM__8(r,__a)
1425#define _Avrlibc_Def_FX_4(Name, Typ) \
1426 static __ATTR_ALWAYS_INLINE__ \
1427 Typ flashx_read_##Name (const __flashx Typ *__addr) \
1432#define _Avrlibc_Def_FX_8(Name, Typ) \
1433 static __ATTR_ALWAYS_INLINE__ \
1434 Typ flashx_read_##Name (const __flashx Typ *__addr) \
1437 __ELPM__8fx (__res, __addr, Typ); \
1441#if __SIZEOF_LONG_LONG__ == 8
1443_Avrlibc_Def_FX_8 (i64,
int64_t)
1446#if __SIZEOF_DOUBLE__ == 8
1447_Avrlibc_Def_FX_8 (
double,
double)
1449_Avrlibc_Def_FX_4 (
double,
double)
1452#if __SIZEOF_LONG_DOUBLE__ == 8
1453_Avrlibc_Def_FX_8 (long_double,
long double)
1455_Avrlibc_Def_FX_4 (long_double,
long double)
size_t strcspn_F(const char *s, const __flash char *reject)
char * strcat_F(char *, const __flash char *)
size_t strlen_FX(const __flashx char *src)
Obtain the length of a string located in address-space __flashx.
static long double flash_read_long_double(const __flash long double *addr)
int fscanf_F(FILE *stream, const __flash char *fmt,...)
int strcmp_F(const char *, const __flash char *)
int strncmp_F(const char *, const __flash char *, size_t)
int strncmp_FX(const char *s1, const __flashx char *s2, size_t n)
Compare two strings with limited length.
int vfscanf_F(FILE *stream, const __flash char *fmt, va_list ap)
__flashx
Definition: flash.h:986
static double flashx_read_double(const __flashx double *addr)
static int64_t flashx_read_i64(const __flashx int64_t *addr)
void * memmem_F(const void *, size_t, const __flash void *, size_t)
static uint64_t flash_read_u64(const __flash uint64_t *addr)
int strcmp_FX(const char *s1, const __flashx char *s2)
Compares two strings.
char * strncpy_FX(char *dest, const __flashx char *src, size_t len)
Duplicate a string from address-space __flashx until a limited length.
void * memcpy_F(void *, const __flash void *, size_t)
const __flash void * memchr_F(const __flash void *, int, size_t)
Scan flash memory for a character.
static uint64_t flashx_read_u64(const __flashx uint64_t *addr)
int puts_F(const __flash char *str)
char * strpbrk_F(const char *, const __flash char *accept)
char * stpcpy_F(char *, const __flash char *)
size_t strspn_F(const char *s, const __flash char *accept)
int scanf_F(const __flash char *fmt,...)
int printf_F(const __flash char *fmt,...)
char * strstr_FX(const char *s1, const __flashx char *s2)
Locate a substring.
const __flash char * strchr_F(const __flash char *, int val)
Locate character in a string in address-space __flash.
const __flashx char * strchr_FX(const __flashx char *s, int val)
Locate a character in a string located in address-space __flashx.
int vsnprintf_F(char *s, size_t n, const __flash char *fmt, va_list ap)
static size_t strlen_F(const __flash char *src)
char * strncat_FX(char *dest, const __flashx char *src, size_t len)
Concatenate two strings.
int vfprintf_F(FILE *stream, const __flash char *fmt, va_list ap)
size_t strlcpy_FX(char *, const __flashx char *, size_t)
Copy a string from address-space __flashx to RAM.
const __flash char * strchrnul_F(const __flash char *, int val)
char * strtok_F(char *s, const __flash char *delim)
Parses the string into tokens.
int strcasecmp_F(const char *, const __flash char *)
Compare two strings ignoring case.
__flash
Definition: flash.h:960
char * strcasestr_F(const char *, const __flash char *)
int fprintf_F(FILE *stream, const __flash char *fmt,...)
char * strncat_F(char *, const __flash char *, size_t)
Concatenate two strings.
char * strsep_F(char **sp, const __flash char *delim)
Parse a string into tokens.
int sprintf_F(char *s, const __flash char *fmt,...)
char * strcpy_FX(char *dest, const __flashx char *src)
Duplicate a string from address-space __flashx.
void * memccpy_F(void *, const __flash void *, int val, size_t)
size_t strlcat_F(char *, const __flash char *, size_t)
Concatenate two strings.
const __flash void * memrchr_F(const __flash void *, int val, size_t len)
char * strcat_FX(char *dest, const __flashx char *src)
Concatenates two strings.
int memcmp_F(const void *, const __flash void *, size_t)
Compare memory areas.
static int64_t flash_read_i64(const __flash int64_t *addr)
char * strncpy_F(char *, const __flash char *, size_t)
int memcmp_FX(const void *s1, const __flashx void *s2, size_t)
Compare memory areas.
char * strcpy_F(char *, const __flash char *)
int sscanf_F(const char *buf, const __flash char *fmt,...)
size_t strlcat_FX(char *dst, const __flashx char *src, size_t siz)
Concatenate two strings.
__memx
Definition: flash.h:1019
int strcasecmp_FX(const char *s1, const __flashx char *s2)
Compare two strings ignoring case.
int strncasecmp_FX(const char *s1, const __flashx char *s2, size_t n)
Compare two strings ignoring case.
int fputs_F(const __flash char *str, FILE *stream)
size_t strnlen_FX(const __flashx char *src, size_t len)
Determine the length of a fixed-size string in address-space __flashx.
static long double flashx_read_long_double(const __flashx long double *addr)
int strncasecmp_F(const char *, const __flash char *, size_t)
Compare two strings ignoring case.
void * memcpy_FX(void *dest, const __flashx void *src, size_t len)
Copy a memory block from address-space __flashx to SRAM.
char * strtok_rF(char *s, const __flash char *delim, char **last)
Parses string into tokens.
static double flash_read_double(const __flash double *addr)
char * strstr_F(const char *, const __flash char *)
Locate a substring.
size_t strnlen_F(const __flash char *, size_t)
Determine the length of a fixed-size string.
const __flash char * strrchr_F(const __flash char *, int val)
Locate character in string.
char * stpcpy_FX(char *dest, const __flashx char *src)
Duplicate a string from address-space __flashx.
size_t strlcpy_F(char *, const __flash char *, size_t)
Copy a string from address-space __flash to RAM.
int vsprintf_F(char *s, const __flash char *fmt, va_list ap)
int snprintf_F(char *s, size_t n, const __flash char *fmt,...)
char * strstr_PF(const char *s1, uint_farptr_t s2)
Locate a substring.
const char * strchr_P(const char *, int __val)
Locate character in program space string.
int strcmp_PF(const char *s1, uint_farptr_t s2)
Compares two strings.
void * memcpy_PF(void *dest, uint_farptr_t src, size_t len)
Copy a memory block from flash to SRAM.
char * strsep_P(char **__sp, const char *__delim)
Parse a string into tokens.
char * strcasestr_P(const char *, const char *)
char * strncpy_P(char *, const char *, size_t)
const void * memrchr_P(const void *, int __val, size_t __len)
int strcasecmp_P(const char *, const char *)
Compare two strings ignoring case.
size_t strcspn_P(const char *__s, const char *__reject)
char * strpbrk_P(const char *__s, const char *__accept)
void * memccpy_P(void *, const void *, int __val, size_t)
char * strtok_rP(char *__s, const char *__delim, char **__last)
Parses string into tokens.
char * strncpy_PF(char *dest, uint_farptr_t src, size_t len)
Duplicate a string until a limited length.
void * memmem_P(const void *, size_t, const void *, size_t)
char * stpcpy_PF(char *dest, uint_farptr_t src)
Duplicate a string.
size_t strnlen_P(const char *, size_t)
Determine the length of a fixed-size string.
char * strcat_P(char *, const char *)
int strncasecmp_P(const char *, const char *, size_t)
Compare two strings ignoring case.
size_t strspn_P(const char *__s, const char *__accept)
size_t strlcpy_PF(char *dst, uint_farptr_t src, size_t siz)
Copy a string from progmem to RAM.
int memcmp_PF(const void *, uint_farptr_t, size_t)
Compare memory areas.
const char * strrchr_P(const char *, int __val)
Locate character in string.
int strcasecmp_PF(const char *s1, uint_farptr_t s2)
Compare two strings ignoring case.
char * strncat_P(char *, const char *, size_t)
Concatenate two strings.
char * strncat_PF(char *dest, uint_farptr_t src, size_t len)
Concatenate two strings.
char * strcat_PF(char *dest, uint_farptr_t src)
Concatenates two strings.
int strncmp_P(const char *, const char *, size_t)
char * strstr_P(const char *, const char *)
Locate a substring.
int memcmp_P(const void *, const void *, size_t)
Compare memory areas.
int strncasecmp_PF(const char *s1, uint_farptr_t s2, size_t n)
Compare two strings ignoring case.
char * strcpy_PF(char *dest, uint_farptr_t src)
Duplicate a string.
int strncmp_PF(const char *s1, uint_farptr_t s2, size_t n)
Compare two strings with limited length.
void * memcpy_P(void *, const void *, size_t)
uint_farptr_t strchr_PF(uint_farptr_t, int __val)
Locate character in far program space string.
size_t strlcat_PF(char *dst, uint_farptr_t src, size_t siz)
Concatenate two strings.
signed long long int int64_t
Definition: stdint.h:108
unsigned long long int uint64_t
Definition: stdint.h:115
int scanf_P(const char *__fmt,...)
Definition: scanf_p.c:36
int sprintf_P(char *__s, const char *__fmt,...)
Definition: sprintf_p.c:37
int fprintf_P(FILE *__stream, const char *__fmt,...)
Definition: fprintf_p.c:36
int fputs_P(const char *__str, FILE *__stream)
Definition: fputs_p.c:38
int printf_P(const char *__fmt,...)
Definition: printf_p.c:36
int snprintf_P(char *__s, size_t __n, const char *__fmt,...)
Definition: snprintf_p.c:36
int vfscanf_P(FILE *__stream, const char *__fmt, va_list __ap)
Definition: vfscanf_p.c:36
int fscanf_P(FILE *__stream, const char *__fmt,...)
Definition: fscanf_p.c:36
int puts_P(const char *__str)
Definition: puts_p.c:38
int vsprintf_P(char *__s, const char *__fmt, va_list __ap)
Definition: vsprintf_p.c:37
int vsnprintf_P(char *__s, size_t __n, const char *__fmt, va_list __ap)
Definition: vsnprintf_p.c:36
int sscanf_P(const char *__buf, const char *__fmt,...)
Definition: sscanf_p.c:37
struct __file FILE
Definition: stdio.h:281