summary refs log tree commit diff stats
path: root/drawn
diff options
context:
space:
mode:
authorkaa <kaa@laptosh.my.domain>2023-06-23 11:19:51 -0700
committerkaa <kaa@laptosh.my.domain>2023-06-23 11:19:51 -0700
commit8828e75a9ee7a5408ad00ad17e9878a2740cc866 (patch)
treebd60b53fb9896316ebc9928a30e0b0806b1c64ae /drawn
downloadneocities-8828e75a9ee7a5408ad00ad17e9878a2740cc866.tar.gz
"Initial."
Diffstat (limited to 'drawn')
-rwxr-xr-xdrawn/monthly.c231
1 files changed, 231 insertions, 0 deletions
diff --git a/drawn/monthly.c b/drawn/monthly.c
new file mode 100755
index 0000000..1734cea
--- /dev/null
+++ b/drawn/monthly.c
@@ -0,0 +1,231 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#define MAX  200
+#define MIN 8
+
+int
+readbot(FILE *in, char *line)
+{
+	int ch, cnt;
+
+	if ( fseek(in, -2, SEEK_CUR) != -1 ) {
+		ch = fgetc(in);
+		for ( cnt = 0; ch != '\n' && ftell(in) > 1; ++cnt ) {
+			fseek(in, -2, SEEK_CUR);
+			line[cnt] = ch;
+			ch = fgetc(in);
+		}
+	}
+	else
+		return -1;
+
+	line[cnt] = ch;
+
+	return cnt;
+}
+
+void
+revline(char *line, char *buffer, int cnt)
+{
+	int len;
+
+	for (len = cnt; cnt >= 0; --cnt)
+		buffer[len - cnt] = line[cnt];
+
+	buffer[len] = '\0';
+}
+
+void
+stripdate(char *out, char *in)
+{
+	int i;
+
+	for ( i = 6; i < 16; ++i )
+		out[i-6] = in[i];
+	out[10] = '\0';	
+}
+
+char *
+findyear(char *date)
+{
+	static char year[16];
+	int i;
+
+	for ( i = 0; i < 4; ++i )
+		year[i] = date[i];
+	year[i] = '\0';
+
+	return year;
+}
+
+char *
+findmonth(char *date)
+{
+	static char month[8];
+	int i;
+
+	for ( i = 5; i < 7; ++i )
+		month[i-5] = date[i];
+	month[i-5] = '\0';
+
+	return month;
+}
+
+char *
+findday(char *date)
+{
+	static char day[8];
+	int i;
+
+	for ( i = 8; i < 10; ++i )
+		day[i-8] = date[i];
+	day[i-8] = '\0';
+
+	return day;
+}
+
+void
+outall(FILE *out, FILE *in)
+{
+	char line[MAX];
+
+	if ( out == 0 )
+		return;
+
+	while (fgets(line, MAX, in) != NULL)
+		fprintf(out, "%s", line);
+}
+
+void
+padh(char *year, char *month, char *day, FILE *out)
+{
+	char *humonth[] = {
+		"mystery",
+		"january",
+		"february",
+		"march",
+		"april",
+		"may",
+		"june",
+		"july",
+		"august",
+		"september",
+		"october",
+		"november",
+		"december"
+	};
+
+	
+	fprintf(out, "\t\t\t%s%s", "<h2>", year);
+	fprintf(out, "%s%s ", "<br>", humonth[atoi(month)]);
+	fprintf(out, "%d%s\n", atoi(day), "</h2>");
+}
+
+void
+padimg(FILE *out, char *p)
+{
+	char site[32] = "https://kaa.neocities.org/";
+
+	fprintf(out, "\t\t\t%s%s%s", "<a href=\"", site, p);
+	fprintf(out, "%s\n", "\" target=\"_blank\">");
+	fprintf(out, "\t\t\t\t%s%s%s", "<img src=\"", site, p);
+	fprintf(out, "%s\n", "\" loading=\"lazy\">");
+	fprintf(out, "\t\t\t</a>\n");
+	fprintf(out, "\t\t\t<br>\n");
+}
+
+void
+outnav(FILE *out, char *direction, char *linkfn)
+{
+	if ( out == 0 )
+		return;
+
+	if ( strcmp(linkfn, "") == 0 ) {
+		fprintf(out, "\t\t\t%s", "<br>");
+		fprintf(out, "%s", "<a style=\"color: #ffffec\"");
+		fprintf(out, "%s", "href=\"");
+	 } else {
+		fprintf(out, "\t\t\t%s", "<br><a href=\"");
+		fprintf(out, "%s%s", "/", linkfn);
+	}
+
+	fprintf(out, "%s", "\"><h2>");
+	fprintf(out, "%s%s\n", direction, "</h2></a>");
+}
+
+int
+main()
+{
+	FILE* header = fopen("header/drawn.txt", "r");
+	FILE* in = fopen("files.json", "r");
+	FILE* footer = fopen("footer/drawn.txt", "r");
+	FILE *out = 0;
+	char line[MAX], buffer[MAX];
+	int cnt, nm;
+	char *p;
+	char pattern[16] = "Image/20";
+	char date[16] = "0000-00-00";
+	char pyear[16] = "0000", pmonth[8] = "00", pday[8] = "00";
+	char outfn[32] = "", poutfn[32];
+	char *year, *month, *day;
+
+	if ( header == NULL || in == NULL || footer == NULL ) {
+		puts("Ow!");
+		return 1;
+	}
+
+	fseek(in, 0, SEEK_END);
+	while ( (cnt = readbot(in, line)) != -1 ) {
+		if (cnt < MIN)
+			continue;
+		revline(line, buffer, cnt);
+		if ( ( p = strstr(buffer, pattern) ) == NULL )
+			continue;
+		p[strlen(p) - 1] = '\0';
+
+		if (nm == 1) {
+			padh(pyear, pmonth, pday, out);
+			nm = 0;
+		}
+
+		stripdate(date, p);
+		year = findyear(date);
+		month = findmonth(date);
+		day = findday(date);
+		if ( strcmp(pyear, year) != 0 ||
+		strcmp(pmonth, month) != 0 ) {
+			outnav(out, "next", poutfn);
+			strcpy(poutfn, outfn);
+			strcpy(outfn, "drawn/");
+			strcat(outfn, year);
+			strcat(outfn, "-");
+			strcat(outfn, month);
+			strcat(outfn, ".html");
+			outnav(out, "previous", outfn);
+			outall(out, footer);
+			fseek(footer, 0, SEEK_SET);
+			out = fopen(outfn, "w");
+			outall(out, header);
+			fseek(header, 0, SEEK_SET);
+		}
+
+		if ( strcmp(pday, day) != 0 )
+			nm = 1;
+
+		padimg(out, p);
+
+		strcpy(pyear, year);
+		strcpy(pmonth, month);
+		strcpy(pday, day);
+	}
+	outnav(out, "next", poutfn);
+	outall(out, footer);
+
+	fclose(header);
+	fclose(in);
+	fclose(footer);
+
+	return 0;
+}