tojTepeu

Just as the Pharer can use the tojTepeu app to determine the days of the Mayan calendar.

Fri Aug 3 2018: 13.00.05.12.11, 1 Batz 4 Kaqam
Sat Aug 4 2018: 13.00.05.12.12, 2 E 5 Kaqam
Sun Aug 5 2018: 13.00.05.12.13, 3 Aj 6 Kaqam
Mon Aug 6 2018: 13.00.05.12.14, 4 Ix 7 Kaqam
Tue Aug 7 2018: 13.00.05.12.15, 5 Tzikin 8 Kaqam
Wed Aug 8 2018: 13.00.05.12.16, 6 Ajmaq 9 Kaqam
Thu Aug 9 2018: 13.00.05.12.17, 7 Noj 10 Kaqam
Fri Aug 10 2018: 13.00.05.12.18, 8 Tijax 11 Kaqam
Sat Aug 11 2018: 13.00.05.12.19, 9 Kawoq 12 Kaqam
Sun Aug 12 2018: 13.00.05.13.00, 10 Ajpu 13 Kaqam
Mon Aug 13 2018: 13.00.05.13.01, 11 Imox 14 Kaqam
Tue Aug 14 2018: 13.00.05.13.02, 12 Iq 15 Kaqam
Wed Aug 15 2018: 13.00.05.13.03, 13 Aqabal 16 Kaqam
Thu Aug 16 2018: 13.00.05.13.04, 1 Kat 17 Kaqam
Fri Aug 17 2018: 13.00.05.13.05, 2 Kan 18 Kaqam
Sat Aug 18 2018: 13.00.05.13.06, 3 Kame 19 Kaqam
Sun Aug 19 2018: 13.00.05.13.07, 4 Kej 0 Botam
Mon Aug 20 2018: 13.00.05.13.08, 5 Qanil 1 Botam
Tue Aug 21 2018: 13.00.05.13.09, 6 Toj 2 Botam
Wed Aug 22 2018: 13.00.05.13.10, 7 Tzi 3 Botam

Sourcecode

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/* define constants */
int y = 4716;
int j = 1401;
int m = 2;
int n = 12;
int r = 4;
int p = 1461;
int v = 3;
int u = 5;
int s = 153;
int w = 2;
int B = 274277;
int C = -38; /* signed int */

long YearNumber;
int TOJTepeu_Value;

int fixeddate_func(int fYear, int fMonth, int fDay) {
	int fixeddateOneIfBeforeMarch;
	int fixeddateYearOffset;
	int fixeddateMonthOffset;
	int fixeddateJDN;
	fixeddateOneIfBeforeMarch = (14 - fMonth) / 12;
	fixeddateYearOffset = fYear + 4800 - fixeddateOneIfBeforeMarch;
	fixeddateMonthOffset = fMonth + 12 * fixeddateOneIfBeforeMarch - 3;
	if (fYear >= 1583) { fixeddateJDN = fDay + ( 153 * fixeddateMonthOffset + 2 ) / 5 + 365 * fixeddateYearOffset + fixeddateYearOffset / 4 - fixeddateYearOffset / 100 + fixeddateYearOffset / 400 - 32045; }
	else { fixeddateJDN = fDay + ( 153 * fixeddateMonthOffset + 2 ) / 5 + 365 * fixeddateYearOffset + fixeddateYearOffset / 4 - 32083; }
	return fixeddateJDN;
};

int tojtepeu_newyear(int tojtepeu_year) {
	return 2458094 + 260 * tojtepeu_year;
};

int printdate(int jdnval) {
	long f, e, g, h;
	long isoyear;
	long isobcyear;
	int isoday, isomonth, isohebdomad;
	int trecena;
	int veintena;
	int Sothic;
	int SothicDay;
	int SothicMonth;
int longcount;
int kin;
int uinal;
int tun;
int katun;
int baktun;
	char* month[] = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
	char* week[] = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
	char* veintenadays[] = {"Batz","E","Aj","Ix","Tzikin","Ajmaq","Noj","Tijax","Kawoq","Ajpu","Imox","Iq","Aqabal","Kat","Kan","Kame","Kej","Qanil","Toj","Tzi"};
	char* Sothics[] = {"Nabe Mam","Ukab Mam","Likin Ka","Ukab Likin Ka","Nabe Pach","Ukab Pach","Tzisi Laqam","Tzikin Qij","Kaqam","Botam","Nabe Sij","Ukab Sij","Urox Sij","Che","Tekexe Puwal","Tziba Pop","Saq","Chab","Tzapi Qij"};
	char* isolatins;
	if (jdnval >= 2299161) {
		f = jdnval + j + (((4 * jdnval + B) / 146097) * 3) / 4 + C;
	}
	else {
		f = jdnval + j;
	}
	e = r * f + v;
	g = (e % p) / r;
	h = u * g + w;

	isoday = (h % s) / u + 1;
	isomonth = (h / s + m) % n + 1;
	isoyear = e / p - y + (n + m - isomonth) / n;
	isohebdomad = (jdnval + 1) % 7;
	trecena = (jdnval + 5) % 13 + 1;
	veintena = (jdnval + 6) % 20;
	Sothic = (jdnval + 105) % 365;
	SothicDay = ( Sothic % 20 );
	SothicMonth = ( ( Sothic / 20 ) % 19 );
	longcount = (jdnval + 1287717) % 1872000;
	kin = ( longcount ) % 20;
	uinal = ( longcount / 20 ) % 18;
	tun = ( longcount / 360 ) % 20;
	katun = ( longcount / 7200 ) % 20;
	baktun = ( longcount / 144000 + 12 ) % 13 + 1;

	isolatins = month[isomonth - 1];
	isobcyear = 1 - isoyear;
	printf("%s %s %2d %4ld: %02d.%02d.%02d.%02d.%02d, %d %s %d %s\n", week[isohebdomad], isolatins, isoday, isoyear, baktun, katun, tun, uinal, kin, trecena, veintenadays[veintena], SothicDay, Sothics[SothicMonth]);
	return 0;
}
int main(int argc, char *argv[]) {

	/* Check if we got a parameter, if not ask the user. */
	if (argc > 1) {
		YearNumber = strtol(argv[1], NULL, 10);
	}
	else {
		YearNumber = 0;
	}
	if (YearNumber < -3000) {
		printf("Cholq'Ij is too small.\n");
		return 1;
	}
	if (YearNumber >= 3000) {
		printf("Cholq'Ij is too large.\n");
		return 1;
	}
	TOJTepeu_Value = tojtepeu_newyear(YearNumber);
	for (int i = 0; i < 260; i++) {
		printdate(TOJTepeu_Value + i);
	}

	return 0;
}