












     VB_APPS  (tm)
     -------------------------------------------------------------------

     version 1.0 for MS-Windows





     


     Instruction Manual











 
     RESOLUTIONS NOW
     P.O. BOX 443
     BLUE ISLAND, 1L. 60406-0443










     copyright, 1993  Philip Rodgers, Jr. All rights reserved.
	
     IMPORTANT  	Read this license agreement carefully before
		        using this software.   Use of this software
		        binds  you  to  the  terms  of  this  license
		        agreement.   Do not use this software if you
		        do not agree to the terms of this agreement.

     LICENSE AGREEMENT - SINGLE USER

     The VB_APPS (tm) software is not "Public Domain" or
     "Freeware". VB_APPS is "Shareware".   This is a single user
     license.  Registering VB_APPS for use on more than one
     computer will require a Multiple User or Site License.

     1. COPYRIGHT.  VB_APPS is copyrighted 1993 and the copyright
     owner is Philip Rodgers, Jr. d.b.a. Resolutions Now ("Licensor"),
     located at P.O. Box 443, Blue Island, IL. 60406-0443.  All VB_APPS
     source code files and documentation ("the software") are protected
     by United States copyright laws and international treaty provisions.

     2. TRADEMARKS.  "VB_APPS", all VB_APPS executable file icons,
     and "Resolutions Now" are trademarks of Philip Rodgers, Jr.

     3. GRANT OF LICENSE.   Non-registered users of this software
     are granted a limited license to transfer one copy of the
     non-registered (i.e. unregistered) software to a single hard
     drive on a single computer and produce one copy of all
     documentation for evaluation on a private non- commercial
     basis, for the express purpose of determining whether the
     software is suitable to their needs.  The evaluation period
     is not to exceed 30 days.   At the end of the evaluation
     period, you are required to either register your copy by
     sending the payment as stated in the documentation
     or discontinue using the software and discard it.

     Registered users ("Licensee") are granted a non-exclusive
     license to transfer one copy of the registered software to a 
     single hard drive on a single computer and produce one 
     printed copy of all documentation.  Registered users may 
     also make one copy of the software for backup or archival 
     purposes. The software may not be used on a computer 
     that is part of any network.  Licensee shall pay Licensor
     a license fee as stated in the documentation after which 
     Licensee shall become a registered user with a fully paid 
     license. Any other uses require a Multiple User or
     Site License.

     Registered users have the right to distribute portions of source
     code for VB_APPS, provided that: (a) the source code is part of
     your software product and functions only in conjunction therewith;
     (b) you do not use Philip Rodgers, Jr's or Resolutions
     Now's name, logo or trademarks to market your software product;

     (c) you include a notice of Philip Rodgers Jr.'s copyright of
     VB_APPS in your software and product documentation; and (d) you
     agree that Philip Rodgers, Jr. is not liable for the use or
     distribution of your software product.

     You may reproduce and distribute copies of the non-registered
     VB_APPS software, subject to the limitations stated herein, and
     on the express condition that you do not receive any commercial
     benefit or other compensation.  The recipient(s) to whom you
     distribute this software must agree to the terms of this
     Agreement, including the payment of the stated Licensee fees
     to Licensor upon becoming registered users.

     Distributors of user-supported software libraries (i.e. operators
     of electronic bulletin boards, shareware vendors) that charge a
     disk fee must obtain written permission of Philip Rodgers, Jr. to
     distribute non-registered copies of VB_APPS.

     4. RESTRICTIONS.   Except as provided herein, you may not rent,
     lease, sub-license or otherwise redistribute VB_APPS. You may
     not reverse engineer, decompile or disassemble the software.

     U.S. Government Restricted Rights:  Use, duplication or
     disclosure by the U.S. Government is subject to restrictions as
     set forth in subparagraph (c) (1) (ii) of the Rights in Technical
     Data and Computer Software clause at DFARS 252.227-7013 or
     subparagraphs (c) (1) and (2) of the Commercial Computer
     Software - Restricted Rights at 48 CFR 52.227-19, as applicable.
     Contractor/Manufacturer is Resolutions Now, P.O. Box 443,
     Blue Island, IL. 60406-0443.

     5. WARRANTY DISCLAIMER. THE VB_APPS SOFTWARE IS LICENSED
     "AS IS" WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING
     ANY IMPLIED WARRANTY OF MERCHANTABILITY OR IMPLIED WARRANTY OF
     FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE LICENSOR
     BE LIABLE FOR DAMAGES, INCLUDING ANY LOST PROFITS OR INCIDENTAL
     AND CONSEQUENTIAL DAMAGES, EVEN IF THE LICENSOR HAS BEEN ADVISED
     OF SUCH DAMAGES.

     Information in this document is subject to change without
     notice and does not represent a commitment on the part of
     Philip Rodgers, Jr.   No part of the PRINTED instruction
     manual may be reproduced or transmitted in any form or by
     any means, without the express written permission of Philip
     Rodgers, Jr.   In other words, the on-disk manual may not be
     reproduced or distributed in PRINTED (hard copy) form.

     Microsoft and MS-DOS are registered trademarks of the
     Microsoft Corporation and MS-Windows (i.e. Windows) are
     trademarks of the Microsoft Corporation.  IBM  and  PC-DOS
     are registered trademarks of International Business Machines.
     DOS refers to both MS-DOS  and PC-DOS operating systems.
     PC Merlin is copyright, 1990 Digital Crypto & Peter Moreton.

     Portions of VB_APPS were produced with Visual Basic,
     copyright 1991, Microsoft Corporation.   VB_APPS.HLP
     was produced with Visual Basic Help Compiler, copyright
     1991, Microsoft Corporation.




     ''''''''''   N O T E
     '
     ' To register an UNREGISTERED copy of Raffle Do, get a printout
     ' of this manual. Read registration information on page 58. Fill
     ' out and mail the payment form on page 59.
     '
     ' Or, choose Registration from the Help menu of any VB_APPS
     ' program. VB_APPS.HLP will display registration information.
     ' Follow instructions listed on the form.




     Address all inquires to:
	
     Resolutions Now
     Customer Support Dept.
     P.O. Box 443
     Blue Island, IL. 60406-0443







     Document Number: 1100202

     Table of Contents
     =================

				Section One

     Overview......................................................6

				Section Two

     SetUp.........................................................8

				Section Three

     - Add-On Modules -

     VHScroll.....................................................13
     EnGarde......................................................15
     NowTimer.....................................................17

     - Applications -

     Asckey.......................................................21
     GetFont......................................................23
     OpenUp.......................................................26
     VBWorkbench..................................................29
     Cryptokey....................................................38

				Section Four

     - Visual Basic Functions -

     Visual Basic Programming Solutions...........................45

				Section Five

     Other Resolutions Now software
        Raffle Do.................................................56
        Installz..................................................57

     REGISTRATION INFORMATION.....................................58

     PAYMENT FORM.................................................59

				- Page 6 -

     SECTION ONE
     ===========

     OVERVIEW
     --------

     VB_APPS is a library of applications and add-on modules for Visual
     Basic for Windows programmers. VB_APPS applications provide helpful
     development tools right out of the box.

     The unregistered copy of VB_APPS has all code compiled into
     executable programs. Registered users receive all code.

     VB_APPS is divided into two categories:

     A.  Add-on modules and applications (executable files):

       1. VHScroll - scroll bar code for enhanced object movement
       2. EnGarde - simple password add-on with user-changeable
	  	    passwords
       3. NowTimer - sample module with multiple real-time timers
		     that operate simultaneously
       4. Asckey - program to retrieve ASCII value of keyboard keys
		   and vise versa
       5. Getfont - program to get screen and printer font names
       6. OpenUp - program to quickly open one or more program(s)
		   simultaneously
       7. VBWorkbench - log program
       8. Cryptokey - Windows interface program for PC Merlin, a
		      DOS encryption program

     B.  VB_APPS also includes functions (methods and tips on operating
         Visual Basic more effectively).  Functions includes:

       1.  How to correctly remove system menu commands
       2.  Increasing speed of your applications on start up by
           considering statements which effect other procedures
       3.  DLL to abort printing to your dot matrix printer
       4.  Saving files under the DOS format
       5.  How to handle vbrun100.dll when distributing your applications
       6.  Setting text boxes to limit user input
       7.  Handling long directory path names in dialog box label
           captions

     The first category is a progression of add-on modules and simple one
     form Apps to more advanced, multiple form Apps that use code from
     most add-on modules. This method lets users learn in a step by step,
     progressive manner. Useful tips, some of which are used in the Apps,
     follow and provide solutions to some not so common problems.

				- Page 7 -

     Help Facility
     -------------

     An on-line Windows help file with registration information is
     available for VB_APPS. Choose Help + Registration to instantly
     retrieve information regarding registration.

     A standard help file is not included since users may alter most
     applications and add-on modules.  Discussion of all VB_APPS
     software in this instruction manual provide sufficient knowledge.

     Shortcut and Quick Access Keys
     ------------------------------

     Shortcut Keys

     Some menu commands have short cut keys. Browse through all menus
     to locate them.

     Quick Access Keys

     Some menu commands have Quick Access Keys. Browse through all
     menus to locate them. All add-on modules and applications do have
     two common Quick Access Keys:

     F1:	open vb_apps.hlp to get registration information
     F12:       end operation a VB_APPS add-on module or application


     Printers Supported
     ------------------

     VB_APPS supports ALL printers that support MS-Windows 3.0 and
     higher.  There are two applications that print documents: 
     VB Workbench and GetFont.  These applications are designed
     to use with dot matrix printers.  You can alter print code
     to produce full size documents on other printers.


     Tables
     ======

     Tables with Controls and CtlName properties (property tables),
     Procedures and Descriptions (procedure tables), as seen in
     the Visual Basic programmer's guide, are included for relevant
     programs.   Some VB users may prefer using these tables rather
     than browsing through all comments in the code.

     Additional tables state all forms and modules.

				- Page 8 -

     SECTION TWO
     ============

     SETUP
     -----

     Before installing VB_APPS, ensure that your computer and
     operating system meet minimum hardware and system requirements.

     Hardware and System Requirements
     --------------------------------

     - IBM or compatible PC with a 80386 processor or higher
     - A hard disk with 480 KB of available space for the
       unregistered copy; (470 KB for the registered copy)
     - 2MB of RAM
     - A mouse (optional)
     - An EGA or higher resolution monitor
     - MS-DOS or PC-DOS 3.1 or higher  (or an equivalent DOS that
       supports Windows)
     - MS-Windows 3.0 or higher, operating in standard or enhanced
       mode
     - Visual Basic 1.0+ for MS-Windows, including vbrun100.dll
     - Getfont and VBW use a dot matrix printer compatible with
       MS-Windows 3.0 or higher
     - Cryptokey requires PC-Merlin 2.0+

     NOTE that VB_APPS was tested on the minimum MS-Windows 3.x system
     requirements to ensure compatibility for all VB_APPS users. A 386SX
     16MHz PC with 2MB 100nS RAM, no co-processor, 40MB HD, MS-DOS 3.31,
     MS-Windows 3.0 and 3.1, a mouse and a 0.31 dp VGA monitor w/256KB
     VRAM were used. No accelerator cards were used.

     Files Included On-Disk
     ----------------------

     The unregistered copy of VB_APPS includes one or two 5.25" or
     one 3.5" floppy diskette(s) with these files:

     - asckey.exe	VB_APPS executable files
     - engarde.exe
     - getfont.exe
     - nowtimer.exe
     - openup.exe
     - vhscroll.exe
     - vbw.exe
     - ckey.exe
     - file01.eng	external files: file01.eng is for engarde.exe,
     - openfile.vbn	openfile.vbn is for openup.exe, exefiles.vbn is
     - exefiles.vbn	for vbw.exe, and ckey.fle and merlin.pif are for
     - ckey.fle         ckey.exe.
     - merlin.pif

				- Page 9 -

     - vb_apps.hlp	Windows help program for vb_apps
     - vb_apps.txt	this document
     - installz.exe	program to install/uninstall VB_APPS files
     - readme.1st	text file with the latest information on VB_APPS
     - vendor.doc	shareware vendor and BBS SysOp information


     The registered copy of VB_APPS includes two 5.25" or one
     3.5" floppy diskette(s) with these files:

     - vhscroll files: scroll.mak, scroll.frm
     - engarde files: engarde.mak, engarde.frm
     - nowtimer files: nowtimer.mak, nowtimer.frm
     - asckey files: asckey.mak, asckey.frm
     - getfont files: getfont.mak, getfont.bas, gtfntbas.bas, getfont.frm,
                      prntdlg.frm.
     - openup files: openup.mak, openglbl.bas, openup.frm, options.frm
     - vbworkbench files: wrkbench.mak, glbl_wrk.bas, wrk.bas,
                          wrkbench.frm, wrkopen.frm, wrk_time.frm,
                          openbox2.frm, prnt.frm
     - cryptokey files: ckey.mak, ckey.bas, ckey_mdl.bas, ckey.frm,
                        newbox.frm, destbox.frm
     - file01.eng	external files: file01.eng is for engarde.exe,
     - openfile.vbn	openfile.vbn is for openup.exe, exefiles.vbn is
     - exefiles.vbn	for vbw.exe, and ckey.fle and merlin.pif are for
     - ckey.fle         ckey.exe.
     - merlin.pif
     - vb_apps.hlp	Windows help program for vb_apps
     - vb_apps.txt	this document
     - installz.exe	program to install/uninstall VB_APPS files
     - readme.1st	text file with the latest information on VB_APPS
     - vendor.doc	shareware vendor and BBS SysOp information


     Before installing VB_APPS, ensure that all files listed above are
     included on the VB_APPS disk(s).   Consult your DOS or MS-
     Windows user's guide on how to view files on a diskette.  If any
     files are missing, do not attempt to operate any program. Contact
     Customer Support Dept. of Resolutions Now or the vendor that sold
     you VB_APPS.


     NOTE THAT AN EXTERNAL PROGRAM FILE MUST BE IN THE SAME DIRECTORY AS
     THE ACTIVE EXECUTABLE FILE OR THE "VB" DIRECTORY (I.E. "C:\VB").
     VB_APPS.HLP MUST ALSO BE IN THE SAME DIRECTORY AS THE ACTIVE
     EXECUTABLE FILE OR THE "VB" DIRECTORY.

     AS STATED ON PAGE 11, YOU MUST INCLUDE THE PATH ON THE COMMAND LINE
     UNLESS THE CURRENT DIRECTORY CONTAINS THE EXECUTABLE FILE. THIS IS
     TRUE, REGARDLESS OF THE INCLUSION OF THE PATH IN THE AUTOEXEC.BAT
     FILE.

				- Page 10 -

     Backup Copies
     -------------

     Before installing or running VB_APPS, make a backup copy of the
     VB_APPS diskette(s).  Consult your DOS or MS-Windows user's
     guide on how to make a copy of a diskette.




     Read Documents Before Running VB_APPS
     ---------------------------------------

     Read this document and readme.1st before running VB_APPS.




     Running Installation Program    (INSTALLZ.EXE)
     ----------------------------------------------

     Installz.exe installs (copies) or deletes VB_APPS files. Your
     autoexec.bat, config.sys and win.ini files WILL NOT be altered.
     ONLY INSTALL VB_APPS FROM THE DOS PROMPT.

     To install VB_APPS from DOS:

     1.  Insert VB_APPS disk 1 into correct floppy drive.
     2.  Switch to the drive with Disk 1.
     3.  At the prompt type INSTALLZ X ,where X is the number of program
         disks to be installed. then press the return key. Only include
         a number if you are installing more than one disk.
     4.  Installz begins. From the main menu box, choose 1 of 2 options:

     OPTION 1 starts a query session to set source and destination
     drives and directories.  Next, a full screen menu appears.  Answer
     "Y" to confirm choices and initiate installation.  Answer "N" to
     change a choice.  Once installation begins, Installz displays file
     copy information.  Installz will then end and switch to the
     destination drive and directory.

     OPTION 2 displays a query box.   Answer "Y" to start a query
     session to retrieve drive and directory with an old (Unregistered)
     copy of VB_APPS.  ALL  files in this directory are deleted when
     installation begins.  Installz will then proceed as stated above.

     To delete VB_APPS files, run Installz by typing INSTALLZ without
     any parameters.  Run Installz from the VB_APPS disk or move it to
     another directory or drive before deleting VB_APPS files.  From
     the main menu, choose option 3.

				- Page 11 -

     OPTION 3 starts a query session to retrieve drive and directory
     with VB_APPS files for deletion.  Only VB_APPS files must be in
     this directory. All files in the stated directory are displayed.
     A message states that all files shown will be deleted.  Confirm
     deletion and the DOS Delete command will prompt you to confirm
     deletion again.  Answer "Y" to delete files and its directory.
     Installz will then end.

     All errors are self-explanatory. To correct most errors, Installz
     displays a menu with options. Errors can also occur when copying
     or deleting files and directories. In this case, DOS will display
     an error message.  Installz  will  then  abort  and  go  to  the
     destination drive.

     You should then review the contents of the directory with installed
     VB_APPS files.  This directory should contain the files listed on
     pages 8-9. Remedies: (1) run Installz again. Choose option 2 to remove
     files before installing VB_APPS again. (2) Use DOS to copy necessary
     files to destination drive and directories.

     DO NOT change the name of any file. A VB_APPS executable file will
     not operate properly if a file name is changed.  Only move an
     executable file if you include its external program file (if any).


     Running a VB_APPS executable file
     ---------------------------------

     You can run an executable file directly from DOS or Windows. Only
     run an executable file if the corresponding external program file
     is installed in the correct directory. See pages 8-9.

     To run an executable file from DOS:
     	1.  At the prompt of the root directory on the correct drive
     	    (i.e. c:>), type WIN X\YY.EXE, then press the return key.
            Note that (X) is the path (i.e. c:\dos) and YY.EXE is the
            name of a VB_APPS executable file.
     	Or,
     	1.  Go to the directory where you installed a VB_APPS executable
            file.  At its prompt, type WIN YY.EXE.  Again, note that
            YY.EXE is the name of a VB_APPS executable file.

     To run an executable file from Windows:
     	1.  In the File or Program Manager, choose Run from the
     	    File menu.
     	2.  Type X\YY.EXE and click the OK button in the Run dialog box.
            Again, note that (X) is the path and YY.EXE is the name of a
            VB_APPS executable file.

				- Page 12 -

     	Or,
     	1.  In the File Manager, go to the directory where you installed
            a VB_APPS executable file and double click on the executable
            file filename.
     	Or,
     	1.  In the Program Manger, go to the group window where you
            installed a VB_APPS executable file icon.
     	2.  Double click on the icon.

				- Page 13 -
     SECTION THREE
     =============

     VHSCROLL
     ========

     VHScroll permits precise picture box or object movement with the
     VScroll & HScroll bars. VHScroll is useful for users that do not
     have add-on software with enhanced scroll bar features.  You can:

     1. Move a picture box left and right, up and down and it can return
        to its exact initial positions.
     2. Use TabStops on scroll bars in re-sizeable forms. VHScroll places
        the cursor blink (blinking action that appears when scroll bar
        has the focus) in the cursor box (scroll bar sliding lever).

     The single form sample App shows what VHScroll can do.  A letter-size
     on-screen picture box in another picture box is controlled by both
     vertical and horizontal scroll bars.  Move either scroll bar and the
     corresponding Change procedure is activated.

     The following VScroll_Change procedure from VHScroll illustrates
     how the vertical scroll bar moves Picture2 up or down.  In this
     example, Picture2.Top = 2440 and VScroll1.Value = 0 on start up.
     All values are in twips.  The user moves the VHScroll cursor box
     one space (120 twips).

     Code from VHScroll                       Results of above example
     ------------------                       ------------------------
     Sub VScroll_Change ()
       CurVal2% = VScroll1.Value              CurVal2% = 120
       m% = CurVal2% - OldVal2%               m% = 120 - 0 = 120
       Picture2.Top=Picture2.Top - 12 * m%    Picture2.Top = 2440 - 12
                                                          * 120 = 1000
       OldVal22% = CurVal2%                     OldVal2% = 120
     End Sub

     Picture2.Top is now 1000.  It moved down by 1440.  Next, the user
     moves the VScroll1 cursor box back to the topmost position (0 twips;
     value = 0).  The results are:

     CurVal2% = 0
     m% = 0 - 120 = -120
     Picture2.Top = 1000 - 12 * (-120) = 1000 - (-1440) = 2440
     OldVal2% = 0

     Picture2.Top is now at its initial Top position of 2440 twips.

     You can now use scroll bar TabStops with re sizeable forms. VHScroll
     accomplishes this by setting the Visible property of the scroll
     bars to zero in the Form_Resize procedure of the main window.  The
     scroll bars alter their height or width and the Visible property
     of the scroll bars is set to True in the same procedure.  This

				- Page 14 -

     causes the scroll bar with the focus to loose the focus.  The
     corresponding LostFocus procedure is then activated and the Set
     Focus command resets the cursor blink in the scroll bar cursor box.

     Note - the only code required are the Dim statements, HScroll1_Change,
            VScroll1_Change, HScroll1_LostFocus, VScroll1_LostFocus and
            Form_Resize.  The values for VScroll1 & HScroll1 are (all
            settings can be altered):

                              VScroll1           HScroll1
            ---------------------------------------------
            Max               600                400
            Min               0                  0
            LargeChange       60                 40
            SmallChange       10                 10
            TabStop           True               True


     Review the following tables for more information.

     Controls         CtlName property
     ---------------------------------
     Picture box      Picture1
     Picture box      Picture2
     Label            Label1
     Label            Label2
     Label            Label3
     Text box         Text1
     VScroll          VScroll1
     HScroll          HScroll1


     Procedure                 Description
     ----------------------------------------------------------------
     HScroll1_Change            Moves Picture2 left or right.
     HScroll1_LostFocus        Resets cursor blink in HScroll1 after
                               Form1 re-sizes, if HScroll1 had focus.
     VScroll1_Change            Moves Picture2 up or down.
     VScroll1_LostFocus        Resets cursor blink in VScroll1 after
                               Form1 re-sizes, if VScroll1 had focus.
     Form_Load                 Shows title box and sets Picture1 and 2.
     Form_Resize               Resets all controls if WindowState <> 1.
     Menu_File1_Click          Ends App.
     Menu_Help1_Click          Shows Help file with registration info
                               or About box.
     Title_MsgBox              Displays either Title box or About box.


     Form              FormName          Module           Module Name
     --------------------------          ----------------------------
     Scroll.frm         Form1             make             Scroll.mak

				- Page 15 -

     ENGARDE
     =======

     NOTE:  EnGarde is only intended as an example of how to design and
            implement a simple password add-on module. Do not use EnGarde
            with confidential or mission critical applications.  Neither
            Resolutions Now nor the author of EnGarde accepts any
            responsibility for the use of EnGarde.

     EnGarde is a simple password protection add-on.  Insert it into the
     Form_Load procedure of the main window of your App.  EnGarde code
     must be the first code in this procedure.  EnGarde has user-defined
     passwords.  You can alter its code to:

     - Exclude the external file, file01.eng, and use a built in non-
       configurable password.
     - Add more code to allow multiple valid user passwords.
     - Add more code to make EnGarde operate in a network environment.

     When adding EnGarde in your App, only use the code in the EnGarde
     Form_Load procedure.  A review of the code follows.

     EnGarde is designed as one or a series of input boxes. This greatly
     reduces the bytes required.  An external file stores a password,
     in random access mode.  The information appears garbled when
     viewed.  You can rewrite EnGarde to include forms.

     MessageOne is the initial message shown in the main input box
     when the user first encounters EnGarde.  MessageTwo appears
     every time thereafter when the user encounters EnGarde.

     EnGarde then searches for file01.eng in the current directory
     or the "VB" directory.  If not found, it displays an error
     message and aborts.  If found, two variables are retrieved.
     Initpass$ is initially set to empty so MessageOne will display
     when the user first encounters EnGarde.

     On subsequent uses, EnGarde will give the user two chances to input
     the correct password.  If the user enters the character "1", EnGarde
     will prompt the user to enter the correct password in order to set
     a new password.  This will only allow valid users to change a
     password.  The user has two chances to enter the correct password.

     In the sample App, when a correct password is entered or a new
     password is entered, the Form_Load procedure is exited and the App
     is opened.  If your App has code other than EnGarde in this procedure,
     place it directly after the line labeled "15".  Note that EnGarde
     will not write to file01.eng unless the password is changed or the
     sample App resets the contents of the external file.

				- Page 16 -

     The single form sample App titled "U.S. Dept. of Fun" consists of a
     multiple line text box.  Users can insert text and password protect
     it.  EnGarde serves as an add-on module to accomplish this task.

     EnGarde is also used in Cryptokey (ckey.exe).  See page 38 or run
     ckey.exe to see how it is used.

          Note that the originally set password is "1234", not
          including the quotation marks.

     The property and procedure tables will not be listed because they
     do not effect the use of EnGarde.  Additional tables:


     Form              FormName          Module           Module Name
     --------------------------          ----------------------------

     EnGarde.frm       Form1             make             EnGarde.mak

				- Page 17 -

     NOWTIMER
     ========

     NowTimer is a single form App with timers that display time in
     hours, minutes and seconds (real time).  NowTimer consists of two
     timers that operate simultaneously and independently.  Use NowTimer
     to time events such as:

     - User responses
     - An application start up and exit timer - log application use
     - Beginning, delaying or ending any application execution

     To use NowTimer, click the Start button of either timer.  The
     corresponding label caption will display the time as its caption
     every second. Click the Stop button to end timing.  If you click
     a Start button again, the timer restarts counting at zero. Delete
     the last line of code in Command2_Click or Command4_Click pro-
     cedure if you do not want to reset the corresponding timer to
     zero when starting it.

     VB Workbench (VBW) uses NowTimer code to log time.  VBW adds
     a pause function through a menu command.  See VBW instructions
     on page 29 and its code for more information.  An overview of
     NowTimer follows.

     On start up, both timers with their controls are displayed.  When
     you click either Start button, TimerX_Timer procedure is implemented.
     Note that the interval for each timer control is set to 1000 (one
     second).  The Timer command actually increments the time.  The
     TimerX_Timer procedure is used to continuously update the real
     time clock display in the corresponding label.  The procedure is
     continuously executed, even if the user is performing another task
     (use VBW to confirm this).

     Nowtimer theoretically times up to 99:59:59 before an error occurs.
     But it is set for a maximum time of 23:59:59. You can add code to
     time events for days or years. A good example is the log program
     of VBW.

     To prevent errors, when you click a Start button, it is disabled
     until you click its corresponding Stop button.  Clicking a Stop
     button disables the TimerX_Timer procedure.  In your App, you can
     use any action to start or stop a NowTimer - not just command
     buttons.

     To create more timers, create an additional Timer control for each
     timer.  Assign a variable statement (i.e. Starter! = Timer) to
     initiate  the  timer.   Its  is  a  local  or  global  declaration.
     Place this statement where an action will start the timer (loading
     a form, clicking a button, etc.).  TimerX_Timer procedure must
     include the same code as shown in either Timer procedure.  Note
     the different names for variables in both Timer procedures.

				- Page 18 -

     Depending  on  the  speed  of  your  computer,  time may appear to
     increment erratically from time to time. Since Nowtimer calculates
     time using the Timer command, it is accessing your computer's clock.
     Actually, Visual Basic is correctly compensating a lag that may
     occur when executing the log code. Therefore, the time is accurate.
     Test the time every minute by comparing the log time with your
     favorite clock.

     You may not like the periodic erratic nature of the log timing. If
     so, try the code below in place of the log time code. Note that
     you must have a fast computer to accurately log time. Or else,
     log time will continuously fall behind.   If you do not have
     a fast computer, but still want to try the code below, change the
     Timer control's interval. It is originally set to 1000 (1 second).
     800 or 950 may suffice.

     In the first sample, the time is incremented by a variable (a!).
     (a!) is a local or global variable. No timer command or its
     variables are used (Starter! and StopNow!).


     Sub Timer1_Timer ()
       a! =a! + 1             'a! is seconds elapsed.
       '86400 is a 24 hr. period. Timer max is 23:59:59, so reset to 0.
       If a! > 86400 Then a! = 0     'Same code and comments as in
       b! = a! / 86400               'NowTimer.
       c! = Format$(b!, hh:mm:ss)    '
       Label1.Caption = c$           '
     End If


     The only code added to Command2_Click procedure is:
       a! = 0     'Resets counter to 0 when user clicks the stop button.


     Another alternative is to replace the Format$ command with other
     code. The length of the of code to follow may seem too long. But
     Visual  Basic  appeared  to  execute  it faster than the Format$
     command. Anyway, if the erratic display continues, you may have
     learned something - how the Format$ command works in this case.
     Finally, you can include the above code.


     Sub Timer1_Timer ()
       '                        'Replace code starting at b! = a!/86400.
       '
       b! = Fix((a!/3600)       'Get the hours.
       c! = ((a!/3600) - b! * 3600
       d! = Fix(c!/60)          'Get the minutes.
       e! = ((c!/60) - d!) * 60 'Get the seconds.

				- Page 19 -

       'Formats the hours; includes leading zero if necessary.
       If b! < 10 Then
          CurHour$ = "0" + Right$(Str$(b!),1)

       Else
          CurHour$ = Right$(Str$(b!),2)
       End If

       'Formats the minutes; includes leading zero if necessary.
       If d! < 10 Then
          CurMinute$ = "0" + Right$(Str$(d!),1)
       Else
          CurMinute$ = Right$(Str$(d!),2)
       End If

       'Formats the seconds; includes leading zero if necessary.
       If e! < 10 Then
          CurSecond$ = "0" + Right$(Str$(e!),1)
       Else
          CurSecond$ = Right$(Str$(e!),2)
       End If

       'Display the time in real time.
       Label1.Caption = CurHour$ + ":" + CurMinute$ + ":" + CurMinute$


     The tables for NowTimer controls and procedures follow.


     Controls            CtlName property          Caption property
     -----------------------------------------------------------

     Frame box           Frame1                    Timer 1
     Frame box           Frame2                    Timer 2
     Command button      Command1                  &Start
     Command button      Command2                  S&top
     Command button      Command3                  St&art
     Command button      Command4                  St&op
     Label               Label1
     Label               Label2



     Procedure                 Description
     ----------------------------------------------------------------

     Command1_Click            Initiates timing through Timer1_Timer
                               procedure.
     Command2_Click            Stops timing of Timer1_Timer procedure.

				- Page 20 -

     Procedure                 Description
     ----------------------------------------------------------------

     Timer1_Timer              Converts time to real time and displays
                               it in Label1.
     Command3_Click            Initiates timing through Timer2_Timer
                               procedure.
     Command4_Click            Stops timing of Timer2_Timer procedure.
     Timer2_Timer              Converts time to real time and displays
                               it in Label2.
     Menu_File1_Click          Ends App.
     Menu_Help1_Click          Shows Help file with registration info
                               or About box.
     Title_MsgBox              Displays either Title box or About box.



     Form              FormName          Module           Module Name
     --------------------------          ----------------------------

     NowTimer.frm      Form1             make             nowtimer.mak

				- Page 21 -

     ASCKEY
     ======

     Asckey is a single form App that a) converts keyboard input to its
     ASCII equivalent or b) converts ASCII values to its character
     equivalent.  ASCII values are given only for a to z, 0 to 9, and
     some special key characters.  Asckey is particularly useful to
     Windows programmers that need to quickly retrieve these values.
     An overview of its code and instructions for its use follow.

     When the App is loaded, Picture1 (which contains all character-to-
     ASCII controls) is enabled and displayed.  Its menu command, File+
     Find ASCII Value is disabled since it is opened.  See Case 0 under
     Menu_File1_Click procedure.  Captions in Label1 give instructions,
     which is to enter a valid keyboard character.  Its ASCII value is
     immediately displayed.  The keyboard character is then highlighted
     so you can enter another one without clearing it. The Text1_Change
     and Text1_KeyPress procedure accomplishes this. If you enter a
     character and no valid ASCII value is displayed, then there may
     not be a valid ASCII value.  If a block type character appears as
     the ASCII value, then Visual Basic or Windows does not support it.

     Choose File + Find Character and Picture1 will hide.  Picture2
     displays.  Its menu command is disabled and File + Find ASCII Value
     menu command is now enabled.  Code in Case 1 under Menu_File1_Click
     procedure accomplishes this.  The ASCII-to-character interface is
     slightly different.  Input data of no more than three numbers, then
     click the OK button to get the character equivalent.  Text2_Change
     and Text2_KeyPress procedures ensure that only 1 to 3 characters
     are entered in the Text2 box.  The Command1_Click procedure converts
     the ASCII entry into a character and displays it.  The text in the
     Text2 box is highlighted to allow another entry without clearing the
     text box. The property, procedure and additional information tables
     follow.


     Controls         CtlName property
     ---------------------------------

     Picture box      Picture1
     Picture box      Picture2
     Label            Label1
     Label            Label2
     Label            Label3
     Label            Label4
     Command button   Command1
     Text box         Text1
     Text box         Text2

				- Page 22 -


     Procedure                 Description
     ----------------------------------------------------------------

     Form_Load                 Shows title box.
     Menu_File1_Click          Displays char-to-ASCII or ASCII-to-char
                               picture box; ends App.
     Command1_Click            For ASCII-to-char, converts ASCII to
                               char and displays it.
     Text1_Change              Highlights contents.
     Text1_KeyPress            Converts char-to-ASCII.
     Text2_Change              Gets length of contents and passes it to
                               Text2_KeyPress to ensure maximum input
                               of 3 characters.
     Text2_KeyPress            Allows only a maximum of 3 characters or
                               backspace character to pass to Text2 box.
     Menu_Help1_Click          Shows Help file with registration info
                               or About box.
     Title_MsgBox              Displays either Title box or About box.




     Form              FormName          Module           Module Name
     ----------------------------        ----------------------------

     Asckey.frm        Asckey            make             Asckey.mak

				- Page 23 -

     GETFONT
     =======

     Getfont is a two form App that retrieves all available active screen
     or printer font names.  These font names are displayed on-screen or
     the user can get a print out.

     Getfont is useful for any user that wants to retrieve available
     font names.  Programmers can get the valid font name for use with
     the FontName command.  The FontName command under Windows 3.1 will
     use any font name retrieved, even font names with more than one
     word.

     Getfont is easy to use.  To display all available active screen
     font names, click on the "Screen Fonts" button.  To display all
     active available printer font names, click on the "Printer Fonts"
     button.  Both buttons are located in the button ribbon bar, below
     the menu bar.  Font names are loaded into the Combo1 list box.
     Choose a fontname from the Combo list box and its font type is
     displayed in label 3.  If printer font names are loaded, Visual
     Basic may not recognize a matching screen font type.  Label 4
     will state this if it occurs.

     To printout active font names, choose File + Print... .  A print
     dialog box appears.  Ensure that the correct printer is active and
     set to portrait mode.

     The option button that corresponds to the currently loaded font
     names (screen or printer) is checked.  You can choose to print
     either.  If the check box is not checked, only the font names are
     printed in (4 columns).  If the check box is checked, the font names
     are printed in the corresponding font types.  Font types are printed
     in one column.

     If screen font types are printing and Visual Basic does not handle
     a matching printer font type, an asterisk denoting this is placed
     before the font name.  Total number of font names are also listed.

     Font handling is limited by Visual Basic. Examples: a) GetFont can
     not distinguish and list TTF or another add-on font that is not a
     standard Windows 3.0 font; b) GetFont cannot distinguish between
     the different font styles (both Courier Light and Courier Extra
     Light may display in the combo list box as "Courier").

     Another limitation of Visual Basic: open Getfont and retrieve the
     font names of the printer on port LPT1. Now make the printer on
     port LPT2 active, then try to retrieve the font names from that
     printer. GetFont cannot get them. You must restart the application,
     then retrieve the font names.

				- Page 24 -

     Sample times to print font names:
        - 35 seconds to start printing 50 printer font types to an Epson
          LQ compatible printer.
        - 2 minutes to start printing 41 printer font types to an HP II
          compatible laser printer.
        - 2 minutes and 20 seconds to start printing 34 screen font
          types to an HP II compatible laser printer.

     As noted in the Overview Section, under Printers Supported, Getfont
     is set to print on a dot matrix printer.  It will also print
     proportionally well on a laser printer.  Note that font names,
     whether displayed in the Combo1 list box or printed, are displayed
     and printed alphabetically. The property, procedure and additional
     tables follow.


     Controls         CtlName property          Caption
     -------------------------------------------------------

     Getfont.frm
     ------------

     Command button   Command1                  &Screen Fonts
     Command button   Command2                  &Printer Fonts
     Picture box      Picture1

     PrntDlg.frm
     -----------

     Command button   Command1                  O&K
     Command button   Command2                  &CANCEL
     Option button    Option1                   &Screen Fonts
     Option button    Option2                   &Printer Fonts
     Check box        Check1                    Print Font &Type
     Timer            Timer1



     Procedure                 Description
     ----------------------------------------------------------------

     Getfont.frm
     -----------

     Command1_Click            Load all available screen font names
                               into the Combo1 list box.
     Command2_Click            Load all available printer font names
                               into the Combo1 list box.
     Form_Load                 Show title box, center form and load
                               screen font names into Combo1 list box.
     Form_UnLoad               End App if System Menu's Close command
                               is chosen.

				- Page 25 -

     Procedure                 Description
     ----------------------------------------------------------------

     Combo1_Click              Show font type (of font name clicked on
                               in Combo1 list box) in label 3.
     Menu_File1_Click          Show Print dialog box or end App.
     Menu_Help1_Click          Shows Help file with registration info
                               or About box.
     Title_MsgBox              Displays either Title box or About box.


     PrntDlg.frm
     -----------

     Command1_Click            OK button clicked. Proceed with printing.
                               Hide form and enable Timer1_Timer procedure.
     Command2_Click            Cancel button clicked. Cancel printing
                               request and unload form.
     Form_Load                 Centers print dialog box.
     Timer1_Timer              Print font names or font names and types.
                               Allows enough time for prntdlg.frm to hide.
     Get_XYPosition            Set new CurrentX and Y positions to print
                               or display next font name.
     Set_InitXYPos             Set initial CurrentX and Y to print or
                               print first font name on next printed page.



     Form              FormName          Module           Module Name
     -----------------------------       ----------------------------

     Getfont.frm       Getfont            make             Getfont.mak
     PrntDlg.frm       PrntDlg            global           Getfont.bas

				- Page 26 -

     OPENUP
     ======

     Openup is a two form App that runs one or more (.exe, .bat, .com
     or .pif) program(s) simultaneously.  On start up, the main window
     displays in the bottom, left corner.  It is small and in that
     location so users can open and operate other Apps while Openup
     remains on-screen and easily accessible.   If you choose Options +
     Open All On Start up, you can minimize Openup on start up.  Choose
     Options + Minimize On File Open to minimize Openup when opening
     a file(s).

     App names are displayed in the list box on start up.  An external
     file, openfile.vbn, contains the names of executable files that
     display in the list box (the main list box).  Users can choose
     File + Open + All to open all files in the list box simultaneously,
     choose File + Open + File to open the highlighted file name only, or
     choose File + Open + Insert Choice to open a file not listed.
     When you choose the latter, an input box will display.  Insert a
     file name, including a path if necessary.

     You can add more file names or delete one or more from the list box.
     To do so, choose Options + Update File List.  The Update File List
     dialog box appears.  It is a modified open dialog box.  You can
     move to another directory or drive the same way you would in any
     open dialog box.  The main difference is that users cannot insert
     a directory, drive or file name.  Choose a file name by clicking
     on the File List box.

     Four option buttons at the bottom of the dialog box determine the
     action taken when the user clicks the OK button.  Users can open
     an App, add an App name to the main list box, open an App and add
     its name to the main list box, or delete a file name from the main
     list box.

     Users can also run all Apps listed in the list box on start up.
     Choose Options + Open All On Start up.  That menu command is then
     checked. On start up, all Apps listed in the main list box are
     opened, until you choose this menu command again to cancel it.
     The property, procedure and additional information tables follow.


     Controls         CtlName property          Caption
     -------------------------------------------------------

     Openup.frm
     ----------

     List box         List1
     Label            Label1                    Open:
     Label            Label2

				- Page 27 -

     Options.frm
     -----------

     Frame box        Frame1
     Option button    Option1                   Open
     Option button    Option2                   Add
     Option button    Option3                   Open+Add
     Option button    Option4                   Delete
     Command button   Command1                  O&K
     Command button   Command2                  &CANCEL
     Directory box    Dir1
     Drive box        Drive1
     File box         File1
     List box         List1
     Label            Label1
     Label            Label2
     Label            Label3
     Label            Label4


     Procedure                 Description
     ----------------------------------------------------------------

     Openup.frm
     -----------

     Form_Load                 Show title box, position main window and
                               retrieve file names from external file.
     Form_Unload               Goes to Update_Exefiles_List before
                               ending Openup.
     List1_Click               Highlight file name in list box so choosing
                               File + Open + File Shown can open it.
     List1_DblClick            Highlights and opens file name in list box.
     Menu_File1_Click          Choose Open to display sub menu or Exit
                               to end Openup.
     Menu_File2_Click          Select Case to open one or all files.
     Menu_Help1_Click          Shows Help file with registration info
                               or About box.
     Menu_Options1_Click       Select Case to show Update File List
                               dialog box, set Open All Files On Start up
                               option, or set Openup windowstate when
                               opening a file(s).
     Run_Program               Opens App highlighted in main list box.
     Exit_Program              Goes to Update_ExeFiles_List before
                               ending Openup.
     Update_Exefiles_List      Open external file and save all file names
                               in main list box.
     Open_All_Files            Open all Apps whose file names are in
                               main list box, if any changes were made.
     Open_File_Not_Listed      Display "Insert Choice" input box.
     Display_Path              Displays path and filename of program
                               name chosen in List1 box. Abbreviate path
                               if necessary.
     Title_MsgBox              Displays either Title box or About box.

				- Page 28 -

     Procedure                 Description
     ----------------------------------------------------------------

     Options.frm
     -----------

     Option1_Click             Set variable and Label5 caption to
                               "Open...". Go to Enable_Options_Controls, 
                               then Configure_Path procedures.
     Option2_Click             Set variable and Label5 caption to
                               "Add...". Go to Enable_Options_Controls,
                               then Configure_Path procedures.
     Option3_Click             Set variable and Label5 caption to
			       "Open+Add...". Go to Enable_Options_
			       Controls, then Configure_Path procedures.
     Option4_Click             Set variable and Label5 caption to
			       "Delete...". Go to Enable_Options_
			       Controls, then Configure_Path procedures.
     Form_Load                 Centers form on-screen.
     Command1_Click            OK button clicked. Set new directory. Or
                               Open, Add, Open+Add or Delete file name.
     Command2_Click            Cancel button clicked. Hide form.
     File1_Click               Filename chosen. If Option 1, 2 or 3 is
                               True then go to Configure_Path procedure.
     File1_DblClick            Filename chosen. Go to Command1_Click.
     Dir1_Click                Set variable to inform Options.frm that
                               user wants to change to new directory.
     Dir1_Change               When directory path changes, change
                               File1 path.
     Drive1_Change             Update Dir1 path.
     List1_Click               Filename to delete is chosen.
     List1_DblClick            Filename to delete is chosen. Go to
                               Command1_Click procedure.
     Configure_Path            Configure Option control choice,
                               directory path and File1 filename.
                               Display it in Label5. Abbreviate
                               if necessary.
     Enable_Options_Controls   Set Visible, Enable and TabIndex
                               properties of all controls.
     Check_For_FileName_       Ensures duplicate program name is
     Before_Adding             not placed in main list box.


     Form              FormName          Module           Module Name
     -----------------------------       ----------------------------

     Openup.frm        Openup             make             Openup.mak
     Options.frm       Options

				- Page 29 -

     VBWORKBENCH
     ===========

     VBWorkbench (VBW) is an application that combines Openup with a
     log program. Every Openup feature is included. When VBW starts
     up, it appears exactly like Openup. The following instructions
     will concentrate on the log program. See Openup instructions to
     use VBW's identical features.

     The log program, which you can redesign as a stand alone application,
     is accessible by choosing Options + Show Log or press the F6 key.
     First, an explanation of the controls, then its entire operation,
     will follow.

     The text1 box, labeled "Developer" is for you to insert your company
     name and address. The text2 box, labeled, "Client" is for you to
     insert the client's name and address, if any. Fill in these two
     text boxes, especially if you log time for computer use while
     working for a client. This information will also be printed on the
     log report's heading.

     The text3 box, labeled "Fee", is to insert an hourly fee charged to
     the client. Only numbers 0-9 and a period character are allowed.
     This hourly fee multiplied by the total time is displayed in the
     log data frame box. The total fee and subtotal fees for each session
     is also printed on the log report.

     The log data frame box houses the following information:

     Session         timed period: [(Run+Stop) - (Run+Start)]. If you choose
                     Run+Pause, it simply pauses the timed period until
                     you choose Run+Resume or Run+Stop. Once Run+Stop is
                     chosen, that session ends. The timed period is added
                     to the total time. Choose Run+Start again and a new
                     session starts. The time is displayed as:

                                  days.hours:minutes:seconds

                     Therefore, theoretically 9999 days & 23:59:59 is the
                     maximum time allowed. VBW stops timing at 9999 days.

     Log Dates       all sessions between periods where you save changes
                     in a file is one log date. For instance, a file is
                     opened and several sessions are timed. Then changes
                     to the file are saved. That is one log date. The
                     instant the first session begins, the starting date
                     of that first session will be saved as the starting
                     date of that log period.

				- Page 30 -

     Total           the total time of all sessions. Again, the is
                     displayed as shown above. Timing stops at 9999 days.

     Total Costs     total time multiplied by the hourly fee. The max
                     costs displayed is $9,999,999.00. If total costs
                     surpasses this amount, VBW stops the timing process
                     and total cost calculations. An overflow message is
                     displayed. You can continue timing only if the
                     hourly fee is reduced.

     Starting Date   the date when you began timing sessions.

     Timing a session is easy. There are three commands: Start, Pause/
     Resume and Stop. These commands are available through the Run menu
     bar command. As stated earlier in the explanation for a session,
     Start begins timing a log session. Pause temporarily halts the
     timing process until you choose Resume or Stop. Stop halts the
     timing of that session. Log timing is only as accurate as your
     system's clock.

     Saving log data
     ---------------

     On a first save attempt, a save dialog box displays. Only a file
     name to save can be entered into the text box. Change directories
     or drives by double clicking on the appropriate controls. Visual
     Basic 1.0+ Professional and VB 2.0+ users can use Window's built
     in common save dialog box if you want to get full save dialog box
     access. Note that all files are saved with a (.vbw) extension.
     Other extensions are invalid. The (.vbw) extension is added if the
     user does not include one. Note that the Openbox2.frm is working
     overtime as both an open and save dialog box.

     The random access mode is used to save a file. The file is saved as
     records of a fixed string length of 10. When the user saves a new
     file, the starting date, total time, total days and total number
     of sessions are saved in the first four record positions. These
     strings, except starting date, are continuously updated whenever
     the user saves any changes to the file.

     The next two records contain information that tracks the next
     position to write the new session log data and the number of records
     required for the client name. The second to Nth time you save data
     to the file will write three records each time, called the session
     log data. The last position of the third record must be tracked, so
     the next session log data can be written, starting in the next
     location. The next location is not the last position plus one, if
     you included a clients's name. The client's name is always patched
     on to the end of the file. This is because the user may change the
     client name or delete it altogether. Therefore, a pre-defined number

				- Page 31 -

     of record locations cannot be given to the client's name.

     As mentioned above, the session log data, in record file allotments
     of three are saved. The first record position is the date the session
     began, the second is the number of days for that session and the
     third is the remaining hh:mm:ss. The following table illustrates
     the file position allocations and its contents:

     Position     Log data (in order of position) as stored in a file
     --------     ---------------------------------------------------

     1            starting date (StartDate$)
     2            total hh:mm:ss (TotalTime$)
     3            total days (AddDays$)
     4            total sessions (TotSessions$)
     5            session date (curlogdate$)
     6            number of days this session (SessionDate$)
     7            total remaining hh:mm:ss (reallogtime$)
     *              [same type of data recorded in positions 5,6,7
     *              (Session log data; updated 3 file locations on
     *              every save)]
     last N       client's name (N) depends on number of characters in
                  client's name divided by 10 [this is (c)]. Therefore,
                  (N) is last file position of session log data's third
                  record position (remaining hh:mm:ss) + (c) + I.
                  I is 1 if (c) is a fractional number; else, it is 0.

     When saving files, note that changing the client's name, but not
     logging any time will also cause VBW to prompt the user to save file
     changes. If no client's name is listed, a semi colon will be saved
     to indicate this. Of course, you can alter part of or the entire
     file save process, particularly if dBase compatibility is required.
     You can also use a text editor to edit any client file. Remember,
     each record position must remain as a string of 10 character spaces.
     Do not remove a file location or an error will occur.

     Printing log data
     -----------------

     All data saved is printed in the report form. The report form is
     an invoice for your client. You can also get hardcopies of logs for
     personal use. You can get up to 10 copies of the report, print out
     only the log totals or print out all log session information. Note
     that you can only print a report of a saved file (designed this way
     for simplicity). If you just timed a session, choose File + Save to
     save the file information.

     Now get a print out of that file. Choose File + Print. Set your
     printer for portrait mode, beforehand. Click the OK button. Review

				- Page 32 -

     the layout and contents of the report. Its layout was setup for a
     printed form used at Resolutions Now. VB programmers, being a
     resourceful group, can surely design their own forms. Or blank
     paper may suffice.

     Note the heading (the top of the form that ends where log session
     data is printed). The external file (exefiles.vbn) saves your developer
     name and invoice number. Every time you print an invoice, its number
     is incremented. An (x) number of copies will have the same invoice
     number. The date the invoice was printed is under the invoice number.
     Also note the inclusion of the client's name, if any, and the hourly
     fee, if any.

     Data from each log session is printed, along with session costs.
     Look at the total cost and you may notice a slight difference
     between the sum of the session cost and the total cost. All costs
     are rounded to nearest penny and are correct. Maximum total cost
     calculated is $9,999,999.00.

     Note that the log dates are the session dates (curlogdate$). Its total
     time is (TotSessions$). The time to the left of the period is the
     number of days for that session (SessionDate$) and the time to the
     right of the period is the remaining hh:mm:ss (reallogtime$). The
     time to the left of the period for the total time is the total days
     (AddDays$) and to the right is the total remaining hh:mm:ss
     (TotalTime$).

     A page will list 15 log sessions. If there are more, another page
     is printed. At the bottom of each page, the current and total
     amount of pages are listed.

     Depending on the speed of your computer, time may appear to
     increment erratically from time to time. NowTimer calculates time
     using the Timer command, which is accessing your computer's clock.
     Actually, Visual Basic is correctly compensating a lag that may
     occur when executing the log code. Therefore, the time is accurate.
     Test the time every minute by comparing the log time with your
     favorite clock.

     You may not like the periodic erratic nature of the log timing. If
     so, try the code below in place of the log time code. Note that
     you must have a fast computer to accurately log time. Or else, the
     log time will continuously fall behind. If you do not have a fast
     computer, but still want to try the code below, change the Timer
     control's interval. It is originally set to 1000 (1 second). 800
     or 950 may suffice.

     As shown, the time is incremented by a variable (av!). (av!) is
     a global variable. No timer command or its variables are used
     (Starter! and StopNow!). You can replace the Format$ command
     with code shown under Nowtimer, pages 17-19.

				- Page 33 -

     Sub Menu_Run1_Click (Index As Integer)
        Select Case Index
           Case 0      'Run + Start
             'If timing has started or paused, do not start again.
             If abcd$ = "0" Or abcd$ = "3" Then Exit Sub
             Label4.Caption = "0000."    'Reset session days.
             'Reset counter to zero.
             av! = 0
             'Go to Timer1_Timer procedure to start timing.
             Timer1.Enabled = -1
             '
             '       Same code in procedure after line of code above.
             '
           Case 1      'Run + Pause/Resume
             'If timing has started, do If...Then.
             If abcd$ = "0" Then
                Timer1.Enabled = 0      'Stop timing.
                PauseTime! = PauseTime! + av!
                '
                '      Same code in procedure, including Case 2,
                '      after line of code above.
        End Select
     End Sub


     Sub Timer1_Timer ()
        'Time is incremented by 1 second by counter.
        av!  = av! + 1
    
        'Add PauseTime!, if any and calculate session time.
        If PauseTime! > 0 Then av! = av! + PauseTime!

       '
       '     Same code in procedure, starting at "If av! >= 86400 Then"
       '    
     End Sub


     Sub Calculate_Time ()
       'If timing has not paused do If...Then.
       If abcd$ <> "3" Then a! = av!
    
       'If timer has paused, log time is pause time.
       If abcd$ = "3" Then a! = PauseTime!

       '
       '     Same code in procedure, starting at "If av! >= 86400 Then"
       '
     End Sub

				- Page 34 -

     The tables for VBW controls and procedures follow.



     Controls         CtlName property          Caption
     -------------------------------------------------------

     Wrkbench.frm
     ------------

     Controls, ctlname properties and caption properties are same as
     Openup.frm in Openup, pages 26-27.

     Wrk_Open.frm
     ------------

     Controls, ctlname properties and caption properties are same as
     Options.frm in Openup, page 27.


     WrkTime.frm
     -----------

     Text box         Text1
     Text box         Text2
     Text box         Text3
     Frame box        Frame1                    Log
     Label            Label1                    &Developer:
     Label            Label2			&Client:
     Label            Label3			&Fee:
     Label            Label4			0000.
     Label            Label5			Log Dates:
     Label            Label6			Session:
     Label            Label7			00:00:00
     Label            Label8			Total:
     Label            Label9			0000.
     Label            Label10			00:00:00
     Label            Label11			$0.00
     Label            Label12			Start Date:
     Label            Label13			12-14-92
     Label            Label14			0
     Label            Label15			Total Costs:



     Openbox2.frm
     ------------

     Label            Label1                    File &Name:
     Label            Label2                    &File:
     Label            Label3                    &Directory:
     Label            Label4                    D&rive:

				- Page 35 -

     Command button   Command1                  O&K
     Command button   Command2                  &CANCEL
     File box         File1
     Directory box    Dir1
     Drive box        Drive1


     Print.frm
     ---------

     Label            Label1                    C&opies:
     Text box         Text1
     Check box        Check1                    &Totals Only
     Command button   Command1                  O&K
     Command button   Command2                  &CANCEL

   

     Procedure                 Description
     ----------------------------------------------------------------

     Wrkbench.frm
     ------------

     Same procedures as Openup.frm in Openup, page 27.


     Wrk_Open.frm
     ------------
     Same procedures as Options.frm in Openup, page 28.


     Wrk_Time.frm
     ------------

     Form_Load                 Center form, reset contents, get current
                               directory
     Menu_File_Click           Set enabled state for File+Print menu
                               command depending on status of current
                               file.
     Menu_File1_Click          Handles file menu bar selection. Get new
                               file or open or save a file.
     Menu_Run1_Click           Handles Run menu bar selection. Stop,
                               Pause/Resume or Stop timing a session.
     Menu_Help1_Click          Show registration information or About
                               box.
     Timer1_Timer              Times a session in real time. Displays
                               time on-screen.
     Text1_Change              Sets a condition to inform VBW whether
                               or not changes to developer's name
                               occurred. If yes, save on VBW exit.
     Text3_Change              Sets condition to inform VBW if changes
                               to fee occurred. If yes, save on VBW exit.

				- Page 36 -

     Openbox2.frm
     ------------

     Form_Load                 Center form on-screen, set File1 pattern
                               to (*.vbw), put pattern in text1 box
                               and highlight it.
     Command1_Click            OK button clicked. Depending on state of
                               dialog box (open or save), either go to
                               new directory and/or drive, save file
                               or open file.
     Command2_Click            Cancel button clicked. Get current
                               directory path of dialog box and unload.
     Dir1_Click                Set counter to tell form to change to
                               chosen directory.
     Dir1_Change               Sets File1 path and pattern and puts
                               pattern in text1 box when directory
                               changes.
     File1_Click               Put chosen filename in text1 box.
     File1_DblClick            Filename chosen. Go to Command1_Click.
     File1_PathChange          Set Dir1 path to path of File1.
     Drive1_Change             Set directory path to new drive.
     Text1_GotFocus            Highlight contents of Text1 box.
     Text1_KeyPress            Intercept and preclude all input charac-
                               ters not 0-9, backspace or period.
     Configure_Path            Place current directory in label5.
                               Abbreviate if necessary.
     Configure_File            Configure directory path and filename of
                               file to be opened or saved. Pass it to
                               Command1_Click.

     Print.frm
     ---------

     Form_Load                 Center form, set initial value for text1
                               box and highlight it.
     Command1_Click            OK button clicked. Start printing.
     Command2_Click            Cancel button clicked. Cancel request to
                               print report.
     Timer1_Timer              Prints report to active printer.
     Text1_KeyPress            Ensures only 2 characters appear in
                               Text1 box.
     Text1_GotFocus            Highlights contents of Text1 box.
     Text1_Change              Counts number of characters in Text1 box.
                               Passed on to Text1_KeyPress.
     Print_Log_Heading         Prints heading part of report.


     Wrk.Bas
     -------

     Calculate_Time            Calculates session time after Run+Stop
                               of Wrk_Time.frm is chosen or VBW is

				- Page 37 -

                               ready to exit. Results are displayed
                               and added to total time.
     Reset_Info                Clears log data, including client's
                               name, in Text2 box of Wrk_Time.frm.
                               Then go to Get_Log_Info.
     Check_FileName            Ensures a valid DOS filename is saved.
     Handle_File               Will go to Save_File if file has logged
                               time or client's name has changed.
     Enable_Options_Controls   Set visible, enabled and tabindex
                               properties of all controls in Wrk_Open.frm.
     Save_New_File             Prompts user to save a new file.
     Save_File                 Saves changes to an existing file. If file
                               is new, go to Save_New_File. If file is
                               an existing file is loaded, prompt user
                               first.
     Get_Log_Info              Get contents of variables to be saved when
                               user chooses to save a file.
     Update_Exefiles_List      If any changes were made to variables
                               stored in the external program file, save
                               them. Occurs when exiting VBW.
     Stop_Timer_For_Menu_      Stop timing a session, then go to Calculate_
     Choice                    Time. Occurs only when log window is hidden
                               and user wants to exit VBW.
     Title_MsgBox              Displays either Title box or About box.
     Display_Costs             Calculates total client cost and displays
                               it in log window.
     Open_File                 Opens chosen client file. Enacted by File+
                               Open in log window. If File+Save in log
                               window is chosen and an existing file is
                               loaded, the file's contents are updated
                               on-screen.



     Form              FormName          Module           Module Name
     -----------------------------       ----------------------------

     Wrkbench.frm      Wrkbench          make             Wrkbench.mak
     Wrk_Open.frm      WorkOpen          module           Wrk.bas
     Wrk_Time.frm      WorkTime          global           Glbl_Wrk.bas
     Openbox2.frm      Openform
     Print.frm         Prntform

				- Page 38 -

     CRYPTOKEY
     =========

     Cryptokey is a multiple form application that operates as a Windows
     front end for PC Merlin v2.0+ for DOS. PC Merlin is not included
     with VB_APPS. Contact your favorite shareware vendor or BBS for
     more information.

     Cryptokey is an example of how to design a front end for a DOS
     program. Cryptokey is useful to current owners of PC Merlin that
     use Windows but prefer to retain files encrypted by PC Merlin.

     Cryptokey (ckey) configures the DOS command line for PC Merlin and
     passes it to PC Merlin; it does not cipher any files. The command
     line is long. The advantage of ckey is the speed at which you can
     configure and pass the command line to DOS. Only a correct command
     line is passed to PC Merlin. A typical command line:

       merlin c:\dos\hello.txt c:\winword\ /e /k:password /b /s /m:cbc

     The command line can be much longer if either directory path is
     longer, a new name for a file is included in the destination path,
     the key phrase (password) is longer, or vector switch (/v: ...) is
     included.

     Configuring the command line is easy. On start up, EnGarde prompts
     you for your password (see EnGarde, page 15). Note: the originally
     set password is "1234", not including the quotation marks.  Next,
     the main window appears on-screen. You can insert the source file
     (and path if necessary), then insert the entire destination
     directory (i.e. "c:\winword\workfile\"). Note that "\" is the last
     character of the path unless a new filename is included.

     Or, choose File + Choose Files to open the Source File dialog box.
     This dialog box is a modified open dialog box.

     Note that this dialog box is similar to a Windows 3.1 open dialog
     box. You can double click on the directory box to go to another
     directory. You can also click on the file box to choose a file,
     whose name will appear in the file name text box. You can also
     double click on the file box to pass the file name to Ckey.

     There are two differences in this dialog box. You can insert a new
     name for the file chosen by inserting it into the rename text box.
     A path command button is also included. Normally, users can click
     the OK button to go to a new path if it is inserted into the file
     name text box. But, PC Merlin can cipher one or more files by
     including wild cards in the source path. So, to go to another path
     without passing it to the command line, users can click the path
     button or double click on the directory box. To pass the a path,
     a file, or wild card options to the PC Merlin command line, click
     the OK button.

				- Page 39 -

     Once a source file(s) is chosen, a message box will prompt you to
     decide if the source and destination paths are the same. If you
     choose the YES button, the source file(s) are inserted in the
     source file name text box in the main window and the same path
     is also inserted into the destination path text box. Choose the
     NO button to display the destination dialog box.

     The destination dialog box is also similar to a basic Windows open
     dialog box. Note that this dialog box does not include a file box
     (you must only pass a drive and/or directory path as a destination
     of the source file(s).

     There are also other differences. The text box is labeled "Path".
     Users can insert a new path to go to or to pass to the command line.
     If the text box is empty when the OK button is clicked to pass the
     path to the destination path box in the main window, the current
     path is passed.

     A Get button is also included. It performs the same function as
     the path button in the source file dialog box.

     Note that a new filename, if any, for the source filename is
     appended to the destination path automatically after a destination
     path is chosen.

     Once a source file and destination path are entered, insert the
     password. Ckey is set for a password that must be at eight to 64
     characters long, in accordance with PC Merlin instructions. You
     can alter the password code to include an 8 byte hexadecimal value
     also. See Check4_Click procedure in the ckey.frm which verifies
     the initialization vector. The vector is an 8 byte hexadecimal
     value.

     Next, choose an encryption method by clicking on either method
     option button.

     Next, you can choose an option from the Option frame box. The
     three options are switches: a)secure erase will erase the file
     from the source path if it is not the same as the destination
     path; b) brief mode will suppress on-screen information, there-
     fore increasing speed of ciphering; and c) vector will allow
     user to choose another initialization vector if the encryption
     mode is not equal to ECB.

     Finally, choose one of eight encryption modes. The default is ECB.
     Now the command line is configured. The process becomes fast after
     several uses.

     You can review the entire command line, after it is configured,
     by choosing File + View.

				- Page 40 -

     Click the OK button to pass the command line to PC Merlin. Note
     that PC Merlin must be located at the root directory of the same
     drive as Ckey. Make sure that ckey.pif is located in the same
     directory as Ckey or in the same directory as your Windows system
     files. Ckey.pif will run PC Merlin in a DOS minimized window.

     Do not operate Ckey or any other application until PC Merlin ends
     operation. If the command line is incorrect, Ckey will intercept
     it and inform the user which command line parameter is incorrect.

     The tables for Cyptokey controls and procedures follow.


     Controls            CtlName property          Caption property
     -----------------------------------------------------------

     Ckey.frm
     --------

     Text box            Text1
     Text box            Text2
     Text box            Text3
     Label               Label1                    &Source File Name
     Label               Label2                    &Destination Path
     Label               Label3                    &Password
     Command button      Command1                  &Run
     Frame box           Frame1                    &Encryption Method
     Frame box           Frame2                    &Options
     Frame box           Frame3                    Encryption Mode
     Check box           Check 2                   Secure Erase
     Check box           Check 3                   Brief Mode
     Check box           Check 4                   Vector
     Option button       Option 7                  Encryption
     Option button       Option 8                  Decryption
     Option button       Option 9                  ECB
     Option button       Option 10                 CBC
     Option button       Option 11                 CFB
     Option button       Option 12                 CFB8
     Option button       Option 13                 OFB
     Option button       Option 14                 OFB8


     Newbox.frm
     ----------

     Text box            Text1
     Text box            Text2
     Label               Label1                    File &Name
     Label               Label2                    R&ename
     Label               Label3                    &Files

				- Page 41 -

     Label               Label4                    &Directories
     Label               Label5                    D&rives
     Label               Label6
     File box            File1
     Directory box       Dir1
     Drive box           Drive1
     Command button      Command1                  &Ok
     Command button      Command2                  &Cancel
     Command button      Command3                  &Path


     Destbox.frm
     -----------

     Text box            Text1
     Label               Label1                    &Path
     Label               Label2                    &Directories
     Label               Label3                    D&rives
     Label               Label4
     Directory box       Dir1
     Drive box           Drive1
     Command button      Command1                  &Ok
     Command button      Command2                  &Get



     Procedure                 Description
     ----------------------------------------------------------------

     Ckey.frm
     --------

     Command1_Click            Run button clicked. Pass valid command
                               line to PC Merlin.
     Menu_FileSelection_Click  Chooses a file menu command.
     Menu_HelpSelection_Click  Shows Help file with registration info
                               or About box.
     Form_Load                 Run EnGarde code, center form and set
                               initial values for PC Merlin switches.
     Form_Unload               End Ckey if system menu Close command
                               clicked.
     Timer1_Timer              Hide on-screen PC Merlin operation
                               reminder message and set focus on text
                               one box.
     Check2_Click              Sets the secure erase option.
     Check3_Click              Sets the byte suppression option.
     Check4_Click              Sets the initialization vector option.
     Check7_Click              Sets the encryption method to encrypt.
     Check8_Click              Sets the encryption method to decrypt.
     Check9_Click              Sets the encryption mode to ecb.
     Check10_Click             Sets the encryption mode to cbc. 
     Check11_Click             Sets the encryption mode to cfb.

				- Page 42 -

     Check12_Click             Sets the encryption mode to cfb8.
     Check13_Click             Sets the encryption mode to ofb.
     Check14_Click             Sets the encryption mode to ofb8.
     Text1_Change              Informs ckey that a new filename is
                               entered.
     Text1_GotFocus            Highlights contents of text box.
     Text1_Keypress            Intercepts space bar entry to preclude
                               this error.
     Text2_Change              Compares source and destination paths.
                               Sets secure erase option accordingly.
     Text2_GotFocus            Highlights contents of text box.
     Text2_Keypress            Intercepts space bar entry to preclude
                               this error.
     Text3_GotFocus            Highlights contents of text box.
     Text3_Keypress            Intercepts space bar entry to preclude
                               this error.
     Validate_DestPath         Ensures that a valid destination path
                               is entered in text 2 box.
     Set_Cursor_Focus          Set focus on text box with invalid
                               command line parameter if error occurs
                               when OK button is clicked.
     Validate_SourcePath       Verify existence of source path and
                               file(s).
     Configure_Command_Line    Configures command line for PC Merlin.
     Operate_Merlin            Run PC Merlin in minimized window.
     Title_MsgBox              Displays either Title box or About box.


     Newbox.frm
     ----------

     Command1_Click            OK button clicked. Pass source file
                               name to ckey.frm and new filename, if
                               any, to destination path.
     Command2_Click            Cancel button clicked. Close newbox.frm
                               and cancel any choices.
     Command3_Click            Path button clicked. Change to a new
                               drive and/or directory path.
     Form_Load                 Pass new pattern from text2 box to file1
                               box and highlight contents of text2 box.
     Dir1_Click                Go to Check_Dir1 procedure.
     Dir1_Change               Set file1 path to new directory path.
     File1_Click               Filename chosen. Display filename in
                               text2 box.
     File1_DblClick            Filename chosen. Go to Command1_Click.
     File1_PatternChange       Pass new pattern from text2 box to file1
                               box.
     File1_PathChange          When path changes, put pattern in text2
                               box.
     Drive1_Change             Set Dir1 path to new Drive1 path.
     Text2_Change              Check for a pattern or filename and set
                               text3 box accordingly.

				- Page 43 -

     Text2_GotFocus            Highlights contents of text box.
     Text2_Keypress            Intercepts space bar entry to preclude
                               this error.
     Text3_GotFocus            Highlights contents of text box.
     Text3_Keypress            Intercepts space bar entry to preclude
                               this error.
     Hilite_Text2Box           Intercepts space bar entry to preclude
                               this error.
     Sort_Destination_File     Configures destination path and passes
                               it to ckey.frm if source path is equal
                               to destination path.
     Sort_Source_File          Configures source path (and pattern or
                               filename) and passes it to ckey.frm.
     Config_Dirfile            Configure source path and filename.
                               Verify its existence.
     Path_Err_Msg              Display error message if invalid path
                               is entered and path button is clicked.
     Check_Dir1                Puts directory box selection in text2
                               box in preparation for a path change.
     Configure_Path            Display current path in label 6.



     Destbox.frm
     -----------

     Command1_Click            OK button clicked. Pass the current path
                               to ckey.frm text1 box.
     Command2_Click            Get button clicked. Changes the path.
     Form_Load                 Center form, go to Config_DestPath
                               procedure and highlight contents of
                               text1 box.
     Dir1_Click                Go to Check_Dir1_Too procedure.
     Dir1_Change               Go to Config_DestPath, then Check_Dir1_Too
                               procedures.
     Drive1_Change             Set Dir1 path to new Drive1 path.
     Hilite_Text1Box           Set focus on and highlight contents of text
                               box.
     Text1_GotFocus            Highlights contents of text box.
     Text1_Keypress            Intercepts space bar entry to preclude
                               this error.
     Check_Dir1_Too            Puts directory box selection in text1
                               box in preparation for a path change.
     Config_DestPath           Display current path in label 4.
     Sort_Dif_Destination_File Configures destination path (and new
                               filename, if any) and passes it to
                               ckey.frm.

				- Page 44 -


     Ckeymdl.bas
     -----------

     Validate_NewFileName      Ensures that new filename is in valid
                               DOS format.
     Invalid_NewFileName       If invalid new filename, set focus in
                               text3 box of newbox.frm. If invalid
                               source filename, set focus in text2 box
                               of newbox.frm.



 
     Form              FormName          Module           Module Name
     --------------------------          ----------------------------

     ckey.frm          ckey              make             nowtimer.mak
     newbox.frm        newbox            module           ckeymdl.bas
     destbox.frm       destbox           global           ckey.bas

				- Page 45 -

     SECTION FOUR
     =============

     Visual Basic Functions
     ======================

     As a VB user, I have found some interesting methods and quirks
     while using Visual Basic.  Sharing these not so secret tips will
     hopefully help you.  Note that the following solutions may be
     expressed in many lines of code.  This is so you can easily
     comprehend the solutions.  You can rewrite them as fewer lines of
     code if necessary.  As Visual Basic users, you may have already
     discovered some of these.

     ******************************************************************
       Note that " --> " means that this line of code is connected to
              previous line of code; do not separate as shown.
     ******************************************************************

     Ending a program with the main window SysMenu "CLOSE"
     -----------------------------------------------------

     Ending a program with loaded but non-visible forms
     -------------------------------------------------

     Choosing SysMenu "CLOSE" of the main window will unload that window.
     Loaded but non-visible forms will not unload automatically.  The
     program will continue in run mode.  Programs converted to executable
     files will appear to end.

     To exit the program, simply type the END command in the Sub Form_
     Unload (Cancel As Integer) procedure of the main window.


     Ending a program with loaded, visible forms
     -------------------------------------------

     Again, simply type the END command in the Sub Form_Unload (Cancel
     As Integer) procedure of the main window.  This unconditionally
     exits the program - no changes are saved.

     To save any changes, write code to branch to code that will save
     changes.  Example:

	The VB Workbench program queries the user to save a new file
        or any changes to an old file.  See the code in the Sub Form_
        Unload (Cancel As Integer) procedure.  If a change occurs and
        the user chooses yes, it will automatically branch to a pro-
        cedure to save changes to an old file or branch to another
        procedure and allow the user to save a new file.

				- Page 46 -

     Removing System Menu Commands
     -----------------------------

     The SysMenu command captions are shown below in Figure 1 with their
     corresponding indices.  When you use DLLs to remove one or more
     controls, beware.

     The minimize and/or maximize caption(s) will not appear in the
     form's SysMenu if the MIN and/or MAX property is set to False.
     But all indices remain the same.

     Example: In figure 2 the MAX property of the form is set to False.
     Since the indices remain the same, the DLL code to remove the Close
     and hyphen captions remain the same:

	R = RemoveMenu (HSysMenu, 6, MF_ByPosition)
	R = RemoveMenu (HSysMenu, 5, MF_ByPosition)

     See the Windows Programmer's Reference or ICONWORKS code for the
     API declarations to add/delete System Menu commands.

	Figure 1.				Figure 2.

	0	Restore				0	Restore
	1	Move				1	Move
	2	Size				2	Size
	3	Minimize			3	Minimize
	4	Maximize			5 or 7	-
	5	-				8	Switch To...
	6	Close
	7	-
	8	Switch To...	



     VBRUN100.DLL and distributing software
     --------------------------------------

     You probably know by now that any program that you develop with
     Visual Basic can run in any directory on your computer without
     needing VBRUN100.DLL in the same directory.  The program will
     first search for VBRUN100.DLL in the same directory, then look
     for the "VB" directory.  This is an important issue when
     distributing programs.  Of course, all programs for distribution
     should include VBRUN100.DLL.

     Exceptions are if the user has Visual Basic or other programs
     developed with it.  If the user has Visual Basic, VBRUN100.DLL
     must be in the "VB" directory, which cannot be in any sub directory.
     If the user has other programs developed with Visual Basic, but
     not Visual Basic, they can save the trouble of putting two or
     more copies of VBRUN100.DLL on their hard drive.

				- Page 47 -

     Simply create a directory named "VB" at the root directory of their
     hard drive and move VBRUN100.DLL into that directory.  Then add "VB"
     to the PATH command of the autoexec.bat file.  All Visual Basic
     programs will find it and operate correctly.


     Adding existing files to your project
     -------------------------------------

     When you add an existing file to your current project, the current
     project and the project that originally contained the file will
     share this file.  To avoid conflicts, save the file (File + Save
     File As...) immediately after adding a file.

     Then choose File + Save Project to isolate the added file into
     your current project. Also change the Form Name to eliminate
     confusion of identical file names.  Choose FormName from the
     Properties drop down box.  Remember to rename all code that
     referred to the name(s) of non-existent forms.  Do this by
     choosing Code+Replace and click on the Module level check box
     before choosing OK.  Now you can edit the added file.

     Visual Basic will let you know the path and name of the added file
     until you close the project or code window.  Look at the title bar
     of the code window of this file.


     Designing Icons
     ---------------

     It is a good idea to design objects with black or dark borders
     when designing icons.  Users will be able to see objects regardless
     of the desktop background color in use.  Notice that most icons
     included with Visual Basic have objects with borders.


     Your Apps and the run command line
     ----------------------------------

     When starting your App from DOS or the Windows File or Program
     Manager, you must include the path with the filename unless you
     are in the directory that has this App.  You can avoid this if
     your program is in the path specified in your autoexec.bat file.
     If your App has an external file or help file, you must include
     the path unless you are in the directory that has this App.

     Example:   You may have several VB Apps in the VB directory.  When
                you start one of these Apps from the run command line,
                you did not include a path.  The installation program
                of VB appended its path to the PATH command in your
                autoexec.bat file.  But wait.  Move one App to a

				- Page 48 -

                directory whose path is not included in the PATH
                command.  Try to start this App from a run command
                line.  An error occurs.  Now include its path on the
                run command line and presto...the App runs.

     This is an important point to remember.  Your users must be informed
     of this, even if your installation program appends the PATH command
     of the autoexec.bat file.  A user may delete the path for your App
     from the autoexec.bat file.


     Some guidelines for making help files
     -------------------------------------

     When using Microsoft's Help Compiler for Visual Basic, always give
     every topic a title.  If not, the Windows Help Engine will call
     this topic untitled. Under Windows 3.1+ this may render the History
     button useless.  Users will not have a title to correspond to the
     topic - only "Appname: (untitled)" will appear in the History
     window, where Appname is the name of your App.  Also, when you
     printout  the  topic,  the  Print  dialog  box  will  state 
     "Printing...(untitled)".


     ******************************************************************
       Note that " --> " means that this line of code is connected to
              previous line of code; do not separate as shown.
     ******************************************************************

     DLL to abort printing on dot matrix printers
     --------------------------------------------

     This code aborts the current job sent to the printer. Declare the DLL
     and constants at the global or module level.  Then prepare to get
     the current active port with the second DLL listed below.  Place
     the remaining three lines of code in a procedure that will abort
     a print job.

     Note that Curport$, the variable to get the port, is valid only
     for LPTx or COMx. To get the OS2, FILE or EPT port, use "Code
     AnyPort" below instead of "Code LPTPort".

        Declare Function Escape Lib "GDI" (ByVal hDC As Integer, ByVal
        -->  nEscape As Integer, ByVal nCount As Integer, lplnData As Any,
        -->  lpOutData As Any) As Integer

        Declare Function GetPrivateProfileString Lib "KERNEL" (ByVal
        -->  App$, Key As Any, ByVal Default$, ByVal ret$, ByVal Size%,
        -->  ByVal filename$) As Integer

        Const ABORTDOC = 2

				- Page 49 -

     Get the current active port; call the 2nd DLL immediately
     proceeding start of print job. Then store CurPort$.

     "Code LPTPort"

     portline$ = Space$(81)
     gotport% = GetPrivateProfileString("Windows", ByVal "device",
      -->   "", portline$, 80, "WIN.INI")
     For inn% = 1 To 80
        If Mid$(portline$, inn%, 1) = Chr$(0) Then Mid$(portline$,
        -->  inn%, 1) = ","
     Next inn%
     'declare variable locally or globally
     CurPort$ = Left$(Right$(RTrim$(portline$), 6), 5


     3 remaining lines of code are placed in procedure where user will
     activate abort.

     winprintnum% = Printer.hDC	  'gets the current active printer handle
     glad% = Escape(winprintnum%, ABORTDOC, 0, CurPort$, "")
     'tells Win/3 to end doc and allow further access to printer
     '(resets access)
     Printer.EndDoc


     "Code AnyPort".  This is code to retrieve name of port, regardless
                     of length of characters

     mptr = 1
     sptr = 1
     portline$ = Space$(81)
     gotport% = GetPrivateProfileString("Windows", ByVal "device", "",
                -->   portline$, 80, WinIni$)
     For inn% = 1 To 80
        If Mid$(portline$, inn%, 1) = Chr$(0) Then Mid$(portline$, inn%,
           -->   1) = ","
     Next inn%
     sptr = Instr(mptr, portline$, ",")
     mptr = sptr + 1
     sptr = Instr(mptr, portline$, ",")
     mptr = sptr + 1
     sptr = Instr(mptr, portline$, ",")
     CurPort$ = RTrim$(Ltrim$(Mid$(portline$), mptr, sptr - mptr)))

				- Page 50 -

     Saving files under the DOS format
     ---------------------------------

     This code ensures that only valid DOS filenames are saved. A save
     dialog box calls this procedure. Text1 box is in that dialog box
     and has the name of a file to be saved. "GoodName$" is a global
     variable. Code assumes no space character input is allowed and
     only a three character extension is valid. For more code to handle
     any valid DOS filename, see Validate_NewFileName in ckeymdl.bas
     module of ckey.exe.

     Sub Check_FileName ()
         'If no file name is inserted in text box, file name is bad.
         If Text1.Text = "" Then Go To Err_Filename    
         'First, look for period character that signifies existence
         'of an extension.
         getprd% = InStr(1, Text1.Text, ".")
         'If only an extension exists, file name is bad.
         If getprd% = 1 Then Go To Err_Filename
         'If none, add an extension (".xxx" is your program's extension).
         If getprd% = 0 Then Text1.Text = Text1.Text + ".xxx"
         'Get character length. If it is more than 12, file name is bad.
         Geo% = Len(Text1.Text)
         If Geo% > 12 Go To Err_Filename

         'Search each character and limit each to a-z or 0-9, except
         'period that signifies an extension.
         For jn% = 1 To Geo%
             Srch$ = Left$(Text1.Text, jn%)
             Chk$ = LCase$(Right$(Srch$, 1))
             If (Chk$ < LCase$("a") Or Chk$ > LCase$("z"))
             -->   And (jn% <> Geo% - 3) Then
                 If (Chk$ < LCase$("0") Or Chk$ > LCase$("9"))
             -->   And (jn% <> Geo% - 3) Then
                     Go To Err_Filename
                 End If
             End If
         Next jn%

         'If file name is valid, set to inform application.
         Goodname$ = "1"
     Exit Sub

     Err_Filename:	'Error code to execute if file name is bad.
         Beep
         Msg$ = "Invalid file name.  Valid name has 8 characters "
         Msg$ = Msg$ + Chr$(13) + "maximum and '.xxx' extension"
         MsgBox (Msg$), 48, yourprogramname$
         'If file name is invalid, set to inform application.
         Goodname$ = "2"
     End Sub

				- Page 51 -

     Setting text boxes to limit user input
     --------------------------------------

     The following code allows input of up to an (x) amount of characters
     in a text box.  In the first example below, only a maximum input of 4
     characters is possible.  The TextX_Change and TextX_KeyPress(KeyAscii
     As Integer) procedures are required. Declare (a!) globally or locally.

     Sub Text1_Change ()
         a! = Len(Text1.Text)
     End Sub

     Sub Text1_KeyPress (KeyAscii As Integer)
        If a! = 4 Then
           'Backspace character is within parenthesis.
           If KeyAscii <> Asc("") Then
               KeyAscii = 0
               Beep
           End If
        End If
     End Sub


     In the next example, a maximum of one character can be displayed
     in the Text1 text box and it is highlighted.  This example is used
     in Asckey.

     Sub Text1_Change ()
        Text1.SelStart = 0                  'Highlights text1 box every time
        Text1.SelLength = Len(Text1.Text)   'a valid key is pressed.
     End Sub

     Sub Text1_KeyPress (KeyAscii As Integer)
        cbs$ = Chr$(Ascii)          '1st 3 lines store key input, clears
        Text1.Text = ""             'text1 box and displays key input;
        Text1.Text = cbs$           'ensures only 1 char will display.
        '
        '                           'Same code as in Asckey procedure.
        '
     End Sub


     In the final example, Text2 text box allows a maximum of three
     characters.  When the corresponding Command button is clicked,
     the characters are automatically deleted and the text box resets
     for another set of characters, with a maximum of three. This
     example is also used in AscKey. Declare charnum! and charcnt!
     globally or locally.

     Sub Text2_Change ()
        charnum! = Len(Text2.Text)
     End Sub

				- Page 52 -

     Sub Text2_KeyPress (KeyAscii As Integer)
       'If key pressed <> backspace and <> to a number then kill it.
       'Backspace character is within parenthesis.
       If KeyAscii <> Asc("") Then
          If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then
              KeyAscii = 0
              Beep
              Exit Sub
          End If
       End If

       'If 3 numbers are in text2 box and command1 button pressed then
       'store key input, clear text2 box and display key input;
       'reset counters.
          If charnum! = 3 And charcnt! = 1 Then
              atm$ = Chr$(Ascii)
              Text2.Text = ""
              Text2.Text = atm$
              charnum! = 1
              charcnt! = 0
          End If

       'If 3 numbers are in text2 box kill all input except backspace key.
       If charnum! = 3 Then
          'Backspace character is within parenthesis.
          If KeyAscii <> Asc("") Then
              KeyAscii = 0
              Beep
          End If
       End If
     End Sub

     For...Next Loops
     ----------------

     The range of counting in Visual Basic For...Next loops is X1 to Xn,
     where X1 is the first number to start the counter and Xn is the
     last number.  Note that if Xn > X1, then Xn must be the last number
     you want the counter to end at, minus one.

     Example:  the range you want is 1 to 4.  Set the counter at 1 to 3.
               The For...Next loop will loop four times.


     Mathematical functions and Visual Basic variables
     -------------------------------------------------

     When performing math functions, be careful.  For instance, if you
     are dividing two numbers and want the answer to be a fraction, do
     not use integer variables (variable%).  Use long (variable!). Use
     of integer variables will result in integers. This was not obvious
     to me for quite a while.

				- Page 53 -

     Code that unconditionally branches to other procedures
     ------------------------------------------------------

     When developing applications, be aware of code that may branch
     unconditionally to another procedure.  Note the use of certain
     commands, especially on application start up (which will slow
     down start up).

     The code below will branch to another procedure.  After executing
     the procedure, Visual Basic returns and resumes execution with the
     next command.  Again, give special attention to below code when
     including it in the Form_Load() procedure of any form.

     Move...			'Any of these commands will branch to
     FormX.Width = Y1		'the Form_Resize procedure. Combine
     FormX.Height = Y2		'the last 4 commands into one Move
     FormX.Top = Y3		'command to only cause one branching.
     FormX.Left = Y4

     ComboX...   [X is Combo control number (i.e. Combo2.  "..." is
                 a control property (i.e. ListIndex.  A typical
                 command is Combo2.ListIndex]
                 This code will branch to the ComboX_Click procedure.

     ListX.ListIndex = Y [X is the List control number and Y is the
                         index number of the control]
                         This code will branch to the ListX_Click
                         procedure.

     File1.FileName = Text1.Text    'will branch to File1_DblClick
                                    'procedure. Usually used in an open
                                    'or save dialog box with a file box,
                                    'directory and drive boxes, and a
                                    'text box.

     Dir1.Path = XXX        'will branch to Dir1.Change procedure.


     Handling long directory path names in dialog box label captions
     ---------------------------------------------------------------

     This code abbreviates long directory paths listed in a label
     on open and save dialog boxes. Assume current directory path
     is listed in label 5. Note that tgf% equation automatically
     sets the character limit for a label of any width. Characters
     must be in lowercase.  To use uppercase, set denominator in
     tgf% equation to a higher number (experiment!).

     The abbreviated directory path removes the leftmost part of the
     path and shows the current working path.  For example, if the
     current path is

				- Page 54 -

           c:\dos\mathman\integer\fraction

     and its length is to long for label 5, it can be abbreviated
     to resemble abbreviated paths seen in most Windows dialog boxes.
     The path may appear as:

           c:\...\integer\fraction

     You can alter the code to remove the rightmost or any part of the
     path.  Do not remove the current working sub-directory.

     'See this code in the options.frm of Openup, the wrk_open.frm of
     'VBW. This code is altered in Openup and the wrk_open.frm of VBW
     'to include a preceding caption and/or trailing filename.

     Sub Configure_Path ()
         k$ = Right$(Dir1.Path, 1)

         'If the root directory is the current path then display it.
         If k$ = "\" Then
             Label5.Caption = Dir1.Path

         'Else, make sure directory path string fits in label 5. If
         'not, abbreviate it.
         Else

             'Set maximum number of characters to appear in label 5.
             tgf% = Fix(Label5.Width / 110)

             'Get length of entire string initially targeted for
             'label 5 to compare to tgf%
             kmd% = Len(Dir1.Path)

             'Set space allocated for directory path if it must be
             'abbreviated.
             mvn% = tgf% - 2

             'If length of initial caption >= available maximum
             'caption space, it will not display properly. Execute
             'code in If...Then statement.
             If kmd% >= tgf% Then

                 'Get total amount of directory path characters that
                 'will fit in space allocated for it.
                 jfg$ = Right$(Dir1.Path, mvn%)
                 sdfgk! = Len(jfg$)
                 getchar! = 1

				- Page 55 -

                 'Loop to knock off leftmost directory path characters.
                 'Abbreviation must at least show current directory.
                 Do Until (qpb$ = "\") Or (getchar! = sdfgk! + 1)
                     wwm$ = Left$(jfg$, getchar!)
                     qpb$ = Right$(wwm$, 1)
                     getchar! = getchar! + 1
                 Loop

                 'Get the longest valid rightmost directory path.
                 ccb$ = Mid$(jfg$, getchar!, sdfgk!)

                 'Show abbreviated path in label 5.
                 If getchar! = sdfgk! + 1 Then
                   Label5.Caption = Left$(Dir1.Path, 2) + "\...\" + ccb$
                 Else
                   Label5.Caption = Left$(Dir1.Path, 2) + "\...\" + ccb$
                 End If

             'If length of initial caption < available maximum
             'caption space, display entire directory path.
             Else
                 Label5.Caption = Dir1.Path
             End If
         End If
     End Sub

				- Page 56 -

     SECTION FIVE
     ============

     Other Software by Resolutions Now
     ---------------------------------

     Raffle Do
     ---------

     Raffle Do outputs raffle ticket templates to laser printers.
     Raffle Do also includes Numset (see information below).
     Additional features include:

     - Choose either 4x1UP or 4x2UP raffle ticket template. 4x1UP
       template has four large tickets; 4x2UP template has eight
       smaller tickets.
     - Print up to one million tickets, numbered 0 to 999999.
     - You can start at any number between (0 and 999996) and end
       at any number between (3 and 999999).
     - One of the best advantages of Raffle Do is its ability to print
       only one template for replacement purposes. Don't worry when
       one or more templates become unusable. Simply print backup
       copies of one or more templates.

     Numset is an automated numbering system. Numset is an alternative
     to small numbering machines & can perform many of the same tasks.

     - You can sequentially number any sheet that will run through you
       laser or compatible printer.  The range is 0 to 999999.  Number
       documents, self-adhesive labels, pictures, tickets, forms, etc.
     - You can repeat a sequence of numbers up to 9999 times.
     - You can skip a number (print only all even or all odd numbers).
     - Numbers can have the same type of number format as raffle
       tickets (leading zeros without "No.")
     - All numbers can have leading and trailing text.


     To order Raffle Do, choose Registration from the Help menu of any
     VB_APPS application. Search for "RaffleDo Registration" to display
     registration information.  Read the registration information, then
     go to the Payment Form.  Choose Print Topic from the File Menu of
     the help window to get a printout.  Follow instructions listed on
     the form.  An invoice is also available.

     Or to order, you can get a printout of this manual. Registration
     information is on page 58 and the payment form is on page 59.
     Follow the instructions listed on those two pages.

				- Page 57 -

     INSTALLZ
     ========

     Installz is a basic installation utility for programmers and all
     DOS users alike. DOS users can run Installz to delete unwanted
     files and its directory, then make a directory and copy files in
     one step. Programmers will also like features that install files
     from one or more disk and uninstallation. Forget about programming.
     Get advantages of an installation program designed for average DOS
     users. Uses DOS COPY or PKUNZIP.

     Installz is an executable (.exe) application that is more secure
     and faster than batch files. Installz is only about 50 kilobytes.

     - Use familiar step by step installation screens or quick command
       line entry.
     - Install files on any drive or directory.
     - Copy files from any drive or directory.
     - Instantly make a destination directory.
     - Ensures that valid source and destination paths are entered.
     - Install files from one or more floppy disk(s).
     - Delete all files in a directory before installation.
     - Delete all files and remove its directory (uninstallation).

     The only limitations are that Installz cannot be customized and
     users cannot write to files or retrieve file size. Installz will
     copy all files located in the source directory unless PKUNZIP is
     used.

     Evaluate Installz. VB_APPS includes Installz as its installation
     program. The Installz instruction manual is not included with
     VB_APPS, so first read information in the Installz on-disk help
     section. At the DOS prompt of the directory with Installz, type
     INSTALLZ HELP and press the return key. Review information that
     is available through menu options 1, 2, and 4.


     To order Installz, choose Registration from the Help menu of any
     VB_APPS application. Search for "Installz Registration" to display
     registration information. Read the registration information, then
     go to the Payment Form. Choose Print Topic from the File Menu of
     the help window to get a printout.  Follow instructions listed on
     the form. An invoice is also available.

     Or to order, you can get a printout of this manual. Registration
     information is on page 58 and the payment form is on page 59.
     Follow the instructions listed on those two pages.

				- Page 58 -

     Registration Information
     ========================

     Note the prices and S&H charges for each title. Use it to fill out
     the payment form on page 59. For more information contact the
     Customer Accts. Dept. When you register, you get these benefits:

     - A registered copy of the software, version 1.0. The unregistered
       and registered copies of Installz (and Raffle Do) include all
       features. A registered copy of VB_APPS includes all code.
     - Free assistance by mail to registered users for 90 days.
     - A 10% discount off the price of the latest version (above 1.0)
       of any software ordered.
     - A 10% discount off the price of the second (or more) Resolutions
       Now registered shareware title. (Example: order Installz and get
       a 10% discount off of Raffle Do and/or VB_APPS, regardless of
       how many titles you order).

     All products and prices are single user. Contact the Customer Acct.
     Dept. for prices for using software on networks. Network users
     qualify for the same on-site duplication prices.

     Product        Quantity      Price Each         S & H (per pkg.)
     ---------------------------------------         ----------------
     VB_APPS        1 - 4         $30.00             $ 3.00 inside U.S.
     version 1.0    5 - 10        $28.00             $ 6.00 to Canada
     (registered    11 - 24       $26.00             $12.00 overseas
     copy)          25 +          $24.00
     ---------------------------------------
     Raffle Do      1 - 4         $50.00             $ 6.00 inside U.S.
     version 1.0    5 - 10        $45.00             $10.00 to Canada
     (registered    11 - 24       $40.00             $20.00 overseas
     copy)          25 +          $35.00

     Printed        1 - 4         $10.00  'manual available only
     instruction    5 - 10        $ 9.00  'with registered copy
     manual for     11 - 24       $ 8.00  'of Raffle Do
     Raffle Do      25 +          $ 7.00
     ---------------------------------------
     Installz       1 - 4         $20.00             $ 2.50 inside U.S.
     version 1.0    5 - 10        $19.00             $ 5.00 to Canada
     (registered    11 - 24       $18.00             $10.00 overseas
     copy)          25 +          $17.00

     On-Site duplication of registered software
     ------------------------------------------
     Product     Price Each            Master Disk
     ----------------------------------------------------
     VB_APPS     Subtract $3.00/copy   1 required: $30.00
     Raffle Do   Subtract $5.00/copy   1 required: $50.00
     Installz    Subtract $2.00/copy   1 required: $20.00

				- Page 59 -

     PAYMENT FORM
     ============

     To order any Resolutions Now product, complete this form and mail it
     to the address below. Use only a street address for mailing. We can
     not ship products to Post Office boxes.  The method of payment is
     either a check or money order drawn on U.S. accounts only. Make all
     checks and money orders payable to Resolutions Now.  NOTE: Illinois
     residents must add applicable sales tax.

     Date: __________________

     Company: __________________________________________________________
     Name: _____________________________________________________________
     Street: ___________________________________________________________
     City: ______________________________ State: _______________________
     Country: ___________________________________ Zip: _________________
     Phone: Work(_____)___________________ Home(____)___________________
     What did you get a copy of this software from: ____________________
     ___________________________________________________________________


     PRODUCT NAME                     QTY.    PRICE EACH  AMOUNT
     --------------------------------|-------|-----------|------------
     ________________________________|_______|___________|____________
     ________________________________|_______|___________|____________
     ________________________________|_______|___________|____________
     ________________________________|_______|___________|____________
     ________________________________|_______|___________|____________
     ________________________________|_______|___________|____________
                                             |           |
     All sales are final. All orders are     | Sub Total |
     shipped within 3-4 weeks after receipt  |___________|____________
     of order by UPS or U.S. mail.           |           |
                                             | Sales Tax |
     Contact Customer Accounts Dept. for S&H |___________|____________
     fees for bulk orders.                   |           |
                                             | S & H     |
                                             |___________|____________
     Illinois residents must add applicable  |           |
     sales taxes.                            | TOTAL     |
                                             |___________|____________

     Choose disk format: ( ) 5.25" 360K disk(s); ( ) 3.5" 720K disk(s)

     Mail check or money order (payable to Resolutions Now) along with
     this payment form to:

             Resolutions Now
             Product Fulfillment Dept.
             P.O. Box 443
             Blue Island, IL. 60406-0443
