; IR Chat (define (go) (set! *resdb* (dm-open-db "GUIdemo" 1)) (frm-popup 100 5000 handler)) (define port (buf-get-u32 "ircm" 0)) (define baud 2400) (define handler (let ((ser #f) (msgs "")) (define (cleanup) (if ser (close-serial ser)) (set! ser #f)) (define (redisplay) (fld-set-text 5001 msgs)) (lambda (ev . args) (case ev ((frm-open) (frm-set-focus 5002) (redisplay)) ((timeout) (if ser (let ((r (read (serial-input ser)))) (if (not (eof-object? r)) (begin (set! msgs (string-append msgs "> " r "#0a")) (redisplay) (sound 1000 20)))))) ((menu) (cleanup) (frm-return 'bye)) ((ctl-select) (case (car args) ((5003) ; connect (set! ser (open-serial port baud ""8n1n"")) (if ser (begin (serial-set-timeout! ser 0) (frm-show 5006 #t) (frm-show 5003 #f) (frm-show 5004 #t)) (message "Can't open port."))) ((5004) ; disconnect (cleanup) (frm-show 5006 #f) (frm-show 5004 #f) (frm-show 5003 #t)) ((5005) ; clear (set! msgs "") (redisplay)) ((5006) ; send (let ((tx (fld-get-text 5002))) (set! msgs (string-append msgs tx "#0a")) (fld-set-text 5002 "") (write tx (serial-output ser)) (redisplay))))) ((frm-close) (cleanup)) (else #f)))))