diff options
Diffstat (limited to 'examples/box-module')
-rw-r--r-- | examples/box-module/.cvsignore | 3 | ||||
-rw-r--r-- | examples/box-module/Makefile.am | 36 | ||||
-rw-r--r-- | examples/box-module/README | 56 | ||||
-rw-r--r-- | examples/box-module/box.c | 160 | ||||
-rwxr-xr-x | examples/box-module/check.test | 38 |
5 files changed, 0 insertions, 293 deletions
diff --git a/examples/box-module/.cvsignore b/examples/box-module/.cvsignore deleted file mode 100644 index 051d1bd50..000000000 --- a/examples/box-module/.cvsignore +++ /dev/null @@ -1,3 +0,0 @@ -Makefile -Makefile.in -.deps diff --git a/examples/box-module/Makefile.am b/examples/box-module/Makefile.am deleted file mode 100644 index 3fe82e7cd..000000000 --- a/examples/box-module/Makefile.am +++ /dev/null @@ -1,36 +0,0 @@ -## Process this file with Automake to create Makefile.in -## -## Copyright (C) 2001 Free Software Foundation, Inc. -## -## This file is part of GUILE. -## -## GUILE 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. -## -## GUILE 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 GUILE; see the file COPYING. If not, write -## to the Free Software Foundation, Inc., 59 Temple Place, Suite -## 330, Boston, MA 02111-1307 USA - -EXTRA_DIST = README box.c check.test - -CFLAGS=`$(bindir)/guile-config compile` -LIBS=`$(bindir)/guile-config link` - -box: box.o - $(CC) $< $(LIBS) -o box - -box.o: box.c - $(CC) $(CFLAGS) -c $< - -installcheck: box - LD_LIBRARY_PATH=$(libdir) GUILE_LOAD_PATH=$(top_srcdir) $(srcdir)/check.test - -CLEANFILES=box box.o diff --git a/examples/box-module/README b/examples/box-module/README deleted file mode 100644 index e1f1cd7af..000000000 --- a/examples/box-module/README +++ /dev/null @@ -1,56 +0,0 @@ - -*- outline -*- - -* Overview - -This directory includes an example program for extending Guile with a -new (and even useful) data type. - -The `box' program created by this example is nearly identical to the -one produced in directory ../box, with one (important) difference: The -interpreter in this directory will place all defined primitive -procedures in a module called (box-module). That means that this -module must be used before the primitives can be accessed. - - -* Build Instructions - -To build the example, simply type - - make box - -in this directory. - -The resulting `box' program is a Guile interpreter which has one -additional data type called `box'. - - -* The Box Data Type - -A box is simply an object for storing one other object in. It can be -used for passing parameters by reference, for example. You simply -store an object into a box, pass it to another procedure which can -store a new object into it and thus return a value via the box. - - -** Usage - -Box objects are created with `make-box', set with `box-set!' and -examined with `box-ref'. Note that these procedures are placed in a -module called (box-module) and can thus only be accessed after using -this module. See the following example session for usage details: - - -** Example Session - -$ ./box -guile> (use-modules (box-module)) -guile> (define b (make-box)) -guile> b -#<box #f> -guile> (box-set! b '(list of values)) -guile> b -#<box (list of values)> -guile> (box-ref b) -(list of values) -guile> (quit) -$ diff --git a/examples/box-module/box.c b/examples/box-module/box.c deleted file mode 100644 index 90f6881dd..000000000 --- a/examples/box-module/box.c +++ /dev/null @@ -1,160 +0,0 @@ -/* examples/box-module/box.c - * - * Copyright (C) 1998,2001 Free Software Foundation, Inc. - * - * This program 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 program 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 software; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307 USA - */ - -/* Include all needed declarations. */ -#include <libguile.h> - - -/* The type code for the newly created smob type will be stored into - this variable. It has the prefix `scm_tc16_' to make it usable - with the SCM_VALIDATE_SMOB macro below. */ -static scm_t_bits scm_tc16_box; - - -/* This function is responsible for marking all SCM objects included - in the smob. */ -static SCM -mark_box (SCM b) -{ - /* Since we have only one SCM object to protect, we simply return it - and the caller will mark it. */ - return SCM_CELL_OBJECT_1 (b); -} - - -/* Print a textual represenation of the smob to a given port. */ -static int -print_box (SCM b, SCM port, scm_print_state *pstate) -{ - SCM value = SCM_CELL_OBJECT_1 (b); - - scm_puts ("#<box ", port); - scm_write (value, port); - scm_puts (">", port); - - /* Non-zero means success. */ - return 1; -} - - -/* This defines the primitve `make-box', which returns a new smob of - type `box', initialized to `#f'. */ -static SCM -#define FUNC_NAME "make-box" -make_box (void) -{ - /* This macro creates the new objects, stores the value `#f' into it - and returns it to the caller. */ - SCM_RETURN_NEWSMOB (scm_tc16_box, SCM_BOOL_F); -} -#undef FUNC_NAME - - -/* This is the primitive `box-ref' which returns the object stored in - the box. */ -static SCM -box_ref (SCM b) -#define FUNC_NAME "box-ref" -{ - /* First, we have to ensure that the user really gave us a box - objects. The macro SCM_VALIDATE_SMOB will do all what is needed. - The parameters are interpreted as follows: - - 1: The position of the checked variable in the parameter list. - b: The passed parameter. - box: Concatenated with the fixed prefix scm_tc16_, names the type - code for the expected smob type. */ - SCM_VALIDATE_SMOB (1, b, box); - - /* Fetch the object from the box and return it. */ - return SCM_CELL_OBJECT_1 (b); -} -#undef FUNC_NAME - - -/* Primitive which stores an arbitrary value into a box. */ -static SCM -box_set_x (SCM b, SCM value) -#define FUNC_NAME "box-set!" -{ - SCM_VALIDATE_SMOB (1, b, box); - - /* Set the cell number 1 of the smob to the given value. */ - SCM_SET_CELL_OBJECT_1 (b, value); - - /* When this constant is returned, the REPL will not print the - returned value. All procedures in Guile which are documented as - returning `and unspecified value' actually return this value. */ - return SCM_UNSPECIFIED; -} -#undef FUNC_NAME - - -/* Create and initialize the new smob type, and register the - primitives withe the interpreter library. - - This function must be declared a bit different from the example in - the ../box directory, because it will be called by - `scm_c_define_module', called from below. */ -static void -init_box_type (void * unused) -{ - scm_tc16_box = scm_make_smob_type ("box", 0); - scm_set_smob_mark (scm_tc16_box, mark_box); - scm_set_smob_print (scm_tc16_box, print_box); - - scm_c_define_gsubr ("make-box", 0, 0, 0, make_box); - scm_c_define_gsubr ("box-set!", 2, 0, 0, box_set_x); - scm_c_define_gsubr ("box-ref", 1, 0, 0, box_ref); - - /* This is new too: Since the procedures are now in a module, we - have to explicitly export them before they can be used. */ - scm_c_export ("make-box", "box-set!", "box-ref", NULL); -} - - -/* This is the function which gets called by scm_boot_guile after the - Guile library is completely initialized. */ -static void -inner_main (void *closure, int argc, char **argv) -{ - /* Unlike the example in ../box, init_box_type is not called - directly, but by scm_c_define_module, which will create a module - named (box-module) and make this module current while called - init_box_type, thus placing the definitions into that module. */ - scm_c_define_module ("box-module", init_box_type, NULL); - - /* ... then we start a shell, in which the box data type can be - used (after using the module (box-module)). */ - scm_shell (argc, argv); -} - - -/* Main program. */ -int -main (int argc, char **argv) -{ - /* Initialize Guile, then call `inner_main' with the arguments 0, - argc and argv. */ - scm_boot_guile (argc, argv, inner_main, 0); - return 0; /* Never reached. */ -} - -/* End of file. */ diff --git a/examples/box-module/check.test b/examples/box-module/check.test deleted file mode 100755 index 28a79d45b..000000000 --- a/examples/box-module/check.test +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/sh - -# must be run from this directory -guile=${GUILE-../../libguile/guile} - -set -e - -# -# ./box test #1 -# -./box -c '(begin (use-modules (box-module)) (let ((b (make-box))) (display b) (newline)))' > TMP -cat <<EOF | diff -u - TMP -#<box #f> -EOF -rm -f TMP - -# -# ./box test #2 -# -./box -c '(begin (use-modules (box-module)) (let ((b (make-box))) (display b) (newline) (box-set! b 1) (display b) (newline)))' > TMP -cat <<EOF | diff -u - TMP -#<box #f> -#<box 1> -EOF -rm -f TMP - -# -# ./box test #3 -# -./box -c '(begin (use-modules (box-module)) (let ((b (make-box))) (display b) (newline) (box-set! b 1) (display b) (newline) (display (box-ref b)) (newline)))' > TMP -cat <<EOF | diff -u - TMP -#<box #f> -#<box 1> -1 -EOF -rm -f TMP - -# check.test ends here |