





















          
                                       GAPQBDR
                                          
          
                      Door Interface Module - January 18, 1989
                                          
           A Professional Development Kit For The Professional Programmer
                                          
          
          
                (C) Copyright 1988, 1989 The GAP Development Company
                                          
                                 ALL RIGHTS RESERVED





































                                  TABLE OF CONTENTS
          





                                                                  Page
          
               DESCRIPTION                                           2
               GETTING STARTED                                       3
               COMPILING AND LINKING                                 6
               SYSOP SETUP AND FUNCTIONS                             8
               GLOBAL VARIABLES                                     11
                   CONSTANTS                                        11
                   ANSI CONSTANTS                                   11
                   DOOR.SYS VARIABLES                               12
                       INTEGERS                                     12
                       LONGS                                        12
                       STRINGS                                      12
                   GAPQBDR GLOBALS                                  13
                       INTEGERS                                     13
                       LONGS                                        13
                       STRINGS                                      13
                   GAPDOS.DAT VARIABLES                             13
                   USERS.DAT VARIABLES                              14
                   PCBOARD.SYS VARIABLES                            15
                   PCB USERS VARIABLES                              15
               GLOBAL VARIABLES - ALPHABETICALLY By Type            17
                   CONSTANTS                                        17
                   INTEGERS                                         17
                   LONGS                                            18
                   STRINGS                                          18
               FUNCTIONS AND SUBROUTINES - QUICK REFERENCE          21
               FUNCTIONS AND SUBROUTINES - REFERENCE                22
               REGISTRATION INFORMATION                             41
               GAPQBDR REGISTRATION                                 42
               INDEX                                                43

























          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


                                     DESCRIPTION
                                     -----------
          
          GAPQBDR is a professional development kit for Bulletin Board Door
          programmers.   It can  also be  used to facilitate the writing of
          stand alone  communications programs.   Written entirely in Quick
          Basic (with  a little help from some Assembler support routines),
          it is  fast, reliable,  easy to use, and easy to incorporate into
          the serious programmer's source code.
          
          Features Include :
          
            o  Interfaces with GAP Communications and pcboard.
            o  Full communications support.
            o  Supports CTS checking, even at 300 bps, for error free
               transmissions.
            o  Does not require watchdog or CTTY.
            o  Uses ANSI colors instead of Basic's color statements so the
               sysop sees what the caller sees.
            o  High speed text file display.
            o  Supports ANSI color and ASCII text files with no programming
               effort other than to make a single subroutine call.
            o  Easy to use Random Number Generator.
            o  Informative Status Line display.
            o  Monitors keyboard activity and caller time remaining.
            o  Easy interfacing to BBS system and user files.
            o  Sysop chat with full word wrapping.
            o  Allows the sysop to shell to DOS.
            o  "Remembers" the default drive and directory which prevents
               file access errors.
            o  Credits caller with time spent chatting or while sysop is in
               a DOS shell.
            o  Sysop can twit caller without caller ever knowing the sysop
               is watching.
            o  Caller time can be increased or decreased.
            o  Full programmer control of whether or not to update the BBS
               system files.
            o  Time calculations are not dependent on the "seconds since
               midnight" and are thus unsusceptible to the midnight roll
               over.
            o  Timer routines are hardware independent.
            o  Allows the sysop to override the "more" prompt during file
               shows.
            o  Allows the sysop to "force" a file display.
            o  Automatic detection of multi-user system.
            o  Input routines are consistent throughout the program.
            o  Uses the latest in Quick Basic features.
            o  Extremely easy interfacing to door programs.









                                       Page 2





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


                                   GETTING STARTED
                                   ---------------
          
          GAPQBDR is distributed in archived format.  The contents of the
          archive should be as follows:
          
               GAPQBDR.TXT    -    This documentation.
               GAPQBDR.QLB    -    Library routines for QB environment.
               GAPQBDR.LIB    -    Standard Library routines for BC.
               GAPQBDR.BI     -    Door Interface include file.
               DOOR.ARC       -    Sample program illustrating many of
                                   the features of GAPQBDR.
               FIXDTR.TXT     -    Instructions for making DTR patches.
               READ.ME        -    Any pertinent information which you
                                   should read.
          
          
          If you purchased the source code to GAPQBDR, the following files
          are included in an archive called GAPQBSRC:
          
               GAPQBDR.BAS    -    Basic source
               KEYBRD.ASM     -    Assembler source for keybrd function.
               MAKEQBDR.BAT   -    Batch file for compiling the source
                                   modules and creating libraries.
               QBDRLIB        -    LIB response file.
               QBDRQLB        -    Linker response file.
               SRCREAD.ME     -    Any pertinent information which you
                                   should read.
          
          In addition,  you will  need the  file QB.BI which is distributed
          with the   Microsoft QB disks.  You will also need  a DTR patched
          version of  BCOM45.LIB and  BRUN45.EXE (depending  upon  how  you
          distribute your  executable files).   The GAPQBDR module includes
          routines to  turn DTR  back on  after Basic turns it off when the
          communications port is  closed, however  this  is  an  unreliable
          method of  insuring that  the  modem  will  not  respond  to  the
          momentary drop  of DTR  by dropping  carrier.  Many modems simply
          respond too quickly to the split second drop of DTR.  It would be
          nice if  Microsoft would  leave the  communications port they way
          they found it!
          
          Place the  files in your QB work directory.  Make sure that QB.BI
          is accessible to the compiler.
          
          Throughout this  document, the terms function, routine, procedure
          and subroutine  are used  interchangeably.   However,  pay  close
          attention to  the return  value and  the  examples.    In  QB,  a
          function returns a value, where as a sub program does not.
          
          If you  use an external editor to write your programs, the editor
          must allow  control characters  to be entered and displayed.  The
          ANSI constants  are initialized by literal characters and if your
          editor removes  the ESC  character from  the constants, your ANSI
          displays will be quite messy.



                                       Page 3





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


          If you  are using  the QB  environment, you will need to load the
          door module  along with  your source program.  To do so, type the
          following :
          
               QB door /L GAPQBDR
          
               (where door is the name of your basic source program)
          
          If you  fail to  load the  quick library along with your program,
          you will  receive a  great many  "subprogram not  defined" errors
          when you try to compile or run your program.
          
          We are a firm supporter of declaring all variables prior to their
          use.   Not only  does it  make your  programs easier to debug, it
          makes them  easier   to read   and follow.  We recommend that you
          follow our guidelines and declare all of your global variables at
          the beginning of your program, after including GAPQBDR.BI.
          
          At the  very beginning  of your  program, you  must  include  the
          GAPQBDR.BI file.   Without this file, nothing will work.  It must
          be the first directive in your source file.  To include the file,
          you type the following at the beginning of you source program:
          
               '$INCLUDE: 'GAPQBDR.BI'
          
          Do not  under any  circumstances use the DEF type statements (IE,
          DEFINT A-Z).   This  is the  lazy persons  method of programming.
          Typedef your variables by either declaring them ahead of time, or
          by appending the type after the name (IE, A$, I%).
          
          If you  need to use your own On Error routines, keep in mind that
          when you  initialize the  door, the  On Error  trap will  be  re-
          routed.  If you subsequently change the Error Trap address, it is
          your responsibility to deal with any run time errors.
          
          The user defined keys  of 15, 16, 17, and 18 are reserved for use
          by GAPQBDR.   If  you use  the ON KEY statement with user defined
          keys, remember that the above four keys are RESERVED.
          
          You are now ready to begin your program.  You may now declare and
          initialize your  own variables,  initialize your program, or what
          have you.
          
          The first  thing that must be done prior to using any of the door
          functions, is  to initialize  GAPQBDR itself.   This  is done  by
          making a call to read.cnf.  Read.cnf opens the configuration file
          (the name  of which you pass as a parameter), reads the first two
          lines of  the file,  and sets  the Error  Trap address.   If  the
          configuration file  cannot be  found, the  program will end.  The
          format of the configuration file is as follows:
          
          -----------------------------------------
          c:\gap
          The Crow's Nest



                                       Page 4





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


          The first  line of  the file  is the  path  to  the  BBS  default
          directory.   The second  line is  the  name  of  the  BBS.    The
          configuration file is usually given a name similar to the name of
          your door  program, with  a CNF  extension.   Read.cnf will leave
          this file  open for  your use.   If  you have  any  configuration
          options of  your own,  you may  place them in this file beginning
          with line  3.  Do not read your configuration options until after
          making a  call to  init.door (which should be the second function
          call in  your program).  Upon return from init.door, you are free
          to read  your configuration  options (if any).  At this time, you
          should close the configuration file.  Its file number is #1.
          
          Normally, your  program is  invoked with a command line parameter
          giving the name of the configuration file to use:
          
               (IE, DOOR DOOR.CNF).
          
          You would  use the COMMAND$ function to extract the configuration
          parameter and  then pass  this parameter  on to  read.cnf.   This
          allows the  end user  to use a single program (your program) with
          multiple configuration files.  This is especially important under
          multi-user systems where separate configuration files are needed.
          
          The configuration  file is  opened as  a sequential file so using
          Line Input #1 would be appropriate for reading any data.
          
          If there were no errors, read.cnf will return.  You must now make
          a call to init.door.  Init.door uses the information derived from
          line 1  of the configuration file to open and read DOOR.SYS (GAP)
          or PCBOARD.SYS (PCB)  as well  as the BBS configuration file.  In
          addition, init.door  opens the  communications port (if  a remote
          user is  on), initializes  some global variables, and initializes
          the random  number generator.   If  there is  an error, init.door
          will not return.  Instead it will end the program.
          
          That is  basically all  you have  to do to initialize the GAPQBDR
          module.   When your  program ends,  you  should  clean  house  if
          necessary and  call leave.   Leave closes the communications port
          and any  open files,  sends a sign off message to the caller, and
          then exits to DOS.
          
          Things to remember:
          
            To get  the ball  rolling,  include  GAPQBDR.BI  as  the  first
            directive in your source program.
            
            To initialize  the door,  call read.cnf  with the  name of your
            programs configuration file.  Call init.door.
            
            Call leave when your program is finished.
            
            With the  exception of  file #1  which  is  used  to  read  the
            configuration file  and which  YOU should close, the only other
            file number  which is  hard coded  is  file  #9.  This  is  the



                                       Page 5





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


            communications file.  GAPQBDR uses good programming practice by
            asking Basic  for a file number rather than telling Basic which
            number to use.
            
            All input  and output  should be  performed through the GAPQBDR
            functions.   The sample  program gives  good examples on how to
            accomplish this.
            
            To determine if the BBS is a single or multi user system, check
            the variable called node.  If it is anything other than 0, then
            the BBS is multi-user and you should read/write your data files
            with sharing attributes.
            
            The default mode of operation is GAP mode.  This means that you
            should not  use those  functions which  access PCB  files.   To
            determine if  the BBS  is a  PCB  system,  check  the  variable
            do.pcb. If this is set to 1, then the BBS is PCB and you should
            not access  GAP files.   The variable do.pcb is set to 1 if the
            environment variable GAPQBDR is set equal to PCB.
          
          
          To test  your program,  you  will  need  a  DOOR.SYS (GAP)  or  a
          PCBOARD.SYS (PCB) file  that was  written for  local  exit.    Of
          course, you  can always  modify any  DOOR.SYS file and change the
          first line  so that  it reads COM0:.  In addition, for a GAP BBS,
          the  GAPBBS.CNF   file  must   be   accessible   (PCBOARD.DAT and
          USERS for PCB).   A complete set of sample files are provided for
          testing your program under local mode.  Experience has shown that
          although  the  QB  environment  editor  makes  for  a  cumbersome
          programmers editor,  testing programs  inside QB  is perhaps  the
          easiest and  most efficient  way to  test.   The  environment  is
          wonderful for  catching syntax  errors and even more fantastic at
          allowing the  programmer to  correct those errors and continue to
          run the program.
          
          
                                COMPILING AND LINKING
                                ---------------------
          
          GAPQBDR has already been compiled with the necessary compile time
          switches.
          
          To compile your programs, use whatever switches are required with
          the following commands :
          
               bc doorname;
               link doorname,,NUL.MAP,+gapqbdr
          
               Where doorname is the name of your program.
          
          
          WARNING: Do  NOT, under  any circumstance,  use the  /mbf compile
                   time  switch.    GAPQBDR  expects  all  of  its  numeric
                   variables to  be in  IEEE format.  If you have a need to



                                       Page 6





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


                   manipulate a  PCB data  file (which  contains MBF format
                   numbers), declare  the MBF  fields as  strings  and  use
                   either CVSMBF or CVDMBF to convert the strings. You will
                   see an  example of  this in the record structure for the
                   PCB USERS  file.   The fields  downbytes and upbytes are
                   actually  DOUBLES.  The  field  lastmsg  is  actually  a
                   SINGLE.   To convert downbytes you can use : downbytes =
                   CVDMBF(pcbuser.downbytes). If  you update  this field in
                   the  PCB  USERS  file,  you  can  save  it  by  using  :
                   pcbuser.downbytes = MKDMBF$(downbytes).
                   
                   The Microsoft  Binary format for numbers should never be
                   used. Support for the MBF format will no doubt disappear
                   in future  versions of  QB.   You should  ALWAYS use the
                   latest versions and features of your compiler.
                   
                   IEEE Format  numbers provide  for greater  accuracy  and
                   wider ranges.  They are compatible with assembler and C.
                   They also allow you to use a math coprocessor, if one is
                   available.
                   
                   You should  also use  LONG INTEGERS instead of SINGLE or
                   DOUBLE  precision  numbers  where  appropriate.  A  long
                   integer can  represent a number as great as 2.1 billion!
                   This should  more than  cover your  needs.    Especially
                   since a BBS (door) program rarely uses or has a need for
                   real numbers.
                   
                   If you  are converting an old door program that uses MBF
                   format numbers  in random access files, you will need to
                   use either  the  QB  supplied  conversion  functions  or
                   convert your  random access  data files  to the new user
                   defined binary type record structures.
          
          If you  purchased the source code to GAPQBDR, there are batch and
          response files  to aid  in re-compiling and librarying the source
          modules.




















                                       Page 7





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


                              SYSOP SETUP AND FUNCTIONS
                              -------------------------
          
          These sysop  setup and  function descriptions should be placed in
          the documentation  of your  door program.   You should, of course
          change the setup information to fit your particular needs.
          
          
          
          Door programs written with the GAPQBDR Door Interface Module will
          run on  GAP Communications  version 3  and  greater  and  on  PCB
          version 14 and greater.
          
          To configure the door for a particular BBS setup, a configuration
          file must  be used.   At the very minimum, this file will contain
          two lines.   It  may contain  more than  two,  depending  upon  a
          particular doors  configuration requirements.   The  name of  the
          file is  usually the  same as that of the door program but with a
          CNF extension.   The  minimum requirements  for the  file are  as
          follows:
          
               c:\gap
               The Crow's Nest
          
               The first  line  is  the  full  path  to  your  BBS  default
               directory.   For GAP, this is usually C:\GAP.  For PCB, this
               is usually C:\PCB.  The second line is the name of your BBS.
          
          GAPQBDR will  obtain the  sysop's name from the BBS configuration
          file.
          
          You must  now create a batch file to invoke the door.  This batch
          file is  placed in your BBS default directory.  Such a batch file
          might look like this:
          
               echo off
               cd \gap\doors\tl
               tl tl.cfg
               cd \gap
               gap
          
          As you  can see, the door is invoked by passing the configuration
          file name as a parameter.
          
          You will  also need  to modify your doors menu files and the data
          file that  tells the  BBS what  your doors  are and  the security
          level needed to access them.  For GAP, these are respectively:
          
               DOORM
               DOORMG
               DOORS.DAT
          
          Please refer  to your  BBS documentation  for details on  setting
          these files up.



                                       Page 8





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


          If you  are running  multi-nodes, simply  create a  separate door
          configuration file for each node, and number them.  For instance,
          for a  3 node  system, you might have the following configuration
          files:
          
               TL1.CFG
               TL2.CFG
               TL3.CFG
          
          The only difference between the three would be the 1st line which
          points to the default directory for the particular node.
          
          Multi-user operation  is automatic.   For  GAP, the  presence  of
          DUMMY.LOK in  the MAIN  directory triggers  multi-user operation.
          For PCB, this information is derived from the PCBOARD.DAT file.
          
          The following  files are  read during  door initialization.  They
          must be present or the door will not operate.
          
               GAP                      PCB
               ----------------         ----------------
               DOOR.SYS                 PCBOARD.SYS
               GAPBBS.CNF               PCBOARD.DAT
                                        USERS
          
          In addition,  a particular  door may access the GAP USERS.DAT and
          GAPDOS.DAT files.
          
          The default mode of operation for any door that is developed with
          GAPQBDR is  the GAP  mode.   To run the door under a PCB BBS, you
          must set the following environment variable (in UPPERCASE):
          
               GAPQBDR=PCB
          
          
          
          The following sysop functions are available while awaiting
          keyboard input :
          
                   F5     -  Shell to DOS.
                   F8     -  Twit user and return to BBS.
                  F10     -  Initiate chat with user.
                  CF10    -  Answer user page bell.
                  Home    -  Main user stats.
                  End     -  Displays sysop keys available.
                  PgDn    -  Secondary user stats.
                Up Arrow  -  Increase user's time remaining.
                Dn Arrow  -  Decrease user's time remaining.
          
          
          One of  the nicer  features about using the TWIT key, is the user
          is not  told that  "the sysop  wants them  to return to the BBS".
          Instead, a very plain and simple message of "returning you to the




                                       Page 9





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


          BBS" is  displayed.   This way,  the user  is given no indication
          that the sysop is hovering about.
          
          When using  the F5  shell to  DOS key,  to  return  to  the  door
          program, simply  type EXIT  at the DOS command prompt.  It is not
          necessary to  change directories  back  to  the  door  directory.
          GAPQBDR is  smart enough  to know  which drive  and directory the
          door program  is in and  will reset the defaults upon return from
          DOS.
          
          The Up  and Down Arrow keys increase and decrease the user's time
          respectively by  5 minutes for each press of the key. There is no
          indication of  what is  occurring (except  by the fact the user's
          time remaining  will change), so the sysop should try not to have
          a lead  finger.  The increase or decrease is effective only while
          the user  is in  the door.   Since we are firm believers that the
          BBS system  files belong  to the BBS and should not be altered by
          any door  program, updating the BBS system file is NOT automatic.
          If you  wish that  any decrease or increase in the user's time be
          made permanent,  you may,  after initializing  the door, call the
          function that  opens the  system file.   Keep  track of  any time
          credits  during  the  door  programs  operation,  then  call  the
          function that updates the BBS system file.  Examples of how to do
          this are included in the sample program.

































                                       Page 10





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


                                  GLOBAL VARIABLES
                                  ----------------
          
          All global variables (except for constants) are defined as COMMON
          SHARED.   They are included in your program by including the file
          GAPQBDR.BI at the top of your source file.
          
          
          CONSTANTS
          ---------
          
          Constants are defined as - CONST name = constant value.
          
          NO                  Defined as 0
          YES                 Defined as 1
          
          ANSI CONSTANTS
          --------------
          
          ANSI constants contain the actual ANSI color sequences.
          
          BLACK               ANSI codes for Black
          BLUE                ANSI codes for Blue
          BROWN               ANSI codes for Brown
          CYAN                ANSI codes for Cyan
          GREEN               ANSI codes for Green
          MAGENTA             ANSI codes for Magenta
          RED                 ANSI codes for Red
          WHITE               ANSI codes for White
          
          BBLACK              ANSI codes for Grey
          BBLUE               ANSI codes for bright Blue
          BCYAN               ANSI codes for bright Cyan
          BGREEN              ANSI codes for bright Green
          BMAGENTA            ANSI codes for bright Magenta
          BRED                ANSI codes for bright Red
          BWHITE              ANSI codes for bright White
          YELLOW              ANSI codes for Yellow
          


















                                       Page 11





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


          DOOR.SYS VARIABLES
          ------------------
          
          DOOR.SYS  variables   are  initialized  while  reading  the  Door
          Interface Module,  DOOR.SYS. (For PCB, PCBOARD.DAT and USERS must
          be read  to initialize  these  variables).  These  variables  are
          available from door start up to door end.  The DOOR.SYS variables
          are the door programmer's connection to the BBS.
          
          
          INTEGERS
          --------
          
          alarm               Caller Alarm. 0 = off, 1 = on
          baud                DTE rate to open COMM port at
          bell                Page Bell. 0 = off, 1 = on
          c.olor              Color toggle. 0 = no color, 1 = color ok
          expert              Expert mode. 0 = non-expert, 1 = expert
          l.ocal              0 = remote user, 1 = local
          level               User's security level
          minsleft            Number of minutes user has left at door start
          node                Node number. 0 = single user
          page                User's page length
          parity              Should actually be data bits and is not used
          port                Communications port in use
          printer             Printer Toggle. 0 = off, 1 = on
          s.creen             Screen display. 0 = off, 1 = on
          userbaud            BPS rate of the remote user
          
          LONGS
          -----
          
          downbytes           Total bytes downloaded
          downloads           Number of downloads
          maxbytes            Maximum number of bytes allowed to download
          recnum              User's record number in USER file
          timeson             Number of times user has been on
          upbytes             Total bytes uploaded
          uploads             Number of uploads
          
          STRINGS
          -------
          
          bphone              User's business or data phone number
          city                User's home town
          first               User's first name
          hphone              User's home phone number
          last                User's last name
          lastdate            Last date user was on
          password            User's password. PASSWORD if sysop is on
          subscrip            Date user's subscription expires
          username            User's full name
          
          



                                       Page 12





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


          GAPQBDR GLOBALS
          --------------
          
          These variables are the documented, global variables (initialized
          and used  by GAPQBDR).   They  may be modified and/or used at the
          programmer's discretion.
          
          
          INTEGERS
          ---------
          
          do.pcb              If set to 1, the BBS is a PCB system
          noup                If set to 1, get.string will not uppercase
          timecredit          Time credits for user (in minutes)
          timeleft            Time user has left (in minutes)
          
          LONGS
          -----
          
          starttime           Time the user logged on (in seconds)
          temptime            For calculating keyboard time out
          timenow             Time it is now  (in seconds)
          
          STRINGS
          -------
          
          anystring1          Global garbage collector
          bbs.dir             Path to BBS default dir
          board.name          Name of the BBS
          gendir              Path to the gen directory
          maindir             Path to the main directory
          sysname             Sysop's name
          
          
          GAPDOS.DAT VARIABLES
          --------------------
          
          These variables  are initialized  by the  programmer by  making a
          call to read.gapdos.  Note that string variables are fixed length
          and will  contain a NULL byte.  Please see the GAPQBDR.BI include
          file for the actual definition of these variables.
          
          
          gapdos.baud         DTE bps rate
          gapdos.callbytes    Ttl bytes available for download
          gapdos.didnew       1 = did a new files scan
          gapdos.exitdos      1 = exit to DOS after call
          gapdos.forumnum     Forum the user is in
          gapdos.givetime     1 = event pending, else extra time received
          gapdos.joined       Bit flags of forums joined
          gapdos.localc       0 = user, 1 = sysop, 2 = local user
          gapdos.minavail     Total minutes available to user
          gapdos.port         Port being used
          gapdos.starttime    Time (in seconds) user logged on



                                       Page 13





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


          gapdos.timecredit   Any time credits user may have
          gapdos.userbaud     User's bps rate
          gapdos.userfirst    User's first name
          gapdos.userindex    User's index into user file
          gapdos.username     User's full name
          
          
          USERS.DAT VARIABLES
          -------------------
          
          These variables  are initialized  by the  programmer by  making a
          call to  read.gapuser.   Note that  string  variables  are  fixed
          length and  will contain  a NULL byte.  Please see the GAPQBDR.BI
          include file for the actual definition of these variables.
          
          WARNING : STRING fields are fully padded with spaces and the last
          position of the string is and MUST be a 0!
          
          user.blts           Total bulletins read
          user.bphone         User's work or data phone number
          user.city           City, state, and zip (padded)
          user.curbytes       Total bytes downloaded this call
          user.curdown        Total files dowloaded today
          user.doors          Total doors opened
          user.downloads      Total downloads
          user.expert         Novice = N, expert = Y
          user.fname          User's first name (padded)
          user.handle         User's handle (padded)
          user.hphone         User's home phone number
          user.joined         Total forums joined
          user.lastdate       Last date on - mm/dd/yy
          user.lastdir        Date last looked at a directory listing
          user.lastfrm        Last forum in
          user.lastmsg        Last message read
          user.lasttime       Last time on - hh:mm
          user.level          Security Level
          user.lname          User's last name (padded)
          user.mesleft        Total messages left
          user.mesread        Total messages read
          user.minutes        Total minutes last call
          user.page           Page length
          user.passwd         User's password (padded)
          user.private        Allow on private nodes?
          user.protocol       Transfer protocol (padded)
          user.subscribe      Date user's subscription expires
          user.sysop          Sysop record, 1 = Y, 0 = N
          user.timeson        Number of times on
          user.ttlbytes       Total bytes downloaded
          user.ttlmins        Total mins on
          user.upbytes        Total bytes uploaded
          user.uploads        Total uploads






                                       Page 14





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


          PCBOARD.SYS VARIABLES
          --------------------
          
          These variables are initialized automatically by init.door if the
          BBS system is PCB (set by environment variable GAPQBDR=PCB).
          
          
          pcbsys.baud         Com port bps rate
          pcbsys.calleralarm  Caller alarm   -1=on,0=off
          pcbsys.colorc       Color toggle   Y,N,7
          pcbsys.ctime        Time user logged on as HH:MM
          pcbsys.display      Display on/off -1=on,0=off
          pcbsys.eactive      Event active   -1=yes,0=no
          pcbsys.errcorrect   ECC modem      -1=yes,0=no
          pcbsys.event        Event time as HH:MM
          pcbsys.forumnum     Forum user was in  "0" = main
          pcbsys.minsleft     Minutes left for caller
          pcbsys.node         Node number as short integer
          pcbsys.pagebell     Page bell      -1=on,0=off
          pcbsys.password     User's password
          pcbsys.port         Com port as "0","1", or "2"
          pcbsys.printer      Printer on/off -1=on,0=off
          pcbsys.sevent       Slide event    -1=yes,0=no
          pcbsys.sysopnext    Sysop on next  N,X,space
          pcbsys.timeallowed  Allowed time in minutes
          pcbsys.timecredit   Any time credits in minutes
          pcbsys.timegiven    Highest forum time given
          pcbsys.timeon       Time user logged on in minutes
          pcbsys.timeused     Time user has used that day
          pcbsys.ttlbytes     Total K bytes available
          pcbsys.userbaud     Caller bps rate (Local if local mode)
          pcbsys.userfirst    User's first name
          pcbsys.username     Name of caller
          pcbsys.userrec      User's record number
          
          
          PCB USERS VARIABLES
          -------------------
          
          These variables are initialized automatically by init.door if the
          BBS system  is PCB (set by environment variable GAPQBDR=PCB).  To
          utilize downbytes,  upbytes, and  lastmsg you  must  use  the  QB
          Microsoft Binary Format conversion functions.
          
          
          pcbuser.bphone      User's work or data phone number
          pcbuser.city        City, state, and zip (padded)
          pcbuser.cnfregis    Forum registration
          pcbuser.delete      Delete, Y=yes,N=no
          pcbuser.downbytes   Total download bytes. Use CVDMBF
          pcbuser.downloads   Number of downloads
          pcbuser.expert      Expert mode Y=yes,N=no
          pcbuser.hphone      User's home phone
          pcbuser.lastconf    Last forum in



                                       Page 15





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


          pcbuser.lastdate    Last date user was on
          pcbuser.lastdir     Last New files scan
          pcbuser.lastime     Last time user was on
          pcbuser.lastmsg     Last message read in main. Use CVSMBF
          pcbuser.lastmsg1    Last message read in each forum
          pcbuser.level       User's level as short integer
          pcbuser.name        User's name
          pcbuser.page        Page length
          pcbuser.passwd      User's password
          pcbuser.protocol    Protocol type
          pcbuser.regisdate   Registration date
          pcbuser.timeson     Number of times on
          pcbuser.upbytes     Total upload bytes. Use CVDMBF
          pcbuser.uploads     Number of uploads











































                                       Page 16





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


                      GLOBAL VARIABLES - ALPHABETICALLY By Type
                      -----------------------------------------
          
          CONSTANTS
          ---------
          
          BBLACK              ANSI codes for Grey
          BBLUE               ANSI codes for bright Blue
          BCYAN               ANSI codes for bright Cyan
          BGREEN              ANSI codes for bright Green
          BLACK               ANSI codes for Black
          BLUE                ANSI codes for Blue
          BMAGENTA            ANSI codes for bright Magenta
          BRED                ANSI codes for bright Red
          BROWN               ANSI codes for Brown
          BWHITE              ANSI codes for bright White
          CYAN                ANSI codes for Cyan
          GREEN               ANSI codes for Green
          MAGENTA             ANSI codes for Magenta
          NO                  Defined as 0
          RED                 ANSI codes for Red
          WHITE               ANSI codes for White
          YELLOW              ANSI codes for Yellow
          YES                 Defined as 1
          
          INTEGERS
          --------
          
          alarm               Caller Alarm. 0 = off, 1 = on
          baud                DTE rate to open COMM port at
          bell                Page Bell. 0 = off, 1 = on
          c.olor              Color toggle. 0 = no color, 1 = color ok
          do.pcb              1 = This is a PCB system
          expert              Expert mode. 0 = non-expert, 1 = expert
          gapdos.baud         DTE bps rate
          gapdos.forumnum     Forum the user is in
          gapdos.givetime     1 = event pending, else extra time received
          gapdos.localc       0 = user, 1 = sysop, 2 = local user
          gapdos.minavail     Total minutes available to user
          gapdos.port         Port being used
          gapdos.timecredit   Any time credits user may have
          gapdos.userbaud     User's bps rate
          l.ocal              0 = remote user, 1 = local
          level               User's security level
          minsleft            Number of minutes user has left at door start
          node                Node number. 0 = single user
          noup                1 = get.string will not uppercase
          page                User's page length
          parity              Should actually be data bits and is not used
          pcbsys.minsleft     Minutes left for caller
          pcbsys.timeallowed  Allowed time in minutes
          pcbsys.timecredit   Any time credits in minutes
          pcbsys.timegiven    Highest forum time given
          pcbsys.timeon       Time user logged on in minutes



                                       Page 17





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


          pcbsys.timeused     Time user has used that day
          pcbsys.ttlbytes     Total K bytes available
          pcbsys.userrec      User's record number
          pcbuser.downbytes   Total download bytes. Use CVDMBF
          pcbuser.timeson     Number of times on
          pcbuser.uploads     Number of uploads
          port                Communications port in use
          printer             Printer Toggle. 0 = off, 1 = on
          s.creen             Screen display. 0 = off, 1 = on
          timecredit          Time credits for user (in minutes)
          timeleft            Time user has left (in minutes)
          user.curdown        Total files dowloaded today
          user.lastfrm        Last forum in
          user.level          Security Level
          user.minutes        Total minutes last call
          user.page           Page length
          userbaud            BPS rate of the remote user
          
          LONGS
          -----
          
          downbytes           Total bytes downloaded
          downloads           Number of downloads
          gapdos.callbytes    Ttl bytes available for download
          gapdos.joined       Bit flags of forums joined
          gapdos.starttime    Time (in seconds) user logged on
          maxbytes            Maximum number of bytes allowed to download
          recnum              User's record number in USER file
          starttime           Time the user logged on (in seconds)
          temptime            For calculating keyboard time out
          timenow             Time it is now  (in seconds)
          timeson             Number of times user has been on
          upbytes             Total bytes uploaded
          uploads             Number of uploads
          user.blts           Total bulletins read
          user.curbytes       Total bytes downloaded this call
          user.doors          Total doors opened
          user.downloads      Total downloads
          user.joined         Total forums joined
          user.lastmsg        Last message read
          user.mesleft        Total messages left
          user.mesread        Total messages read
          user.timeson        Number of times on
          user.ttlbytes       Total bytes downloaded
          user.ttlmins        Total mins on
          user.upbytes        Total bytes uploaded
          user.uploads        Total uploads
          
          STRINGS
          -------
          
          anystring1          garbage collector
          bbs.dir             Path to BBS default dir
          board.name          Name of the BBS



                                       Page 18





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


          bphone              User's business or data phone number
          city                User's home town
          first               User's first name
          gapdos.didnew       1 = did a new files scan
          gapdos.exitdos      1 = exit to DOS after call
          gapdos.userfirst    User's first name
          gapdos.userindex    User's index into user file
          gapdos.username     User's full name
          gendir              Path to the gen directory
          hphone              User's home phone number
          last                User's last name
          lastdate            Last date user was on
          maindir             Path to the main directory
          password            User's password. PASSWORD if sysop is on
          pcbsys.baud         Com port bps rate
          pcbsys.calleralarm  Caller alarm   -1=on,0=off
          pcbsys.colorc       Color toggle   Y,N,7
          pcbsys.ctime        Time user logged on as HH:MM
          pcbsys.display      Display on/off -1=on,0=off
          pcbsys.eactive      Event active   -1=yes,0=no
          pcbsys.errcorrect   ECC modem      -1=yes,0=no
          pcbsys.event        Event time as HH:MM
          pcbsys.forumnum     Forum user was in  "0" = main
          pcbsys.node         Node number as short integer
          pcbsys.pagebell     Page bell      -1=on,0=off
          pcbsys.password     User's password
          pcbsys.port         Com port as "0","1", or "2"
          pcbsys.printer      Printer on/off -1=on,0=off
          pcbsys.sevent       Slide event    -1=yes,0=no
          pcbsys.sysopnext    Sysop on next  N,X,space
          pcbsys.userbaud     Caller bps rate (Local if local mode)
          pcbsys.userfirst    User's first name
          pcbsys.username     Name of caller
          pcbuser.bphone      User's work or data phone number
          pcbuser.city        City, state, and zip
          pcbuser.cnfregis    Forum registration
          pcbuser.delete      Delete, Y=yes,N=no
          pcbuser.downloads   Number of downloads
          pcbuser.expert      Expert mode Y=yes,N=no
          pcbuser.hphone      User's home phone
          pcbuser.lastconf    Last forum in
          pcbuser.lastdate    Last date user was on
          pcbuser.lastdir     Last New files scan
          pcbuser.lastime     Last time user was on
          pcbuser.lastmsg     Last message read in main. Use CVSMBF
          pcbuser.lastmsg1    Last message read in each forum
          pcbuser.level       User's level as short integer
          pcbuser.name        User's name
          pcbuser.page        Page length
          pcbuser.passwd      User's password
          pcbuser.protocol    Protocol type
          pcbuser.regisdate   Registration date
          pcbuser.upbytes     Total upload bytes. Use CVDMBF
          subscrip            Date user's subscription expires



                                       Page 19





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


          sysname             Sysop's name
          user.bphone         User's work or data phone number
          user.city           City, state, and zip (padded)
          user.expert         Novice = N, expert = Y
          user.fname          User's first name (padded)
          user.handle         User's handle (padded)
          user.hphone         User's home phone number
          user.lastdate       Last date on - mm/dd/yy
          user.lastdir        Date last looked at a directory listing
          user.lasttime       Last time on - hh:mm
          user.lname          User's last name (padded)
          user.passwd         User's password (padded)
          user.private        Allow on private nodes?
          user.protocol       Transfer protocol (padded)
          user.subscribe      Date user's subscription expires
          user.sysop          Sysop record, 1 = Y, 0 = N
          username            User's full name








































                                       Page 20





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


                     FUNCTIONS AND SUBROUTINES - QUICK REFERENCE
                     -------------------------------------------
          
          a.ccess%            Checks for the existence of a file.
          ansi                Displays ANSI escape sequences.
          backspace           Sends one or more backspaces.
          ckeypress%          Checks for a remote or local key press.
          clear.scr           Clears the local and remote screens
          do.chat             To allow sysop to chat with remote user.
          elap.time           Computes elapsed time.
          get.string          Gets a string of characters.
          get.time&           Returns number of seconds since 01/01/70.
          getakey%            Gets one key responses.
          getrand%            Returns a random number.
          init.door           Initializes the Door.
          leave               Shuts down door and returns to the BBS.
          more                Checks for a full screen.
          nl                  Sends a CR/LF to local and remote.
          no.carrier          Prints a message if carrier lost.
          open.gap%           Opens and reads GAPBBS.CNF.
          pagesysop           Alerts sysop that the user wants to chat.
          pause               Sends a "Press [Any Key] To Continue" prompt.
          putachar            Sends a single character.
          putkey              Used by chat for word wrapping.
          read.cnf            Reads the door configuration file.
          read.doorsys%       Reads DOOR.SYS.
          read.gapdos%        Reads GAPDOS.DAT.
          read.gapuser%       Reads USERS.DAT.
          read.pcbsys%        Reads PCBOARD.SYS.
          read.pcbuser%       Reads PCB USERS file.
          right.trim$         Trims spaces from string.
          set.status          Displays status line.
          show.file           Displays text files.
          show.mess           Displays a message.
          time.credit         Gives credits for time used.
          time.left           Computes time remaining.
          update.clock        Updates status line clock.
          waitasec            Pauses for x number of seconds.
          wrap.word           Wraps a word.
          write.gapdos%       Writes GAPDOS.DAT.
          write.gapuser%      Writes USERS.DAT.
          write.pcbsys%       Writes PCBOARD.SYS.
          write.pcbuser%      Writes PCB USERS.














                                       Page 21





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


                        FUNCTIONS AND SUBROUTINES - REFERENCE
                        -------------------------------------
          
          Functions always return a value.  The type of the return value is
          denoted by  the type  modifier after a function name.  The return
          value should  be assigned  to a  variable of  the same  type. For
          instance, the  function get.time&  returns a long integer. To re-
          trieve the return value, assign it to an long integer as :
          
               long.int& = get.time&
          
          Subroutines do not return a value.  To call a subroutine, use the
          Basic CALL function :
          
               call get.string
          
          
          
          
                  Name :  a.ccess%
               Purpose :  Checks for the existence of a file.
            Parameters :  Full path and name of file
          Return Value :  0 = file was found, 1 = file not found
          
           Description :  In order to avoid Basic errors that occur when
                          trying to open a file that does not exist, this
                          function should be used prior to opening any
                          file.
          
               Example :  r% = access%("GAPQBDR.DOC")
                          if r% <> 0 then
                             print "Cannot Find GAPQBDR.DOC"
                          end if
          
          
                  Name :  ansi
               Purpose :  Displays ANSI escape sequences
            Parameters :  ANSI color to display
          Return Value :  None
          
           Description :  This function will send a string of ANSI escape
                          sequences to the remote user and to the local
                          console.  The ANSI codes for the various colors
                          are defined as constants in the GAPQBDR.BI file.
                          If the remote or local user is in non graphics
                          mode, the function returns immediately.
          
               Example :  call ansi(BWHITE)
          
          







                                       Page 22





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


                  Name :  backspace
               Purpose :  Sends one or more backspaces
            Parameters :  Number of backspaces to send
          Return Value :  None
          
           Description :  In order to actually erase a character on the
                          screen, you must send a 3 character sequence
                          which consists of backspace, space, backspace.
                          This function will send as many of these 3 char-
                          acter sequences as you specify in the parameter
                          list.
          
               Example :  call backspace(1)
                          str$ = "Press Any Key "        ' set up string
                          call show.mess(str$,NO,NO)     ' show string
                          c% = getkeyc%                  ' get a key
                          call backspace(len(str$))      ' erase string
          
          
                  Name :  ckeypress%
               Purpose :  Checks for a remote or local key press
            Parameters :  None
          Return Value :  0 = no key is waiting, 1 = a key is waiting
          
           Description :  This function will check the local keyboard as
                          well as the communications receive buffer to see
                          if a key is waiting to be read.  It is most often
                          used in loops that need to receive a 1 character
                          keystroke.
          
               Example :  c% = ckeypress%                ' key pressed?
                          
                          c% = 0                         ' initialize
                          do
                             |                           ' do something
                             |
                             c% = ckeypress%             ' key pressed?
                          until c% <> 0                  ' key pressed,exit
          
          
                  Name :  clear.scr
               Purpose :  Clears local and remote screens.
            Parameters :  None
          Return Value :  None
          
           Description :  This routine will use the Basic CLS 2 statement
                          to clear the local screen.  If the remote caller
                          is in non-color mode, it sends a CHR$(12) to the
                          remote screen, otherwise it sends the ANSI clear
                          screen sequence.
          
               Example :  call clear.scr                 ' clear screen
          
          



                                       Page 23





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


                  Name :  do.chat
               Purpose :  To allow sysop to chat with remote user
            Parameters :  None
          Return Value :  None
          
           Description :  This function allows a one on one chat with a re-
                          mote user.  If the caller is in graphics mode,
                          the sysop's key presses will be displayed in
                          green and the remote user's key presses will be
                          displayed in white. Text will automatically wrap
                          at column 76.  To exit chat, press either the ESC
                          key or type a CTRL-X.  Note that the user may
                          also send these characters to end chat. The user
                          will receive full credit for the time spent chat-
                          ting with the sysop.  However, this function will
                          not update the BBS system file so it is possible
                          that the user may be logged off (with an out of
                          time message) when he/she returns to the BBS.
          
               Example :  call do.chat
                          
                          response$ = " "                ' initialize
                          call get.string(response$)     ' get a string
                          if response$ = "P" then        ' paging sysop
                             call do.chat                ' chat with sysop
                          end if
          
          
                  Name :  elap.time
               Purpose :  Computes elapsed time while waiting for keyboard
                          input
            Parameters :  None
          Return Value :  None
          
           Description :  This function is used in loops that await a key-
                          board response.  Prior to entering the loop, the
                          variable called temptime should be initialized
                          with the current time. Once inside the loop, this
                          function should be called to keep track of the
                          elapsed time. If there is no keyboard response
                          within 4 minutes, the user will be logged off.
          
               Example :  call elap.time
                          
                          temptime& = get.time&          ' start timer
                          do
                             gc = getakey%               ' get a key
                             if gc <> 0 then             ' key pressed
                                exit do                  ' exit and process
                             end if
                             call elap.time              ' activity?
                          loop                           ' continue
          
          



                                       Page 24





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


                  Name :  get.string
               Purpose :  Gets a string of characters
            Parameters :  String to fill
          Return Value :  None
          
           Description :  This is the main input routine.  It will get a
                          string from either the remote user or the local
                          keyboard.  The string passed will be set to the
                          characters received. The length of the input
                          string is determined by the length of the string
                          passed. Do not pass a fixed length string to this
                          routine.
                          
                          Before calling, you must initialize the passed
                          string with spaces.  The number of spaces in the
                          string determines the number of characters al-
                          lowed to be input. If a user attempts to type
                          more characters than allowed, the cursor will not
                          move pass the end of the string.  Input ends when
                          the Enter key is pressed.
                          
                          To initialize the string, use the Basic space$
                          function (IE, input$ = space$(10) - initializes
                          input$ to 10 spaces).
                          
                          WARNING : It is extremely important that the
                          passed string be initialized.  Failure to set the
                          string to spaces, will cause unpredictable
                          results!
                          
                          This function does not return a new string con-
                          taining the keyboard input.  Instead, it modifies
                          the string you pass to it in the parameter list.
                          The string will be stripped of any trailing
                          spaces.
                          
                          get.string automatically uppercases the string.
                          If you wish to disable this feature, set the
                          variable noup to 1.
                          
                          get.string will automatically check for keyboard
                          activity so it is not necessary for you to do so.
          
               Example :  instr$ = space$(10)              ' initialize
                          call get.string(instr$)          ' get string
          
          










                                       Page 25





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


                  Name :  get.time&
               Purpose :  Gets the number of seconds elapsed since 01/01/70
            Parameters :  None
          Return Value :  Number of seconds since 01/01/70
          
           Description :  This routine is equivalent to the C time() func-
                          tion. It is used throughout the GAPQBDR module to
                          compute various times.  This function is not sus-
                          ceptible to the midnight roll over problem so
                          prevalent in Basic communications programs.
                          
                          Note that the return value is of type LONG.  You
                          must cast the return value to a LONG INTEGER or
                          loss of significant digits will result.
          
               Example :  dim ltime as long              ' declare as long
                          ltime = get.time&              ' get the time
                          
                          ' if you don't like declaring variables, you can
                          ' do it the old fashioned way
                          
                          longtime& = get.time&           ' get the time
          
          
                  Name :  getakey%
               Purpose :  Gets one key responses
            Parameters :  None
          Return Value :  ASCII code for the key pressed or 0
          
           Description :  This is the main keyboard input routine
                          (internal). It is called by get.string as well as
                          any keyboard polling loops.  It checks the re-
                          ceive buffer as well as the local keyboard for a
                          key press.  If one is not found it returns 0.
                          The character input is not echoed. Since 99% of
                          all keyboard input comes from this routine, it
                          checks for carrier, time remaining, keyboard
                          time-out, as well as special sysop function keys.
                          The "timeleft" variable is updated via this rou-
                          tine.  This is the variable you would normally
                          use in a prompt such as,
                          
                              [20 mins left] Main Command :
          
               Example :  c% = getakey
          
          










                                       Page 26





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


                  Name :  getrand%
               Purpose :  Gets a random number
            Parameters :  Low number, high number
          Return Value :  A random number
          
           Description :  This routine is provided because it is much
                          easier to use and understand than Basic's random
                          function.  Provide as parameters two integers.
                          The first parameter is the lowest number you will
                          accept as a random number, and the second parame-
                          ter is the highest random number you will accept.
                          The function will return a random integer between
                          the range specified (low and high are included in
                          the range of numbers).  It is not necessary to
                          seed the random number generator as this is done
                          automatically for you during program
                          initialization.
          
               Example :  rndnum% = getrand% (1,10)      ' get a random
                                                         ' number between 1
                                                         ' and 10
          
          
                  Name :  init.door
               Purpose :  Initializes the GAPQBDR functions
            Parameters :  None
          Return Value :  None
          
           Description :  This routine must be called immediately after
                          calling read.cnf.  It initializes the door, opens
                          and reads system files, initializes the comm
                          port, initializes global variables and in gen-
                          eral, makes sure that all of the files required
                          for operation are present. There is no return
                          value.  If an error occurs while trying to ini-
                          tialize, the function will display an error mes-
                          sage and end the program.
          
               Example :  call read.cnf("DOOR.CFG")      ' read config file
                          call init.door                 ' init the door
          
          
                  Name :  leave
               Purpose :  Exits the program
            Parameters :  None
          Return Value :  None
          
           Description :  When the program terminates, it must call this
                          function to end.  This is the ONLY proper exit
                          from the door.
          
               Example :  call leave
          
          



                                       Page 27





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


                  Name :  more
               Purpose :  Checks for a full screen and issues a More Prompt
            Parameters :  None
          Return Value :  None
          
           Description :  This is an internal routine that is called by the
                          character output functions.
          
               Example :
          
          
                  Name :  nl
               Purpose :  To send a Carriage Return and Line Feed to local
                          and remote
            Parameters :  Number of New Line's to send
          Return Value :  None
          
           Description :  To send a blank line, call this routine with the
                          number of blank lines you wish to send.
          
               Example :  call nl(2)                     ' send two blank
                                                         ' lines
          
          
                  Name :  no.carrier
               Purpose :  Prints a message and calls leave()
            Parameters :  None
          Return Value :  None
          
           Description :  Internal routine that is called when there is a
                          loss of carrier.  Displays a message to the local
                          screen and then calls leave to terminate the
                          program.
                          
                          If you have a routine that checks for carrier and
                          you wish to display the standard "No Carrier"
                          message and log the user off, call this function.
          
               Example :  call no.carrier
          
          
                  Name :  open.gap%
               Purpose :  Opens and reads the GAPBBS.CNF file
            Parameters :  None
          Return Value :  0 = no error, 1 = error
          
           Description :  This function is called by init.door.  It opens
                          and reads the configuration file for GAP.  Note
                          that only part of the CNF file is read.  The main
                          purpose for reading the file is to obtain the
                          path to the BBS's main directory and get the
                          sysop' name.
          
               Example :  c% = open.gap%



                                       Page 28





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


                  Name :  pagesysop
               Purpose :  Alerts sysop that user wants to chat
            Parameters :  None
          Return Value :  None
          
            Description : Allows the programer to provide the user with a
                          Page Sysop command.  The page lasts for 30
                          seconds and can be aborted by typing CTRL K. If
                          the sysop's page bell is on, the sysop's speaker
                          will also sound.  To answer the page, the sysop
                          should press CTRL F10.
          
               Example :  response$ = " "                ' initialize var
                          call get.string(response$)     ' wait for a key
                          if response$ = "P" then        ' wants to chat
                             call pagesysop              ' tell sysop
                          end if
          
          
                  Name :  pause
               Purpose :  Sends a "Press [Any Key] To Continue" prompt
            Parameters :  None
          Return Value :  None
          
            Description : This function sends a pause prompt and waits for
                          a key press.
          
               Example :  call nl(1)                     ' send blank line
                          call pause                     ' wait for a key
          
          
                  Name :  putachar
               Purpose :  Send a single character to local and remote
            Parameters :  ASCII character to send
          Return Value :  None
          
           Description :  This routine is called a "semi-unfiltered" char-
                          acter output routine because it allows for most
                          ASCII characters to be output.
          
               Example :  c% = ASC("A")                  ' send an 'A'
                          call putachar(c%)              ' to local and
                                                         ' remote screen
                          
                          c% = getakey%                  ' get a keypress
                          if (c% <> 0 then               ' if we got a key
                             call putachar(c%)           ' display the
                          end if                         ' character









                                       Page 29





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


                  Name :  putkey
               Purpose :  Used by chat routines to keep track of word
                          wrapping
            Parameters :  Character to send
          Return Value :  None
          
           Description :  This is the main output routine for the chat
                          functions. It keeps track of the current column,
                          and decides when it is time to wrap a word.  It
                          should not be called by the programmer's routines
                          since putachar is faster and more efficient.
          
               Example :
          
          
                  Name :  read.cnf
               Purpose :  To read the door configuration file
            Parameters :  Full path and file name to the configuration
                          file.
          Return Value :  None
          
           Description :  Opens the configuration file for the current
                          door. Normally the passed parameter is the name
                          of the door with a .CNF extension (it is assumed
                          that the file is in the same directory as the
                          door program). If an error occurs, the program
                          ends immediately.
                          
                          WARNING : The first two lines of this configura-
                          tion file belong to the GAPQBDR interface module.
                          You are free to use the information, but the in-
                          formation contained in the first two lines must
                          conform exactly to the following specifications.
                          
                          The first line of this file is the full drive and
                          path to the BBS default directory.  This is the
                          directory where the BBS system files can be found
                          (IE, GAPDOS.DAT, DOOR.SYS, GAPBBS.CNF).  The en-
                          try on line 1 is not checked until init.door is
                          called.
                          
                          The second line of this file is the name of the
                          BBS.
                          
                          It is the responsibility of the door author to
                          describe the format of these two lines to the end
                          user.  It is also the responsibility of the door
                          author to insure that the end user have these two
                          lines in the door configuration file.  If your
                          door program requires no configuration parameters
                          of its own, you can simply distribute a sample
                          "door".cnf file with these two lines already in
                          it.
                          



                                       Page 30





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


                          GAPQBDR will NOT close this file (file #1) after
                          reading the first two lines.  It leaves the file
                          open for the programmer's use.  If your door does
                          require certain configuration parameters, have
                          your users place the parameters in the file
                          starting with line 3.  If you use a set up pro-
                          gram, be sure that your set up program writes the
                          first two lines as specified.
                          
                          After you have called read.cnf and init.door, if
                          you have any configuration options in the
                          "door".cnf file, you should line input those op-
                          tions.  Then close file #1.  Even if you have no
                          options to read, close the file.
                          
                          WARNING : You MUST call this routine before using
                          any of the GAPQBDR functions.  After calling this
                          routine, you MUST call init.door.
          
               Example :  call read.cnf("TOURIST.CNF")
                          call init.door
          
          
                  Name :  read.doorsys%
               Purpose :  Reads the DOOR.SYS universal door interface file
            Parameters :  None
          Return Value :  0 = no error, 1 = error
          
           Description :  Internal routine called by init.door.  Reads the
                          DOOR.SYS file and initializes any global vari-
                          ables that depend on the information in that
                          file.
          
               Example :  c% = read.doorsys%
          
          
                  Name :  read.gapdos%
               Purpose :  Reads the GAP Communications DOS file.
            Parameters :  None
          Return Value :  0 = no error, 1 = error
          
           Description :  Reads the GAPDOS.DAT remote exit to DOS file.  If
                          you have a need for the information in this file,
                          or if you need to modify the record variables,
                          this function will read the file for you.  The
                          record variables are contained in a variable
                          called gapdos.
                          
                          WARNING : Do NOT modify the string fields in
                          GAPDOS.DAT. If the gapdos.userindex field is
                          changed, GAP will be unable to find the user in
                          the userfile upon return from the door.
                          
                          The only proper way to update this file is to



                                       Page 31





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


                          first read it.  Make any changes to the variables
                          themselves or use your own temporary variables.
                          Then call write.gapdos to update the record.
          
               Example :  c% = read.gapdos%
          
          
                  Name :  read.gapuser%
               Purpose :  Reads the GAP Communications USERS.DAT file
            Parameters :  None
          Return Value :  0 = no error, 1 = error
          
           Description :  Reads the user record of the current user in the
                          GAP USERS.DAT file.  The record variables are
                          contained in a variable called user.
          
               Example :  c% = read.gapuser%
          
          
                  Name :  read.pcbsys%
               Purpose :  Reads the PCBOARD.SYS file.
            Parameters :  None
          Return Value :  0 = no error, 1 = error
          
           Description :  For a PCB setup, this function is automatically
                          called by init.door.  Do not use unless do.pcb is
                          set to 1.
          
               Example :  c% = read.pcbsys%
          
                  Name :  read.pcbuser%
               Purpose :  Reads the PCB USERS file.
            Parameters :  None
          Return Value :  0 = no error, 1 = error
          
           Description :  For a PCB setup, this function is automatically
                          called by init.door.  Do not use unless do.pcb is
                          set to 1.  Note that to change the fields
                          downbytes, upbytes, or lastmsg, you will need to
                          use the QB functions CVSMBF or CVDMBF.
          
               Example :  c% = read.pcbuser%
          
          
                  Name :  right.trim$
               Purpose :  Trims spaces from the end of NULL terminated
                          strings
            Parameters :  String containing the spaces.
          Return Value :  String without the spaces.
          
           Description :  This function will remove the NULL and trim any
                          spaces from the right end of any 'C' string.
          
               Example :  username$ = right.trim$(gapdos.username)



                                       Page 32





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


                  Name :  set.status
               Purpose :  To display and update the sysop status line
            Parameters :  0 = set the status line, 1 = update the status
                          line, 4 = show other user stats
          Return Value :  None
          
           Description :  This routine is used internally.  There should be
                          no reason to call it unless you have modified a
                          user's stats and you need to update those stats
                          on the status line.  In this case, you should use
                          option 0.
          
               Example :  call set.status(0)
          
          
                  Name :  show.file
               Purpose :  To display a text file
            Parameters :  The full path and file name to the file to be
                          shown
          Return Value :  None
          
           Description :  Many door programs have welcome, news, exit, help
                          and other files to show to the user at various
                          points in the program.  This is the function that
                          allows you to do that.  This function tries to be
                          as intelligent as it possibly can in determining
                          the sysop's wishes. To display a file to the
                          user, call the function with the full
                          drive\path\filename of the file to display.
                          
                          If you have color and non-color versions of files
                          pass the name of the non-color version as this
                          function will automatically append a "G" to the
                          filename if the user is in color mode.  In fact,
                          this function will ALWAYS try to find a file with
                          a "G" appended to the end of the name (if the
                          user is in color mode) before it looks for the
                          actual file by the name you specified.  If you
                          pass "WELCOMEG" to this function and the user is
                          in color mode, it will first try to find a file
                          with the name of "WELCOMEGG".
                          
                          As with GAP Communications, your text files can
                          have certain control characters as the first
                          character in the file.  A "{" signals that the
                          more prompt should never display.  In other
                          words, GAPQBDR will not keep track of the number
                          of lines displayed and will never issue a more
                          prompt.  This is useful for very long ANSI files.
                          A "@" signals that the pause prompt should be
                          displayed when the screen is full instead of a
                          more prompt.  This is very handy when you want
                          the user to see the file in its entirety.  The
                          user will not be allowed to break out of the file



                                       Page 33





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


                          read.
                          
                          WARNING : The "{" or "@" MUST appear as the VERY
                          first character in the file.  If you use an ANSI
                          editor, be aware that the first few characters in
                          a file will usually be an ANSI color sequence.
                          You normally have to edit the file with a text
                          editor to insert the control character.
                          
                          Because QB 4.x is EXTREMELY slow when it comes to
                          function calls, all input and output is done "in
                          line". Despite QB's high overhead, this function
                          is pretty fast.
                          
                          GAPQBDR does not have GAP's ability to protect
                          the status line.  Because of this, it is possible
                          for an ANSI file that contains clear screen codes
                          to erase the status line.  At the end of the
                          function, the status line will be re-drawn just
                          in case.  Since most ANSI files contain the clear
                          screen codes at the beginning of the file,
                          show.file will remove any such codes during the
                          first read of the file.
                          
                          Pressing CTRL K or CTRL X will abort any file
                          display if the file does not begin with a "@".
                          
                          REMEMBER : If you have both color and non-color
                          versions of the same files, pass the name of the
                          non-color version.  Also, the actual disk files
                          must be named in such a way that they have no
                          file extension and the color version ends with a
                          "G".
          
               Example :  call show.file("WELCOME")
                          call show.file("C:\GAP\GEN\WELCOME")
          
          



















                                       Page 34





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


                  Name :  show.mess
               Purpose :  Displays a message
            Parameters :  Message, ring the bell, issue a New Line
          Return Value :  None
          
           Description :  Finally!  After all of this, just how do you dis-
                          play a message to the user?  Well, here it is.
                          This is the string output function for GAPQBDR.
                          Under most circumstances, this is the one func-
                          tion that you would call to display output to the
                          user. There should be no reason to ever call
                          putkey or putachar, as they are basically inter-
                          nal routines.
                          
                          There should be no reason to EVER use the Basic
                          print statement unless you need to display a mes-
                          sage to the local screen that you do not want the
                          remote user to see.  In other words, ALL string
                          output should be done through this function.  If
                          there is a reason to display information locally
                          it would be much easier and more efficient to
                          keep track of the l.ocal variable, set it to 1,
                          call show.mess with the strings to be displayed,
                          then restore the l.ocal variable to what it was
                          before, instead of using the print function which
                          cannot display ANSI sequences (forcing you to
                          translate ANSI codes to color statements).
                          
                          The three parameters are :
           
                            1 - the string to display
                            2 - YES or NO if you want to sound the remote
                                user's bell.
                            3 - YES or NO if you want to issue a CR/LF
                                after displaying the string.
          





















                                       Page 35





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


               Example :  ' the first show.mess displays the string and
                          ' leaves the cursor on the same line.  The second
                          ' show.mess displays the string, rings the remote
                          ' user's bell, and drops the cursor to the next
                          ' line.
                          
                          call nl(1)
                          call show.mess("Are you ready? (Y/N) : ",NO,NO)
                          
                          a$ = space$(3)
                          call get.string(a$)
                          
                          if left$(a$,1) = "Y" then
                             ' begin whatever it is you want to begin
                          else
                             call nl(1)
                             call show.mess("Too Bad!",YES,YES)
                             end
                          end if
          
          
                  Name :  time.credit
               Purpose :  Keeps track of time and credits the user with
                          time elapsed
            Parameters :  1 = start timer, 0 = end timer
          Return Value :  None
          
           Description :  This is basically an internal routine called by
                          chat and sysop shell to DOS so that the user is
                          not penalized for time used.  It updates a global
                          variable called timecredit.  Timecredit is used
                          in the calculations that determine the user's
                          time remaining.
                          
                          If you wish to use this feature in your own rou-
                          tines, prior to entering your routine, call
                          time.credit with a 1 and it will start the timer.
                          When your routine is finished, call time.credit
                          with a 0 and the timer will stop.  The variable
                          timecredit will be updated with the elapsed time.
          
               Example :  call time.credit(1)            ' start the timer
                          call do.chat                   ' chat with user
                          call time.credit(0)            ' stop the timer
                          
                          ' Note that this is simply an example.  do.chat
                          ' calls time.credit on its own.  In the above
                          ' example, if the sysop chat with the user took
                          ' 10  minutes, the user will be credited with
                          ' that 10 minutes as will be reflected in the
                          ' timecredit variable.
          
          




                                       Page 36





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


                  Name :  time.left
               Purpose :  To compute the user's time remaining
            Parameters :  None
          Return Value :  None
          
           Description :  This is the routine that is called by the input
                          and output routines to compute the user's time
                          remaining. It is not necessary for the programmer
                          to call this routine directly.
                          
                          A global variable called timeleft will be updated
                          with each call.  This variable may be used in
                          prompts that display the user's remaining time.
                          
                          As long as all input/output is performed thru
                          calls to the GAPQBDR library, the timeleft vari-
                          able will always be current.
          
               Example :  call time.left
          
          
                  Name :  update.clock
               Purpose :  Updates the status line clock
            Parameters :  None
          Return Value :  None
          
           Description :  Internal routine to update the status line clock.
          
               Example :
          
          
                  Name :  waitasec
               Purpose :  Pauses for the number of seconds specified.
            Parameters :  Number of seconds to pause
          Return Value :  None
          
           Description :  This function allows you to pause all processing
                          for the specified number of seconds.  It is in-
                          sensitive to processor speed and is immune to the
                          midnight rollover problem.
          
               Example :  call waitasec(10)              ' pause for 10 sec
          
          
                  Name :  wrap.word
               Purpose :  To wrap a word during sysop chats
            Parameters :  None
          Return Value :  None
          
           Description :  Internal function called by putkey to wrap words.
          
               Example :
          
          



                                       Page 37





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


                  Name :  write.gapdos%
               Purpose :  Updates the GAPDOS.DAT file
            Parameters :  None
          Return Value :  0 = no error, 1 = error
          
           Description :  This function allows the programmer to update the
                          GAP Communications remote exit to DOS system
                          file.  If the GAPDOS.DAT file is read at door be-
                          ginning,  the timecredit variable assigned to
                          gapdos.timecredit, and the GAPDOS.DAT file writ-
                          ten out at doors end, the user will be credited
                          with any time spent during a sysop chat or shell
                          to DOS.
          
               Example :  c% = read.gapdos%              ' read the file
                          
                          if c% = 0 then                 ' if no error...
                             timecredit = gapdos.timecredit
                          
                             ' do some processing
                          
                             ' give the user 20 more minutes
                          
                             timecredit = timecredit + 20
                             gapdos.timecredit = timecredit
                             c% = write.gapdos%          ' update the file
                          end if
          
          
                  Name :  write.gapuser%
               Purpose :  Updates the user record in GAP's USERS.DAT file
            Parameters :  None
          Return Value :  0 = no error, 1 = error
          
           Description :  This function allows you to update any variables
                          in the GAP USERS.DAT file for the current user.
                          
                          WARNING : The GAP USERS.DAT file contains C char-
                          acter arrays.  These are equivalent to Basic's
                          fixed length strings with the exception that the
                          C strings have a NULL character (chr$(0)) in the
                          last position.  If you modify any of these fixed
                          length strings, you MUST make sure that the
                          string is fully padded with  spaces and that the
                          NULL character is placed in the last string posi-
                          tion.  When assigning a value to a fixed length
                          string, Basic will automatically pad the fixed
                          length string with spaces. All the programmer
                          need to is insure that the NULL is inserted at
                          the end of the string.
                          
                          WARNING : The index for the user file consists of
                          the user's last name and first name.  Do not un-
                          der any circumstances modify either of these two
                          fields. Doing so will cause corruption of the


                                       Page 38





          GAPQBDR       (C) Copyright 1988,1989 The GAP Development Company


                          Index file.
          
               Example :  ' give the user a level of 50
                          
                          c% = read.gapuser%             ' 1st read record
                          user.level = 50
                          c% = write.gapuser%            ' update the rec
                          
                          ' allow user to change handle
                          
                          c% = read.gapuser%
                          if c% = 0 then
                             call show.mess("Enter New Handle : ",NO,NO)
                             handle$ = space$(15)
                             call get.string(handle$)
                             if handle$ <> "" then
                                user.handle = handle$
                          
                                mid$(user.handle,16,1) = chr$(0)
                                c% = write.gapuser%
                                if c% = 0 then
                                   show.mess("Saved new Handle",NO,YES)
                                end if
                             end if
                          end if
          
          
                  Name :  write.pcbsys%
               Purpose :  Updates the PCBOARD.SYS file
            Parameters :  None
          Return Value :  0 = no error, 1 = error
          
           Description :  This function allows the programmer to update the
                          PCBOARD.SYS File.  Do not use unless do.pcb is
                          set to 1.
          
               Example :  c% = write.pcbsys%             ' write the file
          
          
                  Name :  write.pcbuser%
               Purpose :  Updates the PCB USERS file
            Parameters :  None
          Return Value :  0 = no error, 1 = error
          
           Description :  This function allows the programmer to update the
                          PCB USERS File.  Do not use unless do.pcb is set
                          to 1.  Note that you will need to use MKSMBF on
                          the field lastmsg, and MKDMBF on the fields
                          downbytes and upbytes, if you modified these
                          fields since reading the file.
          
               Example :  c% = write.pcbuser%            ' write the file





                                       Page 39





                              GAPQBDR LICENSE AGREEMENT
                              -------------------------

        This legal document is an agree-
                                             GAP Development Company consents
        ment between  you, the end user,
                                             in writing, in advance.
        and GAP Development Company.  By
                                             
        using   the   GAPQBDR   software
                                             Registration of  the SOFTWARE is
        (the "SOFTWARE") provided by GAP
                                             REQUIRED as a condition of use.
        Development Company,  you  agree
                                             
        to become  bound by the terms of
                                             You are  granted a  royalty-free
        this agreement,  which  includes
                                             right to  distribute  executable
        the  software  license  and  the
                                             files created  using  the  SOFT-
        disclaimer of warranty.
                                             WARE.   You may  not, under  any
        
                                             circumstances   distribute   any
        This agreement  constitutes  the
                                             part of  the SOFTWARE  with your
        complete agreement  between  you
                                             executable files.
        and GAP Development Company.  If
                                             
        you do not agree to the terms of
                                             If you  purchased  the  SOFTWARE
        this agreement,  promptly return
                                             SOURCE CODE,  you are  granted a
        the disks  and other  items that
                                             nonexclusive,   personal,   non-
        are part of this product.
                                             transferable, nonassignable  li-
        
                                             cense  to  use  and  modify  the
        The SOFTWARE  may not be copied,
                                             SOURCE CODE  and  to  distribute
        reproduced,  disclosed,   trans-
                                             your programs.  You may  not re-
        ferred, or  reduced to any form,
                                             produce or distribute the SOURCE
        including electronic  medium  or
                                             CODE except  in executable  form
        machine readable form, or trans-
                                             as part of your executable file.
        mitted or  publicly performed by
                                             If you  distribute  your  source
        any means,  electronic or other-
                                             code, you  may not  include  the
        wise,  unless   GAP  Development
                                             SOFTWARE SOURCE  CODE as part of
        Company consents  in writing, in
                                             your product.
        advance.
                                             
        
                                             This License  is effective until
        Th  SOFTWARE  contains  valuable
                                             terminated.   This License  will
        trade  secrets  and  proprietary
                                             terminate automatically  if  you
        information and  is protected by
                                             fail to  comply with  any provi-
        federal copyright laws. Unautho-
                                             sion of this License.
        rized use  of the  software  can
                                             
        result  in   civil  damages  and
                                             SUMMARY OF LIMITED WARRANTY:
        criminal prosecution.
                                             
        
                                             In summary,  the SOFTWARE is li-
        You may  use the  SOFTWARE on  a
                                             censed AS  IS.    THERE  ARE  NO
        single computer  only.  You  may
                                             WARRANTEES, EXPRESS  OR IMPLIED,
        not network the SOFTWARE or oth-
                                             INCLUDING BUT NOT LIMITED TO THE
        erwise use  it on  more than one
                                             IMPLIED   WARRANTIES   OF   MER-
        computer or terminal at the same
                                             CHANTABILITY AND  FITNESS FOR  A
        time.
                                             PARTICULAR PURPOSE, AND ALL SUCH
        
                                             WARRANTIES  ARE   EXPRESSLY  AND
        YOU MAY  NOT COPY  the  SOFTWARE
                                             SPECIFICALLY DISCLAIMED.   IN NO
        except  to  place  the  programs
                                             EVENT SHALL GAP DEVELOPMENT COM-
        onto your  hard disk and to make
                                             PANY BE  RESPONSIBLE FOR ANY IN-
        archival  backup   copies   onto
                                             DIRECT, SPECIAL,  INCIDENTAL  OR
        floppy disks  for your  personal
                                             CONSEQUENTIAL  DAMAGES  OR  LOST
        use as  permitted  by  this  Li-
                                             PROFITS TO YOU OR ANY OTHER PER-
        cense.  You  may  not  copy  the
                                             SON OR  ENTITY REGARDLESS OF THE
        written  materials  accompanying
                                             LEGAL THEORY,  EVEN IF  WE  HAVE
        the software.  You may not grant
                                             BEEN ADVISED  OF THE POSSIBILITY
        sublicenses  nor   transfer  the
                                             OF SUCH DAMAGE.
        SOFTWARE or related materials in
        any form  to any  person  unless









                              REGISTRATION INFORMATION
                              ------------------------
            
            
            GAPQBDR  is   a  user-supported   program,  also   known  as
            'shareware'.  Shareware is a means by which users may 'test-
            drive' software before purchasing.  Generally, it allows the
            user to  evaluate the  software for  a period  of  30  days.
            After the  evaluation period  the user  must either register
            the product or cease using it.
            
            You are  permitted under  the terms  of  the  above  License
            Agreement to  use GAPQBDR  for a  period of  30 days without
            payment.  If you continue to use the product past the 30 day
            evaluation period,  you must register your copy as described
            below.
            
            Commercial  use  of  this  software  absolutely  requires  a
            registration within  the 30  day  period.    Commercial  use
            includes any  software written by you which utilizes GAPQBDR
            and which  you charge  any sum  of money for the use of your
            software.   This includes shareware registration, donations,
            registration fees,  or any  method  you  use  or  devise  to
            solicit funds from the users of your software.
            
            Commercial use  also includes  bundling GAPQBDR  with  other
            software even if that other software does not utilize any of
            the GAPQBDR  functions.   This type  of  commercial  use  is
            strictly prohibited.
            
            
            A great  deal of  time, money, and effort went into creating
            GAPQBDR.   Unlike other  libraries of this type, GAPQBDR was
            written from scratch and does not have as a basis, "borrowed
            code".   We have utilized many of the latest features of the
            Quick  Basic   compiler  and   wrote  critical  sections  in
            assembler for speed.
            
            Registration of  GAPQBDR  is  a  one  time  fee  of  $25.00.
            Payment of  this fee  entitles  you  to  one  year  of  free
            upgrades, product  support, the  right to use GAPQBDR in any
            executable program  you  sell  or  distribute,  and  a  good
            conscience.
            
            
            Source code  is available to registered users for a one time
            license fee  of $25.00.   The source code is fully commented
            and well structured.
            
            
                              GAPQBDR Support Board :
            
              The Crow's Nest BBS         (714)493-3819  Node 1
                                          (714)493-9851  Node 2












                                GAPQBDR REGISTRATION
                                --------------------
            
            
            Please fill in and detach the following sheet and mail it to
            GAP Development Company.
            ------------------------------------------------------------
            
            
            I understand and accept the GAPQBDR License Agreement.
            
            
                 Accepted By : ____________________________________
                               (signature)
                 
                 Accepted By : ____________________________________
                               (printed name)
                 
                        Date : ____________
                 
                 
                     Product : GAPQBDR
            
            
            Licensee Information :
            
                      Name : ___________________________________________
            
                   Address : ___________________________________________
            
                   Address : ___________________________________________
            
            City,State,Zip : ___________________________________________
            
               Voice Phone : ________________________
            
            
            ------------------------------------------------------------
                #   Description                              Price
            ------------------------------------------------------------
              2001  GAPQBDR Run Time Library        25.00     __________
              2002  GAPQBDR Source Code License     25.00     __________
            
                    Total Due                                 __________
                    Less Credit(s)                            __________
                    Total Amount Enclosed                     __________
            
            ------------------------------------------------------------
                    Payment may be made by check or money order
            ------------------------------------------------------------
            
                                        GAP Development Company
                                       24242 Porto Fino  RT 7715
                                     Laguna Niguel, CA  92677-3844









                                        INDEX
                                        -----

          @  33
                                                   BLUE  11
          a.ccess%  22
                                                   BMAGENTA  11
          ANSI  2, 3, 11, 17, 22, 33, 35
                                                   BRED  11
          backspace  23
                                                   BROWN  11
          bell  35
                                                   BWHITE  11
          chat  2, 24, 29, 30, 36, 37,
                                                   CYAN  11
               38
                                                   GREEN  11
          ckeypress%  23
                                                   MAGENTA  11
          clear.scr  23
                                                   RED  11
          COMMAND$  5
                                                   WHITE  11
          communications file  6
                                                   YELLOW  11
          communications port  3, 5
                                                 General
          configuration file  5
                                                   NO  11
          CTS  2
                                                   YES  11
          CVDMBF  7, 16, 32
                                               Integers
          CVSMBF  7, 16, 32
                                                 DOOR.SYS
          do.chat  24
                                                   alarm  12
          do.pcb  6, 32, 39
                                                   baud  12
          DOOR.SYS  5, 6, 12, 21, 30
                                                   bell  12
          DTR  3
                                                   c.olor  12
          elap.time  24
                                                   expert  12
          Error  4, 5, 22, 27, 30
                                                   l.ocal  12
          file number  5
                                                   level  12
          Files
                                                   minsleft  12
            Aborting  34
                                                   node  12
            Color  33
                                                   page  12
            Communications  6
                                                   parity  12
            Configuration  5, 28, 30
                                                   port  12
            DOOR.SYS  31
                                                   printer  12
            Errors  22
                                                   s.creen  12
            GAPDOS.DAT  31, 38
                                                   userbaud  12
            Include  4, 5
                                                 GAPDOS
            Opening  22
                                                   gapdos.baud  13
            PCB USERS  32
                                                   gapdos.forumnum  13
            PCBOARD.SYS  32
                                                   gapdos.givetime  13
            Showing  33
                                                   gapdos.localc  13
            System  24, 27
                                                   gapdos.minavail  13
            USERS.DAT  32, 38
                                                   gapdos.port  13
          Functions  22
                                                   gapdos.timecredit  14
          GAPBBS.CNF  30
                                                   gapdos.userbaud  14
          GAPDOS.DAT  9, 13, 21, 30
                                                 General
          get.string  13, 24, 25, 26,
                                                   do.pcb  13
               29, 36, 39
                                                   noup  13
          get.time&  26
                                                   timecredit  13
          getakey%  26
                                                   timeleft  13
          getrand%  27
                                                 PCBSYS
          Global Variables
                                                   pcbsys.minsleft  15
            Constants
                                                   pcbsys.timeallowed  15
              ANSI
                                                   pcbsys.timecredit  15
                BBLACK  11
                                                   pcbsys.timegiven  15
                BBLUE  11
                                                   pcbsys.timeon  15
                BCYAN  11
                                                   pcbsys.timeused  15
                BGREEN  11
                                                   pcbsys.ttlbytes  15
                BLACK  11
                                                   pcbsys.userrec  15



                                       Page 43





                                        INDEX
                                        -----

              PCBUSERS
                                                   gapdos.exitdos  13
                pcbuser.downloads  15
                                                   gapdos.userfirst  14
                pcbuser.timeson  16
                                                   gapdos.userindex  14
                pcbuser.uploads  16
                                                   gapdos.username  14
              USERS
                                                 General
                user.curdown  14
                                                   anystring1  13
                user.lastfrm  14
                                                   bbs.dir  13
                user.level  14
                                                   board.name  13
                user.minutes  14
                                                   gendir  13
                user.page  14
                                                   maindir  13
            Longs
                                                   sysname  13
              DOOR.SYS
                                                 PCBSYS
                downbytes  12
                                                   pcbsys.baud  15
                downloads  12
                                                   pcbsys.calleralarm  15
                maxbytes  12
                                                   pcbsys.colorc  15
                recnum  12
                                                   pcbsys.ctime  15
                timeson  12
                                                   pcbsys.display  15
                upbytes  12
                                                   pcbsys.eactive  15
                uploads  12
                                                   pcbsys.errcorrect  15
              GAPDOS
                                                   pcbsys.event  15
                gapdos.callbytes  13
                                                   pcbsys.forumnum  15
                gapdos.joined  13
                                                   pcbsys.node  15
                gapdos.starttime  13
                                                   pcbsys.pagebell  15
              General
                                                   pcbsys.password  15
                starttime  13
                                                   pcbsys.port  15
                temptime  13
                                                   pcbsys.printer  15
                timenow  13
                                                   pcbsys.sevent  15
              USERS
                                                   pcbsys.sysopnext  15
                user.blts  14
                                                   pcbsys.userbaud  15
                user.curbytes  14
                                                   pcbsys.userfirst  15
                user.doors  14
                                                   pcbsys.username  15
                user.downloads  14
                                                 PCBUSERS
                user.joined  14
                                                   pcbuser.bphone  15
                user.lastmsg  14
                                                   pcbuser.city  15
                user.mesleft  14
                                                   pcbuser.cnfregis  15
                user.mesread  14
                                                   pcbuser.delete  15
                user.timeson  14
                                                   pcbuser.downbytes  15
                user.ttlbytes  14
                                                   pcbuser.expert  15
                user.ttlmins  14
                                                   pcbuser.hphone  15
                user.upbytes  14
                                                   pcbuser.lastconf  15
                user.uploads  14
                                                   pcbuser.lastdate  16
            Strings
                                                   pcbuser.lastdir  16
              DOOR.SYS
                                                   pcbuser.lastime  16
                bphone  12
                                                   pcbuser.lastmsg  16
                city  12
                                                   pcbuser.lastmsg1  16
                first  12
                                                   pcbuser.level  16
                hphone  12
                                                   pcbuser.name  16
                last  12
                                                   pcbuser.page  16
                lastdate  12
                                                   pcbuser.passwd  16
                password  12
                                                   pcbuser.protocol  16
                subscrip  12
                                                   pcbuser.regisdate  16
                username  12
                                                   pcbuser.upbytes  16
              GAPDOS
                                                 USERS
                gapdos.didnew  13
                                                   user.bphone  14



                                       Page 44





                                        INDEX
                                        -----

                user.city  14
                                             timeleft  26, 37
                user.expert  14
                                             Trimming Spaces  32
                user.fname  14
                                             update.clock  37
                user.handle  14
                                             USERS.DAT  9, 14, 21
                user.hphone  14
                                             user defined keys  4
                user.lastdate  14
                                             waitasec  37
                user.lastdir  14
                                             wrap.word  37
                user.lasttime  14
                                             write.gapdos%  38
                user.lname  14
                                             write.gapuser%  38
                user.passwd  14
                                             write.pcbsys%  39
                user.private  14
                                             write.pcbuser%  39
                user.protocol  14
                                             {  33
                user.subscribe  14
                user.sysop  14
          IEEE  6, 7
          init.door  5, 15, 27, 28, 30,
               31, 32
          leave  5, 27
          mbf  6, 7
          MKDMBF  39
          MKSMBF  39
          more  28
          New Line  28, 35
          nl  28
          no.carrier  28
          node  6
          noup  25
          ON KEY  4
          open.gap%  28
          pagesysop  29
          pause  29, 37
          PCB USERS  15, 21
          PCBOARD.SYS  5, 6, 15, 21
          putachar  29, 35
          putkey  30, 35
          read.cnf  4, 5, 30
          read.doorsys%  31
          read.gapdos%  31
          read.gapuser%  32
          read.pcbsys%  32
          read.pcbuser%  32
          right.trim$  32
          set.status  33
          show.file  33
          show.mess  23, 35, 39
          Spaces
            Trimming  32
            USERS.DAT  38
          Status Line  2, 33, 34, 37
          string output  35
          Subroutines  22
          time.credit  36
          time.left  37
          timecredit  36, 38



                                       Page 45


