dirty hack with ffi added by dsp on Thu May 10 01:29:23 2012
(let ((painter (lambda (x y s1 s2)
(xsetforeground display gc (xblackpixel display screen))
(xsetbackground display gc (xwhitepixel display screen))
(xsetfunction display gc GXCOPY)
(xsetfont display gc font)
(xselectinput display window (bitwise-ior EXPOSUREMASK BUTTONPRESSMASK))
(xmapwindow display window)
(xnextevent display event)
(xdrawstring display window gc 100 30 "Paranoia is being computed..." 28)
(xdrawrectangle display window gc x y s1 s2)
(set-xsegment-x1! ts1 10)
(set-xsegment-x2! ts1 222)
(set-xsegment-y1! ts1 30)
(set-xsegment-y2! ts1 10)
(set-xsegment-x1! ts2 22)
(set-xsegment-x2! ts2 130)
(set-xsegment-y1! ts2 333)
(set-xsegment-y2! ts2 129)
#>
typedef struct {
short a1,a2,b1,b2;
} XSegment;
XSegment *makesegs(int num){
XSegment *s=(XSegment *) malloc(sizeof(XSegment *)*num);
return s;
}
<#
(define makesegs (foreign-lambda c-pointer "makesegs" int))
(xdrawsegments display window gc (makesegs 2) 2)
(letrec ((leloop (lambda (num)
(cond ((< num 10)
(xdrawarc display window gc x y (/ s1 num) (/ s2 num) 0 (/ 19000 num))
;(xdrawline display window gc (+ x (/ x num)) (+ y (/ y num)) (/ s1 2) (/ s2 2))
(if (> num 2)
(xdrawrectangle display window gc (+ x (/ s1 num)) (+ y (/ s2 num)) (/ s1 num ) (/ s2 num )))
(leloop (+ num 1)))))))
(leloop 1))
(xflush display)
(xnextevent display event))))
(painter 90 500 200 200) (system "sleep 10"))))))