#! /usr/bin/guile \ -e main -s !# (use-modules (ice-9 exceptions)) (use-modules (json)) (define guest-book-json-file "cgi-bin/guest_book.json") (define (decode-hex hex) (string (integer->char (string->number (string-append "#x" hex))))) (define (format-query-string item) (letrec ((decode-query (lambda (value) (let ((index (string-index value #\%)) (value-length (string-length value))) (cond ((and index value-length) (string-append (substring value 0 index) (decode-hex (substring value (+ index 1) (+ index 3))) (cond ((< index (- value-length 3)) (decode-query (substring value (+ index 3) value-length))) (else "")))) (else value)))))) (decode-query (string-map (lambda (character) (case character ((#\+) #\space) (else character))) item)))) ;; Progress form data (define (get-form) (let ((query (getenv "QUERY_STRING"))) (cond ((= (string-length query) 0) #f) (else (map (lambda (item) (let ((pairs (string-split item #\=))) (set-cdr! pairs (format-query-string (cadr pairs))) pairs)) (string-split query #\&)))))) (define (handle-fields) (display (get-form))) ;; 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\ ~a ~a --- signed ~a\n\ |
\n\
~a \n\ |
\n\
Sign my fucking guest book\n\ \n\\n\ Be nice! Dont be a fucking ass.\n\ \n") (handle-fields) (display " | \n\
\n\
No guest have been added ): But you can be the first! \n\ |