*** 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.
 
+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.
@@ -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").
 
+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
@@ -100,7 +163,279 @@ AC_CHECK_LIB(guile, scm_shell)
 
 * 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
@@ -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
 
-** 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
   ============================================== ================
@@ -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
 
-** 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
 
@@ -172,6 +591,109 @@ the user to interpret the data both ways.
 
 * 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,
@@ -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.
 
-** [[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
-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
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>
 
-*      * 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>
@@ -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.
 
-*      * 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! :-)
@@ -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 (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
@@ -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>
 
-*      * 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.
 
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.
-
-       * 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>
@@ -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.
 
-*      * 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
@@ -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.
-*      * 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.
@@ -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>
 
-*      * 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.
 
@@ -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_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>
@@ -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.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.
@@ -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.
 
-       * 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.
 
@@ -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.
-*      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).
 
@@ -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.
-*      (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.
@@ -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_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
@@ -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)).
 
-*      * 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!)
@@ -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!
 
-*      * 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.)
 
@@ -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>
 
-*      * 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>
 
@@ -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.
        
-*      * 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>
@@ -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.
-*      * 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.
-*      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).
@@ -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.
-*      (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.
 
@@ -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_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.
-*      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_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.
-*      (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.