On Sat, Aug 21, 2010 at 06:51:35PM +0200, Christopher Roy Bratusek wrote: > does anyone of you have a clue on how to use rep.ffi? You can look at attached "examples". It was written by Sergey Bolshakov, the person who wrote patch for rep.ffi. -- Regards, -- Sir Raorn. --- http://thousandsofhate.blogspot.com/
#| util.jl -- FFI helpers Author: Sergey Bolshakov <sbolshakov altlinux ru> Version: $Id: util.jl,v 1.5 2006/07/16 19:40:32 me Exp $ This file is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this file. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. |# (define-structure rep.ffi.util (export ffi-bind ffi-type-enum) (open rep rep.ffi rep.data.tables) (define (ffi-bind soname tab) (let ((handle (ffi-load-library soname)) (symtab (make-table symbol-hash eq-hash)) (ifacetab (make-table symbol-hash eq-hash))) (mapc (lambda (elt) (apply (lambda (key dlsym ret . args) (table-set symtab key (ffi-lookup-symbol handle dlsym)) (table-set ifacetab key (ffi-interface ret args))) elt)) tab) (lambda (key . args) (and (table-bound-p symtab key) (ffi-apply (table-ref ifacetab key) (table-ref symtab key) args))))) (define (enump sym enum-alist) (and (symbolp sym) (assq sym enum-alist))) (define (enum->sym num enum-alist) (let ((p (rassq num enum-alist))) (if p (car p) (signal 'bad-arg `(,num))))) (define (sym->enum sym enum-alist) (let ((p (assq sym enum-alist))) (if p (cdr p) (signal 'bad-arg `(,sym))))) (define (ffi-type-enum enum-alist) (ffi-type ffi-type-sint32 (lambda (x) (enump x enum-alist)) (lambda (x) (sym->enum x enum-alist)) (lambda (x) (enum->sym x enum-alist)))) )
#| xosd.jl -- Bindings to libxosd using rep.ffi Author: Sergey Bolshakov <sbolshakov altlinux ru> Version: $Id: xosd.jl,v 1.3 2006/07/16 15:17:32 me Exp me $ This file is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this file. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. |# (define-structure rep.ffi.xosd (export xosd) (open rep rep.ffi rep.ffi.util rep.data.objects) (defconst xosd-dl-soname "libxosd.so.2" "xosd library's soname.") (define handle (ffi-bind xosd-dl-soname `((create "xosd_create" ; xosd *xosd_create(int number_lines) ,ffi-type-pointer ,ffi-type-sint32) (destroy "xosd_destroy" ; int xosd_destroy(xosd * osd) ,ffi-type-sint32 ,ffi-type-pointer) (set-bar-len! "xosd_set_bar_length" ; int xosd_set_bar_length(xosd * osd, int length) ,ffi-type-sint32 ,ffi-type-pointer ,ffi-type-sint32) (display-string "xosd_display" ; int xosd_display(xosd * osd, int line, xosd_command command, ...) ,ffi-type-sint32 ,ffi-type-pointer ,ffi-type-sint32 ,(ffi-type-enum '((string . 1) (printf . 2))) ,ffi-type-pointer) (display-bar "xosd_display" ; int xosd_display(xosd * osd, int line, xosd_command command, ...) ,ffi-type-sint32 ,ffi-type-pointer ,ffi-type-sint32 ,(ffi-type-enum '((percentage . 0) (slider . 3))) ,ffi-type-sint32) (onscreenp "xosd_is_onscreen" ; int xosd_is_onscreen(xosd * osd) ,ffi-type-sint32 ,ffi-type-pointer) (wait "xosd_wait_until_no_display" ; int xosd_wait_until_no_display(xosd * osd) ,ffi-type-sint32 ,ffi-type-pointer) (hide "xosd_hide" ; int xosd_hide(xosd * osd) ,ffi-type-sint32 ,ffi-type-pointer) (show "xosd_show" ; int xosd_show(xosd * osd) ,ffi-type-sint32 ,ffi-type-pointer) (set-pos! "xosd_set_pos" ; int xosd_set_pos(xosd * osd, xosd_pos pos) ,ffi-type-sint32 ,ffi-type-pointer ,(ffi-type-enum '((top . 0) (bottom . 1) (middle . 2)))) (set-align! "xosd_set_align" ; int xosd_set_align(xosd * osd, xosd_align align) ,ffi-type-sint32 ,ffi-type-pointer ,(ffi-type-enum '((left . 0) (center . 1) (right . 2)))) (set-shadow-offset! "xosd_set_shadow_offset" ; int xosd_set_shadow_offset(xosd * osd, int shadow_offset) ,ffi-type-sint32 ,ffi-type-pointer ,ffi-type-sint32) (set-outline-offset! "xosd_set_outline" ; int xosd_set_outline_offset(xosd * osd, int outline_offset) ,ffi-type-sint32 ,ffi-type-pointer ,ffi-type-sint32) (set-outline-colour! "xosd_set_outline_colour" ; int xosd_set_outline_colour(xosd * osd, const char *colour) ,ffi-type-sint32 ,ffi-type-pointer ,ffi-type-sint32) (set-shadow-colour! "xosd_set_shadow_colour" ; int xosd_set_shadow_colour(xosd * osd, const char *colour) ,ffi-type-sint32 ,ffi-type-pointer ,ffi-type-sint32) (set-horiz-offset! "xosd_set_horizontal_offset" ; int xosd_set_horizontal_offset(xosd * osd, int offset) ,ffi-type-sint32 ,ffi-type-pointer ,ffi-type-sint32) (set-vert-offset! "xosd_set_vertical_offset" ; int xosd_set_vertical_offset(xosd * osd, int offset) ,ffi-type-sint32 ,ffi-type-pointer ,ffi-type-sint32) (set-timeout! "xosd_set_timeout" ; int xosd_set_timeout(xosd * osd, int timeout) ,ffi-type-sint32 ,ffi-type-pointer ,ffi-type-sint32) (set-colour! "xosd_set_colour" ; int xosd_set_colour(xosd * osd, const char *colour) ,ffi-type-sint32 ,ffi-type-pointer ,ffi-type-pointer) (set-font! "xosd_set_font" ; int xosd_set_font(xosd * osd, const char *font) ,ffi-type-sint32 ,ffi-type-pointer ,ffi-type-pointer) (colour "xosd_get_colour" ; int xosd_get_colour(xosd * osd, int *red, int *green, int *blue) ,ffi-type-sint32 ,ffi-type-pointer ,ffi-type-pointer ,ffi-type-pointer ,ffi-type-pointer) (scroll "xosd_scroll" ; int xosd_scroll(xosd * osd, int lines) ,ffi-type-sint32 ,ffi-type-pointer ,ffi-type-sint32) (lines "xosd_get_number_lines" ; int xosd_get_number_lines(xosd * osd) ,ffi-type-sint32 ,ffi-type-pointer)))) (define (xosd #!key lines position align font colour timeout voffset hoffset shadow-colour shadow-offset outline-colour outline-offset) (let ((o (handle 'create (or lines 1)))) (and align (handle 'set-align! o align)) (and position (handle 'set-pos! o position)) (and font (handle 'set-font! o font)) (and colour (handle 'set-colour! o colour)) (and timeout (handle 'set-timeout! o timeout)) (and voffset (handle 'set-vert-offset! o voffset)) (and hoffset (handle 'set-horiz-offset! o hoffset)) (and shadow-colour (handle 'set-shadow-colour! o shadow-colour)) (and shadow-offset (handle 'set-shadow-offset! o shadow-offset)) (and outline-colour (handle 'set-outline-colour! o outline-colour)) (and outline-offset (handle 'set-outline-offset! o outline-offset)) (object nil ((display type . args) (case type ((string format) (apply handle 'display-string o 0 type args)) ((percentage slider) (apply handle 'display-bar o 0 type args)))) ((destroy) (handle 'destroy o)) ((hide) (handle 'hide o)) ((show) (handle 'show o)) ((scroll) (handle 'scroll o)) ((wait) (handle 'wait o)) ((onscreenp) (handle 'onscreenp o))))) ) ;; local variables: ;; comment-column: 64 ;; end:
Attachment:
signature.asc
Description: Digital signature