Create data structures for a calendar page view.

Dependents:   TimeInterface

Committer:
WiredHome
Date:
Sun Apr 22 19:56:03 2018 +0000
Revision:
0:a3fc9e34ea9c
Integrate CalendarPage into TimeInterface

Who changed what in which revision?

UserRevisionLine numberNew contents of line
WiredHome 0:a3fc9e34ea9c 1
WiredHome 0:a3fc9e34ea9c 2
WiredHome 0:a3fc9e34ea9c 3 #include "CalendarPage.h"
WiredHome 0:a3fc9e34ea9c 4
WiredHome 0:a3fc9e34ea9c 5
WiredHome 0:a3fc9e34ea9c 6 CalendarPage::CalendarPage(uint8_t Month, uint16_t Year) {
WiredHome 0:a3fc9e34ea9c 7 month = Month;
WiredHome 0:a3fc9e34ea9c 8 year = Year;
WiredHome 0:a3fc9e34ea9c 9 verbose = false;
WiredHome 0:a3fc9e34ea9c 10 Compute(month, year);
WiredHome 0:a3fc9e34ea9c 11 }
WiredHome 0:a3fc9e34ea9c 12
WiredHome 0:a3fc9e34ea9c 13
WiredHome 0:a3fc9e34ea9c 14 // 37 Elements with Array index 0 to 36,
WiredHome 0:a3fc9e34ea9c 15 // populated with 0 or the day number
WiredHome 0:a3fc9e34ea9c 16 //
WiredHome 0:a3fc9e34ea9c 17 // 0 1 2 3 4 5 6 | 1
WiredHome 0:a3fc9e34ea9c 18 // 7 8 9 10 11 12 13 | 2 3 4 5 6 7 8
WiredHome 0:a3fc9e34ea9c 19 // 14 15 16 17 18 19 20 | 9 10 11 12 13 14 15
WiredHome 0:a3fc9e34ea9c 20 // 21 22 23 24 25 26 27 | 16 17 18 19 20 21 22
WiredHome 0:a3fc9e34ea9c 21 // 28 29 30 31 32 33 34 | 23 24 25 26 27 28 29
WiredHome 0:a3fc9e34ea9c 22 // 35 36 | 30 31
WiredHome 0:a3fc9e34ea9c 23 //
WiredHome 0:a3fc9e34ea9c 24 void CalendarPage::Compute(uint8_t Month, uint16_t Year) {
WiredHome 0:a3fc9e34ea9c 25 const int DaysInMonth[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
WiredHome 0:a3fc9e34ea9c 26 const char * MonthName[] = { "", "January", "February", "March", "April", "May", "June",
WiredHome 0:a3fc9e34ea9c 27 "July", "August", "September", "October", "November", "December" };
WiredHome 0:a3fc9e34ea9c 28 const char * DayName[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
WiredHome 0:a3fc9e34ea9c 29 int NumberOfDaysInMonth;
WiredHome 0:a3fc9e34ea9c 30 int FirstDayOfMonth = 0;
WiredHome 0:a3fc9e34ea9c 31 int DayOfWeekCounter = 0;
WiredHome 0:a3fc9e34ea9c 32 int DateCounter = 1;
WiredHome 0:a3fc9e34ea9c 33 int index = 0;
WiredHome 0:a3fc9e34ea9c 34 int day = 1;
WiredHome 0:a3fc9e34ea9c 35
WiredHome 0:a3fc9e34ea9c 36 month = Month;
WiredHome 0:a3fc9e34ea9c 37 year = Year;
WiredHome 0:a3fc9e34ea9c 38 int y = year - (14 - month) / 12;
WiredHome 0:a3fc9e34ea9c 39 int m = month + 12 * ((14 - month) / 12) - 2;
WiredHome 0:a3fc9e34ea9c 40
WiredHome 0:a3fc9e34ea9c 41 firstday = (day + y + y / 4 - y / 100 + y / 400 + (31 * m / 12)) % 7;
WiredHome 0:a3fc9e34ea9c 42 if ( (month == 2) && (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) ) {
WiredHome 0:a3fc9e34ea9c 43 NumberOfDaysInMonth = 29;
WiredHome 0:a3fc9e34ea9c 44 } else {
WiredHome 0:a3fc9e34ea9c 45 NumberOfDaysInMonth = DaysInMonth[month];
WiredHome 0:a3fc9e34ea9c 46 }
WiredHome 0:a3fc9e34ea9c 47
WiredHome 0:a3fc9e34ea9c 48 if (verbose) {
WiredHome 0:a3fc9e34ea9c 49 printf("%20s %d\r\n", MonthName[month], year);
WiredHome 0:a3fc9e34ea9c 50 for (int d = 0; d < 7; d++) {
WiredHome 0:a3fc9e34ea9c 51 printf("%4s", DayName[d]);
WiredHome 0:a3fc9e34ea9c 52 }
WiredHome 0:a3fc9e34ea9c 53 printf("\r\n");
WiredHome 0:a3fc9e34ea9c 54 }
WiredHome 0:a3fc9e34ea9c 55
WiredHome 0:a3fc9e34ea9c 56 memset(DayMap, 0, sizeof(DayMap));
WiredHome 0:a3fc9e34ea9c 57 for (FirstDayOfMonth = 0; FirstDayOfMonth < firstday; ++FirstDayOfMonth) {
WiredHome 0:a3fc9e34ea9c 58 if (verbose)
WiredHome 0:a3fc9e34ea9c 59 printf("%4s", "");
WiredHome 0:a3fc9e34ea9c 60 DayMap[index++] = 0;
WiredHome 0:a3fc9e34ea9c 61 }
WiredHome 0:a3fc9e34ea9c 62
WiredHome 0:a3fc9e34ea9c 63 int tempfirstday = firstday;
WiredHome 0:a3fc9e34ea9c 64 DateCounter = 1;
WiredHome 0:a3fc9e34ea9c 65 DayOfWeekCounter = tempfirstday;
WiredHome 0:a3fc9e34ea9c 66 //This loop represents the date display and will continue to run until
WiredHome 0:a3fc9e34ea9c 67 //the number of days in that month have been reached
WiredHome 0:a3fc9e34ea9c 68 for (DateCounter = 1; DateCounter <= NumberOfDaysInMonth; ++DateCounter) {
WiredHome 0:a3fc9e34ea9c 69 DayMap[index++] = DateCounter;
WiredHome 0:a3fc9e34ea9c 70 if (verbose)
WiredHome 0:a3fc9e34ea9c 71 printf("%4d", DateCounter);
WiredHome 0:a3fc9e34ea9c 72 ++DayOfWeekCounter;
WiredHome 0:a3fc9e34ea9c 73 if (DayOfWeekCounter > 6 && DateCounter != NumberOfDaysInMonth) {
WiredHome 0:a3fc9e34ea9c 74 if (verbose)
WiredHome 0:a3fc9e34ea9c 75 printf("\r\n");
WiredHome 0:a3fc9e34ea9c 76 DayOfWeekCounter = 0;
WiredHome 0:a3fc9e34ea9c 77 }
WiredHome 0:a3fc9e34ea9c 78 }
WiredHome 0:a3fc9e34ea9c 79 if (verbose)
WiredHome 0:a3fc9e34ea9c 80 printf("\r\n");
WiredHome 0:a3fc9e34ea9c 81 tempfirstday = DayOfWeekCounter + 1;
WiredHome 0:a3fc9e34ea9c 82 }