1999 Apr 13 - Build 2007
-------- ror4 (ror4@cryogen.com)
* The boot sector now moves itself to the last 512 bytes of
  conventional memory instead of a lower memory location.
* The kernel startup code has also been modified so that it works
  with the new boot sector.

1999 Apr 12 - Build 2007
-------- ror4 (ror4@cryogen.com)
* The directory scanning functions (`findfirst'/`findnext') now also
  recognize more flavours of the volume label attribute byte (namely
  0x09, 0x28 and 0x29).
* Subdirectories are now no longer assumed to have the same size as
  the root directory.
* `device/device.lib' is now included as a dependency in the kernel
  makefile.
* Removed several unused assembler modules from the `device/' branch
  (see `device/device.mak').

1999 Apr 11 - Build 2007
-------- ror4 (ror4@cryogen.com)
* The kernel now reads times from the system clock (0x40:0x6c)
  instead of the RTC. The RTC is only used during startup to
  initialize the system clock. (As a side effect of this,
  `ReadATClock' has been moved from `_TEXT' to `INIT_TEXT'.)
* Checking for leap years is now improved -- year numbers which are
  divisible by 100 but not by 400 are not counted as leap years. (Not
  that it matters for year 2000, though.)
* The scaling factor used to convert the system time count to a
  second count has been changed from 18.2 to the more accurate (?)
  19663/1080.
* Day numbers used by `clock$' are now 0-based (as in MSDOS) instead
  of 1-based. Thus 1 Jan 1980 is now day number 0.

1999 Apr 10 - Build 2007
-------- ror4 (ror4@cryogen.com)
* Added code to prevent the kernel from returning path names
  containing double backslashes.

1999 Apr 9 - Build 2007
-------- ror4 (ror4@usa.net)
* File handles are now cloned properly when a child process is spawned.
* The `DosClose' function now also frees SFT entries corresponding to
  devices, not only those entries corresponding to files.
* Removed a (minor) memory corruption bug in the code for int 0x21,
  ah = 0x09.

1999 Apr 6 - Build 2007
-------- ror4 (ror4@cryogen.com)
* Functions ax = 0x5700 and 0x5701 (get/set file date and time) now
  return the right values at the right times. (They used to return
  success when there's an error, and return error when there's a
  success.)
* Removed the `/k' switch to the linker in `sys/sys.mak'.

1999 Apr 4 - Build 2006
-------- John Price (linux-guru@gcfl.net)
* added "version=" directive so that you can change the version that
  the kernel reports.  Usage: version=<major>.<minor> (i.e.
  version=6.22)

1999 Apr 4 - Build 2006
-------- ror4 (ror4@usa.net)
* Fixed the file name parsing function (`ParseDosNames') so that it
  handles single-character path names correctly.
* Also modified the functions which call `ParseDosNames' to check its
  return value instead of assuming that it is always successful.
  (This is not currentl useful, but it will be when error checking is
  introduced into `ParseDosNames'. In other words, there'll be more
  changes to `ParseDosNames' in the near future...)

* After wondering for a long time why the kernel text segment was
  always getting corrupted when I ran DJGPP `bash' 1.14.7, I finally
  decided to examine the code occurring before the handler for int
  0x21, ah = 0x60, and I found out why... :)
* Fixed the problem of int 0x21, ax = 0x5d06 causing memory
  corruption.
* Corrected the types of `internal_data', `swap_always' and
  `swap_indos' in `kernel/globals.h'.

* Improved checking for invalid file names in `ParseDosName'
  (although I'm still not sure whether the check is water-tight or
  not).
* Changed the default path setting from `PATH=' to `PATH=.'.

* Output from character I/O functions now goes to standard output as
  it should, instead of the console. Also, there's now a clear
  distinction between console input/output and standard input/output.
* Tabs are now expanded during writes to the console device.
* Removed a hard-wired limit on the number of entries in a JFT.
  (Although I'm not sure whether this is really correct...)
* Many other changes to the file descriptor handling code.

1999 Mar 29 - Build 2006
-------- John Price (linux-guru@gcfl.net)
* Changed boot loader so it prints some feedback info while booting.
  Removed code to handle FAT12 and FAT16, and code to calculate the
  start of the fat, rootdir, and data.  Moved these functions into
  the sys command.  Now there are two versions of the boot loader
  created, one to handle FAT16, and one for FAT12.  These are
  hard-coded into the sys command, so the need for the boot.bin file
  is obsolete.
* created a new program (bin2c) to convert the boot loader binary
  file into a header file that can be included in the sys program as
  an array of bytes.

1999 Mar 29 - Build 2006
-------- ror4 (ror4@usa.net)
* Changed the class of `_BSSEND' from "STACK" to "BSS" in the
  `drivers/' branch (which I forgot about in my last patch).
* Removed all traces of the `CONST' segment, since it was causing
  `IGROUP' to be assimilated into `DGROUP', which shouldn't happen.
* Added a `(void)' cast to the `setvec' macro in `kernel/globals.h'
  (`setvec' no longer returns the original ISR vector).
* Changed an incorrect error message in `sys/sys.c'.
* Removed `drivers/setvec.asm', since it's no longer needed.
* Also removed `kernel/krnstart'.
* The name field in a process's MCB is now filled in the same manner
  as in MSDOS -- instead of being padded to the right with spaces, it
  is now terminated with '\0'. Also, if the original file name
  doesn't have an extension, the code will stop copying the file name
  at '\0' instead of continuing to look for a '.'.
* Fixed the problem of the `switchar' syscall (int 0x21, ax = 0x3700) not
  returning the correct value.


1999 Mar 28 - Build 2005
-------- ror4 (ror4@usa.net)
* Removed the need for `ipl.sys'. (!) The kernel makefile now
  statically relocates `kernel.exe' to 0x60:0 and outputs the
  resulting binary to `kernel.sys', and the boot sector has also been
  modified to load `kernel.sys' at 0x60:0 instead of `ipl.sys' at
  0x2000:0. (I chose 0x60:0 because it's the first 512-byte boundary
  occurring after the BIOS data area, 0x40:0.) Finally, `sys.com' has
  also been updated.

* Also changed the boot sector code in some other ways. In
  particular, because `kernel.sys' is rather large, I had to add some
  code to move the boot sector away from 0:0x7c00 to somewhere
  higher. (For 640K systems the boot sector will be shifted to
  0x6000:0x7c00. However, there may be problems on systems with very
  little conventional memory -- I'll probably look into this later.)

* Made some minor changes to the assembler source files so that they
  can compile on `masm'. (JP: The code still compiles fine with tasm
  too).

* Also changed several incorrect label references in the assembler
  sources. (JP: These changes fixed the "Fixup" errors we been
  talking about in the list)

* Eliminated redundant re-makes of files in the various makefiles.
  For one thing, `*.cfg' files are no longer generated from the
  makefiles, but are independent from them. (I didn't like the idea
  of having to compile an entire branch each time I edit a
  makefile...) Also, intermediate files are now retained instead of
  deleted.

* Also made some changes to `build.bat' (you'll know them when you
  see them).

* Added a file `lib/libm.mak'

* Added a file `kernel/krnstart

* The code required to initialize the kernel (or rather most of it)
  is no longer retained in memory after the initialization process is
  done. I accomplished this by moving most of the initialization code
  from `_TEXT' to a new segment named `INIT_TEXT'. Of course, I also
  had to introduce lots of other changes in order for everything to
  compile and run properly:
  - Added code to `kernel/src/kernel/kernel.asm' to move the contents
    of `INIT_TEXT' to the top of conventional memory and continue
    from there.  Control is only transferred back to `_TEXT' when the
    kernel calls `p_0'.
  - Many functions are called from both `_TEXT' and `INIT_TEXT'. To
    fix this, I created far wrappers for these functions which can
    then be called from `INIT_TEXT'. (E.g. for `execrh' there's a
    corresponding far function named `init_call_execrh' which simply
    calls `execrh' with its own parameters.) One exception to this is
    `printf' -- instead of creating a far wrapper for a near
    `printf', I created a near wrapper for a far `printf' (now called
    `init_call_printf'), because it was easier that way. :)
  - Most functions which are required only during initialization time
    were shifted into `INIT_TEXT'. (There are still some functions
    which should rightfully go into `INIT_TEXT', but are retained in
    `_TEXT' as far functions, because I found it too difficult to
    move them out. :( ) Because Turbo C only allows at most one code
    segment to be defined for each module, I had to shift some
    functions around within the source tree -- the file
    `kernel/src/kernel/proto.h' says it all.
  - A cosmetic change mentioned here for completeness: all functions
    defined in `INIT_TEXT' are now marked with the word `INIT' (in
    fact a null macro) so that the reader can easily distinguish them
    from functions defined in `_TEXT'.

* Replaced `exit' calls with `for (;;);'.

* Changed `strcpy' into a macro which calls `scopy'.

* Also redefined `setvec' to be a macro (I didn't want to waste time
  writing a far wrapper for it).

* Removed the `break_key' function in `kernel/src/kernel/kernel.asm'.

* `low_int25_handler' and `low_int26_handler' are now of type
  `void interrupt far()' instead of `void near()'. (I hope I updated
  `entry.asm' correctly -- I never tested `int 0x25' and `int 0x26'...)

* Changed the class of `_BSSEND' from "STACK" to "BSS" -- "STACK" is
  now used for a separate stack segment (`_STACK').

* Assembler modules now include `segs.inc' instead of having their
  own long list of segment definitions. (Some day I'll update the
  makefile dependencies to reflect this.)

* Also made a few minor changes to the assembler modules so that
  `masm' won't complain.

* Changed the `-X' switch in `kernel.cfg' to `-X-', so that I don't
  have to worry about C module dependencies.

* Removed the definition of `CFLAGS' from the makefile -- everything
  is now in `kernel.cfg'.

* Created a file `kernel/src/kernel/init-mod.h' which is included by
  modules whose code is supposed to go into `INIT_TEXT' instead of
  `TEXT'.

* This diff solves the problem of the MCB of a process not having a
  correct value in its name field (bug report #6).
  (The definition of the `toupper' macro is because I shifted the
  `toupper' function into `INIT_TEXT' a while ago, and therefore
  can't be called from `_TEXT' now...)


-------- John Price (linux-guru@gcfl.net)
* Made changes so you can create a directory with the same name as a
  volume label, but you still can't rename or delete it!

* Fix findfirst and findnext functions so that act as they should.
  (i.e. If the attrib has only the volume label set, then it returns
  the volume label entry in the root directory, else it returns the
  files/directories that are specified with the attrib, ignoring the
  read-only and archive bits (these are always returned).

* reorginize the source tree.  Removed IPL directory, and command.
  Moved all the file system C files into the kernel directory.
  Modifed build.bat, clean.bat, and all the make files to reflect the
  new tree.

* changed so that kernel will look for a "fdconfig.sys" file, and use
  it INSTEAD of config.sys.  If it does not find it, it will look
  for, and read config.sys, if it exists.

* Fixed so that if you call an INT 21 function with AH containing a
  unsupported function, the carry flag is set.
