Initial commit

This commit is contained in:
Bassem Girgis
2018-12-20 17:34:07 -06:00
parent 7a2d899662
commit 81b4b9e273
34743 changed files with 5940233 additions and 0 deletions

View File

@@ -0,0 +1,22 @@
TOP = ../..
SWIGEXE = $(TOP)/../swig
SWIG_LIB_DIR = $(TOP)/../$(TOP_BUILDDIR_TO_TOP_SRCDIR)Lib
SRCS =
TARGET = example
INTERFACE = example.i
check: build
$(MAKE) -f $(TOP)/Makefile SRCDIR='$(SRCDIR)' python_run
build:
$(MAKE) -f $(TOP)/Makefile SRCDIR='$(SRCDIR)' SRCS='$(SRCS)' \
SWIG_LIB_DIR='$(SWIG_LIB_DIR)' SWIGEXE='$(SWIGEXE)' \
TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' python
static:
$(MAKE) -f $(TOP)/Makefile SRCDIR='$(SRCDIR)' SRCS='$(SRCS)' \
SWIG_LIB_DIR='$(SWIG_LIB_DIR)' SWIGEXE='$(SWIGEXE)' \
TARGET='mypython' INTERFACE='$(INTERFACE)' python_static
clean:
$(MAKE) -f $(TOP)/Makefile SRCDIR='$(SRCDIR)' TARGET='$(TARGET)' python_clean

View File

@@ -0,0 +1,69 @@
/* File : example.i */
%module example
%{
#include <stdarg.h>
%}
/* This example illustrates SWIG's handling of varargs functions.
By default, variable length arguments are simply ignored. This
is generally appropriate for wrapping I/O functions like printf.
You can simply format a string in the scripting language, and
pass it directly */
int printf(const char *fmt, ...);
/* Since passing a format string might be dangerous. Here is a slightly
different way of wrapping a printf style function */
#if 1
/* Replace ... with char *. */
%varargs(char *) fprintf;
/* Ignore the format string, but set it to %s */
%typemap(in,numinputs=0) const char *fmt {
$1 = "%s";
}
#else
/* An alternative approach using typemaps */
%typemap(in) (const char *fmt, ...) {
$1 = "%s";
$2 = (void *) PyString_AsString($input);
}
#endif
int fprintf(FILE *, const char *fmt, ...);
/* Here is somewhat different example. A variable length argument
function that takes a NULL-terminated list of arguments. We
can use a slightly different form of %varargs that specifies
a default value and a maximum number of arguments.
*/
/* Maximum of 20 arguments with default value NULL */
%varargs(20, char *x = NULL) printv;
%inline %{
/* In Python 2 we could use PyFile_AsFile for converting Python sys.stdout to C's stdout.
This API disappeared in Python 3, so instead we use a helper function to get stdout */
FILE * stdout_stream(void) {
return stdout;
}
void printv(char *s, ...) {
va_list ap;
char *x;
fputs(s,stdout);
fputc(' ',stdout);
va_start(ap, s);
while ((x = va_arg(ap, char *))) {
fputs(x,stdout);
fputc(' ',stdout);
}
va_end(ap);
fputc('\n',stdout);
}
%}

View File

@@ -0,0 +1,27 @@
# file: runme.py
import sys
import example
# Call printf
example.printf("Hello World. I'm printf\n")
# Note: We call printf, but use *python* string formatting
for i in range(0, 10):
example.printf("i is %d\n" % i)
# This will probably be garbled because %d is interpreted by C
example.printf("The value is %d\n")
stdout = example.stdout_stream()
# Call fprintf
example.fprintf(stdout, "Hello World. I'm fprintf\n")
for i in range(0, 10):
example.fprintf(stdout, "i is %d\n" % i)
# This won't be garbled since %d is not interpreted
example.fprintf(stdout, "The value is %d\n")
# This function calls our NULL-terminated function
example.printv("Hello", "World", "this", "is", "a", "test.")