guile-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

guile/guile-core/doc ChangeLog data-rep.texi de...


From: Martin Grabmueller
Subject: guile/guile-core/doc ChangeLog data-rep.texi de...
Date: Wed, 30 May 2001 13:32:06 -0700

CVSROOT:        /cvs
Module name:    guile
Changes by:     Martin Grabmueller <address@hidden>     01/05/30 13:32:06

Modified files:
        guile-core/doc : ChangeLog data-rep.texi deprecated.texi 
                         indices.texi intro.texi scheme-data.texi 
                         scheme-io.texi scheme-reading.texi scripts.texi 
                         srfi-modules.texi 

Log message:
        * General: A lot of typo, texinfo markup and layout corrections.
        
        * scheme-data.texi (Arithmetic): Clarified docs for - and /.
        (String Modification): Removed docs for C functions
        (scm_substring_move_right_x etc.)
        (Keyword Procedures): New section documenting the keyword
        procedures from boot-9.scm.
        (Vectors): Moved the section before the non-standard data types.
        
        * data-rep.texi (Defining New Types (Smobs)): Adapted description
        of smobs and proocedure creation to new terminology.
        (Describing a New Type): Removed mentioning of
        scm_make_smob_type_mfpe from smob function list and added
        deprecation notice for this function.
        (Creating Instances): Added description and macro docs for smobs
        with 2 or 3 data cells.
        (Garbage Collecting Smobs): Removed old docs for SCM_GCTYP16.
        (Garbage Collecting Simple Smobs): Added some clarification about
        usage and usefulness.
        (Non-immediate Datatypes): Changed R4RS reference to R5RS.
        (Vector Data): Document type-specific accessors.

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/guile/guile-core/doc/ChangeLog.diff?cvsroot=OldCVS&tr1=1.93&tr2=1.94&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/guile/guile-core/doc/data-rep.texi.diff?cvsroot=OldCVS&tr1=1.24&tr2=1.25&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/guile/guile-core/doc/deprecated.texi.diff?cvsroot=OldCVS&tr1=1.4&tr2=1.5&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/guile/guile-core/doc/indices.texi.diff?cvsroot=OldCVS&tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/guile/guile-core/doc/intro.texi.diff?cvsroot=OldCVS&tr1=1.10&tr2=1.11&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/guile/guile-core/doc/scheme-data.texi.diff?cvsroot=OldCVS&tr1=1.20&tr2=1.21&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/guile/guile-core/doc/scheme-io.texi.diff?cvsroot=OldCVS&tr1=1.14&tr2=1.15&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/guile/guile-core/doc/scheme-reading.texi.diff?cvsroot=OldCVS&tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/guile/guile-core/doc/scripts.texi.diff?cvsroot=OldCVS&tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/guile/guile-core/doc/srfi-modules.texi.diff?cvsroot=OldCVS&tr1=1.5&tr2=1.6&r1=text&r2=text

Patches:
Index: guile/guile-core/doc/ChangeLog
diff -u guile/guile-core/doc/ChangeLog:1.93 guile/guile-core/doc/ChangeLog:1.94
--- guile/guile-core/doc/ChangeLog:1.93 Wed May 23 10:24:49 2001
+++ guile/guile-core/doc/ChangeLog      Wed May 30 13:32:05 2001
@@ -1,3 +1,28 @@
+2001-05-30  Martin Grabmueller  <address@hidden>
+
+       * General: A lot of typo, texinfo markup and layout corrections.
+
+       * scheme-data.texi (Arithmetic): Clarified docs for - and /.
+       (String Modification): Removed docs for C functions
+       (scm_substring_move_right_x etc.)
+       (Keyword Procedures): New section documenting the keyword
+       procedures from boot-9.scm.
+       (Vectors): Moved the section before the non-standard data types.
+
+       * data-rep.texi (Defining New Types (Smobs)): Adapted description
+       of smobs and proocedure creation to new terminology.
+       (Describing a New Type): Removed mentioning of
+       scm_make_smob_type_mfpe from smob function list and added
+       deprecation notice for this function.
+       (Creating Instances): Added description and macro docs for smobs
+       with 2 or 3 data cells.
+       (Garbage Collecting Smobs): Removed old docs for SCM_GCTYP16.
+       (Garbage Collecting Simple Smobs): Added some clarification about
+       usage and usefulness.
+       (Non-immediate Datatypes): Changed R4RS reference to R5RS.
+       (Vector Data): Document type-specific accessors.
+
+
 2001-05-23  Martin Grabmueller  <address@hidden>
 
        * guile.texi: Commented out menu entry and inclusion of Tcl/Tk
Index: guile/guile-core/doc/data-rep.texi
diff -u guile/guile-core/doc/data-rep.texi:1.24 
guile/guile-core/doc/data-rep.texi:1.25
--- guile/guile-core/doc/data-rep.texi:1.24     Wed May 16 12:30:57 2001
+++ guile/guile-core/doc/data-rep.texi  Wed May 30 13:32:05 2001
@@ -46,7 +46,7 @@
 @c essay @sp 10
 @c essay @comment The title is printed in a large font.
 @c essay @title Data Representation in Guile
address@hidden essay @subtitle $Id: data-rep.texi,v 1.24 2001/05/16 19:30:57 
ossau Exp $
address@hidden essay @subtitle $Id: data-rep.texi,v 1.25 2001/05/30 20:32:05 
mgrabmue Exp $
 @c essay @subtitle For use with Guile @value{VERSION}
 @c essay @author Jim Blandy
 @c essay @author Free Software Foundation
@@ -730,7 +730,7 @@
 
 A non-immediate datatype is one which lives in the heap, either because
 it cannot fit entirely within a @code{SCM} word, or because it denotes a
-specific storage location (in the nomenclature of the Revised^4 Report
+specific storage location (in the nomenclature of the Revised^5 Report
 on Scheme).
 
 The @code{SCM_IMP} and @code{SCM_NIMP} macros will distinguish these
@@ -873,19 +873,22 @@
 Return non-zero iff @var{x} is a symbol.
 @end deftypefn
 
address@hidden Macro int SCM_LENGTH (SCM @var{x})
-Return the length of the object @var{x}.
-The result is undefined if @var{x} is not a vector, string, or symbol.
address@hidden Macro int SCM_VECTOR_LENGTH (SCM @var{x})
address@hidden Macro int SCM_STRING_LENGTH (SCM @var{x})
address@hidden Macro int SCM_SYMBOL_LENGTH (SCM @var{x})
+Return the length of the object @var{x}.  The result is undefined if
address@hidden is not a vector, string, or symbol, respectively.
 @end deftypefn
 
address@hidden Macro {SCM *} SCM_VELTS (SCM @var{x})
address@hidden Macro {SCM *} SCM_VECTOR_BASE (SCM @var{x})
 Return a pointer to the array of elements of the vector @var{x}.
 The result is undefined if @var{x} is not a vector.
 @end deftypefn
 
address@hidden Macro {char *} SCM_CHARS (SCM @var{x})
-Return a pointer to the characters of @var{x}.
-The result is undefined if @var{x} is not a symbol or a string.
address@hidden Macro {char *} SCM_STRING_CHARS (SCM @var{x})
address@hidden Macro {char *} SCM_SYMBOL_CHARS (SCM @var{x})
+Return a pointer to the characters of @var{x}.  The result is undefined
+if @var{x} is not a symbol or string, respectively.
 @end deftypefn
 
 There are also a few magic values stuffed into memory before a symbol's
@@ -1361,8 +1364,8 @@
 use.}  To define a new smob type, the programmer provides Guile with
 some essential information about the type --- how to print it, how to
 garbage collect it, and so on --- and Guile returns a fresh type tag for
-use in the @sc{car} of new cells.  The programmer can then use
address@hidden to make a set of C functions that create and
+use in the first word of new cells.  The programmer can then use
address@hidden to make a set of C functions that create and
 operate on these objects visible to Scheme code.
 
 (You can find a complete version of the example code used in this
@@ -1399,13 +1402,12 @@
 Guile will apply this function to each instance of the new type it could
 not find any live pointers to.  The function should release all
 resources held by the object and return the number of bytes released.
-This is analagous to the Java finalization method-- it is invoked at
-an unspecified time (when garbage collection occurs) after the object
-is dead.
-The default free function frees the smob data (if the size of the struct
-passed to @code{scm_make_smob_type} or @code{scm_make_smob_type_mfpe} is
-non-zero) using @code{scm_must_free} and returns the size of that
-struct.  @xref{Garbage Collecting Smobs}, for more details.
+This is analagous to the Java finalization method-- it is invoked at an
+unspecified time (when garbage collection occurs) after the object is
+dead.  The default free function frees the smob data (if the size of the
+struct passed to @code{scm_make_smob_type} is non-zero) using
address@hidden and returns the size of that struct.  @xref{Garbage
+Collecting Smobs}, for more details.
 
 @item print
 @c GJB:FIXME:: @var{exp} and @var{port} need to refer to a prototype of 
@@ -1414,9 +1416,9 @@
 the value, as for @code{display} or @code{write}.  The function should
 write a printed representation of @var{exp} on @var{port}, in accordance
 with the parameters in @var{pstate}.  (For more information on print
-states, see @ref{Port Data}.)  The default print function prints @code{#<NAME 
ADDRESS>} 
-where @code{NAME} is the first argument passed to @code{scm_make_smob_type} or 
address@hidden
+states, see @ref{Port Data}.)  The default print function prints
address@hidden<NAME ADDRESS>} where @code{NAME} is the first argument passed to
address@hidden
 
 @item equalp
 If Scheme code asks the @code{equal?} function to compare two instances
@@ -1430,7 +1432,7 @@
 
 To actually register the new smob type, call @code{scm_make_smob_type}:
 
address@hidden long scm_make_smob_type (const char *name, scm_sizet size)
address@hidden scm_bits_t scm_make_smob_type (const char *name, size_t size)
 This function implements the standard way of adding a new smob type,
 named @var{name}, with instance size @var{size}, to the system.  The
 return value is a tag that is used in creating instances of the type.
@@ -1449,35 +1451,39 @@
 only zero or one time per type, and the call should be placed
 immediately following the call to @code{scm_make_smob_type}.
 
address@hidden void scm_set_smob_mark (long tc, SCM (*mark) (SCM))
address@hidden void scm_set_smob_mark (scm_bits_t tc, SCM (*mark) (SCM))
 This function sets the smob marking procedure for the smob type specified by
 the tag @var{tc}. @var{tc} is the tag returned by @code{scm_make_smob_type}.
 @end deftypefun
 
address@hidden void scm_set_smob_free (long tc, scm_sizet (*free) (SCM))
address@hidden void scm_set_smob_free (scm_bits_t tc, size_t (*free) (SCM))
 This function sets the smob freeing procedure for the smob type specified by
 the tag @var{tc}. @var{tc} is the tag returned by @code{scm_make_smob_type}.
 @end deftypefun
 
address@hidden void scm_set_smob_print (long tc, int (*print) 
(SCM,SCM,scm_print_state*))
address@hidden void scm_set_smob_print (scm_bits_t tc, int (*print) (SCM, SCM, 
scm_print_state*))
 This function sets the smob printing procedure for the smob type specified by
 the tag @var{tc}. @var{tc} is the tag returned by @code{scm_make_smob_type}.
 @end deftypefun
 
address@hidden void scm_set_smob_equalp (long tc, SCM (*equalp) (SCM,SCM))
address@hidden void scm_set_smob_equalp (scm_bits_t tc, SCM (*equalp) (SCM, 
SCM))
 This function sets the smob equality-testing predicate for the smob type 
specified by
 the tag @var{tc}. @var{tc} is the tag returned by @code{scm_make_smob_type}.
 @end deftypefun
 
+In versions 1.4 and earlier, there was another way of creating smob
+types, using @code{scm_make_smob_type_mfpe}.  This function is now
+deprecated and will be removed in a future version of Guile.  You should
+use the mechanism described above for new code, and change old code not
+to use deprecated features.
+
 Instead of using @code{scm_make_smob_type} and calling each of the
 individual @code{scm_set_smob_XXX} functions to register each special
-function independently, you can use @code{scm_make_smob_type_mfpe} to
+function independently, you could use @code{scm_make_smob_type_mfpe} to
 register all of the special functions at once as you create the smob
address@hidden: There is an ongoing discussion among the developers which
-may result in deprecating @code{scm_make_smob_type_mfpe} in next release
-of Guile.}:
+type
 
address@hidden long scm_make_smob_type_mfpe(const char *name, scm_sizet size, 
SCM (*mark) (SCM), scm_sizet (*free) (SCM), int (*print) (SCM, SCM, 
scm_print_state*), SCM (*equalp) (SCM, SCM))
address@hidden long scm_make_smob_type_mfpe(const char *name, size_t size, SCM 
(*mark) (SCM), size_t (*free) (SCM), int (*print) (SCM, SCM, scm_print_state*), 
SCM (*equalp) (SCM, SCM))
 This function invokes @code{scm_make_smob_type} on its first two arguments
 to add a new smob type named @var{name}, with instance size @var{size} to the 
system.  
 It also registers the @var{mark}, @var{free}, @var{print}, @var{equalp} smob
@@ -1490,13 +1496,14 @@
 
 For example, here is how one might declare and register a new type
 representing eight-bit grayscale images:
+
 @example
 #include <libguile.h>
 
-static long image_tag;
+static scm_bits_t image_tag;
 
 void
-init_image_type ()
+init_image_type (void)
 @{
   image_tag = scm_make_smob_type ("image", sizeof (struct image));
   scm_set_smob_mark (image_tag, mark_image);
@@ -1508,35 +1515,45 @@
 
 @node Creating Instances
 @subsection Creating Instances
-
-Like other non-immediate types, smobs start with a cell whose @sc{car}
-contains typing information, and whose @code{cdr} is free for any use.  For 
smobs,
-the @code{cdr} stores a pointer to the internal C structure holding the 
-smob-specific data.
-To create an instance of a smob type following these standards, you should
-use @code{SCM_NEWSMOB}:
 
address@hidden Macro void SCM_NEWSMOB(SCM value,long tag,void *data)
+Like other non-immediate types, smobs start with a cell whose first word
+contains typing information, and whose remaining words are free for any
+use.  
+
+After the header word containing the type code, smobs can have either
+one, two or three additional words of data. These words store either a
+pointer to the internal C structure holding the smob-specific data, or
+the smob data itself.  To create an instance of a smob type following
+these standards, you should use @code{SCM_NEWSMOB}, @code{SCM_NEWSMOB2}
+or @code{SCM_NEWSMOB3}:@footnote{The @code{SCM_NEWSMOB2} and
address@hidden variants will allocate double cells and thus use
+twice as much memory as smobs created by @code{SCM_NEWSMOB}.}
+
address@hidden Macro void SCM_NEWSMOB(SCM value, scm_bits_t tag, void *data)
address@hidden Macro void SCM_NEWSMOB2(SCM value, scm_bits_t tag, void *data1, 
void *data2)
address@hidden Macro void SCM_NEWSMOB3(SCM value, scm_bits_t tag, void *data1, 
void *data2, void *data3)
 Make @var{value} contain a smob instance of the type with tag @var{tag}
-and smob data @var{data}.  @var{value} must be previously declared
-as C type @code{SCM}.
+and smob data @var{data} (or @var{data1}, @var{data2}, and @var{data3}).
address@hidden must be previously declared as C type @code{SCM}.
 @end deftypefn
 
 Since it is often the case (e.g., in smob constructors) that you will
 create a smob instance and return it, there is also a slightly specialized
 macro for this situation:
 
address@hidden Macro fn_returns SCM_RETURN_NEWSMOB(long tab, void *data)
address@hidden Macro fn_returns SCM_RETURN_NEWSMOB(scm_bits_t tag, void *data)
address@hidden Macro fn_returns SCM_RETURN_NEWSMOB2(scm_bits_t tag, void 
*data1, void *data2)
address@hidden Macro fn_returns SCM_RETURN_NEWSMOB3(scm_bits_t tag, void 
*data1, void *data2, void *data3)
 This macro expands to a block of code that creates a smob instance of
-the type with tag @var{tag} and smob data @var{data}, and returns
-that @code{SCM} value.  It should be the last piece of code in 
-a block.
+the type with tag @var{tag} and smob data @var{data} (or @var{data1},
address@hidden, and @var{data3}), and returns that @code{SCM} value.  It
+should be the last piece of code in a block.
 @end deftypefn
 
 Guile provides the following functions for managing memory, which are
 often helpful when implementing smobs:
 
address@hidden {char *} scm_must_malloc (long @var{len}, char address@hidden)
address@hidden {char *} scm_must_malloc (size_t @var{len}, char address@hidden)
 Allocate @var{len} bytes of memory, using @code{malloc}, and return a
 pointer to them.
 
@@ -1547,7 +1564,7 @@
 This function also helps maintain statistics about the size of the heap.
 @end deftypefun
 
address@hidden {char *} scm_must_realloc (char address@hidden, long @var{olen}, 
long @var{len}, char address@hidden)
address@hidden {char *} scm_must_realloc (char address@hidden, size_t 
@var{olen}, size_t @var{len}, char address@hidden)
 Resize (and possibly relocate) the block of memory at @var{addr}, to
 have a size of @var{len} bytes, by calling @code{realloc}.  Return a
 pointer to the new block.
@@ -1625,7 +1642,7 @@
 their arguments, to avoid misinterpreting some other datatype as a smob,
 and perhaps causing a segmentation fault.  Fortunately, this is pretty
 simple to do.  The function need only verify that its argument is a
-non-immediate, whose @sc{car} is the type tag returned by
+non-immediate, whose first word is the type tag returned by
 @code{scm_make_smob_type}.
 
 For example, here is a simple function that operates on an image smob,
@@ -1633,6 +1650,7 @@
 version of the @code{init_image_type} function, to make
 @code{clear_image} and the image constructor function @code{make_image}
 visible to Scheme code.
+
 @example
 SCM
 clear_image (SCM image_smob)
@@ -1656,24 +1674,21 @@
 
 
 void
-init_image_type ()
+init_image_type (void)
 @{
   image_tag = scm_make_smob_type ("image", sizeof (struct image));
   scm_set_smob_mark (image_tag, mark_image);
   scm_set_smob_free (image_tag, free_image);
   scm_set_smob_print (image_tag, print_image);
 
-  scm_make_gsubr ("clear-image", 1, 0, 0, clear_image);
-  scm_make_gsubr ("make-image", 3, 0, 0, make_image);
+  scm_c_define_gsubr ("clear-image", 1, 0, 0, clear_image);
+  scm_c_define_gsubr ("make-image", 3, 0, 0, make_image);
 @}
 @end example
 
-Note that checking types is a little more complicated during garbage
-collection; see the description of @code{SCM_GCTYP16} in @ref{Garbage
-Collecting Smobs}.
-
 @c GJB:FIXME:: should talk about guile-snarf somewhere!
 
+
 @node Garbage Collecting Smobs
 @subsection Garbage Collecting Smobs
 
@@ -1695,12 +1710,12 @@
 during which the collector marks live objects, and the @dfn{sweep
 phase}, during which the collector frees all unmarked objects.
 
-The mark bit of a smob lives in its @sc{car}, along with the smob's type
-tag.  When the collector encounters a smob, it sets the smob's mark bit,
-and uses the smob's type tag to find the appropriate @code{mark}
-function for that smob: the one listed in that smob's
address@hidden structure.  It then calls the @code{mark} function,
-passing it the smob as its only argument.
+The mark bit of a smob lives in a special memory region.  When the
+collector encounters a smob, it sets the smob's mark bit, and uses the
+smob's type tag to find the appropriate @code{mark} function for that
+smob: the one listed in that smob's @code{scm_smobfuns} structure.  It
+then calls the @code{mark} function, passing it the smob as its only
+argument.
 
 The @code{mark} function is responsible for marking any other Scheme
 objects the smob refers to.  If it does not do so, the objects' mark
@@ -1719,6 +1734,7 @@
 
 Thus, here is how we might write the @code{mark} function for the image
 smob type discussed above:
+
 @example
 @group
 SCM
@@ -1768,18 +1784,18 @@
 The @code{free} function must release any resources used by the smob.
 However, it need not free objects managed by the collector; the
 collector will take care of them.  The return type of the @code{free}
-function should be @code{scm_sizet}, an unsigned integral type; the
+function should be @code{size_t}, an unsigned integral type; the
 @code{free} function should return the number of bytes released, to help
 the collector maintain statistics on the size of the heap.
 
 Here is how we might write the @code{free} function for the image smob
 type:
 @example
-scm_sizet
+size_t
 free_image (SCM image_smob)
 @{
   struct image *image = (struct image *) SCM_SMOB_DATA (image_smob);
-  scm_sizet size = image->width * image->height + sizeof (*image);
+  size_t size = image->width * image->height + sizeof (*image);
 
   free (image->pixels);
   free (image);
@@ -1795,20 +1811,6 @@
 There is no way for smob code to be notified when collection is
 complete.
 
-Note that, since a smob's mark bit lives in its @sc{car}, along with the
-smob's type tag, the technique for checking the type of a smob described
-in @ref{Typechecking} will not necessarily work during GC.  If you need
-to find out whether a given object is a particular smob type during GC,
-use the following macro:
-
address@hidden Macro void SCM_GCTYP16 (SCM @var{x})
-Return the type bits of the smob @var{x}, with the mark bit clear.
-
-Use this macro instead of @code{SCM_CAR} to check the type of a smob
-during GC.  Usually, only code called by the smob's @code{mark} function
-need worry about this.
address@hidden deftypefn
-
 It is usually a good idea to minimize the amount of processing done
 during garbage collection; keep @code{mark} and @code{free} functions
 very simple.  Since collections occur at unpredictable times, it is easy
@@ -1844,19 +1846,19 @@
 
   /* THESE TWO LINES HAVE CHANGED: */
   image->name = scm_string_copy (name);
-  image->update_func = scm_make_gsubr (@dots{});
+  image->update_func = scm_c_define_gsubr (@dots{});
 
   SCM_NEWCELL (image_smob);
-  SCM_SETCDR (image_smob, image);
-  SCM_SETCAR (image_smob, image_tag);
+  SCM_SET_CELL_WORD_1 (image_smob, image);
+  SCM_SET_CELL_TYPE (image_smob, image_tag);
 
   return image_smob;
 @}
 @end example
 
 This code is incorrect.  The calls to @code{scm_string_copy} and
address@hidden allocate fresh objects.  Allocating any new object
-may cause the garbage collector to run.  If @code{scm_make_gsubr}
address@hidden allocate fresh objects.  Allocating any new object
+may cause the garbage collector to run.  If @code{scm_c_define_gsubr}
 invokes a collection, the garbage collector has no way to discover that
 @code{image->name} points to the new string object; the @code{image}
 structure is not yet part of any Scheme object, so the garbage collector
@@ -1865,16 +1867,17 @@
 @code{image} pointing to a dead object.
 
 A correct implementation might say, instead:
+
 @example
   image->name = SCM_BOOL_F;
   image->update_func = SCM_BOOL_F;
 
   SCM_NEWCELL (image_smob);
-  SCM_SETCDR (image_smob, image);
-  SCM_SETCAR (image_smob, image_tag);
+  SCM_SET_CELL_WORD_1 (image_smob, image);
+  SCM_SET_CELL_TYPE (image_smob, image_tag);
 
   image->name = scm_string_copy (name);
-  image->update_func = scm_make_gsubr (@dots{});
+  image->update_func = scm_c_define_gsubr (@dots{});
 
   return image_smob;
 @end example
@@ -1890,10 +1893,10 @@
 @subsection Garbage Collecting Simple Smobs
 
 It is often useful to define very simple smob types --- smobs which have
-no data to mark, other than the cell itself, or smobs whose @sc{cdr} is
-simply an ordinary Scheme object, to be marked recursively.  Guile
-provides some functions to handle these common cases; you can use these
-functions as your smob type's @code{mark} function, if your smob's
+no data to mark, other than the cell itself, or smobs whose first data
+word is simply an ordinary Scheme object, to be marked recursively.
+Guile provides some functions to handle these common cases; you can use
+this function as your smob type's @code{mark} function, if your smob's
 structure is simple enough.
 
 If the smob refers to no other Scheme objects, then no action is
@@ -1901,16 +1904,22 @@
 itself.  In that case, you can use zero as your mark function.
 
 @deftypefun SCM scm_markcdr (SCM @var{x})
-Mark the references in the smob @var{x}, assuming that @var{x}'s
address@hidden contains an ordinary Scheme object, and @var{x} refers to no
-other objects.  This function simply returns @var{x}'s @sc{cdr}.
+Mark the references in the smob @var{x}, assuming that @var{x}'s first
+data word contains an ordinary Scheme object, and @var{x} refers to no
+other objects.  This function simply returns @var{x}'s first data word.
+
+This is only useful for simple smobs created by @code{SCM_NEWSMOB} or
address@hidden, not for smobs allocated as double cells.
 @end deftypefun
 
address@hidden scm_sizet scm_free0 (SCM @var{x})
address@hidden size_t scm_free0 (SCM @var{x})
 Do nothing; return zero.  This function is appropriate for smobs that
 use either zero or @code{scm_markcdr} as their marking functions, and
 refer to no heap storage, including memory managed by @code{malloc},
 other than the smob's header cell.
+
+This function should not be needed anymore, because simply passing
address@hidden as the free function does the same.
 @end deftypefun
 
 
@@ -1933,7 +1942,7 @@
 #include <stdlib.h>
 #include <libguile.h>
 
-static long image_tag;
+static scm_bits_t image_tag;
 
 struct image @{
   int width, height;
@@ -2001,11 +2010,11 @@
   return image->update_func;
 @}
 
-static scm_sizet
+static size_t
 free_image (SCM image_smob)
 @{
   struct image *image = (struct image *) SCM_SMOB_DATA (image_smob);
-  scm_sizet size = image->width * image->height + sizeof (struct image);
+  size_t size = image->width * image->height + sizeof (struct image);
 
   free (image->pixels);
   free (image);
@@ -2027,15 +2036,15 @@
 @}
 
 void
-init_image_type ()
+init_image_type (void)
 @{
   image_tag = scm_make_smob_type ("image", sizeof (struct image));
   scm_set_smob_mark (image_tag, mark_image);
   scm_set_smob_free (image_tag, free_image);
   scm_set_smob_print (image_tag, print_image);
 
-  scm_make_gsubr ("clear-image", 1, 0, 0, clear_image);
-  scm_make_gsubr ("make-image", 3, 0, 0, make_image);
+  scm_c_define_gsubr ("clear-image", 1, 0, 0, clear_image);
+  scm_c_define_gsubr ("make-image", 3, 0, 0, make_image);
 @}
 @end example
 
Index: guile/guile-core/doc/deprecated.texi
diff -u guile/guile-core/doc/deprecated.texi:1.4 
guile/guile-core/doc/deprecated.texi:1.5
--- guile/guile-core/doc/deprecated.texi:1.4    Sun Apr 29 16:01:07 2001
+++ guile/guile-core/doc/deprecated.texi        Wed May 30 13:32:05 2001
@@ -1,3 +1,4 @@
address@hidden
 @node Deprecated
 @chapter Deprecated
 
Index: guile/guile-core/doc/indices.texi
diff -u guile/guile-core/doc/indices.texi:1.2 
guile/guile-core/doc/indices.texi:1.3
--- guile/guile-core/doc/indices.texi:1.2       Wed May 23 10:24:49 2001
+++ guile/guile-core/doc/indices.texi   Wed May 30 13:32:05 2001
@@ -7,6 +7,7 @@
 @printindex cp
 
 
address@hidden
 @node Procedure Index
 @unnumbered Procedure Index
 
@@ -22,6 +23,7 @@
 @printindex fn
 
 
address@hidden
 @node Variable Index
 @unnumbered Variable Index
 
@@ -38,6 +40,7 @@
 @printindex vr
 
 
address@hidden
 @c Spell out this node fully, because it is the last real node
 @c in the top-level menu.  Leaving off the pointers here causes
 @c spurious makeinfo errors.
Index: guile/guile-core/doc/intro.texi
diff -u guile/guile-core/doc/intro.texi:1.10 
guile/guile-core/doc/intro.texi:1.11
--- guile/guile-core/doc/intro.texi:1.10        Wed May 23 10:24:49 2001
+++ guile/guile-core/doc/intro.texi     Wed May 30 13:32:05 2001
@@ -1,4 +1,4 @@
address@hidden $Id: intro.texi,v 1.10 2001/05/23 17:24:49 mgrabmue Exp $
address@hidden $Id: intro.texi,v 1.11 2001/05/30 20:32:05 mgrabmue Exp $
 
 @page
 @node What is Guile?
@@ -49,7 +49,6 @@
 can program applications which use Guile in the language of their
 choice, rather than having the tastes of the application's author
 imposed on them.
-
 
 @page
 @node Whirlwind Tour
Index: guile/guile-core/doc/scheme-data.texi
diff -u guile/guile-core/doc/scheme-data.texi:1.20 
guile/guile-core/doc/scheme-data.texi:1.21
--- guile/guile-core/doc/scheme-data.texi:1.20  Wed May 23 17:50:42 2001
+++ guile/guile-core/doc/scheme-data.texi       Wed May 30 13:32:05 2001
@@ -51,11 +51,11 @@
 * Keywords::                    Self-quoting, customizable display keywords.
 * Pairs::                       Scheme's basic building block.
 * Lists::                       Special list functions supported by Guile.
+* Vectors::                     One-dimensional arrays of Scheme objects.
 * Records::                     
 * Structures::                  
 * Arrays::                      Arrays of values.
 * Association Lists and Hash Tables::  Dictionary data types.
-* Vectors::                     One-dimensional arrays of Scheme objects.
 * Hooks::                       User-customizable event lists.
 * Other Data Types::            Data types that are documented elsewhere.
 @end menu
@@ -681,8 +681,9 @@
 
 @c begin (texi-doc-string "guile" "-")
 @deffn primitive - z1 z2 @dots{}
-If called without arguments, 0 is returned. Otherwise the sum of all but
-the first argument are subtracted from the first argument.
+If called with one argument @var{z1}, address@hidden is returned. Otherwise
+the sum of all but the first argument are subtracted from the first
+argument.
 @end deffn
 
 @c begin (texi-doc-string "guile" "*")
@@ -693,7 +694,8 @@
 
 @c begin (texi-doc-string "guile" "/")
 @deffn primitive / z1 z2 @dots{}
-Divide the first argument by the product of the remaining arguments.
+Divide the first argument by the product of the remaining arguments.  If
+called with one argument @var{z1}, 1/@var{z1} is returned.
 @end deffn
 
 @c begin (texi-doc-string "guile" "abs")
@@ -734,66 +736,66 @@
 
 @node Scientific
 @subsection Scientific Functions
address@hidden exp
address@hidden log
address@hidden sin
address@hidden cos
address@hidden tan
address@hidden asin
address@hidden acos
address@hidden atan
address@hidden sqrt
address@hidden expt
 
 The following procedures accept any kind of number as arguments,
 including complex numbers.
 
address@hidden sqrt
 @c begin (texi-doc-string "guile" "sqrt")
 @deffn procedure sqrt z
 Return the square root of @var{z}.
 @end deffn
 
address@hidden expt
 @c begin (texi-doc-string "guile" "expt")
 @deffn procedure expt z1 z2
 Return @var{z1} raised to the power of @var{z2}.
 @end deffn
 
address@hidden sin
 @c begin (texi-doc-string "guile" "sin")
 @deffn procedure sin z
 Return the sine of @var{z}.
 @end deffn
 
address@hidden cos
 @c begin (texi-doc-string "guile" "cos")
 @deffn procedure cos z
 Return the cosine of @var{z}.
 @end deffn
 
address@hidden tan
 @c begin (texi-doc-string "guile" "tan")
 @deffn procedure tan z
 Return the tangent of @var{z}.
 @end deffn
 
address@hidden asin
 @c begin (texi-doc-string "guile" "asin")
 @deffn procedure asin z
 Return the arcsine of @var{z}.
 @end deffn
 
address@hidden acos
 @c begin (texi-doc-string "guile" "acos")
 @deffn procedure acos z
 Return the arccosine of @var{z}.
 @end deffn
 
address@hidden atan
 @c begin (texi-doc-string "guile" "atan")
 @deffn procedure atan z
 Return the arctangent of @var{z}.
 @end deffn
 
address@hidden exp
 @c begin (texi-doc-string "guile" "exp")
 @deffn procedure exp z
 Return e to the power of @var{z}, where e is the base of natural
 logarithms (address@hidden).
 @end deffn
 
address@hidden log
 @c begin (texi-doc-string "guile" "log")
 @deffn procedure log z
 Return the natural logarithm of @var{z}.
@@ -1197,19 +1199,19 @@
 
 @itemize @bullet
 @item
-#\space, #\sp
address@hidden, @code{#\sp}
 @item
-#\newline, #\nl
address@hidden, @code{#\nl}
 @item
-#\tab, #\ht
address@hidden, @code{#\ht}
 @item
-#\backspace, #\bs
address@hidden, @code{#\bs}
 @item
-#\return, #\cr
address@hidden, @code{#\cr}
 @item
-#\page, #\np
address@hidden, @code{#\np}
 @item
-#\null, #\nul
address@hidden, @code{#\nul}
 @end itemize
 
 @rnindex char?
@@ -1555,16 +1557,6 @@
 @code{substring-move-right!} when moving text from left to right, and
 @code{substring-move-left!}  otherwise.  If @code{str1} and @samp{str2}
 are different strings, it does not matter which function you use.
address@hidden deffn
-
address@hidden primitive substring-move-left! str1 start1 end1 str2 start2
address@hidden deffn
address@hidden {C Function} SCM scm_substring_move_left_x (SCM @var{str1}, SCM 
@var{start1}, SCM @var{end1}, SCM @var{str2}, SCM @var{start2})
address@hidden:} this is only valid if you've applied the strop patch].
-
-Moves a substring of @var{str1}, from @var{start1} to @var{end1}
-(@var{end1} is exclusive), into @var{str2}, starting at
address@hidden Allows overlapping strings.
 
 @example
 (define x (make-string 10 #\a))
@@ -1585,18 +1577,7 @@
 (substring-move-left! y 2 5 y 3)
 y
 @result{} "abccccg"
address@hidden example
address@hidden deftypefn
-
address@hidden substring-move-right! str1 start1 end1 str2 start2
address@hidden deffn
address@hidden {C Function} SCM scm_substring_move_right_x (SCM @var{str1}, SCM 
@var{start1}, SCM @var{end1}, SCM @var{str2}, SCM @var{start2})
address@hidden:} this is only valid if you've applied the strop patch, if
-it hasn't made it into the guile tree].
 
-Does much the same thing as @code{substring-move-left!}, except it
-starts moving at the end of the sequence, rather than the beginning.
address@hidden
 (define y "abcdefg")
 (substring-move-right! y 2 5 y 0)
 y
@@ -1607,7 +1588,7 @@
 y
 @result{} "abccdeg"
 @end example
address@hidden deftypefn
address@hidden deffn
 
 
 @node String Comparison
@@ -1797,16 +1778,16 @@
 form a longer result string.
 
 @rnindex string-append
address@hidden primitive string-append . args
address@hidden primitive string-append  string1 @dots{}
 Return a newly allocated string whose characters form the
-concatenation of the given strings, @var{args}.
+concatenation of the given strings.
 @end deffn
 
 
 @node String Miscellanea
 @subsection String Miscellanea
 
-This section contains several remaining string procedures.
+This section contains all remaining string procedures.
 
 @deffn primitive string-ci->symbol str
 Return the symbol whose name is @var{str}.  @var{str} is
@@ -2598,7 +2579,8 @@
 * Why Use Keywords?::           Motivation for keyword usage.
 * Coding With Keywords::        How to use keywords.
 * Keyword Read Syntax::         Read syntax for keywords.
-* Keyword Primitives::          Procedures for dealing with keywords.
+* Keyword Procedures::          Procedures for dealing with keywords.
+* Keyword Primitives::          The underlying primitive procedures.
 @end menu
 
 @node Why Use Keywords?
@@ -2764,6 +2746,23 @@
 ABORT: (unbound-variable)
 @end smalllisp
 
address@hidden Keyword Procedures
address@hidden Keyword Procedures
+
address@hidden FIXME::martin: Review me!
+
+The following procedures can be used for converting symbols to keywords
+and back.
+
address@hidden procedure symbol->keyword sym
+Return a keyword with the same characters as in @var{sym}.
address@hidden deffn
+
address@hidden procedure keyword->symbol kw
+Return a symbol with the same characters as in @var{kw}.
address@hidden deffn
+
+
 @node Keyword Primitives
 @subsection Keyword Primitives
 
@@ -2794,7 +2793,6 @@
 This is the inverse of @code{make-keyword-from-dash-symbol}.
 @end deffn
 
-
 @node Pairs
 @section Pairs
 
@@ -3295,6 +3293,144 @@
 @end deffn
 
 
address@hidden Vectors
address@hidden Vectors
+
address@hidden FIXME::martin: Review me!
+
address@hidden FIXME::martin: Should the subsections of this section be nodes
address@hidden of their own, or are the resulting nodes too short, then?
+
+Vectors are sequences of Scheme objects.  Unlike lists, the length of a
+vector, once the vector is created, cannot be changed.  The advantage of
+vectors over lists is that the time required to access one element of a
+vector is constant, whereas lists have an access time linear to the
+index of the accessed element in the list.
+
+Note that the vectors documented in this section can contain any kind of
+Scheme object, it is even possible to have different types of objects in
+the same vector.
+
address@hidden Vector Read Syntax
+
+Vectors can literally be entered in source code, just like strings,
+characters or some of the other data types.  The read syntax for vectors
+is as follows: A sharp sign (@code{#}), followed by an opening
+parentheses, all elements of the vector in their respective read syntax,
+and finally a closing parentheses.  The following are examples of the
+read syntax for vectors; where the first vector only contains numbers
+and the second three different object types: a string, a symbol and a
+number in hexidecimal notation.
+
address@hidden
+#(1 2 3)
+#("Hello" foo #xdeadbeef)
address@hidden lisp
+
address@hidden Vector Predicates
+
address@hidden vector?
address@hidden primitive vector? obj
+Return @code{#t} if @var{obj} is a vector, otherwise return
address@hidden
address@hidden deffn
+
address@hidden Vector Constructors
+
address@hidden make-vector
address@hidden primitive make-vector k [fill]
+Return a newly allocated vector of @var{k} elements.  If a
+second argument is given, then each element is initialized to
address@hidden  Otherwise the initial contents of each element is
+unspecified.
address@hidden deffn
+
address@hidden vector
address@hidden list->vector
address@hidden primitive vector . l
address@hidden primitive list->vector l
+Return a newly allocated vector whose elements contain the
+given arguments.  Analogous to @code{list}.
+
address@hidden
+(vector 'a 'b 'c) @result{} #(a b c)
address@hidden lisp
address@hidden deffn
+
address@hidden vector->list
address@hidden primitive vector->list v
+Return a newly allocated list of the objects contained in the
+elements of @var{vector}.
+
address@hidden
+(vector->list '#(dah dah didah)) @result{}  (dah dah didah)
+(list->vector '(dididit dah)) @result{}  #(dididit dah)
address@hidden lisp
address@hidden deffn
+
address@hidden Vector Modification
+
+A vector created by any of the vector constructor procedures
+(@pxref{Vectors}) documented above can be modified using the
+following procedures.
+
+According to R5RS, using any of these procedures on literally entered
+vectors is an error, because these vectors are considered to be
+constant, although Guile currently does not detect this error.
+
address@hidden vector-set!
address@hidden primitive vector-set! vector k obj
address@hidden must be a valid index of @var{vector}.
address@hidden stores @var{obj} in element @var{k} of @var{vector}.
+The value returned by @samp{vector-set!} is unspecified.
address@hidden
+(let ((vec (vector 0 '(2 2 2 2) "Anna")))
+  (vector-set! vec 1 '("Sue" "Sue"))
+  vec) @result{}  #(0 ("Sue" "Sue") "Anna")
+(vector-set! '#(0 1 2) 1 "doe") @result{} @emph{error} ; constant vector
address@hidden lisp
address@hidden deffn
+
address@hidden vector-fill!
address@hidden primitive vector-fill! v fill
+Store @var{fill} in every element of @var{vector}.  The value
+returned by @code{vector-fill!} is unspecified.
address@hidden deffn
+
address@hidden primitive vector-move-left! vec1 start1 end1 vec2 start2
+Vector version of @code{substring-move-left!}.
address@hidden deffn
+
address@hidden primitive vector-move-right! vec1 start1 end1 vec2 start2
+Vector version of @code{substring-move-right!}.
address@hidden deffn
+
address@hidden Vector Selection
+
+These procedures return information about a given vector, such as the
+size or what elements are contained in the vector.
+
address@hidden vector-length
address@hidden primitive vector-length vector
+Returns the number of elements in @var{vector} as an exact integer.
address@hidden deffn
+
address@hidden vector-ref
address@hidden primitive vector-ref vector k
address@hidden must be a valid index of @var{vector}.
address@hidden returns the contents of element @var{k} of
address@hidden
address@hidden
+(vector-ref '#(1 1 2 3 5 8 13 21) 5) @result{} 8
+(vector-ref '#(1 1 2 3 5 8 13 21)
+    (let ((i (round (* 2 (acos -1)))))
+      (if (inexact? i)
+        (inexact->exact i)
+           i))) @result{} 13
address@hidden lisp
address@hidden deffn
+
+
 @node Records
 @section Records
 
@@ -4817,145 +4953,6 @@
 table into an a-list of key-value pairs.
 @end deffn
 
-
address@hidden Vectors
address@hidden Vectors
-
address@hidden FIXME::martin: Review me!
-
address@hidden FIXME::martin: This node should come before the non-standard 
data types.
-
address@hidden FIXME::martin: Should the subsections of this section be nodes
address@hidden of their own, or are the resulting nodes too short, then?
-
-Vectors are sequences of Scheme objects.  Unlike lists, the length of a
-vector, once the vector is created, cannot be changed.  The advantage of
-vectors over lists is that the time required to access one element of a
-vector is constant, whereas lists have an access time linear to the
-index of the accessed element in the list.
-
-Note that the vectors documented in this section can contain any kind of
-Scheme object, it is even possible to have different types of objects in
-the same vector.
-
address@hidden Vector Read Syntax
-
-Vectors can literally be entered in source code, just like strings,
-characters or some of the other data types.  The read syntax for vectors
-is as follows: A sharp sign (@code{#}), followed by an opening
-parentheses, all elements of the vector in their respective read syntax,
-and finally a closing parentheses.  The following are examples of the
-read syntax for vectors; where the first vector only contains numbers
-and the second three different object types: a string, a symbol and a
-number in hexidecimal notation.
-
address@hidden
-#(1 2 3)
-#("Hello" foo #xdeadbeef)
address@hidden lisp
-
address@hidden Vector Predicates
-
address@hidden vector?
address@hidden primitive vector? obj
-Return @code{#t} if @var{obj} is a vector, otherwise return
address@hidden
address@hidden deffn
-
address@hidden Vector Constructors
-
address@hidden make-vector
address@hidden primitive make-vector k [fill]
-Return a newly allocated vector of @var{k} elements.  If a
-second argument is given, then each element is initialized to
address@hidden  Otherwise the initial contents of each element is
-unspecified.
address@hidden deffn
-
address@hidden vector
address@hidden list->vector
address@hidden primitive vector . l
address@hidden primitive list->vector l
-Return a newly allocated vector whose elements contain the
-given arguments.  Analogous to @code{list}.
-
address@hidden
-(vector 'a 'b 'c) @result{} #(a b c)
address@hidden lisp
address@hidden deffn
-
address@hidden vector->list
address@hidden primitive vector->list v
-Return a newly allocated list of the objects contained in the
-elements of @var{vector}.
-
address@hidden
-(vector->list '#(dah dah didah)) @result{}  (dah dah didah)
-(list->vector '(dididit dah)) @result{}  #(dididit dah)
address@hidden lisp
address@hidden deffn
-
address@hidden Vector Modification
-
-A vector created by any of the vector constructor procedures
-(@pxref{Vectors}) documented above can be modified using the
-following procedures.
-
-According to R5RS, using any of these procedures on literally entered
-vectors is an error, because these vectors are considered to be
-constant, although Guile currently does not detect this error.
-
address@hidden vector-set!
address@hidden primitive vector-set! vector k obj
address@hidden must be a valid index of @var{vector}.
address@hidden stores @var{obj} in element @var{k} of @var{vector}.
-The value returned by @samp{vector-set!} is unspecified.
address@hidden
-(let ((vec (vector 0 '(2 2 2 2) "Anna")))
-  (vector-set! vec 1 '("Sue" "Sue"))
-  vec) @result{}  #(0 ("Sue" "Sue") "Anna")
-(vector-set! '#(0 1 2) 1 "doe") @result{} @emph{error} ; constant vector
address@hidden lisp
address@hidden deffn
-
address@hidden vector-fill!
address@hidden primitive vector-fill! v fill
-Store @var{fill} in every element of @var{vector}.  The value
-returned by @code{vector-fill!} is unspecified.
address@hidden deffn
-
address@hidden primitive vector-move-left! vec1 start1 end1 vec2 start2
-Vector version of @code{substring-move-left!}.
address@hidden deffn
-
address@hidden primitive vector-move-right! vec1 start1 end1 vec2 start2
-Vector version of @code{substring-move-right!}.
address@hidden deffn
-
address@hidden Vector Selection
-
-These procedures return information about a given vector, such as the
-size or what elements are contained in the vector.
-
address@hidden vector-length
address@hidden primitive vector-length vector
-Returns the number of elements in @var{vector} as an exact integer.
address@hidden deffn
-
address@hidden vector-ref
address@hidden primitive vector-ref vector k
address@hidden must be a valid index of @var{vector}.
address@hidden returns the contents of element @var{k} of
address@hidden
address@hidden
-(vector-ref '#(1 1 2 3 5 8 13 21) 5) @result{} 8
-(vector-ref '#(1 1 2 3 5 8 13 21)
-    (let ((i (round (* 2 (acos -1)))))
-      (if (inexact? i)
-        (inexact->exact i)
-           i))) @result{} 13
address@hidden lisp
address@hidden deffn
 
 @node Hooks
 @section Hooks
Index: guile/guile-core/doc/scheme-io.texi
diff -u guile/guile-core/doc/scheme-io.texi:1.14 
guile/guile-core/doc/scheme-io.texi:1.15
--- guile/guile-core/doc/scheme-io.texi:1.14    Wed May 16 12:30:57 2001
+++ guile/guile-core/doc/scheme-io.texi Wed May 30 13:32:05 2001
@@ -766,9 +766,9 @@
 
 @deffn primitive %make-void-port mode
 Create and return a new void port.  A void port acts like
-/dev/null.  The @var{mode} argument
-specifies the input/output modes for this port: see the
-documentation for @code{open-file} in @ref{File Ports}.
address@hidden/dev/null}.  The @var{mode} argument specifies the input/output
+modes for this port: see the documentation for @code{open-file} in
address@hidden Ports}.
 @end deffn
 
 
Index: guile/guile-core/doc/scheme-reading.texi
diff -u guile/guile-core/doc/scheme-reading.texi:1.2 
guile/guile-core/doc/scheme-reading.texi:1.3
--- guile/guile-core/doc/scheme-reading.texi:1.2        Fri Mar 30 14:16:20 2001
+++ guile/guile-core/doc/scheme-reading.texi    Wed May 30 13:32:05 2001
@@ -6,17 +6,17 @@
 @item
 Dorai Sitaram's online Scheme tutorial, @dfn{Teach Yourself Scheme in
 Fixnum Days}, at
-http://www.cs.rice.edu/~dorai/t-y-scheme/t-y-scheme.html.  Includes a
-nice explanation of continuations.
address@hidden://www.cs.rice.edu/~dorai/t-y-scheme/t-y-scheme.html}.
+Includes a nice explanation of continuations.
 
 @item
-http://wombat.doc.ic.ac.uk/foldoc/.
address@hidden://wombat.doc.ic.ac.uk/foldoc/}.
 
 @item
 The complete text of @dfn{Structure and Interpretation of Computer
 Programs}, the classic introduction to computer science and Scheme by
 Hal Abelson, Jerry Sussman and Julie Sussman, is now available online at
-http://mitpress.mit.edu/sicp/sicp.html.  This site also provides
address@hidden://mitpress.mit.edu/sicp/sicp.html}.  This site also provides
 teaching materials related to the book, and all the source code used in
 the book, in a form suitable for loading and running.
 @end itemize
Index: guile/guile-core/doc/scripts.texi
diff -u guile/guile-core/doc/scripts.texi:1.2 
guile/guile-core/doc/scripts.texi:1.3
--- guile/guile-core/doc/scripts.texi:1.2       Wed May 16 11:08:12 2001
+++ guile/guile-core/doc/scripts.texi   Wed May 30 13:32:05 2001
@@ -1,4 +1,4 @@
-
address@hidden
 @node Guile Scripting
 @chapter Guile Scripting
 
Index: guile/guile-core/doc/srfi-modules.texi
diff -u guile/guile-core/doc/srfi-modules.texi:1.5 
guile/guile-core/doc/srfi-modules.texi:1.6
--- guile/guile-core/doc/srfi-modules.texi:1.5  Wed May 23 10:24:50 2001
+++ guile/guile-core/doc/srfi-modules.texi      Wed May 30 13:32:05 2001
@@ -72,6 +72,7 @@
 which implements this means, has the following syntax.
 
 @example
address@hidden
 <cond-expand>
   --> (cond-expand <cond-expand-clause>+)
     | (cond-expand <cond-expand-clause>* (else <command-or-definition>))
@@ -84,6 +85,7 @@
     | (not <feature-requirement>)
 <feature-identifier>
   --> <a symbol which is the name or alias of a SRFI>
address@hidden group
 @end example
 
 When evaluated, this form checks all clauses in order, until it finds
@@ -218,6 +220,7 @@
 The syntax of a record type definition is:
 
 @example
address@hidden
 <record type definition>
   -> (define-record-type <type name>
        (<constructor name> <field tag> ...)
@@ -227,6 +230,7 @@
              -> (<field tag> <accessor name> <modifier name>)
 <field tag>  -> <identifier>
 <... name>   -> <identifier>
address@hidden group
 @end example
 
 Usage example:
@@ -1375,6 +1379,7 @@
 EBNF grammar.
 
 @example
address@hidden
 <case-lambda>
    --> (case-lambda <case-lambda-clause>)
 <case-lambda-clause>
@@ -1383,6 +1388,7 @@
    --> (<identifier>*)
      | (<identifier>* . <identifier>)
      | <identifier>
address@hidden group
 @end example
 
 The value returned by a @code{case-lambda} form is a procedure which



reply via email to

[Prev in Thread] Current Thread [Next in Thread]