Kennedy Software & Systems Ltd

  What's New

    ReBuild OE
  Contact us

 LesSpace - Detailed Documentation

Note: some topics are covered in the separate Lesspace-Summary page:
And, if you're reviewing this file in TEXT form, see the note at the start of the Summary file.

Why ?:
Following many queries on CompuServe and elsewhere, especially from users of Paradox (DOS) who had problems with very large Disks, I decided to investigate this matter. In particular, this was intended as a small gesture for the SUPERB support available on the PDoxDOS forum on CIS, which I have availed of on many occasions. The result was this tsr !.

Subsequent feedback indicates that the utility is also used at Non-Paradox sites. Seemingly, similar problems have arisen with versions of dBase, ObjectVision, WordPerfect, Q&A, DataPerfect, etc.

Do understand that the Space problem in Paradox (etc), is actually a reflection of the HIGH quality of the product. To explain, the better products check if adequate disk-space exists, before attempting operations which require additional space. The lesser products just plough on regardless - resulting in user intervention if there are space problems, and possibly corrupt data, inconsistent files, etc.

Any DOS/Windows app which:
    - bombs on excessive total or free disk space.
    - bombs on very large Cluster sizes.
    - produces incorrect results, due to very large Hard-Disks.
    - produces incorrect results, due to very large Cluster sizes.
    - gets wrong Floppy Status details.
    - gets wrong CD Status details.
    - requires Drives to appear as "Remote".
    - requires the base date of 2-digit years to be changed from 1900.

The Space Problem (Total/Free Space):
Some software products/apps were not designed to handle Hard-Disks over a specific size. The threshold might apply to the total capacity of the disk, or the free space. When the limit is exceeded, the internal software calculations may produce incorrect results. The user might be presented with incorrect space values, such as small positive values, zero, or even negative values !. Or, the user may be presented with error messages, indicating that there is insufficient space, or no space. Lesspace reduces the space parameters, on-the-fly, to acceptable limits.

Note that lesspace does not reduce the space, nor disable access to the full space available. With lesspace, the application will see Total space, or Free space, of not more than about 536MB. As free space, for example, is used, the app will continue to see 536MB free, until such time that less than 536MB is actually free. Then lesspace will back off, and the app will see the actual free space.

The  Space Problem (HD Parameters):
Even when the Total/Free Disk-space is below the acceptable limits of a program, the internal Hard-Disk parameters (especially on large HDs) may be unacceptable to a program. For example, most programs would probably not accommodate "sector sizes" in the range 1 to millions (sector size is usually 512 bytes !), or Sectors-per-Cluster of 1 to millions, etc. The internal parameters of newer HDs may exceed limits expected by the programmer, leading to incorrect results. Lesspace changes some internal HD parameters, on-the-fly, as needed.

Similarly, when an extremely large drive is used, some or all of the internal HD parms will very likely be misused by the app software, (because they'll be outside the range expected by the programmer), but the result might yield a positive acceptable value, and so the app will run. This explains why a program like Paradox-DOS might run correctly on, say, a 3Gb drive, and bomb with an out-of-space error on a 6Gb drive, and bomb on a 10Gb drive, and work well on yet another 10Gb drive (because the internal HD parms on the 2 10Gb drives are different). It works on some very large drives, because it just thinks there are no space problems. However, it's space-calculations on those very large drives are incorrect, and in these situations users should try to establish if the space data seen by the app is running at safe levels, or if it's running on some edge. If the former, lesspace is probably not needed. If the latter, it probably is.

SysCon (or equivalent):
Syscon or similar utilities may be used to limit the space seen by an app on a network drive. However, a user should be aware of some issues: Suppose the server had 20Gb, and a specific user was restricted to, say, 1Gb. In theory, an app such as PDoxDOS should be able to handle that restricted space (1Gb) with ease. However, success will depend on the internal specs of that 1Gb drive, as presented by the DOS API back to Paradox: Suppose the 20Gb drive is composed of 100 heads, 200 bytes per sector, 300 sectors per cluster, etc... (you get the idea)... all adding up to 20Gb. Then on the 1Gb drive, the system will reduce some (or maybe all ?) of these parameters, so that the net result adds up to just 1Gb. BUT, maybe some of these individual parameters will still exceed the capacity of the internal PDox calcs, and the results in PDox will then be flawed.

So, be cautious. To play safe (with SysCon), the user should verify that PDox is correctly handling the "1Gb" drive (with tests on DriveSpace(), etc). To be even safer (with SysCon), the user should identify the full internal specs of that 1Gb drive ("Lesspace /D" will show some of this data), and check that ALL of these parameters are typical of a normal 1Gb drive, and therefore can be handled correctly by PDox. If they're normal, lesspace is not needed. If not, or you cannot check them, lesspace may be needed.

Q&A Install:
Intro: Many versions of Q&A are in common use, and many versions cannot run on large hard drives. Lesspace resolves these problems, allowing Q&A to run.

Some Q&A users have reported problems when Installing Q&A on large hard drives. A Divide-by-Zero error message is typical of the problems reported here (without lesspace loaded). These users have indicated that Lesspace allowed the install process to proceed a little further, but not to complete properly. Various errors have been reported. The assumption is that lesspace has some problem.

I finally tried some Installs of Q&A-DOS, version 4, on large drives, and noticed some problems, and, hopefully, made some progress... (Please note, I have no experience in Q&A).

Problem 1: Lesspace is, indeed, needed to run Install on large drives (in the absence of smaller partitions, etc). And lesspace works as intended.

Problem 2: Some code in the Q&A Install.EXE program (ver 4) is not robust, and, when manually corrected, the Install runs to completion. It is not currently possible for lesspace to make this correction. If I knew more about the functionality of the Install program, it might be possible to adjust lesspace to resolve the problem, as noted below. (PS: These tests were done using lesspace version 3.0/3.1. There's a very slight possibility that later versions of Lesspace would improve the situation marginally, though I've not checked... yet !).

Briefly: while Q&A Install is scanning the target drive for previous installs, it shows a Progress-Bar on the screen. I assume it's scanning all the directories for specific file-names, and maybe for specific file-contents. In general, I don't understand how a useful progress-bar can be shown for this operation, because (IMO) it is not easy to estimate the total time that this type of search will take. It might take as long to initially estimate the total time, as it would to do the actual job !. Anyway, the bar is sometimes mis-scaled, and much of the internal code and data gets totally destroyed. Technically, the program seems to be written in some version of Borland Turbo C, perhaps with some Assembler, and a variable seems to have been defined as a Signed Char (or just as Char, with the default set to Signed), whereas it should have been an UN-Signed Char.

A Solution: Obviously, the best solution is to avoid or prevent the conditions which cause the weak code to execute. But, I don't know (yet !) what these are !. Next solution is to adjust the internal code - noting that these comments apply only to ver 4. To do so, you'll need a HEX editor. And, if you're familiar with that type of tool, the following will be easy; if you're not, don't try it !:
   - If Install.EXE is on a R-O device (Eg, CD-ROM), copy it (and any other relevant files) to HD or FD,
   - Keep a safe backup of Install.exe.
   - If Install.exe is flagged as R-O, remove this attribute,
   - Scan for the following hex pattern:
           55 8B EC 83 EC 50 80 7E 0C 24 7D 05 8A 46 0C EB 02
   - If you don't find an exact match, then accept variations on the "24" byte, though the value should not vary very much from 24,
   - Change the 7D to 73, save, and test.
This mod should make the internal code somewhat more robust in all circumstances.

Help !: Addressed to readers who are experienced in Q&A; and/or who have access to the Q&A install source-code (just out of curiosity):
   - Can anyone precisely identify what external factors/conditions expose the weak code in Q&A Install ?. Maybe a very large number of files on the drive; maybe very large directories; maybe a drive with total space over xxx; maybe a drive with more than xxx bytes free.....
   - Does anyone know how the "Progress-Bar" is scaled, exactly what it refers to, etc, ?.
If we knew these details, a better solution might emerge. It is technically possible, but time-consuming, to identify the above details from the contents of the EXE file... or from repeated Installs on various platforms....

PKZIP & Spanning:
Some problems have been observed with some versions of PKZIP, when the Spanning option (-&) is used, and Lesspace is loaded. The PKZIP step might bomb, with various error messages. We investigated to a limited extent, and discussed the issues briefly with PKWARE. We identified two separate issues, though, possibly, they're related within the PKZIP code:

Trigger-1: Sometimes PKZIP will bomb, just because Lesspace is loaded. However, PKZIP bombs even if lesspace is totally deactivated internally, except for merely occupying some RAM space. Therefore, it's not the code/functionality in Lesspace that's causing the problem. We tried other TSRs, with the same result, and we wrote a trivial TSR, which does NOTHING, apart from load, sleep, and terminate, and we could trigger the bomb. Our conclusion was that the Spanning code in some versions of PKZIP was somehow sometimes dependant on RAM addresses, Ram usage, etc.

Trigger-2: In some shipped versions of Lesspace, there's some dormant Debug code. This is in many products, and is normally not problematic. However, if some versions of PKZIP (with Spanning) run while any of these versions of Lesspace is active, PKZIP bombs. When we removed the Debug triggers in Lesspace, PKZIP/Spanning did not bomb. Maybe the PKZIP/Spanning code also has some debug facility in there, which conflicts with other external Debug activations. Maybe PKZIP detected the debug trap from Lesspace, and considered it intrusive, and bombed. Maybe...

Solution-1: Use the latest version of Lesspace !. The first few shipments of 3.1, and a few prior shipments, had Debug triggers. Most 3.1 shipments do not. We will try to ensure that no further shipment have Debug triggers !.

Solution-2: Get the latest version of PKZIP !. And/or check with PKWARE. It seems that PKWARE have released some updates to many of the main version of PKZIP, though sometimes without changing the recognised Version-No of the software, eg, 2.04g. Furthermore, PKWARE have many updates for Registered versions only, so you are encouraged to Register, and to keep up-to-date.

Credits: Many thank to Sunil Pillai for reporting this problem, and his patience and assistance in investigating it...

The Int-24 Problem [eg, DriveStatus()]:
The Critical Error Handler (Int-24) code in Win95 (and, based on some tests, in Win 3.1 also) does not behave exactly like the equivalent code in older versions of DOS. Applications which are dependent on the older handlers may give incorrect results in the WIN environments. An example is the DriveStatus() function in Paradox. Without the fix, DriveStatus() will always return TRUE, on Floppies and CDs.

Win2000 - If-[Not]-Exist-Nul command:
The IF-[NOT]-EXIST-NUL command is usually used to check for the existence of a Folder/Directory Name, and may be used in a BAT file or in application code. Example in Paradox (DOS) PAL code is the IsFile(........NUL...) function, or DIREXISTS(.....NUL...). To confuse matters, this facility can be implemented in many ways internally - within high-level compiled code, or using embedded Assembler, or low-level C code, etc. For example: try to OPEN NUL; issue a Find-First on NUL or on *.*; extract the folder-name and get the attributes of that entry, etc. Furthermore, some users have suggested that "NUL." (with a dot!) or "NUL.X" may sometimes yield better results than using just NUL. The bottom line is that the command sometimes yields the wrong answer, as can be readily observed by searching for postings on this issue in UseNet. A BAT file, or application code, may issue the test, get the wrong status, and then execute the wrong process.

Our tests (and many Newsgroup users) suggest problems with the execution of IF-EXIST-NUL under W2K, both in BAT files and when called by App code.

To confirm the problem in a BAT file, you might execute something like the following simple code, comparing the results under W95, W98, DOS, W2K, etc:

@echo off
:: --------------------------------------------------------------------------
:: Check that "IF EXIST ...\NUL" is supported properly
::  (On broken PCs, IF EXIST C:\TEMP\NUL always returns FALSE).

MD C:\TEMP >nul
Echo Y | Del C:\TEMP\TEMPDIR.TMP\*.* >nul
If Exist C:\TEMP\TEMPFIL.TMP Goto Exist2
If not exist C:\TEMP\TEMPFIL.TMP Goto Exist2
If not exist C:\TEMP\NUL Goto Exist2
If exist C:\TEMP\TEMPDIR.TMP\NUL Goto Exist2
Goto Exit
echo ...Your DOS/WINDOWS system may need to be upgraded before running this app.
echo It does not support IF EXIST X:...\NUL properly.
echo You're probably using a very old Win-95, or Win2000. Maybe try LESSPACE ??.

Our comparisons between W2K and W95/W98 indicated that issuing an internal Find-First on NUL yields the wrong result under W2K - it always returns FALSE. However, issuing an OPEN on NUL worked correctly in W2K, as did a FF on *.*, and as did an Attribute-check on the folder-name.

So, I inserted a trap in (registered) lesspace 3.3, which ACTIVATES by default, whereby lesspace watches for a Find-First on NUL, and replaces it with an equivalent Get-Attribute function. The overall result is that IF [Not] Exist NUL in BAT/Script files, or similar functions in applications, should then return the correct results under W2K, with Lesspace running. We confirmed this fix using BAT file code similar to the above, and using IsFile(.....NUL...) and DirExists(.....NUL...) in Paradox-DOS.

Technically, lesspace just watches for Find-First functions on NUL (or NUL.XXXXXX), and also allows for the name to be preceded by a "Drive-Letter:" combination (eg, C:NUL), or by a partial or full Path specification (eg, H:ABC\DEF\NUL.X). If you are using a naming structure not supported, let us know.

If, for some reason (eg, testing), you want to DISable this fix-up in lesspace, then user the /N command-line option.

FileSize() in Paradox:
When Paradox emits a FileSize(), the result will sometimes be incorrect (0, or non-0 but too small), depending on the HD configurations. Lesspace sometimes adjusts the Cluster Size, so that Paradox emits a more accurate FileSize() result.

Here's the low-down, based on my tests/investigations...

A file has 2 sizes:
    - the "actual" bytes of the file, and
    - the space on the disk which is "allocated" to the file.
The latter is a multiple of the Cluster-Size of the disk (ignoring matters like Disk compression...).

Most programs/utilities report the first of these, the bytes within the file. Paradox reports the second, the space allocated to the file.

Paradox calculates the FileSize, by establishing how many clusters are used by the file, and multiplying by the size of each cluster. The answer will equal or exceed the actual bytes used by the file. There are limits to the Cluster size which Paradox expects - and these limits are further based on the Sectors-per-Cluster, and the Bytes-per-Sector parameters. If lesspace encounters values in these parameters which exceed Paradox expectations, it adjusts them downwards, until they are acceptable. The net result is that Paradox may then emit a FileSize() which is slightly smaller (though still equal to or higher than the bytes used !) than it would have delivered, if no limitation existed, and if lesspace made no adjustments.

FamilySize() in Paradox:
We haven't thoroughly checked this function in Paradox 4.5 on all sizes of systems, and with various Table/Family sizes also. However, on the assumption that the same internal Paradox mechanisms are used, then the overflow errors may arise under appropriate conditions, and the lesspace traps should automatically generate more acceptable results.

DriveSpace() in Paradox:
DriveSpace() will present data to the app, based on the revised HDD specs modified, if necessary, by lesspace. But, DriveSpace does not always issue calls to DOS to retrieve the actual "current" space settings. If Paradox thinks that the space details have not recently changed, then DriveSpace merely presents the details which were retrieved at some previous time. To ensure that DriveSpace present refreshed data, precede the DriveSpace command with a Run NoRefresh XXX.BAT, where XXX.BAT does nothing. After the Run ends, Paradox refreshes the HDD data in RAM (even before the DriveSpace is executed !), and then DriveSpace will be more accurate.

UserName() in Paradox:
UserName() sometimes retrieves the "Computer-Name" instead of the "User-Name". Which is usually not very useful within an app, and which is not the expected result anyway. My experience is that UserName() usually works well in Netware-based systems, and usually does not work well in Windows LANs, under Terminal-Server, etc.

This may be a bit technical for some readers, but we'll keep it brief... There are many internal functions related to Retrieving and Setting User-Names, including 21-5E00, 21-5D06, 21-5F44, etc. 5E00 is designed to retrieve just the "Machine Name". 5D06 retrieves many settings, including Machine-Name. 5F44 retrieves many settings also, including Computer-Name, User-Name, Domain-Names, etc. (Check some technical literature, or Ralf Brown's famous Interrupt-List, for full details). My investigations indicate that PDoxDOS uses 5E00, and 5D06. I've not seen it use 5F44. You'll notice that the functions used in PDoxDOS retrieve the Computer-Name, and not the User-Name!! I'm sure there are good reasons for this approach in the Paradox internals – perhaps to suit Netware – which would have been very popular when PDoxDOS was written.

Lesspace now (3.5+) has an internal function which attempts to repair the UserName() function. It it activated by using a command-line switch: /M1, /M2, /M3, or /M4. When PDoxDOS issues 5D06, and /M1 is used, lesspace internally uses 5E00 to fill in the 5D06 details. Similarly, when PDoxDOS issues 5D06 or 5E00, and /M2 or /M3 or /M4 is used, lesspace uses 5F44 on-the-fly, and replaces the 5D06/5E00 name with one of the main 3 names retrieved from 5F44.

If your UserName() function is not retrieving the correct name, you might try each of the /Mn options. If none of them work for you, you might let us know, and indicate what OSes you are using (client and server), settings supplied in the CUSTOM script, NUpdate/NUpdateR settings, command-line options, etc. We've checked only some combinations, and found that /Mn worked well.

Remote Drives:
This facility is controlled by the "/R:" command-line option, as discussed later, and may be used to internally mark the stated drives as remote. This should be used to flag local (repeat LOCAL) drives as Remote - your operating systems will (hopefully) automatically flag all your actual remote drives as remote.

The feature was implemented because tests of apps such as TurboPal, indicated that multi-user features would activate only on real "remote" drives, and would not activate on local shared data on a P-P Server, or on local data on a standalone PC with multiple sessions running under Windows/etc. With the "/R:" option, you can temporarily flag local drives as remote, and hopefully activate multi-user facilities in your apps. However, if your apps also rely on other conditions (as well as the remote status), then this "/R:" mod alone will probably not help greatly.

Note-1: In general, don't use the "/R:" option !. This option should be activated only when absolutely necessary (eg, just before the app starts), and should be deactivated (using lesspace /U) as soon as the app has ended. Otherwise, other apps might behave badly, or refuse to run, if they think that the stated drives are indeed Remote / Networked. For example, CHKDSK may refuse to execute on the "/R:xxx" drives, while lesspace is active.

Note-2: There is no option to flag FILES (or other entities) as Remote; only DRIVES.

Set Epoch:
This facility is controlled by the /E command-line option, and must be used only in conjunction with a modified EXE file. This option has been tested with all the main DOS releases of Paradox, but not with other products. If other products treat Dates in a manner similar to Paradox-DOS, then this facility may also work for such products.

As discussed elsewhere on this site, Paradox-DOS treats dates as follows:
  - All input dates entered with 1-digit or 2-digit years are always assumed to be in the range 1900-1999 (irrespective of system date, etc).
  - All output dates in the range 1900-1999 will show with the 19 suppressed (unless a format is applied to the output date-field, to display the date in a user-specified manner).

Effectively, in Y2K terminology, "PDoxDOS uses a window for 2-digit years, starting at 1900".

Many older PDoxDOS apps probably have input date-fields built to accept just 2-digit years. When dates reach into the 20xx range, these fields need to be expanded to accommodate 4-digit years, and validation rules, operating procedures, etc, changed accordingly.

Lesspace now has an option to change the date-behaviour in PDoxDOS apps, such that no changes are needed to input forms, no changes to operating procedures, etc. This is achieved by altering that 1900 base year to whatever the user requires. Obviously, if an app uses dates which are close to, or exceed a 100-year period, this "epoch" option is of little value, but in that case, the system is, hopefully, already set up to handle 4-digit years.

For example: suppose the epoch is set to 1985. Then:
  - all 1-digit and 2-digit years in the range 85-99 are assumed to be in the 19xx century (the same century as the epoch setting), and
  - all 1-digit and 2-digit years in the range 00-84 are assumed to be in the following century (20xx).

There are two steps to activate this process:
  - Lesspace version 3.0 or later is needed, and must be used with the /E command-line to decide the epoch date.
  - The EXE file (eg, Paradox.EXE, PDoxRun.EXE, ParadoxR.EXE, PDoxRunR.EXE, etc) must be modified to link in with the epoch code in lesspace. Currently, we are not releasing this program to makes these changes to the EXE file. You must send us a copy of the EXE file, and we will make the changes, and return it. This incurs a charge. (See some additional notes & options).

Please Note: If you run a modified EXE file, without lesspace loaded, or without the /E option activated, then the EXE file will crash and/or produce unpredictable results.

Technically: the default approach uses Ints A0/A1/A2 to communicate between the EXE code and lesspace, and it is assumed that these vectors are not in use by any other software. If they are, a warning message will appear when lesspace tries to load, and if you inform us, we should be able to locate some other free vectors in your systems. (Other vectors used by lesspace are shared with other users of these vectors. However, sharing was not possible with A0-A2, because no free registers are available for function codes, and Fn-codes would be essential for safe vector sharing. We tried (unsuccessfully) to pass Fn-codes in the Stack, in reserved memory locations, etc, etc, but these approaches are not proper, especially with prot-mode/V86 apps. Also, this epoch facility could have been implemented in an independent TSR, but, after some consideration, we thought the advantages of building it into the lesspace engine outweighed the advantages of keeping it separate.

Now, if only we could change the default date display in PDoxDOS, so that it would show 2-digit years in the range 00-09 with that leading zero not suppressed - just like it does for months 01-09 ?. Hmmmmm.....

Overhead (RAM, Speed) / Impact:
Lesspace is written entirely in assembler. It therefore has a very small RAM requirement, and executes extremely quickly. When resident, it occupies only about 1k-3k of RAM (different versions have different sizes), and can be Loaded High. It's speed overhead, when compared with Disk IO speed, etc, would be so small as to be irrelevant. When the shareware version loads and unloads, it pauses briefly with some screen messages, but once loaded, executes at full speed.

Lesspace knits into the internal DOS functions, and operates as a type of DOS extension. When a DOS-Box is opened in a Windows environment, and lesspace then loaded in that DOS-Box, lesspace should impact only the apps run in that DOS box, and only while it's loaded and active. It should have no impact on any other apps running under Windows.

Files Supplied:
The following files are supplied:
      LESSPACE.COM - the TSR
      FILE_ID.DIZ - Short description, for BBSes / CDs
      LESSPACE.HTM / LESSPDOC.HTM  - these notes, in HTML format.
      LESSPACE.TXT / LESSPDOC.TXT  - these notes, in ASCII format.
      (To facilitate emailing, a printed copy of these notes is not normally supplied).

    1. See notes below about Liabilities, etc., (the Legalese).
    2. Copy LESSPACE.COM to a Directory in your PATH (or the "current" one).
    3. If you don't already run your app from a batch file, then create a batch file. (Do NOT skip this instruction !).
    4. In the Batch file, enclose the Application command line, as follows:
      .....batch file commands.....
      LESSPACE       <--- Installs the TSR (try LH, if desired)
      PARADOX xxxxx  <--- Your Application
      LESSPACE /U    <--- Uninstalls the TSR
      .....batch file commands.....

See section below on additional command-line options.

You could append ">x", or ">>x", or ">NUL" to the lesspace lines, to suppress silly screen messages, but this won't be very useful if error messages also disappear, and, worse, if lesspace is waiting for a go-ahead keyboard response !!.

When lesspace loads, it displays a message, and pauses briefly. (There is no pause in the registered version). When it unloads, it also displays a message, and pauses. If these messages don't appear, then lesspace is not loading and unloading correctly, and is probably not activating at all !. In that case, ensure that your PIF or Shortcut is indeed calling the relevant BAT file (and not the EXE file, or something else !). You could also include some additional PAUSEs in your BAT file, during testing, just to confirm that it is being activated correctly !.

ERRORLEVEL is set to 0 with a successful install or uninstall of lesspace.

ERRORLEVEL is set to 1 after all error conditions detected while trying to Install or UnInstall (e.g., an unsuccessful attempt to uninstall, duplicate install, invalid command-line, etc.).

You should be able to "LoadHigh" the utility, though it takes only about 1k-2k bytes of RAM, plus it's PSP.

Depending on your OS, etc., the TSR may be unable to resolve your space problems, if you include it in your AUTOEXEC.BAT (or equivalent !). However, you may try it, if this approach offers benefits to you.

In a Network, you should consider running the batch-file from the server, and also loading lesspace from the server, to facilitate the installation of updates, etc.

Command-Line Options / Notes:
You should use only valid combinations of the following options. Some inconsistent combinations are accepted, with the leftmost valid option(s) processed first and others ignored.

Invalid command options (eg, ?, or /?) will present a list of the valid options.

None !:
Load Lesspace. If lesspace is already active, an error message appears, with a Press F1 to proceed.

/U [Uninstall]:
Uninstall the utility, if already loaded, and if safe to uninstall.
If a /U is attempted, and cannot be serviced, an error message is presented, with a Press F1 to proceed.

/Q [Quiet]:
Suppresses the Press F1 warning, if:
    - a Load is attempted, and a resident copy is already active, or
    - a "/U" is attempted, and no resident TSR has been located.
For all other error conditions, the Press F1 still applies.

/R:xxx [Remote Drives]:
This indicate that specific DRIVES are to be internally flagged as Remote (while Lesspace is active).
        Lesspace /R:DGH
states that all internal inquiries (from Apps to DOS) regarding drives D, G and H, will always be informed that these Drives are Remote. (See other comments above).

/D [Debugging !]:
Display parameters of each Hard-Disk installed (locally, and accessible from a Server). (See other notes below). An extensive help message also appears. This option merely displays some config details about your Hard-Disk(s), which may be useful to us if there are problems with lesspace. With /D, the tsr does NOT "install".

/L [Keyboard Control]:
Without "/L", lesspace ignores all keyboard activity while it's active.

With "/L", keyboard monitoring is enabled, and lesspace does NOT intercept the relevant Int-21 activities and make the usual adjustments, UNTIL YOU request it to do so by a special hot-key.

This key combination is: CTRL + LEFT-SHIFT + L

Ie, while holding down [Ctrl] and [Left-Shift], press the "L" key. There is no visible nor audible response !.

To DISABLE Int-21 trapping later, press the same HotKey again. Use again to ENABLE trapping, etc.

Do not use this option, unless for special short controlled diagnostic runs, where you need to control the internal behaviour of lesspace. And note again that there is no feedback - so use the hotkeys carefully, and YOU must remember which state the tsr is in !.

/S [Size]:
When lesspace needed to reduce the HDD space (as perceived by the application), it defaulted to a max of 536MB (approx). In initial releases of the utility, this value was set much higher, but has been gradually reduced. The value chosen is a compromise between:
    - the highest value that all apps should be able to easily handle,
    - telling the app that "lots" of space is available.
In some rare instances, where an app requires more than 536MB to perform some operation, this 536MB default value was too small.
As of version 2.3, the default has been raised to 805MB.
However, if your app cannot handle 805MB, you may use the "/S" option to restrict the max value to 536MB.

Thanks to Mike Keating for raising the hare on this one !.

/E:YYYY [Epoch]:
This option activates the Epoch option, as explained above. The year must be a 4-digit value, and must be in the range 1900-2099.

/N [If-Exist-NUL]:
This option DISABLEs the If-Exist-NUL fix-up for W2K.

/Z [Zero-fill]:
Some apps have presented Y2K problems based on the way they handle "years" internally, when the range is 2000+. If the app truncates the year to 2 digits, and then suppresses leading zeros, then years in the range 2000-2009 would shrink to just 0-9, or even to a space and 1-9. If these 2-char years are used in filenames, the filenames will have embedded spaces, and are therefore invalid in 8+3 filename structures. Obviously, if the source-code is available, the code should be updated. However, if source is not available, then, with /Z in the command-line, Lesspace will attempt to identify all internal references to filenames, and automatically replace embedded spaces with "0" characters. The app should then run correctly.

/W [Mouse under W2K]:
Paradox (DOS) did not work very well under some (initial?) releases of Win2K. Specifically, Mouse support didn't work properly, or caused major crashes. Various people investigated this issue, and we discovered that some critical internal registers were sometimes destroyed under Win2K. In an effort to resolve these issues, I implemented some code within Lesspace to preserve some registers, and these extensions activate only when /W is used. However, in tests, this exercise usually was not sufficient to resolve the Mouse problems under Win2K, but I left the code in Lesspace in case it can be resurrected at a later date. Until further notice, you should not bother with the "/W" option, though it's there if you really want to try it !.

/Mn [UserName()]:
This option attempts to repair the UserName() function in PDoxDOS. The permitted values are /M1, /M2, /M3 and /M4, and each is explained in the UserName() notes. If UserName() is not working properly for you, you might simply try each of these options in turn...

/T [Tecra S1 (Toshiba)]:
We're aware of a problem in this specific model of the Tecra range. The NTVDM engine in XP blows up if any 16-bit DOS-type application tries to access RAM at addresses EF00:0000 to EF00:0FFF. We were in touch with Toshiba on this issue, but made no progress. The "/T" option tells Lesspace to NOT access any RAM areas (especially the first few bytes) when the Segment Register is EE00-EFFF.

It DON'T WORK !!!:
We'll try an orderly approach:
   1. Check through all these notes - to ensure you've run the utility as advised.

   2. Build that recommended BAT file.

   3. We need to verify that you're actually USING that BAT file. Insert a PAUSE after the lesspace-load line, and insert one after the lesspace-unload line. Run the app. Did the PAUSEs activate ?. If not, the BAT file is not running correctly. (Remove the redundant PAUSE lines).

   4. Check that you're using the latest release of the utility. If you're a registered user, contact us for details on the latest release, in case you're using an out-of-date version, or check the web site. We have examples of users who've received updates, but, somehow, never implemented them !. Sometimes, if an update is "trivial", we update only users who request updates, or who are experiencing some problems. Maybe your problem has been addressed in a recent update !.

   5. Try the "/S" option, just-in-case.

   6. For this test, ensure that you're not using the "/Q" option on lesspace. When lesspace loaded, did it show a message line, and a "Loaded Successfully" message ?. If the successful message did not appear, we've some problem. Similarly, when lesspace unloads, a message should confirm that the un-load was successful. (Perhaps, include a temporary PAUSE after the lesspace-load line and after the lesspace-unload line, to visibly check these messages).

   7. If lesspace does not solve your HD-space problems, but "should", then it is possible (though increasingly unlikely !) that you have a HD config which is not yet catered for in lesspace. We would appreciate if you would follow these steps:
      a. Open a "DOS-Box" - if needed.
      b. Ensure that lesspace is not loaded.
      c. Run "Lesspace /D".
      d. Ensure that lesspace IS loaded.
      e. Run "Lesspace /D" again.
      f. Unload lesspace - if appropriate.
      g. Send us:
            - the results of both of the "/D" runs
            - a copy of the BAT file
            - what messages are presented when lesspace loads
            - what messages are presented by the app load/unload
            - what messages are presented when lesspace unloads
            - extensive details of your app, and your problem
            - indicate how far you got through these steps, and the results of each.

To facilitate the recording of your HD specs, you might try:
      Lesspace /D >x or Lesspace /D >>x
and then send us the "x" file(s) (either as a file, or fax, or note, etc).

   8. If we still have no success, we can supply additional "trace" utilities, which might indicate some unusual details about your system not yet understood by lesspace - and perhaps update lesspace accordingly.

Note: If you are using the Epoch option, don't forget that you must use the /E command-line option, and you must use a modified EXE file - together. Using the /E option without the modified EXE file will achieve nothing. Using a modified EXE file without /E will probably cause major crashes.

Note on Sun-Unix drivers:
Some users who are running networks into Sun-Unix servers have sent us some "/D" traces. These show disk specs, as seen by DOS, which are not normal, and are not acceptable to lesspace. Lesspace would not function properly if accesses were made to these mapped drives. The "Sectors-per-Cluster" (Sec/Clu) value was 0000 which is unusual for any DOS drive. This data would likely confuse other low-level utilities also, or even some app software. We briefly tried to change lesspace so that it would assume a reasonable value in these circumstances, but this cover-up was not always successful. We also noticed some extremely large "Sector-Sizes" (eg, 32768, whereas the usual is 512), but lesspace should cope with these values.

If you see values like "Sec/Clu = 0000" in the /D traces, we recommend that you seek an improved driver, or check if you can configure your client software to deliver the correct values. Also, you might try some diagnostic tools, or low-level "information" tools, to see how other products treat these unusual HD specs. In an emergency, perhaps we can somehow amend lesspace to assume the correct value, but this would not seem to be the proper solution.

Damage Detection:
As of ver 2.3, lesspace has some additional internal code to automatically detect internal corruption of it's data and code, while it is running. This was considered desirable after we came across some drivers which caused some damage to other active programs (including lesspace), while seemingly executing correctly themselves !.

This damage-detection is a catch-22: if the lesspace code is damaged, it probably won't run correctly anyway. If the code to detect corruption is itself damaged, we probably won't be informed. But, perhaps it'll appear sometimes, and therefore initiate investigation of the causes !. We hope that lesspace does not damage itself, and that any reported damage is caused by some other active software !.

If corruption is detected, a message prints on the screen (the screen is assumed to be in text mode), indicating the damaged location(s) in lesspace, and the actual (damaged) and expected contents. If this arises, you should note the details, re-boot, and try to establish the real cause. If you suspect corruption of this nature during tests, try to leave the screen in text mode, so that any message is visible.

And we don't have an option to Disable this checking - if it occurs, it's extremely serious - irrespective of the cause !.

A special thanks to Harry Goldman, Dickford Cohn, Helge Larsen, Edwin Hattenschwiler, Steve Green, Kevin Mitchell, Barry Schnur, Kevin J. Donaker-Ring, Sunil Pillai, and very many others, both on CIS and on the "Paradox Newsgroups", who have helped with testing of the TSR, feedback, responding to customer queries, and in many other ways. Thank You !!.

Version History:
    1.0 Internal
    1.1 Internal
    1.2 Internal
    1.3 Internal

    1.4 First public release.

    1.5 "/Q" implemented, to suppress some error messages. "Fix" for the Int-24 problems (eg, DriveStatus() on Floppies and CDs in Paradox).

    1.6 "/R" command-line implemented.

Note: Some people suggest that PDox 3.5 cannot handle hard disks larger than 1GB, whereas later PDox releases can handle up to 2GB or 4GB. (My tests suggest that 3.5 can handle 2GB, though it may choke on smaller sizes, depending on the HD specification). To better accommodate Paradox 3.5, the size threshold has been reduced from 2GB to 536MB.

    1.7 The "UnLoad" code was updated slightly, to correct a problem at some Win95 sites, where a previously unloaded image of the tsr still survived, even though the DOS-box was closed !.

If you use a version prior to 1.7, a suggestion is to always run something, just after lesspace has been unloaded, to ensure that the old copy of the lesspace code in ram is destroyed.

    1.8 Internal, and beta sent to a few users.

    1.9 "/Q" extended to suppress both Duplicate Loading and Not UnLoad messages. "/Q" does not apply to an UnLoad request, where the tsr vectors cannot be safely restored, and therefore the tsr cannot be unloaded.
"/D" option added.
Some code-alteration checks have been included, to detect virus attack, file-corruption, etc.
This doc file has been revised significantly, particularly to explain the problems addressed by the utility, and to cover some of the most frequently asked questions.
Additional changes to accommodate Cluster-Size calculations - eg, FileSize() in Paradox.

    2.0 Included an additional internal Int-24 handler, when "/D" is used, to cater for CD drives without CDs, etc. A paradox, you might say, having already included fixes for the WINDOWS Int-24 handler !!!.
Some minor internal tweaks, and documentation updates.

    2.1 Revised internal Int-21 traps - for slightly faster execution.
Inserted User-ID, etc, in the loading... messages, as requested by a few users to facilitate a Software Audit.
Killed off some unnecessary internal debugging code left over from 2.0.
Slight mods to this document - mainly related to the "/R:" option.
All registered users should be on 2.1, at least. If you are registered, and not running 2.1, please let us know.

    2.2 Yet a further revision to the internal calcs code. The changes are as follows, and are not of earth-shattering significance in most circumstances !:
        - Up to now, if the HD parms were too high, they were adjusted downwards, and then both the Total-Space, and the Free-Space were further adjusted, if needed, using the revised HD specs. This has been changed so that only the Total-Space is initially checked against the revised HD specs. Then the Free-Space parameters are checked, using the ORIGINAL HD specs, and revised if needed. The end result is that the returned Free-Space may now be somewhat higher and more meaningful, though, obviously, still reduced, if needed.
        - If the modified Free-Space works out higher than the modified Total-Space, the Free-Space parameter is reduced so as to be slightly less that the Total, just to make the results "look" good.
Included some STDERR Outputs. so that relevant user-messages always go to the screen, even if Output-ReDirection is enabled. Thanks, Edwin !.
It is not intended to automatically upgrade 2.1 registered users to 2.2, because the changes (for them) are trivial, and would not generally justify the hassle. However, 2.2 will be sent to any registered user who requests it.

    2.3 Added support for the "/L" and "/S" Command-Line options.
Changed the default max size reported to an app from 536MB to 805MB.
Forced some additional "STI"s (enable interrupts) on return from internal Software Interrupts. This was useful to overcome some "lockout" problems at one site, after some other driver software resulted in ints being unexpectedly disabled when exiting from interrupt service routines. We had some reports that the presence of lesspace had the side-effect of eliminating slow DOS clocks - probably due to these additional STIs.
Improved the Already Loaded ? tests slightly.
Activated automatic detection of corruption of the lesspace code in RAM. (See separate note above).

    3.0 Updated the /D on-screen comments slightly.
Updated this text file with the Sun-Unix notes, revised trouble-shooting, notes on SysCon, and with some other small changes.
Added the Set Epoch option, mainly for Paradox-DOS apps.>

    3.1 Included the web-site URL, and the e-mail address on the screen prompts.
Made some internal preparations for the imminent release of the LESSUPDT (Auto-Upgrade) utility.

    3.2 Activated the /W command-line option - which is of no darn use anyway !!. And I made two internal changes, because some versions of XCOPY would not run correctly when lesspace was active - as reported by Minh Tran:
   - The STACK handling was improved very significantly - separate internal stacks are now assigned for Int-21 and Int-24. Some tests suggested that the stack in XCOPY might be small, though this was not confirmed. This change increases the size of the resident code in lesspace by 500-600 bytes.
   - Improvements were made to the mechanisms to pass the CPU Flags between lesspace and other apps loaded after lesspace. Again, this was not confirmed to be an issue with XCOPY, but it represented an overall improvement in lesspace.
When both of the above mods were implemented, XCOPY seemed to work correctly.

Most updates to lesspace address specific issues. However, the 3.2 updates represent important general improvements within the lesspace code. My strong recommendation for all users is to use 3.2 or later.

    3.3 Implemented the If-Exist-Nul fix-up for W2K, with a /N command-line option to disable this fix-up (if needed!).

    3.4 Implemented the /Z command-line option, as explained above.

    3.5 Implemented the /Mn command-line option, as discussed under UserName() above. Also removed some debugging baggage (code!) left-over from the 3.4 tests.

    3.6 Implemented the /T command-line option, to prevent NTVDM blow-ups (in XP) when Lesspace tries to load on Toshiba Tecra S1 laptops.

    3.7 Extended the /D contents.

    3.8 Updates to the internal Int-4E code for single-char Foldernames. Major tweaks to the handling of the internal stacks.

Updates / Multiple versions:
When testing, or replacing an older version, do not mix versions of this utility. Specifically, if you LOAD any version of the utility, please use THE SAME version (with /U) to unload that one from RAM. It is unlikely that one version will succeed in recognising and Un-Loading a different version !.

Legalese (briefly):
The LESSPACE program is Shareware, and 1996-2004, Michael Kennedy. The shareware release is supplied for evaluation purposes only, on a try before you buy basis. [We intended releasing the utility as Freeware, but initial reactions indicate that it probably would be used in large critical installations, where some support, and updates, would be desirable for most users. We are definitely not in a position to supply free support for a free utility !!].

You may not sell the utility. You may distribute only the Shareware Evaluation Release of the TSR, only unaltered copies of the files, and only as a set containing all 3 files.

The author accepts no responsibility whatsoever for any damage or loss caused by the use (or abuse) of this utility. As applies to all software, if you intend evaluating or using it, you should first (and regularly):
    - Verify that the copy you receive is not infected with any Virus, and try to ensure that it has not been otherwise corrupted (i.e., reputable source !),
    - Ensure you have a good backup of all your programs and data,
    - Run "stress tests" on this utility, to establish if it fully meets your requirements.

A full Agreement/License document, relating to the registered version, is available, on request.

Support / Problems / Registration / Upgrades ?:
The utility has been satisfactorily tested in many configurations, and is now in widespread use. If, after evaluation, you intend using it, you must become a registered user. If you are registered, then, for the 12 months following registration:
    - A registered copy of the utility will be emailed/mailed to you on registration. This occurs normally within 1 to 2 working days. If you don't hear from us within a few days, please contact us again, perhaps using a different method. (One user waited for 2 months, only to then discover that we had not received their initial mailing !).
    - Registered updates will be emailed/mailed to you automatically. We will not burden you with trivial or irrelevant updates !.
    - If you have any queries or problems with the utility, please let us know. We will certainly consider all, and, hopefully resolve some. If your configurations are not currently supported by the Utility, we may be able to extend it (eg, see "/D" option), though, depending on the circumstances, this may incur special charges.
    - At any time, you may request a fresh copy of the latest release of the utility.
    - If you're a registered user, please quote your reg-no in all correspondence. Thanks !.

For any inquiries, submission of registration, etc, please use the feedback form, or e-mail us.

Shareware vs Registered release:
The registered version contains all features discussed here.

The shareware release contains all the features discussed here, except:
    - it shows a slow evaluation message, while loading/unloading,
    - it does not handle memory as efficiently,
    - it does not support the following command-line options: /Q, /R, /L, /S, /E, /N, /W, /Z, /M, /T.
    - it does not include support for Int-24 problems, nor for the associated If-Exist-NUL fixup.

Y2K Statement:
The lesspace software is fully Y2K compliant. Apart from the Epoch option, dates are not used in the lesspace suite. And with the Epoch option, only adjustments are made to the way dates are entered or displayed by other products. For a full excellent Y2K compliance definition, see BSI.

Licence Agreement:
This is the suggested text of a simple agreement. If you have specific legal requirements, please let us know.

End-User of the "lesspace" utility: ___________________________________________________
   Maximum No of PCs running lesspace: ______________________________________ (in words)

This is an agreement between you, the above stated end-user of the registered software, and Michael J. Kennedy, of 112 Beech Park, Lucan, Co. Dublin, Ireland, the developer and vendor of the software, as per the following terms and definitions. By registering the software, and/or by using the registered software, you accept the terms of this agreement. If you do not agree to the terms of this agreement, promptly return the registered lesspace software to the vendor, remove all copies from your computers and backup systems, and so confirm in writing. A partial or full refund shall be issued, at the discretion of the developer.

SOFTWARE: Where used in this agreement, this refers to the machine-code registered release of the lesspace utility program, named LESSPACE.COM, and associated document files, including FILE_ID.DIZ and LESSPACE.TXT, and any additional associated software and documentation. A limited set of the software is available as evaluation shareware, and the complete set as registered shareware.

REGISTRATION / SUPPORT PERIOD: Users register by paying an initial registration fee which covers an initial 12-month support period. Registered users may extend the support period by further 12-month periods, by paying an annual renewal fee, provided that renewals are not interrupted.

DURATION: This entire agreement applies within the support period. This agreement also applies thereafter, indefinitely, even if you do not renew support, but subject to additional terms stated herein.

LICENCE: This agreement permits you to use the registered software indefinitely, but on not more than the above stated number of computers at any one time. The software is in use if it is loaded into the RAM memory of the computer. If the number of simultaneous users might exceed the above limit, then you must have a reasonable mechanism or process in place, to assure that the above limit is not breached. If necessary, you must obtain additional licences, whether during or subsequent to the support period.

COPYRIGHT: The software is owned by Michael J. Kennedy, and is protected by all applicable national and international laws. You may make copies of the software only to facilitate it’s use on the permitted computers, and for backup purposes. You may neither temporarily nor permanently loan, rent, lease, sub-licence, or transfer the software, or your rights to use the software, to other users, except as permitted in this agreement. You may not reverse engineer or disassemble the program code. You may not modify the program code, nor any of the accompanying document files.

WARRANTY: The vendor warrants that:
  - The software will perform substantially in accordance with the specifications in the supplied document files.
  - If the files are submitted on diskette and/or CD, then the media will be free from defects in materials and workmanship, under normal use, for a period of 30 days from the date of dispatch.
  - Relevant updates of the software will be dispatched to you, at the vendor’s option.

REMEDIES: The vendor’s entire liability and your exclusive remedy shall, at the vendor’s option, be:
  - a return of the software and/or media, for a partial or full refund of monies paid, or
  - replacement of the software and/or media which do not meet the above warranty, or
  - modifications to the software and/or documentation, to more closely meet your requirements. Special modifications may incur additional costs to you.

The above warranties and remedies apply only within the support period.

The vendor disclaims all other warranties, either express or implied, including but not limited to, implied warranties of merchantability and fitness for a particular purpose, with respect to the software, the accompanying document files, and any media. This limited warranty may give you specific legal rights. In no event shall the vendor be liable for any other damages whatsoever arising out of the use of, or inability to use, the lesspace software, even if the vendor has been advised of the possibility of such damages. In any case, the vendor’s entire liability, under any provision of this agreement, shall be limited to the amount actually paid by you for the software, and only if such liability arises within the support period.

Note: US spelling is "license", elsewhere "licence". Two copies of this agreement must be authorised by both the Vendor and Client, one for each party.

[End of Agreement]

Home ] Lesspace Summary ] PatchCRT ] AwardMJK ] Paradox-DOS ] Re-Build OE ] Old Apps ] Time Dilation ] MOConnor ]