Index: sdl-csi.scm =================================================================== --- sdl-csi.scm (Revision 16082) +++ sdl-csi.scm (Arbeitskopie) @@ -1,3 +1,5 @@ +(import foreign) + (declare (foreign-declare "#include \n") (run-time-macros) @@ -6,7 +8,6 @@ (require-extension posix) (require-extension sdl) -(require-extension syntax-case) (handle-exceptions exn Index: test-sdl.scm =================================================================== --- test-sdl.scm (Revision 16082) +++ test-sdl.scm (Arbeitskopie) @@ -1,10 +1,10 @@ (declare (foreign-declare "#include \n")) (foreign-code "SDL_Init(SDL_INIT_EVERYTHING);") -(require 'posix) -(require 'sdl) +(use posix) +(use sdl) +(sdl-init SDL_INIT_EVERYTHING) +(include "test-sdl-body.scm") -(load "test-sdl-body.scm") - (sdl-quit) (exit 0) Index: sdl.setup =================================================================== --- sdl.setup (Revision 16082) +++ sdl.setup (Arbeitskopie) @@ -1,3 +1,9 @@ -(run (make extension)) -(install-extension 'sdl '("sdl.so") '((version "v0.4.51117.5"))) +(let ((sdl-cflags (with-input-from-pipe "sdl-config --cflags" read-line)) + (sdl-lflags (string-append (with-input-from-pipe "sdl-config --libs" read-line) " -lSDL_gfx -lSDL_net -lSDL_ttf -lSDL_image"))) + (compile -s -O2 sdl.scm -j sdl -lsdl ,sdl-cflags ,sdl-lflags) + (compile -c -O2 sdl.scm -unit sdl ,sdl-cflags ,sdl-lflags) + (compile -s -O2 sdl.import.scm ,sdl-cflags ,sdl-lflags) + (compile -O2 sdl-csi.scm ,sdl-cflags ,sdl-lflags)) + +(install-extension 'sdl '("sdl.so" "sdl.import.so" "sdl.o") '((version "v0.4.51117.5"))) (install-program 'sdl-csi '("sdl-csi")) Index: sdl.scm =================================================================== --- sdl.scm (Revision 16082) +++ sdl.scm (Arbeitskopie) @@ -1,4 +1,4 @@ -;;; sdl.scm - Simple SDL binding for Chicken +;;;; sdl.scm - Simple SDL binding for Chicken ; Copyright (C) 2002-2004 Tony Garnock-Jones ; ; This library is free software; you can redistribute it and/or modify @@ -18,13 +18,353 @@ ; --------------------------------------------------------------------------- -(declare - (usual-integrations) +(module sdl - ;; %%% export declaration should go here +( *sdl-egg-version* - (foreign-declare #< 1300 # include @@ -47,12 +387,8 @@ #include "SDL_net.h" EOF -)) +) -(use srfi-1) -(use srfi-13) -(use lolevel) - (include "heap.scm") (include "timer.scm") @@ -66,14 +402,15 @@ ;--------------------------------------------------------------------------- -(define-macro (--sdl-flags . strs) - `(begin +(define-syntax --sdl-flags + (lambda (e r c) + `(,(r 'begin) ,@(append-map (lambda (str) (let* ((sym (string->symbol str)) - (psym (string->symbol (string-append "-" (symbol->string sym))))) - `((define-foreign-variable ,psym unsigned-integer ,str) - (define ,sym ,psym)))) - strs))) + (psym (string->symbol (string-append "-" str)))) + `((,(r 'define-foreign-variable) ,psym unsigned-integer ,str) + (,(r 'define) ,sym ,psym)))) + (cdr e))))) ; Subsystem definitions, for sdl-init etc. (--sdl-flags "SDL_INIT_TIMER" @@ -202,7 +539,7 @@ (let ((maker make-sdl-rect)) (set! make-sdl-rect (lambda (x y w h) - (let ((r (maker (make-byte-vector sizeof-sdl-rect)))) + (let ((r (maker (make-blob sizeof-sdl-rect)))) (sdl-rect-x-set! r x) (sdl-rect-y-set! r y) (sdl-rect-w-set! r w) @@ -365,11 +702,11 @@ "return(i);"))) (define (sdl-wm-get-caption) - (values (sdl-wm-getcaption-title) - (sdl-wm-getcaption-icon))) + (values (sdl-wm-get-caption-title) + (sdl-wm-get-caption-icon))) (define (sdl-wm-set-icon icon mask) - ((foreign-lambda void "SDL_WM_SetIcon" SDL_Surface byte-vector) icon mask)) + ((foreign-lambda void "SDL_WM_SetIcon" SDL_Surface blob) icon mask)) (define (sdl-wm-iconify-window) (not (zero? ((foreign-lambda integer "SDL_WM_IconifyWindow"))))) @@ -412,9 +749,9 @@ (let ((maker make-sdl-event)) (set! make-sdl-event (lambda () - (let ((bv (make-byte-vector sizeof-sdl-event))) - (byte-vector-set! bv 0 SDL_NOEVENT) - (maker bv))))) + (let ((bv (blob->u8vector (make-blob sizeof-sdl-event)))) + (u8vector-set! bv 0 SDL_NOEVENT) + (maker (u8vector->blob bv)))))) (define-record-printer (sdl-event s out) (for-each (lambda (x) (display x out)) @@ -431,41 +768,44 @@ (define sdl-event-type (foreign-lambda* unsigned-byte ((SDL_Event e)) "return(e->type);")) (define sdl-event-type-set! (foreign-lambda* void ((SDL_Event e) (unsigned-byte t)) "e->type = t;")) -(define-macro (--sdl-event-getter-setter name . rest) - (let* ((strapp (lambda s (apply string-append +(define-syntax --sdl-event-getter-setter + (lambda (f r c) + (let ((name (cadr f)) + (rest (cddr f))) + (let* ((strapp (lambda s (apply string-append (map (lambda (x) (cond ((symbol? x) (symbol->string x)) (else x))) s)))) (symapp (lambda s (string->symbol (apply strapp s))))) - `(begin - (define (,(symapp "sdl-event-" name) e) - (let ((t (sdl-event-type e))) - (cond + `(,(r 'begin) + (,(r 'define) (,(symapp "sdl-event-" name) e) + (,(r 'let) ((,(r 't) (,(r 'sdl-event-type) e))) + (,(r 'cond) ,@(map (lambda (clause) (apply (lambda (etype mem1 kind) - `((= t ,etype) ((foreign-lambda* + `((,(r '=) ,(r 't) ,etype) ((,(r 'foreign-lambda*) ,kind ((SDL_Event e)) ,(strapp "return(e->"mem1"."name");")) e))) clause)) rest) - (else (error ,(string-append "sdl-event-" (symbol->string name) + (,(r 'else) (,(r 'error) ,(string-append "sdl-event-" (symbol->string name) ": cannot extract value from this type of event") - (sdl-event-type e)))))) - (define (,(symapp "set-sdl-event-" name "!") e v) - (let ((t (sdl-event-type e))) - (cond + (,(r 'sdl-event-type) e)))))) + (,(r 'define) (,(symapp "set-sdl-event-" name "!") e v) + (,(r 'let) ((t (,(r 'sdl-event-type) e))) + (,(r 'cond) ,@(map (lambda (clause) (apply (lambda (etype mem1 kind) - `((= t ,etype) ((foreign-lambda* + `((,(r '=) t ,etype) ((,(r 'foreign-lambda*) void ((SDL_Event e) (,kind v)) ,(strapp "e->"mem1"."name"=v;")) e v))) clause)) rest) - (else (error ,(string-append "set-sdl-event-" (symbol->string name) "!" + (,(r 'else) (,(r 'error) ,(string-append "set-sdl-event-" (symbol->string name) "!" ": cannot update value for this type of event") - (sdl-event-type e))))))))) + (,(r 'sdl-event-type) e))))))))))) (--sdl-event-getter-setter gain (SDL_ACTIVEEVENT active bool)) (--sdl-event-getter-setter which (SDL_KEYDOWN key unsigned-byte) @@ -584,11 +924,11 @@ (define sdl-get-video-surface (foreign-lambda SDL_Surface "SDL_GetVideoSurface")) (define (sdl-video-driver-name) - (let ((bv (make-byte-vector 128 0))) - (and ((foreign-lambda bool "SDL_VideoDriverName" byte-vector integer) + (let ((bv (make-blob 128 0))) + (and ((foreign-lambda bool "SDL_VideoDriverName" blob integer) bv - (byte-vector-length bv)) - (string-trim-right (byte-vector->string bv) + (blob-size bv)) + (string-trim-right (blob->string bv) (integer->char 0))))) (define sdl-set-video-mode (foreign-lambda SDL_Surface "SDL_SetVideoMode" @@ -674,7 +1014,7 @@ (let ((maker make-sdl-color)) (set! make-sdl-color (lambda (r g b) - (let ((bv (make-byte-vector sizeof-sdl-color))) + (let ((bv (make-blob sizeof-sdl-color))) (fill-sdl-color! (maker bv) r g b))))) (define-record-printer (sdl-color s out) @@ -889,9 +1229,9 @@ (let ((maker make-sdl-ip-address)) (set! make-sdl-ip-address (lambda (a b c d p) - (let* ((bv (make-byte-vector sizeof-sdl-ip-address)) + (let* ((bv (make-blob sizeof-sdl-ip-address)) (addr (maker bv))) - ((foreign-lambda* void ((byte-vector bv) + ((foreign-lambda* void ((blob bv) (unsigned-integer host) (unsigned-short port)) "IPaddress *ipa = (IPaddress *) bv;" @@ -998,10 +1338,10 @@ #f))) (define (sdl-net-tcp-send sock bv) - ((foreign-lambda int "SDLNet_TCP_Send" TCPsocket byte-vector integer) - sock bv (byte-vector-length bv))) + ((foreign-lambda int "SDLNet_TCP_Send" TCPsocket blob integer) + sock bv (blob-size bv))) -(define sdl-net-tcp-recv (foreign-lambda int "SDLNet_TCP_Recv" TCPsocket byte-vector integer)) +(define sdl-net-tcp-recv (foreign-lambda int "SDLNet_TCP_Recv" TCPsocket blob integer)) (define (sdl-net-tcp-close sock) (if (sdl-tcp-socket-pointer sock) @@ -1010,13 +1350,13 @@ (sdl-tcp-socket-pointer-set! sock #f)))) (define (sdl-net-tcp-send-string sock str) - (sdl-net-tcp-send sock (string->byte-vector str))) + (sdl-net-tcp-send sock (string->blob str))) (define (sdl-net-tcp-recv-string sock buflen) - (let* ((bv (make-byte-vector buflen)) + (let* ((bv (make-blob buflen)) (result (sdl-net-tcp-recv sock bv buflen))) (if (positive? result) - (substring (byte-vector->string bv) 0 result) + (substring (blob->string bv) 0 result) result))) ;--------------------------------------------------------------------------- @@ -1058,25 +1398,25 @@ ;--------------------------------------------------------------------------- (define sdl-net-write-16 - (foreign-lambda* void ((byte-vector bv) + (foreign-lambda* void ((blob bv) (int offset) (unsigned-short value)) "SDLNet_Write16(value, &bv[offset]);")) (define sdl-net-write-32 - (foreign-lambda* void ((byte-vector bv) + (foreign-lambda* void ((blob bv) (int offset) (unsigned-integer value)) "SDLNet_Write32(value, &bv[offset]);")) (define sdl-net-read-16 - (foreign-lambda* unsigned-short ((byte-vector bv) + (foreign-lambda* unsigned-short ((blob bv) (int offset)) "return(SDLNet_Read16(&bv[offset]));")) (define sdl-net-read-32 - (foreign-lambda* unsigned-integer ((byte-vector bv) + (foreign-lambda* unsigned-integer ((blob bv) (int offset)) "return(SDLNet_Read32(&bv[offset]));")) - +) Index: test-net.scm =================================================================== --- test-net.scm (Revision 16082) +++ test-net.scm (Arbeitskopie) @@ -1,4 +1,5 @@ -(require 'posix) +(use posix) +(use sdl) (sdl-net-init) Index: sdl.meta =================================================================== --- sdl.meta (Revision 16082) +++ sdl.meta (Arbeitskopie) @@ -4,7 +4,6 @@ (author "Tony Garnock-Jones") (synopsis "Basic SDL support") (license "LGPL-2.1") - (needs syntax-case) (doc-from-wiki) (egg "sdl.egg") (files "COPYING" Index: test-heap.scm =================================================================== --- test-heap.scm (Revision 16082) +++ test-heap.scm (Arbeitskopie) @@ -1,5 +1,6 @@ -(require 'srfi-1) -(require 'heap) +(use srfi-1) +(use srfi-9) +(use sdl) (define-values (s-heap-insert s-heap-merge Index: test-sdl-body.scm =================================================================== --- test-sdl-body.scm (Revision 16082) +++ test-sdl-body.scm (Arbeitskopie) @@ -1,3 +1,4 @@ +(require-extension sdl) (define maxx 640) (define maxy 480) @@ -3,8 +4,7 @@ (if (< (length (argv)) 2) (begin (display "Usage: test-sdl path-to-ttf-font") - (newline) + (newline) (exit 1))) (define fontname (cadr (argv))) - (ttf-init)