* Changes to the distribution
-** libguile/append.h, libguile/append.c, libguile/sequences.h,
-libguile/sequences.c removed.
+** libguile/append.h, libguile/append.c, libguile/extchrs.h,
+libguile/extchrs.c, libguile/mbstrings.h libguile/mbstrings.c,
+libguile/sequences.h, libguile/sequences.c removed.
* Changes to the stand-alone interpreter
+** New procedures have been added to implement a "batch mode":
+
+*** Function: batch-mode?
+
+ Returns a boolean indicating whether the interpreter is in batch
+ mode.
+
+*** Function: set-batch-mode?! ARG
+
+ If ARG is true, switches the interpreter to batch mode. The `#f'
+ case has not been implemented.
+
+** Guile now provides full command-line editing, when run interactively.
+To use this feature, you must have the readline library installed.
+The Guile build process will notice it, and automatically include
+support for it.
+
+The readline library is available via anonymous FTP from any GNU
+mirror site; the canonical location is "ftp://prep.ai.mit.edu/pub/gnu".
+
* Changes to the procedure for linking libguile with your programs
+** You can now use the 'build-guile' utility to link against Guile.
+
+Guile now includes a command-line utility called 'build-guile', which
+writes to its standard output a list of flags which you must pass to
+the linker to link against the Guile library. The flags include
+'-lguile' itself.
+
+This is necessary because the Guile library may depend on other
+libraries for networking functions, thread support, and so on. To
+link your program against libguile, you must link against these
+libraries as well. The exact set of libraries depends on the type of
+system you are running, and what you have installed on it. The
+'build-guile' command uses information recorded in libguile itself to
+determine which libraries you must link against.
+
+For example, here is a Makefile rule that builds a program named 'foo'
+from the object files ${FOO_OBJECTS}, and links them against Guile:
+
+ foo: ${FOO_OBJECTS}
+ ${CC} ${CFLAGS} ${FOO_OBJECTS} `build-guile link` -o foo
+
+
* Changes to Scheme functions and syntax
+** Multi-byte strings have been removed, as have multi-byte and wide
+ports.
+
+** New function: readline [PROMPT]
+Read a line from the terminal, and allow the user to edit it,
+prompting with PROMPT. READLINE provides a large set of Emacs-like
+editing commands, lets the user recall previously typed lines, and
+works on almost every kind of terminal, including dumb terminals.
+
+READLINE assumes that the cursor is at the beginning of the line when
+it is invoked. Thus, you can't print a prompt yourself, and then call
+READLINE; you need to package up your prompt as a string, pass it to
+the function, and let READLINE print the prompt itself. This is
+because READLINE needs to know the prompt's screen width.
+
+For Guile to provide this function, you must have the readline library
+installed on your system.
+
+See also ADD-HISTORY function.
+
+** New function: add-history STRING
+Add STRING as the most recent line in the history used by the READLINE
+command. READLINE does not add lines to the history itself; you must
+call ADD-HISTORY to make previous input available to the user.
+
** Some magic has been added to the printer to better handle user
written printing routines (like record printers, closure printers).
** The following new procedures have been added (most use scsh
interfaces):
-** close PORT/FD
-Similar to close-port, but also works on file descriptors. A side
-effect of closing a file descriptor is that any ports using that file
-descriptor are moved to a different file descriptor and have
-their revealed counts set to zero.
-
-The next five procedures perform a dup2 system call, if NEWFD (an
-integer) is supplied, otherwise a dup. The file descriptor to be
-duplicated can be supplied as an integer or wrapped in a port. The
+** procedure: close PORT/FD
+ Similar to close-port (*note close-port: Closing Ports.), but also
+ works on file descriptors. A side effect of closing a file
+ descriptor is that any ports using that file descriptor are moved
+ to a different file descriptor and have their revealed counts set
+ to zero.
+
+** procedure: port->fdes PORT
+ Returns the integer file descriptor underlying PORT. As a side
+ effect the revealed count of PORT is incremented.
+
+** procedure: fdes->ports FDES
+ Returns a list of existing ports which have FDES as an underlying
+ file descriptor, without changing their revealed counts.
+
+** procedure: fdes->inport FDES
+ Returns an existing input port which has FDES as its underlying
+ file descriptor, if one exists, and increments its revealed count.
+ Otherwise, returns a new input port with a revealed count of 1.
+
+** procedure: fdes->outport FDES
+ Returns an existing output port which has FDES as its underlying
+ file descriptor, if one exists, and increments its revealed count.
+ Otherwise, returns a new output port with a revealed count of 1.
+
+ The next group of procedures perform a `dup2' system call, if NEWFD
+(an integer) is supplied, otherwise a `dup'. The file descriptor to be
+duplicated can be supplied as an integer or contained in a port. The
type of value returned varies depending on which procedure is used.
-All procedures also have the side effect when performing dup2 that any
-ports using NEWFD are moved to a different file descriptor and have
+ All procedures also have the side effect when performing `dup2' that
+any ports using NEWFD are moved to a different file descriptor and have
their revealed counts set to zero.
-** dup->fdes PORT/FD [NEWFD]
-Returns an integer file descriptor.
-
-** dup->inport PORT/FD [NEWFD]
-Returns a new input port using the new file descriptor.
+** procedure: dup->fdes PORT/FD [NEWFD]
+ Returns an integer file descriptor.
-** dup->outport PORT/FD [NEWFD]
-Returns a new output port using the new file descriptor.
+** procedure: dup->inport PORT/FD [NEWFD]
+ Returns a new input port using the new file descriptor.
-** dup PORT/FD [NEWFD]
-Returns a new port if PORT/FD is a port, with the same mode as the
-supplied port, otherwise returns an integer file descriptor.
+** procedure: dup->outport PORT/FD [NEWFD]
+ Returns a new output port using the new file descriptor.
-** dup->port PORT/FD MODE [NEWFD]
-Returns a new port using the new file descriptor. MODE supplies a
-mode string for the port (as for `open-file').
+** procedure: dup PORT/FD [NEWFD]
+ Returns a new port if PORT/FD is a port, with the same mode as the
+ supplied port, otherwise returns an integer file descriptor.
-** port->fdes PORT
-Returns the integer file descriptor underlying PORT. As a
-side effect the revealed count of PORT is incremented.
+** procedure: dup->port PORT/FD MODE [NEWFD]
+ Returns a new port using the new file descriptor. MODE supplies a
+ mode string for the port (*note open-file: File Ports.).
-** fdes->inport FDES
-Returns an existing input port which has FDES as its underlying file
-descriptor, if one exists, and increments its revealed count.
-Otherwise, returns a new input port with a revealed count of 1.
+** procedure: setenv NAME VALUE
+ Modifies the environment of the current process, which is also the
+ default environment inherited by child processes.
-** fdes->outport FDES
-Returns an existing output port which has FDES as its underlying file
-descriptor, if one exists, and increments its revealed count.
-Otherwise, returns a new output port with a revealed count of 1.
+ If VALUE is `#f', then NAME is removed from the environment.
+ Otherwise, the string NAME=VALUE is added to the environment,
+ replacing any existing string with name matching NAME.
-** setenv NAME VALUE
-If VALUE is `#f', removes NAME from the environment. Otherwise
-adds the string NAME=VALUE to the environment, replacing any previous
-value for NAME.
+ The return value is unspecified.
-** truncate-file OBJ SIZE
+** procedure: truncate-file OBJ SIZE
Truncates the file referred to by OBJ to at most SIZE bytes. OBJ
can be a string containing a file name or an integer file
descriptor or port open for output on the file. The underlying
The return value is unspecified.
-** setvbuf PORT MODE [SIZE]
+** procedure: setvbuf PORT MODE [SIZE]
Set the buffering mode for PORT. MODE can be:
`_IONBF'
non-buffered
size. Procedures e.g., *Note open-file: File Ports, which accept a
mode string allow `0' to be added to request an unbuffered port.
-** fsync PORT/FD
+** procedure: fsync PORT/FD
Copies any unwritten data for the specified output file descriptor
to disk. If PORT/FD is a port, its buffer is flushed before the
underlying file descriptor is fsync'd. The return value is
unspecified.
-** open-fdes PATH FLAGS [MODES]
+** procedure: open-fdes PATH FLAGS [MODES]
Similar to `open' but returns a file descriptor instead of a port.
** procedure: execle PATH ENV [ARG] ...
call, but we call it `execle' because of its Scheme calling
interface.
+** procedure: strerror ERRNO
+ Returns the Unix error message corresponding to ERRNO, an integer.
+
** procedure: primitive-exit [STATUS]
Terminate the current process without unwinding the Scheme stack.
This is would typically be useful after a fork. The exit status
** gh_list_length renamed to gh_length.
+** vector handling routines
+
+Several major changes. In particular, gh_vector() now resembles
+(vector ...) (with a caveat -- see manual), and gh_make_vector() now
+exists and behaves like (make-vector ...). gh_vset() and gh_vref()
+have been renamed gh_vector_set_x() and gh_vector_ref(). Some missing
+vector-related gh_ functions have been implemented.
+
+** pair and list routines
+
+Implemented several of the R4RS pair and list functions that were
+missing.
+
* Changes to the scm_ interface
** Function: SCM scm_internal_stack_catch (SCM tag,
** scm_array_map renamed to scm_array_map_x
+** mbstrings are now removed
+
+This means that the type codes scm_tc7_mb_string and
+scm_tc7_mb_substring has been removed.
+
+** The macros SCM_TYP7D and SCM_TYP7SD has been removed.
+
+** The macro SCM_TYP7S has taken the role of the old SCM_TYP7D
+
+SCM_TYP7S now masks away the bit which distinguishes substrings from
+strings.
+
+** All genio functions changed names and interfaces; new functions are
+scm_putc, scm_puts, scm_lfwrite, scm_getc, scm_ungetc, and
+scm_do_read_line.
+
\f
Changes in Guile 1.2 (released Tuesday, June 24 1997):