You are looking at historical revision 2926 of this page. It may differ significantly from its current revision.
aalib
Straightforward bindings to the aalib ASCII rendering library.
Requirements
Exported bindings
aa:ALL -> INT aa:BACKSPACE -> INT aa:BOLD -> INT aa:BOLD-MASK -> INT aa:BOLDFONT -> INT aa:BOLDFONT-MASK -> INT aa:BUTTON1 -> INT aa:BUTTON2 -> INT aa:BUTTON3 -> INT aa:DIM -> INT aa:DIM-MASK -> INT aa:DITHERTYPES -> INT aa:DOWN -> INT aa:EIGHT -> INT aa:ERRORDISTRIB -> INT aa:ESC -> INT aa:EXTENDED -> INT aa:FLOYD-S -> INT aa:HIDECURSOR -> INT aa:KBDALLMASK -> INT aa:LEFT -> INT aa:LIB-MINNOR -> INT aa:LIB-VERSION -> INT aa:LIB-VERSIONCODE -> INT aa:MOUSE -> INT aa:MOUSEALLMASK -> INT aa:MOUSEMOVEMASK -> INT aa:MOUSEPRESSMASK -> INT aa:NATTRS -> INT aa:NONE -> INT aa:NORMAL -> INT aa:NORMAL-MASK -> INT aa:NORMAL-SPACES -> INT aa:NPARAMS -> INT aa:PRESSEDMOVEMASK -> INT aa:RELEASE -> INT aa:RESIZE -> INT aa:REVERSE -> INT aa:REVERSE-MASK -> INT aa:RIGHT -> INT aa:SENDRELEASE -> INT aa:SPECIAL -> INT aa:UNKNOWN -> INT aa:UP -> INT aa:USE-PAGES -> INT aa:ansi-format -> FORMAT aa:hp-format -> FORMAT aa:hp2-format -> FORMAT aa:html-alt-format -> FORMAT aa:html-format -> FORMAT aa:irc-format -> FORMAT aa:more-format -> FORMAT aa:nhtml-format -> FORMAT aa:text-format -> FORMAT aa:zephyr-format -> FORMAT aa:defparams -> PARAMS aa:defrenderparams -> RENDERPARAMS aa:mem-d -> DRIVER aa:save-d -> DRIVER aa:linux-d -> DRIVER ; only on Linux aa:stdout-d -> DRIVER aa:stderr-d -> DRIVER aa:X11-d -> DRIVER aa:kbd-curses-d -> KBDRIVER aa:kbd-stdin-d -> KBDRIVER aa:kbd-X11-d -> KBDRIVER aa:mouse-curses-d -> MOUSEDRIVER aa:mouse-X11-d -> MOUSEDRIVER aa:font8 -> FONT aa:font14 -> FONT aa:font16 -> FONT aa:font9 -> FONT aa:fontline -> FONT aa:fontgl -> FONT aa:fontX13 -> FONT aa:fontX16 -> FONT aa:fontX13B -> FONT aa:fontcourier -> FONT (aa:autoinit PARAMS) -> CONTEXT (aa:autoinitkbd CONTEXT MODE) -> INT (aa:autoinitmouse CONTEXT MODE) -> INT (aa:close CONTEXT) (aa:createedit CONTEXT X Y SIZE STRING MAXSIZE) -> EDIT (aa:edit CONTEXT X Y SIZE STRING MAXSIZE) (aa:editkey EDIT INT) (aa:fastrender CONTEXT X1 Y1 X2 Y2) (aa:flush CONTEXT) (aa:getevent CONTEXT WAIT?) -> INT (aa:getkey CONTEXT WAIT?) -> INT (aa:getmouse CONTEXT) -> X Y BUTTONS (aa:getpixel CONTEXT X Y) -> INT (aa:getpixel* CONTEXT POS) -> INT ; POS = index in row-major order (aa:getrenderparams) -> PARAMS (aa:gotoxy CONTEXT X Y) (aa:hidecursor CONTEXT) (aa:hidemouse CONTEXT) (aa:image CONTEXT) -> POINTER (aa:imgheight CONTEXT) -> INT (aa:imgwidth CONTEXT) -> INT (aa:init DRIVER PARAMS DATA) -> CONTEXT (aa:initkbd CONTEXT KBDRIVER MODE) -> INT (aa:initmouse CONTEXT MOUSEDRIVER MODE) -> INT (aa:mmheight CONTEXT) -> INT (aa:mmwidth CONTEXT) -> INT (aa:printf CONTEXT X Y ATTR FSTRING X ...) -> INT (aa:putpixel CONTEXT X Y COLOR) (aa:putpixel* CONTEXT POS COLOR) ; POS = index in row-major order (aa:puts CONTEXT X Y ATTR STRING) (aa:registerfont FONT) -> INT (aa:render CONTEXT RENDERPARAMS X1 Y1 X2 Y2) (aa:renderpalette CONTEXT S32VECTOR RENDERPARAMS X1 Y1 X2 Y2) (aa:resize CONTEXT) -> INT (aa:resizehandler CONTEXT FUNCTIONPTR) ; FUNCTIONPTR = callback accepting CONTEXT (aa:scrheight CONTEXT) -> INT (aa:scrwidth CONTEXT) -> INT (aa:setfont CONTEXT FONT) (aa:setpalette S32VECTOR INDEX R G B) (aa:setsupported CONTEXT SUPPORTED) (aa:showcursor CONTEXT) (aa:showmouse CONTEXT) (aa:uninitkbd CONTEXT) (aa:uninitmouse CONTEXT)
For more information see, the aalib documentation.
Example
;;;; fire.scm - The popular "fire" demo ; ; For maximum performance compile like this: ; ; csc -O3 -d0 fire.scm (declare (fixnum) (block) (disable-interrupts)) (use aalib srfi-4) (define-constant +maxtable+ (* 256 5)) (define-constant +ma+ 5) (define *context* (aa:autoinit aa:defparams)) (assert *context* "Failed to initialize aalib") (aa:autoinitkbd *context* 0) (define *params* (aa:getrenderparams)) (define *palette* (make-s32vector 256)) (define *pal* '#(0 0 0 0 0 6 0 0 6 0 0 7 0 0 8 0 0 8 0 0 9 0 0 10 2 0 10 4 0 9 6 0 9 8 0 8 10 0 7 12 0 7 14 0 6 16 0 5 18 0 5 20 0 4 22 0 4 24 0 3 26 0 2 28 0 2 30 0 1 32 0 0 32 0 0 33 0 0 34 0 0 35 0 0 36 0 0 36 0 0 37 0 0 38 0 0 39 0 0 40 0 0 40 0 0 41 0 0 42 0 0 43 0 0 44 0 0 45 0 0 46 1 0 47 1 0 48 2 0 49 2 0 50 3 0 51 3 0 52 4 0 53 4 0 54 5 0 55 5 0 56 6 0 57 6 0 58 7 0 59 7 0 60 8 0 61 8 0 63 9 0 63 9 0 63 10 0 63 10 0 63 11 0 63 11 0 63 12 0 63 12 0 63 13 0 63 13 0 63 14 0 63 14 0 63 15 0 63 15 0 63 16 0 63 16 0 63 17 0 63 17 0 63 18 0 63 18 0 63 19 0 63 19 0 63 20 0 63 20 0 63 21 0 63 21 0 63 22 0 63 22 0 63 23 0 63 24 0 63 24 0 63 25 0 63 25 0 63 26 0 63 26 0 63 27 0 63 27 0 63 28 0 63 28 0 63 29 0 63 29 0 63 30 0 63 30 0 63 31 0 63 31 0 63 32 0 63 32 0 63 33 0 63 33 0 63 34 0 63 34 0 63 35 0 63 35 0 63 36 0 63 36 0 63 37 0 63 38 0 63 38 0 63 39 0 63 39 0 63 40 0 63 40 0 63 41 0 63 41 0 63 42 0 63 42 0 63 43 0 63 43 0 63 44 0 63 44 0 63 45 0 63 45 0 63 46 0 63 46 0 63 47 0 63 47 0 63 48 0 63 48 0 63 49 0 63 49 0 63 50 0 63 50 0 63 51 0 63 52 0 63 52 0 63 52 0 63 52 0 63 52 0 63 53 0 63 53 0 63 53 0 63 53 0 63 54 0 63 54 0 63 54 0 63 54 0 63 54 0 63 55 0 63 55 0 63 55 0 63 55 0 63 56 0 63 56 0 63 56 0 63 56 0 63 57 0 63 57 0 63 57 0 63 57 0 63 57 0 63 58 0 63 58 0 63 58 0 63 58 0 63 59 0 63 59 0 63 59 0 63 59 0 63 60 0 63 60 0 63 60 0 63 60 0 63 60 0 63 61 0 63 61 0 63 61 0 63 61 0 63 62 0 63 62 0 63 62 0 63 62 0 63 63 0 63 63 1 63 63 2 63 63 3 63 63 4 63 63 5 63 63 6 63 63 7 63 63 8 63 63 9 63 63 10 63 63 10 63 63 11 63 63 12 63 63 13 63 63 14 63 63 15 63 63 16 63 63 17 63 63 18 63 63 19 63 63 20 63 63 21 63 63 21 63 63 22 63 63 23 63 63 24 63 63 25 63 63 26 63 63 27 63 63 28 63 63 29 63 63 30 63 63 31 63 63 31 63 63 32 63 63 33 63 63 34 63 63 35 63 63 36 63 63 37 63 63 38 63 63 39 63 63 40 63 63 41 63 63 42 63 63 42 63 63 43 63 63 44 63 63 45 63 63 46 63 63 47 63 63 48 63 63 49 63 63 50 63 63 51 63 63 52 63 63 52 63 63 53 63 63 54 63 63 55 63 63 56 63 63 57 63 63 58 63 63 59 63 63 60 63 63 61 63 63 62 63 63 63) ) (do ((i 0 (add1 i))) ((>= i 256)) (aa:setpalette *palette* i (* 4 (vector-ref *pal* (* i 3))) (* 4 (vector-ref *pal* (+ 1 (* i 3)))) (* 4 (vector-ref *pal* (+ 2 (* i 3)))) ) ) (aa:hidecursor *context*) (define *xsize* (aa:imgwidth *context*)) (define *ysize* (- (aa:imgheight *context*) 4)) (define *table* (make-u32vector +maxtable+)) (define (gentable) (let ((minus (fx/ 800 *ysize*))) (when (zero? minus) (set! minus 1)) (do ((i 0 (add1 i))) ((>= i +maxtable+)) (u32vector-set! *table* i (if (> i minus) (fx/ (fx- i minus) 5) 0) ) ) ) ) (define (firemain) (let ((pixels (fx* *xsize* *ysize*))) (do ((p 0 (add1 p))) ((>= p pixels)) (aa:putpixel* *context* p (u32vector-ref *table* (+ (aa:getpixel* *context* (+ p *xsize* -1)) (aa:getpixel* *context* (+ p *xsize* 1)) (aa:getpixel* *context* (+ p *xsize*)) (aa:getpixel* *context* (+ p (* 2 *xsize*) -1)) (aa:getpixel* *context* (+ p (* 2 *xsize*) 1)) ) ) ) ) ) ) (define drawfire (let ((height 0) (sloop 0) (iloop 0) ) (lambda () (let ((n (* *xsize* (add1 *ysize*)))) (set! height (add1 height)) (set! iloop (sub1 iloop)) (when (negative? iloop) (set! iloop (random 3)) (set! sloop (add1 sloop)) ) (do ((i1 1 (+ i1 4)) (i2 (add1 (* 4 *xsize*)) (- i2 4)) (p (* *xsize* *ysize*) (add1 p)) ) ((>= p n)) (let ((last1 (random (min i1 i2 height)))) (do ((i (random 6) (sub1 i))) ((or (>= p n) (zero? i))) (aa:putpixel* *context* p last1) (set! last1 (+ last1 (random 6) -2)) (aa:putpixel* *context* (+ p *xsize*) last1) (set! last1 (+ last1 (random 6) -2)) (set! p (add1 p)) (set! i1 (+ i1 4)) (set! i2 (- i2 4)) ) ) ) (firemain) (aa:renderpalette *context* *palette* *params* 0 0 (aa:scrwidth *context*) (aa:scrheight *context*)) (aa:flush *context*) ) ) ) ) (define (game) (gentable) (do () ((not (eq? (aa:getevent *context* #f) aa:NONE))) (drawfire) ) ) (game) (aa:close *context*)
>