Category : Databases and related files
Archive   : BCHWTCH.ZIP
Filename : WATCHBTR.HLP

 
Output of file : WATCHBTR.HLP contained in archive : BCHWTCH.ZIP
*I
BTR WATCH—
Command LineI Unload Btrieve¦Exit Menu¨Are You Sure(-Switches0Special KeysGOWarrantyRYEditing Keys¿ZMass-Store Copy _ASCIIj/`Shareware‘0aTechnical SupportFbRegistration™NcBtrieve³VfStatus Code List?XgOptionsŸYhAdvanced OptionséZiUnload Btr Watch„\jSave Settingsz]kView Log File_lLog LengthëbmCheck for Open:dnIgnore StopFeoCheck for multiple opensrgpLog the station name˜hqStation namexirFile Handle Offset¦ksLog all accessesômtBeep for all accesses-ouLog the date2pvLog the timeqwBeep for status code listçqxBeep ToneFsyBeep DurationtzLog File Name©t{Log FormatØu|DateÝx}TimeÀy~Length©zFile²{€Key Number_|Operationt}‚Resultf~–Retries€—delay between retriesz˜Retry Status Codes†‚™Basic OptionsლRetry OptionsŽ…ÏViolation¢‰–ASP¥‹˜Btr 'C' Libraryûš™Btr Help!|½šBtrieve Quick Reference›Quick StartìÜConfig File³ÅœConfig Fileÿÿÿÿ
WATCHBTR.HLP

Copyright 1991 by Informative Technologies

This file contains all the help text used with WATCHBTR.EXE

*B 1,BTR WATCH

B T R W A T C H
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Btr Watch is a memory resident program that monitors
calls to Btrieve. ^Registration^ is required if you
continue to use Btr Watch after evaluating it for
30 days. Complete your ^registration^ of Btr Watch
for full benefits.

Copyright 1991 Informative Technologies
1718 M Street NW, Suite 292 Washington, DC 20036
Voice(202)675-4528 Fax(202)675-4529 Email 71311,2334

Press [F1] at any time for context-sensitive help.
Press [ESC] to exit or PRESS [PgDn] FOR MORE...
*P

Btr Watch is loaded after Btrieve, but before the
Btrieve application program. Btr Watch can trace
all Btrieve file accesses and log them to a ASCII file.
Btr Watch can be used with any DOS application that
uses Btrieve.

Btr Watch's features and uses:

+ Btr Watch helps in debugging applications. Load
Btr Watch to make sure the correct sequence of Btrieve
calls occurs. Test applications by tracing Btrieve
file operations.

+ Btr Watch can log all ^Btrieve^ file accesses or just
log accesses when certain status codes occur.
*P
+ Use Btr Watch to determine Btrieve file operations
that lead up to a corrupted file. Btr Watch can be
loaded at all times and will only log file operations
when certain status codes occur. Btr Watch stores in
memory a list of the last 100 file operations. When
a designated status code occurs, Btr Watch will log
up to 100 Btrieve operations that happened just before
the designated status code.

+ Btr Watch works independent of the application using
BTRIEVE.EXE or BREQUEST.EXE and is network-compatible.

+ Btr Watch traces file accesses from multiple stations.

+ Btr Watch catches files that were opened multiple times
and catches attempted accesses to unopened files.
*P
+ If one of 10 different status codes occur, Btr Watch
can automatically retry an operation. The number of
retries and the delay between them is configurable.

+ Btr Watch monitors Btrieve access time.

+ Btr Watch logs the date and time a Btrieve operation
occurs to determine exactly when operations occur.

+ Btr Watch can alert an operator when any status code
occurs for immediate action.

^Registration^ ^Command Line^ ^Technical Support^
^Editing Keys^ ^Shareware^ ^Mass-Store Copy^
^ASP^ ^Warranty^ ^Btr 'C' Library^
^Technical Support^ ^Quick Start^ ^Btr Help!^
*E
*B 10,Command Line

Command Line Arguments
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

All command line arguments are optional.

WATCHBTR

^SWITCHES^ - bm
^CONFIG FILE^ - Configuration File

BTRWATCH

^CONFIG FILE^ - Configuration File
*E
*B 12,Unload Btrieve

Unload Btr Watch
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

This will remove ^Btr Watch^ and ^Btrieve^
from memory, close all files open at this station,
abort any transactions, and release all locks held by
the station.

*E
*B 17,Exit Menu

Exit Menu
ÄÄÄÄÄÄÄÄÄ

This option will cause you to leave the
current menu.

*E
*B 31,Are You Sure

Are You Sure?
ÄÄÄÄÄÄÄÄÄÄÄÄÄ

Select 'Y' for YES or 'N' for NO.
*E
*B 45,Switches

Switches
ÄÄÄÄÄÄÄÄ

-b Use BIOS for video writes. If your computer
has trouble displaying some of the windows on
your screen, use this switch. This assists
with incompatibility in the display. If you do
not use this option, screen updates will be
much faster.

-m Disables the program color.
WATCHBTR.EXE runs in monochrome.
*E
*B 48,Special Keys


Special Keys
ÄÄÄÄÄÄÄÄÄÄÄÄ

F1 - ^Btr Watch^ Help
Alt+S - Shell to DOS.
Alt+X or ESC - Quit ^Btr Watch^
Alt+F1 - Toggle BIOS screen writes

Also See: ^Editing Keys^
*E
*B 79,Warranty

LIMITED WARRANTY

Informative Technologies Corporation does not warrant
that the software operation will be error-free or
uninterrupted. Informative Technologies Corporation
shall not be liable for any incidental or consequential
damages from the use or the user's inability to use this
product. Informative Technologies Corporation
specifically disclaims all other warranties, expressed
or implied, including but not limited to implied
warranties of fitness for any particular purpose and
of merchantability.
*E
*B 89,Editing Keys


Cursor Movement
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Arrow keys - cursor movement
Ctrl-Left Arrow - word left
Ctrl-Right Arrow - word right
Home - beginning of field
End - end of line/field
Ctrl-Home - beginning of first field
Ctrl-End - end of last field
Tab - next field
Shift-Tab - previous field
*P


Inserting and Deleting
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Ins - toggle insert mode
Del - delete character at cursor
Backspace - delete character left
Ctrl-Backspace - delete word left
Ctrl-T - delete word right
Ctrl-U - delete to end of field
Ctrl-Y - delete to last field
*P


Other Editing Keys
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Enter - process current field
Ctrl-Enter - process all fields
Ctrl-R - restore field
ESC - abort data entry

Also see: ^Btr Watch^ ^Special Keys^
*E

*B 90,Mass-Store Copy
tm
MASS-STORE COPY
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

"Make copies of optical disks while
using only one optical drive!"


"If you don't have two WORM drives, you likely need to
have this program." - Jerry Pournelle, BYTE January 1991

MASS-STORE COPY is a practical way to copy optical disks
on a system that has only one optical drive.
MASS-STORE COPY uses your computer's fixed disk to buffer
information as it is copied from one optical disk to
another.
*P


Your computer may have a hard drive and one
optical disk drive. You could try to copy your optical
disk using the DOS copy command, but why? You could be
swapping the original and backup disks hundreds of times.
Or, you could copy each file to the hard disk and
then copy the files individually to a backup optical
disk. But what would you do if one of the files is
larger than the hard drive? MASS-STORE COPY eliminates
the need to copy each file from an original disk to a
buffer drive individually and copying them individually
to a backup disk.
*P

MASS-STORE COPY will copy any size file and any size disk
using the available disk space on your computer's hard
drive. MASS-STORE COPY works with any DOS-compatible
drive that has removable disks. All drives that use
removable DOS disks work with MASS-STORE COPY, not
just optical disks.

MASS-STORE COPY is compatible with the following drives:

+ Bernoulli Box Drives
+ Erasable Optical Drives
+ Removable Hard Drives
+ Portable Hard Drive Packs
+ WORM Drives
+ 5.25, 3.5 or "Super" Floppy Drives
*P

FEATURES
ÄÄÄÄÄÄÄÄ

+ Backups of optical disks are made using one drive.
There's no need to buy a second optical drive just
to make backup copies of optical disks!

+ Copies any size removable DOS disk regardless of
available space on the hard disk.

+ Files are compressed when they are copied to the hard
drive and then uncompressed when they are copied to
the backup disk. This means you'll do a lot less disk
swapping when copying disks.
*P

+ Mouse-Compatible with context-sensitive help screens.

+ Files that are copied can be based on file date,
file specification, system flags, hidden flags,
and archive bit.

+ MASS-STORE COPY also copies DOS compatible disks
that must be "Mounted" and "Dismounted."

+ Files that are larger than your hard drive can be
copied regardless of available space on the hard drive.
*P

How to Order MASS-STORE COPY
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Send check, money order, or postal order for
$59.00 + $4.00 S&H. If you are from outside the USA
please have your bank prepare a check in USA dollars
drawn on a USA bank and include an extra $5.00 for
postage.

Informative Technologies Corp. Voice (202) 675-4528
1718 M Street NW, Suite 292 FAX (202) 675-4529
Washington, DC 20036-4504

You must be satisfied with MASS-STORE COPY or you may
return it within 60 days for a full refund!
*P

Name_____________________________ Title_____________________

Company Name________________________________________________

Address_____________________________________________________

City________________________________State______Zip__________

Phone#_________________________Fax#_________________________

PRESS MASS-STORE COPY @ $59.00 $_59.00_
"Print Screen" DC Residents Add 6% Sales Tax $_______
for Order Form. Shipping and Handling $_______

[]MONEY ORDER []POSTAL ORDER []CHECK Total $_______
*E
*B 95,ASCII

ASCII
ÄÄÄÄÄ

ASCII is an acronym for American Standard Code for
Information Interchange. ASCII is a standard 7-bit
information code that defines 128 standard characters,
including control characters, letters, numbers and
symbols.
*E
*B 96,Shareware

W H A T I S S H A R E W A R E ?
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
Some Definitions:
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ

You've probably heard the terms "public domain,"
"freeware," "shareware," and others.
Your favorite BBS or disk vendor probably has many
programs described by one or more of these words.
There's a lot of confusion about and between these
terms, but they actually have specific meanings and
implications. Once you understand them, you will have
an easier time navigating the maze of programs
*P

available to you and understanding what your
obligations are or aren't with each type of program.

Let's start with some basic definitions:

"Public domain" has a very specific legal meaning.
It means that the creator of a work (in this case,
software) who had legal ownership of that work has
given up ownership and dedicated the work "to the
public domain." Once something is in the public
domain, anyone can use it in any way they choose and
the author has no control over the use and cannot
demand payment for it.
*P

If you find a program that the author has explicitly
put into the public domain, you are free to use it
however you see fit without paying for the right to use
it. But use care - due to the confusion over the
meaning of the words, programs are often described by
authors as being "public domain" when, in fact, they
are shareware or free, copyrighted software. To be
sure a program is public domain, you should look for
an explicit statement from the author.

"Copyrighted" is the opposite of public domain. A
copyrighted program is one in which the author has
asserted his or her legal right to control the
program's use and distribution by placing the legally
required copyright notices in the program and
*P

documentation. The law gives copyright owners broad
rights to restrict how their work is distributed and
provides for penalties for those who violate these
restrictions. When you find a program that is
copyrighted, you must use it in accordance with the
copyright owner's restrictions regarding distribution
and payment. Usually, these are clearly stated in the
program documentation. Maintaining a copyright does not
necessarily imply charging a fee, so it is perfectly
possible and legal to have copyrighted programs which
are distributed free of charge. The fact that a
program is free, however, does not mean it is in the
public domain -- though this is a common confusion.
*P

"Shareware" is copyrighted software which is
distributed by authors through bulletin boards, on-line
services, disk vendors,and copies passed among friends.
It is commercial software that you are allowed to try
before you pay for it. This makes shareware the
ultimate in money-back guarantees.

ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
The Shareware Concept:
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ

Most money-back guarantees work like this: You pay for
the product and then have time to try it out and see
whether or not you like it. If you don't like it or
find that it doesn't do what you need, you
*P

return it (undamaged) and at some point - which might
take months - you get your money back. Some software
companies won't even let you try their product! In
order to qualify for a refund, the diskette envelope
must have an unbroken seal. With these "licensing"
agreements, you only qualify for your money back if
you haven't tried the product.

Shareware is different. You get to try it for a
limited time without spending a penny.
You are able to use the software on your own system(s),
in your own special work environment with no sales
people looking over your shoulder. If you decide not
to continue using it, you throw it away and forget it.
No paperwork, phone calls, or correspondence
*P

to waste your valuable time. If you do continue using
it, then - and only then - do you pay for it.

Shareware is a distribution method, NOT a type of
software. Shareware is produced by accomplished
programmers, just like retail software. There is good
and bad Shareware, just as there is good and bad retail
software. The primary difference between Shareware and
retail software is that with Shareware you know if it's
good or bad BEFORE you pay for it.

As a software user, you benefit because you get to use
the software to determine whether it meets your needs
before you pay for it, and authors benefit because they
are able to get their products into your hands without
*P

spending hundreds of thousands of dollars to launch a
traditional retail software product.
There are many programs on the market today that would
never have become available without the Shareware
marketing method.

The shareware system (and the continued availability of
quality shareware products) depends on your willingness
to register and pay for the shareware you use. It's the
registration fees that allow us to support and
continue to develop our products.

Please show your support for Shareware by registering
those programs you use and by pass them on to others.
*P

Shareware is kept alive by YOUR support!

Also See: ^Registration^
*E
*B 97,Technical Support

Technical Support
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

^Btr Watch^ software support is available.

There are several ways to contact the author:

1. Send Email on CompuServe to David Smith #71311,2334

2. Leave a voice mail message at (202) 675-4528
for David Smith.

3. Send a FAX to (202) 675-4529

*P

4. Leave a message at the Programmers Corner BBS for
David Smith #1082 BBS# (301) 596-1180

5. Or by mail to:

David Smith
Informative Technologies Corporation
1718 M Street NW, Suite 292
Washington, DC 20036

Voice mail messages will probably not be answered until
the next day. Email responses will usually be the
fastest, with a response by the end of the day. If you
are outside of the United States and you need pre- or
post-registration support, please include your Email
*P

address when you leave a voice mail message or send a
fax.

Please include all relevant information regarding your
problem including:

1 - A description of the event.
2 - The steps that consistently reproduce the event.
3 - Btrieve version number, type, and command line
parameters. (BTRIEVE, BREQUEST, NLM, VAP)
4 - Hardware information. (Machine Type, Video Adapter)
5 - Configuration settings for Btr Watch.

Feel free to leave comments and suggestions to the
attention of David Smith.
*P

^ASP^ wants to make sure that the ^shareware^ principle
works for you. If you are unable to resolve a ^shareware^-
related problem with an ^ASP^ member by contacting the
member directly, ^ASP^ may be able to help. The ^ASP^
Ombudsman can help you resolve a dispute or problem
with an ^ASP^ member, but does not provide technical
support for members' products. Please write to the
^ASP^ Ombudsman at 545 Grover Road, Muskegon, MI 49442
or send a Compuserve message via easyplex to ^ASP^
Ombudsman 70007,3536"

*E
*B 98,Registration

R E G I S T R A T I O N
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Registration is required if you continue to use
^Btr Watch^ after evaluating it for 30 days. This
program is produced by a member of the Association
of ^Shareware^ Professionals (^ASP^). Registering
your copy of ^Btr Watch^ helps the author provide
professional-quality software at reasonable prices.

Registration is $29 for a single user plus $4 S&H.

Complete your registration of ^Btr Watch^
for full benefits.
Press ESC to exit this screen or Page Down for more...
*P

Registration benefits:

- A diskette with the latest version of ^Btr Watch^.

- A Printed Guide for ^Btr Watch^.

- A free membership to CompuServe with a $15 credit.

- A certificate for $7 off a 1 year subscription to
Shareware Magazine.

- Free ^Technical Support^ for 1 Year.

- A BONUS diskette with more Informative Technologies'
software to evaluate.
*P

Please send check, money order, or postal order. If you
are from outside the USA please have your bank prepare
a check in USA dollars drawn on a USA bank.
Registrants outside the USA should send an extra $5.00
for postage.

Send registrations to:

David Smith Voice (202) 675-4528
Informative Technologies Corp. FAX (202) 675-4529
1718 M Street NW, Suite 292 CompuServe 71311,2334
Washington, DC 20036

OR....
*P

You may also register with
MC, VISA, AMEX or DISCOVER
by contacting the Public (software) Library at:

(Phone) 800-2424-PSL or 713-524-6394
(Fax) 713-524-6398
(CIS-Email) PsL at 71355,470

These numbers are for credit card orders only.
For ^Technical Support^, site licensing, volume or
dealer discounts, please contact David Smith at
Informative Technologies Corporation.
*E
*B 99,Btrieve

Btrieve
ÄÄÄÄÄÄÄ

Btrieve is a Trademark of Novell, Inc.

Btrieve is a record management system designed
to aid PC programmers in the development of
applications. Btrieve provides the functions
for high performance key-indexed record
management while allowing the programmer to
concentrate on the application.
*E
*B 102,Status Code List

Status Code List
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

This is a list of status codes returned from Btrieve
that Btr Watch should monitor. If any of these status
codes occur, Btr Watch can be configured to beep
and/or log up to 100 of the Btrieve operations that
occured before the specified status code.

*E
*B 103,Options

Btr Watch Options
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

This menu allows you to select one of Btr Watch
option screens.

Also See: ^Basic Options^
^Advanced Options^
^Status Code List^
^Retry Options^
^Save Settings^
*E
*B 104,Advanced Options

Advanced Options
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

This selection allows you to set the advanced
options for Btr Watch.

Also See: ^Log Length^
^Check for open^
^Ignore Stop^
^Check for multiple opens^
^Log the station name^
^Station name^
^File Handle Offset^
*E
*B 105,Unload Btr Watch

Unload Btr Watch
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

This menu option unloads Btr Watch and ^Btrieve^ from
memory if they are loaded. It also closes any open
^Btrieve^ files and aborts any transactions.

*E
*B 106,Save Settings

Save Settings
ÄÄÄÄÄÄÄÄÄÄÄÄÄ

Selecting this option causes the program settings for
Btr Watch to be saved to the file BTRWATCH.CFG. The
next time BTRWATCH.EXE or WATCHBTR.EXE is run,
the settings are read out of this file. Btr Watch must
be unloaded from memory and reloaded before the new
settings take effect.

*E
*B 107,View Log File

View Log File
ÄÄÄÄÄÄÄÄÄÄÄÄÄ

This option allows you to view the log file. The log
file is stored as a ^ASCII^ file so you may
use a text editor to view the file.

Also See: ^Log Format^

While viewing the log file, you can select:

'P' - Print the log file
'D' - Delete the log file
'H' - Display this help screen
'X' - Exit viewing the log file
*P

Log File Viewing Keys (continued)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Up Arrow - Scroll up one line
Down Arrow - Scroll down one line
Ctrl-Left Arrow - Page left
Ctrl-Right Arrow - Paqe right
PgUp - Display previous screen
PgDn - Display next screen
Home - Go to the beginning of the log
End - Go to the end of the log

Also See: ^Log Format^

*E
*B 108,Log Length

Log Length
ÄÄÄÄÄÄÄÄÄÄ

If this option is set to YES, the length of time a
Btrieve call lasts is logged. If this option is NO,
the time is not logged. The duration of the calls are
recorded in clock ticks. Each tick is 1/18 of a
second or about 55 milliseconds.

*E
*B 109,Check for Open

Check for Open Files
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

If this option is set to YES, Btr Watch logs a
message if files were open when a RESET or STOP
operation occurs. If this option is NO, a message
is not logged.

*E
*B 110,Ignore Stop

Ignore the STOP Command
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

If this option is set to YES, Btr Watch does not
allow an application to unload Btr Watch from
memory when it executes a (25) STOP command.
The Stop Command is also not passed on to Btrieve.
You are still able to unload Btr Watch and Btrieve
with the 'Unload Btr Watch' menu option. If this
option is set to NO both Btr Watch and Btrieve are
unloaded when the application sends the (25) STOP
command.
*E
*B 111,Check for multiple opens

Check For Multiple Opens
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

If this option is set to YES, Btr Watch logs a
message to the log file when a file gets opened
more than once at a time. If this option is NO,
a message is not logged.

*E
*B 112,Log the station name

Log the Station Name
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

If this option is set to YES, Btr Watch logs the
^station name^. If this option is NO, the ^station name^
is not logged.

*E
*B 113,Station name

Station Name
ÄÄÄÄÄÄÄÄÄÄÄÄ

This is a string describing the location where
Btr Watch is loaded. If you are using Btr Watch on more
than one station at a time, create different .CFG files
for each station. The path and name of the log file
should be the same for each of the different .CFG
files. The station name should be different for each
station. Entering a different name for each station
allows you to follow the Btrieve accesses from several
stations.
*E
*B 114,File Handle Offset

File Handle Offset
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

This is the offset into the position block Btrieve is
supplied for each call. At this offset is a file
handle (integer) that is used by Btrieve and Btr Watch.
The handle is used to tell the difference between
different Btrieve files that may be open at the same
time. BTRIEVE.EXE and BREQUEST.EXE have different
offsets. These offsets may also change in the future.

Currently BTRIEVE.EXE uses 90 as the offset and
BREQUEST.EXE uses 126 as the offset.
*E
*B 115,Log all accesses

Log All File Accesses
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

If this option is set to YES, all Btrieve file
accesses are logged. If this option is set to NO,
file access are only logged only if one of the status
codes from the ^status code list^ occurs.

*E
*B 116,Beep for all accesses

Beep For All Accesses
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

If this option is set to YES, a beep will sound for
every Btrieve operation. If this option is set to NO,
beeps will not sound for every Btrieve operation.

*E
*B 117,Log the date

Log the Date
ÄÄÄÄÄÄÄÄÄÄÄÄ

If this option is set to YES, the date will be
logged with each log entry. If this option
is NO, the date will not be logged.

*E
*B 118,Log the time

Log the Time
ÄÄÄÄÄÄÄÄÄÄÄÄ

If this option is set to YES, the time will be
logged with each log entry. If this option is NO,
the time will not be logged.
*E
*B 119,Beep for status code list

Beep for ^status code list^ codes
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

If this option is set to YES, Btr Watch will beep
when one of the status codes from the ^status code list^
occurs. If this option is NO, Btr Watch will not
beep when a status code from the ^status code list^
occurs.

*E
*B 120,Beep Tone

Beep Tone
ÄÄÄÄÄÄÄÄÄ

This is the frequency in hertz of the beep sound
Btr Watch makes. The best values for this are between
1000 and 4000.

*E
*B 121,Beep Duration

Beep Duration
ÄÄÄÄÄÄÄÄÄÄÄÄÄ

This is the length of the beep sound Btr Watch makes
in milliseconds.

*E
*B 122,Log File Name

Log File Name
ÄÄÄÄÄÄÄÄÄÄÄÄÄ

This is the name of the file Btr Watch will log the
Btrieve operations. If several stations are
logging to this file, make sure you put the full
file path to be sure all stations are using the
same file.

*E
*B 123,Log Format

An example of the log file is as follows:

09:41:21 ==========[ BTRWATCH Loaded ]=========
09:41:35 0 0 Open
09:41:36 0 NWSPAPER.BTR 0 Get First
09:41:36 1 NWSPAPER.BTR 0 Get Next (9) END OF FILE
³ ³ ³ ³ ³ ³
³ ³ ³ ³ ³ ÀÄÄ ^Result^
³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄ ^Operation^
³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ^Key Number^
³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ^File^
³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ^Length^
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ^Time^ ^Date^
You may have more or less fields in your log
file depending on the program ^options^.
*E
*B 124,Date

Date
ÄÄÄÄ

This is the date when the file operation was
performed. It is in the format DA MON YR.

DA = Day, MON = Month, and YR = Year.

Also See: ^Log Format^ ^Time^
*E
*B 125,Time

Time
ÄÄÄÄ

This is the time when the file operation was
performed. It is in the format HH:MM:SS.

HH = Hour, MM = Minutes, and SS = Seconds.

Also See: ^Log Format^ ^Date^
*E
*B 126,Length

Length of Time
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

This is the length of time the Btrieve call lasts.
The units of this value are in clock ticks.
Each tick is 1/18 of a second or about 55 milliseconds.


Also See: ^Log Format^
*E
*B 127,File

Filename
ÄÄÄÄÄÄÄÄ

This is the name of the Btrieve file the ^operation^
was performed upon.

Also See: ^Log Format^
*E
*B 128,Key Number

Key Number
ÄÄÄÄÄÄÄÄÄÄ

This is the key value of the Btrieve call. Although
there is a key value for every Btrieve call. Not all
Btrieve calls need a key, so it may be a strange
value.

Also See: ^Log Format^
*E
*B 129,Operation

Operation
ÄÄÄÄÄÄÄÄÄ

This is the Btrieve operation that was performed. The
entries are added to the log just after the Btrieve
call was performed, not before.

Also See: ^Log Format^
*E
*B 130,Result

Result
ÄÄÄÄÄÄ

This is the result of the Btrieve operation. If the
operation is a success, no entry is found in this
location. If an error code is returned, the error code
number along with a short description of the error
code is logged.

EXAMPLE:

(3) FILE NOT FOUND
(5) KEY NOT FOUND

Also See: ^Log Format^
*E
*B 150,Retries


Retries
ÄÄÄÄÄÄÄ

This is the number of times Btr Watch should call
Btrieve when a status code from the ^Retry Status Codes^
list is returned. If 5 is entered in this field, the
operation will be retried 5 times. If 0 is entered,
the operation will not be retried.

Also See: ^Retry Options^
*E
*B 151,delay between retries

Delay Between Retries
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

This is the amount of time to wait between retries
of the call to Btrieve. This value is in milliseconds.
1000 = 1 Second.

Also See: ^Retry Options^

*E
*B 152,Retry Status Codes

Retry Status Codes
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

This is a list of Btrieve status codes. If any of
these codes are returned by Btrieve, Btr Watch will
call Btrieve again using the same parameters '^Retries^'
number of times with a ^delay between retries^.

Also See: ^Retry Options^

*E
*B 153,Basic Options

Basic Options
ÄÄÄÄÄÄÄÄÄÄÄÄÄ

This selection allows you to set various
options for Btr Watch.

Also See: ^Log all accesses^
^Beep for all accesses^
^Beep for status code list^
^Log the time^
^Log the date^
^Log file name^
^Beep tone^
^Beep duration^
*E
*B 154,Retry Options

Retry Options
ÄÄÄÄÄÄÄÄÄÄÄÄÄ

Btrieve sometimes returns status codes indicating
problems that can be corrected by retrying
the operation again. If an application is trying
to lock a record or file when the record or file
is locked, these status codes could be returned:
(85) FILE IN USE and (84) RECORD IN USE.
Sometimes (2) I/O ERROR is returned and when it is
retried, it is successful. If the error is still
returned after several tries, it may indicate a real
error and retrying will not help. Other status codes,
that can be resolved by retrying them, can be added
to the default list.
*P

Btr Watch makes a note in the log file whenever it
retries an operation.
Up to 10 different status codes can be monitored
and the operations can be retried if these status
codes occur. The ^delay between retries^ and the
number of ^retries^ can be configured.

Also See: ^Retry Status Codes^
*E
*B 207,Violation

THE 30 DAY EVALUATION PERIOD HAS EXPIRED
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

^Registration^ is required if you continue to use
Btr Watch after evaluating it for 30 days.

You may register with MC, VISA, AMEX or DISCOVER
by contacting the Public (software) Library at:

(Phone) 800-2424-PSL or 713-524-6394
(Fax) 713-524-6398
(CIS-email) PsL at 71355,470

These numbers are for credit card orders only.
*E
*B 406,ASP

ÚÄÄÄÄÄÄÄÄÄ¿
ÚÄÄÄÄÄÁÄÄÄ¿ ³ (R)
Äij ³o ³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
³ ÚÄÄÄÄÄÁÐÄÄ¿ ³ Association of
³ ³ ³ÄÙ ^Shareware^
ÀÄÄij o ³ Professionals
ÄÄÄÄÄij º ³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÀÄÄÄÄÐÄÄÄÄÙ MEMBER

In the early days of Shareware there were no real
standards. Independent authors had no efficient way
to learn from each other or to work together to improve
the overall image of Shareware. There was no system in
place to ensure that users were treated fairly and
professionally.
*P

There was no way for users to find an address for an
author who had moved. In short, the Shareware community
was disorganized and each author did things the way he
or she thought was best. It was clear that if Shareware
was ever to become a viable and respected marketing
alternative, there had to be standardization and
guidelines to best serve the users.

In 1987, a handful of Shareware authors founded the
Association of Shareware Professionals (ASP). In
forming this industry association, the Shareware
authors had several goals in mind, including:
*P

o To inform users about Shareware programs and about
Shareware as a method of distributing and marketing
software.

o To foster a high degree of professionalism among
Shareware authors by setting programming, marketing,
and support standards for ASP members to follow.

o To encourage broader distribution of Shareware
through user groups and disk dealers who agree
to identify and explain the nature of Shareware.

o To assist members in marketing their software.
*P

o To provide a forum through which ASP members may
communicate, share ideas, and learn from each other.

The newly-formed Association of Shareware Professionals
worked together to draft a code of ethics for all
present and future members. This code of ethics
included several requirements that soon became very
popular among users (customers), including:

o A member's program (evaluation version) could not be
limited (crippled) in any way. In the true spirit
of Try-Before-You-Buy, users must be able to
evaluate all the features in a program before paying
the registration fee.
*P

o Members must respond to every registration. At the
very least they must send a receipt for the payment.

o Members must provide technical support for their
products for at least 90 days from the date of
registration.

A new system was put in place to help ensure that users
were treated fairly and professionally. If a user was
unable to resolve a problem with a member author then
the user could contact the ASP Ombudsman with their
complaint. The Ombudsman would then try to help
resolve the dispute.
*P

As of February, 1991, the ASP had over 300 author
members and almost 200 vendor members, with new members
joining every week.

ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
Contacting ASP Members Via CompuServe:
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ

There is an easy and convenient way to speak directly
to many ASP Members (both authors and vendors). Visit
the Shareware forum on CompuServe. Simply type
"GO SHAREWARE" - or "GO SHARE" - from any CompuServe !
prompt.
*P

Here you will be able to talk to the authors of your
favorite Shareware programs, learn about other
programs, ask questions, make suggestions, and much
more. We'd like to meet you online, please come visit
us today!

ALSO SEE: ^Registration^ ^Shareware^
*E
*B 408,Btr 'C' Library

BTR 'C' LIBRARY
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

The BTR 'C' LIBRARY is available with the registered
version of ^Btr Help!^. All the calls to the
BTR 'C' LIBRARY reference btrieve files by a handle
(integer). This handle is returned when the file is
opened with the iBtrOpen function. The function
BtrInitialize should be called at the beginning of
your program and iBtrCloseAll should be called at the
end of your program. Press PageDown for an example.
*P

#include
#include
void main( void )
{
int iNews;

BtrInitialize();
iNews = BtrOpen("NWSPAPER.BTR", NULL, B_OPEN);
BtrCall( iNews, B_GET_LOWEST, 1);
/* Application Code goes here.. */
BtrClose( iNews );
BtrCloseAll(); /* Close all Files still open */
}

Press PageDown for a list of library functions.
*P

char *BtrErrorCode(int iBtrError)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Returns the string for a Btrieve error code.

INPUTS
iBtrError - Error code number

RETURNS
String for a Btrieve error code.

EXAMPLE
printf("Btrieve Error 10=%s\n", BtrErrorCode( 10 ));
*P

char *BtrOperationCode(int iBtrOper)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Returns the string for a Btrieve Operation code.

INPUTS
iBtrOper - Btrieve Function code

RETURNS
String for a Btrieve operation code.

EXAMPLE
printf("Operation 3 is %s\n",BtrOperationCode( 3 ));
*P

int BtrOpen(char *sFile, void *acRecord, int iOpenType)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Opens a Btrieve file. Does a statistics function call on
the file. Stores the record size and key information.
Returns a handle (integer) to refer to the Btrieve file.

INPUTS
sFile........Btrieve file path and name
acRecord.....Pointer to Btrieve record or NULL if you
want a record to be automatically
allocated for you.
iOpenType....Type of open for the Btrieve file.
*P

B_OPEN Regular Btrieve open
B_OPEN_ACCELERATED Open Accelerated
B_OPEN_READ_ONLY Open Read Only
B_OPEN_VERIFY Open Verify for local DOS disks
B_OPEN_EXCLUSIVE Open Exclusive access to file

RETURNS
Btrieve file handle or 0 if an error occurs.

EXAMPLE
iBtr=BtrOpen("MAIL.BTR", &rMail, B_OPEN);
*P

int BtrClose(int iBtrHandle)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Closes a the file and deallocates data space used by it.

INPUTS
iBtrHandle....File handle (integer) that refers to the
file.

RETURNS
The Btrieve result status code of the close.

EXAMPLE
BtrClose(iBtr);
*P

void BtrShowError( int iBtrHandle )
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Displays a Btrieve error on the screen. You will
probably want to modify this routine for your particular
user interface.

INPUTS
iBtrHandle...Btrieve file handle to display last
operation result.
RETURNS
Nothing

EXAMPLE
BtrShowError( iBtr );
*P

int BtrCreate(char *sFile, FILE_SPEC *specs, int iKey)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Creates a Btrieve file.

INPUTS
sFile........The file name supplied.
specs........The Btrieve specs to create the file.
iKey.........Create Status Key.
CHECK_EXISTS - Check if file exists on create.
NO_CHECK_EXISTS - Don't check if file exists.
RETURNS
The Btrieve result status code of the create.
EXAMPLE
BtrCreate("TEMP.BTR",&FileSpecs, 0);
*P

int BtrCall(int iBtr, int iFuncCode, int iKeyNumber)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Executes a function call on a file specified by iBtr.

INPUTS
iBtr.........Btrieve file handle
iFuncCode....Btrieve function code to execute
iKeyNumber...Key path to use

RETURNS
Btrieve result status of the function.

EXAMPLE
BtrCall(iBtr, B_GET_NEXT, 0);
*P

int BtrFillKey(int iBtrHandle, void *sKeyField)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Fills a Btrieve key field from a string.

INPUTS
iBtrHandle...Handle of Btrieve file
sKeyField....String to load into the key field

RETURNS
FILE_NOT_OPEN if the handle is invalid, else it
returns 0.

EXAMPLE
BtrFillKey(iBtr, "NEW YORK");
*P

int BtrFillKeyN(int iBtr, void *sKeyField, int iLength)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Fills the key field from an array of length iLength.

INPUTS
iBtr........Handle of Btrieve file
sKeyField...Address of bytes to load into the key field.
iLength.....Number of bytes to load

RETURNS
FILE_NOT_OPEN if the handle is invalid, else it returns 0

EXAMPLE
BtrFillKeyN(iBtr, rKeyStruct, sizeof(rKeyStruct);
*P

int BtrSetRecordLength(int iBtr, int iRecordLength)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Sets the record length of a Btrieve record.

INPUTS
iBtr.............Handle of Btrieve file
iRecordLength....Size of the Btrieve record.

RETURNS
FILE_NOT_OPEN if the handle is invalid, else
it returns 0.

EXAMPLE
BtrSetRecordLength(iBtr, sizeof(rMail));
*P

int iBtrGetRecordLength(int iBtrHandle)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Returns the record length of the last record read.

INPUTS
iBtrHandle...Handle of the Btrieve file.

RETURNS
0 if the handle is invalid, else it returns the record
length.

EXAMPLE
iLength = iBtrGetRecordLength( iBtr );
*P

void BtrInitialize(void)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Initializes Btrieve and the data structures.

INPUTS
None

RETURNS
None

EXAMPLE
BtrInitialize();
*P

long lBtrGetPosition(int iBtrHandle)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Returns a long integer indicating the position of
the current record.

INPUTS
iBtrHandle...Handle of the Btrieve file.

RETURNS
The position of the current Btrieve record.

EXAMPLE
lPosition = lBtrGetPosition( iBtr );
*P

int iBtrSetPosition(int iBtr, long lPosition, int iKey)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Sets the position of the current record using a long int.

INPUTS
iBtr..........Handle of the Btrieve file.
lPosition.....Position to set in the Btrieve file.
iKey..........Key path to set the current positioning.

RETURNS
The Btrieve result status for the B_GET_DIRECT call.

EXAMPLE
iBtrSetPosition(iBtr, lPosition, 0);
*P

int BtrCloseAll(void)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Closes all Btrieve files that may be open.

INPUTS
None

RETURNS
0

EXAMPLE
int BtrCloseAll();
*P

int BtrKeyInit(int iBtrHandle)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Fills a Btrieve key field with nulls.

INPUTS
iBtrHandle........Handle of the Btrieve file.

RETURNS
0 or FILE_NOT_OPEN if the handle is invalid.

EXAMPLE
BtrKeyInit( iBtr );
*P

int BtrKeyMax(int iBtrHandle)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Fills a Btrieve key field with 0xFF.

INPUTS
iBtrHandle....Handle of the Btrieve file.

RETURNS
0 or FILE_NOT_OPEN if the handle is invalid.

EXAMPLE
BtrKeyMax( iBtr );
*P

char *BtrDataRecord(int iBtrHandle)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Returns a pointer to the Btrieve data record given the
file handle.

INPUTS
iBtrHandle...Handle of the Btrieve file.

RETURNS
Pointer to the Btrieve data record.

EXAMPLE
prMail = BtrDataRecord( iBtr );
*P

long BtrNumberOfRecords( iBtr )
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Returns a long integer containing the number of records
in a file when the file was opened. Does not reflect
any records added or deleted since the file was open.

INPUTS
iBtrHandle...Handle of the Btrieve file.

RETURNS
The number of records in a Btrieve file.

EXAMPLE
lRecords = BtrNumberOfRecords( iBtr );
*P

void *BtrSpecRecord(int iBtrHandle)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Returns a pointer to the Btrieve file specifications
for a Btrieve file.

INPUTS
iBtrHandle....Handle of the Btrieve file.

RETURNS
Pointer to the Btrieve file specifications for a file.

EXAMPLE
Specs = BtrSpecRecord( iBtr );
*E
*B 409,Btr Help!

B T R H E L P !
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Btrieve is Novell's record-manager system designed to
aid PC programmers in the development of applications.
Btr Help! was created to provide functions needed during
the design, development, and maintenance of applications
that use Btrieve. Btr Help! provides an easy way to
repair damaged Btrieve database files or test their
integrity.

Some of the other features of Btr Help! are:

+ Browse, edit, add, and delete Btrieve records.
+ List Btrieve operation, error, and key codes
*P

+ Empty or clone files.
+ Display Btrieve file statistics.
+ Repair damaged Btrieve file headers.
+ Display records in ASCII, hex, or key format.
+ Display Btrieve version and type loaded.
+ And more!

Btr Help! is useful for file maintenance with Great
Plains Accounting, IBM's Platinum Series, Galacticomm
BBS, Macola Accounting, Xtrieve, Magic PC DBMS, DacEasy
Accounting, Pacioli 2000 Accounting or any application
that uses Btrieve. ($40)
*E
*B 410,Btrieve Quick Reference

Btrieve Quick Reference Card
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

The Btrieve Quick Reference card is a handy
reference to all Btrieve functions codes and return
status codes. All operation codes are cross referenced
with the expected input and return values. This
includes all the extended Btrieve operations.
The 5 1/2 x 8 1/2 quick reference card is durable
and bright green.
*E
*B 411,Quick Start

Quick Start
ÄÄÄÄÄÄÄÄÄÄÄ

1. Load Btrieve before ^Btr Watch^ is loaded.

2. After Btrieve is loaded, run "BTRWATCH"
The TSR part of Btr Watch will be loaded.

3. Load a Btrieve application and use it normally.

4. Exit out of the application and run "WATCHBTR".

5. Select 'V' from the menu to display the Btrieve file
operations used when the application was run.
*E
*B 412,Config File

Configuration File
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

The file contains all of the program ^options^ used by
WATCHBTR and BTRWATCH. A configuration file can be
specified on the command line to load or save to a
configuration file with a name other than BTRWATCH.CFG.
If a configuration file is not given, BTRWATCH.CFG is
used as the configuration file.

*E

  3 Responses to “Category : Databases and related files
Archive   : BCHWTCH.ZIP
Filename : WATCHBTR.HLP

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/