#! /usr/bin/guile \
-e main -s
!#
(use-modules (ice-9 exceptions))
(use-modules (json))
(define guest-book-json-file "cgi-bin/guest_book.json")
;; Display a guest in the guest book
(define (display-guest guest)
(let ((date (cdr (list-ref guest 0)))
(message (cdr (list-ref guest 1)))
(url (cdr (list-ref guest 2)))
(name (cdr (list-ref guest 3))))
(format #t "
\n\
\n\
~a ~a --- signed ~a\n\
|
\n\
\n\
~a \n\
|
\n\n" name url url date message)))
;; Display pretty much everything
(define (display-guest-book)
(display "Content-Type: text/html\n\n\
\n\
\n\
\n\
Guest Book\n\
\n\
\n\
\n\
\n\
\n\
\n\
\n\
\n\
Sign my fucking guest book\n\
\n\
\n\
Be nice! Dont be a fucking ass.\n\
\n\
| \n\
\n\
\n\n")
;; Try to read the guest book json
(with-exception-handler
(lambda (error)
(display " \n\
\n\
No guest have been added ): But you can be the first! \n\
|
\n\
\n"))
(lambda ()
(call-with-input-file guest-book-json-file
(lambda (fp)
(letrec ((guest-book (json->scm fp))
(guest-loop
(lambda (index)
(display-guest (vector-ref guest-book index))
(if (< index (- (vector-length guest-book) 1))
(guest-loop (+ index 1))))))
(guest-loop 0)))))
#:unwind? #t)
(display " \n\
\n\
\n"))
(define (main args)
(display-guest-book))