diff options
author | Xavier Delacour <xavier.delacour@gmail.com> | 2008-03-01 23:35:44 +0000 |
---|---|---|
committer | Xavier Delacour <xavier.delacour@gmail.com> | 2008-03-01 23:35:44 +0000 |
commit | 393391965c4583923d23958a483dabd316d425f6 (patch) | |
tree | a4b0d0884436413c9b36be2e01dc7672813baad9 /Examples/octave/variables | |
parent | 50b1578e19c1fe821697c75ffac87f3624f810a8 (diff) | |
download | swig-393391965c4583923d23958a483dabd316d425f6.tar.gz |
Initial commit of Octave module.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@10290 626c5289-ae23-0410-ae9c-e8d60b6d4f22
Diffstat (limited to 'Examples/octave/variables')
-rw-r--r-- | Examples/octave/variables/Makefile | 21 | ||||
-rw-r--r-- | Examples/octave/variables/example.c | 91 | ||||
-rw-r--r-- | Examples/octave/variables/example.h | 6 | ||||
-rw-r--r-- | Examples/octave/variables/example.i | 53 | ||||
-rw-r--r-- | Examples/octave/variables/runme.m | 75 |
5 files changed, 246 insertions, 0 deletions
diff --git a/Examples/octave/variables/Makefile b/Examples/octave/variables/Makefile new file mode 100644 index 000000000..9164a1ca5 --- /dev/null +++ b/Examples/octave/variables/Makefile @@ -0,0 +1,21 @@ +TOP = ../.. +SWIG = $(TOP)/../preinst-swig +CXXSRCS = example.c +TARGET = example +INTERFACE = example.i +LIBS = -lm +SWIGOPT = + +all:: + $(MAKE) -f $(TOP)/Makefile $(SWIGLIB) CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \ + SWIGOPT='$(SWIGOPT)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' octave_cpp + +static:: + $(MAKE) -f $(TOP)/Makefile $(SWIGLIB) CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \ + SWIGOPT='$(SWIGOPT)' TARGET='myoctave' INTERFACE='$(INTERFACE)' octave_cpp_static + +clean:: + $(MAKE) -f $(TOP)/Makefile octave_clean + rm -f $(TARGET).m + +check: all diff --git a/Examples/octave/variables/example.c b/Examples/octave/variables/example.c new file mode 100644 index 000000000..aa4ffe9b3 --- /dev/null +++ b/Examples/octave/variables/example.c @@ -0,0 +1,91 @@ +/* File : example.c */ + +/* I'm a file containing some C global variables */ + +/* Deal with Microsoft's attempt at deprecating C standard runtime functions */ +#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) +# define _CRT_SECURE_NO_DEPRECATE +#endif + +#include <stdio.h> +#include <stdlib.h> +#include "example.h" + +int ivar = 0; +short svar = 0; +long lvar = 0; +unsigned int uivar = 0; +unsigned short usvar = 0; +unsigned long ulvar = 0; +signed char scvar = 0; +unsigned char ucvar = 0; +char cvar = 0; +float fvar = 0; +double dvar = 0; +char *strvar = 0; +const char cstrvar[] = "Goodbye"; +int *iptrvar = 0; +char name[256] = "Dave"; +char path[256] = "/home/beazley"; + + +/* Global variables involving a structure */ +Point *ptptr = 0; +Point pt = { 10, 20 }; + +/* A variable that we will make read-only in the interface */ +int status = 1; + +/* A debugging function to print out their values */ + +void print_vars() { + printf("ivar = %d\n", ivar); + printf("svar = %d\n", svar); + printf("lvar = %ld\n", lvar); + printf("uivar = %u\n", uivar); + printf("usvar = %u\n", usvar); + printf("ulvar = %lu\n", ulvar); + printf("scvar = %d\n", scvar); + printf("ucvar = %u\n", ucvar); + printf("fvar = %g\n", fvar); + printf("dvar = %g\n", dvar); + printf("cvar = %c\n", cvar); + printf("strvar = %s\n", strvar ? strvar : "(null)"); + printf("cstrvar = %s\n", cstrvar ? cstrvar : "(null)"); + printf("iptrvar = %p\n", iptrvar); + printf("name = %s\n", name); + printf("ptptr = %p (%d, %d)\n", ptptr, ptptr ? ptptr->x : 0, ptptr ? ptptr->y : 0); + printf("pt = (%d, %d)\n", pt.x, pt.y); + printf("status = %d\n", status); +} + +/* A function to create an integer (to test iptrvar) */ + +int *new_int(int value) { + int *ip = (int *) malloc(sizeof(int)); + *ip = value; + return ip; +} + +/* A function to create a point */ + +Point *new_Point(int x, int y) { + Point *p = (Point *) malloc(sizeof(Point)); + p->x = x; + p->y = y; + return p; +} + +char * Point_print(Point *p) { + static char buffer[256]; + if (p) { + sprintf(buffer,"(%d,%d)", p->x,p->y); + } else { + sprintf(buffer,"null"); + } + return buffer; +} + +void pt_print() { + printf("(%d, %d)\n", pt.x, pt.y); +} diff --git a/Examples/octave/variables/example.h b/Examples/octave/variables/example.h new file mode 100644 index 000000000..0f7e89594 --- /dev/null +++ b/Examples/octave/variables/example.h @@ -0,0 +1,6 @@ +/* File: example.h */ + +typedef struct { + int x,y; +} Point; + diff --git a/Examples/octave/variables/example.i b/Examples/octave/variables/example.i new file mode 100644 index 000000000..639b6c704 --- /dev/null +++ b/Examples/octave/variables/example.i @@ -0,0 +1,53 @@ +/* File : example.i */ +%module example +%{ +#include "example.h" +%} + +#pragma SWIG nowarn=SWIGWARN_TYPEMAP_SWIGTYPELEAK + +/* Some global variable declarations */ +%inline %{ + extern "C" { + extern int ivar; + extern short svar; + extern long lvar; + extern unsigned int uivar; + extern unsigned short usvar; + extern unsigned long ulvar; + extern signed char scvar; + extern unsigned char ucvar; + extern char cvar; + extern float fvar; + extern double dvar; + extern char *strvar; + // extern const char cstrvar[]; + extern int *iptrvar; + extern char name[256]; + + extern Point *ptptr; + extern Point pt; + } +%} + + +/* Some read-only variables */ + +%immutable; + +%inline %{ +extern int status; +extern char path[256]; +%} + +%mutable; + +/* Some helper functions to make it easier to test */ +%inline %{ +extern void print_vars(); +extern int *new_int(int value); +extern Point *new_Point(int x, int y); +extern char *Point_print(Point *p); +extern void pt_print(); +%} + diff --git a/Examples/octave/variables/runme.m b/Examples/octave/variables/runme.m new file mode 100644 index 000000000..db88b18b0 --- /dev/null +++ b/Examples/octave/variables/runme.m @@ -0,0 +1,75 @@ +# file: runme.m + +example + +# Try to set the values of some global variables + +example.cvar.ivar = 42; +example.cvar.svar = -31000; +example.cvar.lvar = 65537; +example.cvar.uivar = 123456; +example.cvar.usvar = 61000; +example.cvar.ulvar = 654321; +example.cvar.scvar = -13; +example.cvar.ucvar = 251; +example.cvar.cvar = "S"; +example.cvar.fvar = 3.14159; +example.cvar.dvar = 2.1828; +example.cvar.strvar = "Hello World"; +example.cvar.iptrvar= example.new_int(37); +example.cvar.ptptr = example.new_Point(37,42); +example.cvar.name = "Bill"; + +# Now print out the values of the variables + +printf("Variables (values printed from Octave)\n"); + +printf("ivar = %i\n", example.cvar.ivar); +printf("svar = %i\n", example.cvar.svar); +printf("lvar = %i\n", example.cvar.lvar); +printf("uivar = %i\n", example.cvar.uivar); +printf("usvar = %i\n", example.cvar.usvar); +printf("ulvar = %i\n", example.cvar.ulvar); +printf("scvar = %i\n", example.cvar.scvar); +printf("ucvar = %i\n", example.cvar.ucvar); +printf("fvar = %i\n", example.cvar.fvar); +printf("dvar = %i\n", example.cvar.dvar); +printf("cvar = %s\n", example.cvar.cvar); +printf("strvar = %s\n", example.cvar.strvar); +#printf("cstrvar = %s\n", example.cvar.cstrvar); +example.cvar.iptrvar +printf("name = %i\n", example.cvar.name); +printf("ptptr = %s\n", example.Point_print(example.cvar.ptptr)); +#printf("pt = %s\n", example.cvar.Point_print(example.cvar.pt)); + +printf("\nVariables (values printed from C)\n"); + +example.print_vars(); + +printf("\nNow I'm going to try and modify some read only variables\n"); + +printf(" Tring to set 'path'\n"); +try + example.cvar.path = "Whoa!"; + printf("Hey, what's going on?!?! This shouldn't work\n"); +catch + printf("Good.\n"); +end_try_catch + +printf(" Trying to set 'status'\n"); +try + example.cvar.status = 0; + printf("Hey, what's going on?!?! This shouldn't work\n"); +catch + printf("Good.\n"); +end_try_catch + + +printf("\nI'm going to try and update a structure variable.\n"); + +example.cvar.pt = example.cvar.ptptr; + +printf("The new value is %s\n", example.Point_print(example.cvar.pt)); + + + |