\hypertarget{group__avr__pgmspace}{}\doxysubsection{$<$avr/pgmspace.h$>$\+: Program Space Utilities}
\label{group__avr__pgmspace}\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxysubsubsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \mbox{\hyperlink{group__avr__pgmspace_ga75acaba9e781937468d0911423bc0c35}{P\+R\+O\+G\+M\+EM}}~\+\_\+\+\_\+\+A\+T\+T\+R\+\_\+\+P\+R\+O\+G\+M\+E\+M\+\_\+\+\_\+
\item 
\#define \mbox{\hyperlink{group__avr__pgmspace_ga963f816fc88a5d8479c285ed4c630229}{P\+G\+M\+\_\+P}}~const char $\ast$
\item 
\#define \mbox{\hyperlink{group__avr__pgmspace_ga84a61d55b7efefabd8419e28f02704f9}{P\+G\+M\+\_\+\+V\+O\+I\+D\+\_\+P}}~const void $\ast$
\item 
\#define \mbox{\hyperlink{group__avr__pgmspace_ga05ca900ebf7cd121be73c654d9ccb3eb}{P\+S\+TR}}(s)~((const \mbox{\hyperlink{group__avr__pgmspace_ga75acaba9e781937468d0911423bc0c35}{P\+R\+O\+G\+M\+EM}} char $\ast$)(s))
\item 
\#define \mbox{\hyperlink{group__avr__pgmspace_ga88d7dd4863f87530e1a34ece430a587c}{pgm\+\_\+read\+\_\+byte\+\_\+near}}(address\+\_\+short)~\+\_\+\+\_\+\+L\+PM((\mbox{\hyperlink{group__avr__stdint_ga1f1825b69244eb3ad2c7165ddc99c956}{uint16\+\_\+t}})(address\+\_\+short))
\item 
\#define \mbox{\hyperlink{group__avr__pgmspace_gaf51eeaa847dd2668d2a66b70ecfb7398}{pgm\+\_\+read\+\_\+word\+\_\+near}}(address\+\_\+short)~\+\_\+\+\_\+\+L\+P\+M\+\_\+word((\mbox{\hyperlink{group__avr__stdint_ga1f1825b69244eb3ad2c7165ddc99c956}{uint16\+\_\+t}})(address\+\_\+short))
\item 
\#define \mbox{\hyperlink{group__avr__pgmspace_ga7fa92c0a662403a643859e0f33b0a182}{pgm\+\_\+read\+\_\+dword\+\_\+near}}(address\+\_\+short)~\+\_\+\+\_\+\+L\+P\+M\+\_\+dword((\mbox{\hyperlink{group__avr__stdint_ga1f1825b69244eb3ad2c7165ddc99c956}{uint16\+\_\+t}})(address\+\_\+short))
\item 
\#define \mbox{\hyperlink{group__avr__pgmspace_ga066040df814dabc7980cd1422508b46b}{pgm\+\_\+read\+\_\+float\+\_\+near}}(address\+\_\+short)~\+\_\+\+\_\+\+L\+P\+M\+\_\+float((\mbox{\hyperlink{group__avr__stdint_ga1f1825b69244eb3ad2c7165ddc99c956}{uint16\+\_\+t}})(address\+\_\+short))
\item 
\#define \mbox{\hyperlink{group__avr__pgmspace_gadcfd4df2e156efc1f6a380dfc58a5b81}{pgm\+\_\+read\+\_\+ptr\+\_\+near}}(address\+\_\+short)~(void$\ast$)\+\_\+\+\_\+\+L\+P\+M\+\_\+word((\mbox{\hyperlink{group__avr__stdint_ga1f1825b69244eb3ad2c7165ddc99c956}{uint16\+\_\+t}})(address\+\_\+short))
\item 
\#define \mbox{\hyperlink{group__avr__pgmspace_ga0d4d7f6231716747c52b969d4febdeed}{pgm\+\_\+read\+\_\+byte\+\_\+far}}(address\+\_\+long)~\+\_\+\+\_\+\+E\+L\+PM((\mbox{\hyperlink{group__avr__stdint_ga33594304e786b158f3fb30289278f5af}{uint32\+\_\+t}})(address\+\_\+long))
\item 
\#define \mbox{\hyperlink{group__avr__pgmspace_gad7082c45c2c96f015c76eff1ad00a99a}{pgm\+\_\+read\+\_\+word\+\_\+far}}(address\+\_\+long)~\+\_\+\+\_\+\+E\+L\+P\+M\+\_\+word((\mbox{\hyperlink{group__avr__stdint_ga33594304e786b158f3fb30289278f5af}{uint32\+\_\+t}})(address\+\_\+long))
\item 
\#define \mbox{\hyperlink{group__avr__pgmspace_ga309908c1b7430f0d140edb78fcf8f2b9}{pgm\+\_\+read\+\_\+dword\+\_\+far}}(address\+\_\+long)~\+\_\+\+\_\+\+E\+L\+P\+M\+\_\+dword((\mbox{\hyperlink{group__avr__stdint_ga33594304e786b158f3fb30289278f5af}{uint32\+\_\+t}})(address\+\_\+long))
\item 
\#define \mbox{\hyperlink{group__avr__pgmspace_ga4a5a593aa84062ca08b3f2d564a6f466}{pgm\+\_\+read\+\_\+float\+\_\+far}}(address\+\_\+long)~\+\_\+\+\_\+\+E\+L\+P\+M\+\_\+float((\mbox{\hyperlink{group__avr__stdint_ga33594304e786b158f3fb30289278f5af}{uint32\+\_\+t}})(address\+\_\+long))
\item 
\#define \mbox{\hyperlink{group__avr__pgmspace_gaa7756dce7bcc8ba46e648981fafebbf2}{pgm\+\_\+read\+\_\+ptr\+\_\+far}}(address\+\_\+long)~(void$\ast$)\+\_\+\+\_\+\+E\+L\+P\+M\+\_\+word((\mbox{\hyperlink{group__avr__stdint_ga33594304e786b158f3fb30289278f5af}{uint32\+\_\+t}})(address\+\_\+long))
\item 
\#define \mbox{\hyperlink{group__avr__pgmspace_ga73084a8bbde259ffae72980354b3f027}{pgm\+\_\+read\+\_\+byte}}(address\+\_\+short)~\mbox{\hyperlink{group__avr__pgmspace_ga88d7dd4863f87530e1a34ece430a587c}{pgm\+\_\+read\+\_\+byte\+\_\+near}}(address\+\_\+short)
\item 
\#define \mbox{\hyperlink{group__avr__pgmspace_ga32d8ab354156f4b1ffdb77a275ba6223}{pgm\+\_\+read\+\_\+word}}(address\+\_\+short)~\mbox{\hyperlink{group__avr__pgmspace_gaf51eeaa847dd2668d2a66b70ecfb7398}{pgm\+\_\+read\+\_\+word\+\_\+near}}(address\+\_\+short)
\item 
\#define \mbox{\hyperlink{group__avr__pgmspace_gabb68859ac5dfa6a09ac048b4037a83b6}{pgm\+\_\+read\+\_\+dword}}(address\+\_\+short)~\mbox{\hyperlink{group__avr__pgmspace_ga7fa92c0a662403a643859e0f33b0a182}{pgm\+\_\+read\+\_\+dword\+\_\+near}}(address\+\_\+short)
\item 
\#define \mbox{\hyperlink{group__avr__pgmspace_ga7911bddb066a8a038efc4b7857728fa8}{pgm\+\_\+read\+\_\+float}}(address\+\_\+short)~\mbox{\hyperlink{group__avr__pgmspace_ga066040df814dabc7980cd1422508b46b}{pgm\+\_\+read\+\_\+float\+\_\+near}}(address\+\_\+short)
\item 
\#define \mbox{\hyperlink{group__avr__pgmspace_gac9f61931fd8cf4cf4764744dbaee81b6}{pgm\+\_\+read\+\_\+ptr}}(address\+\_\+short)~\mbox{\hyperlink{group__avr__pgmspace_gadcfd4df2e156efc1f6a380dfc58a5b81}{pgm\+\_\+read\+\_\+ptr\+\_\+near}}(address\+\_\+short)
\item 
\#define \mbox{\hyperlink{group__avr__pgmspace_ga8ddf0e398bde8078aa9395ac77c83f0a}{pgm\+\_\+get\+\_\+far\+\_\+address}}(var)
\end{DoxyCompactItemize}
\doxysubsubsection*{Typedefs}
\begin{DoxyCompactItemize}
\item 
typedef void \mbox{\hyperlink{group__avr__pgmspace_ga75acaba9e781937468d0911423bc0c35}{P\+R\+O\+G\+M\+EM}} \mbox{\hyperlink{group__avr__pgmspace_gadb50761b9f19d45449445208778ee420}{prog\+\_\+void}}
\item 
typedef char \mbox{\hyperlink{group__avr__pgmspace_ga75acaba9e781937468d0911423bc0c35}{P\+R\+O\+G\+M\+EM}} \mbox{\hyperlink{group__avr__pgmspace_gaa475b6b81fd8b34de45695da1da523b6}{prog\+\_\+char}}
\item 
typedef unsigned char \mbox{\hyperlink{group__avr__pgmspace_ga75acaba9e781937468d0911423bc0c35}{P\+R\+O\+G\+M\+EM}} \mbox{\hyperlink{group__avr__pgmspace_ga7d4701843a2019e3ef5a9866dc7586ed}{prog\+\_\+uchar}}
\item 
typedef \mbox{\hyperlink{group__avr__stdint_gaef44329758059c91c76d334e8fc09700}{int8\+\_\+t}} \mbox{\hyperlink{group__avr__pgmspace_ga75acaba9e781937468d0911423bc0c35}{P\+R\+O\+G\+M\+EM}} \mbox{\hyperlink{group__avr__pgmspace_ga48c7cb011ea5f82f4b73df40e07dff46}{prog\+\_\+int8\+\_\+t}}
\item 
typedef \mbox{\hyperlink{group__avr__stdint_gaba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{group__avr__pgmspace_ga75acaba9e781937468d0911423bc0c35}{P\+R\+O\+G\+M\+EM}} \mbox{\hyperlink{group__avr__pgmspace_ga39235a28487ae7790ce5f4c8178c8ed7}{prog\+\_\+uint8\+\_\+t}}
\item 
typedef \mbox{\hyperlink{group__avr__stdint_ga932e6ccc3d54c58f761c1aead83bd6d7}{int16\+\_\+t}} \mbox{\hyperlink{group__avr__pgmspace_ga75acaba9e781937468d0911423bc0c35}{P\+R\+O\+G\+M\+EM}} \mbox{\hyperlink{group__avr__pgmspace_gaafc910d0b2c4d76afffa4710b98df6fa}{prog\+\_\+int16\+\_\+t}}
\item 
typedef \mbox{\hyperlink{group__avr__stdint_ga1f1825b69244eb3ad2c7165ddc99c956}{uint16\+\_\+t}} \mbox{\hyperlink{group__avr__pgmspace_ga75acaba9e781937468d0911423bc0c35}{P\+R\+O\+G\+M\+EM}} \mbox{\hyperlink{group__avr__pgmspace_ga93ec00229866bf6a125384ad08cefa73}{prog\+\_\+uint16\+\_\+t}}
\item 
typedef \mbox{\hyperlink{group__avr__stdint_gadb828ef50c2dbb783109824e94cf6c47}{int32\+\_\+t}} \mbox{\hyperlink{group__avr__pgmspace_ga75acaba9e781937468d0911423bc0c35}{P\+R\+O\+G\+M\+EM}} \mbox{\hyperlink{group__avr__pgmspace_gaa839901aa518fb43d361588dd8d2b44b}{prog\+\_\+int32\+\_\+t}}
\item 
typedef \mbox{\hyperlink{group__avr__stdint_ga33594304e786b158f3fb30289278f5af}{uint32\+\_\+t}} \mbox{\hyperlink{group__avr__pgmspace_ga75acaba9e781937468d0911423bc0c35}{P\+R\+O\+G\+M\+EM}} \mbox{\hyperlink{group__avr__pgmspace_ga31bad0d22ead95a41e725c38ea63eb26}{prog\+\_\+uint32\+\_\+t}}
\item 
typedef \mbox{\hyperlink{group__avr__stdint_ga831d6234342279926bb11bad3a37add9}{int64\+\_\+t}} \mbox{\hyperlink{group__avr__pgmspace_ga75acaba9e781937468d0911423bc0c35}{P\+R\+O\+G\+M\+EM}} \mbox{\hyperlink{group__avr__pgmspace_ga5b1f9927f06d841e9ac07af62e71cfef}{prog\+\_\+int64\+\_\+t}}
\item 
typedef \mbox{\hyperlink{group__avr__stdint_gad27ed092432b64ff558d2254c278720f}{uint64\+\_\+t}} \mbox{\hyperlink{group__avr__pgmspace_ga75acaba9e781937468d0911423bc0c35}{P\+R\+O\+G\+M\+EM}} \mbox{\hyperlink{group__avr__pgmspace_gaa50eebe90a40e0276bcc49ea0482b211}{prog\+\_\+uint64\+\_\+t}}
\end{DoxyCompactItemize}
\doxysubsubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
const void $\ast$ \mbox{\hyperlink{group__avr__pgmspace_ga44f0b73a84e00da51ae135affc706b34}{memchr\+\_\+P}} (const void $\ast$, int \+\_\+\+\_\+val, size\+\_\+t \+\_\+\+\_\+len)
\item 
int \mbox{\hyperlink{group__avr__pgmspace_gab1b0b56685303c2452e98914e7e5d6d0}{memcmp\+\_\+P}} (const void $\ast$, const void $\ast$, size\+\_\+t) \+\_\+\+\_\+\+A\+T\+T\+R\+\_\+\+P\+U\+R\+E\+\_\+\+\_\+
\item 
void $\ast$ \mbox{\hyperlink{group__avr__pgmspace_ga469016cff9c68b19838ad26e099b0fc3}{memccpy\+\_\+P}} (void $\ast$, const void $\ast$, int \+\_\+\+\_\+val, size\+\_\+t)
\item 
void $\ast$ \mbox{\hyperlink{group__avr__pgmspace_gad92fa2ebe26e65fa424051047d21a0eb}{memcpy\+\_\+P}} (void $\ast$, const void $\ast$, size\+\_\+t)
\item 
void $\ast$ \mbox{\hyperlink{group__avr__pgmspace_gaee844cc0ac8f736e6599dbaae1fba328}{memmem\+\_\+P}} (const void $\ast$, size\+\_\+t, const void $\ast$, size\+\_\+t) \+\_\+\+\_\+\+A\+T\+T\+R\+\_\+\+P\+U\+R\+E\+\_\+\+\_\+
\item 
const void $\ast$ \mbox{\hyperlink{group__avr__pgmspace_ga8dd5ea616f34e8fdc2ae4fa9452d8a88}{memrchr\+\_\+P}} (const void $\ast$, int \+\_\+\+\_\+val, size\+\_\+t \+\_\+\+\_\+len)
\item 
char $\ast$ \mbox{\hyperlink{group__avr__pgmspace_ga5c1bae2b20f7d5ec00411c6378b8ed70}{strcat\+\_\+P}} (char $\ast$, const char $\ast$)
\item 
const char $\ast$ \mbox{\hyperlink{group__avr__pgmspace_ga105078f0de82663d9cfe4963e6bc677e}{strchr\+\_\+P}} (const char $\ast$, int \+\_\+\+\_\+val)
\item 
const char $\ast$ \mbox{\hyperlink{group__avr__pgmspace_ga0934ce6517882f4146be5a7db9b23d6b}{strchrnul\+\_\+P}} (const char $\ast$, int \+\_\+\+\_\+val)
\item 
int \mbox{\hyperlink{group__avr__pgmspace_gab0c75b8cce460448b747c29231da847c}{strcmp\+\_\+P}} (const char $\ast$, const char $\ast$) \+\_\+\+\_\+\+A\+T\+T\+R\+\_\+\+P\+U\+R\+E\+\_\+\+\_\+
\item 
char $\ast$ \mbox{\hyperlink{group__avr__pgmspace_ga5749897c91c479d02054fc02128de482}{strcpy\+\_\+P}} (char $\ast$, const char $\ast$)
\item 
int \mbox{\hyperlink{group__avr__pgmspace_ga4b2a918fb5938763024b3818ee89fbef}{strcasecmp\+\_\+P}} (const char $\ast$, const char $\ast$) \+\_\+\+\_\+\+A\+T\+T\+R\+\_\+\+P\+U\+R\+E\+\_\+\+\_\+
\item 
char $\ast$ \mbox{\hyperlink{group__avr__pgmspace_gabf84fa847bf164ae7eee355a808e76fb}{strcasestr\+\_\+P}} (const char $\ast$, const char $\ast$) \+\_\+\+\_\+\+A\+T\+T\+R\+\_\+\+P\+U\+R\+E\+\_\+\+\_\+
\item 
size\+\_\+t \mbox{\hyperlink{group__avr__pgmspace_ga8afa4577f8ce7241a948af61e6991c67}{strcspn\+\_\+P}} (const char $\ast$\+\_\+\+\_\+s, const char $\ast$\+\_\+\+\_\+reject) \+\_\+\+\_\+\+A\+T\+T\+R\+\_\+\+P\+U\+R\+E\+\_\+\+\_\+
\item 
size\+\_\+t \mbox{\hyperlink{group__avr__pgmspace_ga85328d5e578db3c60f9753cb1769dc96}{strlcat\+\_\+P}} (char $\ast$, const char $\ast$, size\+\_\+t)
\item 
size\+\_\+t \mbox{\hyperlink{group__avr__pgmspace_gab95a4e6a4b527ee389c72bdabb991e08}{strlcpy\+\_\+P}} (char $\ast$, const char $\ast$, size\+\_\+t)
\item 
size\+\_\+t \mbox{\hyperlink{group__avr__pgmspace_ga56e4dec5f576bb5feaa30acc4768bbf3}{strnlen\+\_\+P}} (const char $\ast$, size\+\_\+t)
\item 
int \mbox{\hyperlink{group__avr__pgmspace_ga3139220accf77b43102c23b58d249ee9}{strncmp\+\_\+P}} (const char $\ast$, const char $\ast$, size\+\_\+t) \+\_\+\+\_\+\+A\+T\+T\+R\+\_\+\+P\+U\+R\+E\+\_\+\+\_\+
\item 
int \mbox{\hyperlink{group__avr__pgmspace_ga7a9100487dc0a7e5c501966c94e0ecdb}{strncasecmp\+\_\+P}} (const char $\ast$, const char $\ast$, size\+\_\+t) \+\_\+\+\_\+\+A\+T\+T\+R\+\_\+\+P\+U\+R\+E\+\_\+\+\_\+
\item 
char $\ast$ \mbox{\hyperlink{group__avr__pgmspace_ga8641381919448f62d9caa5bd81b84fbf}{strncat\+\_\+P}} (char $\ast$, const char $\ast$, size\+\_\+t)
\item 
char $\ast$ \mbox{\hyperlink{group__avr__pgmspace_ga1ed6a0ea90901b8ee8478b86d1b1c99a}{strncpy\+\_\+P}} (char $\ast$, const char $\ast$, size\+\_\+t)
\item 
char $\ast$ \mbox{\hyperlink{group__avr__pgmspace_gaf5e195114dcded1be939a278122fa91f}{strpbrk\+\_\+P}} (const char $\ast$\+\_\+\+\_\+s, const char $\ast$\+\_\+\+\_\+accept) \+\_\+\+\_\+\+A\+T\+T\+R\+\_\+\+P\+U\+R\+E\+\_\+\+\_\+
\item 
const char $\ast$ \mbox{\hyperlink{group__avr__pgmspace_ga75ac2cdafe9afac8c75d4abf8703f2da}{strrchr\+\_\+P}} (const char $\ast$, int \+\_\+\+\_\+val)
\item 
char $\ast$ \mbox{\hyperlink{group__avr__pgmspace_ga150a5b9ebbf493789834679bdc734857}{strsep\+\_\+P}} (char $\ast$$\ast$\+\_\+\+\_\+sp, const char $\ast$\+\_\+\+\_\+delim)
\item 
size\+\_\+t \mbox{\hyperlink{group__avr__pgmspace_ga9813accb359f237457b8dc97763ccc9f}{strspn\+\_\+P}} (const char $\ast$\+\_\+\+\_\+s, const char $\ast$\+\_\+\+\_\+accept) \+\_\+\+\_\+\+A\+T\+T\+R\+\_\+\+P\+U\+R\+E\+\_\+\+\_\+
\item 
char $\ast$ \mbox{\hyperlink{group__avr__pgmspace_gaa0f5fff512c8e23adc06844aa73c557b}{strstr\+\_\+P}} (const char $\ast$, const char $\ast$) \+\_\+\+\_\+\+A\+T\+T\+R\+\_\+\+P\+U\+R\+E\+\_\+\+\_\+
\item 
char $\ast$ \mbox{\hyperlink{group__avr__pgmspace_ga9c3f78c82b898b95834b7f1d695eb95e}{strtok\+\_\+P}} (char $\ast$\+\_\+\+\_\+s, const char $\ast$\+\_\+\+\_\+delim)
\item 
char $\ast$ \mbox{\hyperlink{group__avr__pgmspace_ga48e69ae320350218ad89b18f01df120d}{strtok\+\_\+rP}} (char $\ast$\+\_\+\+\_\+s, const char $\ast$\+\_\+\+\_\+delim, char $\ast$$\ast$\+\_\+\+\_\+last)
\item 
size\+\_\+t \mbox{\hyperlink{group__avr__pgmspace_ga4ce249cbcdb9ff968c76a2d917072da9}{strlen\+\_\+\+PF}} (\mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}} src)
\item 
size\+\_\+t \mbox{\hyperlink{group__avr__pgmspace_ga80d8784b274a123972f1b99a4a0a6a0f}{strnlen\+\_\+\+PF}} (\mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}} src, size\+\_\+t len)
\item 
void $\ast$ \mbox{\hyperlink{group__avr__pgmspace_ga13cc6cd0692aeccaac2789350a16412b}{memcpy\+\_\+\+PF}} (void $\ast$dest, \mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}} src, size\+\_\+t len)
\item 
char $\ast$ \mbox{\hyperlink{group__avr__pgmspace_gacd5af73767ca6defbec02736072dfb30}{strcpy\+\_\+\+PF}} (char $\ast$dest, \mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}} src)
\item 
char $\ast$ \mbox{\hyperlink{group__avr__pgmspace_ga4ae01ef4b7da280c394f6d2ca37597b8}{strncpy\+\_\+\+PF}} (char $\ast$dest, \mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}} src, size\+\_\+t len)
\item 
char $\ast$ \mbox{\hyperlink{group__avr__pgmspace_ga9530b4f628b49635c4085c269da8867a}{strcat\+\_\+\+PF}} (char $\ast$dest, \mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}} src)
\item 
size\+\_\+t \mbox{\hyperlink{group__avr__pgmspace_gaf632b479b04d0c98caf94de85dc11f3e}{strlcat\+\_\+\+PF}} (char $\ast$dst, \mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}} src, size\+\_\+t siz)
\item 
char $\ast$ \mbox{\hyperlink{group__avr__pgmspace_ga903fbfd9dcf93630e7a5da710d170da0}{strncat\+\_\+\+PF}} (char $\ast$dest, \mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}} src, size\+\_\+t len)
\item 
int \mbox{\hyperlink{group__avr__pgmspace_gad34d5b7d040fcb97939e939f19d88a5f}{strcmp\+\_\+\+PF}} (const char $\ast$s1, \mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}} s2) \+\_\+\+\_\+\+A\+T\+T\+R\+\_\+\+P\+U\+R\+E\+\_\+\+\_\+
\item 
int \mbox{\hyperlink{group__avr__pgmspace_ga31c3d78d72e8dc80e192d4bd6a65529e}{strncmp\+\_\+\+PF}} (const char $\ast$s1, \mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}} s2, size\+\_\+t n) \+\_\+\+\_\+\+A\+T\+T\+R\+\_\+\+P\+U\+R\+E\+\_\+\+\_\+
\item 
int \mbox{\hyperlink{group__avr__pgmspace_ga319ec42a66ba8333213fa10dbe06a606}{strcasecmp\+\_\+\+PF}} (const char $\ast$s1, \mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}} s2) \+\_\+\+\_\+\+A\+T\+T\+R\+\_\+\+P\+U\+R\+E\+\_\+\+\_\+
\item 
int \mbox{\hyperlink{group__avr__pgmspace_ga086db857a2372e4c84cc16204ac5292c}{strncasecmp\+\_\+\+PF}} (const char $\ast$s1, \mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}} s2, size\+\_\+t n) \+\_\+\+\_\+\+A\+T\+T\+R\+\_\+\+P\+U\+R\+E\+\_\+\+\_\+
\item 
char $\ast$ \mbox{\hyperlink{group__avr__pgmspace_ga0786ca7dc919f41f4586689aa77b04ef}{strstr\+\_\+\+PF}} (const char $\ast$s1, \mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}} s2)
\item 
size\+\_\+t \mbox{\hyperlink{group__avr__pgmspace_ga6674a08f95d5daedce3079b96be63008}{strlcpy\+\_\+\+PF}} (char $\ast$dst, \mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}} src, size\+\_\+t siz)
\item 
int \mbox{\hyperlink{group__avr__pgmspace_ga80332272d69f05daab5f177723380175}{memcmp\+\_\+\+PF}} (const void $\ast$, \mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}}, size\+\_\+t) \+\_\+\+\_\+\+A\+T\+T\+R\+\_\+\+P\+U\+R\+E\+\_\+\+\_\+
\item 
static size\+\_\+t \mbox{\hyperlink{group__avr__pgmspace_gae2fb71ebed915074ec815d9d8f876c52}{strlen\+\_\+P}} (const char $\ast$s)
\end{DoxyCompactItemize}


\doxysubsubsection{Detailed Description}

\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{preprocessor}{\#include <\mbox{\hyperlink{io_8h}{avr/io.h}}>}}
\DoxyCodeLine{\textcolor{preprocessor}{\#include <\mbox{\hyperlink{pgmspace_8h}{avr/pgmspace.h}}>}}
\end{DoxyCode}


The functions in this module provide interfaces for a program to access data stored in program space (flash memory) of the device. In order to use these functions, the target device must support either the {\ttfamily L\+PM} or {\ttfamily E\+L\+PM} instructions.

\begin{DoxyNote}{Note}
These functions are an attempt to provide some compatibility with header files that come with I\+AR C, to make porting applications between different compilers easier. This is not 100\% compatibility though (G\+CC does not have full support for multiple address spaces yet).

If you are working with strings which are completely based in ram, use the standard string functions described in \mbox{\hyperlink{group__avr__string}{$<$string.\+h$>$\+: Strings}}.

If possible, put your constant tables in the lower 64 KB and use \mbox{\hyperlink{group__avr__pgmspace_ga88d7dd4863f87530e1a34ece430a587c}{pgm\+\_\+read\+\_\+byte\+\_\+near()}} or \mbox{\hyperlink{group__avr__pgmspace_gaf51eeaa847dd2668d2a66b70ecfb7398}{pgm\+\_\+read\+\_\+word\+\_\+near()}} instead of \mbox{\hyperlink{group__avr__pgmspace_ga0d4d7f6231716747c52b969d4febdeed}{pgm\+\_\+read\+\_\+byte\+\_\+far()}} or \mbox{\hyperlink{group__avr__pgmspace_gad7082c45c2c96f015c76eff1ad00a99a}{pgm\+\_\+read\+\_\+word\+\_\+far()}} since it is more efficient that way, and you can still use the upper 64K for executable code. All functions that are suffixed with a {\ttfamily \+\_\+P} {\itshape require} their arguments to be in the lower 64 KB of the flash R\+OM, as they do not use E\+L\+PM instructions. This is normally not a big concern as the linker setup arranges any program space constants declared using the macros from this header file so they are placed right after the interrupt vectors, and in front of any executable code. However, it can become a problem if there are too many of these constants, or for bootloaders on devices with more than 64 KB of R\+OM. {\itshape All these functions will not work in that situation.}

For {\bfseries{Xmega}} devices, make sure the N\+VM controller command register ({\ttfamily N\+V\+M.\+C\+MD} or {\ttfamily N\+V\+M\+\_\+\+C\+MD}) is set to 0x00 (N\+OP) before using any of these functions. 
\end{DoxyNote}


\doxysubsubsection{Macro Definition Documentation}
\mbox{\Hypertarget{group__avr__pgmspace_ga8ddf0e398bde8078aa9395ac77c83f0a}\label{group__avr__pgmspace_ga8ddf0e398bde8078aa9395ac77c83f0a}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!pgm\_get\_far\_address@{pgm\_get\_far\_address}}
\index{pgm\_get\_far\_address@{pgm\_get\_far\_address}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{pgm\_get\_far\_address}{pgm\_get\_far\_address}}
{\footnotesize\ttfamily \#define pgm\+\_\+get\+\_\+far\+\_\+address(\begin{DoxyParamCaption}\item[{}]{var }\end{DoxyParamCaption})}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{(\{                                                    \(\backslash\)}
\DoxyCodeLine{    uint\_farptr\_t tmp;                                \(\backslash\)}
\DoxyCodeLine{                                                      \(\backslash\)}
\DoxyCodeLine{    \_\_asm\_\_ \_\_volatile\_\_(                             \(\backslash\)}
\DoxyCodeLine{                                                      \(\backslash\)}
\DoxyCodeLine{            \textcolor{stringliteral}{"ldi    \%A0, lo8(\%1)"}           \textcolor{stringliteral}{"\(\backslash\)n\(\backslash\)t"}    \(\backslash\)}
\DoxyCodeLine{            \textcolor{stringliteral}{"ldi    \%B0, hi8(\%1)"}           \textcolor{stringliteral}{"\(\backslash\)n\(\backslash\)t"}    \(\backslash\)}
\DoxyCodeLine{            \textcolor{stringliteral}{"ldi    \%C0, hh8(\%1)"}           \textcolor{stringliteral}{"\(\backslash\)n\(\backslash\)t"}    \(\backslash\)}
\DoxyCodeLine{            \textcolor{stringliteral}{"clr    \%D0"}                    \textcolor{stringliteral}{"\(\backslash\)n\(\backslash\)t"}    \(\backslash\)}
\DoxyCodeLine{        :                                             \(\backslash\)}
\DoxyCodeLine{            \textcolor{stringliteral}{"=d"} (tmp)                                \(\backslash\)}
\DoxyCodeLine{        :                                             \(\backslash\)}
\DoxyCodeLine{            \textcolor{stringliteral}{"p"}  (\&(var))                             \(\backslash\)}
\DoxyCodeLine{    );                                                \(\backslash\)}
\DoxyCodeLine{    tmp;                                              \(\backslash\)}
\DoxyCodeLine{\})}

\end{DoxyCode}
This macro facilitates the obtention of a 32 bit \char`\"{}far\char`\"{} pointer (only 24 bits used) to data even passed the 64KB limit for the 16 bit ordinary pointer. It is similar to the \textquotesingle{}\&\textquotesingle{} operator, with some limitations.

Comments\+:


\begin{DoxyItemize}
\item The overhead is minimal and it\textquotesingle{}s mainly due to the 32 bit size operation.
\item 24 bit sizes guarantees the code compatibility for use in future devices.
\item hh8() is an undocumented feature but seems to give the third significant byte of a 32 bit data and accepts symbols, complementing the functionality of hi8() and lo8(). There is not an equivalent assembler function to get the high significant byte.
\item \textquotesingle{}var\textquotesingle{} has to be resolved at linking time as an existing symbol, i.\+e, a simple type variable name, an array name (not an indexed element of the array, if the index is a constant the compiler does not complain but fails to get the address if optimization is enabled), a struct name or a struct field name, a function identifier, a linker defined identifier,...
\item The returned value is the identifier\textquotesingle{}s V\+MA (virtual memory address) determined by the linker and falls in the corresponding memory region. The A\+VR Harvard architecture requires non overlapping V\+MA areas for the multiple address spaces in the processor\+: Flash R\+OM, R\+AM, and E\+E\+P\+R\+OM. Typical offset for this are 0x00000000, 0x00800xx0, and 0x00810000 respectively, derived from the linker script used and linker options. The value returned can be seen then as a universal pointer. 
\end{DoxyItemize}\mbox{\Hypertarget{group__avr__pgmspace_ga963f816fc88a5d8479c285ed4c630229}\label{group__avr__pgmspace_ga963f816fc88a5d8479c285ed4c630229}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!PGM\_P@{PGM\_P}}
\index{PGM\_P@{PGM\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{PGM\_P}{PGM\_P}}
{\footnotesize\ttfamily \#define P\+G\+M\+\_\+P~const char $\ast$}

Used to declare a variable that is a pointer to a string in program space. \mbox{\Hypertarget{group__avr__pgmspace_ga73084a8bbde259ffae72980354b3f027}\label{group__avr__pgmspace_ga73084a8bbde259ffae72980354b3f027}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!pgm\_read\_byte@{pgm\_read\_byte}}
\index{pgm\_read\_byte@{pgm\_read\_byte}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{pgm\_read\_byte}{pgm\_read\_byte}}
{\footnotesize\ttfamily \#define pgm\+\_\+read\+\_\+byte(\begin{DoxyParamCaption}\item[{}]{address\+\_\+short }\end{DoxyParamCaption})~\mbox{\hyperlink{group__avr__pgmspace_ga88d7dd4863f87530e1a34ece430a587c}{pgm\+\_\+read\+\_\+byte\+\_\+near}}(address\+\_\+short)}

Read a byte from the program space with a 16-\/bit (near) address.

\begin{DoxyNote}{Note}
The address is a byte address. The address is in the program space. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__pgmspace_ga0d4d7f6231716747c52b969d4febdeed}\label{group__avr__pgmspace_ga0d4d7f6231716747c52b969d4febdeed}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!pgm\_read\_byte\_far@{pgm\_read\_byte\_far}}
\index{pgm\_read\_byte\_far@{pgm\_read\_byte\_far}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{pgm\_read\_byte\_far}{pgm\_read\_byte\_far}}
{\footnotesize\ttfamily \#define pgm\+\_\+read\+\_\+byte\+\_\+far(\begin{DoxyParamCaption}\item[{}]{address\+\_\+long }\end{DoxyParamCaption})~\+\_\+\+\_\+\+E\+L\+PM((\mbox{\hyperlink{group__avr__stdint_ga33594304e786b158f3fb30289278f5af}{uint32\+\_\+t}})(address\+\_\+long))}

Read a byte from the program space with a 32-\/bit (far) address.

\begin{DoxyNote}{Note}
The address is a byte address. The address is in the program space. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__pgmspace_ga88d7dd4863f87530e1a34ece430a587c}\label{group__avr__pgmspace_ga88d7dd4863f87530e1a34ece430a587c}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!pgm\_read\_byte\_near@{pgm\_read\_byte\_near}}
\index{pgm\_read\_byte\_near@{pgm\_read\_byte\_near}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{pgm\_read\_byte\_near}{pgm\_read\_byte\_near}}
{\footnotesize\ttfamily \#define pgm\+\_\+read\+\_\+byte\+\_\+near(\begin{DoxyParamCaption}\item[{}]{address\+\_\+short }\end{DoxyParamCaption})~\+\_\+\+\_\+\+L\+PM((\mbox{\hyperlink{group__avr__stdint_ga1f1825b69244eb3ad2c7165ddc99c956}{uint16\+\_\+t}})(address\+\_\+short))}

Read a byte from the program space with a 16-\/bit (near) address. \begin{DoxyNote}{Note}
The address is a byte address. The address is in the program space. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__pgmspace_gabb68859ac5dfa6a09ac048b4037a83b6}\label{group__avr__pgmspace_gabb68859ac5dfa6a09ac048b4037a83b6}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!pgm\_read\_dword@{pgm\_read\_dword}}
\index{pgm\_read\_dword@{pgm\_read\_dword}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{pgm\_read\_dword}{pgm\_read\_dword}}
{\footnotesize\ttfamily \#define pgm\+\_\+read\+\_\+dword(\begin{DoxyParamCaption}\item[{}]{address\+\_\+short }\end{DoxyParamCaption})~\mbox{\hyperlink{group__avr__pgmspace_ga7fa92c0a662403a643859e0f33b0a182}{pgm\+\_\+read\+\_\+dword\+\_\+near}}(address\+\_\+short)}

Read a double word from the program space with a 16-\/bit (near) address.

\begin{DoxyNote}{Note}
The address is a byte address. The address is in the program space. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__pgmspace_ga309908c1b7430f0d140edb78fcf8f2b9}\label{group__avr__pgmspace_ga309908c1b7430f0d140edb78fcf8f2b9}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!pgm\_read\_dword\_far@{pgm\_read\_dword\_far}}
\index{pgm\_read\_dword\_far@{pgm\_read\_dword\_far}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{pgm\_read\_dword\_far}{pgm\_read\_dword\_far}}
{\footnotesize\ttfamily \#define pgm\+\_\+read\+\_\+dword\+\_\+far(\begin{DoxyParamCaption}\item[{}]{address\+\_\+long }\end{DoxyParamCaption})~\+\_\+\+\_\+\+E\+L\+P\+M\+\_\+dword((\mbox{\hyperlink{group__avr__stdint_ga33594304e786b158f3fb30289278f5af}{uint32\+\_\+t}})(address\+\_\+long))}

Read a double word from the program space with a 32-\/bit (far) address.

\begin{DoxyNote}{Note}
The address is a byte address. The address is in the program space. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__pgmspace_ga7fa92c0a662403a643859e0f33b0a182}\label{group__avr__pgmspace_ga7fa92c0a662403a643859e0f33b0a182}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!pgm\_read\_dword\_near@{pgm\_read\_dword\_near}}
\index{pgm\_read\_dword\_near@{pgm\_read\_dword\_near}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{pgm\_read\_dword\_near}{pgm\_read\_dword\_near}}
{\footnotesize\ttfamily \#define pgm\+\_\+read\+\_\+dword\+\_\+near(\begin{DoxyParamCaption}\item[{}]{address\+\_\+short }\end{DoxyParamCaption})~\+\_\+\+\_\+\+L\+P\+M\+\_\+dword((\mbox{\hyperlink{group__avr__stdint_ga1f1825b69244eb3ad2c7165ddc99c956}{uint16\+\_\+t}})(address\+\_\+short))}

Read a double word from the program space with a 16-\/bit (near) address. \begin{DoxyNote}{Note}
The address is a byte address. The address is in the program space. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__pgmspace_ga7911bddb066a8a038efc4b7857728fa8}\label{group__avr__pgmspace_ga7911bddb066a8a038efc4b7857728fa8}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!pgm\_read\_float@{pgm\_read\_float}}
\index{pgm\_read\_float@{pgm\_read\_float}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{pgm\_read\_float}{pgm\_read\_float}}
{\footnotesize\ttfamily \#define pgm\+\_\+read\+\_\+float(\begin{DoxyParamCaption}\item[{}]{address\+\_\+short }\end{DoxyParamCaption})~\mbox{\hyperlink{group__avr__pgmspace_ga066040df814dabc7980cd1422508b46b}{pgm\+\_\+read\+\_\+float\+\_\+near}}(address\+\_\+short)}

Read a float from the program space with a 16-\/bit (near) address.

\begin{DoxyNote}{Note}
The address is a byte address. The address is in the program space. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__pgmspace_ga4a5a593aa84062ca08b3f2d564a6f466}\label{group__avr__pgmspace_ga4a5a593aa84062ca08b3f2d564a6f466}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!pgm\_read\_float\_far@{pgm\_read\_float\_far}}
\index{pgm\_read\_float\_far@{pgm\_read\_float\_far}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{pgm\_read\_float\_far}{pgm\_read\_float\_far}}
{\footnotesize\ttfamily \#define pgm\+\_\+read\+\_\+float\+\_\+far(\begin{DoxyParamCaption}\item[{}]{address\+\_\+long }\end{DoxyParamCaption})~\+\_\+\+\_\+\+E\+L\+P\+M\+\_\+float((\mbox{\hyperlink{group__avr__stdint_ga33594304e786b158f3fb30289278f5af}{uint32\+\_\+t}})(address\+\_\+long))}

Read a float from the program space with a 32-\/bit (far) address.

\begin{DoxyNote}{Note}
The address is a byte address. The address is in the program space. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__pgmspace_ga066040df814dabc7980cd1422508b46b}\label{group__avr__pgmspace_ga066040df814dabc7980cd1422508b46b}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!pgm\_read\_float\_near@{pgm\_read\_float\_near}}
\index{pgm\_read\_float\_near@{pgm\_read\_float\_near}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{pgm\_read\_float\_near}{pgm\_read\_float\_near}}
{\footnotesize\ttfamily \#define pgm\+\_\+read\+\_\+float\+\_\+near(\begin{DoxyParamCaption}\item[{}]{address\+\_\+short }\end{DoxyParamCaption})~\+\_\+\+\_\+\+L\+P\+M\+\_\+float((\mbox{\hyperlink{group__avr__stdint_ga1f1825b69244eb3ad2c7165ddc99c956}{uint16\+\_\+t}})(address\+\_\+short))}

Read a float from the program space with a 16-\/bit (near) address. \begin{DoxyNote}{Note}
The address is a byte address. The address is in the program space. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__pgmspace_gac9f61931fd8cf4cf4764744dbaee81b6}\label{group__avr__pgmspace_gac9f61931fd8cf4cf4764744dbaee81b6}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!pgm\_read\_ptr@{pgm\_read\_ptr}}
\index{pgm\_read\_ptr@{pgm\_read\_ptr}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{pgm\_read\_ptr}{pgm\_read\_ptr}}
{\footnotesize\ttfamily \#define pgm\+\_\+read\+\_\+ptr(\begin{DoxyParamCaption}\item[{}]{address\+\_\+short }\end{DoxyParamCaption})~\mbox{\hyperlink{group__avr__pgmspace_gadcfd4df2e156efc1f6a380dfc58a5b81}{pgm\+\_\+read\+\_\+ptr\+\_\+near}}(address\+\_\+short)}

Read a pointer from the program space with a 16-\/bit (near) address.

\begin{DoxyNote}{Note}
The address is a byte address. The address is in the program space. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__pgmspace_gaa7756dce7bcc8ba46e648981fafebbf2}\label{group__avr__pgmspace_gaa7756dce7bcc8ba46e648981fafebbf2}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!pgm\_read\_ptr\_far@{pgm\_read\_ptr\_far}}
\index{pgm\_read\_ptr\_far@{pgm\_read\_ptr\_far}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{pgm\_read\_ptr\_far}{pgm\_read\_ptr\_far}}
{\footnotesize\ttfamily \#define pgm\+\_\+read\+\_\+ptr\+\_\+far(\begin{DoxyParamCaption}\item[{}]{address\+\_\+long }\end{DoxyParamCaption})~(void$\ast$)\+\_\+\+\_\+\+E\+L\+P\+M\+\_\+word((\mbox{\hyperlink{group__avr__stdint_ga33594304e786b158f3fb30289278f5af}{uint32\+\_\+t}})(address\+\_\+long))}

Read a pointer from the program space with a 32-\/bit (far) address.

\begin{DoxyNote}{Note}
The address is a byte address. The address is in the program space. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__pgmspace_gadcfd4df2e156efc1f6a380dfc58a5b81}\label{group__avr__pgmspace_gadcfd4df2e156efc1f6a380dfc58a5b81}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!pgm\_read\_ptr\_near@{pgm\_read\_ptr\_near}}
\index{pgm\_read\_ptr\_near@{pgm\_read\_ptr\_near}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{pgm\_read\_ptr\_near}{pgm\_read\_ptr\_near}}
{\footnotesize\ttfamily \#define pgm\+\_\+read\+\_\+ptr\+\_\+near(\begin{DoxyParamCaption}\item[{}]{address\+\_\+short }\end{DoxyParamCaption})~(void$\ast$)\+\_\+\+\_\+\+L\+P\+M\+\_\+word((\mbox{\hyperlink{group__avr__stdint_ga1f1825b69244eb3ad2c7165ddc99c956}{uint16\+\_\+t}})(address\+\_\+short))}

Read a pointer from the program space with a 16-\/bit (near) address. \begin{DoxyNote}{Note}
The address is a byte address. The address is in the program space. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__pgmspace_ga32d8ab354156f4b1ffdb77a275ba6223}\label{group__avr__pgmspace_ga32d8ab354156f4b1ffdb77a275ba6223}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!pgm\_read\_word@{pgm\_read\_word}}
\index{pgm\_read\_word@{pgm\_read\_word}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{pgm\_read\_word}{pgm\_read\_word}}
{\footnotesize\ttfamily \#define pgm\+\_\+read\+\_\+word(\begin{DoxyParamCaption}\item[{}]{address\+\_\+short }\end{DoxyParamCaption})~\mbox{\hyperlink{group__avr__pgmspace_gaf51eeaa847dd2668d2a66b70ecfb7398}{pgm\+\_\+read\+\_\+word\+\_\+near}}(address\+\_\+short)}

Read a word from the program space with a 16-\/bit (near) address.

\begin{DoxyNote}{Note}
The address is a byte address. The address is in the program space. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__pgmspace_gad7082c45c2c96f015c76eff1ad00a99a}\label{group__avr__pgmspace_gad7082c45c2c96f015c76eff1ad00a99a}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!pgm\_read\_word\_far@{pgm\_read\_word\_far}}
\index{pgm\_read\_word\_far@{pgm\_read\_word\_far}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{pgm\_read\_word\_far}{pgm\_read\_word\_far}}
{\footnotesize\ttfamily \#define pgm\+\_\+read\+\_\+word\+\_\+far(\begin{DoxyParamCaption}\item[{}]{address\+\_\+long }\end{DoxyParamCaption})~\+\_\+\+\_\+\+E\+L\+P\+M\+\_\+word((\mbox{\hyperlink{group__avr__stdint_ga33594304e786b158f3fb30289278f5af}{uint32\+\_\+t}})(address\+\_\+long))}

Read a word from the program space with a 32-\/bit (far) address.

\begin{DoxyNote}{Note}
The address is a byte address. The address is in the program space. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__pgmspace_gaf51eeaa847dd2668d2a66b70ecfb7398}\label{group__avr__pgmspace_gaf51eeaa847dd2668d2a66b70ecfb7398}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!pgm\_read\_word\_near@{pgm\_read\_word\_near}}
\index{pgm\_read\_word\_near@{pgm\_read\_word\_near}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{pgm\_read\_word\_near}{pgm\_read\_word\_near}}
{\footnotesize\ttfamily \#define pgm\+\_\+read\+\_\+word\+\_\+near(\begin{DoxyParamCaption}\item[{}]{address\+\_\+short }\end{DoxyParamCaption})~\+\_\+\+\_\+\+L\+P\+M\+\_\+word((\mbox{\hyperlink{group__avr__stdint_ga1f1825b69244eb3ad2c7165ddc99c956}{uint16\+\_\+t}})(address\+\_\+short))}

Read a word from the program space with a 16-\/bit (near) address. \begin{DoxyNote}{Note}
The address is a byte address. The address is in the program space. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__pgmspace_ga84a61d55b7efefabd8419e28f02704f9}\label{group__avr__pgmspace_ga84a61d55b7efefabd8419e28f02704f9}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!PGM\_VOID\_P@{PGM\_VOID\_P}}
\index{PGM\_VOID\_P@{PGM\_VOID\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{PGM\_VOID\_P}{PGM\_VOID\_P}}
{\footnotesize\ttfamily \#define P\+G\+M\+\_\+\+V\+O\+I\+D\+\_\+P~const void $\ast$}

Used to declare a generic pointer to an object in program space. \mbox{\Hypertarget{group__avr__pgmspace_ga75acaba9e781937468d0911423bc0c35}\label{group__avr__pgmspace_ga75acaba9e781937468d0911423bc0c35}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!PROGMEM@{PROGMEM}}
\index{PROGMEM@{PROGMEM}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{PROGMEM}{PROGMEM}}
{\footnotesize\ttfamily \#define P\+R\+O\+G\+M\+EM~\+\_\+\+\_\+\+A\+T\+T\+R\+\_\+\+P\+R\+O\+G\+M\+E\+M\+\_\+\+\_\+}

Attribute to use in order to declare an object being located in flash R\+OM. \mbox{\Hypertarget{group__avr__pgmspace_ga05ca900ebf7cd121be73c654d9ccb3eb}\label{group__avr__pgmspace_ga05ca900ebf7cd121be73c654d9ccb3eb}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!PSTR@{PSTR}}
\index{PSTR@{PSTR}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{PSTR}{PSTR}}
{\footnotesize\ttfamily \#define P\+S\+TR(\begin{DoxyParamCaption}\item[{}]{s }\end{DoxyParamCaption})~((const \mbox{\hyperlink{group__avr__pgmspace_ga75acaba9e781937468d0911423bc0c35}{P\+R\+O\+G\+M\+EM}} char $\ast$)(s))}

Used to declare a static pointer to a string in program space. 

\doxysubsubsection{Typedef Documentation}
\mbox{\Hypertarget{group__avr__pgmspace_gaa475b6b81fd8b34de45695da1da523b6}\label{group__avr__pgmspace_gaa475b6b81fd8b34de45695da1da523b6}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!prog\_char@{prog\_char}}
\index{prog\_char@{prog\_char}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{prog\_char}{prog\_char}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__avr__pgmspace_gaa475b6b81fd8b34de45695da1da523b6}{prog\+\_\+char}}}

\begin{DoxyNote}{Note}
D\+E\+P\+R\+E\+C\+A\+T\+ED
\end{DoxyNote}
This typedef is now deprecated because the usage of the \+\_\+\+\_\+progmem\+\_\+\+\_\+ attribute on a type is not supported in G\+CC. However, the use of the \+\_\+\+\_\+progmem\+\_\+\+\_\+ attribute on a variable declaration is supported, and this is now the recommended usage.

The typedef is only visible if the macro \+\_\+\+\_\+\+P\+R\+O\+G\+\_\+\+T\+Y\+P\+E\+S\+\_\+\+C\+O\+M\+P\+A\+T\+\_\+\+\_\+ has been defined before including $<$\mbox{\hyperlink{pgmspace_8h}{avr/pgmspace.\+h}}$>$ (either by a {\ttfamily \#define} directive, or by a -\/D compiler option.)

Type of a \char`\"{}char\char`\"{} object located in flash R\+OM. \mbox{\Hypertarget{group__avr__pgmspace_gaafc910d0b2c4d76afffa4710b98df6fa}\label{group__avr__pgmspace_gaafc910d0b2c4d76afffa4710b98df6fa}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!prog\_int16\_t@{prog\_int16\_t}}
\index{prog\_int16\_t@{prog\_int16\_t}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{prog\_int16\_t}{prog\_int16\_t}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__avr__pgmspace_gaafc910d0b2c4d76afffa4710b98df6fa}{prog\+\_\+int16\+\_\+t}}}

\begin{DoxyNote}{Note}
D\+E\+P\+R\+E\+C\+A\+T\+ED
\end{DoxyNote}
This typedef is now deprecated because the usage of the \+\_\+\+\_\+progmem\+\_\+\+\_\+ attribute on a type is not supported in G\+CC. However, the use of the \+\_\+\+\_\+progmem\+\_\+\+\_\+ attribute on a variable declaration is supported, and this is now the recommended usage.

The typedef is only visible if the macro \+\_\+\+\_\+\+P\+R\+O\+G\+\_\+\+T\+Y\+P\+E\+S\+\_\+\+C\+O\+M\+P\+A\+T\+\_\+\+\_\+ has been defined before including $<$\mbox{\hyperlink{pgmspace_8h}{avr/pgmspace.\+h}}$>$ (either by a {\ttfamily \#define} directive, or by a -\/D compiler option.)

Type of an \char`\"{}int16\+\_\+t\char`\"{} object located in flash R\+OM. \mbox{\Hypertarget{group__avr__pgmspace_gaa839901aa518fb43d361588dd8d2b44b}\label{group__avr__pgmspace_gaa839901aa518fb43d361588dd8d2b44b}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!prog\_int32\_t@{prog\_int32\_t}}
\index{prog\_int32\_t@{prog\_int32\_t}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{prog\_int32\_t}{prog\_int32\_t}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__avr__pgmspace_gaa839901aa518fb43d361588dd8d2b44b}{prog\+\_\+int32\+\_\+t}}}

\begin{DoxyNote}{Note}
D\+E\+P\+R\+E\+C\+A\+T\+ED
\end{DoxyNote}
This typedef is now deprecated because the usage of the \+\_\+\+\_\+progmem\+\_\+\+\_\+ attribute on a type is not supported in G\+CC. However, the use of the \+\_\+\+\_\+progmem\+\_\+\+\_\+ attribute on a variable declaration is supported, and this is now the recommended usage.

The typedef is only visible if the macro \+\_\+\+\_\+\+P\+R\+O\+G\+\_\+\+T\+Y\+P\+E\+S\+\_\+\+C\+O\+M\+P\+A\+T\+\_\+\+\_\+ has been defined before including $<$\mbox{\hyperlink{pgmspace_8h}{avr/pgmspace.\+h}}$>$ (either by a {\ttfamily \#define} directive, or by a -\/D compiler option.)

Type of an \char`\"{}int32\+\_\+t\char`\"{} object located in flash R\+OM. \mbox{\Hypertarget{group__avr__pgmspace_ga5b1f9927f06d841e9ac07af62e71cfef}\label{group__avr__pgmspace_ga5b1f9927f06d841e9ac07af62e71cfef}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!prog\_int64\_t@{prog\_int64\_t}}
\index{prog\_int64\_t@{prog\_int64\_t}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{prog\_int64\_t}{prog\_int64\_t}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__avr__pgmspace_ga5b1f9927f06d841e9ac07af62e71cfef}{prog\+\_\+int64\+\_\+t}}}

\begin{DoxyNote}{Note}
D\+E\+P\+R\+E\+C\+A\+T\+ED
\end{DoxyNote}
This typedef is now deprecated because the usage of the \+\_\+\+\_\+progmem\+\_\+\+\_\+ attribute on a type is not supported in G\+CC. However, the use of the \+\_\+\+\_\+progmem\+\_\+\+\_\+ attribute on a variable declaration is supported, and this is now the recommended usage.

The typedef is only visible if the macro \+\_\+\+\_\+\+P\+R\+O\+G\+\_\+\+T\+Y\+P\+E\+S\+\_\+\+C\+O\+M\+P\+A\+T\+\_\+\+\_\+ has been defined before including $<$\mbox{\hyperlink{pgmspace_8h}{avr/pgmspace.\+h}}$>$ (either by a {\ttfamily \#define} directive, or by a -\/D compiler option.)

Type of an \char`\"{}int64\+\_\+t\char`\"{} object located in flash R\+OM.

\begin{DoxyNote}{Note}
This type is not available when the compiler option -\/mint8 is in effect. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__pgmspace_ga48c7cb011ea5f82f4b73df40e07dff46}\label{group__avr__pgmspace_ga48c7cb011ea5f82f4b73df40e07dff46}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!prog\_int8\_t@{prog\_int8\_t}}
\index{prog\_int8\_t@{prog\_int8\_t}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{prog\_int8\_t}{prog\_int8\_t}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__avr__pgmspace_ga48c7cb011ea5f82f4b73df40e07dff46}{prog\+\_\+int8\+\_\+t}}}

\begin{DoxyNote}{Note}
D\+E\+P\+R\+E\+C\+A\+T\+ED
\end{DoxyNote}
This typedef is now deprecated because the usage of the \+\_\+\+\_\+progmem\+\_\+\+\_\+ attribute on a type is not supported in G\+CC. However, the use of the \+\_\+\+\_\+progmem\+\_\+\+\_\+ attribute on a variable declaration is supported, and this is now the recommended usage.

The typedef is only visible if the macro \+\_\+\+\_\+\+P\+R\+O\+G\+\_\+\+T\+Y\+P\+E\+S\+\_\+\+C\+O\+M\+P\+A\+T\+\_\+\+\_\+ has been defined before including $<$\mbox{\hyperlink{pgmspace_8h}{avr/pgmspace.\+h}}$>$ (either by a {\ttfamily \#define} directive, or by a -\/D compiler option.)

Type of an \char`\"{}int8\+\_\+t\char`\"{} object located in flash R\+OM. \mbox{\Hypertarget{group__avr__pgmspace_ga7d4701843a2019e3ef5a9866dc7586ed}\label{group__avr__pgmspace_ga7d4701843a2019e3ef5a9866dc7586ed}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!prog\_uchar@{prog\_uchar}}
\index{prog\_uchar@{prog\_uchar}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{prog\_uchar}{prog\_uchar}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__avr__pgmspace_ga7d4701843a2019e3ef5a9866dc7586ed}{prog\+\_\+uchar}}}

\begin{DoxyNote}{Note}
D\+E\+P\+R\+E\+C\+A\+T\+ED
\end{DoxyNote}
This typedef is now deprecated because the usage of the \+\_\+\+\_\+progmem\+\_\+\+\_\+ attribute on a type is not supported in G\+CC. However, the use of the \+\_\+\+\_\+progmem\+\_\+\+\_\+ attribute on a variable declaration is supported, and this is now the recommended usage.

The typedef is only visible if the macro \+\_\+\+\_\+\+P\+R\+O\+G\+\_\+\+T\+Y\+P\+E\+S\+\_\+\+C\+O\+M\+P\+A\+T\+\_\+\+\_\+ has been defined before including $<$\mbox{\hyperlink{pgmspace_8h}{avr/pgmspace.\+h}}$>$ (either by a {\ttfamily \#define} directive, or by a -\/D compiler option.)

Type of an \char`\"{}unsigned char\char`\"{} object located in flash R\+OM. \mbox{\Hypertarget{group__avr__pgmspace_ga93ec00229866bf6a125384ad08cefa73}\label{group__avr__pgmspace_ga93ec00229866bf6a125384ad08cefa73}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!prog\_uint16\_t@{prog\_uint16\_t}}
\index{prog\_uint16\_t@{prog\_uint16\_t}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{prog\_uint16\_t}{prog\_uint16\_t}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__avr__pgmspace_ga93ec00229866bf6a125384ad08cefa73}{prog\+\_\+uint16\+\_\+t}}}

\begin{DoxyNote}{Note}
D\+E\+P\+R\+E\+C\+A\+T\+ED
\end{DoxyNote}
This typedef is now deprecated because the usage of the \+\_\+\+\_\+progmem\+\_\+\+\_\+ attribute on a type is not supported in G\+CC. However, the use of the \+\_\+\+\_\+progmem\+\_\+\+\_\+ attribute on a variable declaration is supported, and this is now the recommended usage.

The typedef is only visible if the macro \+\_\+\+\_\+\+P\+R\+O\+G\+\_\+\+T\+Y\+P\+E\+S\+\_\+\+C\+O\+M\+P\+A\+T\+\_\+\+\_\+ has been defined before including $<$\mbox{\hyperlink{pgmspace_8h}{avr/pgmspace.\+h}}$>$ (either by a {\ttfamily \#define} directive, or by a -\/D compiler option.)

Type of an \char`\"{}uint16\+\_\+t\char`\"{} object located in flash R\+OM. \mbox{\Hypertarget{group__avr__pgmspace_ga31bad0d22ead95a41e725c38ea63eb26}\label{group__avr__pgmspace_ga31bad0d22ead95a41e725c38ea63eb26}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!prog\_uint32\_t@{prog\_uint32\_t}}
\index{prog\_uint32\_t@{prog\_uint32\_t}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{prog\_uint32\_t}{prog\_uint32\_t}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__avr__pgmspace_ga31bad0d22ead95a41e725c38ea63eb26}{prog\+\_\+uint32\+\_\+t}}}

\begin{DoxyNote}{Note}
D\+E\+P\+R\+E\+C\+A\+T\+ED
\end{DoxyNote}
This typedef is now deprecated because the usage of the \+\_\+\+\_\+progmem\+\_\+\+\_\+ attribute on a type is not supported in G\+CC. However, the use of the \+\_\+\+\_\+progmem\+\_\+\+\_\+ attribute on a variable declaration is supported, and this is now the recommended usage.

The typedef is only visible if the macro \+\_\+\+\_\+\+P\+R\+O\+G\+\_\+\+T\+Y\+P\+E\+S\+\_\+\+C\+O\+M\+P\+A\+T\+\_\+\+\_\+ has been defined before including $<$\mbox{\hyperlink{pgmspace_8h}{avr/pgmspace.\+h}}$>$ (either by a {\ttfamily \#define} directive, or by a -\/D compiler option.)

Type of an \char`\"{}uint32\+\_\+t\char`\"{} object located in flash R\+OM. \mbox{\Hypertarget{group__avr__pgmspace_gaa50eebe90a40e0276bcc49ea0482b211}\label{group__avr__pgmspace_gaa50eebe90a40e0276bcc49ea0482b211}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!prog\_uint64\_t@{prog\_uint64\_t}}
\index{prog\_uint64\_t@{prog\_uint64\_t}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{prog\_uint64\_t}{prog\_uint64\_t}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__avr__pgmspace_gaa50eebe90a40e0276bcc49ea0482b211}{prog\+\_\+uint64\+\_\+t}}}

\begin{DoxyNote}{Note}
D\+E\+P\+R\+E\+C\+A\+T\+ED
\end{DoxyNote}
This typedef is now deprecated because the usage of the \+\_\+\+\_\+progmem\+\_\+\+\_\+ attribute on a type is not supported in G\+CC. However, the use of the \+\_\+\+\_\+progmem\+\_\+\+\_\+ attribute on a variable declaration is supported, and this is now the recommended usage.

The typedef is only visible if the macro \+\_\+\+\_\+\+P\+R\+O\+G\+\_\+\+T\+Y\+P\+E\+S\+\_\+\+C\+O\+M\+P\+A\+T\+\_\+\+\_\+ has been defined before including $<$\mbox{\hyperlink{pgmspace_8h}{avr/pgmspace.\+h}}$>$ (either by a {\ttfamily \#define} directive, or by a -\/D compiler option.)

Type of an \char`\"{}uint64\+\_\+t\char`\"{} object located in flash R\+OM.

\begin{DoxyNote}{Note}
This type is not available when the compiler option -\/mint8 is in effect. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__pgmspace_ga39235a28487ae7790ce5f4c8178c8ed7}\label{group__avr__pgmspace_ga39235a28487ae7790ce5f4c8178c8ed7}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!prog\_uint8\_t@{prog\_uint8\_t}}
\index{prog\_uint8\_t@{prog\_uint8\_t}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{prog\_uint8\_t}{prog\_uint8\_t}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__avr__pgmspace_ga39235a28487ae7790ce5f4c8178c8ed7}{prog\+\_\+uint8\+\_\+t}}}

\begin{DoxyNote}{Note}
D\+E\+P\+R\+E\+C\+A\+T\+ED
\end{DoxyNote}
This typedef is now deprecated because the usage of the \+\_\+\+\_\+progmem\+\_\+\+\_\+ attribute on a type is not supported in G\+CC. However, the use of the \+\_\+\+\_\+progmem\+\_\+\+\_\+ attribute on a variable declaration is supported, and this is now the recommended usage.

The typedef is only visible if the macro \+\_\+\+\_\+\+P\+R\+O\+G\+\_\+\+T\+Y\+P\+E\+S\+\_\+\+C\+O\+M\+P\+A\+T\+\_\+\+\_\+ has been defined before including $<$\mbox{\hyperlink{pgmspace_8h}{avr/pgmspace.\+h}}$>$ (either by a {\ttfamily \#define} directive, or by a -\/D compiler option.)

Type of an \char`\"{}uint8\+\_\+t\char`\"{} object located in flash R\+OM. \mbox{\Hypertarget{group__avr__pgmspace_gadb50761b9f19d45449445208778ee420}\label{group__avr__pgmspace_gadb50761b9f19d45449445208778ee420}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!prog\_void@{prog\_void}}
\index{prog\_void@{prog\_void}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{prog\_void}{prog\_void}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__avr__pgmspace_gadb50761b9f19d45449445208778ee420}{prog\+\_\+void}}}

\begin{DoxyNote}{Note}
D\+E\+P\+R\+E\+C\+A\+T\+ED
\end{DoxyNote}
This typedef is now deprecated because the usage of the \+\_\+\+\_\+progmem\+\_\+\+\_\+ attribute on a type is not supported in G\+CC. However, the use of the \+\_\+\+\_\+progmem\+\_\+\+\_\+ attribute on a variable declaration is supported, and this is now the recommended usage.

The typedef is only visible if the macro \+\_\+\+\_\+\+P\+R\+O\+G\+\_\+\+T\+Y\+P\+E\+S\+\_\+\+C\+O\+M\+P\+A\+T\+\_\+\+\_\+ has been defined before including $<$\mbox{\hyperlink{pgmspace_8h}{avr/pgmspace.\+h}}$>$ (either by a {\ttfamily \#define} directive, or by a -\/D compiler option.)

Type of a \char`\"{}void\char`\"{} object located in flash R\+OM. Does not make much sense by itself, but can be used to declare a \char`\"{}void $\ast$\char`\"{} object in flash R\+OM. 

\doxysubsubsection{Function Documentation}
\mbox{\Hypertarget{group__avr__pgmspace_ga469016cff9c68b19838ad26e099b0fc3}\label{group__avr__pgmspace_ga469016cff9c68b19838ad26e099b0fc3}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!memccpy\_P@{memccpy\_P}}
\index{memccpy\_P@{memccpy\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{memccpy\_P()}{memccpy\_P()}}
{\footnotesize\ttfamily void $\ast$ memccpy\+\_\+P (\begin{DoxyParamCaption}\item[{void $\ast$}]{dest,  }\item[{const void $\ast$}]{src,  }\item[{int}]{val,  }\item[{size\+\_\+t}]{len }\end{DoxyParamCaption})}

This function is similar to memccpy() except that {\ttfamily src} is pointer to a string in program space. \mbox{\Hypertarget{group__avr__pgmspace_ga44f0b73a84e00da51ae135affc706b34}\label{group__avr__pgmspace_ga44f0b73a84e00da51ae135affc706b34}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!memchr\_P@{memchr\_P}}
\index{memchr\_P@{memchr\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{memchr\_P()}{memchr\_P()}}
{\footnotesize\ttfamily const void $\ast$ memchr\+\_\+P (\begin{DoxyParamCaption}\item[{const void $\ast$}]{s,  }\item[{int}]{val,  }\item[{size\+\_\+t}]{len }\end{DoxyParamCaption})}



Scan flash memory for a character. 

The \mbox{\hyperlink{group__avr__pgmspace_ga44f0b73a84e00da51ae135affc706b34}{memchr\+\_\+\+P()}} function scans the first {\ttfamily len} bytes of the flash memory area pointed to by {\ttfamily s} for the character {\ttfamily val}. The first byte to match {\ttfamily val} (interpreted as an unsigned character) stops the operation.

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga44f0b73a84e00da51ae135affc706b34}{memchr\+\_\+\+P()}} function returns a pointer to the matching byte or {\ttfamily N\+U\+LL} if the character does not occur in the given memory area. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_gab1b0b56685303c2452e98914e7e5d6d0}\label{group__avr__pgmspace_gab1b0b56685303c2452e98914e7e5d6d0}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!memcmp\_P@{memcmp\_P}}
\index{memcmp\_P@{memcmp\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{memcmp\_P()}{memcmp\_P()}}
{\footnotesize\ttfamily int memcmp\+\_\+P (\begin{DoxyParamCaption}\item[{const void $\ast$}]{s1,  }\item[{const void $\ast$}]{s2,  }\item[{size\+\_\+t}]{len }\end{DoxyParamCaption})}



Compare memory areas. 

The \mbox{\hyperlink{group__avr__pgmspace_gab1b0b56685303c2452e98914e7e5d6d0}{memcmp\+\_\+\+P()}} function compares the first {\ttfamily len} bytes of the memory areas {\ttfamily s1} and flash {\ttfamily s2}. The comparision is performed using unsigned char operations.

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_gab1b0b56685303c2452e98914e7e5d6d0}{memcmp\+\_\+\+P()}} function returns an integer less than, equal to, or greater than zero if the first {\ttfamily len} bytes of {\ttfamily s1} is found, respectively, to be less than, to match, or be greater than the first {\ttfamily len} bytes of {\ttfamily s2}. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga80332272d69f05daab5f177723380175}\label{group__avr__pgmspace_ga80332272d69f05daab5f177723380175}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!memcmp\_PF@{memcmp\_PF}}
\index{memcmp\_PF@{memcmp\_PF}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{memcmp\_PF()}{memcmp\_PF()}}
{\footnotesize\ttfamily int memcmp\+\_\+\+PF (\begin{DoxyParamCaption}\item[{const void $\ast$}]{s1,  }\item[{\mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}}}]{s2,  }\item[{size\+\_\+t}]{len }\end{DoxyParamCaption})}



Compare memory areas. 

The \mbox{\hyperlink{group__avr__pgmspace_ga80332272d69f05daab5f177723380175}{memcmp\+\_\+\+P\+F()}} function compares the first {\ttfamily len} bytes of the memory areas {\ttfamily s1} and flash {\ttfamily s2}. The comparision is performed using unsigned char operations. It is an equivalent of \mbox{\hyperlink{group__avr__pgmspace_gab1b0b56685303c2452e98914e7e5d6d0}{memcmp\+\_\+\+P()}} function, except that it is capable working on all F\+L\+A\+SH including the exteded area above 64kB.

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga80332272d69f05daab5f177723380175}{memcmp\+\_\+\+P\+F()}} function returns an integer less than, equal to, or greater than zero if the first {\ttfamily len} bytes of {\ttfamily s1} is found, respectively, to be less than, to match, or be greater than the first {\ttfamily len} bytes of {\ttfamily s2}. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_gad92fa2ebe26e65fa424051047d21a0eb}\label{group__avr__pgmspace_gad92fa2ebe26e65fa424051047d21a0eb}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!memcpy\_P@{memcpy\_P}}
\index{memcpy\_P@{memcpy\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{memcpy\_P()}{memcpy\_P()}}
{\footnotesize\ttfamily void $\ast$ memcpy\+\_\+P (\begin{DoxyParamCaption}\item[{void $\ast$}]{dest,  }\item[{const void $\ast$}]{src,  }\item[{size\+\_\+t}]{n }\end{DoxyParamCaption})}

The \mbox{\hyperlink{group__avr__pgmspace_gad92fa2ebe26e65fa424051047d21a0eb}{memcpy\+\_\+\+P()}} function is similar to memcpy(), except the src string resides in program space.

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_gad92fa2ebe26e65fa424051047d21a0eb}{memcpy\+\_\+\+P()}} function returns a pointer to dest. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga13cc6cd0692aeccaac2789350a16412b}\label{group__avr__pgmspace_ga13cc6cd0692aeccaac2789350a16412b}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!memcpy\_PF@{memcpy\_PF}}
\index{memcpy\_PF@{memcpy\_PF}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{memcpy\_PF()}{memcpy\_PF()}}
{\footnotesize\ttfamily void $\ast$ memcpy\+\_\+\+PF (\begin{DoxyParamCaption}\item[{void $\ast$}]{dest,  }\item[{\mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}}}]{src,  }\item[{size\+\_\+t}]{n }\end{DoxyParamCaption})}



Copy a memory block from flash to S\+R\+AM. 

The \mbox{\hyperlink{group__avr__pgmspace_ga13cc6cd0692aeccaac2789350a16412b}{memcpy\+\_\+\+P\+F()}} function is similar to memcpy(), except the data is copied from the program space and is addressed using a far pointer.


\begin{DoxyParams}{Parameters}
{\em dest} & A pointer to the destination buffer \\
\hline
{\em src} & A far pointer to the origin of data in flash memory \\
\hline
{\em n} & The number of bytes to be copied\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga13cc6cd0692aeccaac2789350a16412b}{memcpy\+\_\+\+P\+F()}} function returns a pointer to {\itshape dst}. The contents of R\+A\+M\+PZ S\+FR are undefined when the function returns. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_gaee844cc0ac8f736e6599dbaae1fba328}\label{group__avr__pgmspace_gaee844cc0ac8f736e6599dbaae1fba328}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!memmem\_P@{memmem\_P}}
\index{memmem\_P@{memmem\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{memmem\_P()}{memmem\_P()}}
{\footnotesize\ttfamily void $\ast$ memmem\+\_\+P (\begin{DoxyParamCaption}\item[{const void $\ast$}]{s1,  }\item[{size\+\_\+t}]{len1,  }\item[{const void $\ast$}]{s2,  }\item[{size\+\_\+t}]{len2 }\end{DoxyParamCaption})}

The \mbox{\hyperlink{group__avr__pgmspace_gaee844cc0ac8f736e6599dbaae1fba328}{memmem\+\_\+\+P()}} function is similar to memmem() except that {\ttfamily s2} is pointer to a string in program space. \mbox{\Hypertarget{group__avr__pgmspace_ga8dd5ea616f34e8fdc2ae4fa9452d8a88}\label{group__avr__pgmspace_ga8dd5ea616f34e8fdc2ae4fa9452d8a88}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!memrchr\_P@{memrchr\_P}}
\index{memrchr\_P@{memrchr\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{memrchr\_P()}{memrchr\_P()}}
{\footnotesize\ttfamily const void memrchr\+\_\+P (\begin{DoxyParamCaption}\item[{const void $\ast$}]{src,  }\item[{int}]{val,  }\item[{size\+\_\+t}]{len }\end{DoxyParamCaption})}

The \mbox{\hyperlink{group__avr__pgmspace_ga8dd5ea616f34e8fdc2ae4fa9452d8a88}{memrchr\+\_\+\+P()}} function is like the \mbox{\hyperlink{group__avr__pgmspace_ga44f0b73a84e00da51ae135affc706b34}{memchr\+\_\+\+P()}} function, except that it searches backwards from the end of the {\ttfamily len} bytes pointed to by {\ttfamily src} instead of forwards from the front. (Glibc, G\+NU extension.)

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga8dd5ea616f34e8fdc2ae4fa9452d8a88}{memrchr\+\_\+\+P()}} function returns a pointer to the matching byte or {\ttfamily N\+U\+LL} if the character does not occur in the given memory area. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga4b2a918fb5938763024b3818ee89fbef}\label{group__avr__pgmspace_ga4b2a918fb5938763024b3818ee89fbef}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strcasecmp\_P@{strcasecmp\_P}}
\index{strcasecmp\_P@{strcasecmp\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strcasecmp\_P()}{strcasecmp\_P()}}
{\footnotesize\ttfamily int strcasecmp\+\_\+P (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s1,  }\item[{const char $\ast$}]{s2 }\end{DoxyParamCaption})}



Compare two strings ignoring case. 

The \mbox{\hyperlink{group__avr__pgmspace_ga4b2a918fb5938763024b3818ee89fbef}{strcasecmp\+\_\+\+P()}} function compares the two strings {\ttfamily s1} and {\ttfamily s2}, ignoring the case of the characters.


\begin{DoxyParams}{Parameters}
{\em s1} & A pointer to a string in the devices S\+R\+AM. \\
\hline
{\em s2} & A pointer to a string in the devices Flash.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga4b2a918fb5938763024b3818ee89fbef}{strcasecmp\+\_\+\+P()}} function returns an integer less than, equal to, or greater than zero if {\ttfamily s1} is found, respectively, to be less than, to match, or be greater than {\ttfamily s2}. A consequence of the ordering used by \mbox{\hyperlink{group__avr__pgmspace_ga4b2a918fb5938763024b3818ee89fbef}{strcasecmp\+\_\+\+P()}} is that if {\ttfamily s1} is an initial substring of {\ttfamily s2}, then {\ttfamily s1} is considered to be \char`\"{}less than\char`\"{} {\ttfamily s2}. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga319ec42a66ba8333213fa10dbe06a606}\label{group__avr__pgmspace_ga319ec42a66ba8333213fa10dbe06a606}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strcasecmp\_PF@{strcasecmp\_PF}}
\index{strcasecmp\_PF@{strcasecmp\_PF}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strcasecmp\_PF()}{strcasecmp\_PF()}}
{\footnotesize\ttfamily int strcasecmp\+\_\+\+PF (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s1,  }\item[{\mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}}}]{s2 }\end{DoxyParamCaption})}



Compare two strings ignoring case. 

The \mbox{\hyperlink{group__avr__pgmspace_ga319ec42a66ba8333213fa10dbe06a606}{strcasecmp\+\_\+\+P\+F()}} function compares the two strings {\itshape s1} and {\itshape s2}, ignoring the case of the characters.


\begin{DoxyParams}{Parameters}
{\em s1} & A pointer to the first string in S\+R\+AM \\
\hline
{\em s2} & A far pointer to the second string in Flash\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga319ec42a66ba8333213fa10dbe06a606}{strcasecmp\+\_\+\+P\+F()}} function returns an integer less than, equal to, or greater than zero if {\itshape s1} is found, respectively, to be less than, to match, or be greater than {\itshape s2}. The contents of R\+A\+M\+PZ S\+FR are undefined when the function returns. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_gabf84fa847bf164ae7eee355a808e76fb}\label{group__avr__pgmspace_gabf84fa847bf164ae7eee355a808e76fb}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strcasestr\_P@{strcasestr\_P}}
\index{strcasestr\_P@{strcasestr\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strcasestr\_P()}{strcasestr\_P()}}
{\footnotesize\ttfamily char $\ast$ strcasestr\+\_\+P (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s1,  }\item[{const char $\ast$}]{s2 }\end{DoxyParamCaption})}

This funtion is similar to strcasestr() except that {\ttfamily s2} is pointer to a string in program space. \mbox{\Hypertarget{group__avr__pgmspace_ga5c1bae2b20f7d5ec00411c6378b8ed70}\label{group__avr__pgmspace_ga5c1bae2b20f7d5ec00411c6378b8ed70}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strcat\_P@{strcat\_P}}
\index{strcat\_P@{strcat\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strcat\_P()}{strcat\_P()}}
{\footnotesize\ttfamily char $\ast$ strcat\+\_\+P (\begin{DoxyParamCaption}\item[{char $\ast$}]{dest,  }\item[{const char $\ast$}]{src }\end{DoxyParamCaption})}

The \mbox{\hyperlink{group__avr__pgmspace_ga5c1bae2b20f7d5ec00411c6378b8ed70}{strcat\+\_\+\+P()}} function is similar to strcat() except that the {\itshape src} string must be located in program space (flash).

\begin{DoxyReturn}{Returns}
The strcat() function returns a pointer to the resulting string {\itshape dest}. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga9530b4f628b49635c4085c269da8867a}\label{group__avr__pgmspace_ga9530b4f628b49635c4085c269da8867a}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strcat\_PF@{strcat\_PF}}
\index{strcat\_PF@{strcat\_PF}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strcat\_PF()}{strcat\_PF()}}
{\footnotesize\ttfamily char $\ast$ strcat\+\_\+\+PF (\begin{DoxyParamCaption}\item[{char $\ast$}]{dst,  }\item[{\mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}}}]{src }\end{DoxyParamCaption})}



Concatenates two strings. 

The \mbox{\hyperlink{group__avr__pgmspace_ga9530b4f628b49635c4085c269da8867a}{strcat\+\_\+\+P\+F()}} function is similar to strcat() except that the {\itshape src} string must be located in program space (flash) and is addressed using a far pointer


\begin{DoxyParams}{Parameters}
{\em dst} & A pointer to the destination string in S\+R\+AM \\
\hline
{\em src} & A far pointer to the string to be appended in Flash\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga9530b4f628b49635c4085c269da8867a}{strcat\+\_\+\+P\+F()}} function returns a pointer to the resulting string {\itshape dst}. The contents of R\+A\+M\+PZ S\+FR are undefined when the function returns 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga105078f0de82663d9cfe4963e6bc677e}\label{group__avr__pgmspace_ga105078f0de82663d9cfe4963e6bc677e}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strchr\_P@{strchr\_P}}
\index{strchr\_P@{strchr\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strchr\_P()}{strchr\_P()}}
{\footnotesize\ttfamily const char $\ast$ strchr\+\_\+P (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s,  }\item[{int}]{val }\end{DoxyParamCaption})}



Locate character in program space string. 

The \mbox{\hyperlink{group__avr__pgmspace_ga105078f0de82663d9cfe4963e6bc677e}{strchr\+\_\+\+P()}} function locates the first occurrence of {\ttfamily val} (converted to a char) in the string pointed to by {\ttfamily s} in program space. The terminating null character is considered to be part of the string.

The \mbox{\hyperlink{group__avr__pgmspace_ga105078f0de82663d9cfe4963e6bc677e}{strchr\+\_\+\+P()}} function is similar to strchr() except that {\ttfamily s} is pointer to a string in program space.

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga105078f0de82663d9cfe4963e6bc677e}{strchr\+\_\+\+P()}} function returns a pointer to the matched character or {\ttfamily N\+U\+LL} if the character is not found. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga0934ce6517882f4146be5a7db9b23d6b}\label{group__avr__pgmspace_ga0934ce6517882f4146be5a7db9b23d6b}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strchrnul\_P@{strchrnul\_P}}
\index{strchrnul\_P@{strchrnul\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strchrnul\_P()}{strchrnul\_P()}}
{\footnotesize\ttfamily const char $\ast$ strchrnul\+\_\+P (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s,  }\item[{int}]{c }\end{DoxyParamCaption})}

The \mbox{\hyperlink{group__avr__pgmspace_ga0934ce6517882f4146be5a7db9b23d6b}{strchrnul\+\_\+\+P()}} function is like \mbox{\hyperlink{group__avr__pgmspace_ga105078f0de82663d9cfe4963e6bc677e}{strchr\+\_\+\+P()}} except that if {\ttfamily c} is not found in {\ttfamily s}, then it returns a pointer to the null byte at the end of {\ttfamily s}, rather than {\ttfamily N\+U\+LL}. (Glibc, G\+NU extension.)

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga0934ce6517882f4146be5a7db9b23d6b}{strchrnul\+\_\+\+P()}} function returns a pointer to the matched character, or a pointer to the null byte at the end of {\ttfamily s} (i.\+e., {\ttfamily s+strlen}(s)) if the character is not found. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_gab0c75b8cce460448b747c29231da847c}\label{group__avr__pgmspace_gab0c75b8cce460448b747c29231da847c}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strcmp\_P@{strcmp\_P}}
\index{strcmp\_P@{strcmp\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strcmp\_P()}{strcmp\_P()}}
{\footnotesize\ttfamily int strcmp\+\_\+P (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s1,  }\item[{const char $\ast$}]{s2 }\end{DoxyParamCaption})}

The \mbox{\hyperlink{group__avr__pgmspace_gab0c75b8cce460448b747c29231da847c}{strcmp\+\_\+\+P()}} function is similar to strcmp() except that {\ttfamily s2} is pointer to a string in program space.

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_gab0c75b8cce460448b747c29231da847c}{strcmp\+\_\+\+P()}} function returns an integer less than, equal to, or greater than zero if {\ttfamily s1} is found, respectively, to be less than, to match, or be greater than {\ttfamily s2}. A consequence of the ordering used by \mbox{\hyperlink{group__avr__pgmspace_gab0c75b8cce460448b747c29231da847c}{strcmp\+\_\+\+P()}} is that if {\ttfamily s1} is an initial substring of {\ttfamily s2}, then {\ttfamily s1} is considered to be \char`\"{}less than\char`\"{} {\ttfamily s2}. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_gad34d5b7d040fcb97939e939f19d88a5f}\label{group__avr__pgmspace_gad34d5b7d040fcb97939e939f19d88a5f}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strcmp\_PF@{strcmp\_PF}}
\index{strcmp\_PF@{strcmp\_PF}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strcmp\_PF()}{strcmp\_PF()}}
{\footnotesize\ttfamily int strcmp\+\_\+\+PF (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s1,  }\item[{\mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}}}]{s2 }\end{DoxyParamCaption})}



Compares two strings. 

The \mbox{\hyperlink{group__avr__pgmspace_gad34d5b7d040fcb97939e939f19d88a5f}{strcmp\+\_\+\+P\+F()}} function is similar to strcmp() except that {\itshape s2} is a far pointer to a string in program space.


\begin{DoxyParams}{Parameters}
{\em s1} & A pointer to the first string in S\+R\+AM \\
\hline
{\em s2} & A far pointer to the second string in Flash\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_gad34d5b7d040fcb97939e939f19d88a5f}{strcmp\+\_\+\+P\+F()}} function returns an integer less than, equal to, or greater than zero if {\itshape s1} is found, respectively, to be less than, to match, or be greater than {\itshape s2}. The contents of R\+A\+M\+PZ S\+FR are undefined when the function returns. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga5749897c91c479d02054fc02128de482}\label{group__avr__pgmspace_ga5749897c91c479d02054fc02128de482}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strcpy\_P@{strcpy\_P}}
\index{strcpy\_P@{strcpy\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strcpy\_P()}{strcpy\_P()}}
{\footnotesize\ttfamily char $\ast$ strcpy\+\_\+P (\begin{DoxyParamCaption}\item[{char $\ast$}]{dest,  }\item[{const char $\ast$}]{src }\end{DoxyParamCaption})}

The \mbox{\hyperlink{group__avr__pgmspace_ga5749897c91c479d02054fc02128de482}{strcpy\+\_\+\+P()}} function is similar to strcpy() except that src is a pointer to a string in program space.

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga5749897c91c479d02054fc02128de482}{strcpy\+\_\+\+P()}} function returns a pointer to the destination string dest. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_gacd5af73767ca6defbec02736072dfb30}\label{group__avr__pgmspace_gacd5af73767ca6defbec02736072dfb30}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strcpy\_PF@{strcpy\_PF}}
\index{strcpy\_PF@{strcpy\_PF}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strcpy\_PF()}{strcpy\_PF()}}
{\footnotesize\ttfamily char $\ast$ strcpy\+\_\+\+PF (\begin{DoxyParamCaption}\item[{char $\ast$}]{dst,  }\item[{\mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}}}]{src }\end{DoxyParamCaption})}



Duplicate a string. 

The \mbox{\hyperlink{group__avr__pgmspace_gacd5af73767ca6defbec02736072dfb30}{strcpy\+\_\+\+P\+F()}} function is similar to strcpy() except that {\itshape src} is a far pointer to a string in program space.


\begin{DoxyParams}{Parameters}
{\em dst} & A pointer to the destination string in S\+R\+AM \\
\hline
{\em src} & A far pointer to the source string in Flash\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_gacd5af73767ca6defbec02736072dfb30}{strcpy\+\_\+\+P\+F()}} function returns a pointer to the destination string {\itshape dst}. The contents of R\+A\+M\+PZ S\+FR are undefined when the funcion returns. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga8afa4577f8ce7241a948af61e6991c67}\label{group__avr__pgmspace_ga8afa4577f8ce7241a948af61e6991c67}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strcspn\_P@{strcspn\_P}}
\index{strcspn\_P@{strcspn\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strcspn\_P()}{strcspn\_P()}}
{\footnotesize\ttfamily size\+\_\+t strcspn\+\_\+P (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s,  }\item[{const char $\ast$}]{reject }\end{DoxyParamCaption})}

The \mbox{\hyperlink{group__avr__pgmspace_ga8afa4577f8ce7241a948af61e6991c67}{strcspn\+\_\+\+P()}} function calculates the length of the initial segment of {\ttfamily s} which consists entirely of characters not in {\ttfamily reject}. This function is similar to strcspn() except that {\ttfamily reject} is a pointer to a string in program space.

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga8afa4577f8ce7241a948af61e6991c67}{strcspn\+\_\+\+P()}} function returns the number of characters in the initial segment of {\ttfamily s} which are not in the string {\ttfamily reject}. The terminating zero is not considered as a part of string. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga85328d5e578db3c60f9753cb1769dc96}\label{group__avr__pgmspace_ga85328d5e578db3c60f9753cb1769dc96}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strlcat\_P@{strlcat\_P}}
\index{strlcat\_P@{strlcat\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strlcat\_P()}{strlcat\_P()}}
{\footnotesize\ttfamily size\+\_\+t strlcat\+\_\+P (\begin{DoxyParamCaption}\item[{char $\ast$}]{dst,  }\item[{const char $\ast$}]{src,  }\item[{size\+\_\+t}]{siz }\end{DoxyParamCaption})}



Concatenate two strings. 

The \mbox{\hyperlink{group__avr__pgmspace_ga85328d5e578db3c60f9753cb1769dc96}{strlcat\+\_\+\+P()}} function is similar to \mbox{\hyperlink{group__avr__string_ga63e609bfa0d354dcd7e35b297c2e6fdd}{strlcat()}}, except that the {\ttfamily src} string must be located in program space (flash).

Appends {\ttfamily src} to string {\ttfamily dst} of size {\ttfamily siz} (unlike strncat(), {\ttfamily siz} is the full size of {\ttfamily dst}, not space left). At most {\ttfamily siz-\/1} characters will be copied. Always N\+U\+LL terminates (unless {\ttfamily siz} $<$= {\ttfamily strlen(dst)}).

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga85328d5e578db3c60f9753cb1769dc96}{strlcat\+\_\+\+P()}} function returns strlen(src) + M\+IN(siz, strlen(initial dst)). If retval $>$= siz, truncation occurred. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_gaf632b479b04d0c98caf94de85dc11f3e}\label{group__avr__pgmspace_gaf632b479b04d0c98caf94de85dc11f3e}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strlcat\_PF@{strlcat\_PF}}
\index{strlcat\_PF@{strlcat\_PF}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strlcat\_PF()}{strlcat\_PF()}}
{\footnotesize\ttfamily size\+\_\+t strlcat\+\_\+\+PF (\begin{DoxyParamCaption}\item[{char $\ast$}]{dst,  }\item[{\mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}}}]{src,  }\item[{size\+\_\+t}]{n }\end{DoxyParamCaption})}



Concatenate two strings. 

The \mbox{\hyperlink{group__avr__pgmspace_gaf632b479b04d0c98caf94de85dc11f3e}{strlcat\+\_\+\+P\+F()}} function is similar to \mbox{\hyperlink{group__avr__string_ga63e609bfa0d354dcd7e35b297c2e6fdd}{strlcat()}}, except that the {\itshape src} string must be located in program space (flash) and is addressed using a far pointer.

Appends src to string dst of size {\itshape n} (unlike strncat(), {\itshape n} is the full size of {\itshape dst}, not space left). At most {\itshape n-\/1} characters will be copied. Always N\+U\+LL terminates (unless {\itshape n} $<$= strlen({\itshape dst})).


\begin{DoxyParams}{Parameters}
{\em dst} & A pointer to the destination string in S\+R\+AM \\
\hline
{\em src} & A far pointer to the source string in Flash \\
\hline
{\em n} & The total number of bytes allocated to the destination string\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_gaf632b479b04d0c98caf94de85dc11f3e}{strlcat\+\_\+\+P\+F()}} function returns strlen({\itshape src}) + M\+IN({\itshape n}, strlen(initial {\itshape dst})). If retval $>$= {\itshape n}, truncation occurred. The contents of R\+A\+M\+PZ S\+FR are undefined when the funcion returns. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_gab95a4e6a4b527ee389c72bdabb991e08}\label{group__avr__pgmspace_gab95a4e6a4b527ee389c72bdabb991e08}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strlcpy\_P@{strlcpy\_P}}
\index{strlcpy\_P@{strlcpy\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strlcpy\_P()}{strlcpy\_P()}}
{\footnotesize\ttfamily size\+\_\+t strlcpy\+\_\+P (\begin{DoxyParamCaption}\item[{char $\ast$}]{dst,  }\item[{const char $\ast$}]{src,  }\item[{size\+\_\+t}]{siz }\end{DoxyParamCaption})}



Copy a string from progmem to R\+AM. 

Copy {\ttfamily src} to string {\ttfamily dst} of size {\ttfamily siz}. At most {\ttfamily siz-\/1} characters will be copied. Always N\+U\+LL terminates (unless {\ttfamily siz} == 0). The \mbox{\hyperlink{group__avr__pgmspace_gab95a4e6a4b527ee389c72bdabb991e08}{strlcpy\+\_\+\+P()}} function is similar to \mbox{\hyperlink{group__avr__string_ga64bc119cf084d1ecfd95098994597f12}{strlcpy()}} except that the {\ttfamily src} is pointer to a string in memory space.

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_gab95a4e6a4b527ee389c72bdabb991e08}{strlcpy\+\_\+\+P()}} function returns strlen(src). If retval $>$= siz, truncation occurred. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga6674a08f95d5daedce3079b96be63008}\label{group__avr__pgmspace_ga6674a08f95d5daedce3079b96be63008}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strlcpy\_PF@{strlcpy\_PF}}
\index{strlcpy\_PF@{strlcpy\_PF}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strlcpy\_PF()}{strlcpy\_PF()}}
{\footnotesize\ttfamily size\+\_\+t strlcpy\+\_\+\+PF (\begin{DoxyParamCaption}\item[{char $\ast$}]{dst,  }\item[{\mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}}}]{src,  }\item[{size\+\_\+t}]{siz }\end{DoxyParamCaption})}



Copy a string from progmem to R\+AM. 

Copy src to string dst of size siz. At most siz-\/1 characters will be copied. Always N\+U\+LL terminates (unless siz == 0).

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga6674a08f95d5daedce3079b96be63008}{strlcpy\+\_\+\+P\+F()}} function returns strlen(src). If retval $>$= siz, truncation occurred. The contents of R\+A\+M\+PZ S\+FR are undefined when the function returns. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_gae2fb71ebed915074ec815d9d8f876c52}\label{group__avr__pgmspace_gae2fb71ebed915074ec815d9d8f876c52}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strlen\_P@{strlen\_P}}
\index{strlen\_P@{strlen\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strlen\_P()}{strlen\_P()}}
{\footnotesize\ttfamily size\+\_\+t strlen\+\_\+P (\begin{DoxyParamCaption}\item[{const char $\ast$}]{src }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}

The \mbox{\hyperlink{group__avr__pgmspace_gae2fb71ebed915074ec815d9d8f876c52}{strlen\+\_\+\+P()}} function is similar to strlen(), except that src is a pointer to a string in program space.

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_gae2fb71ebed915074ec815d9d8f876c52}{strlen\+\_\+\+P()}} function returns the number of characters in src.
\end{DoxyReturn}
\begin{DoxyNote}{Note}
\mbox{\hyperlink{group__avr__pgmspace_gae2fb71ebed915074ec815d9d8f876c52}{strlen\+\_\+\+P()}} is implemented as an inline function in the \mbox{\hyperlink{pgmspace_8h}{avr/pgmspace.\+h}} header file, which will check if the length of the string is a constant and known at compile time. If it is not known at compile time, the macro will issue a call to \+\_\+\+\_\+strlen\+\_\+\+P() which will then calculate the length of the string as normal. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__pgmspace_ga4ce249cbcdb9ff968c76a2d917072da9}\label{group__avr__pgmspace_ga4ce249cbcdb9ff968c76a2d917072da9}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strlen\_PF@{strlen\_PF}}
\index{strlen\_PF@{strlen\_PF}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strlen\_PF()}{strlen\_PF()}}
{\footnotesize\ttfamily size\+\_\+t strlen\+\_\+\+PF (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}}}]{s }\end{DoxyParamCaption})}



Obtain the length of a string. 

The \mbox{\hyperlink{group__avr__pgmspace_ga4ce249cbcdb9ff968c76a2d917072da9}{strlen\+\_\+\+P\+F()}} function is similar to strlen(), except that {\itshape s} is a far pointer to a string in program space.


\begin{DoxyParams}{Parameters}
{\em s} & A far pointer to the string in flash\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga4ce249cbcdb9ff968c76a2d917072da9}{strlen\+\_\+\+P\+F()}} function returns the number of characters in {\itshape s}. The contents of R\+A\+M\+PZ S\+FR are undefined when the function returns. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga7a9100487dc0a7e5c501966c94e0ecdb}\label{group__avr__pgmspace_ga7a9100487dc0a7e5c501966c94e0ecdb}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strncasecmp\_P@{strncasecmp\_P}}
\index{strncasecmp\_P@{strncasecmp\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strncasecmp\_P()}{strncasecmp\_P()}}
{\footnotesize\ttfamily int strncasecmp\+\_\+P (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s1,  }\item[{const char $\ast$}]{s2,  }\item[{size\+\_\+t}]{n }\end{DoxyParamCaption})}



Compare two strings ignoring case. 

The \mbox{\hyperlink{group__avr__pgmspace_ga7a9100487dc0a7e5c501966c94e0ecdb}{strncasecmp\+\_\+\+P()}} function is similar to \mbox{\hyperlink{group__avr__pgmspace_ga4b2a918fb5938763024b3818ee89fbef}{strcasecmp\+\_\+\+P()}}, except it only compares the first {\ttfamily n} characters of {\ttfamily s1}.


\begin{DoxyParams}{Parameters}
{\em s1} & A pointer to a string in the devices S\+R\+AM. \\
\hline
{\em s2} & A pointer to a string in the devices Flash. \\
\hline
{\em n} & The maximum number of bytes to compare.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga7a9100487dc0a7e5c501966c94e0ecdb}{strncasecmp\+\_\+\+P()}} function returns an integer less than, equal to, or greater than zero if {\ttfamily s1} (or the first {\ttfamily n} bytes thereof) is found, respectively, to be less than, to match, or be greater than {\ttfamily s2}. A consequence of the ordering used by \mbox{\hyperlink{group__avr__pgmspace_ga7a9100487dc0a7e5c501966c94e0ecdb}{strncasecmp\+\_\+\+P()}} is that if {\ttfamily s1} is an initial substring of {\ttfamily s2}, then {\ttfamily s1} is considered to be \char`\"{}less than\char`\"{} {\ttfamily s2}. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga086db857a2372e4c84cc16204ac5292c}\label{group__avr__pgmspace_ga086db857a2372e4c84cc16204ac5292c}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strncasecmp\_PF@{strncasecmp\_PF}}
\index{strncasecmp\_PF@{strncasecmp\_PF}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strncasecmp\_PF()}{strncasecmp\_PF()}}
{\footnotesize\ttfamily int strncasecmp\+\_\+\+PF (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s1,  }\item[{\mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}}}]{s2,  }\item[{size\+\_\+t}]{n }\end{DoxyParamCaption})}



Compare two strings ignoring case. 

The \mbox{\hyperlink{group__avr__pgmspace_ga086db857a2372e4c84cc16204ac5292c}{strncasecmp\+\_\+\+P\+F()}} function is similar to \mbox{\hyperlink{group__avr__pgmspace_ga319ec42a66ba8333213fa10dbe06a606}{strcasecmp\+\_\+\+P\+F()}}, except it only compares the first {\itshape n} characters of {\itshape s1} and the string in flash is addressed using a far pointer.


\begin{DoxyParams}{Parameters}
{\em s1} & A pointer to a string in S\+R\+AM \\
\hline
{\em s2} & A far pointer to a string in Flash \\
\hline
{\em n} & The maximum number of bytes to compare\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga086db857a2372e4c84cc16204ac5292c}{strncasecmp\+\_\+\+P\+F()}} function returns an integer less than, equal to, or greater than zero if {\itshape s1} (or the first {\itshape n} bytes thereof) is found, respectively, to be less than, to match, or be greater than {\itshape s2}. The contents of R\+A\+M\+PZ S\+FR are undefined when the function returns. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga8641381919448f62d9caa5bd81b84fbf}\label{group__avr__pgmspace_ga8641381919448f62d9caa5bd81b84fbf}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strncat\_P@{strncat\_P}}
\index{strncat\_P@{strncat\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strncat\_P()}{strncat\_P()}}
{\footnotesize\ttfamily char $\ast$ strncat\+\_\+P (\begin{DoxyParamCaption}\item[{char $\ast$}]{dest,  }\item[{const char $\ast$}]{src,  }\item[{size\+\_\+t}]{len }\end{DoxyParamCaption})}



Concatenate two strings. 

The \mbox{\hyperlink{group__avr__pgmspace_ga8641381919448f62d9caa5bd81b84fbf}{strncat\+\_\+\+P()}} function is similar to strncat(), except that the {\itshape src} string must be located in program space (flash).

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga8641381919448f62d9caa5bd81b84fbf}{strncat\+\_\+\+P()}} function returns a pointer to the resulting string dest. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga903fbfd9dcf93630e7a5da710d170da0}\label{group__avr__pgmspace_ga903fbfd9dcf93630e7a5da710d170da0}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strncat\_PF@{strncat\_PF}}
\index{strncat\_PF@{strncat\_PF}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strncat\_PF()}{strncat\_PF()}}
{\footnotesize\ttfamily char $\ast$ strncat\+\_\+\+PF (\begin{DoxyParamCaption}\item[{char $\ast$}]{dst,  }\item[{\mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}}}]{src,  }\item[{size\+\_\+t}]{n }\end{DoxyParamCaption})}



Concatenate two strings. 

The \mbox{\hyperlink{group__avr__pgmspace_ga903fbfd9dcf93630e7a5da710d170da0}{strncat\+\_\+\+P\+F()}} function is similar to strncat(), except that the {\itshape src} string must be located in program space (flash) and is addressed using a far pointer.


\begin{DoxyParams}{Parameters}
{\em dst} & A pointer to the destination string in S\+R\+AM \\
\hline
{\em src} & A far pointer to the source string in Flash \\
\hline
{\em n} & The maximum number of bytes to append\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga903fbfd9dcf93630e7a5da710d170da0}{strncat\+\_\+\+P\+F()}} function returns a pointer to the resulting string {\itshape dst}. The contents of R\+A\+M\+PZ S\+FR are undefined when the function returns. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga3139220accf77b43102c23b58d249ee9}\label{group__avr__pgmspace_ga3139220accf77b43102c23b58d249ee9}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strncmp\_P@{strncmp\_P}}
\index{strncmp\_P@{strncmp\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strncmp\_P()}{strncmp\_P()}}
{\footnotesize\ttfamily int strncmp\+\_\+P (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s1,  }\item[{const char $\ast$}]{s2,  }\item[{size\+\_\+t}]{n }\end{DoxyParamCaption})}

The \mbox{\hyperlink{group__avr__pgmspace_ga3139220accf77b43102c23b58d249ee9}{strncmp\+\_\+\+P()}} function is similar to \mbox{\hyperlink{group__avr__pgmspace_gab0c75b8cce460448b747c29231da847c}{strcmp\+\_\+\+P()}} except it only compares the first (at most) n characters of s1 and s2.

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga3139220accf77b43102c23b58d249ee9}{strncmp\+\_\+\+P()}} function returns an integer less than, equal to, or greater than zero if s1 (or the first n bytes thereof) is found, respectively, to be less than, to match, or be greater than s2. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga31c3d78d72e8dc80e192d4bd6a65529e}\label{group__avr__pgmspace_ga31c3d78d72e8dc80e192d4bd6a65529e}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strncmp\_PF@{strncmp\_PF}}
\index{strncmp\_PF@{strncmp\_PF}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strncmp\_PF()}{strncmp\_PF()}}
{\footnotesize\ttfamily int strncmp\+\_\+\+PF (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s1,  }\item[{\mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}}}]{s2,  }\item[{size\+\_\+t}]{n }\end{DoxyParamCaption})}



Compare two strings with limited length. 

The \mbox{\hyperlink{group__avr__pgmspace_ga31c3d78d72e8dc80e192d4bd6a65529e}{strncmp\+\_\+\+P\+F()}} function is similar to \mbox{\hyperlink{group__avr__pgmspace_gad34d5b7d040fcb97939e939f19d88a5f}{strcmp\+\_\+\+P\+F()}} except it only compares the first (at most) {\itshape n} characters of {\itshape s1} and {\itshape s2}.


\begin{DoxyParams}{Parameters}
{\em s1} & A pointer to the first string in S\+R\+AM \\
\hline
{\em s2} & A far pointer to the second string in Flash \\
\hline
{\em n} & The maximum number of bytes to compare\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga31c3d78d72e8dc80e192d4bd6a65529e}{strncmp\+\_\+\+P\+F()}} function returns an integer less than, equal to, or greater than zero if {\itshape s1} (or the first {\itshape n} bytes thereof) is found, respectively, to be less than, to match, or be greater than {\itshape s2}. The contents of R\+A\+M\+PZ S\+FR are undefined when the function returns. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga1ed6a0ea90901b8ee8478b86d1b1c99a}\label{group__avr__pgmspace_ga1ed6a0ea90901b8ee8478b86d1b1c99a}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strncpy\_P@{strncpy\_P}}
\index{strncpy\_P@{strncpy\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strncpy\_P()}{strncpy\_P()}}
{\footnotesize\ttfamily char $\ast$ strncpy\+\_\+P (\begin{DoxyParamCaption}\item[{char $\ast$}]{dest,  }\item[{const char $\ast$}]{src,  }\item[{size\+\_\+t}]{n }\end{DoxyParamCaption})}

The \mbox{\hyperlink{group__avr__pgmspace_ga1ed6a0ea90901b8ee8478b86d1b1c99a}{strncpy\+\_\+\+P()}} function is similar to \mbox{\hyperlink{group__avr__pgmspace_ga5749897c91c479d02054fc02128de482}{strcpy\+\_\+\+P()}} except that not more than n bytes of src are copied. Thus, if there is no null byte among the first n bytes of src, the result will not be null-\/terminated.

In the case where the length of src is less than that of n, the remainder of dest will be padded with nulls.

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga1ed6a0ea90901b8ee8478b86d1b1c99a}{strncpy\+\_\+\+P()}} function returns a pointer to the destination string dest. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga4ae01ef4b7da280c394f6d2ca37597b8}\label{group__avr__pgmspace_ga4ae01ef4b7da280c394f6d2ca37597b8}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strncpy\_PF@{strncpy\_PF}}
\index{strncpy\_PF@{strncpy\_PF}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strncpy\_PF()}{strncpy\_PF()}}
{\footnotesize\ttfamily char $\ast$ strncpy\+\_\+\+PF (\begin{DoxyParamCaption}\item[{char $\ast$}]{dst,  }\item[{\mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}}}]{src,  }\item[{size\+\_\+t}]{n }\end{DoxyParamCaption})}



Duplicate a string until a limited length. 

The \mbox{\hyperlink{group__avr__pgmspace_ga4ae01ef4b7da280c394f6d2ca37597b8}{strncpy\+\_\+\+P\+F()}} function is similar to \mbox{\hyperlink{group__avr__pgmspace_gacd5af73767ca6defbec02736072dfb30}{strcpy\+\_\+\+P\+F()}} except that not more than {\itshape n} bytes of {\itshape src} are copied. Thus, if there is no null byte among the first {\itshape n} bytes of {\itshape src}, the result will not be null-\/terminated.

In the case where the length of {\itshape src} is less than that of {\itshape n}, the remainder of {\itshape dst} will be padded with nulls.


\begin{DoxyParams}{Parameters}
{\em dst} & A pointer to the destination string in S\+R\+AM \\
\hline
{\em src} & A far pointer to the source string in Flash \\
\hline
{\em n} & The maximum number of bytes to copy\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga4ae01ef4b7da280c394f6d2ca37597b8}{strncpy\+\_\+\+P\+F()}} function returns a pointer to the destination string {\itshape dst}. The contents of R\+A\+M\+PZ S\+FR are undefined when the function returns. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga56e4dec5f576bb5feaa30acc4768bbf3}\label{group__avr__pgmspace_ga56e4dec5f576bb5feaa30acc4768bbf3}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strnlen\_P@{strnlen\_P}}
\index{strnlen\_P@{strnlen\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strnlen\_P()}{strnlen\_P()}}
{\footnotesize\ttfamily size\+\_\+t strnlen\+\_\+P (\begin{DoxyParamCaption}\item[{const char $\ast$}]{src,  }\item[{size\+\_\+t}]{len }\end{DoxyParamCaption})}



Determine the length of a fixed-\/size string. 

The \mbox{\hyperlink{group__avr__pgmspace_ga56e4dec5f576bb5feaa30acc4768bbf3}{strnlen\+\_\+\+P()}} function is similar to strnlen(), except that {\ttfamily src} is a pointer to a string in program space.

\begin{DoxyReturn}{Returns}
The strnlen\+\_\+P function returns strlen\+\_\+\+P(src), if that is less than {\ttfamily len}, or {\ttfamily len} if there is no \textquotesingle{}\textbackslash{}0\textquotesingle{} character among the first {\ttfamily len} characters pointed to by {\ttfamily src}. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga80d8784b274a123972f1b99a4a0a6a0f}\label{group__avr__pgmspace_ga80d8784b274a123972f1b99a4a0a6a0f}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strnlen\_PF@{strnlen\_PF}}
\index{strnlen\_PF@{strnlen\_PF}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strnlen\_PF()}{strnlen\_PF()}}
{\footnotesize\ttfamily size\+\_\+t strnlen\+\_\+\+PF (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}}}]{s,  }\item[{size\+\_\+t}]{len }\end{DoxyParamCaption})}



Determine the length of a fixed-\/size string. 

The \mbox{\hyperlink{group__avr__pgmspace_ga80d8784b274a123972f1b99a4a0a6a0f}{strnlen\+\_\+\+P\+F()}} function is similar to strnlen(), except that {\itshape s} is a far pointer to a string in program space.


\begin{DoxyParams}{Parameters}
{\em s} & A far pointer to the string in Flash \\
\hline
{\em len} & The maximum number of length to return\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The strnlen\+\_\+\+PF function returns strlen\+\_\+P({\itshape s}), if that is less than {\itshape len}, or {\itshape len} if there is no \textquotesingle{}\textbackslash{}0\textquotesingle{} character among the first {\itshape len} characters pointed to by {\itshape s}. The contents of R\+A\+M\+PZ S\+FR are undefined when the function returns. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_gaf5e195114dcded1be939a278122fa91f}\label{group__avr__pgmspace_gaf5e195114dcded1be939a278122fa91f}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strpbrk\_P@{strpbrk\_P}}
\index{strpbrk\_P@{strpbrk\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strpbrk\_P()}{strpbrk\_P()}}
{\footnotesize\ttfamily char $\ast$ strpbrk\+\_\+P (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s,  }\item[{const char $\ast$}]{accept }\end{DoxyParamCaption})}

The \mbox{\hyperlink{group__avr__pgmspace_gaf5e195114dcded1be939a278122fa91f}{strpbrk\+\_\+\+P()}} function locates the first occurrence in the string {\ttfamily s} of any of the characters in the flash string {\ttfamily accept}. This function is similar to strpbrk() except that {\ttfamily accept} is a pointer to a string in program space.

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_gaf5e195114dcded1be939a278122fa91f}{strpbrk\+\_\+\+P()}} function returns a pointer to the character in {\ttfamily s} that matches one of the characters in {\ttfamily accept}, or {\ttfamily N\+U\+LL} if no such character is found. The terminating zero is not considered as a part of string\+: if one or both args are empty, the result will {\ttfamily N\+U\+LL}. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga75ac2cdafe9afac8c75d4abf8703f2da}\label{group__avr__pgmspace_ga75ac2cdafe9afac8c75d4abf8703f2da}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strrchr\_P@{strrchr\_P}}
\index{strrchr\_P@{strrchr\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strrchr\_P()}{strrchr\_P()}}
{\footnotesize\ttfamily const char $\ast$ strrchr\+\_\+P (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s,  }\item[{int}]{val }\end{DoxyParamCaption})}



Locate character in string. 

The \mbox{\hyperlink{group__avr__pgmspace_ga75ac2cdafe9afac8c75d4abf8703f2da}{strrchr\+\_\+\+P()}} function returns a pointer to the last occurrence of the character {\ttfamily val} in the flash string {\ttfamily s}.

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga75ac2cdafe9afac8c75d4abf8703f2da}{strrchr\+\_\+\+P()}} function returns a pointer to the matched character or {\ttfamily N\+U\+LL} if the character is not found. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga150a5b9ebbf493789834679bdc734857}\label{group__avr__pgmspace_ga150a5b9ebbf493789834679bdc734857}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strsep\_P@{strsep\_P}}
\index{strsep\_P@{strsep\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strsep\_P()}{strsep\_P()}}
{\footnotesize\ttfamily char $\ast$ strsep\+\_\+P (\begin{DoxyParamCaption}\item[{char $\ast$$\ast$}]{sp,  }\item[{const char $\ast$}]{delim }\end{DoxyParamCaption})}



Parse a string into tokens. 

The \mbox{\hyperlink{group__avr__pgmspace_ga150a5b9ebbf493789834679bdc734857}{strsep\+\_\+\+P()}} function locates, in the string referenced by {\ttfamily $\ast$sp}, the first occurrence of any character in the string {\ttfamily delim} (or the terminating \textquotesingle{}\textbackslash{}0\textquotesingle{} character) and replaces it with a \textquotesingle{}\textbackslash{}0\textquotesingle{}. The location of the next character after the delimiter character (or {\ttfamily N\+U\+LL}, if the end of the string was reached) is stored in {\ttfamily $\ast$sp}. An \`{}\`{}empty\textquotesingle{}\textquotesingle{} field, i.\+e. one caused by two adjacent delimiter characters, can be detected by comparing the location referenced by the pointer returned in {\ttfamily $\ast$sp} to \textquotesingle{}\textbackslash{}0\textquotesingle{}. This function is similar to strsep() except that {\ttfamily delim} is a pointer to a string in program space.

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga150a5b9ebbf493789834679bdc734857}{strsep\+\_\+\+P()}} function returns a pointer to the original value of {\ttfamily $\ast$sp}. If {\ttfamily $\ast$sp} is initially {\ttfamily N\+U\+LL}, \mbox{\hyperlink{group__avr__pgmspace_ga150a5b9ebbf493789834679bdc734857}{strsep\+\_\+\+P()}} returns {\ttfamily N\+U\+LL}. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga9813accb359f237457b8dc97763ccc9f}\label{group__avr__pgmspace_ga9813accb359f237457b8dc97763ccc9f}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strspn\_P@{strspn\_P}}
\index{strspn\_P@{strspn\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strspn\_P()}{strspn\_P()}}
{\footnotesize\ttfamily size\+\_\+t strspn\+\_\+P (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s,  }\item[{const char $\ast$}]{accept }\end{DoxyParamCaption})}

The \mbox{\hyperlink{group__avr__pgmspace_ga9813accb359f237457b8dc97763ccc9f}{strspn\+\_\+\+P()}} function calculates the length of the initial segment of {\ttfamily s} which consists entirely of characters in {\ttfamily accept}. This function is similar to strspn() except that {\ttfamily accept} is a pointer to a string in program space.

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga9813accb359f237457b8dc97763ccc9f}{strspn\+\_\+\+P()}} function returns the number of characters in the initial segment of {\ttfamily s} which consist only of characters from {\ttfamily accept}. The terminating zero is not considered as a part of string. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_gaa0f5fff512c8e23adc06844aa73c557b}\label{group__avr__pgmspace_gaa0f5fff512c8e23adc06844aa73c557b}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strstr\_P@{strstr\_P}}
\index{strstr\_P@{strstr\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strstr\_P()}{strstr\_P()}}
{\footnotesize\ttfamily char $\ast$ strstr\+\_\+P (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s1,  }\item[{const char $\ast$}]{s2 }\end{DoxyParamCaption})}



Locate a substring. 

The \mbox{\hyperlink{group__avr__pgmspace_gaa0f5fff512c8e23adc06844aa73c557b}{strstr\+\_\+\+P()}} function finds the first occurrence of the substring {\ttfamily s2} in the string {\ttfamily s1}. The terminating \textquotesingle{}\textbackslash{}0\textquotesingle{} characters are not compared. The \mbox{\hyperlink{group__avr__pgmspace_gaa0f5fff512c8e23adc06844aa73c557b}{strstr\+\_\+\+P()}} function is similar to strstr() except that {\ttfamily s2} is pointer to a string in program space.

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_gaa0f5fff512c8e23adc06844aa73c557b}{strstr\+\_\+\+P()}} function returns a pointer to the beginning of the substring, or N\+U\+LL if the substring is not found. If {\ttfamily s2} points to a string of zero length, the function returns {\ttfamily s1}. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga0786ca7dc919f41f4586689aa77b04ef}\label{group__avr__pgmspace_ga0786ca7dc919f41f4586689aa77b04ef}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strstr\_PF@{strstr\_PF}}
\index{strstr\_PF@{strstr\_PF}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strstr\_PF()}{strstr\_PF()}}
{\footnotesize\ttfamily char $\ast$ strstr\+\_\+\+PF (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s1,  }\item[{\mbox{\hyperlink{group__avr__inttypes_ga72b6692e3f3123903c1a0d9a960c59b1}{uint\+\_\+farptr\+\_\+t}}}]{s2 }\end{DoxyParamCaption})}



Locate a substring. 

The \mbox{\hyperlink{group__avr__pgmspace_ga0786ca7dc919f41f4586689aa77b04ef}{strstr\+\_\+\+P\+F()}} function finds the first occurrence of the substring {\ttfamily s2} in the string {\ttfamily s1}. The terminating \textquotesingle{}\textbackslash{}0\textquotesingle{} characters are not compared. The \mbox{\hyperlink{group__avr__pgmspace_ga0786ca7dc919f41f4586689aa77b04ef}{strstr\+\_\+\+P\+F()}} function is similar to strstr() except that {\ttfamily s2} is a far pointer to a string in program space.

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga0786ca7dc919f41f4586689aa77b04ef}{strstr\+\_\+\+P\+F()}} function returns a pointer to the beginning of the substring, or N\+U\+LL if the substring is not found. If {\ttfamily s2} points to a string of zero length, the function returns {\ttfamily s1}. The contents of R\+A\+M\+PZ S\+FR are undefined when the function returns. 
\end{DoxyReturn}
\mbox{\Hypertarget{group__avr__pgmspace_ga9c3f78c82b898b95834b7f1d695eb95e}\label{group__avr__pgmspace_ga9c3f78c82b898b95834b7f1d695eb95e}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strtok\_P@{strtok\_P}}
\index{strtok\_P@{strtok\_P}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strtok\_P()}{strtok\_P()}}
{\footnotesize\ttfamily char $\ast$ strtok\+\_\+P (\begin{DoxyParamCaption}\item[{char $\ast$}]{s,  }\item[{const char $\ast$}]{delim }\end{DoxyParamCaption})}



Parses the string into tokens. 

\mbox{\hyperlink{group__avr__pgmspace_ga9c3f78c82b898b95834b7f1d695eb95e}{strtok\+\_\+\+P()}} parses the string {\ttfamily s} into tokens. The first call to \mbox{\hyperlink{group__avr__pgmspace_ga9c3f78c82b898b95834b7f1d695eb95e}{strtok\+\_\+\+P()}} should have {\ttfamily s} as its first argument. Subsequent calls should have the first argument set to N\+U\+LL. If a token ends with a delimiter, this delimiting character is overwritten with a \textquotesingle{}\textbackslash{}0\textquotesingle{} and a pointer to the next character is saved for the next call to \mbox{\hyperlink{group__avr__pgmspace_ga9c3f78c82b898b95834b7f1d695eb95e}{strtok\+\_\+\+P()}}. The delimiter string {\ttfamily delim} may be different for each call.

The \mbox{\hyperlink{group__avr__pgmspace_ga9c3f78c82b898b95834b7f1d695eb95e}{strtok\+\_\+\+P()}} function is similar to \mbox{\hyperlink{group__avr__string_ga6ace85338eafe22a0ff52c00eb9779b8}{strtok()}} except that {\ttfamily delim} is pointer to a string in program space.

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga9c3f78c82b898b95834b7f1d695eb95e}{strtok\+\_\+\+P()}} function returns a pointer to the next token or N\+U\+LL when no more tokens are found.
\end{DoxyReturn}
\begin{DoxyNote}{Note}
\mbox{\hyperlink{group__avr__pgmspace_ga9c3f78c82b898b95834b7f1d695eb95e}{strtok\+\_\+\+P()}} is N\+OT reentrant. For a reentrant version of this function see \mbox{\hyperlink{group__avr__pgmspace_ga48e69ae320350218ad89b18f01df120d}{strtok\+\_\+r\+P()}}. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__pgmspace_ga48e69ae320350218ad89b18f01df120d}\label{group__avr__pgmspace_ga48e69ae320350218ad89b18f01df120d}} 
\index{$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}!strtok\_rP@{strtok\_rP}}
\index{strtok\_rP@{strtok\_rP}!$<$avr/pgmspace.h$>$: Program Space Utilities@{$<$avr/pgmspace.h$>$: Program Space Utilities}}
\doxyparagraph{\texorpdfstring{strtok\_rP()}{strtok\_rP()}}
{\footnotesize\ttfamily char $\ast$ strtok\+\_\+rP (\begin{DoxyParamCaption}\item[{char $\ast$}]{string,  }\item[{const char $\ast$}]{delim,  }\item[{char $\ast$$\ast$}]{last }\end{DoxyParamCaption})}



Parses string into tokens. 

The \mbox{\hyperlink{group__avr__pgmspace_ga48e69ae320350218ad89b18f01df120d}{strtok\+\_\+r\+P()}} function parses {\ttfamily string} into tokens. The first call to \mbox{\hyperlink{group__avr__pgmspace_ga48e69ae320350218ad89b18f01df120d}{strtok\+\_\+r\+P()}} should have string as its first argument. Subsequent calls should have the first argument set to N\+U\+LL. If a token ends with a delimiter, this delimiting character is overwritten with a \textquotesingle{}\textbackslash{}0\textquotesingle{} and a pointer to the next character is saved for the next call to \mbox{\hyperlink{group__avr__pgmspace_ga48e69ae320350218ad89b18f01df120d}{strtok\+\_\+r\+P()}}. The delimiter string {\ttfamily delim} may be different for each call. {\ttfamily last} is a user allocated char$\ast$ pointer. It must be the same while parsing the same string. \mbox{\hyperlink{group__avr__pgmspace_ga48e69ae320350218ad89b18f01df120d}{strtok\+\_\+r\+P()}} is a reentrant version of \mbox{\hyperlink{group__avr__pgmspace_ga9c3f78c82b898b95834b7f1d695eb95e}{strtok\+\_\+\+P()}}.

The \mbox{\hyperlink{group__avr__pgmspace_ga48e69ae320350218ad89b18f01df120d}{strtok\+\_\+r\+P()}} function is similar to strtok\+\_\+r() except that {\ttfamily delim} is pointer to a string in program space.

\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{group__avr__pgmspace_ga48e69ae320350218ad89b18f01df120d}{strtok\+\_\+r\+P()}} function returns a pointer to the next token or N\+U\+LL when no more tokens are found. 
\end{DoxyReturn}
