478 lines
22 KiB
Plaintext
478 lines
22 KiB
Plaintext
|
PC Scheme Version 3.03 Release Notes
|
|||
|
|
|||
|
This document describes the changes in PC Scheme since version 2.0.
|
|||
|
|
|||
|
|
|||
|
PC Scheme 3.0 features
|
|||
|
----------------------
|
|||
|
|
|||
|
Version 3.0 contains bug fixes, significant enhancements over 2.0, and
|
|||
|
has been upgraded to the latest Scheme Standard as defined by the "Revised
|
|||
|
Revised Revised (R^3) Report on the Algorithmic Language Scheme." A copy
|
|||
|
of that report is now included in the 3.0 manuals.
|
|||
|
|
|||
|
Also included in this document is a number of features which are not
|
|||
|
documented in the Language Reference Manual nor the User's Guide, but
|
|||
|
which may be useful for programming.
|
|||
|
|
|||
|
R^3 Report Changes
|
|||
|
------------------
|
|||
|
|
|||
|
1. #T and #F now replace #!TRUE and #!FALSE. #!TRUE and #!FALSE are
|
|||
|
still supported in 3.0, however their use is discouraged and they
|
|||
|
may not be supported in future versions.
|
|||
|
|
|||
|
2. Quasiquote expressions may now be nested and are defined to work
|
|||
|
with vectors. The keywords UNQUOTE (",") and UNQUOTE-SPLICING (",@")
|
|||
|
are also now recognized.
|
|||
|
|
|||
|
3. The defining form (DEFINE (<variable> <formals>) <body>) no longer
|
|||
|
expands into a NAMED-LAMBDA as specified in the Report. To support
|
|||
|
code written under earlier versions of Scheme, the global variable
|
|||
|
PCS-INTEGRATE-DEFINE may be set non-nil to force the expansion, or
|
|||
|
nil to conform to the Report. Its default value is #T.
|
|||
|
|
|||
|
4. BOOLEAN? is a new procedure which indicates if an object is either
|
|||
|
#T or #F (ie., (BOOLEAN? #T) => #T).
|
|||
|
|
|||
|
5. PROCEDURE? is a new procedure which indicates if an object is a
|
|||
|
procedure (ie., (PROCEDURE? CAR) => #T).
|
|||
|
|
|||
|
6. The expression types NAMED-LAMBDA, REC, and SEQUENCE have been removed
|
|||
|
from the Report but will continue to be supported as extensions.
|
|||
|
|
|||
|
7. The following procedures have been removed from the report, however
|
|||
|
they will continue to be supported as extensions:
|
|||
|
|
|||
|
APPEND!, STRING-NULL?, SUBSTRING-FILL!, SUBSTRING-MOVE-LEFT!,
|
|||
|
SUBSTRING-MOVE-RIGHT!, OBJECT-HASH, OBJECT-UNHASH, 1+, -1+.
|
|||
|
|
|||
|
8. The redundant procedure names <?, <=?, =?, >?, and >=? have been removed
|
|||
|
from the Report and will be supported in this release, however their use
|
|||
|
is discouraged and future versions may not support them.
|
|||
|
|
|||
|
9. The syntax #!NULL (for the empty list) has been removed from the report.
|
|||
|
Its usage is also discouraged and may not be supported in the future.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Bug Fixes
|
|||
|
---------
|
|||
|
|
|||
|
1. DEFINE has been corrected to bind a variable in the correct environment.
|
|||
|
Earlier versions of PCS could incorrectly rebind variables defined in
|
|||
|
parent environments, if the variable did not exist in the defining
|
|||
|
environment.
|
|||
|
|
|||
|
2. IMPLODE now flags an error if given a non-list object.
|
|||
|
|
|||
|
3. NUMBER->STRING has fixes to correct problems with the '(heur) format.
|
|||
|
|
|||
|
4. Shift/Break now correctly halts printing of circular lists.
|
|||
|
|
|||
|
5. INPUT-PORT? and OUTPUT-PORT? have been corrected to return '() after the
|
|||
|
port is closed.
|
|||
|
|
|||
|
6. Expanded Memory Scheme no longer requires the EMM page frame to be on a
|
|||
|
64kb boundary.
|
|||
|
|
|||
|
7. Drawing a line from x1,y1 to x2,y2 and later erasing it in the
|
|||
|
direction x2,y2 to x1,y1 now correctly resets all the intermediate
|
|||
|
pixels.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Enhancements/New Features
|
|||
|
-------------------------
|
|||
|
|
|||
|
1. Graphics has undergone significant changes which are documented in the
|
|||
|
User's Guide and Language Reference Manual. Following is a synopsis of
|
|||
|
the changes:
|
|||
|
|
|||
|
* The %GRAPHICS primitives now accept a seventh argument to specify
|
|||
|
an exclusive-or when drawing pixels or lines.
|
|||
|
|
|||
|
* A new %GRAPHICS function has been included which allows you to set
|
|||
|
a clipping rectangle which subsequent drawing functions use. All
|
|||
|
%GRAPHICS drawing routines now use the clipping rectangle.
|
|||
|
|
|||
|
* New graphics functions:
|
|||
|
(GET-PEN-COLOR) - returns the pen's color.
|
|||
|
(GET-PEN-POSITION) - returns the pen's position.
|
|||
|
(POINT-COLOR) - returns a point's color value.
|
|||
|
(SET-CLIPPING-RECTANGLE! x1 y1 x2 y2) - set clipping rectangle.
|
|||
|
|
|||
|
* Modes 14 and 16 for the EGA are now supported.
|
|||
|
|
|||
|
* CLEAR-GRAPHICS no longer automatically switches into mode 4, but
|
|||
|
remains in the current video mode. SET-VIDEO-MODE! will automati-
|
|||
|
cally do a CLEAR-GRAPHICS after changing modes.
|
|||
|
|
|||
|
2. EDWIN contains several changes to help in its performance and flexibility.
|
|||
|
|
|||
|
* The file EDWIN.INI will be loaded if it exists within the PCS
|
|||
|
directory. EDWIN.INI may contain code to customize the display,
|
|||
|
or remap the keyboard. See EDWIN.INI for examples.
|
|||
|
|
|||
|
* Edwin now loads into its own environment, EDWIN-ENVIRONMENT. This
|
|||
|
reduces the number of variables in the USER-GLOBAL-ENVIRONMENT and
|
|||
|
allows EDWIN to be removed via the new REMOVE-EDWIN command.
|
|||
|
|
|||
|
* REMOVE-EDWIN is a procedure of no arguments which may now be called
|
|||
|
to remove references to EDWIN so that it will disappear upon the
|
|||
|
next garbage collection. Remember that if EDWIN was loaded from
|
|||
|
SCHEME-TOP-LEVEL, the history will still contain pointers to EDWIN,
|
|||
|
prohibiting it from being garbage collected. In that case, you must
|
|||
|
perform a SCHEME-RESET prior to the garbage collect to remove all
|
|||
|
references to EDWIN.
|
|||
|
|
|||
|
* EDWIN will now query the user upon exiting Scheme, if its buffers
|
|||
|
have been modified but not written back out to the file.
|
|||
|
|
|||
|
* The time required to load files into EDWIN's buffer has been
|
|||
|
significantly reduced.
|
|||
|
|
|||
|
3. PC Scheme now contains an External Language Interface (XLI) to support
|
|||
|
the calling of subroutines written in other languages. XLI has been
|
|||
|
tested to work with assembly, C and Pascal. See the chapter "External
|
|||
|
Language Interface (XLI)" in the User's Guide for more information.
|
|||
|
|
|||
|
4. Transcendental functions have been rewritten using XLI and
|
|||
|
use the 8087/80287 numeric coprocessor when it is available.
|
|||
|
Accuracy is true double-precision and performance is significantly
|
|||
|
improved, even without the 8087. The complete source code of this
|
|||
|
XLI interface is included. Refer to the chapter "External Language
|
|||
|
Interface (XLI)" in the User's Guide for more information.
|
|||
|
|
|||
|
5. A semi-interpretive EVAL has been implemented. EVAL now works
|
|||
|
interpretively until it encounters a binding form (such as LAMBDA,
|
|||
|
LET, etc.), at which time the compiler will be invoked.
|
|||
|
|
|||
|
6. READ-LINE has been implemented as a primitive operation and will now echo
|
|||
|
to the screen when called to read from the console.
|
|||
|
|
|||
|
7. LIST-TAIL has been implemented as a primitive operation. Both LIST-REF
|
|||
|
and LIST-TAIL gain significant performance increases.
|
|||
|
|
|||
|
8. Random I/O is now supported via SET-FILE-POSITION! and GET-FILE-POSITION.
|
|||
|
See the description in the Language Reference Manual.
|
|||
|
|
|||
|
9. Binary file input and output is now supported via OPEN-BINARY-INPUT-FILE
|
|||
|
and OPEN-BINARY-OUTPUT-FILE procedures. See the description in the
|
|||
|
Language Reference Manual.
|
|||
|
|
|||
|
10. The non-essential procedure STRING->NUMBER from the R^3 Report is now
|
|||
|
included. See the description in the Language Reference Manual.
|
|||
|
|
|||
|
11. #\ESCAPE has been added as a system defined character.
|
|||
|
|
|||
|
12. Enhanced error handling is now available, and DOS I/O errors now trap
|
|||
|
to the inspector, with extended error information available. Reference
|
|||
|
the User's Guide under the chapter "DEBUGGING" for information on
|
|||
|
defining your own error handler via *USER-ERROR-HANDLER*.
|
|||
|
|
|||
|
13. New procedures EXPAND-MACRO-1, EXPAND-MACRO, and EXPAND. EXPAND-MACRO-1
|
|||
|
will expand the outer-level of some form once and return the expanded
|
|||
|
form, EXPAND-MACRO will repeatedly expand the outer-level form until it
|
|||
|
is no longer a macro, and EXPAND will expand the entire form (outer and
|
|||
|
inner level forms), returning an expansion.
|
|||
|
|
|||
|
Example: (EXPAND-MACRO '(let ((a 1) (b 2)) (foo a b)))
|
|||
|
|
|||
|
*** Note ***
|
|||
|
When expanding various forms with the above procedures, you may
|
|||
|
encounter references to primitive operations. These primitive oper-
|
|||
|
ations typically begin with one or more percent signs (%), are
|
|||
|
generally not available for direct use by the user, and may change
|
|||
|
in future versions of PC Scheme.
|
|||
|
|
|||
|
14. The random number generator can be reseeded using the RANDOMIZE
|
|||
|
function. See the description in the Language Reference Manual.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Corrections to the Manuals
|
|||
|
--------------------------
|
|||
|
|
|||
|
The following corrections to the User's Guide should be noted.
|
|||
|
|
|||
|
1. At the top of page 8-16, the request number to be used for the
|
|||
|
"swap" special service request was omitted. The bullet that reads:
|
|||
|
|
|||
|
* swap
|
|||
|
|
|||
|
should be replaced with:
|
|||
|
|
|||
|
* swap (request number = 1)
|
|||
|
|
|||
|
2. On page C-1 the symbol "remap" is equated with interrupt 7fh.
|
|||
|
However, the comment just below it refers to interrupt 60h.
|
|||
|
The correct interrupt number is 7fh. Therefore, the comment that reads:
|
|||
|
|
|||
|
; This example uses the interrupt at 60h; refer to ...
|
|||
|
|
|||
|
should be replaced with:
|
|||
|
|
|||
|
; This example uses the interrupt at 7fh; refer to ...
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Undocumented/Non-Standard Features
|
|||
|
----------------------------------
|
|||
|
|
|||
|
The following features are undocumented features which may or may not be
|
|||
|
supported in future releases. They certainly are not standard Scheme
|
|||
|
features and prohibit portability, but may be useful in some cases.
|
|||
|
|
|||
|
|
|||
|
1. GRAPHICS-WINDOW is a function which may be useful in creating graphics
|
|||
|
windows. It is currently in an experimental stage, is not fully complete,
|
|||
|
and is subject to change. Still, it is useful in its current form, and
|
|||
|
you may try it out at your own risk.
|
|||
|
|
|||
|
GRAPHICS-WINDOW is a "marker" function indicating that the next series
|
|||
|
of MIT graphics functions will execute relative to a specified window
|
|||
|
instead of the full screen. It takes one argument, a window object
|
|||
|
(a port), and returns a 2-list of 4-lists. The first list is the
|
|||
|
clipping rectangle for the window's interior using window-centered
|
|||
|
coordinates, expressed as (left top right bottom), for use by the MIT
|
|||
|
functions, and the second list is the same rectangle expressed in
|
|||
|
screen coordinates for use by %GRAPHICS. It changes the graphics
|
|||
|
state known by the MIT functions and sets the clipping rectangle to
|
|||
|
correspond to the window's interior so that further use of the MIT
|
|||
|
functions will execute relative to the window instead of the full screen.
|
|||
|
Aside from setting the clipping rectangle, there are no other effects
|
|||
|
on %GRAPHICS.
|
|||
|
|
|||
|
After executing GRAPHICS-WINDOW on a window for the first time, a call
|
|||
|
to CLEAR-GRAPHICS should be issued to set the pen position and color
|
|||
|
and erase the graphics plane under the window (which may erase text
|
|||
|
too if they share the same plane). Further graphics commands are
|
|||
|
issued normally.
|
|||
|
|
|||
|
To move from one graphics window to another, use GRAPHICS-WINDOW with
|
|||
|
the next window. Note that when you move to another window, the graphics
|
|||
|
state (window, pen color, and pen position) of the first window is
|
|||
|
forgotten. You will need to save it off if you want to come back and
|
|||
|
start up where you left off. The functions CURRENT-GRAPHICS-WINDOW,
|
|||
|
GET-PEN-COLOR, and GET-PEN-POSITION, executed before the switch, will
|
|||
|
give you this information.
|
|||
|
|
|||
|
While executing relative to a window, CLEAR-GRAPHICS will not affect
|
|||
|
the entire screen. To reset CLEAR-GRAPHICS to its initial state
|
|||
|
where it does affect the entire screen, do (GRAPHICS-WINDOW 'SCREEN)
|
|||
|
followed by (CLEAR-GRAPHICS). Executing SET-VIDEO-MODE! any time will do
|
|||
|
this automatically. Note that (GRAPHICS-WINDOW 'SCREEN) is not the same
|
|||
|
as (GRAPHICS-WINDOW 'CONSOLE); although the console generally matches the
|
|||
|
screen, it doesn't have to--it's a window in its own right.
|
|||
|
|
|||
|
2. %LOGAND, %LOGIOR, %LOGXOR are procedures of two arguments and are used
|
|||
|
to perform the bitwise logical operations and, or, and xor. The
|
|||
|
arguments must be 15 bit integers.
|
|||
|
|
|||
|
3. UNBIND is a procedure which may be used to remove bindings from
|
|||
|
environments. The call to unbind is as follows:
|
|||
|
|
|||
|
(UNBIND 'VAR ENV)
|
|||
|
|
|||
|
Where : VAR is the variable you wish to remove
|
|||
|
ENV is any heap allocated environment, including the
|
|||
|
user-initial and user-global environments.
|
|||
|
|
|||
|
Unbind can be useful in providing user-assisted memory management.
|
|||
|
If an object which is auto-loadable is unbound via the UNBIND
|
|||
|
procedure, it may later be auto-loaded again. Therefore, if you
|
|||
|
define autoload lists, you can maintain some control over what
|
|||
|
code you desire in memory.
|
|||
|
|
|||
|
4. Autoload information created from the function AUTOLOAD-FROM-FILE (see
|
|||
|
chapter titled "ADVANCED FEATURES" in User's Guide) is stored on a
|
|||
|
property list under the name PCS-AUTOLOAD-INFO. Scheme defines a number
|
|||
|
of autoload entries of its own, and any that you add will be consed
|
|||
|
onto the autoload list. You can see the autoload information by
|
|||
|
performing (GETPROP 'PCS-AUTOLOAD-INFO).
|
|||
|
|
|||
|
The procedure AUTOLOAD-FROM-FILE also takes an optional third argument
|
|||
|
which indicates the environment that you want the file loaded into. For
|
|||
|
example
|
|||
|
|
|||
|
(autoload-from-file "DEFS.FSL" '(foo bar baz) user-initial-environment)
|
|||
|
|
|||
|
will load the file "DEFS.FSL" into the user-initial-environment whenever
|
|||
|
foo, bar, or baz is referenced. The optional environment argument can
|
|||
|
be any heap allocated environment. To add or delete entries from the
|
|||
|
autoload list just write your own functions to modify the list, however
|
|||
|
if you remove any of the compiler dependent files from the list, a
|
|||
|
reference to one of its functions will cause errors.
|
|||
|
|
|||
|
The undocumented procedure REMOVE-AUTOLOAD-INFO may be used to remove
|
|||
|
information from the autoload list. REMOVE-AUTOLOAD-INFO takes one
|
|||
|
argument, the filename of the autoload entry you wish to remove, and
|
|||
|
then removes the autoload information from the list. This function,
|
|||
|
along with UNBIND can be used to help the user perform memory manage-
|
|||
|
ment.
|
|||
|
|
|||
|
5. MAKE-HASHED-ENVIRONMENT is a procedure of no arguments which creates
|
|||
|
an environment in the Scheme heap in the form of a hash table for
|
|||
|
better accessing. The hash table contains 211 entries; any time a
|
|||
|
variable is defined in that environment a hash key will be determined
|
|||
|
via an internal hash function to find the correct entry. This is
|
|||
|
identical to the user global and user initial environments. A hashed
|
|||
|
environment's parent is the user-initial-environment.
|
|||
|
|
|||
|
A hashed environment will provide better access times than normal
|
|||
|
environments, given there are a lot of variables in the environment.
|
|||
|
However, there is certainly a space/time tradeoff to consider. The
|
|||
|
hashed environment contains much more overhead which will be wasted
|
|||
|
if you need only a handfull of variables.
|
|||
|
|
|||
|
One advantage of the hashed environment, as with all environments,
|
|||
|
is that if you discard all references to the environment, it will
|
|||
|
be garbage collected and all the space may be reclaimed. This means
|
|||
|
that you must keep track of all variables or references which are
|
|||
|
exported to other environments. Also, if you define a macro within
|
|||
|
an environment, the macro definition holds a reference to the
|
|||
|
environment and will prohibit garbage collection of the environment.
|
|||
|
Macro definitions may be found under the property PCS*MACRO of the
|
|||
|
macro name declared.
|
|||
|
|
|||
|
6. While the 3.0 implementation of transcendental functions is much
|
|||
|
faster and more accurate and therefore to be preferred, the 2.0
|
|||
|
version had the advantage of being about half the size. If space is
|
|||
|
more important than speed or accuracy, you can do the following:
|
|||
|
|
|||
|
1. Invoke PC Scheme as usual, except put a minus sign in front
|
|||
|
of the .XLI control file name; this prevents XLI from
|
|||
|
loading NEWTRIG.EXE. For example:
|
|||
|
|
|||
|
pcs (my.ini -my.xli) arg1 arg2
|
|||
|
|
|||
|
2. Inside PC Scheme, do:
|
|||
|
(eval '(load "oldpmath.fsl") user-global-environment)
|
|||
|
If your current directory is not the PC Scheme directory,
|
|||
|
you'll need to append the value of the system variable
|
|||
|
PCS-SYSDIR to the front of the filename. The LOAD must be
|
|||
|
inside the EVAL so that autoload references to pmath.fsl
|
|||
|
will be intercepted correctly.
|
|||
|
|
|||
|
It is not absolutely necessary to do step 1 just to use oldpmath.fsl,
|
|||
|
but the space savings won't be realized without it. Also, step 2
|
|||
|
should be done soon upon entering PC Scheme, as various system
|
|||
|
functions, such as some Edwin commands, require the math functions
|
|||
|
(whether through XLI\pmath.fsl or through oldpmath.fsl) to be loaded.
|
|||
|
|
|||
|
PC Scheme 3.02 features
|
|||
|
-----------------------
|
|||
|
|
|||
|
The following bugs have been fixed.
|
|||
|
|
|||
|
1. There were several obscure bugs in the extended and expanded memory
|
|||
|
models of PC Scheme which have been corrected. Also, extended memory
|
|||
|
performance has been enhanced by about 25%.
|
|||
|
|
|||
|
2. PC Scheme 3.02 recognizes an IBM PS/2 Model 80. IBM has assigned
|
|||
|
a new machine-type number to it, which is reflected in the value
|
|||
|
of PCS-MACHINE-TYPE. More importantly, FREESP in extended memory
|
|||
|
PC Scheme now works correctly on the Model 80.
|
|||
|
|
|||
|
3. EQUAL? on ports no longer causes a type mismatch error.
|
|||
|
|
|||
|
4. There was a bug in determining the pathname of NEWTRIG.EXE when
|
|||
|
PC Scheme had been installed in the root directory. This usually
|
|||
|
showed itself when running PC Scheme from floppy disks.
|
|||
|
|
|||
|
5. In the form (SET! (ACCESS var env) value), there was a bug in which
|
|||
|
environment the "value" was placed if the "var" did not already exist.
|
|||
|
|
|||
|
6. DOS-CALL no longer depends on the COMSPEC environment variable
|
|||
|
being listed first in the DOS environment.
|
|||
|
|
|||
|
7. Line-lengths for binary files are now automatically set to zero
|
|||
|
so end-of-line sequences are suppressed.
|
|||
|
|
|||
|
8. XLI checks for its version number. PC Scheme 3.02 uses the same
|
|||
|
version number as 3.0. The error message is "[XLI] Version mismatch".
|
|||
|
Also, the XLI error message "[XLI] The function requested by XCALL is not
|
|||
|
available" now is followed by the name of the function that failed.
|
|||
|
|
|||
|
10. PC Scheme's definition of EQV? says "=" is used to compare numeric
|
|||
|
arguments. However, MEMV and ASSV, which are supposed to use EQV?
|
|||
|
for their equality predicates, were really using EQUAL?. "=" and
|
|||
|
EQUAL? return different results when two numeric arguments have
|
|||
|
different types, so the fix may cause a change of behavior in how
|
|||
|
MEMV and ASSV work.
|
|||
|
|
|||
|
11. Internal "getmem" errors no longer cause an abort to DOS.
|
|||
|
Instead, the system performs a SCHEME-RESET. The error generally
|
|||
|
appears during output of extremely large data structures when
|
|||
|
I/O buffer space is exhausted, but the data structures themselves
|
|||
|
remain intact, so this should be adequate recovery in most cases.
|
|||
|
|
|||
|
12. A bug in SCOOPS was making the environments in which instance
|
|||
|
variables got created be dependent on the order in which the
|
|||
|
classes were compiled.
|
|||
|
|
|||
|
The following features are "new" to PC Scheme 3.02.
|
|||
|
|
|||
|
1. XLI can now receive error messages from external programs and drop into
|
|||
|
the Inspector displaying the error message.
|
|||
|
|
|||
|
The external program reports an error as follows. It formats the
|
|||
|
parameter block with a string as return value, where the string is
|
|||
|
the error message. However, instead of using a return-value type of
|
|||
|
2 (string), it should use a value of 10 (error-string). XLI will
|
|||
|
drop into the Inspector with the error message "[XLI] Error reported
|
|||
|
by external program" followed on the next line by the external
|
|||
|
program's error message (note the Inspector uses WRITE to display
|
|||
|
the message). The error is not restartable.
|
|||
|
|
|||
|
If an external program using this error technique is run under
|
|||
|
PC Scheme 3.0, XLI reports the different error "[XLI] The return value
|
|||
|
of XCALL is invalid" and the external program's error message never
|
|||
|
appears.
|
|||
|
|
|||
|
NEWTRIG.EXE has been reimplemented with this technique. Refer to
|
|||
|
the file XLI\TRIG_LC.C to examine the source code.
|
|||
|
|
|||
|
2. There are a couple more XLI source examples in the XLI directory.
|
|||
|
One is in assembly language, the other in C. One provides PC Scheme
|
|||
|
with sound capability, and the other demonstrates a way to run
|
|||
|
DOS-executable files without using DOS-CALL.
|
|||
|
|
|||
|
3. %GRAPHICS for EGA has been reimplemented to do direct screen writes.
|
|||
|
This gives a significant performance boost at the expense of generality,
|
|||
|
which may affect some EGA clones. Also, VGA modes 17 and 18 are now
|
|||
|
supported.
|
|||
|
|
|||
|
PC Scheme 3.03 features
|
|||
|
-----------------------
|
|||
|
|
|||
|
The following bugs have been fixed.
|
|||
|
|
|||
|
1. Random I/O has been fixed. If a file is opened with OPEN-EXTEND-FILE,
|
|||
|
one can perform both input from and output to that file.
|
|||
|
|
|||
|
2. An obscure garbage collection bug was fixed which envolved one defining
|
|||
|
their own top-level. If a user top-level has been defined instead of
|
|||
|
the Scheme-Top-level, and an out of memory encountered an error message
|
|||
|
occurred on the next garbage collect.
|
|||
|
|
|||
|
3. A garbage collection bug in extended memory was fixed. Compaction of
|
|||
|
list cells could sometimes cause problems.
|
|||
|
|
|||
|
4. A problem with DOS memory fragmentation was fixed. Upon returning from
|
|||
|
PC Scheme, all of memory was not being returned to DOS. This could some-
|
|||
|
times cause other programs to fail with "not enough memory" errors.
|
|||
|
|
|||
|
The following new features have been added:
|
|||
|
|
|||
|
1. Support has been added for VGA mode 18.
|
|||
|
|
|||
|
|
|||
|
2. One can now specify when garbage compaction should occur.
|
|||
|
|
|||
|
(GC-GET-COMPACT-COUNT! number) - specifies that a compaction should
|
|||
|
occur after every "number" of gc's.
|
|||
|
|
|||
|
(GC-GET-COMPACT-COUNT) - returns the current "number".
|
|||
|
|