@node Changes in 2.02, , Changes in 2.01, What Changed
@section Changes in 2.02

Here is a list of changes from DJGPP V2.01 to V2.02

@file{tests/libclink} no longer looks for DJGPP V1.

@file{emu387.dxe} has been rebuilt to reflect fpatan fixes.
@findex emu387

@file{mcount.c} no longer writes to the mono monitor.  This had caused
seg faults when profiling.
@findex mcount.c

You can now ``symlink'' to files with 8 character base names (like
12345678.exe).  Previously, @file{stub.asm} assumed al was zero when it
wasn't always that way.
@pindex stubedit
@findex stub.asm

@code{rawclock()} now actually returns the number of ticks since
midnight, not since program start.
@findex rawclock

@file{libc.tex} now uses ``Master Index'' instead of ``Index'' due
to conflicts with the node for @code{index}.
@findex libc.tex

@code{srand()} is now documented.
@findex srand

@code{memchr()} is now 8-bit clean.
@findex memchr

Documentation for @code{delay()} includes the header file.
@findex delay

@code{__dpmi_simulate_real_mode_procedure_iret()} is now properly
documented as DPMI call 0x0302.
@findex __dpmi_simulate_real_mode_procedure_iret()

@file{edebug} now unassembles @code{scasb} correctly.
@pindex edebug

Documentation for @code{qsort()} has correct prototypes
in the examples.
@findex qsort

@file{info/dir.txi} includes an entry for the FAQ.
@findex info/dir.txi

Functions in @file{conio.h} now support DOS/V's virtual screens.
@findex conio.h

@file{edebug} and other debuggers using the common debugging framework
will properly close files when they terminate the debuggee.
This allows to restart the debuggee without losing handles.
@findex dbgcom.c
@pindex edebug

@code{fnsplit()} now handles files like .emacs properly.
@findex fnsplit

@code{glob()} now handles files like .emacs properly.  This will fix
wildcard expansion on new programs.
@findex glob

@file{go32-v2.exe} properly reverts the interrupt table before running
the child process.
@pindex go32-v2

@code{_lfn_gen_short_name} no longer crashes in rare cases.
@findex _lfn_gen_short_name

@code{s[f]_ceil} and @code{s[f]_floor} functions in @file{libm.a} no
longer crash when emulated.
@findex s_ceil
@findex sf_ceil
@findex s_floor
@findex sf_floor

@code{fixpath} and @code{readdir} support multibyte file names.
@findex fixpath
@findex readdir
@cindex multibyte

You may now @code{set 387=y} to avoid the auto-detection.

@code{opendir("/")} works.
@findex opendir

@code{rename("x", "x/y")} will now fail when "x" is a directory.
@findex rename

@code{sigprocmask} and @code{sigpending} actually do something now.
All of the POSIX signal functions are now documented.
@findex sigprocmask
@findex sigpending
@findex sigaddset
@findex sigdelset
@findex sigemptyset
@findex sigfillset
@findex sigismember

@code{_truename} didn't use @code{putpath} and therefore didn't support
the @code{/dev/} style of standard devices.  @code{stat} also failed on
devices in some cases.  We think this is the cause of @file{bash}
failing on redirection to @file{/dev/null}.
@findex _truename
@findex putpath
@findex stat
@pindex bash

Documentation for FSEXT-enabled functions now mentions that they are
FSEXT-enabled, and how to avoid that.
@findex _close
@findex _creat
@findex _open
@findex _read
@findex _write

Documentation for @code{bioscom} now documents (and uses) the
@code{port} parameter.
@findex bioscom

@code{ffs()} returns the correct value.
@findex ffs

Various fixes and optimizations to @code{_use_lfn()}.
@findex _use_lfn

Return codes of @code{lock()} and @code{unlock()} are correct.
@findex lock
@findex unlock

Added @code{memicmp()}
@findex memicmp

@code{tmpfile()} always opens the temp file in binary mode.
@findex tmpfile

New @code{statfs} returns the actual size of a CD-ROM instead of the
default returned by MSCDEX.
@findex statfs

@file{gxx} won't try to link extra libraries if you specify @code{-c} or
@code{-S} on the command line.
@pindex gxx

@code{_dos_findfirst()} takes a @code{const char *} instead of
@code{char *}.
@findex _dos_findfirst

@code{rename()} handles extra error codes some network redirectors return.
@findex rename

@code{ctime} handles dumped emacs and DOS-style @code{$TZDIR}.
@findex ctime

@code{pathconf()} returns actual values for NAME_MAX and PATH_MAX, rather
than defaults.  Therefore, it can be used to detect whether a given disk
supports long file names.
@findex pathconf

The return values for @code{_go32_dpmi_lock_data} and
@code{_go32_dpmi_lock_code} are now documented.
@findex _go32_dpmi_lock_code
@findex _go32_dpmi_lock_data

The initial stack is aligned to an 8-byte boundary.

@code{getkey} and @code{getxkey} allow you to do @kbd{ALT-keypad-224}.
@findex getkey
@findex getxkey

@code{popen} selects temporary files correctly now.
@findex popen

@code{pclose} returns the status of the program it read from.
@findex pclose

@code{stubedit} won't let you set a transfer buffer bigger than 63k.
If the stub detects a zero there, it assumes 63k.
@pindex stubedit

The stub now returns error codes in the 100..110 range when it has a
startup failure.

@code{system} works if @code{$COMSPEC} isn't set.
@findex system

@code{struct lconv} includes @code{mon_thousands_sep}.
@findex lconv

@code{scanf} works with long double formats like @code{%LG}.
@findex scanf

@code{_osmajor} and @code{_osminor} are now set at startup.
@findex _osmajor
@findex _osminor

@code{write()} now calls FSEXT for ``text'' files.
@findex write

@file{assert.h} causes no more warnings with some gcc options.
@findex assert

@code{access()} now thinks devices are read/write, instead of read-only,
regardless of what the device actually supports.
@findex access

New function @code{stackavail()} in @file{stdlib.h}
@findex stackavail

@file{split} and @file{merge} are now called @file{djsplit} and
@file{djmerge} to avoid clashes with GNU's @file{split} and @file{merge}
programs.
@pindex split
@pindex merge

@code{tzname[]} bug fixed; @code{tzname} no longer a function stub (!)
@findex tzname

More @code{djasm} improvements.
@pindex djasm

Added @code{_v2_prog_type} to @file{sys/system.h} and extended @code{symlink} with it.
@findex _v2_prog_type
@findex symlink

@code{fread} and @code{fwrite} are documented as returning "less" rather
than "-1" on error, since they never return engative values.
@code{fread}
@code{fwrite}

@code{stub} forces a free file descriptor of > 19 files open
@findex stub

Minor fixes to @code{popen}'s list of pending commands
@findex popen

@code{tempnam} returns allocated memory, not a pointer to static space.
@findex tempnam

@code{difftime} can return negative numbers now.
@findex difftime

@code{gethostname} removes trailing spaces now.
@findex gethostname

@code{insque} works with empty lists now.
@findex insque

@code{sync} also calls _flush_disk_cache().
@findex sync
@findex _flush_disk_cache

@code{printf} flushes stdout every time, to reduce programmer confusion.
Note that fprintf and vprintf don't do this.
@findex printf

@code{exit} calls destructors *before* it closes all open files.
@findex exit

The code that reads blocks of data for FILE* streams has a new "slow
start" algorithm that's designed to adjust the read size for both
programs that seek a lot reading small amounts of data, and programs
that don't seek but read lots of data.

@code{mktime} handles the DST change hour gracefully
@findex mktime

@code{enable} and @code{disable} don't use DPMI (sti/cli are less buggy!)
@findex enable
@findex disable

The command line parser can handle response files generated by "find -print0"

@code{malloc} and @code{free} have been replaced by a more efficient
(and not BSD) algorithm.  The source archive still contains bsdmallo.c
and a new even faster (but more wasteful) version in fmalloc.c
