
   Virtual Pascal v2.1 Beta Build 279
   London, May 2004
   (C) Copyright 2004 vpascal.com


This file is intended to give an overview of what has changed between
Virtual Pascal v2.1 Beta build 243/270/274 and this build.

Both bugfixes and new features are mentioned.  Where a bug of a new feature has
been assigned a reference number, the reference number is mentioned as well.

Most changes are mentioned in this document.  For a more detailed description 
of each issue, please refer to the VP Bug Database which can be found at
http://www.vpascal.com/bugs.  
                                          
Bug fixes in build 277
----------------------
           
  [98] Misc issues with SysCmdLn in Windows.
              
  [107] Readkey does not get all pasted text.
  
  [108] A number of character input issues in Windows, including use of AltGr/Right-Alt              
              
  [110] Bug in record alignment in ShellApi.pas.   
  
  [111] Bug in Turbo Vision open dialog (stddlg.pas)
  
  [125] HeapChk.pas did not work correctly.                
  
  [134] Files created in Linux always got the Executable attribute.
  
  [147] WinDos.GetEnvVar always returned garbage in Windows.
                                          
                                          
Bug fixes in build 274
----------------------

  [42] Fixed definition of DeviceCapabilities API in win32.def.  It was listed as 
  an API in winspool.dll - it actually exists in winspool.drv.

  [43] In Win32, several Ansi/Oem code page translation functions were used
  to handle character set translation for console applications.  This has now
  been removed so the internals of VpSysW32 use Oem code page strings by
  default when used in a console application.  As a result, file names with
  high-ascii characters in the name should work better than before.
  
  [74] The IDE and compiler now both load a localized string file if available.
  If the LANG environment variable contains both a language code and a country
  code, only the language code is used to identify the string file to use.
  
  [79] In build 270, a "bugfix" was added to the Delete function, allowing it
  to do something for values of Index <= 0.  This has been reverted to be 
  compatible with Turbo Pascal and Delphi, where Index <= 0 means the routine
  does nothing.
  
  [87] The Windos.FileSplit function did not handle files with more than one
  "dot" in the name.
  
  [94] In Linux, not all OS exceptions were correctly mapped to language 
  exceptions, causing at least one of the test cases to fail.
  
  [98] The SysCmdLn function did not return the documented string in Win32.
  Specifically, the program and argument portions of the returned value were
  separated by a Space, not a #0 as it should be.
  
  [99] In Win32, the environment functions caused a memory leak because the 
  FreeEnvironmentStrings API was not called.  Added a new routine to VpSysLow,
  SysFreeEnvironment, which should be called to free the result of the
  SysGetEnvironment call.

  [101] The OS/2 PM IDE would hand and use 100% of the CPU.  This was caused by
  two separate sets of code trying to handle dynamic resizing of the window.            
                                 
  [103] If a source file was opened by typing in the file name in the Open 
  dialog, and then saved, the file name case would change to what was typed in.
  This has been fixed so the IDE adopts the case of the filename on disk.                               
                                 
  [106] The Linux IDE was unable to navigate to directories less than 2 levels
  deep.  This was caused by a bug in the Linux version of FindFirst.
  
  [na] Updated test cases to include tests for command line handling functions 
  and OS-to-language exception mapping.             

  [na] Fixed issue where the linker sometimes would complain about a missing
  entry point in the Strings unit (Win32 only).     
  
  [na] Implemented SysCtrlGetModuleName for Index = 0 in Linux.
  
  [na] Added {&Delphi+} to Math.pas; this is required.

                                      
The following is a list of what was new in VP v2.1 Build 270:                                      
                                      
New Features and Enhancements    
-----------------------------                  
                       
  * New Windows API Interface Units                     
    
    [77] Added opengl.pas, implementing an interface to the OpenGL API.
    This unit may also work in OS/2, although it has not been tested.
               
    [71] Added commctrl.pas, implementing API interfaces for Windows'
    Common Controls.
                                                   
    [71] Added mmsystem.pas, implementing an interface to Windows Multi
    Media APIs.
                                                   
    [15] A new unit (wincrypt.pas), which implements an interface to the 
    Windows Crypto API has been added to source\w32.
  
  * New Examples                     
    
    [77] Three new OpenGL examples have been added and can be found in the
    \examples\w32\opengl directory.  A common framework for the examples
    can be found in the shared subdirectory.
    The examples are originally written by Jan Horn.
    
    [35] Added a test framework suitable for testing the VP RTL and 
    compiler.  The code for the test framework can be found in 
    \examples\tests and compiles for all platforms.  (Note that there are
    not very many tests yet - please contribute some! :)
                                                               
    [13] A basic Win32 GUI example has been included, for those that wish
    to do this kind of programming.  The example can be found in 
    \examples\w32\gui\hello.pas            
    
    [na] The Touch example has been expanded to be useful: it allows files
    in subdirectories to be touched, and can be told to ignore locked files.
    
  * Run-Time Library enhancements    
  
    [na] All of the new functions are documented in the online help accessible 
    from within the IDE.   
    
    [82] Added functions for retrieving and setting the FPU control word to
    the Math unit.
    
    [78] Several functions in the Math unit have been updated to be more 
    precise (Min* and Max* constants, Tan, CoTan and ArcTanh functions), 
    and several new functions have been added:
     - SinCosD and SinCosS for Double and Single arguments
     - New trig functions (Hav, ArcHav, Vers, CoVers, Chord, Secant, CoSecant)
     - New hyperbolic functions (Sech, CoSech, CoTanh, ArcCoTanh, rcSech, ArcCosech)
     - Cubic root function Cuberoot
     - Much faster IntPower routine
    
    [56] The Exp function in the System unit has been made as accurate as
    possible, to facilitate complex math problems.  The previous one was
    much less accurate and failed several of the new test cases for Exp.
  
    [55] Several functions in the System unit have been made faster by
    using instructions that can be pipelined on modern CPUs.  I have done
    the same to several PChar functions in the Strings unit, and the code
    is now a little bigger and 2-4 times faster than before.
    
    [33] Object Professional has been added to the installer with full
    source code, as a result of TurboPower releasing it as Open Source.                                                              
                                                                  
    [28] Added support for disks > 2GiB in the SysDiskFreeLong and 
    SysDiskSizeLong functions in VpSysLow.

    [26] Added a missing ResetSemaphore function to VpSysLow.
    
    [na] The Linux interface units (Linux.pas, VpSysLnx, etc) have been 
    expanded significantly.  
    
    [na] Support for 32-bit DOS (DPMI32) has been added to the RTL. The
    new VpSysD32.pas and VpUsrD32.pas units implement this functionality.
    Note: to use this, you need to define a custom compiler target in 
    the IDE and have a compatible DOS extender for running the programs.
    
    [na] The File Locking functions have been added to Os2Base.pas. A bug
    in the definition of the DosFSCtl API has been fixed.
    
    [na] A new unit for 64-bit calculations using the Comp type has been
    added as int64.pas.    
    
    [na] A new unit for various String functions that don't fit anywhere 
    else has been added: vpstring.pas
  
  * IDE enhancements
    
    An experimental Linux IDE has been included.  This IDE is able to do
    everything you can do in Windows or OS/2 - except debug.  The debugger
    does not yet work; with luck, it will soon.
    
    Note that Ctrl-, Shift- and Alt-keys may work strangely when operating 
    on a non-local terminal (such as telnet or ssh).  
         
    [74] The IDE now automatically loads a localized string file if it 
    exists.  If not, it defaults to the English vp.str file.  
    To determine which file to load, VP looks for the VPLOCALE environment
    variable.  If this is found, it looks for a file named 'vp-<lang>.str'
    in the Common directory and uses it if it is found.  
    If VPLOCALE is not defined, or the file does not exist, VP uses the
    LANG environment variable for the same purpose.
    
    A German language file (vp-de.str) for the IDE has been included.
    
    [69] When using a Log Point in the debugger (i.e. a breakpoint that does
    not break, but instead logs something to the Log window), the TID of
    the current thread is added as well.  This makes it much easier to
    track hard-to-find thread issues such as [20].
    
    [38] The IDE now auto-detects UNIX text files.  This works by checking
    the character before the first #10 in the file - if it's a #13, then it
    is a DOS file, otherwise it's a UNIX one.
  
    [36] The IDE's open dialog now accepts multiple wildcards.  This allows
    the standard one to open pas, inc, dpr and pp files, which is convenient
    when browsing for different kinds of Pascal source files.
  
    [11] A build of VP now has more information about itself in the About
    Box, including build date and location.
  
  * Compiler enhancements
    
    [91] The compiler now implicitly adds the directory of the primary file
    to the end of the search path.  This allows examples and other code to
    be compiled (even when it requires multiple files to be compiled)
    without changing the current directory.
    
    [72] The Real type is now defined as being identical to the 8-byte 
    Double, and the slow 6-byte Real type is called Real48.  If you need to
    store Reals in a file that is shared with Turbo Pascal, use Real48 -
    everyone else can use the new Real, which is much faster.
    
    [50] The compiler now recognizes Linux as a standard target.  To use
    this target, use /CL on the command line. (Note that Linux support 
    still is experimental - this simply makes it easier to experiment :)
  
  * Installer enhancements                                   
  
    A new native installer for Linux is included, setuplnx.  It works
    just like the Windows and OS/2 installers, with a few exceptions:
     - The drive selection dialog is not shown
     - The "case" dialog is not shown; everything is installed in lower case
     - The patch mechanism does not work as it relies on a Dos executable.
  
    [61] The installer has been changed to disallow custom selection of 
    packages except when "Custom Setup" is chosen.  Too many users chose
    "Everything that is Free" and then enabled non-Free packages.
                                                                         
Bug fixes
---------   
 
  [na] Using SetLength(<AnsiString>, N) with N < 0 led to unpredictable
  results.
  
  [92] Added several new Windows kernel32 functions to the import library.
  
  [83] The SameText function in SysUtils could sometimes search further
  than it should have.
  
  [79] The Delete procedure did not work correctly for an Index < 0.
  
  [71] Updated Windows.pas with several new constants introduced in
  Windows XP.
  
  [68] The SysCtrlCreateThread function in VpSysLow leaked thread handles 
  in Windows.
  
  [63] The ExecDos command in OpDos.pas did not work in OS/2.
  
  [58] The OS/2 implementation of SysFileUNCExpand in VpSysLow returned
  incorrect values for non-LAN remote file systems.
  
  [48] The run-time location information (RTLI) lookup routine in System,
  GetLocationInfo, failed for code in DLLs.
  
  [46] The Eoln routine did not work if the CR-LF sequence was split into 
  two different read buffers.     

  [42] The DeviceCapabilities API (Windows) was incorrectly defined.  When
  the API was called, the application would crash.

  [40] The installer now refers to disk space in SI units KiB and MiB 
  instead of the imprecisely defined KB and MB. Please refer to this
  article if you are confused: http://physics.nist.gov/cuu/Units/binary.html

  [39] The SysGetDriveType function of VpSysLow would often recognize 
  network drives as NTFS partitions instead.
  
  [32] TWindowsObject.GetChildren (an OWL unit) did not work if the 
  window being restored had children because of a stack corruption.
  
  [31] When loading and unloading DLLs dynamically, the exit code for the 
  unloaded (VP-produced) DLL would close the StdIn and StdOut handles in 
  Windows. 

  [30] Screen corruption could occur in the IDE (and other TV apps) when
  the screen mode was switched.
                
  [25] When no key was pressed in Windows, the value of SysShiftState was
  not updated. 
  
  [22] ReAllocMem did not fill the newly allocated memory with 0s as 
  indicated in the online help.  It does now.
                            
  [20] Applications using a lot of threads could crash in the _GetTlsVar
  routine of the System unit.  This has been fixed, and the speed of the
  heap manager has been increased at the same time.  Also fixed an issue
  in the TLS lookup code when accessing the first TLS variable of a module.
                            
  [18] In some cases, "Not a Number" values (NaN) of floating point 
  variables were not displayed correctly - they sometimes showed up
  as INF (Infinite) instead.
  
  [10] The stack guard page mechanism would not always work correctly in
  threaded OS/2 applications, and this could cause a crash.                    

  [3] The editor could sometimes hang if you pressed Ctrl-Y to delete the 
  first line of a file.  
                      
  