*** empty log message ***
authorJim Blandy <jimb@red-bean.com>
Fri, 16 May 1997 08:05:22 +0000 (08:05 +0000)
committerJim Blandy <jimb@red-bean.com>
Fri, 16 May 1997 08:05:22 +0000 (08:05 +0000)
NEWS
ice-9/ChangeLog
libguile/ChangeLog

diff --git a/NEWS b/NEWS
index 56ac01d..5c5a993 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -19,6 +19,9 @@ guile-rgx-ctax --- the interface between Guile and the Rx regular
        programming language.  These are packaged together because the
        Ctax translator uses Rx to parse Ctax source code.
 
        programming language.  These are packaged together because the
        Ctax translator uses Rx to parse Ctax source code.
 
+This NEWS file describes the changes made to guile-core since the 1.0
+release.
+
 We no longer distribute the documentation, since it was either out of
 date, or incomplete.  As soon as we have current documentation, we
 will distribute it.
 We no longer distribute the documentation, since it was either out of
 date, or incomplete.  As soon as we have current documentation, we
 will distribute it.
@@ -74,6 +77,66 @@ with the arguments given to the script.  Guile loads the script, which
 defines the `main' function, and then applies it to the list of
 remaining command-line arguments, ("a" "speckled" "gecko").
 
 defines the `main' function, and then applies it to the list of
 remaining command-line arguments, ("a" "speckled" "gecko").
 
+In Unix, the first line of a script file must take the following form:
+
+#!INTERPRETER ARGUMENT
+
+where INTERPRETER is the absolute filename of the interpreter
+executable, and ARGUMENT is a single command-line argument to pass to
+the interpreter.
+
+You may only pass one argument to the interpreter, and its length is
+limited.  These restrictions can be annoying to work around, so Guile
+provides a general mechanism (borrowed from, and compatible with,
+SCSH) for circumventing them.
+
+If the ARGUMENT in a Guile script is a single backslash character,
+`\', Guile will open the script file, parse arguments from its second
+and subsequent lines, and replace the `\' with them.  So, for example,
+here is another implementation of the `ekko' script:
+
+#!/usr/local/bin/guile \
+-e main -s
+!#
+(define (main args)
+  (for-each (lambda (arg) (display arg) (display " "))
+            (cdr args))
+  (newline))
+
+If the user invokes this script as follows:
+
+       ekko a speckled gecko
+
+Unix expands this into
+
+       /usr/local/bin/guile \ ekko a speckled gecko
+
+When Guile sees the `\' argument, it replaces it with the arguments
+read from the second line of the script, producing:
+
+       /usr/local/bin/guile -e main -s ekko a speckled gecko
+
+This tells Guile to load the `ekko' script, and apply the function
+`main' to the argument list ("a" "speckled" "gecko").
+
+Here is how Guile parses the command-line arguments:
+- Each space character terminates an argument.  This means that two
+  spaces in a row introduce an empty-string argument.
+- The tab character is not permitted (unless you quote it with the
+  backslash character, as described below), to avoid confusion.
+- The newline character terminates the sequence of arguments, and will
+  also terminate a final non-empty argument.  (However, a newline
+  following a space will not introduce a final empty-string argument;
+  it only terminates the argument list.)
+- The backslash character is the escape character.  It escapes
+  backslash, space, tab, and newline.  The ANSI C escape sequences
+  like \n and \t are also supported.  These produce argument
+  constituents; the two-character combination \n doesn't act like a
+  terminating newline.  The escape sequence \NNN for exactly three
+  octal digits reads as the character whose ASCII code is NNN.  As
+  above, characters produced this way are argument constituents.
+  Backslash followed by other characters is not allowed.
+
 * Changes to the procedure for linking libguile with your programs
 
 ** Guile now builds and installs a shared guile library, if your
 * Changes to the procedure for linking libguile with your programs
 
 ** Guile now builds and installs a shared guile library, if your
@@ -100,7 +163,279 @@ AC_CHECK_LIB(guile, scm_shell)
 
 * Changes to Scheme functions
 
 
 * Changes to Scheme functions
 
-** There are new accessors and setters for the broken-out time vectors
+** Guile Scheme's special syntax for keyword objects is now optional,
+and disabled by default.
+
+The syntax variation from R4RS made it difficult to port some
+interesting packages to Guile.  The routines which accepted keyword
+arguments (mostly in the module system) have been modified to also
+accept symbols whose names begin with `:'.
+
+To change the keyword syntax, you must first import the (ice-9 debug)
+module:
+       (use-modules (ice-9 debug))
+
+Then you can enable the keyword syntax as follows:
+       (read-set! keywords 'prefix)
+
+To disable keyword syntax, do this:
+       (read-set! keywords #f)
+
+** Many more primitive functions accept shared substrings as
+arguments.  In the past, these functions required normal, mutable
+strings as arguments, although they never made use of this
+restriction.
+
+** The uniform array functions now operate on byte vectors.  These
+functions are `array-fill!', `serial-array-copy!', `array-copy!',
+`serial-array-map', `array-map', `array-for-each', and
+`array-index-map!'.
+
+** The new functions `trace' and `untrace' implement simple debugging
+support for Scheme functions.
+
+The `trace' function accepts any number of procedures as arguments,
+and tells the Guile interpreter to display each procedure's name and
+arguments each time the procedure is invoked.  When invoked with no
+arguments, `trace' returns the list of procedures currently being
+traced.
+
+The `untrace' function accepts any number of procedures as arguments,
+and tells the Guile interpreter not to trace them any more.  When
+invoked with no arguments, `untrace' untraces all curretly traced
+procedures.
+
+The tracing in Guile has an advantage over most other systems: we
+don't create new procedure objects, but mark the procedure objects
+themselves.  This means that anonymous and internal procedures can be
+traced.
+
+** The function `assert-repl-prompt' has been renamed to
+`set-repl-prompt!'.  It takes one argument, PROMPT.
+- If PROMPT is #f, the Guile read-eval-print loop will not prompt.
+- If PROMPT is a string, we use it as a prompt.
+- If PROMPT is a procedure accepting no arguments, we call it, and
+  display the result as a prompt.
+- Otherwise, we display "> ".
+
+** The new function `eval-string' reads Scheme expressions from a
+string and evaluates them, returning the value of the last expression
+in the string.  If the string contains no expressions, it returns an
+unspecified value.
+
+** The new function `thunk?' returns true iff its argument is a
+procedure of zero arguments.
+
+** `defined?' is now a builtin function, instead of syntax.  This
+means that its argument should be quoted.  It returns #t iff its
+argument is bound in the current module.
+
+** The new syntax `use-modules' allows you to add new modules to your
+environment without re-typing a complete `define-module' form.  It
+accepts any number of module names as arguments, and imports their
+public bindings into the current module.
+
+** The new function (module-defined? NAME MODULE) returns true iff
+NAME, a symbol, is defined in MODULE, a module object.
+
+** The new function `builtin-bindings' creates and returns a hash
+table containing copies of all the root module's bindings.
+
+** The new function `builtin-weak-bindings' does the same as
+`builtin-bindings', but creates a doubly-weak hash table.
+
+** The `equal?' function now considers variable objects to be
+equivalent if they have the same name and the same value.
+
+** The new function `command-line' returns the command-line arguments
+given to Guile, as a list of strings.
+
+When using guile as a script interpreter, `command-line' returns the
+script's arguments; those processed by the interpreter (like `-s' or
+`-c') are omitted.  (In other words, you get the normal, expected
+behavior.)  Any application that uses scm_shell to process its
+command-line arguments gets this behavior as well.
+
+** The new function `load-user-init' looks for a file called `.guile'
+in the user's home directory, and loads it if it exists.  This is
+mostly for use by the code generated by scm_compile_shell_switches,
+but we thought it might also be useful in other circumstances.
+
+** The new function `log10' returns the base-10 logarithm of its
+argument.
+
+** Changes to I/O functions
+
+*** The functions `read', `primitive-load', `read-and-eval!', and 
+`primitive-load-path' no longer take optional arguments controlling
+case insensitivity and a `#' parser.
+
+Case sensitivity is now controlled by a read option called
+`case-insensitive'.  The user can add new `#' syntaxes with the
+`read-hash-extend' function (see below).
+
+*** The new function `read-hash-extend' allows the user to change the
+syntax of Guile Scheme in a somewhat controlled way.
+
+(read-hash-extend CHAR PROC)
+  When parsing S-expressions, if we read a `#' character followed by
+  the character CHAR, use PROC to parse an object from the stream.
+  If PROC is #f, remove any parsing procedure registered for CHAR.
+
+  The reader applies PROC to two arguments: CHAR and an input port.
+
+*** The new functions read-delimited and read-delimited! provide a 
+general mechanism for doing delimited input on streams.
+
+(read-delimited DELIMS [PORT HANDLE-DELIM])
+  Read until we encounter one of the characters in DELIMS (a string),
+  or end-of-file.  PORT is the input port to read from; it defaults to
+  the current input port.  The HANDLE-DELIM parameter determines how
+  the terminating character is handled; it should be one of the
+  following symbols:
+
+    'trim     omit delimiter from result
+    'peek     leave delimiter character in input stream
+    'concat   append delimiter character to returned value
+    'split    return a pair: (RESULT . TERMINATOR)
+
+  HANDLE-DELIM defaults to 'peek.
+
+(read-delimited! DELIMS BUF [PORT HANDLE-DELIM START END])
+  A side-effecting variant of `read-delimited'.
+
+  The data is written into the string BUF at the indices in the
+  half-open interval [START, END); the default interval is the whole
+  string: START = 0 and END = (string-length BUF).  The values of
+  START and END must specify a well-defined interval in BUF, i.e.
+  0 <= START <= END <= (string-length BUF).
+
+  It returns NBYTES, the number of bytes read.  If the buffer filled
+  up without a delimiter character being found, it returns #f.  If the
+  port is at EOF when the read starts, it returns the EOF object.
+
+  If an integer is returned (i.e., the read is successfully terminated
+  by reading a delimiter character), then the HANDLE-DELIM parameter
+  determines how to handle the terminating character.  It is described
+  above, and defaults to 'peek.
+
+(The descriptions of these functions were borrowed from the SCSH
+manual, by Olin Shivers and Brian Carlstrom.)
+
+*** The `%read-delimited!' function is the primitive used to implement
+`read-delimited' and `read-delimited!'.
+
+(%read-delimited! DELIMS BUF GOBBLE? [PORT START END])
+
+This returns a pair of values: (TERMINATOR . NUM-READ).
+- TERMINATOR describes why the read was terminated.  If it is a
+  character or the eof object, then that is the value that terminated
+  the read.  If it is #f, the function filled the buffer without finding
+  a delimiting character.
+- NUM-READ is the number of characters read into BUF.
+
+If the read is successfully terminated by reading a delimiter
+character, then the gobble? parameter determines what to do with the
+terminating character.  If true, the character is removed from the
+input stream; if false, the character is left in the input stream
+where a subsequent read operation will retrieve it.  In either case,
+the character is also the first value returned by the procedure call.
+
+(The descriptions of this function was borrowed from the SCSH manual,
+by Olin Shivers and Brian Carlstrom.)
+
+*** The `read-line' and `read-line!' functions have changed; they now
+trim the terminator by default; previously they appended it to the
+returned string.  For the old behavior, use (read-line PORT 'concat).
+
+*** The functions `uniform-array-read!' and `uniform-array-write!' now
+take new optional START and END arguments, specifying the region of
+the array to read and write.
+
+*** The `ungetc-char-ready?' function has been removed.
+
+** Changes to the Unix library and system call interface
+
+*** The new fcntl function provides access to the Unix `fcntl' system
+call.
+
+(fcntl PORT COMMAND VALUE)
+  Apply COMMAND to PORT's file descriptor, with VALUE as an argument.
+  Values for COMMAND are:
+
+    F_DUPFD    duplicate a file descriptor
+    F_GETFD    read the descriptor's close-on-exec flag
+    F_SETFD     set the descriptor's close-on-exec flag to VALUE
+    F_GETFL    read the descriptor's flags, as set on open
+    F_SETFL    set the descriptor's flags, as set on open to VALUE
+    F_GETOWN    return the process ID of a socket's owner, for SIGIO
+    F_SETOWN    set the process that owns a socket to VALUE, for SIGIO
+    FD_CLOEXEC  not sure what this is
+
+For details, see the documentation for the fcntl system call.
+
+*** The arguments to `select' have changed, for compatibility with
+SCSH.  The TIMEOUT parameter may now be non-integral, yielding the
+expected behavior.  The MILLISECONDS parameter has been changed to
+MICROSECONDS, to more closely resemble the underlying system call.
+The RVEC, WVEC, and EVEC arguments can now be vectors; the type of the
+corresponding return set will be the same.
+
+*** The arguments to the `mknod' system call have changed.  They are
+now:
+
+(mknod PATH TYPE PERMS DEV)
+  Create a new file (`node') in the file system.  PATH is the name of
+  the file to create.  TYPE is the kind of file to create; it should
+  be 'fifo, 'block-special, or 'char-special.  PERMS specifies the
+  permission bits to give the newly created file.  If TYPE is
+  'block-special or 'char-special, DEV specifies which device the
+  special file refers to; its interpretation depends on the kind of
+  special file being created.
+
+*** The `fork' function has been renamed to `primitive-fork', to avoid
+clashing with various SCSH forks.
+
+*** The `recv' and `recvfrom' functions have been renamed to `recv!'
+and `recvfrom!'.  They no longer accept a size for a second argument;
+you must pass a string to hold the received value.  They no longer
+return the buffer.  Instead, `recv' returns the length of the message
+received, and `recvfrom' returns a pair containing the packet's length
+and originating address. 
+
+*** The file descriptor datatype has been removed, as have the
+`read-fd', `write-fd', `close', `lseek', and `dup' functions.
+We plan to replace these functions with a SCSH-compatible interface.
+
+*** The `create' function has been removed; it's just a special case
+of `open'.
+
+*** There are new functions to break down process termination status
+values.  In the descriptions below, STATUS is a value returned by
+`waitpid'.
+
+(status:exit-val STATUS)
+  If the child process exited normally, this function returns the exit
+  code for the child process (i.e., the value passed to exit, or
+  returned from main).  If the child process did not exit normally,
+  this function returns #f.
+
+(status:stop-sig STATUS)
+  If the child process was suspended by a signal, this function
+  returns the signal that suspended the child.  Otherwise, it returns
+  #f.
+
+(status:term-sig STATUS)
+  If the child process terminated abnormally, this function returns
+  the signal that terminated the child.  Otherwise, this function
+  returns false.
+
+POSIX promises that exactly one of these functions will return true on
+a valid STATUS value.
+
+These functions are compatible with SCSH.
+
+*** There are new accessors and setters for the broken-out time vectors
 returned by `localtime', `gmtime', and that ilk.  They are:
 
   Component                 Accessor     Setter
 returned by `localtime', `gmtime', and that ilk.  They are:
 
   Component                 Accessor     Setter
@@ -117,7 +452,8 @@ returned by `localtime', `gmtime', and that ilk.  They are:
   GMT offset, seconds       tm:gmtoff    set-tm:gmtoff
   name of time zone         tm:zone      set-tm:zone
 
   GMT offset, seconds       tm:gmtoff    set-tm:gmtoff
   name of time zone         tm:zone      set-tm:zone
 
-** There are new accessors for the vectors returned by `uname'.
+*** There are new accessors for the vectors returned by `uname',
+describing the host system:
 
   Component                                      Accessor
   ============================================== ================
 
   Component                                      Accessor
   ============================================== ================
@@ -127,33 +463,116 @@ returned by `localtime', `gmtime', and that ilk.  They are:
   version level of the operating system          utsname:version
   machine hardware platform                      utsname:machine
 
   version level of the operating system          utsname:version
   machine hardware platform                      utsname:machine
 
-** There is now a complete set of accessors for the vectors returned
-by the `getserv'
-
-** The new function `eval-string' reads Scheme expressions from a
-string and evaluates them, returning the value of the last expression
-in the string.  If the string contains no expressions, it returns an
-unspecified value.
-
-** The new function `command-line' returns the command-line arguments
-given to Guile, as a list of strings.
-
-When using guile as a script interpreter, `command-line' returns the
-script's arguments; those processed by the interpreter (like `-s' or
-`-c') are omitted.  (In other words, you get the normal, expected
-behavior.)  Any application that uses scm_shell to process its
-command-line arguments gets this behavior as well.
-
-** The new function `load-user-init' looks for a file called `.guile'
-in the user's home directory, and loads it if it exists.  This is
-mostly for use by the code generated by scm_compile_shell_switches,
-but we thought it might also be useful in other circumstances.
-
-** The new function `log10' returns the base-10 logarithm of its
-argument.
-
-** gethost, getproto, and getnet, and getserv now return more helpful
-error codes.
+*** There are new accessors for the vectors returned by `getpw',
+`getpwnam', `getpwuid', and `getpwent', describing entries from the
+system's user database:
+
+  Component              Accessor
+  ====================== =================
+  user name              passwd:name
+  user password                 passwd:passwd
+  user id               passwd:uid
+  group id              passwd:gid
+  real name             passwd:gecos
+  home directory        passwd:dir
+  shell program                 passwd:shell
+
+*** There are new accessors for the vectors returned by `getgr',
+`getgrnam', `getgrgid', and `getgrent', describing entries from the
+system's group database:
+
+  Component               Accessor
+  ======================= ============
+  group name              group:name
+  group password         group:passwd
+  group id               group:gid
+  group members          group:mem
+
+*** There are new accessors for the vectors returned by `gethost',
+`gethostbyaddr', `gethostbyname', and `gethostent', describing
+internet hosts:
+
+  Component                 Accessor
+  ========================= ===============
+  official name of host     hostent:name
+  alias list               hostent:aliases
+  host address type        hostent:addrtype
+  length of address        hostent:length
+  list of addresses        hostent:addr-list
+
+*** There are new accessors for the vectors returned by `getnet',
+`getnetbyaddr', `getnetbyname', and `getnetent', describing internet
+networks:
+
+  Component                 Accessor
+  ========================= ===============
+  official name of net      netent:name
+  alias list               netent:aliases
+  net number type          netent:addrtype
+  net number               netent:net
+
+*** There are new accessors for the vectors returned by `getproto',
+`getprotobyname', `getprotobynumber', and `getprotoent', describing
+internet protocols:
+
+  Component                 Accessor
+  ========================= ===============
+  official protocol name    protoent:name
+  alias list               protoent:aliases
+  protocol number          protoent:proto
+
+*** There are new accessors for the vectors returned by `getserv',
+`getservbyname', `getservbyport', and `getservent', describing
+internet protocols:
+
+  Component                 Accessor
+  ========================= ===============
+  official service name     servent:name   
+  alias list               servent:aliases
+  port number              servent:port   
+  protocol to use          servent:proto  
+
+*** There are new accessors for the sockaddr structures returned by
+`accept', `getsockname', `getpeername', `recvfrom!':
+
+  Component                                Accessor
+  ======================================== ===============
+  address format (`family')                sockaddr:fam 
+  path, for file domain addresses         sockaddr:path
+  address, for internet domain addresses   sockaddr:addr
+  TCP or UDP port, for internet                   sockaddr:port
+
+*** The `getpwent', `getgrent', `gethostent', `getnetent',
+`getprotoent', and `getservent' functions now return #f at the end of
+the user database.  (They used to throw an exception.)
+
+Note that calling MUMBLEent function is equivalent to calling the
+corresponding MUMBLE function with no arguments.
+
+*** The `setpwent', `setgrent', `sethostent', `setnetent',
+`setprotoent', and `setservent' routines now take no arguments.
+
+*** The `gethost', `getproto', `getnet', and `getserv' functions now
+provide more useful information when they throw an exception.
+
+*** The `lnaof' function has been renamed to `inet-lnaof'.
+
+*** Guile now claims to have the `current-time' feature.
+
+*** The `mktime' function now takes an optional second argument ZONE,
+giving the time zone to use for the conversion.  ZONE should be a
+string, in the same format as expected for the "TZ" environment variable.
+
+*** The `strptime' function now returns a pair (TIME . COUNT), where
+TIME is the parsed time as a vector, and COUNT is the number of
+characters from the string left unparsed.  This function used to
+return the remaining characters as a string.
+
+*** The `gettimeofday' function has replaced the old `time+ticks' function.
+The return value is now (SECONDS . MICROSECONDS); the fractional
+component is no longer expressed in "ticks".
+
+*** The `ticks/sec' constant has been removed, in light of the above change.
 
 * Changes to the gh_ interface
 
 
 * Changes to the gh_ interface
 
@@ -172,6 +591,109 @@ the user to interpret the data both ways.
 
 * Changes to the scm_ interface
 
 
 * Changes to the scm_ interface
 
+** The new function scm_symbol_value0 provides an easy way to get a
+symbol's value from C code:
+
+SCM scm_symbol_value0 (char *NAME)
+  Return the value of the symbol named by the null-terminated string
+  NAME in the current module.  If the symbol named NAME is unbound in
+  the current module, return SCM_UNDEFINED.
+
+** The new function scm_sysintern0 creates new top-level variables,
+without assigning them a value.
+
+SCM scm_sysintern0 (char *NAME)
+  Create a new Scheme top-level variable named NAME.  NAME is a
+  null-terminated string.  Return the variable's value cell.
+
+** The function scm_internal_catch is the guts of catch.  It handles
+all the mechanics of setting up a catch target, invoking the catch
+body, and perhaps invoking the handler if the body does a throw.
+
+The function is designed to be usable from C code, but is general
+enough to implement all the semantics Guile Scheme expects from throw.
+
+TAG is the catch tag.  Typically, this is a symbol, but this function
+doesn't actually care about that.
+
+BODY is a pointer to a C function which runs the body of the catch;
+this is the code you can throw from.  We call it like this:
+   BODY (BODY_DATA, JMPBUF)
+where:
+   BODY_DATA is just the BODY_DATA argument we received; we pass it
+      through to BODY as its first argument.  The caller can make
+      BODY_DATA point to anything useful that BODY might need.
+   JMPBUF is the Scheme jmpbuf object corresponding to this catch,
+      which we have just created and initialized.
+
+HANDLER is a pointer to a C function to deal with a throw to TAG,
+should one occur.  We call it like this:
+   HANDLER (HANDLER_DATA, THROWN_TAG, THROW_ARGS)
+where
+   HANDLER_DATA is the HANDLER_DATA argument we recevied; it's the
+      same idea as BODY_DATA above.
+   THROWN_TAG is the tag that the user threw to; usually this is
+      TAG, but it could be something else if TAG was #t (i.e., a
+      catch-all), or the user threw to a jmpbuf.
+   THROW_ARGS is the list of arguments the user passed to the THROW
+      function.
+
+BODY_DATA is just a pointer we pass through to BODY.  HANDLER_DATA
+is just a pointer we pass through to HANDLER.  We don't actually
+use either of those pointers otherwise ourselves.  The idea is
+that, if our caller wants to communicate something to BODY or
+HANDLER, it can pass a pointer to it as MUMBLE_DATA, which BODY and
+HANDLER can then use.  Think of it as a way to make BODY and
+HANDLER closures, not just functions; MUMBLE_DATA points to the
+enclosed variables.
+
+Of course, it's up to the caller to make sure that any data a
+MUMBLE_DATA needs is protected from GC.  A common way to do this is
+to make MUMBLE_DATA a pointer to data stored in an automatic
+structure variable; since the collector must scan the stack for
+references anyway, this assures that any references in MUMBLE_DATA
+will be found.
+
+** The new function scm_internal_lazy_catch is exactly like
+scm_internal_catch, except:
+
+- It does not unwind the stack (this is the major difference).
+- If handler returns, its value is returned from the throw.
+- BODY always receives #f as its JMPBUF argument (since there's no
+  jmpbuf associated with a lazy catch, because we don't unwind the
+  stack.)
+
+** scm_body_thunk is a new body function you can pass to
+scm_internal_catch if you want the body to be like Scheme's `catch'
+--- a thunk, or a function of one argument if the tag is #f.
+
+BODY_DATA is a pointer to a scm_body_thunk_data structure, which
+contains the Scheme procedure to invoke as the body, and the tag
+we're catching.  If the tag is #f, then we pass JMPBUF (created by
+scm_internal_catch) to the body procedure; otherwise, the body gets
+no arguments.
+
+** scm_handle_by_proc is a new handler function you can pass to
+scm_internal_catch if you want the handler to act like Scheme's catch
+--- call a procedure with the tag and the throw arguments.
+
+If the user does a throw to this catch, this function runs a handler
+procedure written in Scheme.  HANDLER_DATA is a pointer to an SCM
+variable holding the Scheme procedure object to invoke.  It ought to
+be a pointer to an automatic variable (i.e., one living on the stack),
+or the procedure object should be otherwise protected from GC.
+
+** scm_handle_by_message is a new handler function to use with
+`scm_internal_catch' if you want Guile to print a message and die.
+It's useful for dealing with throws to uncaught keys at the top level.
+
+HANDLER_DATA, if non-zero, is assumed to be a char * pointing to a
+message header to print; if zero, we use "guile" instead.  That
+text is followed by a colon, then the message described by ARGS.
+
+** The return type of scm_boot_guile is now void; the function does
+not return a value, and indeed, never returns at all.
+
 ** The new function scm_shell makes it easy for user applications to
 process command-line arguments in a way that is compatible with the
 stand-alone guile interpreter (which is in turn compatible with SCSH,
 ** The new function scm_shell makes it easy for user applications to
 process command-line arguments in a way that is compatible with the
 stand-alone guile interpreter (which is in turn compatible with SCSH,
@@ -186,20 +708,97 @@ generally means loading a script file or starting up an interactive
 command interpreter.  For details, see "Changes to the stand-alone
 interpreter" above.
 
 command interpreter.  For details, see "Changes to the stand-alone
 interpreter" above.
 
-** [[new: scm_usage_name, scm_shell_usage, scm_compile_shell_switches]]
+** The new functions scm_get_meta_args and scm_count_argv help you
+implement the SCSH-style meta-argument, `\'.  
+
+char **scm_get_meta_args (int ARGC, char **ARGV)
+  If the second element of ARGV is a string consisting of a single
+  backslash character (i.e. "\\" in Scheme notation), open the file
+  named by the following argument, parse arguments from it, and return
+  the spliced command line.  The returned array is terminated by a
+  null pointer.
+  
+  For details of argument parsing, see above, under "guile now accepts
+  command-line arguments compatible with SCSH..."
+
+int scm_count_argv (char **ARGV)
+  Count the arguments in ARGV, assuming it is terminated by a null
+  pointer.
+
+For an example of how these functions might be used, see the source
+code for the function scm_shell in libguile/script.c.
+
+You will usually want to use scm_shell instead of calling this
+function yourself.
+
+** The new function scm_compile_shell_switches turns an array of
+command-line arguments into Scheme code to carry out the actions they
+describe.  Given ARGC and ARGV, it returns a Scheme expression to
+evaluate, and calls scm_set_program_arguments to make any remaining
+command-line arguments available to the Scheme code.  For example,
+given the following arguments:
+
+       -e main -s ekko a speckled gecko
+
+scm_set_program_arguments will return the following expression:
+
+       (begin (load "ekko") (main (command-line)) (quit))
+
+You will usually want to use scm_shell instead of calling this
+function yourself.
+
+** The function scm_shell_usage prints a usage message appropriate for
+an interpreter that uses scm_compile_shell_switches to handle its
+command-line arguments.
+
+void scm_shell_usage (int FATAL, char *MESSAGE)
+  Print a usage message to the standard error output.  If MESSAGE is
+  non-zero, write it before the usage message, followed by a newline.
+  If FATAL is non-zero, exit the process, using FATAL as the
+  termination status.  (If you want to be compatible with Guile,
+  always use 1 as the exit status when terminating due to command-line
+  usage problems.)
+
+You will usually want to use scm_shell instead of calling this
+function yourself.
 
 ** scm_eval_0str now returns SCM_UNSPECIFIED if the string contains no
 
 ** scm_eval_0str now returns SCM_UNSPECIFIED if the string contains no
-expressions.  It used to return SCM_EOL.
+expressions.  It used to return SCM_EOL.  Earth-shattering.
+
+** The macros for declaring scheme objects in C code have been
+rearranged slightly.  They are now:
+
+SCM_SYMBOL (C_NAME, SCHEME_NAME)
+  Declare a static SCM variable named C_NAME, and initialize it to
+  point to the Scheme symbol whose name is SCHEME_NAME.  C_NAME should
+  be a C identifier, and SCHEME_NAME should be a C string.
+
+SCM_GLOBAL_SYMBOL (C_NAME, SCHEME_NAME)
+  Just like SCM_SYMBOL, but make C_NAME globally visible.
+
+SCM_VCELL (C_NAME, SCHEME_NAME)
+  Create a global variable at the Scheme level named SCHEME_NAME.
+  Declare a static SCM variable named C_NAME, and initialize it to
+  point to the Scheme variable's value cell.
+
+SCM_GLOBAL_VCELL (C_NAME, SCHEME_NAME)
+  Just like SCM_VCELL, but make C_NAME globally visible.
+
+The `guile-snarf' script writes initialization code for these macros
+to its standard output, given C source code as input.
+
+The SCM_GLOBAL macro is gone.
+
+** The scm_read_line and scm_read_line_x functions have been replaced
+by Scheme code based on the %read-delimited! procedure (known to C
+code as scm_read_delimited_x).  See its description above for more
+information.
 
 
-* Changes to documentation
+** The function scm_sys_open has been renamed to scm_open.  It now
+returns a port instead of an FD object.
 
 
-** the $(srcdir)/newdoc hierarchy now contains a new approach to the
-manuals.  The approach, recommended by Jim Blandy, is to have: (*) a
-tutorial with the pedagogical style of guile-user, and a non-dry
-reference manual in the style of the most excellent GNU libc reference
-manual: the reference manual should be complete, but at the same time
-it should have an introductory screen for each major topic, which can
-be referenced if the user goes "up" a level in the info documentation.
+* The dynamic linking support has changed.  For more information, see
+libguile/DYNAMIC-LINKING.
 
 \f
 Guile 1.0b3
 
 \f
 Guile 1.0b3
index f7e4776..1aedbb5 100644 (file)
@@ -114,7 +114,7 @@ Wed Mar 19 04:50:34 1997  Gary Houston  <ghouston@actrix.gen.nz>
 
 Tue Mar 18 18:39:31 1997  Gary Houston  <ghouston@actrix.gen.nz>
 
 
 Tue Mar 18 18:39:31 1997  Gary Houston  <ghouston@actrix.gen.nz>
 
-*      * boot-9.scm (setpwent, setgrent, sethostent, setnetent, setprotoent,
+       * boot-9.scm (setpwent, setgrent, sethostent, setnetent, setprotoent,
        setservent): no longer take an argument, it was bogus.
 
 Thu Mar 13 00:13:41 1997  Gary Houston  <ghouston@actrix.gen.nz>
        setservent): no longer take an argument, it was bogus.
 
 Thu Mar 13 00:13:41 1997  Gary Houston  <ghouston@actrix.gen.nz>
@@ -194,7 +194,7 @@ Sat Mar  1 00:10:38 1997  Mikael Djurfeldt  <mdj@mdj.nada.kth.se>
        (add-hooks!): New macro.
        Change hooks to use these functions.
 
        (add-hooks!): New macro.
        Change hooks to use these functions.
 
-*      * debug.scm: *Warning* This feature is a bit premature.  I add
+       * debug.scm: *Warning* This feature is a bit premature.  I add
        it anyway because 1. it is very useful, and, 2. you can start
        making it less premature by complaining to me and by modifying
        the source! :-)
        it anyway because 1. it is very useful, and, 2. you can start
        making it less premature by complaining to me and by modifying
        the source! :-)
@@ -210,7 +210,7 @@ Sat Mar  1 00:10:38 1997  Mikael Djurfeldt  <mdj@mdj.nada.kth.se>
        * boot-9.scm (error-catching-loop): Added handling of apply-frame
        and exit-frame exceptions.
        
        * boot-9.scm (error-catching-loop): Added handling of apply-frame
        and exit-frame exceptions.
        
-*      * boot-9.scm (assert-repl-prompt, the-prompt-string): Removed.
+       * boot-9.scm (assert-repl-prompt, the-prompt-string): Removed.
        (set-repl-prompt!): Setter for repl prompt.
        (scm-style-repl): If prompt is #f, don't prompt; if prompt is a
        string, display it; if prompt is a thunk, call it and display its
        (set-repl-prompt!): Setter for repl prompt.
        (scm-style-repl): If prompt is #f, don't prompt; if prompt is a
        string, display it; if prompt is a thunk, call it and display its
@@ -292,7 +292,7 @@ Tue Jan  7 20:02:24 1997  Jim Blandy  <jimb@floss.cyclic.com>
 
 Mon Jan  6 01:13:53 1997  Mikael Djurfeldt  <mdj@kenneth>
 
 
 Mon Jan  6 01:13:53 1997  Mikael Djurfeldt  <mdj@kenneth>
 
-*      * boot-9.scm (use-modules): New macro (from Marius Vollmer).
+       * boot-9.scm (use-modules): New macro (from Marius Vollmer).
        (use-modules <module name> ...) Put the the modules named by
        <module name> ... on the use list of the current module.
 
        (use-modules <module name> ...) Put the the modules named by
        <module name> ... on the use list of the current module.
 
index d4e1e4a..6fc3f86 100644 (file)
@@ -3,8 +3,9 @@ Thu May 15 16:22:33 1997  Jim Blandy  <jimb@floss.cyclic.com>
        * net_db.c (scm_gethost, scm_getnet, scm_getproto, scm_getserv):
        Return #f on end-of-file when scanning table (i.e. when called
        with no arguments).  Try to catch errors, when we can.
        * net_db.c (scm_gethost, scm_getnet, scm_getproto, scm_getserv):
        Return #f on end-of-file when scanning table (i.e. when called
        with no arguments).  Try to catch errors, when we can.
-
-       * script.h (scm_shell-usage, scm_compile_shell_switches): New
+       * posix.c (scm_getgrgid, scm_getpwuid): Same.
+       
+       * script.h (scm_shell_usage, scm_compile_shell_switches): New
        external declarations.  These are useful.
 
 Thu May 15 05:21:36 1997  Gary Houston  <ghouston@actrix.gen.nz>
        external declarations.  These are useful.
 
 Thu May 15 05:21:36 1997  Gary Houston  <ghouston@actrix.gen.nz>
@@ -12,7 +13,7 @@ Thu May 15 05:21:36 1997  Gary Houston  <ghouston@actrix.gen.nz>
        * posix.c: don't include <sys/select.h> or define macros for
        select, since they were not used in this file.
 
        * posix.c: don't include <sys/select.h> or define macros for
        select, since they were not used in this file.
 
-*      * filesys.c (scm_select): make the fifth parameter microseconds,
+       * filesys.c (scm_select): make the fifth parameter microseconds,
        not milliseconds.  let the fourth parameter be either a real value
        or an integer or #f.  The first, second and third arguments can
        now be vectors: the type of the corresponding return set will be
        not milliseconds.  let the fourth parameter be either a real value
        or an integer or #f.  The first, second and third arguments can
        now be vectors: the type of the corresponding return set will be
@@ -150,7 +151,7 @@ Sun Apr 27 17:57:15 1997  Jim Blandy  <jimb@floss.cyclic.com>
 Thu Apr 24 00:41:08 1997  Jim Blandy  <jimb@floss.cyclic.com>
 
        Functions for finding variable bindings, grace à Tim Pierce.
 Thu Apr 24 00:41:08 1997  Jim Blandy  <jimb@floss.cyclic.com>
 
        Functions for finding variable bindings, grace à Tim Pierce.
-*      * gh_data.c (gh_lookup, gh_module_lookup): New functions.
+       * gh_data.c (gh_lookup, gh_module_lookup): New functions.
        * gh.h (gh_lookup, gh_module_lookup): New prototypes.
 
        Get 'make dist' to work again.
        * gh.h (gh_lookup, gh_module_lookup): New prototypes.
 
        Get 'make dist' to work again.
@@ -298,7 +299,7 @@ Sun Apr 13 23:03:55 1997  Jim Blandy  <jimb@floss.cyclic.com>
 
 Fri Apr 11 14:12:13 1997  Jim Blandy  <jimb@floss.cyclic.com>
 
 
 Fri Apr 11 14:12:13 1997  Jim Blandy  <jimb@floss.cyclic.com>
 
-*      * filesys.c (scm_fcntl): New function from Roland McGrath.
+       * filesys.c (scm_fcntl): New function from Roland McGrath.
        (scm_init_filesys): New symbols for use with fcntl.
        * filesys.h: Added prototype.
 
        (scm_init_filesys): New symbols for use with fcntl.
        * filesys.h: Added prototype.
 
@@ -348,7 +349,7 @@ Wed Apr  9 09:08:54 1997  Gary Houston  <ghouston@actrix.gen.nz>
        (scm_strftime): don't call mktime before strftime.  Use
        filltime for return value.
        (filltime): convert NULL zname to #f.
        (scm_strftime): don't call mktime before strftime.  Use
        filltime for return value.
        (filltime): convert NULL zname to #f.
-*      (scm_strptime): return a count of characters consumed, not
+       (scm_strptime): return a count of characters consumed, not
        the remaining string.
 
 Sun Apr  6 05:44:11 1997  Gary Houston  <ghouston@actrix.gen.nz>
        the remaining string.
 
 Sun Apr  6 05:44:11 1997  Gary Houston  <ghouston@actrix.gen.nz>
@@ -417,7 +418,7 @@ Mon Mar 31 03:22:37 1997  Gary Houston  <ghouston@actrix.gen.nz>
        * posix.h: add prototype for scm_close_pipe, remove prototypes for
        scm_open_input_pipe, scm_open_output_pipe, change scm_mknod prototype.
 
        * posix.h: add prototype for scm_close_pipe, remove prototypes for
        scm_open_input_pipe, scm_open_output_pipe, change scm_mknod prototype.
 
-*      * posix.c (scm_mknod): split the mode argument into type and perms
+       * posix.c (scm_mknod): split the mode argument into type and perms
        arguments, like the extra fields returned by stat.
 
        * fports.c (scm_pipob): set the close, free and print procedures.
        arguments, like the extra fields returned by stat.
 
        * fports.c (scm_pipob): set the close, free and print procedures.
@@ -545,7 +546,7 @@ Thu Mar 13 18:31:33 1997  Mikael Djurfeldt  <mdj@mdj.nada.kth.se>
        * unif.c (scm_array_set_x): Cast ICHR (obj) to char if storing in
        a scm_tc7_byvect.
 
        * unif.c (scm_array_set_x): Cast ICHR (obj) to char if storing in
        a scm_tc7_byvect.
 
-       * ramap.c (scm_ra_matchp, scm_ra_matchp, scm_array_fill_int, racp,
+       * ramap.c (scm_ra_matchp, scm_array_fill_int, racp,
        scm_array_index_map_x, raeql_1, scm_array_equal_p): Completed
        support for byte vectors.
 
        scm_array_index_map_x, raeql_1, scm_array_equal_p): Completed
        support for byte vectors.
 
@@ -580,7 +581,7 @@ Mon Mar 10 06:28:54 1997  Gary Houston  <ghouston@actrix.gen.nz>
        Setup scm_keyword_prefix symbol.
        (scm_lreadr): Only process keywords if SCM_KEYWORD_STYLE is
        set to 'prefix.
        Setup scm_keyword_prefix symbol.
        (scm_lreadr): Only process keywords if SCM_KEYWORD_STYLE is
        set to 'prefix.
-*      I've left keyword support disabled by default, since it doesn't
+       I've left keyword support disabled by default, since it doesn't
        seem to break the module system and it gives R4RS standard behaviour.
        It can be reactivated with (read-set! keywords 'prefix).
 
        seem to break the module system and it gives R4RS standard behaviour.
        It can be reactivated with (read-set! keywords 'prefix).
 
@@ -622,7 +623,7 @@ Sat Mar  8 00:27:05 1997  Gary Houston  <ghouston@actrix.gen.nz>
        * read.c (scm_read_hash_procedures): new variable.
        (scm_read_hash_extend): new procedure.
        (scm_get_hash_procedure): new procedure.
        * read.c (scm_read_hash_procedures): new variable.
        (scm_read_hash_extend): new procedure.
        (scm_get_hash_procedure): new procedure.
-*      (scm_lreadr): use scm_get_hash_procedure instead of an argument
+       (scm_lreadr): use scm_get_hash_procedure instead of an argument
        for extended # processing.
        (scm_read, scm_lreadr, scm_lreadrecparen, scm_lreadparen,
        scm_read_token): remove case_i, sharp arguments.  Change callers.
        for extended # processing.
        (scm_read, scm_lreadr, scm_lreadrecparen, scm_lreadparen,
        scm_read_token): remove case_i, sharp arguments.  Change callers.
@@ -633,7 +634,7 @@ Fri Mar  7 08:58:21 1997  Gary Houston  <ghouston@actrix.gen.nz>
        (SCM_CASE_INSENSITIVE_P): define.
 
        * read.c: add case-insensitive option to scm_read_opts.
        (SCM_CASE_INSENSITIVE_P): define.
 
        * read.c: add case-insensitive option to scm_read_opts.
-*      (scm_read_token): use SCM_CASE_INSENSITIVE_P instead of an argument
+       (scm_read_token): use SCM_CASE_INSENSITIVE_P instead of an argument
        to determine whether to convert symbol case.
        (default_case_i): definition removed.
        * read.c (scm_read_token): if case_i, downcase ic before doing
        to determine whether to convert symbol case.
        (default_case_i): definition removed.
        * read.c (scm_read_token): if case_i, downcase ic before doing
@@ -668,7 +669,7 @@ Fri Mar  7 19:38:18 1997  Mikael Djurfeldt  <mdj@mdj.nada.kth.se>
        debug support twice, but it also seems to increase the speed of
        the evaluator for such calls (e. g. (+ 1 2 3)).
 
        debug support twice, but it also seems to increase the speed of
        the evaluator for such calls (e. g. (+ 1 2 3)).
 
-*      * backtrace.c (scm_display_application): New procedure:
+       * backtrace.c (scm_display_application): New procedure:
        display-application; Set fancy printing parameters individually
        for different types of display (backtrace, error, application).
        (These should of course be customizable!)
        display-application; Set fancy printing parameters individually
        for different types of display (backtrace, error, application).
        (These should of course be customizable!)
@@ -690,7 +691,7 @@ Wed Mar  5 23:31:21 1997  Mikael Djurfeldt  <mdj@mdj.nada.kth.se>
        (scm_symbol_hash): Bugfix: Must msymbolize if tc7_ssymbol, othwise
        we get segmentation fault!
 
        (scm_symbol_hash): Bugfix: Must msymbolize if tc7_ssymbol, othwise
        we get segmentation fault!
 
-*      * symbols.c: Added #include "weaks.h".  New functions:
+       * symbols.c: Added #include "weaks.h".  New functions:
        `builtin-bindings' and `builtin-weak-bindings'.  (These will be
        moved to an extraneous library when we split libguile.)
 
        `builtin-bindings' and `builtin-weak-bindings'.  (These will be
        moved to an extraneous library when we split libguile.)
 
@@ -905,7 +906,7 @@ Tue Feb  4 16:57:40 1997  Jim Blandy  <jimb@floss.cyclic.com>
 
 Tue Feb  4 05:07:35 1997  Gary Houston  <ghouston@actrix.gen.nz>
 
 
 Tue Feb  4 05:07:35 1997  Gary Houston  <ghouston@actrix.gen.nz>
 
-*      * net_db.c (scm_lnaof): change scheme name from lnaof to inet-lnaof.
+       * net_db.c (scm_lnaof): change scheme name from lnaof to inet-lnaof.
 
 Mon Feb  3 06:12:37 1997  Gary Houston  <ghouston@actrix.gen.nz>
 
 
 Mon Feb  3 06:12:37 1997  Gary Houston  <ghouston@actrix.gen.nz>
 
@@ -924,7 +925,7 @@ Fri Jan 31 04:33:11 1997  Gary Houston  <ghouston@actrix.gen.nz>
 
        * ioext.c, ioext.h: remove obsolete _sys_ from 9 procedure names.
        
 
        * ioext.c, ioext.h: remove obsolete _sys_ from 9 procedure names.
        
-*      * posix.c (scm_fork): Scheme name changed from fork to primitive-fork,
+       * posix.c (scm_fork): Scheme name changed from fork to primitive-fork,
        to avoid clash with various scsh forks.
 
 Thu Jan 30 20:14:09 1997  Mikael Djurfeldt  <mdj@syk-0606.pdc.kth.se>
        to avoid clash with various scsh forks.
 
 Thu Jan 30 20:14:09 1997  Mikael Djurfeldt  <mdj@syk-0606.pdc.kth.se>
@@ -960,11 +961,11 @@ Fri Jan 24 06:16:32 1997  Gary Houston  <ghouston@actrix.gen.nz>
        * __scm.h: uncomment SCM_ARG6 and SCM_ARG7, I needed SCM_ARG6.
 
        * ioext.h: update prototypes.
        * __scm.h: uncomment SCM_ARG6 and SCM_ARG7, I needed SCM_ARG6.
 
        * ioext.h: update prototypes.
-*      * ioext.c (scm_read_delimited_x): replaces scm_read_line and
+       * ioext.c (scm_read_delimited_x): replaces scm_read_line and
        scm_read_line_x, it's a more general procedure using an
        interface from scsh.  read-line and read-line! are now defined
        in boot-9.scm.
        scm_read_line_x, it's a more general procedure using an
        interface from scsh.  read-line and read-line! are now defined
        in boot-9.scm.
-*      Note that the new read-line trims the terminator
+       Note that the new read-line trims the terminator
        by default, previously it was appended to the returned string.  An
        optional argument specifies how to process the terminator (scsh
        compatible).  For the old behaviour: (read-line port 'concat).
        by default, previously it was appended to the returned string.  An
        optional argument specifies how to process the terminator (scsh
        compatible).  For the old behaviour: (read-line port 'concat).
@@ -975,7 +976,7 @@ Fri Jan 24 06:16:32 1997  Gary Houston  <ghouston@actrix.gen.nz>
        socket.h: update prototypes.
        * socket.c (scm_recvfrom): for consistency with other procedures,
        take start and end as separate optional arguments.
        socket.h: update prototypes.
        * socket.c (scm_recvfrom): for consistency with other procedures,
        take start and end as separate optional arguments.
-*      (scm_recv, scm_recvfrom): don't allow the second argument
+       (scm_recv, scm_recvfrom): don't allow the second argument
        to be a size, only a buffer.  Change the scheme names to
        recv! and recvfrom!.  Don't return the buffer.
 
        to be a size, only a buffer.  Change the scheme names to
        recv! and recvfrom!.  Don't return the buffer.
 
@@ -1027,14 +1028,14 @@ Sat Jan 18 00:03:31 1997  Gary Houston  <ghouston@actrix.gen.nz>
        SCM_FD.
        * filesys.c (scm_sys_stat, scm_sys_lstat): pass errno to
        scm_syserror_msg.
        SCM_FD.
        * filesys.c (scm_sys_stat, scm_sys_lstat): pass errno to
        scm_syserror_msg.
-*      (scm_sys_read_fd, scm_sys_write_fd, scm_sys_close, scm_sys_lseek,
+       (scm_sys_read_fd, scm_sys_write_fd, scm_sys_close, scm_sys_lseek,
        scm_sys_dup): deleted: FD capability will be added to other
        procedures.
        scm_sys_dup): deleted: FD capability will be added to other
        procedures.
-*      Remove support for the FD object type: scm_tc16_fd, scm_fd_print,
+       Remove support for the FD object type: scm_tc16_fd, scm_fd_print,
        scm_fd_free, fd_smob, scm_intern_fd.
        scm_fd_free, fd_smob, scm_intern_fd.
-*      (scm_open): renamed from scm_sys_open.  Return a port instead of
+       (scm_open): renamed from scm_sys_open.  Return a port instead of
        an FD object.  Make the mode argument optional.
        an FD object.  Make the mode argument optional.
-*      (scm_sys_create): deleted, it's just a special case of open.
+       (scm_sys_create): deleted, it's just a special case of open.
        (scm_init_filesys): move interning of constants O_CREAT etc.,
        here (were previously using SCM_CONST_LONG macro).
        Add missing constants: O_RDONLY, O_WRONLY, O_RDWR, O_CREAT.
        (scm_init_filesys): move interning of constants O_CREAT etc.,
        here (were previously using SCM_CONST_LONG macro).
        Add missing constants: O_RDONLY, O_WRONLY, O_RDWR, O_CREAT.