source: project/release/4/iup/trunk/iup-pplot.scm @ 20570

Last change on this file since 20570 was 20570, checked in by Thomas Chust, 11 years ago

Imported the IUP binding egg.

File size: 2.2 KB
Line 
1(require-library iup-base)
2
3(module iup-pplot
4        (pplot
5         call-with-pplot pplot-add!
6         pplot-x/y->pixel-x/y
7         pplot-paint-to)
8        (import
9                scheme chicken foreign
10                iup-base)
11
12;; {{{ Data types
13
14(foreign-declare
15        "#include <iup.h>\n"
16        "#include <iup_pplot.h>\n")
17       
18(include "iup-types.scm")
19
20;; }}}
21
22;; {{{ PPlot control
23
24(define pplot
25  (make-constructor-procedure
26        (foreign-lambda nonnull-ihandle "IupPPlot")))
27
28;; }}}
29
30;; {{{ Plotting functions
31
32(define call-with-pplot
33  (letrec ([pplot-begin (foreign-lambda void "IupPPlotBegin" nonnull-ihandle bool)]
34           [pplot-end (foreign-lambda void "IupPPlotEnd" nonnull-ihandle)])
35    (lambda (handle proc #!key [x-string? #f])
36      (dynamic-wind
37       (lambda ()
38         (pplot-begin handle x-string?))
39       (lambda ()
40         (proc handle))
41       (lambda ()
42         (pplot-end handle))))))
43
44(define pplot-add!
45  (letrec ([append/real (foreign-lambda void "IupPPlotAdd" nonnull-ihandle float float)]
46           [append/string (foreign-lambda void "IupPPlotAddStr" nonnull-ihandle c-string float)]
47           [insert/real (foreign-lambda void "IupPPlotInsert" nonnull-ihandle int int float float)]
48           [insert/string (foreign-lambda void "IupPPlotInsertStr" nonnull-ihandle int int c-string float)]
49           [current-index (lambda (handle) (string->number (attribute handle 'current)))])
50    (lambda (handle x y #!optional [sample-index #f] [index #f])
51      (if (string? x)
52          (if index
53              (insert/string handle (or index (current-index handle)) sample-index x y)
54              (append/string handle x y))
55          (if index
56              (insert/real handle (or index (current-index handle)) sample-index x y)
57              (append/real handle x y))))))
58
59(define pplot-x/y->pixel-x/y
60        (letrec ([transform (foreign-lambda void "IupPPlotTransform" nonnull-ihandle float float (c-pointer int) (c-pointer int))])
61                (lambda (handle pplot-x pplot-y)
62                        (let-location ([pixel-x int 0] [pixel-y int 0])
63                                (transform handle pplot-x pplot-y (location pixel-x) (location pixel-y))
64                                (values pixel-x pixel-y)))))
65
66(define pplot-paint-to
67        (foreign-lambda void "IupPPlotPaintTo" nonnull-ihandle nonnull-c-pointer))
68
69;; }}}
70
71;; {{{ Library setup
72
73(foreign-code "IupPPlotOpen();")
74
75;; }}}
76
77)
Note: See TracBrowser for help on using the repository browser.