












                              Viper v2.0

          "The complete communications and offline mail system"

                        Complete documentation

                      (c)1992-94 Chris Lautenbach








































Table of contents

Description                                    Section
------------------------------------------------------

Introduction                                   1.0
 Disclaimer, license and copyright information 1.1
 A brief description of the QWK standard       1.2
 System requirements                           1.3
 Program capabilities                          1.4
 Optimization tips                             1.5
 Conventions used in this manual               1.6
 Keyboard/mouse conventions within Viper       1.7
 Using Viper with non-standard fonts           1.8
 Vipers use of DPMI/EMS/XMS memory             1.9
 Running Viper under Microsoft Windows(tm)     1.10
 Running Viper under IBM OS/2(tm)              1.11

Getting Started                                2.0
 Installation                                  2.1
 Navigation made simple                        2.2
 Configuration                                 2.3
  Filenames and paths                          2.3.1
  Database                                     2.3.2
  Sorting                                      2.3.3
  Tagline                                      2.3.4
  Quoting                                      2.3.5
  Communications                               2.3.6
  Compression                                  2.3.7
  Colors                                       2.3.8
  Other                                        2.3.9
  Message                                      2.3.10
  Printer                                      2.3.11
 Creating header/signature files               2.4
 Setting up Viper for automated mail transfers 2.5

The Main Menu                                  3.0
 Opening and closing packets                   3.1
 Reading messages                              3.2
 Viewing text files                            3.3
 Viewing/selecting new files                   3.4
 BBS Management                                3.5
 Purge folders                                 3.6

The Conference Menu                            4.0
 Zoom                                          4.1
 Selecting conferences                         4.2
 Adding/dropping conferences                   4.3
 Resetting message pointers                    4.4
 Write message                                 4.5
 Folder menu                                   4.6
 Searching the entire packet                   4.7
 Sorting conferences                           4.8

Message Header Menu                            5.0
 Sorting messages                              5.1
 Read a message                                5.2
 Toggling flags                                5.3
 Clearing flags                                5.4
 Exiting the Message Header Menu               5.5

Reading Messages                               6.0
 Searching the conference                      6.1
 Exiting read mode                             6.2
 Copying messages                              6.3
 Viewing ANSI/RIP messages                     6.4
 QuickReading messages                         6.5
 Forwarding messages                           6.6
 Replying/Writing                              6.7
 Options                                       6.8
  Export to file                               6.8.1
  Viewing                                      6.8.2
  Printing                                     6.8.3
  Adding twits                                 6.8.4
  Adding to a NameList                         6.8.5
  Clear flags                                  6.8.6
  Shelling to DOS                              6.8.7
 Deleting replies and folder messages          6.9
 Viewing ANSI/RIP messages                     6.10

Writing Messages                               7.0
 Replying to others                            7.1
 Writing a messsage                            7.2
 Using Vipers internal editor                  7.3
 Importing files into the editor               7.4
 Doing carbon copies                           7.5
 Attaching files to messages                   7.6

Using folders                                  8.0
 Creating a folder                             8.1
 Deleting a folder                             8.2
 Editing a folder                              8.3
 Purging your folders                          8.4

HitLists                                       9.0
 Practical uses for HitLists                   9.1
 The effect of rejected HitList entries        9.2

NameLists                                      10.0
 Using a NameList                              10.1

Communications                                 11.0
 Terminal mode                                 11.1
  Backscroll                                   11.1.1
  Dialing directory                            11.1.2
  Setting communications parameters            11.1.3
  Uploading files                              11.1.4
  Downloading files                            11.1.5
 ViperTerm command line parameters             11.2

Pepper, the script language                    12.0
 Differences between Vanilla Pascal and Pepper 12.1
 Supported variable types                      12.2
 Internal variable reference                   12.3
  Information variables                        12.3.1
  Status variables                             12.3.2
 Internal function/procedure reference         12.4

External programs                              13.0
 Tagline managers                              13.1
 Quote enhancers                               13.2
 RIP Viewers                                   13.3
 Terminals                                     13.4
 Text editors and viewers                      13.5

Troubleshooting                                14.0

Appendices                                     15.0
 Appendix A: RoseMail/Qmail4 door settings     15.1

Registration and program information           16.0
 Contacting the author                         16.1
 Developer information                         16.2
 Greetings and salutations                     16.3
 Registration information                      16.4

---

1.0 - Introduction

About two years ago, I decided that reading my mail offline would save me
a fair amount of money on certain long distance bulletin boards I called
frequently.

After two weeks of searching for a decent mailreader with integrated
communications, I had come up empty-handed.  There were very few that met
my requirements, and the couple that did were either buggier than my
cottage, or the interface was far too rough on the soul.

Being a contract programmer, and always writing programs for other people,
I decided to write one for myself.  After showing it to a couple of friends,
I found that there were many people who wanted the same thing I did.

This made me rethink the strategy I was using to write it, and I started
over from scratch.  This time, I had everyones concerns in mind rather than
just my own.

Many of the people I had talked to were concerned with the same things I
was.  I had no wish to waste any sizable portion of the development time on
any feature that a small portion of my users would actually use, so I
concentrated mainly on the features that were most important.

After about three months of coding, I had a program that could be used, and
the beta/external development cycle began.  For the next year or so, I did
nothing but implement features suggested by my beta testers, and debug the
program as we went along.

The major holdback for a release of Viper has been the documentation, since
programmers seldom enjoy writing it -- and most users didn't know enough
about the program to do it, either.

This summer I made a conscious decision to make Viper a priority; putting
much contract work on hold until I could make a release.

I truly hope you will appreciate the effort that has gone into producing
this software.  It represents thousands of hours of work on my part, plus
a similar amount on the part of my beta-test team.

I've tried to price Viper competetively compared to other products, and
eventually it will have many features that were previously only dreamt of.

But I need you, the end-user, to make this happen!  I am in this thing for
the long haul.  Viper will not disappear overnight.

Consider Viper a program by the users, for the users.  If you make a
suggestion, and it is in line with the main purpose of the program
(communications and e-mail), I will gladly implement it!

Naturally though, it is your suggestions and your registrations that will
enable this program to flourish.  Without support, I will not be able to
update Viper as often or as significantly as I would like to.

In any case, since Viper is marketed as Shareware, you have the right to use
it for up to 45 days for evaluation purposes.  After that 45 day period, you
are either required to register Viper, or discontinue usage.

Registration is extremely fast if you have VISA, since you can just call my
support BBS, enter your information, and call back in 24 hours for your
key file.

1.1 - Disclaimer, license and copyright information

Viper (herein, "the program") is NOT public domain, nor is it free.  You are
granted a 45 day evaluation period in which to determine whether or not the
program suits your needs.  If you continue to use the program after this 45
day period you are expected to register it.

All Viper program, documentation, and configuration files contained in the
distribution archive are copyrighted by the author (Chris M. Lautenbach).
The copyright owner hereby grants you the license to: use the software for
an evaluation period, make copies and give them to whomever you wish; and
distribute the program through electronic means -- providing you include
all files contained in the distribution archive.  You are not permitted,
however, to distribute any key files other than the evaluation key that
came with the original package.

The author hereby disclaims all warranties relating to the program whether
express or implied, including without limitation any implied warranties of
merchantability or fitness for a particular purpose.  The author will not
be held liable for any special, incidental, consequential, indirect or
similar damages due to loss of data or any other reason, even if the author
has been advised of the possibility of such damages.  In no event shall the
author's liability for any damages ever exceed the price paid for the
license to use software, regardless of the form of the claim.  The person
using the software bears all risk as to the quality and performance of the
software.

** No copy of this software may be distributed, or given away without  **
** this document or the other files contained in the distribution      **
** archive.  In addition, neither the program or manual may be altered **
** in any way, or reverse-engineered via disassembly or any other      **
** method.                                                             **

1.2 - A brief description of the QWK standard

QWK was created by Mark `Sparky' Herring, in 1987.  It was derived from the
PCBoard(tm) message base format, and is the most widely used format for
offline mailreading in use today.

There are numerous QWK doors available, for almost every BBS program in
existence.

The method for doing offline mailreading is quite simple.  You call your BBS,
open the mail door, and select all the conferences/areas from which you wish
to read mail.  Then you download a QWK packet, for example, TTC.QWK.

Open the packet with Viper, read, make replies, etc.  Then close the packet,
and a REP file will be generated.  Consistent with the above example, the
replies would be bundled in a file called TTC.REP.

Simply call the BBS back up, and upload the TTC.REP files into the mail door.
That's it!  Your messages are posted.  You didn't have to tie up your
phone line for hours reading mail, or waste your time on the BBS.  Doesn't
that sound nice?

QWK packets are basically binary data files that have been compressed with
PKZIP, LHarc, ARJ, or practically any other compression program that your
mail door will support.

!! Note: In order for automated mailruns to work properly, we suggest you
make sure your RoseMail/Qmail4 door options are set correctly.  See 14.0 for
the correct options.

1.3 - System Requirements

- A 286, or better, processor
- At least 2 megabytes of RAM (no EMS/XMS required)

However; if it is present, Viper will use:

- Up to 32 megabytes of RAM
- A RAM drive
- VGA display
- A Microsoft compatible mouse

1.4 - Program capabilities

- Viper runs in protected mode, utilizing all available DPMI (DOS Protected
  Mode Interface) memory.  This allows you to open large packets, without
  having to load a memory manager to provide EMS/XMS memory (such as HIMEM,
  QEMM-386, or EMM386.EXE).  (See 1.9 for more information on Viper and it's
  DPMI memory usage)

- Up to 15,000 conferences
- Up to 15,000 messages per conference
- Up to 15,000 lines per message
- Internal editor allows for up to 60,000 characters per message

- Directly differentiates between door types including RoseMail, Qmail4,
  JetMail, Tomcat, QSO, and PCBoard v15.x Internal QWK.
- RAMdrive support for your work directory.
- Handles both PCBoard and WildCat! color codes, plus ANSI colors

- Complete ZIP v2.x (inflate/deflate) and LHarc v2.x compatible internal
  compression
- Supports external use of PKZIP, LHarc, and ARJ as compressors, and
  automatically uses them depending on packet type.
- Supports external editors and file viewers (such as QEdit/LIST)
- Supports an external RIP viewer (includes Wayne Thomas's FreeView)

- Complete internal message editor, supporting most standard editing
  commands (eg: WordStar/QEdit command sequences)

- Both tagline and quote managers are supported
- Supports PCBoard 15.x extended headers for return receipts, subjects,
  and to/from fields
- Complete multiple folder support; copy from conferences to folders; from
  replies to folders; from folders to replies; etc.
- A unique message selection system, called HitLists.
- Message forwarding, NameLists, and carbon copies
- Fido-style `dogtag' tagline support
- Intelligent tagline theft (steals most taglines at the press of a key! :)

- Special support for Fido/PostLink/Usenet/Internet mail.  Messages from
  these network/systems are automatically differentiated from normal
  messages, and thereby handled with specific attention paid to the special
  features and limitations of said systems.

- VGA 50 line mode support, plus support for non-standard line modes like
  33 and 66 lines
- Full context sensitive help

- Complete communications included, with X/Y/Zmodem, full-color backscroll.
- PEPPER (script language, an almost 100% Pascal implementation) probably
  the most advanced script language ever seen in a DOS based communications
  package.
- Communications are an external module and may be run simultaneously under
  Windows or OS/2 - PIF files to do so are included.
- Complete support for COM1: to COM8: including non-standard IRQ's and I/O
  base settings.
- FOSSIL/DigiBoard/INT14 support.

- Designed with ease of use in mind, all commands are intuitive, and always
  visible on the status line.

- All sorting is done via a recursive QuickSort, which is VERY fast.
- All searching is done with a Boyer-Moore searching algorithm, which again,
  is VERY fast.

1.5 Optimization Tips

To increase the speed at which Viper runs, there are a few simple things you
can do.

First, use disk caching software such as Norton SpeedCache, Central Point's
PC-CACHE, or HyperWare's Hyperdisk.

A cache size of about 1 to 2 megabytes will *greatly* improve performance
when decompressing QWK packets.

Another thing that accelerates the operations once the packet has been
decompressed is a RAM drive.  A great RAM disk utility is included with
MS-DOS since version 5.0, and it is called RAMDRIVE.SYS.  Some examples
of adding RAMDRIVE.SYS to your CONFIG.SYS file:

DEVICE=C:\DOS\RAMDRIVE.SYS 2000 512 256 /A

Would give you a two megabyte RAM disk on your last drive letter (if you have
only a C: drive, then your D: will now be the RAM disk).

1.6 - Conventions used in this manual

Items enclosed in greater-than/less-than signs are keys on the keyboard; for
example:

<Enter> corresponds to the Enter key.
<Ins> corresponds to the Insert key on your keypad.

Sometimes, you'll see combinations like:

<Ctrl-Right-Arrow> which simply means that you should hold down the <Ctrl>
key and press <Right-Arrow> on your keypad.

When speaking about configuration options, there are usually two phrases
separated by |'s.  Example:  Communications|Modem Speaker  -- refers to the
"Modem Speaker" option which is available on the Communications menu in the
configuration.

Often, you will see us referring to "dialog boxes".  This term is borrowed
from GUI (graphical user interface) environments where a window is displayed
and the user is prompted for information.  Some say this is the way you have
a "dialog" with your computer, hence the name.  Here's an example of a
dialog box:

               Reply ͸
Figure 1.5-1  To ............... MORTON JOLLY               
              Subject .......... COOL NEW MAILREADER               
An standard   Private .......... Yes No                                  
message info  Conference ....... 812   I-MAILREADERS (812)              
dialog box.   Quote original ... Yes No                                  
              ĳ
              F1 Help  Ctrl-Enter Accept  ESC Abort   Next   Previous  
              ;


1.7 - Keyboard/Mouse conventions within Viper

In most places you may use the mouse to click on commands which are
displayed at the bottom of the screen, and also use the right mouse button
as an equivalent to the <Esc> key.

All operations within Viper are abortable by pressing <Esc>.

1.8 - Using Viper in modes other than 25, 43, or 50 lines

If you wish to use Viper in either 43/50 line mode, simply turn on
Other Options|Use 43/50 line mode on E/VGA in the configuration.

The tricky part is using non-standard VGA fonts like 33 and 66 line mode.
It's actually quite simple.  Just turn 43/50 line mode support OFF in the
configuration, and load the font you wish to use before you load Viper.
Easy, isn't it?  :)

!! Note: Viper will NOT work in video modes where the number of columns
is greater than 80.  (Some video cards include programs to put the
card into modes like 132x43 -- this will NOT work with Viper)

1.9 - Viper's use of DPMI/EMS/XMS memory

Viper is a 16-bit protected mode program which accesses memory via the
DPMI (DOS Protected Mode Interface).  Because of this, Viper has no need for
EMS or XMS memory, and does not/cannot use them.

There are known incompatibilities with some versions of QuarterDeck's QDPMI
utility which has been included with its popular QEMM-386 memory manager
for some time.  Viper does not need a DPMI host to be present since it has
its own.

You do not need to load any EMS/XMS drivers (such as QEMM or EMM386.EXE)
since Viper has its own memory manager.  In some cases (where you have very
little memory) it may be advisable to try loading Viper without any memory
managers present.  Although we state 2mb as the required amount of RAM, it
can be run with as little as 1500k -- but there's no guarantee that future
versions will run on this amount.

Sometimes, you may wish to limit how much memory Viper grabs when it loads.
Add this to your MAIL.BAT after installation to limit it:

SET DPMIMEM=MAXMEM <amount>

Example, to limit Viper to 2mb of RAM, use this line:

SET DPMIMEM=MAXMEM 2048

In addition, if you are exiting in and out of Viper alot, it may be faster
if you load the RTMRES.EXE program included with Viper.  This is a memory
resident version of the runtime manager used by Viper..  having this
constantly loaded will make loading Viper significantly faster.


1.10 - Running Viper under Microsoft Windows(tm)

Viper will run quite well in a DOS window under Microsoft Windows 3.1 and
3.11 for Workgroups.

There are three PIF's (Program Information File) included in the
distribution archive, COMM.PIF, MAILRUN.PIF, and VIPER.PIF.  The first will
run the communications portion of Viper (don't count on too much reliability
when doing background transfers under Windows), the second will perform a
mailrun on the currently selected BBS, and the last one will simply run Viper
as if you'd run it from the DOS prompt.

To install the PIF files; simply bring up File Manager, drag them from the
File Manager to a group on the Program Manager desktop.  After that, you
can use <Ctrl-Enter> on them to change the icons and what-have-you.  If you
installed Viper to anywhere other than C:\VIPER, you will need to use the
Windows PIF Editor to change the paths.  If you installed to C:\VIPER, all
should be fine.

Windows has it's own built-in memory manager and DPMI host, so when you run
Viper under Windows, it will have access to all of your virtual memory as
well.  So don't be surprised if you see a really whopping figure for free
memory on your status line.  ;)

1.11 - Running Viper under IBM OS/2(tm)

Viper works perfectly with OS/2, even as far as background downloads are
concerned.  Please note, however, that the following parameters must be
set for your OS/2 DOS session:

DPMI_MEMORY_LIMIT = 4mb
XMS_MEMORY_LIMIT = 0kb
EMS_MEMORY_LIMIT = 0kb
DOS_FILES = 50
DOS_HIGH, DOS_UMB, and DPMI_DOS_API are enabled

On some systems, ViperTerm (GETMAIL.EXE) will report "Cannot open
communications port" as an error.  If this should happen, then add this
line to your MAIL.BAT file:

MODE COMx:38400,N,8,1

Where x is the number of the COM: port your modem is on.

It is also wise to use an alternate communications driver, such as
Ray Gwinn's SIO driver.

Also, in the configuration, under "Compression", the option "No I/O
Redirection" must be ON.  If it is OFF, PKZIP will report that it is out of
memory when run.  Beats me why.

OS/2 also has it's own DPMI host, so you'll see all your OS/2 available
memory appearing there.

2.0 - Getting started

This section will help you get Viper up and running as quickly and painlessly
as possible.

2.1 - Installation

Installing Viper is really quite simple, simply decompress the distribution
archive to a subdirectory on your hard drive.  Now, type INSTALL.

You will be asked to which directory you wish to install Viper. Please, do
NOT select the directory you are installing FROM.

If you wish to view the RIP graphics that may be contained in some messages,
then it is suggested you install the accompanying FreeView program by Wayne
Thomas.  You will be prompted whether or not you wish this feature installed.
Including its example files, it takes up a mere 200kb of disk space.

Viper will next ask you if you wish it to add a line to your AUTOEXEC.BAT
file.  It will add your Viper directory to your path, and add a line that
tells Viper where to find its files.  This line will allow you to start up
Viper from anywhere on your hard drive (if you run DOS).

After you have done this, press <Enter> and it will install the program
files to the subdirectory you specified.

If you are running this from your place of business, and require digits to
be dialed before the destination phone number (a number to `get out', eg: 9)
then Viper will prompt you for this now.

At this point, Viper will attempt to automatically determine which
communications (COM:) port your modem is connected to, and its maximum
baudrate.  Please turn your modem on and off before pressing <Enter> at
this prompt, to reset your modem.  (If your modem is an internal model,
don't worry about it)

After the program is installed, it is always wise to run the SETUP program
first, to make sure that all the path, modem, and compression settings are
okay.  Under most conditions, there is no problem, but there is always the
possibility of an error.

The installation program also creates a batch file for you to run Viper
and it's called MAIL.BAT.  Use this batch file to load Viper, unless
you've let the INSTALL program modify your AUTOEXEC.BAT.  (There are a
couple of lines which are needed in AUTOEXEC.BAT, such as putting Viper in
your path, and setting the VIPER environment variable)

Congratulations, you've now installed Viper! :)

2.2 - Navigation Made Simple

Viper attempts to use an intuitive navigation approach that is straight-
forward and should be instinctive to computer-familiar users.  Using both
the keyboard and mouse you can move through Viper with ease after only a
couple of hours of familiarizational usage.  But to people who are not
familiar with standard software navigation procedures, the principles behind
them are explained below.

Cursor Keys  - These are the 4 arrow keys on your keyboard.  They are used
               to move through various selections in the program.
               In some menus (Main Menu & Message Headers Menu) only the
               cursor up and cursor down keys are used, while in others (such
               as the conference menu and reading menu) all 4 arrow keys can
               be used.

               Note : When reading actual messages the left and right arrows
               are used to move to the previous or next message respectively,
               while the up/down arrows are used to scroll through the message
               that is currently being displayed.  If the current message
               is under 15 lines then scrolling isn't needed since the entire
               message is already being displayed.

<PgUp>       - Can be used in either the message header or conference menus.
<PgDn>         Allows you to scroll through pages to more quickly find your
               selection.

<Esc>        - The <Esc> (escape) key is generally used to exit a current
               menu/option and bring you one level closer to the main menu.

<Home>       - If in a menu, it will usually bring you to the first selection.
               If in a message or conference listing, the first pressing of
               the home key brings you to the first selection on your current
               page.  Pressing it a second time will bring you to the first
               selection on the first page.  (If you are already on the first
               page, it will do nothing more)

<End>        - Similar to the <Home> key but in reverse, i.e. brings you to
               the last selection on your current page.  While pressing it
               again will bring you to the last selection of the entire
               list.

Mouse        - Your left mouse button has two basic usages.  That of
               highlighting a selection and then clicking it again to
               enter that selection.

               When viewing a particularly long message, on the bottom right
               corner of that message a "more" will appear with arrows pointing
               up/down.  You can also use the left mouse button to help scroll
               through the message, by moving the mouse cursor to the message
               text separator lines (there are 2, enclosing the top/bottom of
               the message text) and using the left mouse button to scroll
               up/down through the text.  Note, if the message is shorter than
               16 lines then there would be no additional text to scroll.

               The right mouse button works similarly to the <Esc> key.  It
               generally exits the current menu/option that you are at.

<Alt-F10>    - This puts you into a DOS Shell.  This is a standard feature
               in most programs, but there is no standardized command.  Viper
               uses <Alt-F10> (while holding down the <alt> key you press the
               <F10> key) to execute a shell.  From your DOS Shell you can do
               almost all basic DOS procedures.  When you want to return to
               Viper, you simply type "exit" at the DOS prompt.


2.3 - Configuration

Now that Viper is installed on your system, you'll want to customize it to
your personal preferences.  Go into your Viper directory, and type SETUP.

2.3.1 - Filenames & Paths

Under filenames and paths, you may specify which directories Viper will use
for storing (and finding) various data.

Program Directory - The path where Viper expects to find it's program files
(e.g. VIPER.EXE, SETUP.EXE, etc.)

Data Directory - this is the path where Viper stores BBS pointer files, your
folders and associated data, and several other things.

Work Directory - this is a *very* important directory.  Viper decompresses
your QWK packets to this directory, and cleans it out totally after the packet
is closed.  If you have a decently sized RAM disk (above 1mb) it is advisable
you use it for your work directory.

Reply Work Directory - again, another *very* important directory.  Viper
stores your replies as you write them in this directory.  Because of it's
contents, it is unadvisable to place this directory on a RAM disk, since a
power failure could assist you in losing all your replies.

!! Important note: Never store important files in your WORK or REPWORK
   directories.  Both of these directories are erased when you close a
   packet.  In addition, NEVER point these directories at currently
   existing directories where you store important files (eg: your Viper
   directory).

Path to QWK packets - this is the path where Viper expects to find the QWK
packets you wish to read.  If you are using Viper's internal communications,
then this is also the path where the program will place all downloaded QWK
packets.

Path to REP packets - this is the path where Viper will store the REP packets
it generates for uploading to the BBS.  A REP packet is a file which contains
your replies and outgoing messages.

Download path - this path is used by ViperTerm.  If you download files while
inside terminal mode, and they are not QWK packets, they will be placed in
this directory.

Upload path - this path is also used by ViperTerm.  This is the default
directory that ViperTerm's upload picklist will start out in.

Default macros - this is the path to the macrofile that Viper should use by
default.

Tagline file - this is the path to your tagline file.  The taglines are stored
in standard ASCII format.

Header file - the header file is an ASCII text file, which will be placed
*before* your message text on all replies (not on messages written with the
Write command).  Please see 2.4 for more information on how to create your
own custom header/signature files.

Signature file - the signature file, like the header file, is a straight ASCII
text file, which contains your `signature'.  This file will be appended to all
outgoing messages, written or replied.

Terminal program - this is the program that Viper will execute when you
select "Terminal" on the Main Menu|Communications menu.  (It defaults to
ViperTerm `GETMAIL.EXE /T' but you may use Telix or Qmodem, or whatever
you wish.  See 13.4 for more information on using external terminal
programs.)

RIP Viewer - Viper automatically detects RIP command sequences within
messages, and if it detects them, you may press <V> to have Viper export the
RIP commands and view them with the viewer specified in this configuration
option.  (If you have specified that FreeView be installed, this is all
set up automatically for you)

Text Viewer - this option allows you to over-ride Viper's internal text file
viewer (which supports ANSI, PCBoard @X?? and WildCat! @XX@ color sequences)
with another program, such as V. Buergs LIST program.

Text Editor - Viper has a built-in text editor, which is usually sufficient
for writing messages.  However; if you should need another program, this 
option will allow you to select it.

2.3.2 - Database options

Please note that this release of Viper does not contain what is normally
considered a "database" -- these options mostly refer to other database
'type' features such as saving your PTR files and backup copies of replies.

Viper allows you to keep backups of most files commonly found in QWK packets,
and they are stored in subdirectories of your DATA directory.

Use database options - If this option is OFF, then all of the other Database
options will be disabled.

Save conference lists - this option controls whether or not Viper will save
copies of the BBS conference lists.  At this point in time, you may as well
leave this option OFF, since there is really no use for a saved conference
list.  (In the next release, this will allow you to write messages without
a QWK packet)

Save replies in QWK packet - if this option is ON, then Viper will add your
replies to the QWK packet from which they were written.  When you open that
packet at a later date, you'll see a new pseudo-conference named "Old Replies".
All of your previously written replies from that packet will be in that
pseudo-conference.

Save QWK pointer files - most QWK mail doors send `pointer files'.  These
files contain the numbers of the last message you read in each BBS
conference. Should your pointers, at some time, become corrupted, it is a
good idea to have this option on, so you can easily upload the pointer file.

2.3.3 - Sorting Options

Conferences - you may have the conference list sorted by default.  The
parameters for the sort are None, Name, Number of Messages, and Number.
Basically, the conference list is usually automatically sorted by number when
you download it.

Messages - when a conference is selected, and the messages are loaded, they
are usually loaded in the order they were posted on the BBS.  You may wish to
sort them by Author, Addressee, Subject, Date/Time Left, message number, or
thread.  (See 5.1 for more information on sorting messages)

2.3.4 - Tagline Options

Use taglines - this option controls whether or not Viper attaches a tagline to
the messages you write.  If it is OFF, messages will look like they were
written on the BBS.  (In the unregistered version, this option is always ON)

Fido-style taglines - also known as `dog-tags', these type of taglines are
automatically used on Fido-based networks and on Usenet.  However, you may
wish to use them all the time.  Set this option to ON to have `dog-tags' as
the default.

Random taglines - if this option is ON, Viper will automatically pick the
taglines for you randomly.  If OFF, Viper will display a list of the taglines
and let you pick one.

Tagline hook - this option provides you with the flexibility to have an
external `tagline manager' program assist you in the picking of taglines.
See 13.1 for more information on external tagline programs.

2.3.5 - Quoting options

Quote prefix - these are the characters that Viper inserts before lines that
are quoted when you are writing a message.  If you place the letter "F" or
"L" in the prefix, they will be translated to the authors first or last
initial, respectively.

Example: FL> would equate to JS> if the persons name was John Smith.

SmartQuoting - when this option is ON, Viper will not `double quote'
messages. In other words, if a line in the original message is already a
quote, it will not have *another* quote in front of it.  In addition, Viper
will attempt to make the quotes look slightly nicer.

Viewer wordwrap column - when you are reading messages, if a line in the
message is more than a certain number of columns long, it is automatically
`wrapped' to the next line.

Editor wordwrap column - this is the column at which Viper's internal editor
will `wordwrap' text.  (When you are typing on a line, and the word exceeds
this column, that word will be moved to the next line automatically.) Note
that this is just a default and can be temporarily changed while editing by
pressing <Ctrl-QR>.

Quote hook - there are some `quote enhancing' programs out there, which put
fancy boxes around your quotes.  You may `connect' these programs to Viper
through the Quote hook.  For example, Tagline eXpress provides enhanced
quoting facilities, here's how you `connect' it:

\TLX\TLX.EXE Q \TLX @MSGFILE@

2.3.6 - Communications options

Normally, you will not need to change these options unless you have installed
a new modem, since they were properly configured when you installed Viper.

Default interface - this is the method with which ViperTerm communicates.
Normally, you will not need to change it from it's default, which is UART
(normal COM: port).  If you are running a multi-line BBS, however, and wish
to run Viper from a DESQview window under a FOSSIL driver, select FOSSIL.
The FOSSIL interface has been tested with X00.SYS, and seems to operate
effectively.  The options INT14 and DigiBoard are implemented, but as yet
are untested and may not function correctly.

Default baudrate - the default speed at which you wish your modem initialized
for terminal sessions.  (Values range from 300 to 115,200bps)

COM Port - the communications port to which your modem is connected.  Viper
supports COM Ports one through eight.  (Values range from 1 to 8)

Parity, Databits, and Stopbits - usually you won't need to change these
options since most BBS's use No Parity, 8 databits and 1 stop bit.  (Older
systems, and UNIX systems may use Even Parity, and 7 databits).

Initialization string - this is the string that ViperTerm will send to your
modem to set it up.  This is done each time you do a Mailrun, or a Terminal
session.

Tone dial - if your phone line does not have touch-tone service, set this
option to OFF.

Ignore DCD - if you have a wierd modem, or a faulty modem cable; that is one
that does not provide a CD (carrier-detect) line, turn this option ON.
Rather than using the CD line to detect when you are connected, Viper will
instead watch for the "CONNECT" string.  Certain things, like the on-line
timer, will not operate correctly without CD, but at least it'll get you
running till you can solve your problem.

Quiet mode - when this option is ON, you will not see what is going on during
a scripted mailrun.

Modem speaker - controls whether or not you hear your modem
dialing/connecting.  This is set by default to OFF.

Sound - if this is set to ON, you will hear the exploding window sounds, and
connect/download complete sounds.  If OFF, *no* sound will be heard, even
system beeps from the remote BBS will be translated and displayed as
"<BEEP>" on the screen.

INT10 Backscroll - if ViperTerm's backscroll does not operate correctly on
your computer, then try setting this option to OFF.  On certain slower
computers, it may be advisable to turn this OFF as well.

Dial wait time - this is the amount of time (measured in seconds) that
ViperTerm will wait for a connection.

Maximum redials - the maximum number of times Viper will try to connect to a
BBS before giving up.  Set this to 0 for infinite attempts.

Confirm Exit/Hangup - when this option is ON, ViperTerm will always ask you
whether you are sure when you press <Alt-H> or <Alt-X>.

2.3.7 - Compression Options

Internal ZIP - Viper can decompress QWK packets created with any version of
PKZIP internally (including Shrink, Implode, and Deflate methods).  If you
are low on memory, or would rather not shell to PKUNZIP, set this to ON.

Internal LZH - Viper can also decompress QWK packets created with any
version of Yoshi's LHarc program.

No I/O Redirection - normally, Viper hides the activities of the external
compression programs (like PKZIP, ARJ, and LHA).  However, under OS/2 this
can cause problems.  It is defaulted to ON, if you run OS/2 turn it OFF.

Path to PKZIP, PKUNZIP, ARJ, and LHA - these are the paths to your
compression programs.  If they are in your path, then they were set up
automatically when you INSTALLed Viper.

Maximum renames - this is the maximum number of QWK and REP packets that
Viper will keep for each BBS from which you receive mail.

2.3.8 - Colors

From this sub-menu you can change all of the colors that Viper and ViperTerm
use.  Viper disables blinking on VGA displays by default, so rather than
having blinking attributes, you will have 16 background colors.

2.3.9 - Other options

This is a catch-all sub-menu which contains all the options that didn't
really fit into any of the above categories.

Use HitLists - this option determines whether or not Viper will check your
HitList entries when indexing the packet.  See 9.0 for more details on
HitLists.

Internal communications - if you aren't using Viper's internal
communications for mailruns, then set this option to OFF.  Basically, when
you are using internal communications, Viper renames packets for you.  If you
use something else for mailruns, then this option will let Viper know that it
should prompt you for renaming information.

Load only conferences with mail - fairly obvious.  When you are on a BBS that
has many conferences, it may be advantageous to load only the conferences
which actually have mail in them.  (This feature is only available in the
registered version.)

Security mode - If security mode is ON, then your password will be hidden
when you are editing BBS entries in BBS Management.

Create Index files - if you are using HitLists, then you must have this
option set to ON.

Use 43/50 lines on EGA/VGA - if you have an EGA video adapter installed in
your system, you can display up to 43 lines of text, and up to 50 lines with
a VGA adapter.  Please NOTE; if you wish to use a custom font/line mode,
then make sure this option is OFF, or Viper will go into 43 or 50 line
mode.  (Two custom fonts are included with Viper, NICE33.COM - a 33 line
font, and 66LINE.COM, which is a 66 line mode)

Default mailrun parameters - See 11.2 for more information on ViperTerm's
command line parameters.

2.3.10 - Message Options

Display header during edit - when ON, Viper will display the original message
header while you are replying to a message.

ANSI delay - when you are viewing an ANSI message, this option allows you
to specify the amount of time that Viper will pause between characters.  The
time is specified in milliseconds.  (If you set this to 0, there will be no
delay whatsoever.)

QuickRead Delay - this option specifies the amount of time (in milliseconds)
that Viper will pause between messages while QuickReading.  See 6.5 for more
information on this option.

Expand tabs - when Viper encounters a hard tab in a message, if this option
is set to a number greater than 0, it will be expanded to that number of
spaces.

Maximum lines per message - due to the faulty nature of some mail products
in use today, you may need to limit the number of lines in your outgoing
messages.  Usually, you can send up to a few hundred lines per message, no
problem, but in some cases you may need to limit yourself to 99 lines.
Viper has no internal limit to the number of lines you can have per message.
If the message you have written has more lines than specified in this option,
Viper will automatically split it up into multiple message(s).

Auto-join next conference - when ON, and you come to the last message in a
conference, and press a key that advances to the next message, Viper will
automatically switch to the next conference with mail and continue reading
there.

Block long headers - by default, Viper supports PCBoard v15.x's long TO,
FROM, and SUBJECT fields for packets created by PCBoard itself, RoseMail and
Qmail4. However, if your BBS uses old versions of RoseMail or Qmail4, you may
wish to block Viper from letting you enter more than 25 characters of TO or
SUBJECT information,  (since older RoseMail's and Qmail's will just insert
that extended information into your message text).

Strip RE's - many mailreaders place a `RE:' before the subject when a reply
has been made.  When you are sorting messages by Subject or Thread, these
`RE:'s can cause the sort order to be incorrect.  Set this option to ON, and
Viper will automatically remove the RE: field from the message subjects.

High ASCII stripping - Viper automatically strips high ASCII from
Internet/Usenet and Fido messages.  If this option is set to OFF, Viper will
never strip high ASCII.

Strip Internet Headers - most Internet-sourced messages (eg. email, news,
etc) contain what is known as an RFC-822 message header.  This is alot of
text that describes the message.  Often this text can consume the entire
first page of the text window, making reading more of a task.  Turn this
option ON to have Viper automatically remove these RFC-822 headers.

Beep on personal messages - when this option is ON, Viper will beep whenever
you come across a message addressed to you, (except in the Personal
Conference, since that would quite a nuisance).

Ask for edit headers on copy - if set to ON, then Viper will ask you if you
want to edit message headers when you are copying messages, (unless you
are bulk copying, in which case it automatically doesn't ask you).

2.3.11 - Printer options

Formfeed after each message - if this option is ON, Viper will only print
one message per page (it will send a formfeed after each message).

Default LPT port - this is the port number to which your printer is attached.

2.4 - Creating header/signature files

Many people like to have a "header" and "signature" appended to their
messages.

Viper supports both files, and they can be set in Paths|Header file, and
Paths|Signature file.

To edit them, simply go into the configuration, highlight one of the
options, and press <F2> to edit the file.

It is important to remember that the header file is used only on messages
written with the <R>eply function, since they are usually used to display
"Quoting JOE SHMOE to BILL SMITH about BLEAH-BLEAH" type things.

You can embed the following codes within your header and signature files,
and they will be translated when your message is written to the Replies
pseudo-conference:

curbbsid                    ; Current BBS's BBSID
confnum                     ; Current conference number
confname                    ; Current conference name
msgnum                      ; Current Msg: number
msgfrom                     ; Current Msg: From
msgto                       ; Current Msg: To
msgsubj                     ; Current Msg: Subject
msgdate                     ; Current Msg: Date
msgtime                     ; Current Msg: Time
msgstatus                   ; Current Msg: Status
msgrefnum                   ; Current Msg: Reference number
msgconf                     ; Current Msg: Conference Number
msgfold                     ; Current Msg: Folder name (if any)
msgfile                     ; Current Msg: name of text file (e.g. CURRENT.MSG)
fulldate                    ; Calendar: Full expanded date
date                        ; Calendar: Today's date
time                        ; Calendar: Current time
addressee                   ; Packet: Name of user the current packet is for
sysop                       ; Packet: SysOp's name
pgmpath                     ; Viper: program path
datapath                    ; Viper: data path
workpath                    ; Viper: work path
repwork                     ; Viper: REP work path
qwkpath                     ; Viper: path to QWK packets
reppath                     ; Viper: path to REP packets
zippath                     ; Viper: path to PKZIP
unzippath                   ; Viper: path to PKUNZIP
arjpath                     ; Viper: path to ARJ
lharcpath                   ; Viper: path to LHarc

When embedding these codes in your header/signature, always preface and
suffix them with @ signs, and make sure the code is in uppercase as shown
below.

Example signature:

Chris...      viper@can.net            @FULLDATE@

Would translate to:

Chris...      viper@can.net            Tuesday, July 19th, 1994

If the date were what it is above, of course.  :)

2.5 - Setting up Viper for automated mail transfers

It is important to remember that at this point in time, Viper only includes
scripts for use with PCBoard/RoseMail, PCBoard/Qmail4, and PCBoard v15.x
internal QWK.

In addition, if your SysOp has altered his PCBoard prompts considerably, the
included scripts may not work at all.

Here are 5 simple steps to get you up and running with mail transfers:

1. Create an entry for the BBS you wish to call under BBS Management.  See
   3.5 for more information on this topic.

2. Make sure that you have EXPERT mode turned on in BOTH PCBoard, and
   Qmail4/RoseMail.

3. Make sure your RoseMail/Qmail4 settings are correct.  The correct
   settings are shown in Appendix A (15.1).  It would probably be a good
   idea to select some conferences for downloading while you are there.
   Also, make sure your download protocol is set to ZMODEM, since the
   included scripts are setup for Zmodem only.

4. Set all your communication settings correctly (baud rate, com port, etc)

5. Select Communications|Mail Transfer!  That should be all you need to
   do!

3.0 - The Main Menu

The Main Menu is the one that is displayed when you first run Viper.  Most of
Viper's major features are controlled/activated from this point.

                      Section   Description
   Main Menu ͸ ~~~~~~~   ~~~~~~~~~~~
   Open packet      <- 3.1:   Opening/closing a packet
   Read messages    <- 3.2:   Reading messages
   Text             <- 3.3:   Viewing text files
   Files            <- 3.4:   Viewing/selecting new files
   Communications   <- 11.0:  Communications/doing a mailrun
   BBS Management   <- 3.5:   BBS Management
   Purge Folders    <- 3.6:   Purging folders
   HitLists         <- 9.0:   HitLists
   NameLists        <- 10.0:  NameLists
   Configuration    <- 2.2:   Configuration
   Exit to DOS     
  ;


3.1 - Opening/closing packets

QWK packets are displayed in alphabetical order. Simply select the packet you
wish to open, hit <Enter>, and Viper will automatically decompress your
message packet.  Viper will then display the name of the BBS, number of
conferences, messages, personal messages, outgoing messages, and type of mail
interface.

3.2 - Reading messages

Once you have opened up a packet which contains messages, the `Read Messages'
option on the Main Menu will light up.  After you select this option, you will
be presented with the Conference Menu (chap. 4).

The Conference Menu displays all the conferences included in the QWK packet
(which vary depending on your mail door configuration).  The various commands
associated with this menu are discussed in detail in section 4.0.  All you 
need to know for now, is that you can use the arrow keys to move the selection
bar around and that pressing <Enter> will select the currently highlighted 
conference.

Once you have selected a conference that contains mail, Viper will load the 
`header information' for each message in the conference.  It will be displayed
to you on what we call the `Message Header Menu' (chap. 5).  Basically, the
number, author, addressee and subject of each message will be displayed on
this menu.  You may use the arrow keys to highlight a particular message to
read, and then press <Enter> to start reading.

The other two functions supported on the Message Header Menu, are Sort and 
Tag.

Pressing <F2> will bring up the Sort menu, which prompts you whether you wish 
to sort the messages in this conference by author, addressee, subject, number,
date/time left, tag status, or thread.

Pressing "T" will tag the currently highlighted message.  This is useful for
exporting large numbers of messages, or for tagging topics of interest on the 
header menu, and then reading only those messages.

When you use the <F2> Sort function with the Tag option, all messages that 
have been tagged will be moved to the top of the list.

3.3 - Viewing text files

Certain mail doors and BBS programs provide you with extra information in the 
QWK packet, in the form of news, bulletins, and welcome/goodbye screens.  Any 
files of this type that have been included in your QWK packet will be 
available for viewing from this menu.

3.4 - Files (Viewing/selecting new files)

Most mail doors provide a new files listing in the QWK packet, called 
NEWFILES.DAT.  Viper can display this file to you, and on systems running
PCBoard and RoseMail, you can optionally flag files for download on your next 
mailrun.  In the future, Viper will support this option on more systems.

3.5 - BBS Management

Naturally, Viper requires certain information about each BBS you transfer
mail with.  Under BBS Management, you are able to tell Viper about which
BBS's you communicate with.

When you select MailRun from the Communications sub-menu, Viper will perform
that mailrun on the currently selected BBS.  To select your current BBS, you
first bring up the BBS Management menu, then use the cursor keys to highlight
a BBS - then, press <Enter> to select it.  When an entry is selected, a small
checkmark will appear beside it.

When you initially select this option, Viper will display a list of BBS's
that you have on file.  Their respective names, phone numbers, and baud rates
will be displayed.

Once you have selected an entry using the arrow keys on your keypad, you may:
add a new entry by pressing <Ins>; delete an entry from the list by pressing
<Del>; or edit an existing entry press <F2>.

          BBS Management͸
Figure    BBS packet ID .... TTC                                           
  3.5-1   Name ............. Toronto Twilight Communications               
          Script ........... PCBOARDR                                      
 BBS Mgmt Phone number ..... 416-663-7010                                  
 dialog   Baud rate ........ 300 1200 2400 4800 9600 19200 38400 57600...  
 box      Block long hdrs .. Yes No                                        
          User name ........ Chris Lautenbach                              
          Password .........                                       
          ĳ
          F1 Help  ESC Abort  Ctrl-Enter Save  Alt-F10 Shell to DOS        
          ;

When editing or adding a new entry, a BBS Management dialog box will appear
(this dialog is shown in Figure 3.5-1).  The following fields will be
displayed:

BBS Packet ID - this is the name of the packet that you download from your
BBS.  For example, if your packets are called CRS.QWK, then your Packet ID
is CRS.

Name - this is the full name of the BBS.

Script - the name of the script you are using for this system.  You need only
enter the name of the file, not the .SCR extension.  Optionally, you may edit
the script file itself by pressing <F2> at this prompt.  Three scripts are
included with Viper, these are PCBOARDR.SCR (for PCBoard and RoseMail),
PCBOARDQ.SCR (PCBoard with Qmail4) and PCBOARD.SCR (for PCBoard v15.x using
Internal QWK).

Phone number - this is the full number of the bulletin board system.  For
example, if it is long distance, include the 1 and the area code (e.g. 1-416-
663-1103).

Baud rate - the communications rate you wish your modem set at when calling
this system.

Block long hdrs - Viper supports PCBoard v15.x extended message headers (long
TO, FROM, and SUBJECT fields).  However; some BBS's and doors may not be so
up to date.  When this option is set to YES, then Viper will force you to use
standard 25 character QWK fields.   As of this writing, the latest
versions of Qmail4, RoseMail v2.50 and above, and PCBoard v15.x internal QWK
all support extended headers -- make sure your BBS is using the latest version
of these doors before you use these.  Viper will not let you use long headers
on BBS/doors which do not support them.

User name - this is the name you use on this BBS.  Please enter it exactly as
it would appear on the BBS's name prompt.

Password - this is your password on the BBS.  If Security mode is set to ON in
the configuration, your password will be hidden behind little blocks.

Once you have finished entering the required information, you may then press
<Ctrl-Enter> to save the entry to disk.  If you have decided you no longer
wish to make these changes/additions, simply press <Esc> and answer NO when it
asks you if you wish to save.

3.6 - Purging folders

(To find out how to create and delete folders, please see section 8.0)

When you are using folders to store messages, occasionally you will find the
need to decrease the size of your message holdings.

After you have marked the folder messages you no longer need as deleted, you
may select Purge Folders, and all the messages you have marked will be
removed from their respective folders.  (To see more on marking folder
messages as deleted please see 6.9)


4.0 - The Conference Menu

4.1 - Zoom <F5>

If there are under a certain number of conferences, the conference menu will
not take up the whole screen, but rather only a small section in the middle.
Should you wish it to take up the whole screen no matter what, press <F5> to
"zoom" it.

4.2 - Selecting conferences <Enter>

When you open a packet you are presented with the conferences in that packet.
Also, there are conferences that Viper creates internally (pseudo-conferences)
for use during that session: Personal, Search, Replies, HitLists, and Old
Replies.  Just highlight the one you want, hit <Enter> and you will be shown
the headers of the messages in that conference (See 5.0 for more on the
Message Headers Menu).

Below is a list of the pseudo-conferences that Viper creates in the
Conferences menu in addition to the list of conferences from the host bbs
system.

Personal: messages addressed to you, gathered from all conferences that have
mail.  MUCH easier than searching through ALL conferences for your mail!

Search: when you hit <F2>, you can enter criteria that Viper will search for
in the text of all messages contained in the packet.  All these messages will
be placed here.

Replies: any messages you reply to, or messages you write, will be placed in
this conference; current outgoing messages.

HitLists: (See 9.0 for information on HitLists)

Old Replies: if you re-open a packet containing replies, they are shown here.
However, any NEW replies you write during this session will be placed in the
Replies section.

4.3 - Adding/dropping conferences <A>, <D>

Adding is used to select a new conference from the remote system.  This means
messages from this conference will start being sent at your next mail run.

Dropping deselects a conference so that conference's mail will no longer be
sent to you in future mail runs.

Adding/dropping only affects reading messages, you can still write to a
conference even if it hasn't been selected.

From the conference menu use the cursor keys & page-up/page down keys to
reach the conference you wish to add or drop.  When the conference you want
to change is highlighted, press "A" for Add or "D" for Drop.

When adding a new conference you will be prompted for how many messages you
wish to receive.  This refers to the remote system message pointers.  If you
select "ALL" it will send you all the messages the remote system has in that
conference, no matter how old.  If you select "0" it would mean to only send
you new messages from then on.  It wouldn't send any messages that have
already been posted to the remote system.

Dropping is a bit more simple.  After pressing D over the highlighted
conference your mail reader will notify the remote system to stop sending
mail from that specified conference.

4.4 - Resetting message pointers <R>

This option is used to move your message pointers forward or backward.  A
message pointer is basically the number of the last message you read in a
specific conference.

Highlight the conference you wish this action to be executed on and then hit
<R>.  You will be prompted for how many messages you wish to receive
with 0 as the default.  It will reset your pointer moving backwards from the
newest message on the remote system.  Meaning if you entered 0 it would only
send you messages that were posted AFTER your next mail run.  So you would
not get any messages during your next mail run, but from then on would
receive all new messages in that conference.  Setting it to i.e. 100, would
mean it would send you the most recent 100 messages posted in that
conference and from then on any new messages posted.

Warning, after adding or dropping a conference the mail reader will "write"
a message in that conference.  Do not delete or modify this message.  It
contains the QWK commands that will be sent to your remote system notifying
it of your changes.

Warning, you can not use the reset command on any pseudo-conferences such
as folders, replies, searches, personal, etc..  Since these
pseudo-conferences are internal to your system alone and are not located on
the remote system.

4.5 - Writing <W>

You can select to write a message directly from the Conference menu.  Do this
by moving toward the conference you wish to write, using the cursor keys
to highlight the conference.  Then at the highlighted conference you have
selected to write to, press <W>.  A Write Message dialog will pop up.  (For
further information about how to write a message please see 7.0)

4.6 Folder menu <F>

See 8.0 for a complete description on how to use the Folder Menu.

4.7 - Searching the entire packet <F2>

This command will search your entire mail packet, i.e. ALL the conferences
that you have selected.  It differs from the search command that can be found
while reading messages, which does conference-pecific searches instead of
global searches.

From the conference menu, press F2.  You will then be queried for the
phrase you wish to search for.  It will also ask if you wish the search to
be case sensitive, meaning whether or not capitalization should matter.

Example:  If searching for "rick", is case sensitive it would not return
a match with "RICK" since the capitalization of the search phrase and this
example phrase differs.  But if it is not case sensitive, there would be a
match since it would be ignoring capitalization differences.

After the search is completed it will tell you how many matches were found.
The matches are then placed into your special Search pseudo-conference (which
can be found near the beginning of your conference list).  If there are
already messages in the search conference it will first query you if you
wish these messages cleared, or if you wish the new matches to be simply
superimposed over the old messages already in your search conference.

After the search has successfully reached completion, simply highlight the
Search pseudo-conference, and press <Enter> to read it as you would any
other normal conference.

You could then sort your search's messages, do further sub-searches,
or any other feature that you could normally do in a real message
conference.

4.8 - Sorting Conferences <F3>

This is the <F3> command as shown on the bottom of your screen in the
Conferences menu.  It is used to sort your listing of conferences by a choice
of 3 criteria.

Name: Sorts your list of conferences by alphabetical order, A to Z.

Messages: Sorts your list of conferences by descending order of number of
messages.

Number: This is the default sorting pattern that is used upon opening your
packet.  It sorts the list of conferences by their conference numbers which
are set on the host BBS system.

5.0 - Message Header Menu

The Message Header Menu is the first menu you see after pressing <Enter> on
the Conference Menu to read a conference.

Basically, it displays the "header" information from each message in the
conference.  The header information consists of the FROM, TO, SUBJECT, and
message number fields of each message.

From here, you can either press <Enter> to immediately start reading at the
first message, or you may use the cursor keys to highlight a specific
message to read, then press <Enter>.

!! Note: Most of these commands assume you've selected a message using the
   cursor keys. :)

5.1 - Sorting Messages <F3>

It is often easier to read messages if they are in a particular order.  The
sort feature makes this possible.

When you press <F3>, the Sort Menu appears.  You are able to sort by the
following fields:

Author (the person who wrote the message)
Addressee (the person to which the message is addressed)
Subject (the subject line of the message)
Date/time (the date and time the message was posted)
Flag status (whether or not the message is flagged)
Number (usually puts the messages back into their original order)
Thread (sorts by subject, and then date/time within subject, to more truly
        reflect the original order in which the messages were posted)

The two sorts which really require more explanation are Flag status, and
Thread.

The ability to flag messages within a conference yields many gains.  For
example, you can skim the headers, and flag the messages you wish to read,
then sort them by flag.  The flagged messages automatically go to the top
of the list.  In addition, searching works this way as well.

Thread sorting is a little more complicated.  On bulletin boards which have
netmailed conferences (e.g., many BBS's across the world participating) the
message numbers may not reflect the true order in which the messages were
posted, since it takes time for them to travel around the world.  With
thread sorting, messages are sorted by subject, and then date and time
within subject.  This puts them into an order which most closely resembles
the original posting order.

5.2 - Read <Enter>

Pressing <Enter> selects a message for reading.  For more information,
see 6.0.

5.3 - Toggle Flag <T>

Highlight a message using the cursor keys, and press <T>.  An arrow character
will appear beside the message you toggled.  You can toggle messages while on
the Message Header Menu if you wish to do a custom sort.

!! Note: When you press <Esc> on the Message Headers menu to return to the
   Conference menu, all flags will be lost.

5.4 - Clear Flags <C>

Pressing <C> clears all the flags from all the messages that are currently
loaded into memory.

5.5 - Exiting the Message Header Menu <Esc>

Pressing <Esc> brings you back to the Conference Menu.  (See 4.0 for more
information on the Conference Menu)

6.0 - Reading Messages

Reading messages is obviously the heart of any mailreader, and here is where
you will find most of Viper's more robust features.

The message reading screen looks something like this:

-----------------------------------------------------------------------------
Msg # .... 1       Ref # ....                    Left at ..  07-13-94 @ 17:36
From ..... CHRIS LAUTENBACH
To ....... ALL
Subject .. Test message
Status ... Public, unread
Conf ..... ONLINE_GAMES (4)                               1 out of 1 messages


    Welcome to Viper!  :)

    Chris...     viper@planet.org             Wednesday, July 13th, 1994

... "Beta Testers Who Lie!" On the next Geraldo
___ Viper v2.0 [eval]


 F1 Help  F2 Search  Esc Headers  Copy  View  QuickRead  Forward  Delete
 Reply  Write  Options  Steal tagline  Toggle tag  Edit   Next   Previous
-----------------------------------------------------------------------------

The top line shows the message number, reference number, and date/time of
posting.  Following that is the FROM, TO, and SUBJECT lines.  Status is
somewhat of a misnomer since many BBS's that use QWK do not really support
this field.  Finally "Conf" specifies in which conference the message currently
being read was written.

From time to time, you will see additional status information displayed on
either the top or bottom message separator bars.  The bottom one usually
displays the following optional information:

Fido - this indicates the displayed message was written on a Fido-based
system/network.

PostLink - indicates the displayed message was written on a PostLink-based
system/network (only RelayNet/RIME uses this, as far as I know).

Internet - indicates the displayed message was written/transferred via either
Usenet or Internet, (basically that it's an Internet RFC-822 or greater
compliant message).

Receipt - indicates the message is a return receipt.

Attach - indicates a file attachment and size of said file.

ANSI - Viper has determined there are embedded ANSI sequences within the
message.  Press <V> to view it in ANSI-mation.

RIP - Viper has found valid RIP sequences embedded within the message.  Press
<V> to view the message with your selected RIP viewer.

Almost all commands available to you are displayed on the status line (the
highlighted line at the bottom of the screen).  Like other status lines, you
may use your mouse to click on the commands rather than just pressing the
corresponding key.

The following keys are used for navigation:

<Right-Arrow>/<Enter> advances to the next message in the conference, or, if
you are reading the last message in a conference, it advances to the next
conference.

<Left-Arrow> goes to the previous message, or the previous conference if you
are reading the first message in the conference.

<Ctrl-Left-Arrow>/<Ctrl-Right-Arrow> will jump to the previous/next
conference with mail.

<PgDn>/<PgUp> scrolls one page at a time through the message.

<Space> works like a combination of <PgDn> and <Right-Arrow>.  Pressing
<Space> repeatedly will take you through the message, one screen at a time,
until you reach the end, at which point you will advance to the next message
automatically.

<Home>/<End> moves to the beginning/end of the current message.

<J> joins a new conference.  This is rougly equivalent to pressing <Esc>
twice.

If you are using the mouse, you may click on the "message separator" bars
to scroll up/down through the message.  (The bars which separate the message
text from the status line/message information.)

6.1 - Search <F2>

If you should want to find a specific piece of text in the currently
selected conference (the one you are reading), simply press <F2>.

The next step is to enter the text for which you wish to search.

Please note: only the actual message text is searched, the header is not.

Finally, you'll be asked whether or not you wish the search to be case
sensitive or not.  Here's an example of both:

   Search      Found      Case-sensitive    Case-insensitive
   ------      -----      --------------    ----------------
   Apple       apple      NOT FOUND         FOUND
   Apple       Apple      FOUND             FOUND

Viper will flag all messages that have text matching your search criteria.
After it has finished searching, the messages will be sorted in Flag order,
which places all flagged messages at the front of the conference.  Lastly,
Viper will automatically put you back to the first message.  To clear the
search out, simply exit the conference, and go back in.

6.2 - <Esc> (exit back to message headers Menu)

Pressing <Esc> brings you back to the Message Headers menu.  It keeps your
present message order intact (e.g., any sorts, searches, flags, etc.. will be
preserved in the message headers list).

6.3 - Copy <C>

Basically, the copy command allows you to copy a message.  You may copy the
message to any of your global folders, or those specific to the current BBS.
In addition, messages may also be copied to the Replies pseudo-conference
(your .REP packet).

Be careful when copying messages to the Replies pseudo-conference, since most
BBS's will reject mail that is not FROM you -- so make sure you only copy
messages you have written to Replies.

(Actually some BBS's support aliases by simply allowing you to upload
messages written by any name.  This can be very confusing to other users,
should you upload old messages... :)

6.4 - View <V>

This option is provided for messages which may contain embedded ANSI or
RIPscrip graphics sequences.  Viper will automatically detect the presence
of these sequences, and you may press <V> at any time to display the message
in that mode.

(Note: If you did not permit Viper to install the FreeView RIP graphics
viewer during your installation, and have not set up an alternate RIP viewer,
then RIP graphics will not be available.)

6.5 - QuickRead <Q>

QuickRead is one of Viper's more unique features.  Using this feature, you can
quickly skim through all the messages in a given packet.  The speed at which the
messages are displayed is configured via the configuration programs
Message Reading|QuickRead Delay option.

The messages are scrolled, meaning that you will not miss a single character
of any message.  The equivalent to QuickReading in manual keystrokes would be
to press <Space> through every message in the packet.

To stop the QuickRead process, simply press any key to stop.

!! Note: If Message Options|Auto-Join next conference is not set to ON, then
   QuickRead will stop reading at the end of the current conference.

6.6 - Forward <F>

Every once in a while, you may receive a message which is either incorrectly
addressed to you, or you may wish someone else to read it as well.  The
Forwarding feature of Viper makes this possible.

After pressing the <F> key, a standard message information dialog box will
appear.  Simply change the name in the TO: field to reflect the new recipient
of the message.  You may send the message in a different conference by simply
changing the conference number, and you may also change all the other aspects
of the message allowed by the message info dialog box.

After you are done, simply press <Ctrl-Enter> to verify the information, or
<Esc> to abort the forwarding process.  You will then be asked whether or not
you wish to edit the message text before it is forwarded (this is useful if
you wish to append a note to the new recipient letting them know why you
forwarded them this message).

6.7 - Reply/Write <R>/<W>

This allows you to reply to the message you are currently reading.  The
To field defaults to the author of the message you are replying to.  It
queries you for the subject, private flag and conference number.  It
defaults these 3 fields to the original messages info.  It also asks
you if you wish to quote the original message, and if you want a Return
Receipt generated when the person the message is addressed to reads it.
Please note, only PCBoard currently supports the generation of return
receipts in QWK.  <Ctrl-Enter> is used to accept the current paramaters
you have entered and to proceed to the message text editor where you
write your reply.

(To find out more about replying/writing messages, see 7.0.  For more
information on Viper's internal message editor, see 7.3)

6.8 - Options <O>

Due to the number of features in Viper, and the restrictions of only having
a few lines at the bottom of the screen for reference, certain less-often
used features are on the Options menu.  This menu may be activated while
reading messages by pressing <O> or clicking on the <Options> entry on the
status line.

              Options͸
Figure 6.8-1   Export to file  
               View            
               Print           
               Add Twit        
               Add to NameList 
               Clear flags     
               Shell to DOS    
              ;

6.8.1 - Export to file

Every once in a while, there are messages that you may wish to save as text
files for later viewing/editing/converting/etc.  The easiest way to do this
is to select Options|Export to file.

You will be prompted for the name of the file to export to, and if there
are flagged messages, you will be asked if you wish to export them all.

6.8.2 - View

This is the same as the View provided on the statusline while reading
messages, however this one is not activated automatically, so you can use
it when Viper has not detected ANSI/RIP sequences in the message being read.

6.8.3 - Print

Many people enjoy printing out messages to post on their corkboards, giving
to friends, etc.  (Don't ask me what they do with them, I don't do it ;)

Simply select Print to print out messages.  If you have multiple messages
flagged, you can print them all in one pass.

6.8.4 - Add twit

Even though Viper does not provide the standard twitlist facilities that
most primitive mailreaders do, the same thing can be simulated using
HitLists.

Add Twit simply provides a "front-end" to the HitList engine.  When you
select this option, it merely adds a "Reject Message" HitList entry to the
BBS-Specific HitList with the author's name in the FROM field.  You will
also be prompted if you wish to reject messages TO him as well..  :)

6.8.5 - Add to NameList

Using this option to add peoples names to NameLists makes things simpler in
many ways.  Firstly, you don't have to worry about misspelling the person's
name, and also, it's easier.  You will be prompted to which NameList
the person's name should be added.

In addition, if the message is a Usenet or Internet sourced message, and
Viper can determine the person's real name from his address, then Viper will
place the user's real name in the NameList entries "note" field.

See 10.0 for more info on NameLists.

6.8.6 - Clear Flags

Selecting this does exactly what you think it does, it clears all the flags
from the messages in the current conference.

6.8.7 - Shell to DOS

Shell to DOS tells Viper to open up a new instance of your command
interpreter (COMMAND.COM most of the time, but it should work with 4DOS, or
anything that sets the COMSPEC environment variable properly).  You may
do whatever you normally do while in DOS.  You should have at least 500k
free memory in your DOS shell thanks to the DPMI runtime manager.

6.9 - Deleting replies and folder messages

Pressing <D> while reading a message will cause one of three things to
happen:

1. If you are in the "Replies" pseudo-conference, the displayed message
   will be immediately deleted.  You will be returned to the Message Headers
   menu after the message has been removed.

2. If you are in a folder, the message will be marked as deleted, and will
   be removed from the folder the next time you select "Purge Folders" from
   the Main Menu.

3. Nothing at all; if you are in any non-folder/non-replies conference.
   What's the point?  :)

6.10 - Viewing ANSI/RIP messages

When Viper detects that there are embedded ANSI/RIP sequences in the
currently displayed message, you will see either the word "ANSI" or "RIP"
appear on the upper separator bar.  When this is present, simply press <V>
to view the message in the appropriate mode.  Please note that RIP viewing
will not work if you didn't let Viper install FreeView.

7.0  Writing Messages

Of course, the common mistake of calling programs like Viper a "mailreader"
is that the most important thing you can do with it, is of course, writing
messages!  :)

              Reply ͸
Figure 7.0-1 To ............... MORTON JOLLY               
             Subject .......... GREAT NEW MAILREADER               
 Standard    Private .......... Yes No                                  
 msg entry   Conference ....... 812   I-MAILREADERS (812)              
 dialog      Quote original ... Yes No                                  
             ĳ
             F1 Help  Ctrl-Enter Accept  ESC Abort   Next   Previous  
             ;

Figure 7.0-1 shows the standard message information dialog box.  It is your
way to give Viper all the important information about the message you are
about to write to someone (or many people).

On almost all PCBoard/Qmail4/RoseMail BBS's, this dialog box will be
considerably larger, since you can enter up to 60 characters of
TO/FROM/SUBJECT information.  On all other BBS's, you are limited to 25
characters (as shown above).

There are three basic ways of writing messages;

1. Pressing <W> on the Conference Menu, whilst having previously highlighted
   the conference to which you wish to write a message.

2. Pressing <W> while reading messages.  This will write a message to the
   conference you are currently reading (if it is a conference).  Note: You
   cannot write messages to a folder, the Replies, Search, HitList or Old
   Replies pseudo-conferences.

3. Pressing <R> while reading messages,  will initiate a reply to the
   message currently being displayed.

To: The recipient of the message.  The default is "ALL" which is used for a
public posting to everyone in that conference.  For a direct message to an
individual (public or private) enter his/her name in this field.  If you
press <F2> in this field, you can send your message to all people named
in a NameList (See section 7.5).  Pressing <F3> will allow you to pick a
single name from a NameList (this is equivalent to an "addressbook"
function).

Subject: The topic or subject matter of this message.

Private: A private message is one which is readable only by the person
specified in the TO: field (described above).  It is important to remember,
however, that most bulletin board systems do not support "truly private"
email and that all messages posted on the system are readable by the System
Operator.  However, other users of the system will not be able to read a
private message unless it is addressed to them (they won't even know it's
there).

Conference: This is the conference number to which the message is posted.
When writing messages from the Conference Menu, the conference that was
highlighted when you pressed <W> is usually the number displayed in this
field.  If you were reading messages, and are replying to one, then this
number is usually the conference number of the original message you are
replying to.  It is usually not wise to change the conference number when
replying to someone else's message, since they may not be monitoring the
conference you are sending it to.

Once you have filled in all the appropriate fields and are satisfied with
your entries press <Ctrl-Enter> to start writing the message text.
Conversely, should you wish to abandon the reply right now, simply press
<Esc>.

              Editor ͸
Figure 7-2    Save        
              Abandon     
              Continue    
              Edit header 
              Attach file 
             ;

While editing your message text, you may press <Esc> at any time to bring
up the Editor Menu (see Figure 7-2).

Naturally, selecting Save will save the message, and you may be prompted for
a tagline depending on how the Taglines portion of the configuration is set
up.

Abandon cancels the message entry process and dumps the message.

'Continue' allows you to go back to the editor and continue editing the
message text.  This is useful on occasion when you forget something, press
the <Esc> key by accident, or just want to see some of the original message
text that might still be displayed on the screen behind the editor window.

Oops!  You just realized that you put the wrong name in the TO: field of the
message.  No problemo, man.  Just select "Edit Header" and the message
information dialog shown in Figure 7-1 will come up again and you can change
any information you want.

See 7.6 for more information on how to use the Attach command.

7.1 - Replying to others

While reading messages, you may often encounter a message that you wish to
reply to.  Simply press <R> and fill out out the message information as
described in 7.0.

7.2 - Write a message

There are two ways to write a message with Viper.  The first, is while you
are reading messages, you press <W>.

The second, is meant for writing messages to conferences you cannot read
(because there is no mail in them), and this is done by pressing <W> on the
Conference Menu while the conference that is highlighted is the one you
wish to write the message to.

Again, the rest of the process is as described in 7.0.

7.3 - Using Vipers internal editor

Vipers internal text editor is fairly powerful, and will surely do you
for most of your messaging needs.

If you should wish to use an external editor, such as QEdit, Boxer, or
similar, all you have to do is put the name/path of the program in
Paths|Text Editor in the configuration.  That's it!  (Oh, and make sure
you do not change the name of the message file while you are editing it,
as Viper has no way of determining what the new name is)

Here's a brief overview of the editing commands:

<Alt-R>, <Ctrl-B> Reformat paragraph
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Reformats the current paragraph.  If you've changed the margins, then this
command is very helpful for making paragraphs fit within them.  In addition,
if you indent the first line of the paragraph before issuing the reformat
command, all following lines will be indented to match the first.

<Home>, <End> -- moves to the beginning/end of the current line.
<Ctrl-Home>, <Ctrl-End> -- moves to the top/bottom of the screen.
<Ctrl-Right>, <Ctrl-Left> -- moves one word forward/backward.
<Ctrl-PgUp>, <Ctrl-PgDn> -- moves to the top/bottom of the message.
<Ins>, <Ctrl-V> -- turns Insert mode on/off.
<Ctrl-OI> -- indents the paragraph.
<Ctrl-OW> -- turns wordwrapping on/off.
<Ctrl-QR> -- sets the right margin.
<Ctrl-QY> -- deletes from cursor to the end of the current line.
<Ctrl-T> -- deletes the word under the cursor.
<Ctrl-Y> -- deletes the current line.
<Ctrl-U> -- undeletes a line deleted by <Ctrl-Y> (up to 150 lines)
<Ctrl-KR> -- import a file.
<F1> -- help.
<F2>, <Esc> -- exits the editor (optionally saves, you will be prompted).

It is important to remember that the internal editor cannot handle messages
larger than 64,000 bytes.  (This equates to roughly 800 lines of text, *if*
each line contained a full 80 characters)

7.4 - Importing files into the editor

Importing a file into the editor is very easy.  Just follow these three
steps:

1. Move the cursor to the line in the message where you wish the file to
   be inserted.
2. Press <Ctrl-KR>.
3. Highlight the file you wish imported, and press <Enter>.  It's that
   simple!

!! Note: Remember the internal editors limit of 64,000 bytes.  Do not
   attemp to import files that are larger than that.

7.5 - Doing carbon copies

Since Viper does not perform a 'carbon copy' feature per-se, you use
NameLists to perform this task.  It's easy, here's how:

1. When you are addressing the message (in the message dialog shown in
   Figure 7-1) simply press <F2> while the cursor is in the TO: field.

2. You will be shown a list of NameLists that are available, highlight
   the one you want using the arrow keys, and press <Enter>.

That's it.  Now a copy of your message will be sent to all of the people
whose names are on that list.  (See 10.0 for more information on creating
or deleting NameLists)

7.6 - Attaching files to messages

Attach file is a feature that only works with RoseMail doors thusfar.
Simply select "Attach File" on the Editor Menu (see Figure 7-2) and you will
then be prompted for the name of the file you wish to attach.

!! Important note: you cannot upload messages which have attached files with
the Mailrun command off the Main Menu.  Unfortunately, the goofy way RoseMail
did this requires you to upload your REP file manually, since you will be
prompted to upload the appropriate files for attachment at that time.

8.0 - Using folders

As an organizational tool, folders are the greatest.  They are an easy way
to categorize and store messages that you wish to keep.

All available folders will be displayed on the Conference menu, in a separate
color (configurable, but defaulted to Red).

Basically, when you create a folder, you tell Viper two things.

1. The scope of the folder.  Folders can be either Global, or BBS-Specific.
   A Global folder can be read/copied to while reading a packet from any
   BBS.  A BBS-Specific folder however, can only be read or copied to while
   a packet from the BBS it is specific to is open.

2. The name of the folder.  It is wise to give folders meaningful names.
   For example, a folder you use to store Star Trek related messages, would
   probably best be called "Star Trek".  :)

!! Note: You cannot write messages to a folder, nor can you edit messages
   in a folder, at this time (it will be possible in the future).

8.1 - Creating a folder

While on the Conference Menu, press <F>.  This will bring up the Folder
Menu (see Figure 8.1-1).

                  Folder Options͸
Figure 8.1-1       Add            
 The Folder Menu   Delete         
                   Edit           
                  ;

Simply highlight Add with the cursor keys, and press <Enter>.  At this point,
the Folder Creation dialog will appear (see Figure 8.1-2).

                   Add folder ͸
Figure 8.1-2       Name:      Star Trek              
 Folder Creation   Scope:     BBS-Specific Global    
 Dialog            BBS:       TTC                    
                  ;

Simply enter the name of the folder, then press <Enter>.  Use your
<Right>/<Left> arrow-keys to select either BBS-Specific or Global.  If you
selected Global, enter the BBS ID of the BBS you wish it to be specific to
(it will default to the BBS ID of the currently open packet).

Once you have entered the necessary data, press <Esc>.

8.2 - Deleting a folder

To delete a folder, go to the Conference Menu, and highlight the folder you
wish deleted.  Next, press <F>, and highlight the Delete option on the
Folder Menu (Figure 8.1-1).

It is wise to remember, that if the folder was not empty before you deleted
it, that the messages are still on disk.  The disk space will not be
released until you Purge your folders (See

8.3 - Editing a folder

Naturally, the only aspects of a folder you can edit, is the scope, name,
and BBS of that folder.  Go to the Conference Menu, and highlight the folder
you wish to edit, then press <F>.  Highlight the Edit option, and press
<Enter>.  The Folder edit dialog will appear (it is identical to the one
shown in Figure 8.1-1), simply edit the information you wish to change,
and press <Esc>.

!! Note:  A common mistake when trying to edit/delete folders, is that
   you haven't highlighted a folder on the Conference Menu.  :)

8.4 - Purging your folders

After you've flagged folder messages as deleted, or deleted an entire folder,
it is always best to purge the folders.

This option is available on the Main Menu, and can only be performed when no
packet is open.

Once activated, Viper will go through all your folders, and remove any
unwanted messages.  These messages are PERMANENTLY removed, so make sure
that you haven't flagged any messages you wanted to keep as "Deleted".

9.0 - HitLists

HitLists could be described as an advanced form of the somewhat primitive
`twit lists' found in other mailreaders.

Viper sports a unique feature, that we call HitLists.  These lists allow you
to have Viper automatically select or reject messages based on criteria
provided by you.

HitLists come in two flavors; global and BBS-specific.  Global HitLists apply
to all packets from all BBS's, and BBS-Specific HitLists apply only to the
BBS that they were created for.

You may add, delete or edit global HitList entries at any time, however, BBS-
specific HitList entries may only be manipulated when you have a packet from
that BBS open.

To create you Global HitList, just select HitLists|Global HitList.  If there
are no other entries in the list, a dialog box will be presented which will
prompt you for the required information.

To create a BBS-specific HitList, open a packet from the BBS you want the
list to apply to.  Then, select HitLists | BBS HitList.

           Edit Selection͸
Figure 9-1 From ........      
           To ..........      
           Subject .....      
           Fragment ....      
           Conference ..                                         
           Status ...... Select Reject                                
           ĳ
           F1 Help  Ctrl-Enter Accept  ESC Abort   Next   Previous  
           ;

Figure 9-1 shows a the HitList editing dialog box.  The following are
descriptions of each of the fields.

From - you can either put a full name in this field (eg: CHRIS LAUTENBACH) or
you can put part of a name (eg: CHRIS).  If you only enter part of a name,
all messages from anyone with that name (eg: CHRIS would have CHRIS JONES,
CHRIS SMITH, BILL CHRIS, etc) will be selected.

To - basically, the same as the From field, with the one exception that it
applies to the addressee of the message rather than the author.

Subject - Like the From and To fields, you may enter only part of a subject.
For example, putting the word GUN here, would catch any message that had the
word GUN anywhere in it's subject.

Fragment - This option is a little more advanced than the three previously
mentioned.  To put it simply, this option allows you to `pre-search' the
text of all the messages in the packet.  If you put "garbage" in this field,
then all messages with the word "garbage" anywhere in their text would
automatically be posted to the HitList conference.  Like all other searching
functions in Viper, the fragment search uses a Boyer-Moore link table to
increase speed.

Conference - you can specify `conference locality' by entering a value in
this field.  This HitList entry will only apply to messages in this
conference.  This field is fairly useless in a Global HitList entry since
conference numbers vary across BBS's, however it's great for limiting
searches on a specific BBS.  (EG: You want to search for Lotus in the Buy
and Sell conference, because you want to buy a copy.  If you searched for
it globally, you'd get messages with people talking about Lotus, not selling
it)

Status - and here comes the flexibility parade.  With this option, you can
tell Viper to either Select or Reject a message based on the pre-defined
criteria. (See 9.2 for more on how to use this field)

All messages that have been selected via a HitList, will appear on your
Conference Menu in the HitList pseudo-conference.

!! Important note:  Many people make a common mistake when entering their
HitList entries.  You MUST remember that the effect of the multiple fields
in the HitLists are cumulative.  This means that putting "ADAPTEC" in the
Fragment field, and "ADAPTEC" in the Subject field would mean that "ADAPTEC"
would have to appear in BOTH the message TEXT AND in the SUBJECT field in
order for the message to be posted to your HitLists conference.

9.1 - Practical uses for HitLists

To make the concept a little easier to understand; I'll give you a few
examples.

1. You are infatuated with a Star Trek character, and want to read
   everything posted in the Trek conferences about him/her.

   Make one entry for the subject line, where the subject contains TROI, and
   the Status field is set to Select.

   Make another entry for the message text.  Set Fragment to TROI.  You
   could also make ones for DEANNA, MARINA, SIRTIS, etc -- which would
   yield messages of every possible combination (except of course where
   the person calls her Diana :).

2. You are interested in buying a SoundBlaster for your computer, but you
   don't want to pay the full price for a new one.  So you've decided to
   monitor the BuySell conferences for one, but don't want to go through
   the drudgery of actually reading all those messages about broken washing
   machines for sale.

   Make two entries for the subject line, one containing SOUND, and the
   other containing BLASTER.

   Make two Fragment entries, one containing SOUND, and the other BLASTER.

   You might even make the two subject lines also contain a Fragment search
   as well, since that would narrow down the search to only those messages
   which contain both matching phrases in the subject and message text.

9.2 - The effect of Rejected HitList entries

If a HitList entries Status field is set to Reject, and a message is found
with criteria that matches the HitList entry, it will be NOT BE SHOWN
anywhere in the packet.  You will not see it any conference.  This makes
HitLists the most powerful twit list ever devised.  :)

!! Very important note: HitLists will NOT operate if
   Other Options|Create Index Files is not set to ON in the configuration.
   It is during the indexing phase that the HitLists are examined.

10.0 - NameLists

NameLists are pretty much what they appear to be; lists of names.  You can
use these lists in many ways.

Many people, at one time or another find it necessary to post multiple copies
of the same message.  Doing them one at a time can become extremely tedious,
but by using a NameList, you can automate most of the process.

To create a NameList, simply select NameLists from the Main Menu.  If there
are no NameLists on file, Viper will ask you if you wish to create one at
that time.  Answer yes.

You will then be prompted for a 8 character filename for the new list, enter
it.  Next, you will need to enter a description of this list to make
selecting the list at a later time easier (it's easier to pick by description
than to remember filenames).

            Edit NameList Entry͸
Figure 10-1 Name ........ ALL     
            Note ........ NANet Pascal Conference     
            Conference .. 111     
            ĳ
            F1 Help  Ctrl-Enter Accept  ESC Abort   Next   Previous  
            ;

After the description, a dialog box (shown in Figure 10-1) will be displayed
that will allow you to enter information for the first name on this list.
The fields are as follows:

Name - the name of the person this copy should be sent to.

Note - just a brief note about this entry to help you remember it later.

Conference - the conference number that this copy should be posted in.

Once you have finished entering the relevant information, and feel it is
satisfactory, press <Ctrl-Enter> to save it.  If you feel otherwise, press
<Esc> to abort the process.

The next time you use the NameLists, you will be shown a list of available
NameLists, and you may pick one by pressing <Enter>.  To add a new one at
this point, press <Ins>, and finally, to delete one, highlight with the
arrow keys and press <Del>.

10.1 - Using a NameList

The most common use for a NameList, is to maintain a mailing list of some
kind.  Simply write a message as you normally would, except when entering
the person to send it TO, press <F2>.  You will be presented with a list
of NameLists.  Simply select one and press <Enter>.

The other way, of course, if you remember the filename you gave the list,
is to just put @FILENAME as the TO: field.

One copy of the message will automatically be created for each person in
the NameList.

11.0 Communications

Viper includes a relatively complete communications package, called
ViperTerm.  Some of ViperTerms features:

- Full color backscroll, which has no practical size limit and can expand
  to fit available memory.
- A full suite of Xmodem, Ymodem, and Zmodem protocols
- Dialing directory
- The most advanced script language ever seen in a DOS-based terminal
  program
- Complete ANSI support; plus about 90% of VT-100 commands (incl. tabs)
- All ANSI keystrokes (Up, Down, Right, Left, Home, End, Del, etc)

If you've ever used another popular communications package then most commands
should be relatively intuitive, and you should have no problem making the
adjustment.

11.1 - Terminal mode

There are two ways to enter ViperTerm's terminal mode;

1. Select "Terminal" from the Communications submenu on Viper's Main Menu.

2. Type: GETMAIL /T at the DOS prompt.

Once inside, the following commands are available:

<Alt-B>  views the backscroll.  (See 11.1.1)
<Alt-C>  clears the screen.
<Alt-D>  brings up the dialing directory.  (See 11.1.2)
<Alt-H>  hangs up the modem, if connected.
<Alt-I>  writes a screen image to disk.  You will be asked for a filename.
<Alt-L>  turns on the logfile (which will log all incoming data to a file).
<Alt-M>  toggles between 25 and 43/50 line mode.  (E/VGA only)
<Alt-P>  brings up the communications parameters menu.  (See 11.1.3)
<Alt-R>  re-initializes the modem (sends the init strings again).
<Alt-=>  toggles Doorway mode.  This is useful on BBS's like PCBoard which
         support the use of all key sequences via Doorway mode.
<PgUp>   upload file(s).  (See 11.1.4)
<PgDn>   downloads file(s).  (See 11.1.5)
<Alt-J>, <Alt-F10> jumps to DOS (DOS Shell).
<Alt-F1> Sends the name specified in either the default BBS entry, or the
         last one dialed.  (A carriage return is automatically sent as well)
<Alt-F2> Sends the password specified in either the default BBS entry, or
         the last one dialed. (A carriage return is automatically sent as
         well)

11.1.1 - Backscroll

The backscroll contains all the information that has scrolled off the screen
(up to the available amount of memory).  All you have to do, is press
<Alt-B>.

Once inside the backscroll, you have the following options:

<Up>, <Down>, <PgUp>, <PgDn>, <Home>, <End> - move around the buffer.

<D> - dump the entire contents of the backscroll to a file.  You will be
prompted for the filename.

<I> - write an image of the current backscroll screen to a file, again, you
will be prompted for a filename.

<Esc> - return to Terminal Mode.

11.1.2 - Dialing directory

Dialing directory
Manual dial                                                                
#NamePhoneSpeedĳ
 1.  Toronto Twilight Communications v.32bis  1-416-663-7010       38400 
 2.  Toronto Twilight Communications v.fc     1-416-663-1103       57600 
 3.  Orchid Media                             555-2285             38400 
 4.  Just another BBS                         555-6625             38400 
 5.  ExtraHard Limited Systems                555-7351             38400 
 6.  Ten Thousand BBS                         905-555-7273         57600 
 7.  USA Local Systems                        555-6003             57600 

Figure 11.1.2-1: The Dialing directory

Once you press <Alt-D> you will be presented with a menu similar to the one
shown in Figure 11.1.2-1.

Using the cursor keys, highlight the BBS you wish to dial, and press <Enter>.
If you wish to dial multiple BBS's, use the cursor keys and tag each BBS you
wish to dial by pressing <Space>, then press <D>.

If you wish to dial a number which is not in the Dialing Directory, simply
highlight "Manual dial" with the cursor keys, and press <Enter>.  You will
be prompted for a phone number; type it in, and press <Enter>.

If you know the number of the BBS you wish to dial, you may simply enter
the number, and press <Enter>.  (The menu will track along as you enter the
numbers)

!! Note: You cannot add, edit, or delete BBS entries from the Dialing
Directory while in ViperTerm.  For the sake of keeping code size small, you
may only perform these functions from the BBS Management option on Viper's
Main Menu.

11.1.3 - Setting communications parameters

The default communications parameters are obviously set in the configuration,
however, you can change the parameters for the current session while in
terminal mode.

                Change COM Parameters͸
Figure 11.1.3-1:Port ........ COM1 COM2 COM3 COM4                          
                Baudrate .... 300 1200 2400 4800 9600 19200 38400 57600    
 Communications Parity ...... None Odd Even Mark Space                     
 Parameters     Stop bits ... 1 2                                          
 Dialog         Data bits ... 5 6 7 8                                      
                ĳ
                 F1 Help  Ctrl-Enter Accept   Move                     
                ;

Pressing <Alt-P> will display a dialog like the one shown in Figure 11.1.3-1.
Simply use the <Up>/<Down> keys to go through the options, and the
<Right>/<Left> keys to change the selection.  When you are done, press
<Ctrl-Enter> to accept the changes, or press <Esc> to abort.

11.1.4 - Uploading files

Of course, a necessary feature for any terminal, is the ability to transfer
files.  This is described in 11.1.4 and 11.1.5.

                    Upload͸
Figure 11.1.4-1:     Xmodem       
                     Xmodem CRC   
Protocol selection   Xmodem 1K    
menu                 Xmodem 1K-G  
                     Ymodem Batch 
                     Ymodem-G     
                     Zmodem       
                     ASCII        
                    ;

Pressing <PgUp> will display the protocol selection menu shown in Figure
11.1.4-1.  Simply use the cursor keys to select the protocol you wish to
use, and press <Enter>.

Once you have selected the protocol, one of two things will happen; either
you will be prompted for the name of the file to upload, OR, you will be
given the Upload Manager.  This depends on whether or not the protocol you
chose supports batch operations (the ability to upload more than one file
at a time, like Zmodem, Ymodem-G, etc).

Upload Manager͸
 Files selected:       2                                                 
 Current directory:    C:\VIPER                                          
ĳ
 Available Files                      Selected Files                     
ĳ
 ..            -dir-   6/23/94        c:\viper\viper.exe                 
 viper.exe      390k   3/27/94        c:\viper\file_id.diz               
 venom.exe      130k   2/04/94                                           
 file_id.diz      1k   5/20/94                                           
 history.txt      7k   5/20/94                                           
 viper.key        1k   7/15/94                                           
ĳ
SPACE Select ESC Abort ENTER Change directory F9 Change drives F10 Upload
;
Figure 11.1.4-2: The Upload Manager

If you have selected a batch-mode protocol such as Zmodem, you will be
presented with the Upload Manager, shown in Figure 11.1.4-2.

This system allows you to easily select files to be uploaded to the remote
system.

The directory listing will show the files that are present in your Upload
Directory.  You may highlight directories (such as the .. directory) and
press <Enter> to maneouvre about your hard disk.  If you wish to change
to another drive, press <F9>.  To select a file, highlight it with your
arrow keys, and press <Space>, it will then appear on the list on the
right hand side of the window.  When you are done picking files, simply
press <F10> to begin the transfer.

If you decide you no longer wish to do an upload, you may press <Esc> at
any time to close the Upload Manager window.

!! Important note:  Please note that protocols like Xmodem 1K-G, and
Ymodem-G are meant only for error-correcting modems.  If you do not have
an error correcting modem, or are connected one which does not perform
error correction, use a more reliable protocol such as Zmodem.

11.1.5 - Downloading files

                    Download͸
Figure 11.1.5-1:     Xmodem       
                     Xmodem CRC   
Protocol selection   Xmodem 1K    
menu                 Xmodem 1K-G  
                     Ymodem Batch 
                     Ymodem-G     
                     Zmodem       
                    ;

To download a file, all you need do is press <PgDn>, and use your cursor
keys to select the protocol you wish to use for the transfer.

If the protocol is one which does not have automatic filename transmission,
you will be prompted for the name of the file.  (Some of the Xmodem
protocols)

Most of the time, you'll be using protocols like Zmodem or Ymodem-G, in
which case all you have to do is select the protocol, and that's it!

       Download ͸
       Protocol:       Zmodem         Bytes received:         0 
       Block check:    Crc32          Bytes remaining:          
       File name:                     Blocks received:        0 
       File size:                     Blocks remaining:         
       Block size:         1024       Block errors:           0 
       Total blocks:                  Total errors:           0 
                                                                
       Est. time:      0:00           Throughput:         0 CPS 
       Elapsed time:   0:00           Efficiency:            0% 
       Remaining time: 0:00                                     
                                                                
       Progress:        
       Status:         Ok                                       
      Ĵ
       Baud:              57600       StopBits:               1 
       DataBits:              8       Parity:              None 
       Sfw Flow:            Off       Hdw Flow:              On 
      ;
      Figure 11.1.5-2: The file transfer status window

During the course of the file transfer, the file transfer window shown in
Figure 11.1.5-2 will be displayed.

This window will give you a visual indication of how far the transfer has
progressed (the Progress indicator) and show you the number of bytes
transferred, left to transfer, and total number of bytes.  In addition, any
errors encountered during transmission will also be displayed.

ViperTerm will attempt to estimate how much time is left till completion,
although due to the compressed nature of data transmission these days, it
is often difficult to get an accurate reading.  (This will be improved in
the very near future)

While this window is in place, you may abort the transfer at any time by
pressing <Esc>.  You will be prompted as to whether or not you are sure you
wish to abort the transfer.

11.2 - ViperTerm command line parameters

You can pass ViperTerm (GETMAIL.EXE) a number of command line parameters,
they are detailed below.  Please note that the parameters must be
separated by spaces on the command line or ViperTerm will not recognize
them.

All command line parameters override any related options specified in the
configuration, so be careful.

/T        -  Enter terminal mode
/NOINIT   -  Skip modem initialization (useful if you are already online)
/NOHOOK   -  Do not hook INT 10h for backscroll
/DIGI     -  Use DigiBoard mode
/FOSSIL   -  Use FOSSIL mode
/INT14    -  Use INT 14h/network communications mode
/UART     -  Use UART mode

/RUN:<filename>       - Run the specified script.  Do not include an
                        extension, since .SCR is assumed.
/BBS:<number>/<BBSID> - Specifies the BBS to use for a script.  You may
                        either pass the number of the BBS in the dialing
                        directory, or a BBSID - like TTC.
/MAILRUN              - Executes a mailrun on the currently selected BBS.

/IRQ:<number>         - Use an alternate IRQ (eg: 3, 4, 5, etc)
/IOBASE:<number>      - Use an alternate I/O base (eg: 3D8, 5F8, etc)
/COM:<number>         - Use an alternate COM: port (eg: 1, 2, 3, 4, 5.. etc)

/PEPDEBUG             - Specifies PEPPER script debugging mode

12.0 - Pepper, the script language

Naturally, since the script language is such a complex work, it is a very
long thing to describe.

For the most part; Pepper is a complete Pascal implementation, so the
shortest way for me to describe it at this point, would be for me to ask
you to read an introductory book to Pascal programming, and then describe
the minute differences between Pepper and Vanilla Pascal.

12.1 - Differences between Vanilla Pascal and Pepper

These are the rules you must live by when writing scripts for ViperTerm:

1. Pepper does not use the standard := variable assignment operator,
   instead it uses the same '=' operator for both a comparison and
   assignment operator and differentiates between the two through
   context.

   Example:

   a:=a+1;         <--- WRONG!

   a=a+1;          <--- RIGHT!

2. It is not wise to dereference function results as procedure parameters,
   since all parameters are treated as VAR parameters.

   Example:

   function add(a,b:word):word;
   begin
     add=a+b;
   end;

   procedure do_me(a:word);
   begin
     writeln('I am nice:',a);
   end;

   begin
     do_me(add(5,5));               <---  BZZT!  WRONG!
   end.

   The main begin..end sequence should look like this:

   var c:word;

   begin
     c=add(5,5);
     do_me(c);                      <--- Much better!
   end;

3. Pepper does not support comments (eg: { this comment } or (* this *)) so
   do not use them.  You _will_ get errors while running your script.

4. Pepper only allows ONE statement per line, like so:

   writeln('hello, how are you?'); writeln('i am nice');  <-- WRONG!

   writeln('hello, how are you?');                        <-- RIGHT!
   writeln('i am nice');

5. Pepper does not support block-mode file I/O, only text-mode.

6. You can not reference string elements as characters, instead you must
   use the Copy() function to extract a character:

   var b : string;
       a : char;

   begin
     b='hello, dolly';
     a=b[5];              <-- WRONG!
     a=copy(b,5,1);       <-- RIGHT!
   end.

7. You cannot specify string widths/decimal places with colons; eg:

   writeln(real:2:5);

   Neither colon is valid.

8. You cannot use arrays.

9. Follow the rules!  In many cases, PEPPER may _not_ stop you from doing
   these things, and instead may crash, do unpredictable things, etc.

That's about it for the differences.  :)

12.2 - Supported variable types

Pepper supports the following variable types:

string - a string of characters.  Note however that you cannot reference
         individual characters like an array, and you cannot specify the
         length (eg: string[80] does not work) all strings are 255 characters
         by default (256 bytes)
longint - a standard 32-bit long integer (4 bytes)
boolean - a boolean value which can be either TRUE or FALSE (one byte)
byte - a single byte
word - a word (two bytes)
char - a character (one byte)
text - a text file handle (256 bytes)

Please note that the following will NOT be reported as errors, but cannot
be used with anything:

file - a block-mode file handle (256 bytes)
pointer - a 32-bit pointer (4 bytes)
array - a 32-bit pointer to an array segment (4 bytes)

You can NOT use "integer" as a type.  Instead, use "word" which has a
range of 0-65535.  If you need negative values, use a "longint" instead.

12.3 - Internal variable reference

Pepper has many internal variables to make your script writing easier.  They
are described below.

12.3.1 - Information variables

PgmName : string;                                 { The name of the program }
Version : string;                     { The revision of the script language }
VerWord : word;               { The numeric revision of the script language }
Password : string;                         { The password of the loaded BBS }
UserID : string;                              { Your name on the loaded BBS }
Logfilename : string;                        { The name of the capture file }
QWKPath : string;                              { The path to the .QWK files }
REPPath : string;                              { The path to the .REP files }
DLPath : string;                             { The path to downloaded files }
ULPath : string;                  { The path where files to be uploaded are }
PgmPath : string;                    { The path the program is running from }
XferSuccess : boolean;               { The result of the last file transfer }
BBSNumber : word;     { The number of the BBS specified on the command line }
LastError : word;               { A number containing the last script error }
TokenFound : byte;     { WaitFor returns the token number found in this var }
Quiet : boolean;  { The toggle for quiet mode, if TRUE, no chars are echoed }
Watches : boolean;         { If TRUE, WatchFor()'s are valid, otherwise not }
AutoANSI : boolean;{ If FALSE, ViperTerm will not acknowledge ANSI requests }
CDCheck : boolean;        { If TRUE, and carrier is lost, script will abort }

12.3.2 - Status Variables

These variables control what is displayed in the "Selected BBS"/transfer
status window on Viper's main screen.

Connect : boolean;    { If TRUE, the Viper main screen will say "connected" }
RepFound : boolean;                          { If TRUE, a REP was available }
RepXfer : byte;    { The number of upload attempts required to send the REP }
QWKFound : boolean;                          { If TRUE, a QWK was available }
QWKXfer : byte;   { The number of download attempts required to get the QWK }

12.4 - Internal function/procedure reference

----------------------------------------------------------------------------
Procedure Writeln([f : text], var);

Writes a variable to either the screen or a textfile.  The file must be
open.  Multiple variables may be written.

----------------------------------------------------------------------------
Procedure Readln([f : text], var);

Reads a string (only) from a file, up to the first CR (CHR(13)).  The
file must be open.

----------------------------------------------------------------------------
Procedure Assign(f : text; name : string);

Assign a textfile variable to a filename.

----------------------------------------------------------------------------
Procedure Rewrite(f : text);

Rewrites a file.  The file variable must be assigned.  If the file exists,
it is overwritten, if it does not, a new file is created.

----------------------------------------------------------------------------
Procedure Append(f : text);

Appends to a file.  The file must be assigned, and it must exist.

----------------------------------------------------------------------------
Procedure Reset(f : text);

Resets a file.  The file must be assigned, and it must exist.  Sets the
position pointer to the beginning of the file if it is already open.

----------------------------------------------------------------------------
Procedure Close(f : text);

Closes a file.  The file must be assigned, and it must exist.

----------------------------------------------------------------------------
Procedure GotoXY(X, Y : byte);

Positions the cursor at X, Y.

----------------------------------------------------------------------------
Procedure Clrscr;

Clears the screen.

----------------------------------------------------------------------------
Procedure Window(X1, Y1, X2, Y2 : byte);

Sets the current viewing window on the screen.

----------------------------------------------------------------------------
Procedure TextColor(Color : byte);

Sets the foreground color.

----------------------------------------------------------------------------
Procedure TextBackGround(Color : byte);

Sets the background color.

----------------------------------------------------------------------------
Function Length(st : string) : byte;

Returns the length (number of characters) in the string specified.

----------------------------------------------------------------------------
Function EOF(f : text) : boolean;

If the current position of the file is at the end, EOF returns TRUE.  The
file must be assigned and open.

----------------------------------------------------------------------------
Procedure Send(var v);

Sends the variable out the currently selected serial port.  Any type
variable other than text is supported.  (Non-string variables will be
converted to strings first)

----------------------------------------------------------------------------
Procedure Waitfor(st : string [; timeout : longint]);

Waits for ST to be in the buffer.  Timeout is the period of time to wait,
in clock tics (approximately 1/18th of a second).  If you do not wish a
timeout period, simply omit this variable.

If you wish to wait for more than possible string, simply use the |
delimiter.  EG:

Waitfor('<DLASK>|<NO TRANSFER>');

Would wait for either <DLASK> *OR* <NO TRANSFER>.  The number of the
token found is returned in the TOKENFND variable.

----------------------------------------------------------------------------
Procedure EmptyBuffer;

Empties the buffer containing received characters.  It is wise to clear
this buffer in loops that use WaitFor -- since what you are looking for
has already been found.

----------------------------------------------------------------------------
Procedure DialBBS( st : string | num : longint);

Dials a BBS.  You may specify either a string value (for manual dial), or
a number (longint/word/byte) to specify an entry in the dialing directory.

----------------------------------------------------------------------------
Procedure AddWatch(Token, Response : string);

A "watchfor" is a string that is constantly checked for during a Waitfor()
or a TermLoop.  When it is seen, the 'response' is sent.  This is perfect
for prompts that *may* appear, eg. 'More (Y/N)?' type prompts that follow
a news bulletin.

Note: The 'watchfors' are controlled by the boolean variable WATCHES.  If
      WATCHES is set to FALSE, then Viper will NOT watch for anything.  The
      default is TRUE, however.  (There may be certain places where you
      would want to temporarily disable the WATCHFOR's)

----------------------------------------------------------------------------
Procedure Terminal;

Go into interactive terminal mode.  Once the user presses Alt-X in terminal
mode, control is released to the script.

----------------------------------------------------------------------------
Function ExistFile(filename : string) : boolean;

If the file specified in 'filename' exists, ExistFile returns TRUE.

----------------------------------------------------------------------------
Procedure Upload(Protocol : char; Filename : string);

Sends 'filename' using the protocol specified in 'protocol'.  Valid
protocols are:  Z)modem, 8)K-Zmodem, Y)modem Batch, Ymodem-(G), X)modem,
Xmodem-(C)RC, K)ermit, and A)SCII.

----------------------------------------------------------------------------
Procedure Download(Protocol : char; Filename : string);

Receives file(s) using the protocol specified in 'protocol'.  'Filename'
is only used on non-batch (Xmodem) file transfers. Valid protocols are:
Z)modem, 8)K-Zmodem, Y)modem Batch, Ymodem-(G), X)modem, Xmodem-(C)RC, and
K)ermit.

----------------------------------------------------------------------------
Function OnCurLine(st : string) : boolean;

Returns TRUE if 'st' is on the current line being received.

----------------------------------------------------------------------------
Function InBuffer(st : string) : boolean;

Returns TRUE if 'st' is in the last 1024 characters received.

----------------------------------------------------------------------------
Procedure Erase(filename : string);

Erases the file 'filename'.  Note, the file must *not* be open.

----------------------------------------------------------------------------
Procedure SeqRename(filename : string);

Renames the file 'filename' sequentially numbered.  (eg. TEST.ZIP would
become TEST.ZI1.  Doing the same thing again would make TEST.ZI1 become
TEST.ZI2, and TEST.ZIP would become TEST.ZI1.)  This is primarily for
saving mail packets.

----------------------------------------------------------------------------
Procedure Rename(filename, newname : string);

Renames the file 'filename' to 'newname'.  Note, the file must *not* be
open.

----------------------------------------------------------------------------
Procedure Exec(filename, parameters : string);

Runs the program 'filename' with 'parameters'.
Eg: Exec('COMMAND.COM','/C DIR/W'); ..  would cause the command interpreter
to be loaded, perform a DIR/W and exit.  The terminal screen is saved before
the program is run, and restored afterwards.  Code is swapped to EMS, XMS,
or disk to maximize shell memory.

----------------------------------------------------------------------------
Procedure TermLoop;

Simply put; it reads any new characters from the com port, and displays
them.  Note: if you use a loop with InBuffer() or OnCurLine() to check
for multiple incoming items, you must use TermLoop inside that loop to
make sure the screen is updated and incoming characters are being
processed.

----------------------------------------------------------------------------
Procedure Message(st : string);

Displays a message with a little '' in front of it.

----------------------------------------------------------------------------
Procedure MessageBox(st, title : string);

Displays a message in a pop-up window for MsgDelay milliseconds, with
a title.

----------------------------------------------------------------------------
Procedure Halt;

Stops script execution and releases control.

----------------------------------------------------------------------------
Procedure Hangup;

Hangs up the modem by fluctuating the DTR line.

----------------------------------------------------------------------------
Procedure Inc(var v; amount : longint);

Increments the ordinal value of v by 'amount'.  (eg. must be
longint/word/byte)  If amount is not specified, 1 is assumed.  Important
note: Use Inc() in progressive loops rather than a=a+1, since it requires
less parsing and is therefore faster.

----------------------------------------------------------------------------
Procedure Dec(var v; amount : longint);

Decrements the ordinal value of v by 'amount'.  (eg. must be
longint/word/byte)  If amount is not specified, 1 is assumed.  Important
note: Use Dec() in progressive loops rather than a=a-1, since it requires
less parsing and is therefore faster.

----------------------------------------------------------------------------
Function Copy(st : string; index, count : byte) : string;

Copy returns a string containing 'count' characters starting with the
Index'th character in 'st'.

----------------------------------------------------------------------------
Function Pos(subst, st : string) : byte;

Searches for substring 'subst' in 'st', and returns the position of 'subst'.
If not found, Pos returns 0.

----------------------------------------------------------------------------
Procedure Capture(onoff : boolean);

Turns the capture (log) file on or off, based on the value of 'onoff'.
Note, trying to turn it on when it is already on will cause an error.

----------------------------------------------------------------------------
Function KeyPressed : boolean;

Returns TRUE if a key has been pressed and the value is waiting in the
keyboard buffer.  (Great for "Press any key..." routines)

----------------------------------------------------------------------------
Function ReadKey : char;

Returns the next character in the keyboard buffer, or #0 if none available.

----------------------------------------------------------------------------
Function ShowANSIFile(FileName : string);

Displays a text file with ANSI support.

----------------------------------------------------------------------------
Function DateStr(DateMask : string) : string;

Returns the date, using DateMask.  EG:

DateStr('MM-DD-YY');

Would return 06-12-96 if it were June 12th, 1996.

Note, the functions Tomorrow() and Yesterday() return their respective
dates, and operate on parameters identical to those that DateStr() uses.

----------------------------------------------------------------------------
Function TimeStr(TimeMask : string) : string;

Returns the time, using TimeMask.  EG:

TimeStr('hh:mm:ss');

Would return 14:20:05 if it were 2:20:05pm.

Note; you can add "t" to the datemask to includ the "p"/"a" part of
am/pm or "te" to actually include "am" or "pm" depending on the time.

----------------------------------------------------------------------------
Procedure PCBWrite(ToWrite : string);

Writes the string ToWrite to the screen, automatically interpreting
embedded PCBoard @X?? color codes.  Format for these codes are as follows:

@XBF           - Where B is the background color in hex, and F is the
                 foreground color in hex.

----------------------------------------------------------------------------

13. External programs

Many of you may wish to use certain external programs with Viper, such as
external text editors, terminals, tagline pickers, quote managers, viewers,
etc.

13.1 - Tagline Managers

In order for a tagline manager to be compatable with Viper, it must be able
to output the tagline to file in the Viper subdirectory, and the file must
be named either JH0.REP, or TLX.TAG.

All that is required for this to be setup, is for you to change your
Tagline Options|Tagline Hook to reflect the proper calling convention for
your tagline manager.  Here are two examples, one for Tagline eXpress, and
the other for Cherry Picker (both are popular tagline managers):

Tagline eXpress: \TLX\TLX.EXE G \TLX @MSGFILE@
Cherry Picker:   \CP\CP.EXE \CP\TAGARRAY.VAR

Note the differences; Tagline eXpress has a @MSGFILE@ embedded in it.  This
tells Viper to output the message being tagged to disk, and to replace the
@MSGFILE@ token with the filename of the message.  This allows Tagline
eXpress to suggest taglines based on your message text.

13.2 - Quote enhancers

Viper supports quote enhancers that work in a similar way to
Tagline eXpress's quote enhancement facilities.

Basically, Viper will output the message to a file and let the quote
enhancer play with it, then load it back in for editing.

Here's how you'd implement Tagline eXpress, simply set Quoting
Options|Quote Hook to:

\TLX\TLX.EXE Q \TLX\ @MSGFILE@

This is of course presuming the directory you have Tagline eXpress installed
in is \TLX.

13.3 - RIP Viewers

Viper will support any RIP viewer that can accept the name of the RIP file
to view as the first command line parameter.  All you have to do is put the
name of the viewer's EXE file into Paths|RIP Viewer.

I've tested Viper with FreeView (obviously, since it's included), and
DeadView.

13.4 - Terminals

You can use external terminal programs such as deltaComm Development's Telix
with Viper quite easily.  Just change Paths|Terminal Porgram to reflect the
name of the terminal program you wish to use.

13.5 - Text editors and viewers

Simply change Paths|Text Editor or Paths|Text Viewer from INTERNAL to
something like this (naturally, replace the path shown below with the
correct path for your system):

C:\UTIL\QE.EXE to use SemWare's QEdit as your external editor.
C:\UTIL\LIST.COM to use V.Buergs LIST.COM as your external viewer.


14. Troubleshooting

Here in the troubleshooting department, I'll try to answer a few common
questions with some simple answers.  :)

---

Q: I keep getting an "Invalid Packet" error when I try to open a packet,
   what am I doing wrong?

A: There may be insufficient memory available to run the appropriate
   decompression program to open the packet.  Try turning Internal ZIP, and
   Internal LZH ON.  It is also possible that Viper could not find your
   compression programs.

---

Q: When I try to open a packet, Viper says "PKZIP: Insufficient memory", and
   I'm running OS/2, what's wrong?

A: If you are running OS/2, then you should make sure that
   Compression|No I/O redirection is turned ON.  Redirection is apparently
   incompatable with the OS/2 DOS box.

---

Q: I want to forward a message from one BBS to someone on another BBS, how
   can I do that?

A: It's a three step process:

   Step 1 - Copy the message you wish to foward to a folder.
   Step 2 - Close the current packet, and open one from the BBS you
            wish to forward the message to.
   Step 3 - Open the folder, find the message, and forward it.

---

Q: None of my HitList entries are working, and I'm positive I've entered
   them correctly, why?

A: Make sure that you have Other Options|Create Index files turned ON.
   HitLists cannot operate unless the indices are being created when you
   open a packet.

---

Q: There are a few options I forget how to use, and it would be great if
   I could edit the online help.  Can I do that?

A: Yes, just edit the file VIPER.HLP with your favorite text editor.
   However, be careful the lines are no longer than the ones currently
   in the file, and do not remove any of the @@@ lines.

---

Q: The automated mail transfers are screwing up royally.  What can I do to
   fix them?

A: Make sure that on your PCBoard BBS account you have EXPERT MODE turned on,
   you can activate it by type X and <Enter> at the PCBoard prompt.  It
   should say "Expert mode is now ON.".  In addition, it would be helpful
   if you made sure your RoseMail/Qmail4 setup is correct; see 2.5.
   below:

   If you are using Qmail4 - make sure the door is configured like this:

 1. D/L your replies.......... OFF   *11. Use extended prompts........... ON
 2. D/L packets without msgs.. OFF    12. Delay prompts one second....... OFF
 3. Logoff after U/L replies.. OFF   *13. Clear keyboard buffer.......... OFF
 4. Send the WELCOME screen... ON    *14. Enable "QwikStart"............. ON
 5. Send the system NEWS...... ON     15. Repeat scanning................ OFF
 6. Scan for new BULLETINS.... ON     16. Replace @variables............. ON
 7. Scan for new FILES........ ON     17. Selected confs in CONTROL.DAT.. OFF
 8. Send the GOODBYE screen... OFF    18. Capture reply insertion........ OFF
 9. Send the DeLuxe menu...... OFF    19. Do not create .NDX files....... OFF
10. Send SESSION.TXT.......... ON     20. BBS time stamp on replies...... OFF

  ... if you use RoseMail:

 1.*Use IN/OUT or QWK/REP......... QWK 12. Download your replies......... NO
 2. Download empty packets........ NO  13. Use current date/time......... NO
 3. Flush the input buffer........ NO  14. Include the NEWS file......... YES
 4. Include the Welcome screen.... YES 15.*Delay scripting prompts....... YES
 5. Include Bulletins............. YES 16. Repeat downloading............ NO
 6. Include Upload Files Listing.. YES 17. Small CONTROL.DAT file........ NO
 7. Include Download Files Listing NO  18. Empty packets on mail only.... NO
 8. Include a copy of the session. NO  19. Send User information......... NO
 9.*Use script prompts............ YES 20. Do not send NDX files......... NO
10. Use fast start sequence....... YES 21. Repeat download after Prescan. NO
11. Prescan during event.......... NO  22. Repeat scans continue......... NO

  The fields marked with a * are NECCESSARY for the included scripts to
  operate correctly.  All others are merely personal preference.

  Also, make sure in either Qmail4 or RoseMail that EXPERT MODE is turned ON,
  as the the menus may confuse the script.

---

Q: The COM: port my modem is on has a non-standard IRQ and base address, how
   can I use it with Viper?  (Exampe: COM3:, IRQ 7, base address 7F8)

A: Set Other Options|Default mailrun parameters to include the following:

   /MAILRUN /IRQ:7 /IOBASE:7F8 /COM:3

   Set Paths|Terminal to:

   /T /IRQ:7 /IOBASE:7F8 /COM:3

   That should do the trick.

---

15.0 Appendices

15.1 - Rosemail/Qmail4 door settings

 Qmail4:

 1. D/L your replies.......... OFF   *11. Use extended prompts........... ON
 2. D/L packets without msgs.. OFF    12. Delay prompts one second....... OFF
 3. Logoff after U/L replies.. OFF   *13. Clear keyboard buffer.......... OFF
 4. Send the WELCOME screen... ON    *14. Enable "QwikStart"............. ON
 5. Send the system NEWS...... ON     15. Repeat scanning................ OFF
 6. Scan for new BULLETINS.... ON     16. Replace @variables............. ON
 7. Scan for new FILES........ ON     17. Selected confs in CONTROL.DAT.. OFF
 8. Send the GOODBYE screen... OFF    18. Capture reply insertion........ OFF
 9. Send the DeLuxe menu...... OFF    19. Do not create .NDX files....... OFF
10. Send SESSION.TXT.......... ON     20. BBS time stamp on replies...... OFF

 RoseMail:

 1.*Use IN/OUT or QWK/REP......... QWK 12. Download your replies......... NO
 2. Download empty packets........ NO  13. Use current date/time......... NO
 3. Flush the input buffer........ NO  14. Include the NEWS file......... YES
 4. Include the Welcome screen.... YES 15.*Delay scripting prompts....... YES
 5. Include Bulletins............. YES 16. Repeat downloading............ NO
 6. Include Upload Files Listing.. YES 17. Small CONTROL.DAT file........ NO
 7. Include Download Files Listing NO  18. Empty packets on mail only.... NO
 8. Include a copy of the session. NO  19. Send User information......... NO
 9.*Use script prompts............ YES 20. Do not send NDX files......... NO
10. Use fast start sequence....... YES 21. Repeat download after Prescan. NO
11. Prescan during event.......... NO  22. Repeat scans continue......... NO

The fields marked with a * are NECCESSARY for the included scripts to
operate correctly.  All others are merely personal preference.

Also, make sure in either Qmail4 or RoseMail that EXPERT MODE is turned ON,
as the the menus may confuse the script.


16.0 Registration and program information

If you are interested in a mailreader that has database functionality, I
feel I should let you know that v3.0 (due November '94) will have this
feature supported in a way that is more flexible than anything else on the
market.

SysOps
------
A version of Viper for PCBoard v15.x SysOp's is already in beta-testing.  It
should be ready in a month or so.  Later on; when some of the new technology
we're developing is ready, we'll be able to support most BBS message base
types directly, and you'll be able to use Viper directly on any BBS's
message base.

Real mode issues
----------------
There is a real mode (Viper/LITE) version available as VLITE200.ZIP.  This
archive includes ONLY the VIPER.EXE program file.  Simply install Viper, and
unzip this archive over the protected mode version you've already installed.
This allows those users with older machines and odd memory configurations to
run Viper at least in a minimum capacity.  (This version costs the same as
the full Viper package, but registered users are able to switch to the
full-blown version of Viper at no cost, by just moving their KEY file to a
shareware version of Viper)

Windows
-------
Windows?  Did I hear Windows?  :)  I am fully committed to developing a
Microsoft Windows version of Viper, and as soon as Windows 4.0 (Chicago) is
released, I will begin work on a Windows version.  At this point in time,
developing for normal 16-bit Windows is pointless, since I'd only have to
migrate it to Chicago later anyway.  (And besides; Windows 3.x performance
is so lacking compared to DOS it's pointless!)

OS/2
----
OS/2?  :)  As soon as Borland releases a OS/2 compliant version of Borland
Pascal (which I hope will be soon) I will compile a version specifically for
OS/2 with full multi-threading etc.

If you register 2.0 before December 1st, 1994, you'll be entitled to a free
registered version of either the Windows or OS/2 versions, whichever you
want.

16.1 - Contacting the author

I can be contacted thru the following mail networks:

ILink:      MAILREADERS/OFFLINE/SHAREWARE/SHAREISSUES conferences.
NANet:      SYSOPS/SHAREWARE/PASCAL conferences.
Echonet:    SYSOPS/PASCAL conferences.
RelayNet:   OFFLINE MAIL/PASCAL/COMMON conference. (Or route to ->TTC #5598)

Internet:   viper@ttcbbs.com

BBS:        Toronto Twilight Communications (PCBoard v15.1/10)
            +1 416 663 1103 (Microcom 28.8 Deskporte ES)         [3 nodes]
            +1 416 663 7010 (USR Dual Standard v.32bis/v.42bis)  [3 nodes]

FTP:        Latest versions will always first be posted on:

            ftp.can.net   archives/msdos/viper

Snail mail: Chris Lautenbach
            17 Annapearl Crt,
            Willowdale, Ontario
            CANADA   M2N 4H6

16.2 - Developer information

All Viper data structures are available upon request.

In addition, I have an active interest in supporting third party support
for Viper.  If you have a program that you think would integrate will into
Viper, let me know, and I will be glad to provide any assistance you need
in implementing it (including any code changes that might be needed on my
part).

In the future, I will be working on making Viper support third party
applications (TPA's) that are in DLL (Dynamic Link Library) form.  The
advantage to this is a closer contact between Viper and any TPA written
for it, since the TPA would be loaded at runtime, thereby being in memory
at all times for fast execution.  (In addition, these TPA's could be
written with any language that supports compilation of 16-bit DOS DLL's)

See 16.1 for more information on how to contact me, I'm here to help!

16.3 - Greetings and salutations

I'd like to thank everyone that actively participated in the beta-testing
and development process; specifically the more vociferous ones:

Cheryl Applebaum, Peter Baliunas, Andrew Makiejewski, Dereck Gomes,
Colin Wright, Pearce Daley, Tony Lautenbach, Geoffrey Sy, Richard Jones,
Greg Warren, and anyone else I've forgotten!

16.4 - Registration information

Since Viper is shareware, you are entitled to a 45 day evaluation period.

Registration is only $19.95US for they key file -- all you need do is call
our BBS, and download it when it's ready.  (The key file is small, usually
under 100 bytes!)

For $29.95US, you get a disk containing the latest version, registered to
you, and a typeset, bound manual.

In addition, you can register Viper on our BBS with VISA, by logging in as
a new user, and then going thru the VISA process as you are asked, or by
typing VISA at the Main Board prompt.  Simply call, enter your information,
and call back 24 hours later, and your keyfile will be available for
downloading.

See REGISTER.FRM for a complete registration form for mailing, we accept
cheques and money orders in US currency, and we also accept VISA by mail,
if you'd rather not spend the money on long distance calling our BBS, and
we'll mail you back your key.

We hope to have foreign registration sites soon.  If you know of any good
ones, please let us know -- we're looking.

Thank you for evaluating Viper, we hope it suits your needs,

Chris Lautenbach,
President,
Key Research and Development.

