100 lines
3.2 KiB
C++
100 lines
3.2 KiB
C++
|
/* DateStrings.cpp
|
||
|
* Definitions for date strings for use with the Time library
|
||
|
*
|
||
|
* Updated for Arduino 1.5.7 18 July 2014
|
||
|
*
|
||
|
* No memory is consumed in the sketch if your code does not call any of the string methods
|
||
|
* You can change the text of the strings, make sure the short strings are each exactly 3 characters
|
||
|
* the long strings can be any length up to the constant dt_MAX_STRING_LEN defined in TimeLib.h
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#if defined(__AVR__)
|
||
|
#include <avr/pgmspace.h>
|
||
|
#else
|
||
|
// for compatiblity with Arduino Due and Teensy 3.0 and maybe others?
|
||
|
#define PROGMEM
|
||
|
#define PGM_P const char *
|
||
|
#define pgm_read_byte(addr) (*(const unsigned char *)(addr))
|
||
|
#define pgm_read_word(addr) (*(const unsigned char **)(addr))
|
||
|
#ifndef strcpy_P
|
||
|
#define strcpy_P(dest, src) strcpy((dest), (src))
|
||
|
#endif
|
||
|
#endif
|
||
|
#include <string.h> // for strcpy_P or strcpy
|
||
|
#include "microTimeLib.h"
|
||
|
|
||
|
// the short strings for each day or month must be exactly dt_SHORT_STR_LEN
|
||
|
#define dt_SHORT_STR_LEN 3 // the length of short strings
|
||
|
|
||
|
static char buffer[dt_MAX_STRING_LEN+1]; // must be big enough for longest string and the terminating null
|
||
|
|
||
|
const char monthStr0[] PROGMEM = "";
|
||
|
const char monthStr1[] PROGMEM = "January";
|
||
|
const char monthStr2[] PROGMEM = "February";
|
||
|
const char monthStr3[] PROGMEM = "March";
|
||
|
const char monthStr4[] PROGMEM = "April";
|
||
|
const char monthStr5[] PROGMEM = "May";
|
||
|
const char monthStr6[] PROGMEM = "June";
|
||
|
const char monthStr7[] PROGMEM = "July";
|
||
|
const char monthStr8[] PROGMEM = "August";
|
||
|
const char monthStr9[] PROGMEM = "September";
|
||
|
const char monthStr10[] PROGMEM = "October";
|
||
|
const char monthStr11[] PROGMEM = "November";
|
||
|
const char monthStr12[] PROGMEM = "December";
|
||
|
|
||
|
const PROGMEM char * const PROGMEM monthNames_P[] =
|
||
|
{
|
||
|
monthStr0,monthStr1,monthStr2,monthStr3,monthStr4,monthStr5,monthStr6,
|
||
|
monthStr7,monthStr8,monthStr9,monthStr10,monthStr11,monthStr12
|
||
|
};
|
||
|
|
||
|
const char monthShortNames_P[] PROGMEM = "ErrJanFebMarAprMayJunJulAugSepOctNovDec";
|
||
|
|
||
|
const char dayStr0[] PROGMEM = "Err";
|
||
|
const char dayStr1[] PROGMEM = "Sunday";
|
||
|
const char dayStr2[] PROGMEM = "Monday";
|
||
|
const char dayStr3[] PROGMEM = "Tuesday";
|
||
|
const char dayStr4[] PROGMEM = "Wednesday";
|
||
|
const char dayStr5[] PROGMEM = "Thursday";
|
||
|
const char dayStr6[] PROGMEM = "Friday";
|
||
|
const char dayStr7[] PROGMEM = "Saturday";
|
||
|
|
||
|
const PROGMEM char * const PROGMEM dayNames_P[] =
|
||
|
{
|
||
|
dayStr0,dayStr1,dayStr2,dayStr3,dayStr4,dayStr5,dayStr6,dayStr7
|
||
|
};
|
||
|
|
||
|
const char dayShortNames_P[] PROGMEM = "ErrSunMonTueWedThuFriSat";
|
||
|
|
||
|
/* functions to return date strings */
|
||
|
|
||
|
char* monthStr(uint8_t month)
|
||
|
{
|
||
|
strcpy_P(buffer, (PGM_P)pgm_read_word(&(monthNames_P[month])));
|
||
|
return buffer;
|
||
|
}
|
||
|
|
||
|
char* monthShortStr(uint8_t month)
|
||
|
{
|
||
|
for (int i=0; i < dt_SHORT_STR_LEN; i++)
|
||
|
buffer[i] = pgm_read_byte(&(monthShortNames_P[i+ (month*dt_SHORT_STR_LEN)]));
|
||
|
buffer[dt_SHORT_STR_LEN] = 0;
|
||
|
return buffer;
|
||
|
}
|
||
|
|
||
|
char* dayStr(uint8_t day)
|
||
|
{
|
||
|
strcpy_P(buffer, (PGM_P)pgm_read_word(&(dayNames_P[day])));
|
||
|
return buffer;
|
||
|
}
|
||
|
|
||
|
char* dayShortStr(uint8_t day)
|
||
|
{
|
||
|
uint8_t index = day*dt_SHORT_STR_LEN;
|
||
|
for (int i=0; i < dt_SHORT_STR_LEN; i++)
|
||
|
buffer[i] = pgm_read_byte(&(dayShortNames_P[index + i]));
|
||
|
buffer[dt_SHORT_STR_LEN] = 0;
|
||
|
return buffer;
|
||
|
}
|