08/15/94 GAPQBDR now supports the Fossil Interface. This interface requires that a Fossil Device driver be loaded. We recommend X00.SYS. In order to utilize the Fossil Interface, your users must add the following to Line 5 of the Door Configuration file: FOSSIL For example: DOOR.CNF ---------------------- C:\GAP The Crow's Nest BBS 4 03F8 FOSSIL <- tells GAPQBDR to use the Fossil Interface D000 320 4 If you've modified the source code, you should study the changes that were made in INITDOOR.BAS. Specifically, the functions 'read.cnf' and 'init.door'. Take note of where and how in sets the variable 'interface' (it is set to 3 when using the Fossil Interface) and how the Fossil port is initialized. The following Fossil specific functions have been added: DECLARE FUNCTION fos.setport% ALIAS "FOS_SETPORT" (port%) ' Used to tell Fossil driver we want to use the specified Port ' MUST BE CALLED prior to using any Communications routine (if using ' the Fossil Interface). ' port = COM Port # (0 based, COM 1 = 0, COM 2 = 1, etc) ' Return 0 = success ' 1 = Device Driver Not installed DECLARE SUB fos.resetport ALIAS "FOS_RESETPORT" () ' Tells the Fossil Driver we are finished with the port. DECLARE FUNCTION fos.initport% ALIAS "FOS_INITPORT" (baud&, parity%, d.ata%, s.top%) ' Initializes the Fossil port ' baud = baudrate (long) ' parity = 0 = None, 1 = Odd, 2 = Even ' data = 6, 7, or 8 ' stop = 1 or 2 ' Return 0 = success ' 1 = bad parameter passed DECLARE SUB fos.clrtx ALIAS "FOS_CLRTX" () ' Clears the Fossil port's Transmit Buffer Note that Fossil Ports are 0 based where COM 1 = Port 0, COM 2 = Port 1, etc. 04/24/93 GAPQBDR now supports the DigiBoard COM/Xi series of Intelligent Serial Communications boards. These boards contain 4 or 8 serial ports along with their own on-board processor to control the ports. These boards are actually a single-board computer dedicated to handling serial port I/O. By moving the serial I/O functions from the Host Computer to the DigiBoard, the IRQ and Interrupt Latency bottleneck that plagues Multi-Tasking users is eliminated. GAPQBDR supports the DigiBoard in two ways: Direct Programming and INT14/EBIOS calls. Direct Programming is the fastest because it eliminates the need for costly software interrupt calls to a slower BIOS. In addition it does not require the presence of a Device Driver which basically performs the same functions as the Direct Programming method. INT14/EBIOS requires that a Device Driver be loaded (this driver is supplied by DigiBoard). Serial Port I/O is performed by issuing software interrupts (Interrupt 14). Whether or not to use the Direct Interface or the INT14/EBIOS Interface depends on the BBS which will be running the GAPQBDR program. If the BBS is utilizing the Device Driver, then that is how a GAPQBDR program must be configured. If the BBS is a GAP system and the Sysop is using the Direct Interface, then the GAPQBDR program must be configred the same. The two interfaces can not be intermixed since the Direct Interface will essentially put the Device Driver to sleep. When using the INT14/EBIOS interface and the DigiBoard supplied Device Driver, it is not necessary to turn on the "Character Waiting" flags for each of the ports. GAPQBDR does not use these flags as they basically defeat the purpose of using a multi-port board in a multi-tasking system. To use these flags an IRQ must be dedicated to the DigiBoard. If the flags are not used, the IRQ need not be set. Imagine running 8 ports under a Multi-Tasker where all 8 ports are in use. As characters are received by each of the 8 ports, an interrupt is generated. The Device Driver must service the interrupt request and since the driver runs on the Host Computer, it will be spending a lot of precious time figuring out which of the ports generated the interrupt and updating its "Character Waiting" flag for that port. By disabling the "Character Waiting" flags and not utilizing the IRQ, the Host Computer will not know it has 8 serial ports running at high speed at the same time. If, however, the Sysop has the IRQ and Character Waiting flags enabled, no harm is done. GAPQBDR simply will not utilize the flags. The Character Waiting flags are provided because making Interrupt 14 calls takes longer than simply checking a memory address (which, by the way, is what the Direct Programming interface does). To use a DigiBoard with a GAPQBDR program, 4 additional lines have been added to the Door Configuration file. These 4 new options are: Line 5 - The COM Port Interface to use: STANDARD = Regular Communications Port Interface. This is what you would normally use. DIGIBOARD = Direct DigiBoard Programming Interface. Must be used in conjunction with a program called RESETDIG.EXE. If you don't have this program but have a DigiBoard, then use the following option. INT14/EBIOS = Indirect DigiBoard Support via a Device Driver. All Communications to the DigiBoard (or any board that supports INT14/EBIOS) are performed via a Software Interrupt that the Device Driver handles. Line 6 - This is the DigiBoard Memory Window, or the address the card uses as a communications area between the card and the Host Computer. Only needed if using an Interface set to DIGIBOARD. If using STANDARD or INT14/EBIOS, this can be set to 0. This address must be entered in Hexadecimal. Valid entries are: C000, C800, D000, and D800 Line 7 - This is the DigiBoard I/O Port address that the Board is attached to. Only needed if using an Interface set to DIGIBOARD. If using STANDARD or INT14/EBIOS, can be set to 0. This address must be entered in Hexadecimal. Valid entries are: 100, 110, 120, 200, 220, 300 and 320 Line 8 - This is the DigiBoard Channel Number for the port this program will be utilizing. This is REQUIRED for DIGIBOARD and INT14/EBIOS Interfaces. This is 1 - 8 for the DIGIBOARD Interface and usually 4 - 11 for the INT14/EBIOS Interface. This number tells the program which of the Com Ports on the DigiBoard it should use. The new configuration file for a GAPQBDR that will be using a DigiBoard Serial port would look like the following: DOOR.CNF ---------------------- C:\GAP The Crow's Nest BBS 4 03F8 INT14/EBIOS D000 320 4 Lines 3 and 4 are ignored by the program and can be set to 0. Because this is an INT14/EBIOS interface, lines 6 and 7 are also ignored. Line 8 is the Channel Number and in this case, it is the first serial port on the DigiBoard (Channel Numbers 1 - 4 are generally reserved for COM 1 - COM 4 on the Host Computer, although this is up to the Sysop and how he/she configured the Device Driver). To use the Direct Programming Interface, the configuration file would look something like: DOOR.CNF ---------------------- C:\GAP The Crow's Nest BBS 4 03F8 DIGIBOARD D000 320 1 Lines 3 and 4 are ignored by the program and can be set to 0. Line 6 is the Memory Window that the DigiBoard and the program use to communicate with each other. Line 7 is the I/O port that the board uses. Line 8 is the Channel Number which, in this case, is the first serial port on the DigiBoard. To use the Standard Com Port Interface, the configuration file would look something like: DOOR.CNF ---------------------- C:\GAP The Crow's Nest BBS 4 03F8 STANDARD 0 0 0 Lines 3 and 4 are used ONLY if the program will be using a COM port other than COM 1 or COM 2. They can be set to 0 if the program will not be using non-standard COM ports. Line 5 tells the program to use its own internal interrupt handler. Lines 6-8 are not used and can be set to 0. Note that even if the DigiBoard specific options are not used or needed they must still be present in the Configration File and all Door Specific options now begin on Line 9. 07/25/92 Note, with this release of GAPQBDR, you MUST change your Door Configuration files such that you remove line 3 (the PCB flag). This line is no longer needed since PCB is capable of writing a DOOR.SYS file. Your configuration files will now have 4 required lines: Path to BBS Directory Name of the BBS IRQ Base Address The 'do.pcb' flag has been removed. GAPQBDR will work with any BBS system that writes a correct DOOR.SYS file. This includes GAP, WildCat, and PCB. 05/23/91 Turned on the routines that allow for ports other than COM 1 and 2. This requires a change to your Door configuration file. Lines 4 and 5 of the CNF file are now reserved for use by GAPQBDR. If your door programs are using these lines for their own use, you must now begin your own configuration options on line 6. Line 4 of the configuration file is the IRQ for the port. Line 5 of the configuration file is the Base Address for the port. If the user is using COM 1 or COM 2, then they may enter a zero (0) on both of these lines, as the default port assignments are always used for COM 1 and COM 2. The IRQ (line 4) must be in the range of 1 - 7. The Base Address (line 5) must be a Hexadecimal number in the format of: 02E8 03E8 etc. A sample configuration file is included. If you are using modified GAPQBDR source code, the two routines that were changed are read.cnf and init.door (contained in INITDOOR.BAS). 12/02/90 Modified the COM routines so that all local data is contained in the Code Segment of the GAPCOM module instead of the default Data Segment. This will eliminate the problem some programmers were having with their doors in that the door could only be run once (under DesqView). On any subsequent runs, all incomming data from the remote caller was being vectored to some unknown interrupt handler, instead of GAPQBDR's own handler. Hopefully, this will also eliminate the lock up problems some were having when their door exits back to the BBS system. 12/01/90 Modified the timecredit variable so that it is no longer initialized with the timecredits as written to DOOR.SYS. When writing DOOR.SYS, GAP writes the actual time remaining and this time includes any timecredits the caller may have. However, when figuring time left, GAPQBDR takes into consideration the time credits, so if a caller had 10 minutes left and -10 time credits (in GAP), the door program would log the caller off for lack of time. You may still use the timecredit variable as before, however if you intend to update DOOR.SYS with any timecredits given or taken away from the caller, you must add your timecredits to a new variable called realcredit before updating DOOR.SYS. Realcredit contains the actual BBS timecredits. It is not used in figuring time left for a caller while in the door, since the BBS program is supposed to write the actual time left to DOOR.SYS. 07/08/90 GAPQBDR has been updated so that it now reads the new fields in DOOR.SYS. In addition, in a PCB system, the 3 files, PCBOARD.DAT, PCBOARD.SYS, and USERS are no longer read. Instead, GAPQBDR will read the DOOR.SYS file that PCB now writes to obtain the information required to operate. The following variables have been declared and are available for use. These variables are read from some of the new fields in DOOR.SYS: COMMON SHARED dflt.color AS INTEGER ' BBS default color COMMON SHARED maxfiles AS INTEGER ' Max files available COMMON SHARED curfiles AS INTEGER ' Current files downloaded COMMON SHARED doors.open AS LONG ' Total doors opened COMMON SHARED mesleft AS LONG ' Total messages left COMMON SHARED downbytes AS LONG; ' total download bytes COMMON SHARED handle AS STRING ' caller's Handle COMMON SHARED event.time AS STRING ' event run time COMMON SHARED last.new AS STRING ' last new files scan GAPQBDR is now compatible with BASIC 7. This required but a very minor change to one of the functions. However, it was a frustating time, to say the least. In our 'C' programming, we use the Alternate Math Library as this results in a 10k decrease in CODE size. So, we set out to install BASIC 7 using the Alternate Math Library. To utilize this library, you compile your modules using the /FPa switch. Everything compiles just fine, but when trying to create the GAPQBDR Quick Library, the Linker complains of "unresolved external references". After many frustrating hours, we decided to install BASIC 7 with the Emulator Library (the default). This Math Library works just fine and so we will just leave it at that and not attempt to waste any more time trying to determine why the Alternate Math Library does not work. There are two ZIP files contained within GAPQBDR that contain the actual LIB and QLB files. One is for BASIC 7 (or QBX) and the other is for QB 4.5. NOTE (09/02/90): The Quick Library for BASIC 7 has been removed from GAPQBDR. It seems that the only way to create a 'workable' QLB for QBX is to use /Fs (far strings). This will create a GAPQBDR.QLB that QBX can load, but your programs will not work correctly. GAPQBDR was not written to take advantage of any so called "features" of BASIC 7 (Far Strings being one of them), so if you use BASIC 7, you will need to do your compiling using BC. 12/16/89 Updated the GAPDOS record structure to be compatible with the current version of GAP. Fixed a problem with dropped carriers and PCB. 10/01/89 Changes to your source file: If you called previously undocumented GAPQBDR routines, you will need to include GAPQBSRC.BI right after GAPQBDR.BI. Previously undocumented functions are now fully referenced in the printed manual. GAPQBSRC.BI contains the function declarations for these routines as well as declarations for the private variables. If you receive a "Sub Program Not Defined" or an unresolved external reference, you probably need to include GAPQBSRC.BI. The error handler is now part of your source modules. It is in GAPQBERR.BI and MUST be included AFTER any declarations but BEFORE any basic statments. ' $INCLUDE: 'gapqberr.bi' In other words, it is in included after any variable declarations and before any executible statments. Note that A$ = "This is a sting" is a statment and not a variable declaration. Because the error handler is now a part of your program, you must use the /x switch when compiling your source module. Please refer to the EXAMPLE.BAS program for more information as to how the error handler is included in your programs. A number of new routines were added to this release. These new functions (as well as descriptions of previously undocumented routines) are fully referenced in the printed manual. This release of GAPQBDR requires that the GAP system be at version 4.3 or higher. New fields were added to DOOR.SYS and only GAP versions at or above 4.3 are able to write them. Your previously compiled doors will continue to operate normally. This change affects only newly compiled programs. If you licensed the source code, there is additional information contained within SRCREAD.ME. In addition, you will find that the source modules were broken up into smaller pieces and that most of the private routines are now provided. 08/28/89 GAPQBDR now utilizes all new communications routines. It is no longer dependant upon QB to handle communications I/O. What this means to you, the programmer, is that you no longer need worry about your end users having a DTR patched version of BRUN45.EXE. In addition, those "device time out" and "bad file number" errors QB gives us when it has problems with the COM port are eliminated. The communications routines are written in assembler for speed and compactness. They are capable of handling any com port you have set up, however we have limited them to COM 1 - COM 4. They support speeds to 38.4k, and will automatically use the 16550 FIFO buffer if that chip is installed. Because of these modifications, you will need to make changes to your source code if you accessed the com port directly or through file #9. The communications routines are documented in the printed manual only. It is of vital importance that you exit your door via the leave function. Failure to do so will leave communications interrupts active which will cause your computer to lock up at some point. The GAPQBDR environment variable is no longer used to specify that the BBS is a PCB system. Instead, line 3 of the door configuration file is used for this purpose. On line 3 of that file, enter (or have your end users enter) a 1 if the BBS is PCB, or 0 for a GAP system. The default is still GAP mode so if anything other than a 1 is found on line 3 of the configuration file, GAPQBDR will assume the BBS is GAP. Any options you may need for a particular door will begin on line 4.