; Graphic utilities

(define (move x y) 
	(set-car! (car *gstate*)  x)
	(set-cdr! (car *gstate*)  y) #n)

; some fill patterns
(define grey 
"#55#aa#55#aa#55#aa#55#aa"
)

(define brick
"#01#01#01#ff#10#10#10#ff")

(define dots
"#c3#81#18#3c#3c#18#81#c3")

(define (set-pattern p)
  (set-car! (cddr *gstate*) p) #n)

(define (set-font f)
  (set-car! (cdr *gstate*) f) #n)

(define (set-mode m)
  (set-car! (cdddr *gstate*) m) #n)

(define (set-fg c)
  (set-car! (cdr (cdddr *gstate*)) c)
  #n)

(define (set-bg c)
  (set-car! (cddr (cdddr *gstate*)) c)
  #n)

(define (set-text c)
  (set-car! (cdddr (cdddr *gstate*))
	c)
  #n)

; clear screen
(define (cls)
  (let ((gs  (append *gstate* '())))
	(set-pattern #f)
	(move 0 0)
	(rect 160 108 0)
	(set! *gstate* gs) #n))

; drawing modes
(define dm-paint 0)
(define dm-erase 1)
(define dm-mask 2)
(define dm-invert 3)
(define dm-overlay 4)
(define dm-paint-inverse 5)
(define dm-swap 6)

; default graphic state
(define (default-gstate)
  (list (cons 0 0) 0 #t 0 255 0 255))

; some colors
(define red (rgb->index 255 0 0))
(define green (rgb->index 0 255 0))
(define blue (rgb->index 0 0 255))
(define yellow (rgb->index 255 255 0))
(define black (rgb->index 0 0 0))
(define white (rgb->index 255 255 255))
; etc.

