From 36d72aed1800f3e2c514bf264164a6f2a6ba5f5e Mon Sep 17 00:00:00 2001 From: foswret Date: Tue, 18 Nov 2025 14:59:54 -0600 Subject: removed /include, moved some stuff around --- 0.pdf | Bin 7285 -> 7286 bytes color.h | 18 +++++++++++ date.h | 1 + draw.h | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ include/color.h | 18 ----------- include/date.h | 1 - include/draw.h | 94 -------------------------------------------------------- main.c | 67 +++++++++++++++++++++++++--------------- 8 files changed, 156 insertions(+), 137 deletions(-) create mode 100644 color.h create mode 100644 date.h create mode 100644 draw.h delete mode 100644 include/color.h delete mode 100644 include/date.h delete mode 100644 include/draw.h diff --git a/0.pdf b/0.pdf index 2995589..b26764b 100644 Binary files a/0.pdf and b/0.pdf differ diff --git a/color.h b/color.h new file mode 100644 index 0000000..e2b4cc0 --- /dev/null +++ b/color.h @@ -0,0 +1,18 @@ + int set_color(cairo_t *c, char *str) { + if (strcmp("BLACK", str) == 0) { + cairo_set_source_rgb (c, 0.0, 0.0, 0.0); + } + if (strcmp("RED", str) == 0) { + cairo_set_source_rgb (c, 255.0, 0.0, 0.0); + } + if (strcmp("GREEN", str) == 0) { + cairo_set_source_rgb (c, 0.0, 255.0, 0.0); + } + if (strcmp("BLUE", str) == 0) { + cairo_set_source_rgb (c, 0.0, 0.0, 255.0); + } + if (strcmp("GREY", str) == 0) { + cairo_set_source_rgb (c, 128.0, 128.0, 128.0); + } + return(0); + } diff --git a/date.h b/date.h new file mode 100644 index 0000000..4ff3d32 --- /dev/null +++ b/date.h @@ -0,0 +1 @@ +/* date.h: Includes all the functions relating to calculating months, days, etc. */ diff --git a/draw.h b/draw.h new file mode 100644 index 0000000..503b9c5 --- /dev/null +++ b/draw.h @@ -0,0 +1,94 @@ +struct dimensions { + double pw; /* paper width */ + double ph; /* paper height */ + double mw; /* month width */ + double mh; /* month height */ + double bw; /* day box width */ + double bh; /* day box height */ + double r; /* rows */ + double c; /* columns */ + double m; /* margin */ +}; + + + +int draw_calendar(cairo_t *c, double x, double y, struct dimensions d) { + double x1, y1, x2, y2; + x1 = x; + y1 = y; + x2 = d.pw - x1; /* Set the line endpoint to right side of the page */ + + for (int i = 0; i < d.r + 1; i++) { /* Draw Horizontal Lines */ + cairo_move_to (c, x, y); + cairo_line_to (c, x2, y); + y = y + d.bh; + } + + x = x1; + y = y1; + y2 = y1 + d.mh; /* Set the line endpoint as the bottom of the month */ + for (int i = 0; i < d.c + 1; i++) { /* Draw Vertical Lines */ + cairo_move_to (c, x, y); + cairo_line_to (c, x, y2); + x = x + d.bw; + } + cairo_stroke(c); + return(0); +} + + + +int draw_numbers(cairo_t *c, double x, double y, struct dimensions d, int wd, int nd) { + char str[3]; + cairo_text_extents_t te; + cairo_font_extents_t fe; + + cairo_select_font_face (c, "sans-serif", + CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); + cairo_set_font_size (c, d.bw / 2); + + int iterative = 0; + cairo_font_extents (c, &fe); + double yi = y; + double xi = x; + int current_weekday = wd; + x = d.m + (wd * d.bw); + for (int j = 0; j < d.r; j++) { + y = y + d.bh - ((d.bh - fe.ascent) / 2); + for (int k = current_weekday; k < d.c; k++) { + if (iterative < nd) { + sprintf(str, "%d", iterative + 1); + cairo_text_extents (c, str, &te); + double box_margins = (d.bw - te.width) / 2; + + cairo_move_to(c, x + box_margins - te.x_bearing, y); /* center the number within the box */ + cairo_show_text(c, str); + cairo_move_to(c, x, y); /* Sort of backtrack to realign with the spacing of the boxes */ + x = x + d.bw; + iterative++; + current_weekday++; + } + } + current_weekday = 0; + y = y - (d.bh - ((d.bh - fe.ascent) / 2)); + y = y + d.bh; + x = xi; + } + return(0); +} + + + +int draw_month_name(cairo_t *c, char *name, struct dimensions d) { + double x, y = d.m; + cairo_set_font_size(c, 1.0); + cairo_text_extents_t te; + cairo_font_extents_t fe; + cairo_text_extents(c, name, &te); + x = (d.pw / 2) - (te.width / 2); + y = 1.5; + cairo_move_to(c, x, y); + cairo_show_text(c, &name[0]); + return(0); +} + diff --git a/include/color.h b/include/color.h deleted file mode 100644 index e2b4cc0..0000000 --- a/include/color.h +++ /dev/null @@ -1,18 +0,0 @@ - int set_color(cairo_t *c, char *str) { - if (strcmp("BLACK", str) == 0) { - cairo_set_source_rgb (c, 0.0, 0.0, 0.0); - } - if (strcmp("RED", str) == 0) { - cairo_set_source_rgb (c, 255.0, 0.0, 0.0); - } - if (strcmp("GREEN", str) == 0) { - cairo_set_source_rgb (c, 0.0, 255.0, 0.0); - } - if (strcmp("BLUE", str) == 0) { - cairo_set_source_rgb (c, 0.0, 0.0, 255.0); - } - if (strcmp("GREY", str) == 0) { - cairo_set_source_rgb (c, 128.0, 128.0, 128.0); - } - return(0); - } diff --git a/include/date.h b/include/date.h deleted file mode 100644 index 4ff3d32..0000000 --- a/include/date.h +++ /dev/null @@ -1 +0,0 @@ -/* date.h: Includes all the functions relating to calculating months, days, etc. */ diff --git a/include/draw.h b/include/draw.h deleted file mode 100644 index 503b9c5..0000000 --- a/include/draw.h +++ /dev/null @@ -1,94 +0,0 @@ -struct dimensions { - double pw; /* paper width */ - double ph; /* paper height */ - double mw; /* month width */ - double mh; /* month height */ - double bw; /* day box width */ - double bh; /* day box height */ - double r; /* rows */ - double c; /* columns */ - double m; /* margin */ -}; - - - -int draw_calendar(cairo_t *c, double x, double y, struct dimensions d) { - double x1, y1, x2, y2; - x1 = x; - y1 = y; - x2 = d.pw - x1; /* Set the line endpoint to right side of the page */ - - for (int i = 0; i < d.r + 1; i++) { /* Draw Horizontal Lines */ - cairo_move_to (c, x, y); - cairo_line_to (c, x2, y); - y = y + d.bh; - } - - x = x1; - y = y1; - y2 = y1 + d.mh; /* Set the line endpoint as the bottom of the month */ - for (int i = 0; i < d.c + 1; i++) { /* Draw Vertical Lines */ - cairo_move_to (c, x, y); - cairo_line_to (c, x, y2); - x = x + d.bw; - } - cairo_stroke(c); - return(0); -} - - - -int draw_numbers(cairo_t *c, double x, double y, struct dimensions d, int wd, int nd) { - char str[3]; - cairo_text_extents_t te; - cairo_font_extents_t fe; - - cairo_select_font_face (c, "sans-serif", - CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); - cairo_set_font_size (c, d.bw / 2); - - int iterative = 0; - cairo_font_extents (c, &fe); - double yi = y; - double xi = x; - int current_weekday = wd; - x = d.m + (wd * d.bw); - for (int j = 0; j < d.r; j++) { - y = y + d.bh - ((d.bh - fe.ascent) / 2); - for (int k = current_weekday; k < d.c; k++) { - if (iterative < nd) { - sprintf(str, "%d", iterative + 1); - cairo_text_extents (c, str, &te); - double box_margins = (d.bw - te.width) / 2; - - cairo_move_to(c, x + box_margins - te.x_bearing, y); /* center the number within the box */ - cairo_show_text(c, str); - cairo_move_to(c, x, y); /* Sort of backtrack to realign with the spacing of the boxes */ - x = x + d.bw; - iterative++; - current_weekday++; - } - } - current_weekday = 0; - y = y - (d.bh - ((d.bh - fe.ascent) / 2)); - y = y + d.bh; - x = xi; - } - return(0); -} - - - -int draw_month_name(cairo_t *c, char *name, struct dimensions d) { - double x, y = d.m; - cairo_set_font_size(c, 1.0); - cairo_text_extents_t te; - cairo_font_extents_t fe; - cairo_text_extents(c, name, &te); - x = (d.pw / 2) - (te.width / 2); - y = 1.5; - cairo_move_to(c, x, y); - cairo_show_text(c, &name[0]); - return(0); -} - diff --git a/main.c b/main.c index 11f8de8..282fcb9 100644 --- a/main.c +++ b/main.c @@ -1,34 +1,35 @@ -#include -#include +/* Standard Libraries */ #include #include #include #include #include #include -#include "include/color.h" -#include "include/date.h" -#include "include/draw.h" +#include + +/* Cairo Libraries */ +#include +#include -#define US_LETTER_PAPER_WIDTH 8.5; -#define US_LETTER_PAPER_HEIGHT 11; +/* calp Libraries */ +#include "color.h" +#include "date.h" +#include "draw.h" int main (int argc, char *argv[]) { - int rows = 5; - int columns = 7; - double margin = 0.5; + /* Dimension initialization */ + int rows = 5; /* Number of weeks in a month */ + int columns = 7; /* Number of days in a week */ + double margin = 0.5; /* 0.5" */ int number_of_days = 28; double month_origin_x = margin; double month_origin_y = 3.0; - - double paper_width = US_LETTER_PAPER_WIDTH; - double paper_height = US_LETTER_PAPER_HEIGHT; - + double paper_width = 8.5; + double paper_height = 11; double month_width = paper_width - (month_origin_x * 2); double month_height = paper_height - month_origin_y - margin; - double day_box_width = month_width / columns; double day_box_height = month_height / rows; @@ -44,35 +45,53 @@ int main (int argc, char *argv[]) { margin, /* m */ }; - char date_strings[number_of_days][2]; - char months[12][10] = { + /* Date Setup */ + char *months[] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; int days_in_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; + const char *weekday_names[] = { + "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" + }; - char weekday_abbr[7][5] = { - "Su", "Mo", "Tue", "Wed", - "Thurs", "Fri", "Sat" + const char *weekdays_abbr[] = { + "Su", "Mo", "Tue", "Wed", "Thurs", "Fri", "Sat" }; - cairo_surface_t * surface = cairo_pdf_surface_create("0.pdf", paper_width * 72, paper_height * 72); + int year = 2025; + int month = 2; + + struct tm day; + day.tm_mon = month - 1; + day.tm_mday = 1; + day.tm_year = year - 1900; + + /* tm.hour, tm_min, & tm_sec are not used, but need to be zeroed. */ + day.tm_hour = 0; + day.tm_min = 0; + day.tm_sec = 0; + + mktime(&day); + + cairo_surface_t * surface = cairo_pdf_surface_create("0.pdf", dim.pw * 72, dim.ph * 72); cairo_t *cr = cairo_create(surface); + cairo_scale(cr, 72, 72); - cairo_set_line_width(cr, 0.03); set_color(cr, "BLACK"); + cairo_set_line_width (cr, 0.03); + draw_calendar(cr, month_origin_x, month_origin_y, dim); set_color(cr, "GRAY"); - draw_numbers(cr, month_origin_x, month_origin_y, dim, 6, number_of_days); + draw_numbers(cr, month_origin_x, month_origin_y, dim, day.tm_wday, number_of_days); draw_month_name(cr, months[1], dim); /* Clean Up */ cairo_destroy(cr); cairo_surface_destroy(surface); - return(0); } -- cgit v1.2.3