#!/usr/bin/env guile ;; -*- mode: scheme; -*- !# ;; Copyright (C) 2023 Tom Willemse ;; This program is free software: you can redistribute it and/or modify it under ;; the terms of the GNU General Public License as published by the Free Software ;; Foundation, either version 3 of the License, or (at your option) any later ;; version. ;; This program is distributed in the hope that it will be useful, but WITHOUT ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS ;; FOR A PARTICULAR PURPOSE. See the GNU General Public License for more ;; details. ;; You should have received a copy of the GNU General Public License along with ;; this program. If not, see . (use-modules ((inkplate) #:prefix inkplate:) (srfi srfi-19) (srfi srfi-1)) (define (my-wrap text max-length) (reverse (map string-trim (fold (λ (item accumulator) (let* ((current-line (car accumulator)) (new-line (format #f "~a ~a" current-line item))) (if (> (string-length new-line) max-length) (cons item accumulator) (cons new-line (cdr accumulator))))) '("") (string-split text #\ ))))) (let* ((my-dev (inkplate:open "/dev/ttyUSB0")) (date (current-date)) (day-of-week (date-week-day date))) (inkplate:clear-screen my-dev) (inkplate:set-display-mode my-dev 1) (inkplate:draw-rectangle my-dev 5 5 250 590 3) (inkplate:draw-rectangle my-dev 6 6 248 588 3) (inkplate:draw-rectangle my-dev 7 7 246 586 3) (inkplate:set-cursor my-dev 15 15) (inkplate:set-text-size my-dev 10) (inkplate:print my-dev (inkplate:convert-string-to-hex (date->string date "~Y"))) (inkplate:set-cursor my-dev 15 95) (inkplate:set-text-size my-dev 8) (inkplate:print my-dev (inkplate:convert-string-to-hex (date->string date "~m-~d"))) (let ((x 20) (y 160)) (inkplate:set-cursor my-dev x y) (when (= 1 day-of-week) (inkplate:draw-rectangle my-dev (- x 6) (- y 3) 32 34 1) (inkplate:draw-rectangle my-dev (- x 5) (- y 2) 30 32 1)) (inkplate:set-text-size my-dev 4) (inkplate:print my-dev (inkplate:convert-string-to-hex "M"))) (let ((x 53) (y 160)) (inkplate:set-cursor my-dev x y) (when (= 2 day-of-week) (inkplate:draw-rectangle my-dev (- x 6) (- y 3) 32 34 1) (inkplate:draw-rectangle my-dev (- x 5) (- y 2) 30 32 1)) (inkplate:set-text-size my-dev 4) (inkplate:print my-dev (inkplate:convert-string-to-hex "T"))) (let ((x 86) (y 160)) (inkplate:set-cursor my-dev x y) (when (= 3 day-of-week) (inkplate:draw-rectangle my-dev (- x 6) (- y 3) 32 34 1) (inkplate:draw-rectangle my-dev (- x 5) (- y 2) 30 32 1)) (inkplate:set-text-size my-dev 4) (inkplate:print my-dev (inkplate:convert-string-to-hex "W"))) (let ((x 119) (y 160)) (inkplate:set-cursor my-dev x y) (when (= 4 day-of-week) (inkplate:draw-rectangle my-dev (- x 6) (- y 3) 32 34 1) (inkplate:draw-rectangle my-dev (- x 5) (- y 2) 30 32 1)) (inkplate:set-text-size my-dev 4) (inkplate:print my-dev (inkplate:convert-string-to-hex "T"))) (let ((x 152) (y 160)) (inkplate:set-cursor my-dev x y) (when (= 5 day-of-week) (inkplate:draw-rectangle my-dev (- x 6) (- y 3) 32 34 1) (inkplate:draw-rectangle my-dev (- x 5) (- y 2) 30 32 1)) (inkplate:set-text-size my-dev 4) (inkplate:print my-dev (inkplate:convert-string-to-hex "F"))) (let ((x 185) (y 160)) (inkplate:set-cursor my-dev x y) (when (= 6 day-of-week) (inkplate:draw-rectangle my-dev (- x 6) (- y 3) 32 34 1) (inkplate:draw-rectangle my-dev (- x 5) (- y 2) 30 32 1)) (inkplate:set-text-size my-dev 4) (inkplate:print my-dev (inkplate:convert-string-to-hex "S"))) (let ((x 218) (y 160)) (inkplate:set-cursor my-dev x y) (when (= 0 day-of-week) (inkplate:draw-rectangle my-dev (- x 6) (- y 3) 32 34 1) (inkplate:draw-rectangle my-dev (- x 5) (- y 2) 30 32 1)) (inkplate:set-text-size my-dev 4) (inkplate:print my-dev (inkplate:convert-string-to-hex "S"))) (inkplate:set-text-size my-dev 3) (inkplate:set-text-wrap my-dev #f) (let loop ((lines (my-wrap "Give yourself permission to fail; it's the path to success" 29)) (x 265) (y 15)) (inkplate:set-cursor my-dev x y) (inkplate:print my-dev (inkplate:convert-string-to-hex (car lines))) (unless (null? (cdr lines)) (loop (cdr lines) x (+ 30 y)))) (if (member "--reset" (command-line)) (inkplate:update my-dev) (inkplate:partial-update my-dev 15 800 600)) (inkplate:send my-dev) (inkplate:close my-dev))