NEED, AVOID AND SNIFF

Last updated by Roedy Green on 2008-03-11

                           PURPOSE

NEED.COM, AVOID.COM, and SNIFF.COM are a trio of utilities
for ensuring the environment is friendly before continuing.
They will test the waters for and report back on such things
as:

1.   Is DESQview running?

2.   Is there sufficient conventional, extended and expanded
  RAM?

3.   Is there sufficient free disk space?

4.   Are the necessary DOS utilities loaded like QEMM,
SHARE, and BTRIEVE?

5.   Do you have a sufficiently powerful CPU? and NPX
(numeric co-processor)?

6.   In this the right day of the month, or day of the week,
time of day to run this job?

You tell NEED what you want, then it does all the tests then
returns a simple GO/NO-GO ERRORLEVEL you can test.  If it is
0 all is ok.  If it is 1, one or more of the requirements
failed.

Since MASM source code is provided to registered owners,
(see the end of this document for information on
registering) and since it was written very modularly, it is
very easy to cannibalize routines from it to include in your
own code so long as the code is not used for military
purposes.

NEED, AVOID and SNIFF are copyrighted but may be copied
freely and used for any purpose but military.  See the end
of this document on how to register if you want the latest
version or the MASM source code.

TYPICAL USE

NEED and AVOID are a complementary pair of utilities.  NEED
is for telling what you WANT, and AVOID is for telling what
you DON'T WANT.  SNIFF is just for finding out what's out
there, without any preconceived notion of how it should be.

     NEED  DESQview  DOS3.3-  80386!  C:3MB

     If Errorlevel 1 GoTo Trouble

DESQview       means you must be running under DESQview.

DOS3.3-        means you need DOS 3.3 or lower.

80386!         means you must have an 386 processor, no more
               no less.

C:3MB          means you must have at least 3 MB of free
               disk space on drive C:.

     AVOID   DESQview   DOS3.3-  80387!

     If Errorlevel 1 GoTo Trouble

DESQview       means you must be NOT running under DESQview.

DOS3.3-        means you cannot run on DOS 3.3 or lower.

80387!         means you program will not work if there is
               an 80387 numeric co-processor present.

     SNIFF  DESQview  DOS  CPU  C:

     Rem Sniff does not use the errorlevel.

DESQview       means is DESQview is running?

DOS            means what version of DOS is running?

CPU            means what kind of CPU do you have?

C:             means how much space is left on drive C:?

SUFFIXES

Just skim this section on first reading.  It will make a lot
more sense later once you have seen some more examples.

Some parameters may have a trailing + ! or -.

+ means "and up" as in "DOS3.3+"

- means "and lower" as in "DOS3.3-"

! means "this and only this" as in "DOS3.3!"

If you don't specify a suffix, both NEED and AVOID presume
!.

However, for capacity-type words such as EXP:400K, NEED
 presumes +.

YEAR:1991, MONTH:12, DAY:31, HOUR:23 and MINUTE:59 have a
default suffix of !.  It never hurts to override the
default.  Using explicit suffixes will make your BAT files
easier to understand.  The default suffixes are shown with
the documentation on each possible parameter.

In other words:

     NEED DOS3.3

 means the same as:
     NEED DOS3.3!

means you want JUST DOS 3.3 and nothing else will do.

where:

     NEED DOS3.3+

means you want DOS 3.3 or higher.

     NEED DOS3.3-

means you want DOS 3.3 or earlier.

Similarly:

     AVOID DOS4.01

means the same as:

     AVOID DOS4.01!

means you want to avoid DOS 4.01, but all other versions are
acceptable.

     AVOID DOS4.01+

 means you want to avoid DOS 4.01 and all later versions.
     AVOID DOS4.01-

means you want to avoid DOS 4.01 and all earlier versions.
The three suffixes + - and ! make sense for version-type
parameters.

None of the suffixes make sense for a parameter like QEMM
which is either present or not.  However, suffixes do apply
to CPU and NPX-type parameters like 80386DX and 80387 which
can be ordered by power.  e.g. NEED 80286+ means you want an
80286 or more powerful CPU.

For capacity-type parameters like C:40MB, only + makes
sense, which is the default anyway.  However, in AVOID, only
C:40MB-makes sense.  This all sounds much more confusing
than it really is.  Just experiment, you will catch on
pretty quickly.

Is all that on suffixes just too confusing?  Rejoice.  SNIFF
ignores all your suffixes.  No matter what you do with them
it will accept them.

GENERAL SYNTAX RULES

On first reading, just skim this section.

K or KB  means "measured in 1024 byte units".  For example,
to insist on having at least 400 kilobytes (40,960 bytes) of
free RAM type:

     NEED  RAM:400KB

M or MB means "measured in megabyte (1024x1024) units".  For
example, to insist on 20 megabytes (20,971,520 bytes) of
free space on drive C:, type:

     NEED  C:20MB+

The use of FORWARD SLASH / to introduce a switch is
optional.

You can say:

     NEED  /DESQview

or

     NEED  DESQview

If there are no separating slashes, then parameters must be
separated by blank space.  No spaces are allowed within a
single parameter however.

The command line is CASE INSENSITIVE.  You can put letters
in any combination of upper and lower case you like.

Numbers may contain optional commas.  The commas are
ignored.

Numbers may also contain decimal points.

In Norway, home of the world's most enthusiastic beta
testers, the roles of comma and decimal point are reversed.
In general the "thousands separator" and "decimal separator"
are taken from the DOS Country.Sys information, so comma and
decimal are different dependent on your country.  Either the
comma or point may be used in version type parameters such
as /DOS4,01 or /DOS4.01.

Parameters have a short form and sometimes various alias and
long forms.  Intermediate length names are not allowed.  If
I did allow intermediate forms, then later I might later
implement a new parameter that could break existing BAT
files by rendering existing use of a an intermediate length
parameter ambiguous.

You can put as many parameters as will fit on the command
line.  There is only one output_the ERRORLEVEL which is
either 0 for GO, 1 for NO GO, or 4 for syntax error.  The
program will display messages for each test passed or
failed.  They can be suppressed with >NUL:.  If you want to
have individual control for recovery purposes, test only one
parameter at a time.  The utility is around 8K, so it will
not take long to load it multiple times, especially if you
have caching.

Any syntax error beckons a help display with a brief summary
of the syntax.

There are three kinds of commands:

  1.   Plain words that test for the existence of something.
     e.g. 386MAX   8086   PCDOS   EXP

  2.   Capacity words with a colon followed by a number:  e.g.
     RAM:40K   C:2MB   EXP:400,000

  3.   Version words followed directly by a number without a
     colon: e.g.   DOS4.01   PCDOS5.0

Note that some words come in more than one flavour.  For
example, /EXP tests for the existence of a expanded memory
manager, but /EXP:400,000 checks that a certain amount for
free expanded RAM is available.   /PCDOS checks that any
version of IBM PC DOS is running, but /PCDOS3.1 tests that
version 3.1 is running.

SNIFF is much more laid back than NEED or AVOID.  You may
optionally leave out the version or the capacity so:

RAM   RAM:  RAM:4K   C   C:   C:100K   DOS  DOS4.1+ are all
equally acceptable to SNIFF.

NOTE

The suffix shown after each word following is the DEFAULT
SUFFIX you will get if you don't specify a suffix.

PARAMETERS

386!           You require an 80386-DX CPU.

386MAX!        You must be running with the 386MAX memory
               manager active.

486!           You require an 80486-DX CPU.

4DOS!          You must be running under 4DOS.  If you are
               running under COMMAND.COM under 4DOS this
               will still be considered as running under
               4DOS.

80186!         You require an 80186 CPU.

80188!         You require an 80188 CPU.

80286!         You require an 80286 CPU.

80287!         You need an 80287 numeric coprocessor.

80386!         You require an 80386-DX CPU.

80386DX!       You require an 80386-DX CPU.

80386SX!       You require an 80386-SX CPU.

80387!         You require an 80387 numeric coprocessor.

80486!         You require an 80486-DX CPU.

80486DX!       You require an 80486-DX CPU.

80586!         You requere a Pentium CPU.

8086!          You require an 8086 CPU.

8087!          You require an 8087 numeric coprocessor.

8088!          You require an 8088 CPU.

A20            You require that A20 addressing line be
               active for high memory access.

AND            Since multiple conditions are combined with
               an implied AND, this word is never necessary.
               You just include it to make things clearer
               when you are using a mixture of ANDs and ORs.
               e.g. NEED C:10MB AND RAM:300K.  see also OR.

ANSI           You require that ANSI.SYS be loaded in your
               CONFIG.SYS.  Some other drivers may partially
               simulate ANSI.SYS, and will appear to
               NEED/AVOID as if they are ANSI.SYS.  If you
               use redirection e.g.       SNIFF ANSI >
               TEMP.TXT under DOS versions prior to 4.0,
               then the ANSI test will not work.  Under old
               versions of DOS, Windows in real mode also
               interferes with the ANSI test.

APPEND         You require the DOS APPEND command to be
               active.

ASSIGN         You require the DOS ASSIGN command to be
               active.

AT             You require a AT style BIOS.  See /BIOS.

BIOS+          NEED BIOS is a synonym for NEED EXOTIC+.
               AVOID BIOS is a synonym for AVOID EXOTIC-.
               SNIFF BIOS means "What kind of BIOS do I
               have?"  Exotic, XT, AT or PS2?  The test
               depends on the machine id byte at location
               F000:FFFE in the ROM BIOS.  If your machine
               is a non-standard "exotic" clone, SNIFF
               cannot tell which kind of BIOS you have.
               SNIFF will report the non-standard machine-id
               code.  Please report it to me and details
               about your machine, so I can teach SNIFF to
               recognize it.  BIOSes are ranked so that you
               can say:
               NEED  XT+
               meaning EXOTICs will not do, but XT, AT or
               PS2 is ok.  When NEED says you have an AT, it
               simply means you have an AT BIOS.  This has
               nothing whatsoever to do with your CPU.  It
               might be a 286, SX, 386 or 486.  When it says
               you have an XT BIOS, you might even have even
               have an Intel Inboard 386.  If it says you
               have a PS2, there is a good chance you don't
               have a PS/2 microchannel machine.  You simply
               have a BIOS of the style used by PS/2
               computers.

BTRIEVE        You require the Novell BTRIEVE Btree indexed
               file manager to be loaded.

BUS            NEED BIOS is synonymous for NEED ISA+.  It
               normally only makes sense with SNIFF to tell
               what kind of BUS you have, ISA, MCA, or EISA.

C:3MB+         there must be at least 3 MB of FREE disk
               space on drive C:.  You may use drives A:
               through Z:.  Note SNIFF C: will tell you the
               amount of UNUSED, FREE, UNALLOCATED,
               AVAILABLE space on your drive.  IT DOES NOT
               REPORT THE *TOTAL* AMOUNT OF SPACE ON YOUR
               DRIVE.  Only unallocated disk space is of any
               interest or use to programs.

CPU+           This does not make much sense in NEED or
               AVOID though you may use it.  In SNIFF it
               means "What kind of CPU do I have?" Run these
               tests under DOS. OS/2 or Windows can
               interfere with the determination.

D:1+           There must be at least one free byte of disk
               space on drive D:.  This could be used to
               detect the presence of drive D:

DAY:31!        means you can only run this program on the
               31st of the month.  /DAY:28+ means you can
               only run it on the 28th, 29th, 30th or 31st
               of the month.  Beware of using /DAY:31 since
               in many months it never happens.

DESQ           You must be running under DESQview.

DESQ2.31!      You must be running under DESQview version
               2.31.

DESQview       ou must be running under DESQview.

DESQview2.31!  You must be running under DESQview version
               2.31.

DOS10.0!       You must be running in the OS/2 compatibility
               box which is considered as DOS 10.0+

DOS2.1!        You must be running under DOS 2.10.

DOS3!          You must be running under DOS 3.00.

DOS3.00!       You must be running under DOS 3.00.

DOS3.31!       You must be running under DOS 3.31

DOS5.0!        You must be running under DOS5.0.  NT
               simulates running under DOS 5.0.

DOS7.0!        You may specify any version number, not just
               those listed here.  NEED/AVOID can tell
               DOS4.00 and DOS4.01 apart even though DOS4.01
               lies about its true identity.  In theory,
               this is impossible. How does NEED do it?
               Register and peek at the source code.

DPMI           You must be running with a DOS Protected
               Memory Interface manager (DPMI).  There is NO
               matching DPMI:40K test for determining how
               much DPMI RAM is available since running such
               a test would require entering protected mode.
               The only time this test will ever come up
               true is if you are running under Windows 3.x
               in enhanced mode.

DRDOS          You must be running under Digital Research
               DRDOS, any version.  Both DRDOS and DRMDOS
               are treated as equivalent.

DRDOS5.0!      You must be running under DRDOS 5.0. You can
               specify any version.  Internally DRDOS
               pretends to be Compaq DOS 3.31.

DV             You must be running under DESQview.

DV2.31         You must be running under DESQview version
               2.31.

DX!            You require an 80386-DX CPU.

EISA           You must have an EISA bus.

EMM            You must have an expanded memory manager
               active. EMM is an alias for EXP.

EMM:100,000+   You must have 100,000 free bytes of EMM RAM
               EMM is an alias for EXP.  See /EXP for more
               details.

EMS            You must have an expanded memory manager
               active. EMS is an alias for EXP.

EMS:1MB+       You must have 1 megabyte of free expanded
               RAM. EMS is an alias for EXP.

ENV:300+       You must have 300 or more FREE bytes in the
               SET environment.  ENV is an alias for
               ENVIRONMENT.

ENVIRONMENT:1K+     You must have 1024 (1K) or more FREE
               bytes in the SET environment.D OS tacks the
               current program name onto the end of the SET
               environment. SET considers the area used by
               the program name as free.  So you should ask
               for a little extra to give DOS room.  Please
               note SNIFF /ENVIRONMENT will NOT report the
               total size of your environment just the
               REMAINING FREE SPACE.  This is what is of
               interest to programs wanting to fill it up
               with SET commands.

EXOTIC         AVOID EXOTIC means stay away from non-
               standard BIOSes.  See /BIOS.

EXP            You must have an expanded memory manager
               active. EXP is an alias for EXPANDED.

EXP:400K+      You must have 400 or more free bytes of
               expanded RAM controlled by a LIM EMS EMM
               memory manager. EXP is an alias for EXPANDED.

EXPANDED       You must have an expanded memory manager
               active.

EXPANDED:70K+  You must have 70 K of free expanded RAM. Note
               SNIFF /EXPANDED will tell you the amount of
               UNUSED, FREE, UNALLOCATED, AVAILABLE expanded
               RAM. IT DOES NOT REPORT THE *TOTAL* AMOUNT OF
               EXPANDED RAM.  Only unallocated RAM is of any
               interest or use to programs.

EXT:3MB+       You must have 3 or more megabytes of free
               extended RAM.  EXT is an ALIAS for EXTENDED.

EXTENDED:100K+ You must have 100K or more free extended RAM.
               The RAM can be any type_XMS, VDISK or INT 15.
               If you want to measure only the modern XMS
               RAM, use /XMS.  Note SNIFF /EXTENDED will
               tell you the amount of UNUSED, FREE,
               UNALLOCATED, AVAILABLE extended RAM.  IT DOES
               NOT REPORT THE *TOTAL* AMOUNT OF EXTENDED
               RAM.  Only unallocated RAM is of any interest
               or use to programs.  Often all your extended
               RAM has been converted to EXPANDED so that
               explains why there is none left.

FRIDAY!        It must be Friday.  Sunday is considered the
               first day of the week if you use + and -
               suffixes.

HANDLES:15     You must have at least 15 free file handles.
               File handles are needed to open more files.
               There are three limits, the global limit for
               all programs combined, which you set is the
               CONFIG.SYS HANDLES=30.  There is also the per
               task limit (normally 20).  However, HANDLES
               measures how many FREE handles are left in
               the current task_in other words, how many
               more files could you open safely.  Some
               clever progams may be able to increase the
               per task limit, and thus go beyond what
               HANDLES considers the limit.  Some other
               programs might close some files, which again
               could increase the limit beyond what HANDLES
               thinks is correct.  The main way you chew up
               handles is by loading TSRs that fail to close
               the unused standard handles.

ISA            You must have an ISA bus.

HELP           Displays a short syntax summary.  You need
               this manual though to get all the possible
               commands. PLEASE DO NOT PASS THIS PROGRAM ON
               WITHOUT THIS MANUAL.  It is too complex for
               on-line help only. If you vandalize this
               package and pass it on without the manual, I
               might even be tempted to do something illegal
               and unpleasant to you.

HIMEM          You must be running under Microsoft's memory
               manager, HIMEM.SYS that comes bundled with
               DOS.

HOUR:23!       This means you may only run this program in
               the between 11PM and midnight.  Uses 24 hour
               time.  see also MINUTE and TIME.

KEYB           You must have KEYB installed.  It may or may
               not be configured to a non-American layout.

LAN            You must be actively attached to a LAN.  It
               works by testing to see if any of drives C:
               to Z: are remote.  CD-ROM drives are detected
               and specially handled so they do not count as
               LAN drives.

LIM            You must have an expanded memory manager
               active. LIM is an alias for EXP.

LIM:0.7MB+     You must have 0.7 MB of free expanded RAM.
               LIM is an alias for EXP.

MCA            You must have a MCA (PS/2-style) bus.

MIN:59!        This means you may only run this program in
               the last minute of the hour.  see also
               MINUTE, HOUR and TIME.

MINUTE:59!     This means you may only run this program in
               the last minute of the hour.  see also MIN,
               HOUR and TIME.

MONDAY!        It must be Monday.  Sunday is considered the
               first day of the week if you use + and -
               suffixes.

MONTH:12!      This means you may only run this program in
               December.  /MONTH:2- means you could only run
               it in January or February.  /MONTH:10+ means
               you can only run it in October to December.

MOUSE!         You must have a mouse operational.

MSDOS          You must currently be running some version of
               Microsoft's MS DOS.  See PCDOS for warnings
               on difficulty telling PC and MS DOS apart.
               When it does not matter, just use the
               /DOS4.01 command.

MSDOS3.3!      You must currently be running Microsoft's
               version of MS DOS version 3.3.

NCACHE         You require Norton NCACHE disk cacher to be
               loaded possibly as a device driver in
               config.sys or as a TSR in autoexec.bat.

NETBIOS        You must have a NETBIOS type LAN active.

NPX            You must have some sort of numeric processor
               installed.  There are individual commands for
               the various types: /8087 /80287 /80386 and
               /80486. Note the /80486 CPU always has a
               built in processor.  In SNIFF /NPX just
               displays your numeric coprocessor type.

OR             Allows you to do several groups of tests.
               Only one group needs to succeed to be
               considered as overall success:  e.g.
               NEED  80387 80386   OR   80486
               This means you must have BOTH and 80387 and
               an 80386, OR an 80486 which has a built in
               numeric co-processor.  See further hints on
               logical combining later and also the AND
               command.

PCCACHE        You require Central Point's PCTools PCCACHE
               disk cacher to be loaded.  Note there is no
               dash in the name.  It has been tested with
               version 4.4 and 6.0.  I do not yet know if it
               works with other versions, in particular 7.1.

PCDOS          You must currently be running some version of
               IBM PC DOS.  NEED has a difficult time
               telling PC DOS apart from MS DOS, and in many
               cases will confuse them.  NEED works by
               asking DOS which drive is the Boot drive.  In
               versions prior to 4.00, DOS does not know, so
               NEED just guesses the same as the SET
               COMSPEC=C:\DOS\COMMAND.COM:.  Then it looks
               for the hidden, system read-only file called
               IBMBIO.COM.  If it finds it, it presumes
               PCDOS, otherwise it assumes MSDOS.  You can
               see the many ways this test could fail to
               operate properly.
               1.   Olivetti MS DOS calls their file
               IBMBIO.COM instead of IO.SYS.
               2.   If you booted from A: with PCDOS 3.3,
               and set your COMSPEC to C:, NEED will not
               know to look on your floppy.
               3.   You have installed DRDOS on top of your
               PCDOS.
               It leaves the IBMBIO.COM file in place.
               Normally you should use plain /DOS5.0 when it
               does not matter if you have PC or MS DOS.  I
               have discovered the following MSDOS versions
               masquerade as PCDOS:  Compaq, Wyse, DRDOS,
               Corona, possibly Northgate.  See /MSDOS.

PCDOS4.00!     You must currently be running version 4.00 of
               IBM's PC DOS.

PCMOS          You must be running the PCMOS multitasking
               operating system.

PENTIUM        You must have a Pentium (586) CPU.

PERI           You must be running under the Periscope
               debugger.

PERI5.1        You must be running under Periscope 5.1.

PERISCOPE      You must be running under the Periscope
               debugger.

PERISCOPE5.1   You must be running under Periscope 5.1.
               Works for any version.

PS2            You must have a PS/2 style BIOS.  Note there
               is NO slash!  This test is NOT for detecting
               microchannel computers.  See /BIOS.

QEMM           You must be running under the control of the
               QEMM memory manager from Quarterdeck.

QRAM           You must be running under the control of the
               QRAM memory manager from Quarterdeck.

RAM:500K+      There must be at least 500K free conventional
               RAM.
               NEED automatically adjusts the figure to be
               what you would have if NEED were not running.
               NEED gives you the size of the largest free
               chunk into which you could load a program_not
               the aggregate size of all the little free RAM
               fragments.   Note SNIFF /RAM will tell you
               the amount of UNUSED, FREE, UNALLOCATED,
               AVAILABLE conventional RAM.  IT DOES NOT
               REPORT THE *TOTAL* AMOUNT OF conventional
               RAM.  Only unallocated RAM is of any interest
               or use to programs.  Often all your
               conventional RAM has been eaten up by TSRs,
               so that explains why there is so little left.

REAL           You must be running in REAL mode, i.e. not
               under a virtual memory manager or any DOS
               extender that runs in protected mode.  If you
               were running under Windows in /r mode, but
               had QEMM working, you would be in virtual
               mode.  If you were running under Windows
               standard or enhanced mode you would be in
               virtual mode.  If your run in the OS/2
               compatibility box, you will be in REAL mode,
               even if you have an 80386 or 80486.  If your
               are running under QEMM, you will always be in
               virtual mode.

SATURDAY!      It must be Saturday.  Sunday is considered
               the first day of the week if you use + and -
               suffixes.

SHARE          You must have DOS SHARE active.  If you are
               running in Windows Enhanced mode, Windows
               acts like SHARE to help the various multi-
               processing tasks stay out of each other's
               hair, and so it will appear as if the SHARE
               utility itself is loaded.

SLOW           SLOW forces any sensitive subsequent tests to
               be done the slow duddy, inaccurate, mundane,
               Windows way.  You would use this if, for
               example, you had an ancient version of QEMM
               that was interfering with the CPU type
               determination tests.  NEED automatically uses
               the SLOW tests when it detects Windows in
               enhanced mode.  If your virtual monitor is
               interfering with a test and exploding, try
               using SLOW.  e.g.
               NEED  SLOW  SX

SMARTDRIV!     You require that the SMARTDRIV.SYS caching
               program be loaded.  Other brands of cacher
               that mimic SMARTDRV may give false positives,
               however NCACHE and PCACHE will not since
               there are special checks for them.

SUNDAY!        It must be Sunday.  Sunday is considered the
               first day of the week if you use + and -
               suffixes.

SX!            You require an 80386-SX CPU.

THURSDAY!      It must be Thursday.  Sunday is considered
               the first day of the week if you use + and -
               suffixes.

TIME:13:00!    This means you may only run this program in
               the 60 seconds following 1 PM.  Uses 24-hour
               time.  To allow to run between 1PM and 1:30PM
               you would write:
               NEED  TIME:13:00+  TIME:13:30-
               There is an implied AND between the two
               parts.  To allow to run between 11:30 PM and
               1:30 AM you would write:
               NEED  TIME:23:30+  OR  TIME:01:30-
               Alternatively you could write:
               AVOID  TIME:01:31+  AND  TIME:23:39-

TUESDAY!       It must be Tuesday.  Sunday is considered the
               first day of the week if you use + and -
               suffixes.

V20!           You require a NEC V20 CPU.

V30!           You require a NEC V30 CPU.

VCPI           You must be running under the control of a
               Virtual Control Program Interface  (VCPI).
               If you have QEMM or 386MAX you will see VCPI
               active.  It will remain active under Windows
               real and standard versions but will disappear
               under Windows enhanced since Windows enhanced
               mode cannot tolerate programs that use
               protected mode, unless they are specially
               coded to run by Windows rules.

VCPI:500K+     Your require at least 500K free RAM under the
               control of a Virtual Control Program
               Interface (VCPI).  By now you get the idea.
               SNIFF /VCPI reports FREE VCPI RAM, not total
               VCPI RAM.  A program like DESQView might take
               it all to parcel out to support its windows.

WEDNESDAY!     It must be Wednesday.  Sunday is considered
               the first day of the week if you use + and -
               suffixes.

WEEKDAY+       This does not make much sense in NEED or
               AVOID, but in SNIFF it can be used to display
               the day of the week e.g. Sunday.

WIN2!          You must me running under Windows 386 version
               2.x

WIN3E!         You must be running under Windows 3.x in
               Enhanced mode.  When you are in enhanced
               mode, you will find the DPMI manager becomes
               active, and Windows suddenly thinks it is
               impertinent to ask about VCPI.  If you do,
               she will give you a protection violation.
               SNIFF just says VCPI is not there if WIN3E is
               present.

WIN3R!         You must be running under Windows 3.x in Real
               mode.  If you have QEMM running the Microsoft
               Windows test reports Windows in real mode as
               if it were in standard mode.  Since the
               machine is in REAL mode, you will never see
               any DPMI protected mode RAM.

WIN3S!         You must be running under Windows 3.x in
               Standard mode.  Since the machine is in REAL
               mode, you won't see any DPMI protected mode
               RAM.

WFWG!          You must be running under Windows For
               WorkGroups.

WIN95!         You must be running under Windows 95

WINDOWS+       You must be running under control of some
               version of Windows (even version 2 is ok).
               In SNIFF it displays the version of Windows
               you are using if any.  Versions order
               include: WIN2 WIN3R WIN3S WIN3E WFWG and
               WIN95.  If you run under DOS under WinOS2
               that will be considered as NOT running under
               Windows.  Similarly if you run in a DOS box
               under Windows/NT emulation, it will not be
               considered running under Windows.

XMS            There must be an XMS extended memory manager
               active.

XMS:400K+      There must be at least 400K of free extended
               RAM managed by an XMS memory manager.  Sniff
               /XMS reports only FREE XMS RAM, not total XMS
               RAM.  If you have less than you think you
               should, consider that with QEMM, XMS and EXP
               memory are drawn from the same pool.  An
               EXPANDED memory user may have gobbled up your
               XMS RAM.  Many programs quietly eat up EXP
               RAM -- 4DOS, BTRIEVE, . . .  If you are
               running under DESQView, you control the
               amount of XMS RAM available to a window with
               the [Maximum Expanded Memory Size in K]
               option.  QEMM treats XMS and EXP as if they
               were almost the same.

XT             You require an XT style BIOS.  See /BIOS.

YEAR:1992!     This means you can only run the program in
               the year 1992.  If you used /YEAR:1992+ you
               could only run it starting in 1992 and in
               subsequent years.  Note you MUST specify
               /YEAR:1991.  You cannot just say /1991.

Z:10.0MB+      Drive Z must have 10 MB or more free space on
               it.

TROUBLE SHOOTING

Wrong Amount of RAM, Disk Space, etc

Many users have reported a "bug" that NEED, AVOID and SNIFF
are calculating the free memory or free disk space
incorrectly.  These programs are designed to calculate
**FREE** space_NOT TOTAL SPACE!  In other words they
calculate how much room is LEFT.

NEED and AVOID are the advance guard who go in to see if it
safe for more delicate programs to follow.  These
application programs don't give two hoots how much RAM you
have or how much disk space you have in total.  What they
care about is how much RAM or disk space is AVAILABLE that
they can USE.

In addition users are alarmed when SNIFF reports NO free XMS
RAM or no free EXPANDED RAM.  Often, the reason there is no
FREE RAM, is because some program is USING all of it.  This
is good.  Otherwise you would be WASTING it.

Under DESQview no XMS, EXPANDED or EXTENDED memory is
available unless you edited the PIF to tell DESQview to
allot some.

Also merely having Extended or Expanded RAM hardware is not
enough for it to be usable by your programs.  For expanded
RAM you must have an expanded memory manager of some kind.
For extended RAM you must have an INT 15 or XMS or VDISK
style memory manager.  Usually the expanded and XMS drivers
are loaded as part of CONFIG.SYS.  Int 15 should supported
as part of your AT BIOS.  If you don't have an appropriate
memory manager, the memory is not usable and so SNIFF will
report 0 bytes available.

Canned Bat Files

I have included a sample file called SNIFFTST.BAT that
exercises SNIFF to tell you everything it knows about your
machine.  You can use that as a model to create your own
works using SNIFF.  Make sure SNIFF.Com is on the path or
modify the file to use explicit directory names on
SNIFF.COM.

I have also included a sample file called NEEDTST.BAT that
exercises NEED.  You can use it to model your use of
NEED.COM.  There is also a file called AVOIDTST.BAT that
exercises AVOID.COM.

Tracking the Cause of errors

NEED and AVOID are not very helpful in their error messages.
If you are having trouble figuring out what NEED or AVOID
are complaining about, try your tests separately rather than
putting many on one line.  However, by looking at which
tests on the line it has completed, you can guess which
command it is choking on.

Perhaps you have inserted some invalid space.  Particularly
watch /DOS4.01, not /DOS_4.01.  Perhaps you have applied a
suffix +, !  or - that does not make sense in that context.

Perhaps you are using one of the parameters that has not
been implemented yet.  You might be trying something like
/QEMM:5.12.  There IS no version support test for QEMM yet.

Possibly you have found a bug in NEED/AVOID/SNIFF.  This is
most likely if you are using an older version of DOS.  I
personally have only tested with MS DOS 4.01 and DOS 5.0,
though my beta testers have tried it on quite a variety of
machines.

You can try the SLOW parameter if your machine is hanging on
the CPU type determination tests.  e.g. try:

     NEED   /SLOW   486

     NEED   /SLOW   SX

Care With Colons

Be careful with colons.  Sometimes they must be present.
Sometimes they must be absent.  Check the list of supported
combinations.  Note the following:

     NEED  DOS4.01       *NOT*  NEED DOS:4.01

     NEED  MSDOS         *NOT*  NEED MSDOS:

     NEED  C:40K         *NOT*  NEED C40K

     NEED  MOUSE         *NOT*  NEED MOUSE2.0

     NEED  EXT:1         *NOT*  NEED EXT

INVALID SUFFIXES

You and I may have a disagreement about which suffixes make
sense on which parameters.  If NEED rejects your command
line, try removing suffixes.  Note the following is ILLEGAL.
Even if it were legal, it would not mean what you think:

     NEED  DESQview-

Instead, to insist DESQview to be absent, say:

     AVOID  DESQview

Even though I don't show it in the manual, actually the !
suffix is always allowed, so the following is LEGAL.

     NEED  DESQview!

And Versus Or_Logical combining

When you combine tests they are combined with an implied
AND. You can override the usual meaning with OR.  To make
things clear you may also insert an explicit AND.

The most likely error you will make is this:

     NEED 80286 80386DX

This will always fail.  What is says is your CPU must be
simultaneously both an 80286 AND and 80386.  It cannot, so
the test always fails.  All the tests on the line must pass.
To get the effect of 80286 OR 80386 you could handle this in
several ways:

     NEED  80286  OR  80386DX

If you wanted to include the SX too, you would have to say:

     NEED  80286  OR  80386SX  OR  80386-DX

You could also handle it by testing one at a time:

     NEED  80286! >NUL:

     IF NOT ERRORLEVEL 1 GOTO OK

     NEED  80386! >NUL:

     IF NOT ERRORLEVEL 1 GOTO OK

     :TROUBLE

     ECHO Neither 80286 nor 80386

           ...

     :OK

     ECHO Is an 80286 or an 80386

The >NUL: hides the error messages that NEED would generate.
Note the spelling of >NUL: with one "L".  If you said >NULL
DOS would try to direct the output to a file called NULL.
On a LAN this might not be legal.

You could handle it another way_using AVOID.

     AVOID  8086-   80486+

This says avoid any CPU the equivalent of an 8086 or lower,
and an 80486 or higher.  Anything else should be an 80286,
SX or 80386.

You are likely to make a similar same error this way:

     NEED Monday Wednesday Friday

That will not work because NEED is so pea-brained it thinks
you mean it must be Monday AND Wednesday AND Friday all at
the same time, today_which can never happen.  You need to
say:

     NEED   Monday  OR  Wednesday  OR  Friday

Note that ALL those ORs are needed.  You CANNOT say:

     NEED  Monday  Wednesday  OR  Friday

Dinosaur-brained NEED thinks you mean NEED (Monday AND
Wednesday) OR Friday.  Note that NEED does not understand
parentheses or the word "AND"_just the word "OR".

You can use NEEDs insistence on redundancy to your
advantage.  If you say:

     NEED  C:4MB EXT:1MB   OR   C:5MB

This means you need 4MB free on C: AND a megabyte free
extended RAM, or failing that 5 MB free on C:, or both.  It
a good idea to leave a few extra spaces before and after the
word OR to make the meaning clear to your readers.  NEED
does not need the extra space.

TIME requests usually have a combined pair:

To allow to run between 1PM and 1:30PM you would write:

     NEED TIME:13:00+ TIME:13:30-

There is an implied AND between the two parts.  You could
put the AND in explicitly if you wanted like this:

     NEED TIME:13:00+ AND TIME:13:30-

In the current version ther is no contraction to avoid
typing the word TIME twice.

To allow the program to run between 11:30 PM and 1:30 AM you
would write:

     NEED TIME:23:30+ OR TIME:00:30-

Alternatively you could write:

     AVOID TIME:00:31+ AND TIME:23:39-

Watch out with AVOID.  The wordings are not so intuitively
obvious as with NEED.

     AVOID C:10MB- AND D:10MB-

means don't run unless both C: and D: each have 10 MB free.
The AND is implied and could be left out.

     AVOID C:10MB- OR D:10MB-

means don't run unless one of C: or D: or both has 10 MB
free.  In other words, all is ok if even one of the
expressions separated by ORs is ok.

DESQview

If you are using DESQview, run NEED, AVOID and SNIFF at
protection level 0 (set on the second page of PIF options).
NEED does some tricky instructions to find out what sort of
CPU you have, and if you have the protection turned up
DESQview/QEMM will freak.

If you have a very old version of DESQview or QEMM you may
have to use the SLOW parameter.

DESQview will provide no extended, expanded or XMS RAM to a
program running under it unless you set the Maximum Expanded
Memory Size in K on the second page of the CP (change
program) screen.  That one number provides a pool of RAM
from which expanded or extended RAM can be carved.

Windows

Windows is full of bugs and interferes in many ways with
NEED, SNIFF and AVOID.  I did the best I could to defend
these programs against Window's meddling.  I had to revert
to some extremely SLOW, inaccurate tests in place of the
normal ones to avoid invoking Window's wrath.  In addition,
Windows interferes with ANSI.SYS.  Under older versions of
DOS, in REAL mode ANSI.SYS hangs up unless you give it a
prod by hitting a key when NEED asks for a cursor position
report during the ANSI test.

Windows and Himem.Sys

If you use Windows with Himem.Sys, here is what to expect:

Type of   in Win   in Win   in Win
Ram       /r       /s       /3

expanded  no       no       yes

extended  yes      no       yes

XMS       yes      no       yes

VCPI      no       no       no

DPMI      no       no       yes

REAL mode yes      yes      no

Please note: There is NO VCPI ever and NO DPMI except in /3
enhanced mode.  This is NORMAL.  About ten people have
reported it as a bug.  In WorkGroups For Windows and Windows-
95, there is an implied /3 option.  There are no real or
standard modes.

Windows and QEMM

If you use Windows with Quarterdeck's QEMM.Sys, here is what
to expect:

Type of   in Win   in Win   in Win
Ram       /r       /s       /3

expanded  yes      no       yes

extended  yes      no       yes

XMS       yes      no       yes

VCPI      yes      yes      no

DPMI      no       no       yes

REAL mode no       no       no

Please note: Windows gobbles up all the XMS RAM in /s mode.
The XMS driver is there, but all the RAM is gone.  Because
QEMM provides both EMS and XMS from the same pool of RAM,
effectively Windows in standard mode then gobbles up all the
expanded RAM as well.  QEMM does its memory mapping magic by
using the PAGING (virtual memory) mapping registers.  To do
this it puts the machine into virtual 86 mode.  That is why
Windows /r (REAL mode) shows up as virtual.

Crashes

Sometimes NEED, SNIFF and AVOID will just hang up or make
the machine go crazy.  In those cases you can try the SLOW
parameter to use the less accurate, slower tests.

For example try:

     SNIFF   SLOW   CPU

     NEED   SLOW   SX+

Here are the tests that most likely might give you trouble
if you run with a meddling virtual monitor (such as Windows,
Compaq memory management, QEMM, 386MAX etc.).  A VM is a
sort of mother program that slaps your wrists any time you
use "interesting" instructions.  What follows is tech-talk.
Don't worry if it makes no sense.

REAL vs Virtual     Sniff does an smsw instruction that
               mother might not like.  Other tests may do a
               REAL test as a side effect.

286 vs 386     Sniff used to do an SGDT instruction, but
               windows meddled and made everything look like
               a 286. Sniff no longer ever uses this test.
               The code for it is available as part of the
               registered version, as commentary.

SX vs 386      Sniff tries to toggle bit 4 (the ET bit) of
               register CR0.  If you have an SX, 386 or 486,
               this test will be used.  This bit tells which
               kind of NPX you have.

386 vs 486     Sniff tries to toggle bit 18 (the AC
               alignment check bit) in the extended flags
               register.  Some virtual monitors will not let
               you.  If you have an SX, 386 or 486, this
               test will be used.

Reporting Bugs

The following people helped test out about 15 versions of
NEED/AVOID/SNIFF before we let it loose on the world at
large.  They go by the Bix handles  (@bix.com) of: aGurski,
aRog, Blaszczak, bQuerry, bStrauss, dSparks, Fred.Robinson,
gChicares, hGessau, instantel, JeBarr, lFirrantello, Ligo,
M.Love, macbeth, Mike123, mReay, pRoub, rbabcock,  rlis,
sSchneider, terjeM, tron and wlMoore.  Even more, they
helped write the code and research the code.

After 3.0 went out, these people reported and helped track
down more bugs: avi, making, rCharney, tfrost, tjeffries and
yendor.

Frank Pearsall of Indiana University suggested the LASTDRIVE
and CURRENT checks.

They found all kinds of problems, especially when testing on
older or oddball machines.  There is still a good chance you
might get to have the joy of finding a bug for yourself.  If
you do, please report it.

PLEASE LABEL FILES WITH YOUR NAME.  When you send me code,
messages or bug reports, please label everything with your
name and a way to contact you (e.g. your BIXid) INSIDE THE
FILE.  I receive so many downloaded files, I have no way of
remembering who sent me what.  I WANT to give you credit.

PLEASE TELL ME ABOUT YOUR MACHINE.  There have not been any
bugs in quite a while I could reproduce on my computer or
any of the computers in my office.  The bugs you find are
most likely specific to your machine.  I need to know as
much as possible about your machine so I can code around
whatever is making the code fail.  Please tell me at least:
Manufacturer and version of DOS, CPU chip Type, BIOS maker,
anything unusual about your machine.  If you have any
assembler debugging experience, please let me know that too.

I have tested all of this code many times.  It works fine on
MY machine and on about 25 other people's machines.  If it
does not work on yours, it is most likely because there is
something different about your machine and mine.  So if you
baldly tell me the XXX test does not work, that gives me no
clues to track it down.

To avoid embarrassment, check the notes in this manual on
the parameter you are reporting on and the TROUBLE SHOOTING
section.  It might be I deliberately designed the program to
behave differently than you expected, or there is a bug I
already know about that I cannot bypass.

And finally TELL ME WHICH VERSION OF NEED you are using,
every time you report a problem.  I don't have records of
which versions each of you are using.  I have been putting
out sometimes three versions a day, and you may be reporting
a bug that was already fixed, or you may be reporting an old
one that has resurfaced in a new form.  To find out the
version just type NEED, SNIFF or AVOID by itself on the
command line.

To make it very clear what the bug is, tell me exactly what
you typed_preferably only ONE TEST ON A LINE, what result
came back, and what result you were expecting.  Sometimes
people send me long lists of what look like perfectly valid
test results.  They forget I don't know anything about what
the results SHOULD look like.

Unfinished Business

ANSI           Windows in real mode has a bug that
               interferes with cursor position reporting.
               This interferes with the /ANSI test in old
               versions of DOS under Windows.  If you use
               redirection, the fallback ANSI test (only
               used in old versions of DOS) will not work.

SX vs DX       Windows interferes with the normal test so I
               have to use a less accurate test that takes
               an obscenely long time to run.

386 vs 486     Windows interferes with the normal test so I
               have to use a less accurate test.

PCDOS vs MSDOS I have not been able to find a completely
               reliable way to tell IBM PC DOS apart from
               Microsoft MS DOS.  Part of the problem is
               vendors deliberately broke the rules to make
               their products look more like IBM PC DOS than
               they were supposed to.

IDEAS FOR FUTURE VERSIONS

102KEY         You have a PS/2 type keyboard

83KEY          You have an XT type keyboard

84KEY          You have an AT type keyboard

CANARY         A utility that runs the tests in order of
               difficulty.  It would run the easy ones
               first, then the ones that require greater
               compatibility.  It would die part way
               through.  Your rank before death is your
               canary compatibility rating.  You would use
               it to test a clone before you bought it.  I
               would add tests not part of the current
               suite.

CGA            Original IBM CGA card or anything capable of
               emulating it, e.g. EGA, VGA

CHIPSET        Detect which motherboard chipset you have,
               e.g. Ares, Mercury, Neptune, Saturn, Triton,
               Opti-Viper

CP:134         Ensures a given code page is loaded.

CURRENT:C!     Ensures current drive is C:

EGA            EGA card present

FCBS           How many free FCBs for opening DOS 1.1 style
               files.  This might be impossible to code
               without interfering with your TSRs.

GRAYSCALE      Grayscale VGA

HERC           Hercules or Hercules-Plus card present

HERCPLUS       Hercules Plus card present

INCOLOUR       Hercules Incolour card present

LASTDRIVE:G+   Ensures that LastDrive in Config.Sys is set
               to G or higher.

MONO           IBM Monochrome, Herc, Herc-Plus, EGA or VGA
               available_something capable of emulating mono
               text.

PCKWIK         Super PCKwik cache present.

PCI            Detect PCI bus.

RZ-1000        Does your machine have this faulty EIDE
               controller chip?

VGA            VGA card present

If you have ideas on how to code any of the above, or better
tests for any of the existing NEED commands, please let me
know.

MODIFYING NEED AND AVOID

NEED and AVOID are written in MASM.  Registered users get
the source code to use as they like.  You may simply want to
pick through it to cannibalize ideas or routines for your
own programs.  You may just want to satisfy your curiosity
how I did some of the tests.

The heavily commented code was written to make this as easy
as possible.  In addition, in each routine I give references
to textbooks and essays where I figured out how to write the
code, so this can be a starting point for your own more
clever routines.

If you want to add your own tests to NEED, all you need to
do is write an assembler routine that does the test and
returns the result in DX:AX.  It may trash any registers.

There are four basic kinds of test:

1.   implied: e.g. /DESQview.  Your test routines test
  returns 0 for not present and 1 for present in AX.  The
  implied "level of presence" desired is 1.  Just ahead of the
  routine you must fill in a table entry that tells the name
  of your new command, the name of your test, and set of flags
  on which Suffixes are permitted.  You don't have to make any
  adjustments to the program, just add your routine.

2.   Capacity: e.g. /RAM:604K.  In this type your routine
  returns the amount of RAM or whatever in DX:AX.  The user
  specifies the amount of it desired after the colon on the
  command line.

3.   Version: e.g. /PCDOS4.01  The version number follows
the command name without any separating punctuation.  In
this case your routine returns the version number multiplied
by 100 in AX.  e.g. DOS3.01 becomes 301.
4.   Time: e.g. /TIME:23:59.  In this case the result comes
  back in minutes since midnight in DX:AX.

The best way to add a command is just to find a parameter
you understand, similar to the one you want to add, and use
that as a model.  You don't have to understand any of the
general purpose parser.  Everything you have to do is
localized in one place.

You also have to write a display routine that display the
result of your test.  There are a number of subroutines you
can use to make that easier.  Your display routine expects
the value in DX:AX and may trash any registers it pleases.
e.g. it might display "DESQview detected" when passed 1 in
DX:AX.

NEED, AVOID and SNIFF are so similar, they use the same
source code.  You simply change one equate called
GENERATING, then you can generate a copy of NEED, AVOID or
SNIFF.  Usually I do this automatically with the /D
parameter on the OPTASM assembler.

VERSION HISTORY

1.   What's New In Version 6.4

2.   detect Windows-95 WIN95.

3.   convert documentation to Word For Windows 6.0

What's New In Version 6.3

1.   detect new 486s than are retrofitted with the Pentium
  CPUID instruction.

2.   yet another improvement to ANSI test.

3.   HIMEM.SYS detect.

What's New in Version 6.2

1.   improvements to ANSI, SMARTDRV and PENTIUM tests.

What's NEW in Version 6.1

1.   - /TIME /HOUR /MINUTE.  More docs on logical
  combinations.

2.   AND operator.  More docs on using AND and OR

3.   improvements to ANSI and PENTIUM tests.

What's New In Version 6.0

1.   source is now included.

2.   test for the Pentium processor.

3.   tests for the ISA, MCA and EISA busses.

What's New In Version 5.0

1.   another attempt to fix the bug in the LAN detection
  logic when CD-ROMS are present.

What's New In Version 4.9

1.   detects PCMOS multitasking operating system.

What's New In Version 4.8

1.   detects non-standard Phoenix ATs that use FC:81 model
  id.

2.   HANDLES now properly documented.

WHat's New In Version 4.7

1.   BIOS test now works even if the BIOS fails to support
  the INT 15 equipment determination interrupt properly.

What's New in Version 4.6

1.   LAN test had a problem with a DOS bug.  DOS uses int 2f
  function 1500 for both detecting CD-ROMS and Graphics.Com.
  CD-ROM drives masquerade as LAN drives.  I have tried a new
  method to get around the bug.  Reginald Charney reported
  this bug.

2.   Phoenix 486 computers were using a new machine id code,
  rather than duplicating one of IBM's.  I added code FC 03 as
  an AT code.  Reginald Charney reported this bug.

What's New in Version 4.5

1.   4DOS presence test

What's New in Version 4.4

1.   NCACHE to detect presence of Norton Disk cacher.

2.   PCCACHE to detect presence of PCTools cache.

3.   SMARTDRIV no longer gives false positives for NCACHE
and PCCACHE.

What's New in Version 4.3

1.   SMARTDRV test for caching program.

2.   fancier QEMM test that would not be fooled by a file of
  the same name as the device driver.

What's New in Version 4.2

1.   bug in ASSIGN test fixed.

What's New in Version 4.1

1.   released to BIX 1991 June 25.

2.   KEYB documented and fixed to work under DOS 5.0.

3.   QEMM serious bug in test, just exits.  Now fixed.

What's New in Version 4.0

1.   released to BIX 1991 June 14

2.   mostly fixes in the documentation.  References to DOS
  5, Share, Windows problems.

What's New in Version 3.9

1.   released to the Vancouver PC User Society

What's New in Version 3.8

1.   code changed in the HANDLES test to make it DOS 2.1
  compatible.

What's New in Version 3.7

1.   both fast and slow 386 vs 486 test.  The fast test
  works fine under Windows but fails under some virtual memory
  managers such as Compaq's expanded memory manager.

2.   the generic /DOS5.0 test now properly displays DR DOS
  when run under DR DOS.

What's new in Version 3.6

1.   detect more types of PS/2 BIOS and discriminate them
  from AT BIOSes with the same model type.

2.   added parameters so you can request or avoid PS2 and
  EXOTIC.

3.   added version checks on many interrupt calls to not
  even try the call unless the DOS version is high enough.
  This should make the code as a whole more robust on old DOS
  versions.

4.   use of documented ASSIGN test rather than undocumented
  one.

5.   This should make the test more robust on non-standard
  DOS versions.

6.   consistent wording_NOT DETECTED used throughout rather
  than "NOT PRESENT" since many tests can give false
  negatives.

7.   Fixed bug in the test for PCDOS Version.  (I
inadvertently deleted two lines of the routine.)
8.   new test to discriminate WIN3R from WIN3S.

What's new in Version 3.5

1.   new HANDLES:15 parameter to ensure there are sufficient
  file handles.

2.   ALL.BAT to compile the SNIFF, AVOID and NEED
  automatically.

3.   divide overflow bug fixed.  The Divide-by-10 routine
  failed to consider dividing 640K by 10 would trigger
  overflow.

4.   command line of all blanks now treated identically to a
  null command line.

5.   the CPU type determining tests that measure the
  instruction pre-fetch queue (PIQ) length are now done four
  times, hopefully to sidestep some of the random effects of
  DMA refresh.

6.   even better code to detect a non-functioning BIO int 15
  during the extended RAM test.

What's new in Version 3.4

1.   new DEBUG command to turn on debugging register dumps.

2.   new PCDOS test that should not be confused by DRDOS.

3.   better code to guard against non-functioning BIOS
  routines in the extended RAM determination.

What's new in Version 3.3

1.   this version has debugging code to dump registers at
  various points during the NEED C: and NEED EXP:40K commands.
  The intent is to track down the source of division overflow
  and freezing up in Compaq DOS and DR DOS.

2.   new DOCs warning people of the difference between FREE
  RAM and total RAM.

What's new in Version 3.2

1.   credits added in the source code for all the methods
  used.

2.   new cleaner Btrieve Test.

3.   new MSDOS test that does not get confused by the
presence of DRDOS.

What's new in Version 3.1

1.   fix problem with 486 appearing as an SX.  Reported by
  Tfrost.

2.   change word "prefix" to "suffix" in the docs.

3.   fix bug in test for ASSIGN installed.  Reported by
MKropp.
4.   new way of testing BIOS_using machine model bytes.
  Should fix problems with exotic clones with strange CMOS.
  Problems reported by aGurski and tFrost.

5.   two new BIOS types: EXOTIC and PS2.

What's new in Version 3.0

1.   first version released to the public.

2.   new QRAM test.

3.   new parameter SLOW to force slow tests.
4.   shorten the SX test under windows.

What's new in Version 2.5

1.   better PCDOS discrimination test.  Now uses SET COMSPEC
  to guess the boot drive.

What's new in Version 2.4

1.   code to avoid crashing in BIOS-deficient machines.

2.   commas and decimal points now work, even when your DOS
  has bugs and does not support the Country separators.

3.   more sensitive BIOS type test to avoid false positives
  on XT.

4.   It now checks that the month in CMOS is in the range
1..12 for Ats.
5.   tweaked code so that NEC V30 and V20 detected even when
  DMA refresh interferes with the test.

What's new in Version 2.3

1.   yet another new improved DESQ test.  We now detect DESQ
  version.

What's New in Version 2.2

1.   better test for DESQview.  Some DOSes sneak around the
  old one.

2.   new way of handling the default suffixes for AVOID so
  that things like AVOID WINDOWS gives the effect you intend.

What's New in Version 2.1

1.   detect DRMDOS as /DRDOS

2.   new ANSI.SYS detector for Olivetti, fix Agurski's bug.

3.   simpler /WINDOWS test
4.   remove debug code

5.   better /486 test.
6.   SNIFF to display without having to specify what you
want.
7.   new tests BIOS, CPU, NPX, WINDOWS and WEEKDAY primarily
for SNIFF.
8.   more sensitive PC vs MS DOS test.

What's New in Version 2.0

1.   better /80286 test

2.   better SX vs DX test, however, we still use the old
  test under Windows 3.x extended.

3.   run the SX vs DX test longer under Windows trying to
average out the time slicing effects.
4.   Separate tests for Windows and non-Windows.

5.   Faster /REAL test that does not do a full CPU
determination.
6.   add code for XT BIOSes that have no INT 15 support
  whatsoever so that EXT:1+ gives 0.  Fixes M.Love's bug.

7.   inadvertently cleared up Agurski's /DESQview bug.

What's New In Version 1.9

1.   - /WIN3E erroneously reported as version 4, now fixed.

2.   VCPI test now returns 0 if running under WIN3E to avoid
  crashing.  Windows does not like programs asking about VCPI.

3.   new test to discriminate an 80286 from an 80386 that
works even under Windows enhanced mode.  Windows enhanced
mode interfered with the old test.
4.   NEED no longer turns off DMA refresh.  It caused some
machines to freeze.

What's New In Version 1.8

1.   XT vs AT test now works at all times of day.  It used
  to think ATs were XTs after 6 PM at night.  (It turns out
  the clock is coded in BCD and I thought it was coded in
  binary).

What's New In Version 1.7

1.   insert manual DMA refresh while automatic DMA turned
  off.

2.   Correct a bug in QRAM that caused freezing on some
  machines.

3.   Correct a bug in VCPI: test that caused freezing on
some machines.
4.   try CMOS test without High bit, to see if it works on
Terje's machine.
5.   Guess C: as boot drive when boot drive unknown, in
  attempt to tell MS DOS and PC DOS apart.

What's New In Version 1.6

1.   add begin/end critical section on CPU timing loop to
  stop DESQview from meddling during tests.  Should more
  accurately discriminate SX DX 486 CPUs.

2.   experimental code in Test for DESQview to it if it
  bypasses DOS bug giving false positive tests.

3.   new ANSI.SYS test that should detect things like
DVANSI.SYS and ANSI.SYS in pre-DOS 4.00 that eluded the
earlier test.
4.   safer VCPI test, tests for EMS driver first.

5.   turn off DMA refresh during queue length and SX timing
  test for more accurate results.

6.   DRDOS version number test added.

7.   - /XT and /AT to test BIOS type.
8.   LAN test no longer fooled by CD-ROM drives masquerading
  as remote LAN drives.

What's New In Version 1.5

1.   EXT:400K now includes two kinds of VDISK extended RAM,
  INT 15 RAM and XMS RAM in its calculations.

2.   PERI or PERISCOPE now detects presence of PERISCOPE
  DEBUGGER

3.   PERI5.1 or PERISCOPE5.0 now detects periscope version.
4.   NEED now does reports on the success or failure of all
  the tests.  You can get rid of this with output redirection.

5.   OR allows you to continue if any one of a group of
  tests work.

6.   80386-DX and other parameters with dashes in them were
  changed since the parser got confused by the dash, thinking
  it was a suffix.

7.   more relaxed rules on which suffixes are allowed.

8.   deleted /P1 /P2 /P3 CPU classes.
9.   Avoid has more complex defaults for suffixes.  They are
  now specified on an individual basis for each command.

What's New in Version 1.4

1.   ANSI detects presence of ANSI.SYS.

2.   MOUSE detects presence of a mouse.

3.   SX 386 and 486 now should be properly discriminated.
4.   Numeric co-processors should be correctly identified.

What's New in Version 1.3

1.   /VCPI:400K test to test amount of Virtual Control
  Program Interface RAM.

2.   /QRAM to detect Quarterdeck's QRAM.

3.   /MONTH:12 to check for December.
4.   /YEAR:1991 to check for year.
5.   /DAY:31 to check that running an a given day of the
month.

-30-