summaryrefslogtreecommitdiff
path: root/Examples/GIFPlot/Chicken
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/GIFPlot/Chicken')
-rw-r--r--Examples/GIFPlot/Chicken/check.list3
-rw-r--r--Examples/GIFPlot/Chicken/full/Makefile28
-rw-r--r--Examples/GIFPlot/Chicken/full/README6
-rw-r--r--Examples/GIFPlot/Chicken/full/cmapbin0 -> 768 bytes
-rw-r--r--Examples/GIFPlot/Chicken/full/gifplot.i26
-rw-r--r--Examples/GIFPlot/Chicken/full/test-gifplot.scm66
-rw-r--r--Examples/GIFPlot/Chicken/simple/Makefile28
-rw-r--r--Examples/GIFPlot/Chicken/simple/README5
-rw-r--r--Examples/GIFPlot/Chicken/simple/simple.i34
-rw-r--r--Examples/GIFPlot/Chicken/simple/test-simple.scm29
10 files changed, 225 insertions, 0 deletions
diff --git a/Examples/GIFPlot/Chicken/check.list b/Examples/GIFPlot/Chicken/check.list
new file mode 100644
index 0000000..e75ee58
--- /dev/null
+++ b/Examples/GIFPlot/Chicken/check.list
@@ -0,0 +1,3 @@
+# see top-level Makefile.in
+full
+simple
diff --git a/Examples/GIFPlot/Chicken/full/Makefile b/Examples/GIFPlot/Chicken/full/Makefile
new file mode 100644
index 0000000..2ae4fd7
--- /dev/null
+++ b/Examples/GIFPlot/Chicken/full/Makefile
@@ -0,0 +1,28 @@
+TOP = ../../..
+SWIG = $(TOP)/../preinst-swig
+INTERFACE = gifplot.i
+SRCS =
+CXXSRCS =
+TARGET = gifplot
+INCLUDE = -I. -I../../Include
+SWIGOPT = -I../../Include
+CFLAGS =
+VARIANT =
+LIBS = -L../.. -lgifplot -lm
+
+# comment the following two lines to build a dynamic so file
+CHICKEN_MAIN = test-gifplot.scm
+VARIANT = _static
+
+all:: $(TARGET)
+
+$(TARGET): $(INTERFACE) $(SRCS)
+ $(MAKE) -f $(TOP)/Makefile \
+ SRCS='$(SRCS)' CXXSRCS='$(CXXSRCS)' CHICKEN_MAIN='$(CHICKEN_MAIN)' \
+ INCLUDE='$(INCLUDE)' SWIGOPT='$(SWIGOPT)' LIBS='$(LIBS)' TARGET='$(TARGET)' \
+ SWIG='$(SWIG)' INTERFACE='$(INTERFACE)' CHICKENOPTS='$(CHICKENOPTS)' chicken$(VARIANT)
+
+clean::
+ $(MAKE) -f $(TOP)/Makefile chicken_clean
+ rm -f gifplot.scm image.gif
+ rm -f $(TARGET)
diff --git a/Examples/GIFPlot/Chicken/full/README b/Examples/GIFPlot/Chicken/full/README
new file mode 100644
index 0000000..e5ddd7a
--- /dev/null
+++ b/Examples/GIFPlot/Chicken/full/README
@@ -0,0 +1,6 @@
+This example runs the entire gifplot.h header file through SWIG without
+any changes. The Scheme program 'test-gifplot.scm' does something a
+little more interesting. You'll have to go look at the header file to
+get a complete listing of the functions.
+
+`make' will build a static binary. Run ./gifplot to test it.
diff --git a/Examples/GIFPlot/Chicken/full/cmap b/Examples/GIFPlot/Chicken/full/cmap
new file mode 100644
index 0000000..a20c331
--- /dev/null
+++ b/Examples/GIFPlot/Chicken/full/cmap
Binary files differ
diff --git a/Examples/GIFPlot/Chicken/full/gifplot.i b/Examples/GIFPlot/Chicken/full/gifplot.i
new file mode 100644
index 0000000..f674186
--- /dev/null
+++ b/Examples/GIFPlot/Chicken/full/gifplot.i
@@ -0,0 +1,26 @@
+/* Oh what the heck, let's just grab the whole darn header file
+ and see what happens. */
+
+%module gifplot
+%{
+
+/* Note: You still need this part because the %include directive
+ merely causes SWIG to interpret the contents of a file. It doesn't
+ include the right include headers for the resulting C code */
+
+#include "gifplot.h"
+
+%}
+
+/* Pixel is typedef'd to unsigned char, and SWIG will translate this
+ type into Scheme characters. We would like to translate Pixels to
+ Scheme integers instead, so: */
+
+SIMPLE_TYPEMAP(Pixel, C_unfix, C_fix, C_swig_is_fixnum, (int), 0);
+
+%{
+static Pixel int_to_Pixel (int v) { return (Pixel) v; }
+%}
+extern Pixel int_to_Pixel (int v);
+
+%include gifplot.h
diff --git a/Examples/GIFPlot/Chicken/full/test-gifplot.scm b/Examples/GIFPlot/Chicken/full/test-gifplot.scm
new file mode 100644
index 0000000..c290af5
--- /dev/null
+++ b/Examples/GIFPlot/Chicken/full/test-gifplot.scm
@@ -0,0 +1,66 @@
+;;; Plot a 3D function
+
+(declare (uses gifplot))
+
+;; Here is the function to plot
+(define (func x y)
+ (* 5
+ (cos (* 2 (sqrt (+ (* x x) (* y y)))))
+ (exp (* -0.3 (sqrt (+ (* x x) (* y y)))))))
+
+;; Here are some plotting parameters
+(define xmin -5.0)
+(define xmax 5.0)
+(define ymin -5.0)
+(define ymax 5.0)
+(define zmin -5.0)
+(define zmax 5.0)
+
+;; Grid resolution
+(define nxpoints 60)
+(define nypoints 60)
+
+(define cmap (gifplot:new-ColorMap "cmap"))
+(define frame (gifplot:new-FrameBuffer 500 500))
+(gifplot:FrameBuffer-clear frame (gifplot:BLACK))
+
+(define p3 (gifplot:new-Plot3D frame xmin ymin zmin xmax ymax zmax))
+(gifplot:Plot3D-lookat p3 (* 2 (- zmax zmin)))
+(gifplot:Plot3D-autoperspective p3 40.0)
+(gifplot:Plot3D-rotu p3 60.0)
+(gifplot:Plot3D-rotr p3 30.0)
+(gifplot:Plot3D-rotd p3 10.0)
+
+(define (drawsolid)
+ (gifplot:Plot3D-clear p3 (gifplot:BLACK))
+ (gifplot:Plot3D-start p3)
+ (let ((dx (/ (- xmax xmin) nxpoints))
+ (dy (/ (- ymax ymin) nypoints))
+ (cscale (/ 240 (- zmax zmin))))
+ (let x-loop ((x xmin) (i 0))
+ (cond
+ ((< i nxpoints)
+ (let y-loop ((y ymin) (j 0))
+ (cond
+ ((< j nypoints)
+ (let* ((z1 (func x y))
+ (z2 (func (+ x dx) y))
+ (z3 (func (+ x dx) (+ y dy)))
+ (z4 (func x (+ y dy)))
+ (c1 (* cscale (- z1 zmin)))
+ (c2 (* cscale (- z2 zmin)))
+ (c3 (* cscale (- z3 zmin)))
+ (c4 (* cscale (- z4 zmin)))
+ (cc (/ (+ c1 c2 c3 c4) 4))
+ (c (inexact->exact (round (max (min cc 239) 0)))))
+ (gifplot:Plot3D-solidquad p3 x y z1 (+ x dx) y z2 (+ x dx) (+ y dy)
+ z3 x (+ y dy) z4
+ (gifplot:int->Pixel (+ c 16))))
+ (y-loop (+ y dy) (+ j 1)))))
+ (x-loop (+ x dx) (+ i 1)))))))
+
+(display "Making a nice 3D plot...\n")
+(drawsolid)
+
+(gifplot:FrameBuffer-writeGIF frame cmap "image.gif")
+(display "Wrote image.gif\n")
diff --git a/Examples/GIFPlot/Chicken/simple/Makefile b/Examples/GIFPlot/Chicken/simple/Makefile
new file mode 100644
index 0000000..484e583
--- /dev/null
+++ b/Examples/GIFPlot/Chicken/simple/Makefile
@@ -0,0 +1,28 @@
+TOP = ../../..
+SWIG = $(TOP)/../preinst-swig
+INTERFACE = simple.i
+SRCS =
+CXXSRCS =
+TARGET = simple
+INCLUDE = -I. -I../../Include
+SWIGOPT = -I../../Include
+CFLAGS =
+VARIANT =
+LIBS = -L../.. -lgifplot -lm
+
+# comment the following two lines to build a dynamic so file
+CHICKEN_MAIN = test-simple.scm
+VARIANT = _static
+
+all:: $(TARGET)
+
+$(TARGET): $(INTERFACE) $(SRCS)
+ $(MAKE) -f $(TOP)/Makefile \
+ SRCS='$(SRCS)' CXXSRCS='$(CXXSRCS)' CHICKEN_MAIN='$(CHICKEN_MAIN)' \
+ INCLUDE='$(INCLUDE)' SWIGOPT='$(SWIGOPT)' LIBS='$(LIBS)' TARGET='$(TARGET)' \
+ SWIG='$(SWIG)' INTERFACE='$(INTERFACE)' CHICKENOPTS='$(CHICKENOPTS)' chicken$(VARIANT)
+
+clean::
+ $(MAKE) -f $(TOP)/Makefile chicken_clean
+ rm -f simple.scm image.gif
+ rm -f $(TARGET)
diff --git a/Examples/GIFPlot/Chicken/simple/README b/Examples/GIFPlot/Chicken/simple/README
new file mode 100644
index 0000000..3b138f3
--- /dev/null
+++ b/Examples/GIFPlot/Chicken/simple/README
@@ -0,0 +1,5 @@
+This is a very minimalistic example in which just a few functions
+and constants from library are wrapped and used to draw some simple
+shapes.
+
+`make' will build an exe. Run ./simple to test it.
diff --git a/Examples/GIFPlot/Chicken/simple/simple.i b/Examples/GIFPlot/Chicken/simple/simple.i
new file mode 100644
index 0000000..23ac8a8
--- /dev/null
+++ b/Examples/GIFPlot/Chicken/simple/simple.i
@@ -0,0 +1,34 @@
+/* This example shows a very simple interface wrapping a few
+ primitive declarations */
+
+%module simple
+%{
+#include "gifplot.h"
+%}
+
+typedef unsigned int Pixel;
+
+/* Here are a few useful functions */
+
+ColorMap *new_ColorMap(char *filename = 0);
+void delete_ColorMap(ColorMap *cmap);
+
+FrameBuffer *new_FrameBuffer(unsigned int width, unsigned int height);
+void delete_FrameBuffer(FrameBuffer *frame);
+void FrameBuffer_clear(FrameBuffer *frame, Pixel color);
+void FrameBuffer_line(FrameBuffer *frame, int x1, int y1, int x2, int y2, Pixel color);
+void FrameBuffer_box(FrameBuffer *frame, int x1, int y1, int x2, int y2, Pixel color);
+void FrameBuffer_circle(FrameBuffer *frame, int x1, int y1, int radius, Pixel color);
+int FrameBuffer_writeGIF(FrameBuffer *f, ColorMap *c, char *filename);
+
+/* And some useful constants, which we redefine (from gifplot.h) so
+ that SWIG sees them */
+#define BLACK 0
+#define WHITE 1
+#define RED 2
+#define GREEN 3
+#define BLUE 4
+#define YELLOW 5
+#define CYAN 6
+#define MAGENTA 7
+
diff --git a/Examples/GIFPlot/Chicken/simple/test-simple.scm b/Examples/GIFPlot/Chicken/simple/test-simple.scm
new file mode 100644
index 0000000..43250d8
--- /dev/null
+++ b/Examples/GIFPlot/Chicken/simple/test-simple.scm
@@ -0,0 +1,29 @@
+;;; Draw some simple shapes
+
+(declare (uses simple))
+
+(display "Drawing some basic shapes\n")
+
+(define cmap (simple:new-ColorMap #f))
+(define f (simple:new-FrameBuffer 400 400))
+
+;; Clear the picture
+(simple:FrameBuffer-clear f (simple:BLACK))
+
+;; Make a red box
+(simple:FrameBuffer-box f 40 40 200 200 (simple:RED))
+
+;; Make a blue circle
+(simple:FrameBuffer-circle f 200 200 40 (simple:BLUE))
+
+;; Make green line
+(simple:FrameBuffer-line f 10 390 390 200 (simple:GREEN))
+
+;; Write an image out to disk
+
+(simple:FrameBuffer-writeGIF f cmap "image.gif")
+(display "Wrote image.gif\n")
+
+(simple:delete-FrameBuffer f)
+(simple:delete-ColorMap cmap)
+