web-server.scm 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. (define complete-history '())
  2. (define buffer-list '())
  3. (define index-page
  4. `(html
  5. (head
  6. (title "Turtle Canvas"))
  7. (body
  8. (div
  9. (|@| (style "position: relative;"))
  10. (canvas
  11. (|@| (id "BgCanvas")
  12. (width "1000")
  13. (height "1000")
  14. (style "position: absolute; left: 0; top: 0; z-index: 0;"))
  15. " ")
  16. (canvas
  17. (|@| (id "LineCanvas")
  18. (width "1000")
  19. (height "1000")
  20. (style "position: absolute; left: 0; top: 0; z-index: 1;"))
  21. " ")
  22. (canvas
  23. (|@| (id "TurtleCanvas")
  24. (width "1000")
  25. (height "1000")
  26. (style "position: absolute; left: 0; top: 0; z-index: 2;"))
  27. " ")
  28. (script
  29. (|@| (src "https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"))
  30. " ")
  31. (script
  32. (|@| (src "/draw.js"))
  33. " ")))))
  34. (define (api-new-id!)
  35. (set! buffer-list (cons (list-copy complete-history) buffer-list))
  36. (number->string (length buffer-list)))
  37. (define (push-buffer-item! i)
  38. (set! complete-history (cons i complete-history))
  39. (set! buffer-list (map (lambda (buff) (cons i buff)) buffer-list)))
  40. (define (api-push-buffer! s)
  41. (let ((p (open-input-string s)))
  42. (let ((input-result (read p)))
  43. (close-input-port p)
  44. (push-buffer-item! input-result)
  45. "true\n")))
  46. (define (api-push-bulk-buffer! s)
  47. (let ((p (open-input-string s)))
  48. (let ((input-result (read p)))
  49. (close-input-port p)
  50. (for-each push-buffer-item! input-result)
  51. "true\n")))
  52. (define (api-pull-buffer! s)
  53. (define n -1)
  54. (let ((p (open-input-string s)))
  55. (let ((input-result (read p)))
  56. (close-input-port p)
  57. (when (integer? input-result) (set! n input-result))
  58. (if (< (length buffer-list) n)
  59. #()
  60. (let ((result (list-ref buffer-list (- (length buffer-list) n))))
  61. (list-set! buffer-list (- (length buffer-list) n) '())
  62. (list->vector (reverse result)))))))
  63. (define (api-clear-buffer!)
  64. (set! complete-history '())
  65. (set! buffer-list (make-list (length buffer-list) '())))