ffi added by retroj on Mon Jun 5 00:33:34 2017
(define-record-type xinerama-screen-info (%make-xinerama-screen-info screen-number x-org y-org width height) xinerama-screen-info? (screen-number xinerama-screen-info-screen-number) (x-org xinerama-screen-info-x-org) (y-org xinerama-screen-info-y-org) (width xinerama-screen-info-width) (height xinerama-screen-info-height)) (define (make-xinerama-screen-info . _) (%make-xinerama-screen-info 0 0 0 0 0)) (define (xinerama-query-screens display) (let-location ((count int 0)) (let* ((blob ((foreign-lambda c-pointer XineramaQueryScreens c-pointer (c-pointer int)) display (location count))) (result (list-tabulate count make-xinerama-screen-info))) ((foreign-lambda* void ((c-pointer blob) (int count) (scheme-object result)) "XineramaScreenInfo* xsis = (XineramaScreenInfo*)blob;\n" "XineramaScreenInfo* xsi = xsis;\n" "int i;\n" "C_word rec;\n" "for (i = 0; i < count; ++i) {\n" " rec = C_u_i_car(result);\n" " C_i_setslot(rec, 1, C_fix(xsi->screen_number));" " C_i_setslot(rec, 2, C_fix(xsi->x_org));" " C_i_setslot(rec, 3, C_fix(xsi->y_org));" " C_i_setslot(rec, 4, C_fix(xsi->width));" " C_i_setslot(rec, 5, C_fix(xsi->height));" " result = C_u_i_cdr(result);\n" " xsi += 1;" "}\n") blob count result) result)))