Virtual Pascal v. 2.1 b279 (22/11/2006, Virtual Pascal, Allan Mertner) |
Readme/What's new |
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. |
Add new comment