Category : Pascal Source Code
Archive   : JPDOOR32.ZIP
Filename : JPDOOR.REF

 
Output of file : JPDOOR.REF contained in archive : JPDOOR32.ZIP



ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ MOTOR CITY SOFTWARE ³
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³
³ ³ JPDoor - Version 3.2 SE ³ ³
³ ³ Copyright 1990 - 1992 ³ ³
³ ³ ÚÄÄÄÄÄÄÄÄÄÄ¿ ³ ³
³ ³ ³\ ³ ³ ³
³ ³ ³ \ ³ ³ ³
³ ³ ³ \ P ³ ³ ³
³ ³ ³ \ A ³ ³ ³
³ ³ ³ ³ S ³ ³ ³
³ ³ ³ ³ C ³ ³ ³
³ ³ 5.5 ³ ³ A ³ 6.0 ³ ³
³ ³ ³ o³ L ³ ³ ³
³ ³ ³ ³ ³ ³ ³
³ ³ \ ³ÄÄÄÄÄÄÙ ³ ³
³ ³ \ ³ ³ ³
³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄ\ ³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³
³ The Ultimate \³ Door Writing Unit. ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ



JPDoor - Version 3.2 SE
Copyright 1990,1991,1992 by Motor City Software
All Rights Reserved





* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* R E F E R E N C E S E C T I O N *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *



P R I N T T H I S S E C T I O N A N D U S E I T F O R



Q U I C K R E F E R E N C E

* * * * * * * * * * * * * * *













REFERENCE:
----------


Unit Constants
--------------

JPDoor has some pre-defined constants which cannot be changed, but
can be used by your program.


MaxPort = 4; { Max Com Ports Supported }

JPDVersion = '3.2'; { JPDoor Version }

Compiled = 'Compiled on '; { Date JPDoor was compiled }

Beta = False; { True in Beta versions }

ANSIcls = #27 + '[40m' + #27 + '[2J'; { Ansi Codes to clear screen }

MaxKeys = 20; { Max User keys supported }

LockMde = 64+2; { File Locking opens files as}
{ Shared/Read/Write }

SoftCr = #141; { Use this in messages for CR}

Cr = #13; { Carriage Return }


The Following are Used in PostMsg attributes

Msg_Delete = 1; { (Attr AND 1) = 1 msg deleted }

Msg_Out_Net = 2; { (Attr AND 2) = 2 netmail to be scanned out}

Msg_Net = 4; { (Attr AND 4) = 4 Netmail Message }

Msg_Private = 8; { (Attr AND 8) = 8 Private Message }

Msg_Received = 16; { (Attr AND 16) = 16 Message Received }

Msg_Out_Echo = 32; { (Attr AND 32) = 32 Echomail to be scanned out }

Msg_Local = 64; { (Attr AND 64) = 64 ALWAYS SET msg entered locally }














[ JPDoor V3.2 SE Reference Manual ] [ Page 2 ]

Unit Types
----------

The following Types are already defined in JPDoor, and are available
for your own use:

PathStr = String[79];
StatStr = String[78];
TextString = String;
Str18 = String[18];
Str15 = String[15];
Str8 = String[8];
Str5 = String[5];
Str2 = String[2];
Str1 = String[1];
NameStr = String[30];
CharSet = Set of Char;
FlagSet = (A0,A1,A2,A3,A4,A5,A6,A7,A8,
B1,B2,B3,B4,B5,B6,B7,B8,
C1,C2,C3,C4,C5,C6,C7,C8,
D1,D2,D3,D4,D5,D6,D7,D8);
On_Off = (Null,On,Off);
Killer = (Kill,NoKill);
CardSuit = (C,D,H,S);
JPUseData = Array[1..2048] of Byte;
JPUseRecord = Record
Name : String[35];
Line : Byte;
DoorName : String[20];
Status : Byte;
MaxPlayers : Byte;
Filler : Array[1..13] of Byte;
MultiNode : Boolean;
PID : Integer;
Data : JPUseData;
End;

AskType = (Yes, No, Ask, Only);

VideoType = (Auto, Short, Long);

MsgKindsType = (Both, Private, Public, ROnly);

MsgTxt = Record
Line : String[255];
End;

MsgToIdx = Record;
User : String[35];
End;

MsgType = (LocalMail, NetMail, EchoMail);
OrphanType = (Ignore, Create, RA_Kill);
FlagType = array[1..4] of Byte;
RA_Time = String[5];
RA_Date = String[8];
LongDate = String[9];



[ JPDoor V3.2 SE Reference Manual ] [ Page 3 ]

Unit Types (Continued)
----------------------

NetAddress = record
Zone,
Net,
Node,
Point : Word;
end;

LANGUAGErecord = record
Name : String[20];
Attribute : Byte;
DefName,
MenuPath,
TextPath,
QuesPath : String[60];
FreeSpace : Array[1..200] of Byte;
end;

MSGINFOrecord = record
LowMsg,
HighMsg,
TotalMsgs : Word;
TotalOnBoard : array[1..200] of Word;
end;

MSGIDXrecord = record
MsgNum : Integer;
Board : Byte;
end;

MSGTOIDXrecord = String[35];

MSGHDRrecord = record
MsgNum : Integer;
PrevReply,
NextReply,
TimesRead : Word;
StartBlock : Word;
NumBlocks,
DestNet,
DestNode,
OrigNet,
OrigNode : Word;
DestZone,
OrigZone : Byte;
Cost : Word;
MsgAttr,
NetAttr,
Board : Byte;
PostTime : RA_Time;
PostDate : RA_Date;
WhoTo,
WhoFrom : MSGTOIDXrecord;
Subject : String[72];
end;

MSGTXTrecord = String[255];

[ JPDoor V3.2 SE Reference Manual ] [ Page 4 ]

Unit Types (Continued)
----------------------

{ RemoteAccess V1.1x Useron.Bbs }
USERON110record = record
Name : MSGTOIDXrecord;
Handle : MSGTOIDXrecord;
Line : Byte;
Baud : Word;
City : String[25];
DoNotDisturb : Boolean;
Status : Byte;
Attribute : Byte;
end;


{ RemoteAccess 1.00 Useron.Bbs }
USERONrecord = record
Name : MSGTOIDXrecord;
Line : Byte;
Baud : Word;
City : String[25];
DoNotDisturb : Boolean;
Status : Byte;
end;

{ RemoteAccess Status byte - 0 : Browsing (in a menu)
1 : Uploading/downloading
2 : Reading/posting messages
3 : In a door/external utility
4 : Chatting with sysop
5 : Answering questionnaire }


{ QBBS 2.75 UserOn.BBS }
Q_USERONrecord= Record
Name : String[35];
Line : Byte;
Baud : Word;
City : String[25];
DoNotDisturb : Boolean;
End;


{ RemoteAccess V1.10 Lastcall.Bbs }
LASTCALL110record = record
Line : Byte;
Name : MSGTOIDXrecord;
Handle : MSGTOIDXrecord;
City : String[25];
Baud : Word;
Times : LongInt;
LogOn : String[5];
LogOff : String[5];
Attribute : Byte; { Byte 0 : Hidden }
end;




[ JPDoor V3.2 SE Reference Manual ] [ Page 5 ]

Unit Types (Continued)
----------------------

RemoteAccess V1.00 / QBBS Lastcall.Bbs

LASTCALLrecord = record
Line : Byte;
Name : MSGTOIDXrecord;
City : String[25];
Baud : Word;
Times : LongInt;
LogOn : String[5];
LogOff : String[5];
end;


LASTREADrecord = array[1..200] of Word;


COMBINEDrecord = array[1..25] of Byte;


USERSIDXrecord = record
NameCRC32,
HandleCRC32 : Longint;
End;


USERSXIrecord = record
Handle : String[35];
Comment : String[80];
FirstDate : RA_Date;
CombinedInfo : Array[1..25] of byte;
BirthDate : RA_Date;
SubDate : RA_Date;
ScreenWidth : Byte;
MsgArea : Byte;
FileArea : Byte;
Language : Byte;
DateFormat : Byte;
ForwardTo : String[35];
Extra : Array[1..43] of byte;
End;

















[ JPDoor V3.2 SE Reference Manual ] [ Page 6 ]

Unit Types (Continued)
----------------------

RemoteAccess/QBBS USERS.BBS File Structure

USERSRecord = record
Name : string[35];
Location : string[25];
Password : string[15];
DataPhone,
VoicePhone : string[12];
LastTime : string[5];
LastDate : RA_Date;
Attribute : byte;
{ Bit 0 : Deleted
1 : Clear screen
2 : More prompt
3 : ANSI
4 : No-kill
5 : Xfer priority
6 : Full screen msg editor
7 : Quiet mode }
Flags : FlagType;
Credit,
Pending,
MsgsPosted,
LastRead,
Security,
NoCalls,
Uploads,
Downloads,
UploadsK,
DownLoadsK : word;
TodayK,
Elapsed : integer;
ScreenLength : word;
LastPwdChange : byte;
Attribute2 : byte;
{ Bit 0 : Hot-keys
1 : AVT/0
2 : Full screen message viewer
3 : Hidden from userlist }
Group : byte;
XIRecord : word;
Extra : array[1..3] of byte;
end;

SYSINFOrecord = record
CallCount : LongInt;
LastCaller : MSGTOIDXrecord;
ExtraSpace : array[1..128] of Byte;
end;

TIMELOGrecord = record
StartDate : RA_Date;
BusyPerHour : array[0..23] of Word;
BusyPerDay : array[0..6] of Word;
end;


[ JPDoor V3.2 SE Reference Manual ] [ Page 7 ]

Unit Types (Continued)
----------------------

MNUrecord = record
Typ : Byte;
Security : Word;
Flags : FlagType;
Display : String[75];
HotKey : Char;
MiscData : String[80];
Foreground,
Background : Byte;
end;


EVENTrecord = record
Status : Byte; { 0=Deleted 1=Enabled 2=Disabled }
RunTime : RA_Time;
ErrorLevel : Byte;
Days : Byte;
Forced : Boolean;
LastTimeRun : RA_Date;
end;

EVENTrecordArray = array[1..20] of EVENTrecord;


MESSAGErecord = record
Name : String[40];
Typ : MsgType;
MsgKinds : MsgKindsType;
Attribute : Byte;
{ Bit 0 : Enable EchoInfo
1 : Combined access
2 : File attaches
3 : Allow aliases
5 : Force handle
6 : Allow Deletes }
DaysKill, { Kill older than 'x' days }
RecvKill : Byte; { Kill recv msgs, recv for more than 'x' days }
CountKill : Word;
ReadSecurity : Word;
ReadFlags : FlagType;
WriteSecurity : Word;
WriteFlags : FlagType;
SysopSecurity : Word;
SysopFlags : FlagType;
OriginLine : String[60];
AkaAddress : Byte;
end;










[ JPDoor V3.2 SE Reference Manual ] [ Page 8 ]

Unit Types (Continued)
----------------------

RemoteAccess V1.1x FILES.RA File Structure

FILESrecord = record
Name : String[30];
Attrib : Byte;

{ Bit 0 : Include in new files scan
1 : Include in upload dupe scan
2 : Permit long descriptions }

FilePath : String[40];
FreeSpace : Array[1..35] of Byte;
UploadSecurity : Word;
UploadFlagsFlags:FlagType;
Security : Word;
Flags : FlagType;
ListSecurity : Word;
ListFlags : FlagType;
end;


RemoteAccess V1.1x CONFIG.RA File Structure

CONFIG110record = Record
VersionID : Word;
CommPort : Byte;
Baud : LongInt;
InitTries : Byte;
InitStr,
BusyStr : String[70];
InitResp,
BusyResp,
Connect300,
Connect1200,
Connect2400,
Connect4800,
Connect9600,
Connect19k,
Connect38k : String[40];
AnswerPhone : Boolean;
Ring,
AnswerStr : String[20];
FlushBuffer : Boolean;
ModemDelay : Integer;
MinimumBaud,
GraphicsBaud,
TransferBaud : Integer;
SlowBaudTimeStart,
SlowBaudTimeEnd,
DownloadTimeStart,
DownloadTimeEnd,
PageStart,
PageEnd : Array[0..6] of RA_Time;
FreeSpace1 : Array[1..70] of Byte;

Continued Next Page...

[ JPDoor V3.2 SE Reference Manual ] [ Page 9 ]

Unit Types (Continued)
----------------------

RemoteAccess V1.1x CONFIG.RA File Structure Continued

PwdExpiry : Word;
MenuPath,
TextPath,
AttachPath,
NodelistPath,
MsgBasePath,
SysPath,
ExternalEdCmd : String[60];
Address : Array[0..9] of NetAddress;
SystemName : String[30];
NewSecurity : Word;
NewCredit : Word;
NewFlags : FlagType;
OriginLine : String[60];
QuoteString : String[15];
Sysop : String[35];
LogFileName : String[60];
FastLogon,
AllowSysRem,
MonoMode,
StrictPwdChecking,
DirectWrite,
SnowCheck : Boolean;
CreditFactor : Integer;
UserTimeOut,
LogonTime,
PasswordTries,
MaxPage,
PageLength : Word;
CheckForMultiLogon,
ExcludeSysopFromList,
OneWordNames : Boolean;
CheckMail : AskType;
AskVoicePhone,
AskDataPhone,
DoFullMailCheck,
AllowFileShells,
FixUploadDates,
FreezeChat : Boolean;
ANSI, { ANSI: Yes, no, or ask new users }
ClearScreen, { Clear: " }
MorePrompt : AskType; { More: " }
UploadMsgs : Boolean;
KillSent : AskType; { Kill/Sent " }
CrashAskSec : Word; { Min sec# to ask 'Crash Mail ?' }
CrashAskFlags : FlagType;
CrashSec : Word; { Min sec# to always send crash mail. }
CrashFlags : FlagType;
FAttachSec : Word; { " ask 'File Attach ?' }
FAttachFlags : FlagType;

Continued Next Page...



[ JPDoor V3.2 SE Reference Manual ] [ Page 10]

Unit Types (Continued)
----------------------

RemoteAccess V1.1x CONFIG.RA File Structure Continued

NormFore,
NormBack,
StatFore,
StatBack,
HiBack,
HiFore,
WindFore,
WindBack,
ExitLocal,
Exit300,
Exit1200,
Exit2400,
Exit4800,
Exit9600,
Exit19k,
Exit38k : Byte;
MultiLine : Boolean;
MinPwdLen : Byte;
MinUpSpace : Word;
HotKeys : AskType;
BorderFore,
BorderBack,
BarFore,
BarBack,
LogStyle,
MultiTasker,
PwdBoard : Byte;
BufferSize : Word;
FKeys : Array[1..10] of String[60];
WhyPage : Boolean;
LeaveMsg : Byte;
ShowMissingFiles : Boolean;
FreeSpace2 : Array[1..11] of Byte;
AllowNetmailReplies : Boolean;
LogonPrompt : String[40];
CheckNewFiles : AskType;
ReplyHeader : String[60];
BlankSecs : byte;
ProtocolAttrib : Array[1..6] of Byte;
ErrorFreeString : String[15];
DefaultCombined : COMBINEDrecord;
RenumThreshold : Word;
LeftBracket,
RightBracket : Char;
AskForHandle : Boolean;
AskForBirthDate : Boolean;
GroupMailSec : Word;
ConfirmMsgDeletes : Boolean;
FreeSpace3 : Array[1..163] of Byte;

Continued Next Page...




[ JPDoor V3.2 SE Reference Manual ] [ Page 11]

Unit Types (Continued)
----------------------

RemoteAccess V1.1x CONFIG.RA File Structure Continued

NewUserGroup : Byte;
AVATAR : AskType;
BadPwdArea : Byte;
Location : String[40];
DoAfterAction : Byte; {0 = wait for CR, > 0 = wait for x seconds}
FileLine : String[40];
CRfore,
CRback : Byte;
LangHdr : String[40];
SendBreak : Boolean;
ListPath : String[60];
FullMsgView : AskType;
EMSI_Enable,
EMSI_NewUser : Boolean;
EchoChar : String[1];
Connect7200,
Connect12000,
Connect14400 : String[40];
Exit7200,
Exit12000,
Exit14400 : Byte;
ChatCommand : String[60];
ExtEd : AskType;
NewuserLanguage : Byte;
LanguagePrompt : String[40];
VideoMode : VideoType;
AutoDetectANSI : Boolean;
OffHook : Boolean;
NewUserDateFormat : Byte;
KeyboardPwd : String[15];
CapLocation : Boolean;
NewuserSub : Byte;
PrinterName : String[4];
HilitePromptFore,
HiLitePromptBack : Byte;
InitStr2 : String[70];
AltJSwap : Boolean;
SemPath : String[60];
AutoChatCapture : Boolean;
FutureExpansion : Array[1..97] of Byte;
end;














[ JPDoor V3.2 SE Reference Manual ] [ Page 12]

Unit Types (Continued)
----------------------

RemoteAccess V1.10 EXITINFO.BBS File Structure

ExitRec = record
Baud : Word;
SysInfo : SYSINFOrecord;
TimeLogInfo : TIMELOGrecord;
UserInfo : USERSrecord;
EventInfo : EVENTrecord;
NetMailEntered,
EchoMailEntered : Boolean;
LoginTime : RA_Time;
LoginDate : RA_Date;
TimeLimit : Word;
LoginSec,
Credit : LongInt;
UserRecord : Integer;
ReadThru,
NumberPages,
DownloadLimit : Word;
TimeOfCreation : RA_Time;
LogonPassword : String[15];
WantChat : Boolean;
DeductedTime : Integer;
MenuStack : Array[1..50] of String[8];
MenuStackPointer : Byte;
UserXIinfo : USERSXIrecord;
ErrorFreeConnect,
SysopNext : Boolean;
EMSI_Session : Boolean; { These fields hold }
EMSI_Crtdef, { data related to an }
EMSI_Protocols, { EMSI session }
EMSI_Capabilities,
EMSI_Requests,
EMSI_Software : String[40];
Hold_Attr1,
Hold_Attr2,
Hold_Len : Byte;
ExtraSpace : Array[1..100] of Byte;
end;


















[ JPDoor V3.2 SE Reference Manual ] [ Page 13]

Unit Types (Continued)
----------------------

RemoteAccess PROTOCAL.RA File Structure

PROTOCOLrecord = record
Name : String[15];
ActiveKey : Char;
OpusTypeCtlFile,
BatchAvailable : Boolean;
Attribute : Byte; { 0=Disabled, 1=Enabled }
LogFileName,
CtlFileName,
DnCmdString,
DnCtlString,
UpCmdString,
UpCtlString : String[80];
UpLogKeyword,
DnLogKeyword : String[20];
XferDescWordNum,
XferNameWordNum : Byte;
end;


QBBS 2.75 USERS.BBS File Structure

Q_UserRecord = record
Name : String[35];
City : String[25];
Pwd : String[15];
DataPhone,
HomePhone : String[12];
LastTime : String[5];
LastDate : String[8];
Attrib : Byte; -------------- Bit 0: Deleted
Flags : FlagType; Bit 1: Screen Clear Codes
Credit, Bit 2: More Prompt
Pending, Bit 3: ANSI
TimesPosted, Bit 4: No-Kill
HighMsgRead, Bit 5: Ignore Download Hours
SecLvl, Bit 6: ANSI Full Screen Editor
Times, Bit 7: Sex (0=male, 1=female)
Ups,
Downs,
UpK,
DownK,
TodayK : Word;
Elapsed,
Len : Integer;
CombinedPtr : Word; (* Record number in COMBINED.BBS *)
AliasPtr : Word; (* Record number in ALIAS.BBS *)
Birthday : Longint;
End;







[ JPDoor V3.2 SE Reference Manual ] [ Page 14]

Unit Types (Continued)
----------------------


EventStat = (Deleted, Enabled, Disabled);


Q_EventRecord = Record (* QBBS 2.75 EVENTCFG.DAT *)
Status : Byte;
RunTime : LongInt;
ErrorLevel : Byte;
Days : Byte;
Forced : Boolean;
LastTimeRun : LongInt;
Spare : Array[1..7] of Byte;
End;

GosubDataType = array[1..20] of String[8];


QBBS 2.75 Exitinfo.bbs File Structure

Q_ExitRecord = Record
BaudRate : Integer;
SysInfo : SysInfoRecord;
TimeLogInfo : TimeLogRecord;
UserInfo : Q_UserRecord;
EventInfo : Q_EventRecord;
NetMailEntered : Boolean;
EchoMailEntered : Boolean;
LoginTime : String[5];
LoginDate : String[8];
TmLimit : Integer;
LoginSec : LongInt;
Credit : LongInt;
UserRecNum : Integer;
ReadThru : Integer;
PageTimes : Integer;
DownLimit : Integer;
WantChat : Boolean;
GosubLevel : Byte;
GosubData : GosubDataType;
Menu : String[8];
End;
















[ JPDoor V3.2 SE Reference Manual ] [ Page 15]

Unit Types (Continued)
----------------------

RemoteAccess V0.04 Exitinfo.bbs File Structure

RA04_ExitRec = RECORD
Baud : WORD ;
SysInfo : SysInfoRecord ;
TimeLogInfo : TimeLogRecord ;
UserInfo : UsersRecord ;
EventInfo : EventRecord ;
NetMailEntered : BOOLEAN ;
EchoMailEntered : BOOLEAN ;
LoginTime : STRING[5] ;
LoginDate : STRING[8] ;
TimeLimit : WORD ;
LoginSec : LONGINT ;
Credit : LONGINT ;
UserRecord : WORD ;
ReadThru : WORD ;
NumberPages : WORD ;
DownLoadLimit : WORD ;
TimeOfCreation : STRING[5] ;
LogonPassword : STRING[15] ;
WantChat : BOOLEAN ;
End;


QBBS 2.66 Exitinfo.BBS File Structure

Q_Rec = RECORD
BaudRate: INTEGER ;
SysInfo: SysInfoRecord ;
TimeLogInfo: TimeLogRecord ;
UserInfo: UsersRecord ;
EventInfo: EventRecord ;
NetMailEntered: BOOLEAN ;
EchoMailEntered: BOOLEAN ;
LoginTime: STRING[5] ;
LoginDate: STRING[8] ;
TmLimit: INTEGER ;
LoginSec: LONGINT ;
Credit: LONGINT ;
UserRecNum: INTEGER ;
ReadThru: INTEGER ;
PageTimes: INTEGER ;
DownLimit: INTEGER ;
WantChat: BOOLEAN ;
GosubLevel: BYTE ;
GosubData: GosubDataType ;
Menu: STRING[8] ;
End;








[ JPDoor V3.2 SE Reference Manual ] [ Page 16]

Unit Variables
--------------

JPDoor has some global unit variables which you can address in your
program if necessary. These are usually initialized upon program startup
when 'GetDorInfo' is called. Some variables will be initialized
automatically when JPDoor is initialized.

AFlag,
BFlag,
CFlag,
DFlag STRING[8] These variables are initialized by the
'GetDorInfo' procedure. The current
user's flag settings are read from
EXITINFO.BBS and stored in these variables.

ActiveCount BYTE Used internally in Input routines to time
remote keyboard activity. This is set to
InavtiveVal upon entry into any input
routine, and decremented each minute, if
it reaches 1, then a beep will sound on
the remote terminal, and upon reaching
zero, will terminate with a halt code 3.

ANSI BYTE Set to 1 if user's ANSI setting is on,
set to 0 if it is off. Initialized by
the 'GetDorInfo' procedure. Can also be
5 if you use the SetGraphics function.

BaudString STRING[35] This is the user's baud rate and com port
settings. Initialized by the 'GetDorInfo'
procedure.

Buffers BOOLEAN Initially set to FALSE, this variable deter-
mines whether or not output buffering is used.
When JPDoor is initialized, the DOS environ-
ment variable OUTBUFF is examined. If OUTBUFF
is not set or is set to anything other than
ON, Buffers is set to FALSE. Your program
can override this setting by setting Buffers
within your program. JPDoor has never util-
ized output buffers prior to 2.6c. This was
to speed the action of hot-keys, when used.
However, on high speed systems running under
a multitasker, JPDoor would slow considerably.
Setting Buffers to TRUE speeds up output.
Hot-keys still work with Buffers set to TRUE
although they are a bit slower.



C_Back BYTE This variable contains the currently selected
background color. Valid attributes are as
shown in the Display procedure. Initialized
by the 'SetColor' procedure.





[ JPDoor V3.2 SE Reference Manual ] [ Page 17]

Unit Variables (Continued)
--------------------------

C_Blink BYTE This variable contains the currently selected
blinking attribute. Valid attributes are 0
and 1 (0 = off 1 = on). Initialized by the
'SetColor' procedure.

C_Fore BYTE This variable contains the currently selected
foreground color. Valid attributes are as
shown in the Display procedure. Initialized
by the 'SetColor' procedure.

CheckActivity BOOLEAN If your program needs to spend time processing
something, and you don't want the user keyboard
timeout to throw him off, then set this to
FALSE and it will not monitor for keyboard
activity. Carrier watch will still be active.
This is automatically set to TRUE on any input
routines within JPDoor, and set False after
the input has occured.

CkMsgs BOOLEAN This Variable if set to TRUE the programs
compiled with Jpdoor will automatically check
for online message for the current node in
use, and is used by CkMsg procedure.

CkExitInfo BOOLEAN This Variable can be set to false, JPDoor
will not look for an EXITINFO.BBS file. This
is handy for Someone who is writting a door
that only needs information only from
DORINFOX.DEF. The default is TRUE.

ClubChar CHAR This variable is initialized by JPDoor and
contains an ascii #5 (The Club Character)
This is used in the DrawCard routine.
This variable is used because some terminal
programs don't display the club character
properly, so you may change it to another
character such as a 'C'


Counter INTEGER Used as a general counter. Can be used freely
by the programmer.


Date STRING[20] This variable is initialized by JPDoor and
contains the date at which your program was
started. This is used internally and can be
referenced by your program.

DoorExit PROCEDURE This is a Null Procedure called when exiting
the door.







[ JPDoor V3.2 SE Reference Manual ] [ Page 18]

Unit Variables (Continued)
--------------------------

DoorSys BOOLEAN This variable which is initialized to FALSE.
If set to TRUE will then only read the drop
file Door.Sys. This supports both the
RA 1.xx Door.Sys or PCBoard Door.Sys. This
is read in by the GetDorinfo procedure.

NOTE: RA 1.xx Door.Sys does not give much Information.
The following variables are valid :

UserName
UserFirst
UserLast
PortNum
BaudString
TimeRemaining
ANSI

The following are not supplied by Door.Sys but have
defaults set as listed :

SystemName := 'BBS'
SysopFirst := 'Sysop'
SysopLast := ''
SysopName := 'Sysop'
UserCityState := 'Unknown'
UserSecurity := 0

The standard Door.Sys does NOT supply the following
info, which defaults to the values listed above :

SystemName
SysopName
SysopFirst
SysopLast

These variables can be changed if you wish AFTER
calling the GetDorinfo procedure.


DV BOOLEAN True if Desqview is detected, false if not.
This is initialized upon program startup.

ExitInfo ExitRec This holds the Exitinfo.bbs info if you are
loading it.

ExitInfoBBSName STRING Contains the full path and filename of the
ExitInfo.Bbs file. Initialized by the
GetDorInfo procedure.

ExitInfoPath STRING Defaults to '' until 'GetDorInfo' is called.
This is the path to EXITINFO.BBS. When
'GetDorInfo' is called, the path to
EXITINFO.BBS is passed to it by your program.
From this point on, your routines may
reference this variable if EXITINFO.BBS needs
to be addressed later on in your program.

[ JPDoor V3.2 SE Reference Manual ] [ Page 19]

Unit Variables (Continued)
--------------------------
ExtendedChars BOOLEAN Defaults to FALSE when JPDoor is initialized.
If set to TRUE by your program, JPDoor's
line input routines (GetInput and GetLine)
will allow entry of extended characters (i.e.
control characters, ASCII characters 128 -
255, etc.). If your program does not
require extended character input, you should
leave this set to false. It acts as a guard
against entry of extended characters in the
event of telephone line noise.

ForceNode BOOLEAN If set to True, then JPDoor will read a
Dorinfo1.def file rather than look for
a dorinfo2.def if you pass a 2 as the
NODE to GetDorinfo Default is TRUE.
If you wish to read a dorinfo2.def then
ForceNode MUST be set to false.

FossilHot BOOLEAN If this variable is set to TRUE, the Fossil
will not be de-initialized when your program
exits.

FossilInstalled BOOLEAN True if the Fossil was detected with the
InitFossil procedure. False if not.

FuncKey BOOLEAN Returns True if the last key pressed was
an extended character in Charin, GetChar,
GetInput, or an Extended Character Hot-Key
was pressed.

Hdr MsgHdrRecord This variable is of type MsgHdrRecord defined
above, and is used in the PostMsg function.

HotKey CHAR If you do not tell JPDoor to Kill the hotkey
then this will contain the hotkey character
which was pressed.

HotKeyOn BOOLEAN Initially set to FALSE upon program startup.
This variable is used internally by the
unit and is set using the SetHotKeys_On and
SetHotKeys_OFF procedures. It may be used
during program execution (see section on
Hot-Keys) .

HotKeyPressed BOOLEAN Initially set to FALSE upon program startup.
If Hot-Keys are turned on and a valid Hot-Key
is pressed, this variable will be set to
TRUE. It may be used during program
execution (see section on Hot-Keys).

Hr,Mn,Dum WORD Used internally by JPDoor for Time functions
and procedures.






[ JPDoor V3.2 SE Reference Manual ] [ Page 20]

Unit Variables (Continued)
--------------------------

InactiveVal BYTE This is the amount of time allowed before
the program is terminated due to remote user
inactivity. This value has an initial default
value of 5. If you change it, be sure to
change it to any value greater than 1 as
JPDoor sends a beep to the remote user one
minute prior to the expiration of this
value (the beep is not sent to the local
console).

InUseFile String[45]; This variable is used in the GameInUse
function. If InUseFile is NOT '' then you
call GameInUse which checks for the file
InUseFile. If InUseFile exists, it tells the
user that the game is in use and GameInUse
returns TRUE. If the file does not exist, it
creates it, and GameInUse returns FALSE.
NOTE: it will NOT terminate you program.

If InUseFile = '' then GameInUse returns
False. Make sure this gets called only once,
as it will return TRUE the second time!


JP_Debug BOOLEAN Defaults to False. If you set this to true
then JPDoor will create a log file in the
current directory called 'JP_Debug.Log'
which will log all activity as it tries to
read the dropfiles etc for your door.
This is very handy in determining problems
with sysops setting up your door. The user
of your software may turn this logging on
by setting an environment variable as
follows : SET JP_DEBUG=ON
He/She would do this in the batch file
which loads your door. Make sure you tell
them to turn it off afterwards :
SET JP_DEBUG=

JPUSE JPUSERecord Used to update the JPDoor.Use file with
information about the current user.
(See section on MultiNode communications)

JPUSEOther JPUSERecord Used to read the JPDoor.Use file for
information about other users on the system.
(See section on MultiNode communications)

KillHotKey BOOLEAN Toggled True/False in the SetHotKeys_On
procedure by passing either Kill or NoKill.
See SetHotKeys_On procedure for example.
If True, HotKeys are killed when they are
detected and you will not know which key was
pressed. If you wish to know which key was
hit, then you will need to turn hotkeys on
with NoKill.


[ JPDoor V3.2 SE Reference Manual ] [ Page 21]

Unit Variables (Continued)
--------------------------

LastChecked INTEGER Last time that JPDoor checked for a carrier.
This is Minutes since midnight.

Local BOOLEAN Set to TRUE if user is logged on locally.
Otherwise, set to false. Initialized by the
'GetDorInfo' procedure.

LocalKey BOOLEAN Returns TRUE if a key is pressed at the local
console during a call to GetChar, GetInput,
or GetLine. This is used within the unit but
may be referenced by your program.

MsgBuff ARRAY[0..100] This is the array which will hold the lines
of STRING[80] of text in the PostMsg function.
MsgBuff[0] is reserved and used internally.

MsgToMe STRING[45] This variable holds the name of an online
message to this node ( IE: 'D:\RA\NODE01.RA').

MsgWaiting BOOLEAN This boolean variable maybe referrenced
within your program. If the value is TRUE,
an online message is waiting for the current
node is use. Messages are checked once every
60 seconds and when the status line is drawn.
You can check any time using the CkMsg
procedure.

MultiNode BOOLEAN Defaults to False. If left at False, then
none of the multinode functions and pro-
cedures will work. They will simply Exit
without doing anything. If you do NOT need
to use multi-node functions in your door, do
not set this to true. Setting this to true
will force JPDoor to read the UserOn.BBS to
detect which node the user is calling on, and
this can cause problems when the file
structures change (beyond our control) If
this is left as False, then JPDoor will only
attempt to read the Door.sys or DorinfoX.def
file, and Exitinfo.bbs if CkExitInfo is True.


Node String[2] Node defaults to '1'. Node is used to specify
which line number is in use.

Portnum BYTE Com port in use. If user is local then
this variable is not used by the unit and
need not be initialized. Otherwise, it
should be initialized to 0,1,2 or 3. This
unit supports COM1,COM2,COM3 and COM4
configurations. A value of zero represents
COM1. Initialized by the 'GetDorInfo'
procedure. You should not initialize this
variable manually.



[ JPDoor V3.2 SE Reference Manual ] [ Page 22]

Unit Variables (Continued)
--------------------------

PortStat ARRAY[0..MAXPORT] Contains the Status word of the com ports
of WORD as returned from the last call to the fossil.

ProductName STRING[20] Defaults to NIL when JPDoor is initialized.
If this variable is not NIL, it will be
displayed in the status bar if StatusLineOn
is set to TRUE. This is a good place to put
the name of your program or other information
(i.e. [ALT-C=CHAT]).


QBBS BOOLEAN In order to use any of the Multi-Node type
functions and procedures, you must be running
your door on either RA 1.xx or QBBS 2.75 or
above. If you read the exitinfo.bbs then it
will automatically determine which it is, and
set either the RA100 or QBBS boolean to true;
If your NOT reading Exitinfo but wish to use
the multi-node functions and procedures, then
you are responsible for setting one of these
to True. Don't forget you also need to set
MultiNode := True;


RA004 BOOLEAN If JPDoor detects a RemoteAccess V0.04 or
earlier Exitinfo (if you read it) then this
will be set to True and MultiNode functions
and procedures will not be allowed. They will
simply exit.


RA100 BOOLEAN In order to use any of the Multi-Node type
functions and procedures, you must be running
your door on either RA 1.xx or QBBS 2.75 or
above. If you read the exitinfo.bbs then it
will automatically determine which it is, and
set either the RA100 or QBBS boolean to true;
If your NOT reading Exitinfo but wish to use
the multi-node functions and procedures, then
you are responsible for setting one of these
to True. Don't forget you also need to set
MultiNode := True;


RA110 BOOLEAN This is automatically detected and set to
true if the system is running RA 1.1x in
order to accomodate the different file
structures. All you need to set is RA100
as JPDoor will set RA110 if needed.
(See RA100 above)

Range CharSet Used Internally by JPDoor to hold a set
of characters. May be used by the programmer.
Eg. Range := ['A','B','C'];



[ JPDoor V3.2 SE Reference Manual ] [ Page 23]

Unit Variables (Continued)
--------------------------

Raxit BOOLEAN Defaults to FALSE. If true, then JPDoor will
monitor the semaphore directory for a
RAXITn.eee file which RemoteAccess uses to
force a node to exit with a specific error-
level. See ChkRAXIT procedure below.


Scrap_Entry STRING Used by GetLine function. See reference to
GetLine below.

ScrLen BYTE Defaults to 24 when JPDoor is initialized.
This is the user's screen length. When
'GetDorInfo' is called, the screen length
of the current user is read from
EXITINFO.BBS. If the user's screen length
setting is not equal to 0, it will be
assigned to ScrLen. Otherwise, 24 will
remain the default.

SemaphorePath STRING[45] With RemoteAccess 1.10 you may specify
a semaphore directory. This is where all
inter-node communication files are located,
eg. NODE1.RA NODE2.RA etc... If you wish
your program to send/receive online messages
from other nodes, you will be required to
put the path in this variable.

ShowWindow BOOLEAN This boolean variable which defaults to
TRUE. If set to FALSE will cause JPDoor's
blow up window, which is normally shown for
about 1 second at start up of a program
execution, to be supressed.

Snoop BOOLEAN Defaults to TRUE when JPDoor is
initialized. If set to FALSE by your
program, Snoop mode is turned OFF and no
text will be displayed to the local
console.

SoFar STRING This is a temporary variable used by the
GetInput and GetLine routines. If for some
reason input should be interrupted (i.e. a
SysopKey or UserKey is pressed) the text typed
"so far" is contained in this variable and
may be redisplayed, processed or ignored.

StatLineA Array[1..10] These string variables can be used to change
of StatStr; the contents of the sysop status bars.

StatLineB Array[1..10] This variable as discribed in above statement
of StatStr; can be used to change the contents of the
second line of the sysop status bars.





[ JPDoor V3.2 SE Reference Manual ] [ Page 24]

Unit Variables (Continued)
--------------------------

StatusBar BYTE This is used to tell the ShowStatus procedure
which status bar to display. Hitting the
function keys will toggle this byte, but
you may also give it a value, and then call
ShowStatus if for some reason you need to
control which bar is available. For instance
you may wish to Ask the user for a reason to
chat, put the reason in StatLineA[6] (Like
RemoteAccess) and then display that status
bar if there is no answer to the page.


StatusLineOn BOOLEAN This is the current setting of the Status
Bar. If set to TRUE, the last two lines of
the local screen will contain a Status Bar
with the current online user information.
Initialized by JPDoor with a default setting
of FALSE. To turn the Status Bar on, simply
set this variable to TRUE.

StoreMenu STRING[8] If the program is run on a QuickBBS 2.64
system, JPDoor will automatically convert
EXITINFO.BBS to RemoteAccess 0.03 format. In
doing so, JPDoor, stores the name of the menu
to return to in this variable. When your
program exits and converts EXITINFO.BBS back
to QuickBBS 2.64 format, the value of this
variable will be restored in EXITINFO.BBS.

SysopFirst STRING[35] This is the Sysop's first name as read from
the DORINFO1.DEF file. Initialized by the
'GetDorInfo' procedure.

SysopKey ARRAY [1..20] This variable stores valid Sysop (local)
OF STRING[2] extended keys that may be read during a call
to GetChar, GetLine or GetInput. See
'Getting Started With JPDoor' for more
information.

SysopKeysOn BOOLEAN Must be set to true if you wish to use the
Extended key input and SysopKeys. Defaults
to False.

SysopLast STRING[35] This is the Sysop's last name as read from
the DORINFO1.DEF file. Initialized by the
'GetDorInfo' procedure.

SysopName STRING[35] This is the Sysop's name as read from the
DORINFO1.DEF file. Initialized by the
'GetDorInfo' procedure and returned in
mixed case.

SystemName STRING Contains the name of the BBS as read from
the DORINFO1.DEF file. Initialized by the
'GetDorInfo' procedure.


[ JPDoor V3.2 SE Reference Manual ] [ Page 25]

Unit Variables (Continued)
--------------------------

SysopProc ARRAY [1..20] This variable stores the list of Sysop far
OF PROCEDURE call procedures as defined by the programmer.
See 'Getting Started With JPDoor' for more
information.

ThisNode STRING[2] Defaults to 01 This is used in the status
bar display to show which Line : the user
is calling on. It is up to you to put a
different value in here for each node. I
recommend getting it on the command line,
or from a config file.

Time STRING[10] This variable is initialized by JPDoor and
contains the time at which your program was
started. This is used internally and can be
referenced by your program.


TimeRemaining INTEGER This is the user's time remaining in
minutes. Once initialized, JPDoor's I/O
functions will keep track of this variable
and decrement it as needed. If this variable
reaches a value less than 1, a halt code of 2
will be returned. You should use the
TrapExit.Pas program to handle this program
halt accordingly. Initialized by the
'GetDorInfo' procedure.

TxtIOBuffer ARRAY[1..4096] This is a buffer set up for use with JPDoor
of CHAR internal Text File reading. You are free to
use this buffer for your own Text File I/O
If your interested, read up on the SetTextBuf
procedure in your TurboPascal reference
manual.

UseHandle BOOLEAN Show User HANDLES rather than real names
in the UserOnNode and Whoson procedures.
Defaults to False.

UseLock BOOLEAN If share is loaded and detected on the
system, then UseLock will be set to true
and record locking will be enabled. If
share is not loaded, then UseLock will
be set to false and the record locking
functions will simply exit without attempting
to lock records.

UserCityState STRING This is the user's city and state as read
from the DORINFO1.DEF file and as defined
in the user's record in USERS.BBS.
Initialized by the 'GetDorInfo' procedure.

UserFirst STRING[35] This is the user's first name as read from
the DORINFO1.DEF file. Initialized by the
'GetDorInfo' procedure.


[ JPDoor V3.2 SE Reference Manual ] [ Page 26]

Unit Variables (Continued)
--------------------------

UserKey ARRAY [1..20] This variable stores valid User (remote)
OF STRING[2] extended keys that may be read during a call
to GetChar, GetLine or GetInput. See
'Getting Started With JPDoor' for more
information.

UserKeysOn BOOLEAN Must be set to True if you wish to allow user
extended keys and UserKey. Defaults to False.

UserLast STRING[35] This is the user's last name as read from
the DORINFO1.DEF file. Initialized by the
'GetDorInfo' procedure.

UserName STRING[35] This is the user name as read from the
DORINFO1.DEF file. If one word names are
allowed, the last name is not used since
it is a blank line in DORINFO1.DEF.
Initialized by the 'GetDorInfo' procedure.
Which will return in Mixed case.

UserProc ARRAY [1..20] This variable stores the list of user far
OF PROCEDURE call procedures as defined by the programmer.
See 'Getting Started With JPDoor' for more
information.

UserSecurity WORD This is the user's security level as read
from the DORINFO1.DEF file. It is converted
from a string to an integer. Initialized by
the 'GetDorInfo' procedure.




























[ JPDoor V3.2 SE Reference Manual ] [ Page 27]

Halt Codes
----------

The file TrapExit.Pas is an include file containing a far call
procedure called TRAPEXIT. This procedure's function is to trap HALT
codes from within your program. For example, unexpected exits for
reasons like dropped carrier, user inactivity timeouts etc. should be
trapped and handled here.

JPDoor reserves HALT codes 0 through 10. If you use any HALT
statements in your code, you should use HALT codes above 10.

HALT codes returned by JPDoor functions/procedures are as follows:


Code Description
---- ---------------------------------------------
0 Normal program termination
1 Carrier lost
2 Time limit exceeded
3 User inactive for InactiveVal+ minutes
4 Dorinfo1.Def file not found
5 ExitInfo.BBS file not found
6 Directory change or directory read error
7 CTS - Clear To Send flow Control error
8 Forced Exit via RAXit Semaphore
9 Door.Sys file not found
10 Reserved for future use


For a demonstration of how these are used, see Getting Started With
JPDoor. If you decide to use halt codes within your program, make sure
that you do not use any of the codes listed above (with the exception
of halt code zero).


























[ JPDoor V3.2 SE Reference Manual ] [ Page 28]

REFERENCE:
----------

Functions and Procedures:
-------------------------

The following functions and procedures are listed in the format:

=============================================================================

- Function or Procedure Name (internal) (external)

- Function or Procedure Interface Structure

- Description

- Usage Example

NOTE: An indication of 'internal' and/or 'external' is indicated to
the right of the function or procedure name. This indicates
the use of the function or procedure as noted below:

internal - function/procedure is used by the unit
itself and is not required to be used by
your program.

external - function/procedure is designed for use by your
program and is not used by the unit itself.

internal/external - function/procedure is used by the unit itself but
it is also designed for use by your program.



=============================================================================

Function Ask_YN (external)

ASK_YN( Prompt : TextString ; Color : BYTE) : CHAR ;

Asks for a yes/no response (Y/N) with a variable prompt string using
the defined 'Color'. Once the user hits either Y or N the prompt and answer
will be removed from the screen by backspacing over it.

Prompt := 'Are you sure? (Y/N) ' ;
Answer := ask_yn(prompt, 2) ;

The only valid keys are Y and N. All others will be ignored.

=============================================================================










[ JPDoor V3.2 SE Reference Manual ] [ Page 29]

Functions and Procedures (Continued)
------------------------------------

Procedure AscFile (external)

AscFile(AsciiFile : String);

This is good for displaying Help files or etc, that do not have
embedded control codes which need to be expanded. The following
commands will work with the display output : S for Stop and P to Pause
are valid Hotkeys during output, and the More prompting is in effect
with the prompt of : Continue? (Y/n/=) Yes default on hitting the enter
key. n for No, and = for continous.

=============================================================================

Procedure BackSpace (external)

BackSpace( BckSp : CHAR) ;

This procedure will write a destructive backspace and allows you
to define the character to leave behind. For example, if you wanted a
completely destructive backspace (no character left behind) you would
specify the space (ASCII #32) character.

FOR i := 1 TO LENGTH(PromptStr) DO BackSpace(#32) ;

=============================================================================

Function Carrier (internal)

Carrier : BOOLEAN ;

Returns TRUE if carrier is detected on com port 'PortNum'. This
function is called by other functions within the unit. If LOCAL is true
the Carrier will ALWAYS return True.

IF NOT Carrier THEN WRITELN('No carrier detected') ;

=============================================================================

Function Center (external)

Center(StrToAdjust : String; LineLen : Integer) : String ;

This will Center a string within a line of LineLen Long.

Example:
Display(0,15,0,Center('TITLE',80));

Would Center TITLE on the line on the screen but will NOT write blanks after
the string to be centered.

=============================================================================






[ JPDoor V3.2 SE Reference Manual ] [ Page 30]

Functions and Procedures (Continued)
------------------------------------


Function CenterFill (external)

Center(StrToAdjust : String; LineLen : Integer) : String ;

This will Center a string within a line of LineLen Long.

Example:
Display(0,15,0,Center('TITLE',80));

Would Center TITLE on the line on the screen and will write
blanks after the string to be centered. This is usefull if
you are wanting to center text on a line using a background
color bar.

=============================================================================

Function ChangeCase (external)

ChangeCase(Instr:STRING[80]) : STRING[80] ;

Converts string 'Instr' to upper case characters.

NameString := ChangeCase(NameString) ;

=============================================================================

Function CharIn (internal)

CharIn : CHAR ;

Assigns an incoming character to Charin. If local is FALSE
then input is received from the com port 'PortNum'. If local
is TRUE then input is received from the local keyboard. This
function is called by character input functions within the unit.

Ch := CharIn ;

=============================================================================


Procedure CharOut (internal)

CharOut(Ch:CHAR) ;

Outputs a single character to the com port 'PortNum'.
This function is called by the character output routines
within the unit.

CharOut('a') ;

=============================================================================





[ JPDoor V3.2 SE Reference Manual ] [ Page 31]

Functions and Procedures (Continued)
------------------------------------

Procedure ChkConnect (internal)

ChkConnect;

This procedure is constantly called from within JPDoor and checks for a
carrier if LOCAL is true. It also updated the status bar and checks for
online messages if CKMSGS is true, and RemoteAccess Semaphore RAXITn.???
files if RAXIT is True. There should be no reason for you to call this
procedure yourself, although you may if you wish.

=============================================================================

Procedure ChkMsg (internal)

ChkMsg : Boolean ;

This procedure which is called by JPDoor 3.2 once every minute, will check
to see if there is an online message for the node that your door is running
from. If a message is waiting then MsgWaiting will be set to TRUE. If your
running on RA 1.xx then you must ensure that the SemaphorePath variable holds
the path to the semaphore directory, otherwise the current directory will be
used, and you will not be able to send or recieve online messages.

============================================================================

Procedure ChkRAXIT (Internal)

ChkRAXIT : Boolean ;

This procedure which is called by JPDoor 3.2 once every minute, will check
to see if the sysop has forced this node down using the RAXIT semaphore file.
This is only valid when running on a RemoteAccess System, and the following
conditions must be met before this procedure will work.

- Boolean Variable RAXIT must be True.
- Boolean Variable RA100 MUST be True. This will automatically be set to
True if your door reads the exitinfo.bbs and JPDoor detects that it is
a version 1.00 or greater. If your door does not read the exitinfo.bbs
then you will need to set this yourself.
- SemaphorePath MUST point to the RA Semaphore directory. This can be
accomplished in one of 3 ways. You may read it from the CONFIG.RA file
yourself, or get it from the sysop in your configuration file for your
door, OR have the sysop set an environment variable RASEM to point to
this directory.

You will also need to ensure that the variable ThisNode contains the correct
node number. This can be accomplished by reading the node number from the
command line and assigning it to this variable. ThisNode defaults to '01'
and will cause problems if the sysop forces node 1 down, and your door has
not put the proper value in this variable.

============================================================================





[ JPDoor V3.2 SE Reference Manual ] [ Page 32]

Functions and Procedures (Continued)
------------------------------------

Function CkPath (internal/external)

CkPath(InPath : STRING) : STRING ;

This function is similar to FixPath except it does not check the validity
of the directory path 'InPath'. CkPath checks the last character of 'InPath'.
If it is not a backslash ('\') character, CkPath will append a backslash
character to the end of 'InPath'.

TempPath := '\RA' ;
TempPath := CkPath(TempPath) ;

Results in:

TempPath = '\RA\'

=============================================================================

Procedure ClearRegs (external/internal)

ClearRegs;

This procedure fills the Regs variable (used for DOS calls etc)
with #0's. Use this prior to making a DOS call to insure that
previous Regs data does not interfere with your DOS call.


=============================================================================

Procedure ClearScreen (external)

ClearScreen ;

This procedure will clear the local and remote video display. This must be
called rather than the CLRSCR procedure in CRT or if the status line is on,
it will be erased by CRT.CLRSCR.

Functions of ClearScreen:

1. If status line is on, local screen lines 1-23 are erased, lines
24 and 25 are left intact. Remote terminal lines 1-25 are erased.

2. If status line is off, local screen lines 1-25 are erased. Remote
terminal lines 1-25 are erased.

=============================================================================

Function CommaStr (external)

CommaStr ( N : LONGINT ) : STRING;

This function will take the numeric value passed to it, and return it
in a string which will have the commas inserted in the correct places.

Example: CommaStr(1024)
would return '1,024'
=============================================================================
[ JPDoor V3.2 SE Reference Manual ] [ Page 33]

Functions and Procedures (Continued)
------------------------------------

Procedure Crlf (external)

Crlf ;

This procedure will echo a carriage-return, line-feed sequence to
both the local console and com port 'PortNum'. This procedure is used
frequently in place of writeln when used to provide a carriage-return,
line-feed sequence.

Crlf ;

=============================================================================

Procedure CursorPos (external)

CursorPos(Row, Column : BYTE) ;

Positions the cursor on 'Row' and 'Column' if ANSI is set to 1. If
ANSI is set to 0, this procedure will exit. CursorPos will also exit if
'Row' is less than 0 or greater than 25 and/or if 'Column' is less than 0
or greater than 80.

CursorPos(25,1) ;

Positions the cursor on 'Row' (line) 25, 'Column' 1.

=============================================================================

Function DateStr (external/internal)

DateStr : String;

Returns the current date as MM-DD-YY

Display(0,15,0,'The Current Date Is ' + DateStr);

=============================================================================

Procedure DecreaseTime (internal)

DecreaseTime ;

Decrements the unit variable 'TimeRemaining' by 1 and checks to
see if 'TimeRemaining' is less than 1. If it is, then a halt code of
2 is returned to the TrapExit procedure. Your program should handle
this accordingly. This procedure is called by other functions within
the unit that keep track of carrier, time limits and user inactivity.

BEGIN
FOR i := 1 TO 5 DO DecreaseTime ;
END ;

=============================================================================




[ JPDoor V3.2 SE Reference Manual ] [ Page 34]

Functions and Procedures (Continued)
------------------------------------

Procedure DecTime (external)

DecTime(TimeInc:INTEGER) ;

Same as IncTime but decrements time remaining in the files EXITINFO.BBS
and DORINFO1.DEF in the 'ExitInfoPath' directory.

DecTime(20) ;

NOTE: This procedure should only be called when the program is ended and
before control returns to the BBS.

See also: IncTime

=============================================================================

Procedure DeleteFile (external)

DeleteFile ( FileToDelete : STRING ) ;

Use this procedure to easily delete files using a filename.

Example:

DeleteFile('C:\DOOR\FILE.TMP');

=============================================================================

Procedure DepositTime (external)

DepositTime(Path : STRING[255] ; Name : STRING[30] ; n : INTEGER) ;

This is used in conjunction with time banking support using RATS 0.1c
(RemoteAccess TimeBank System) or later. THEBANK.EXT is also supported by
QuickBank (David Kuhn) and The Bank 1.0 or later (David Hazelton) time banks.
This procedure will append to or create the file THEBANK.EXT in the
directory set by the 'Path' parameter. 'N' minutes will be deposited in
the account of 'Name'. 'N' may be a negative number as well (for automatic
time withdrawing).

NOTE: 'Path' should be the path to the directory which contains the bank
program files.

DepositTime('','JOHN DOE',20) ;

Deposits 20 minutes to the user JOHN DOE's account, writing to THEBANK.EXT
in the current directory.

DepositTime('\RA\','JOHN DOE',-20) ;

Withdraws 20 minutes from the user JOHN DOE's account, writing to
THEBANK.EXT in the \RA\ directory. Note: When specifying a path, the
trailing backslash is required.

NOTE: 'Name' MUST be in upper case only in order for The Bank to apply
the credit to the user's account.
=============================================================================
[ JPDoor V3.2 SE Reference Manual ] [ Page 35]

Functions and Procedures (Continued)
------------------------------------

Procedure Display (external)

Display(BackGround,ForeGround,Blink:BYTE ; Line:STRING[80]) ;

This procedure displays the line ('Line') to both local and remote.
It is much like the writeln procedure except that it also requires color
attributes. The color attributes 'BackGround' and 'ForeGround' must be
within the range of the table given below. The 'Blink' attribute must be
a 0 (non-blinking) or a 1 (blinking). Valid color attributes are listed
below.
Valid Background Attributes:
0 : black 4 : red
1 : blue 5 : magenta
2 : green 6 : brown
3 : cyan 7 : light gray

Valid Foreground attributes:
0 : black 4 : red 8 : dark gray 12 : light red
1 : blue 5 : magenta 9 : light blue 13 : light magenta
2 : green 6 : brown 10 : light green 14 : yellow
3 : cyan 7 : light gray 11 : light cyan 15 : white

Display(0,15,0,'This is a white line') ;
Display(7,0,0,'This line is in reverse video') ;
Display(0,1,0,'This line is blue') ;
Display(0,9,1,'This is a light blue, blinking line') ;

NOTE: If you wish to shorten the Display or sDisplay procedures, you
might want to write your own procedure that in turn calls Display or
sDisplay. For example:

PROCEDURE Println(ForeGround : BYTE ; LineToPrint : TextString) ;
BEGIN
Display(0,ForeGround,0,LineToPrint) ;
END ;

PROCEDURE Print(ForeGround : BYTE ; LineToPrint : TextString) ;
BEGIN
sDisplay(0,ForeGround,0,LineToPrint) ;
END ;

This would be good for shortening the coding of a program when there
is no need to use background colors or blinking characters.

=============================================================================












[ JPDoor V3.2 SE Reference Manual ] [ Page 36]

Functions and Procedures (Continued)
------------------------------------

Procedure DisplayLoc (external)

DisplayLoc(BackGround,ForeGround,Blink:BYTE ; Line:STRING[80]) ;

This procedure displays the line ('Line') to local console only.
This procedure should be used instead of WRITELN when displaying text
to the local console only. If StatusLineON is set to TRUE, this procedure
will take care of scrolling the screen window properly.

Valid color attributes are as shown in the Display procedure.

BEGIN
IF NOT EXIST('MyFile.Txt') THEN BEGIN
DisplayLoc(0,15,1,#7 + 'MYFILE.TXT NOT FOUND') ;
HALT(15) ;
END ;
END ;

=============================================================================

Procedure DrawCard (external)

DrawCard(CardNum:STR2; Suit:CardSuit; Row, Col, CardColor:BYTE; Edge:BOOLEAN);

This procedure allows you to draw ANSI graphic playing cards within your
door. Each card is 3 rows high by 5 columns wide. BLACK cards are displayed
back on grey, RED cards are displayed red on grey. CardColor will allow you
to draw different colors of blank cars. If it is 0 it will default to 7.
The interface for DrawCard is:

Where: 'CardNum' is 'A' through '9', '10', 'J', 'Q', OR 'K' OR 'B' for Blank.
'Suit' is C, D, H or S (for the clubs, diamonds, hearts or spades).
'Row' is the row where the card is to be drawn.
'Col' is the column where the card is to be drawn.
'CardColor' is the color of the blank cards
'Edge' if True, a border will be drawn around the card.

This procedure will exit if ANSI is set to 0.
=============================================================================

Function Exist (internal/external)

Exist(InFile:STRING[255]) : BOOLEAN ;

Returns true if specified file exits or false if it doesn't.

BEGIN
IF NOT Exist('Dorinfo1.Def') THEN BEGIN
DisplayLoc(0,15,0,'Dorinfo1.Def not found') ;
HALT(5) ;
END ;
END ;

=============================================================================



[ JPDoor V3.2 SE Reference Manual ] [ Page 37]

Functions and Procedures (Continued)
------------------------------------

Procedure ExitJP (internal)

ExitJP;

This is called internally by JPDoor. There is NO reason for you to
call this routine. It does any EXITINFO.BBS re-conversions needed,
and if FossilHot := False, it de-initializes the fossil driver before
exiting JPDoor.

=============================================================================


Function FixPath (internal/external)

FixPath(Instr:STRING[255]) : STRING[255] ;

Returns a fixed path based on 'Instr'. Specifically, this function
is intended to append a backslash (\) character to the end of the specified
path if one is not already specified. FixPath also qualifies the path
by checking whether or not the path actually exists and attempts to change
to that directory and back again. If FixPath encounters an error while
attempting to change directories, a halt code of 6 is returned and the
program is aborted (see also halt codes).

TPath := '\RA\Doors' ; { a sample possible path parameter }
TPath := FixPath(TPath) ; { '\' is appended and the directory }
{ \RA\Doors\ is tested }
GetDorInfo(node, TPath) ; { the path can now be used with confidence }

=============================================================================

Procedure FlushCommBuffer (internal)

FlushCommBuffer ;

If 'Local' is TRUE, this procedure will flush the com port 'PortNum'
incoming character buffer. This procedure is called by other functions
within the unit.

=============================================================================

Function FormatStr (external)

FormatStr(Instr:STRING[80]) : STRING[80] ;

Formats string 'Instr' so that the first letter of each word is shifted to
upper case and all other characters are shifted to lower case.

VAR
ExampleString : STRING[80] ;
BEGIN
ExampleString := 'this is an example' ;
ExampleString := FormatStr(ExampleString) ;
END ;

Would result in: 'This Is An Example'
=============================================================================
[ JPDoor V3.2 SE Reference Manual ] [ Page 38]

Functions and Procedures (Continued)
------------------------------------

Function GameInUse (external)

GameInUse : BOOLEAN ;

This function is use in conjuction with the InUseFile (string)
variable. If InUseFile specifies a filename, then this function will
create that file, and return False. This means the door is NOT in use
at this time. If the file exists, then it assumes that someone is using
the door, displays a notice, and returns True. If your door is not
multi-node aware, then you should use this to make sure ony one person
is using it.

Example:

InUseFile := 'MyDoor.on';
If GameInUse then Halt(0);

If GameInUse returns true, the following notice will be displayed to the
user:

'ProductName' is currently being played by 'UserName' on another node.

Please Try Again Later...

Hit RETURN To Continue :

Where ProductName is the name of your door as defined by ProductName, and
UserName is the name of the User who is playing.


============================================================================

Procedure GameNotInUse (external)

GameNotInUse;

This procedure is used if you have invoked the function GameInUse.
If InUseFile <> '' and it exists (which is created by GameInUse) then the
file is removed. YOU are responsible for making sure this function is called
before exiting your door or no-one else will get to play!

============================================================================

Procedure GameScreen (external)

GameScreen(FileName);

A faster method of displaying an ANSI graphic screen (such as a full
screen game board, etc.). ShowFile works for this purpose but is a bit
slower since it checks for Sysop keys, hot keys, and so on. GameScreen
does not check ANYTHING. There is no page pausing and the screen is cleared
before the file is displayed. Gamescreen also sets the DOS READ ONLY flag
on the file prior to displaying it, and removeing this flag after. This
allows two nodes to display the file at the same time.

==========================================================================

[ JPDoor V3.2 SE Reference Manual ] [ Page 39]

Functions and Procedures (Continued)
------------------------------------

Function GetNode (internal/external)

GetNode : INTEGER ;

When writing a multi-node door program, this function will return
the current node number based on the information found in USERON.BBS file.

=============================================================================

Procedure GetMsg (internal/external)

GetMsg ;

If There is an online message waiting for the current node, then it
will be displayed to that node.

=============================================================================

Function GetBirthDate (external)

GetBirthDate : STRING[8] ;

This function is used for getting a valid formatted Birthdate input.
The MM-DD-YY format is forced within this function.

Example: (var MyBirthDay : String[8];)

sDisplay(0,2,0,'Enter you date of birth : ');
MyBirthDay := GetBirthDate;

============================================================================

Function GetChar (internal/external)

GetChar : CHAR ;

This function returns a single character received from either the Fossil
or the local console. If 'Local' is FALSE, input is still accepted from the
local console if any exists.

UserChar := GetChar ;

or for an upper case character...

UserChar := UPCASE(GetChar) ;

=============================================================================










[ JPDoor V3.2 SE Reference Manual ] [ Page 40]

Functions and Procedures (Continued)
------------------------------------

Procedure GetDorInfo (external)

GetDorInfo(Node : STRING[2]; ExitPath :STRING[255]) ;

Reads the DORINFO.DEF file in the 'ExitPath' directory. Reads
the EXITINFO.BBS file in the 'ExitPath' directory. If DORINFO.DEF
is not found, a halt code of 5 will be returned. If EXITINFO.BBS is not
found, a halt code of 4 is returned. The global variable 'ExitInfoPath'
will be set to the value of 'ExitPath' when this procedure is called.
This procedure reads in the contents of DORINFO.DEF and EXITINFO.BBS
and initializes the unit variables:

SystemName
SysopName BaudString
SysopFirst ANSI
SysopLast TimeRemaining
UserName Local
UserFirst AFlag
UserLast BFlag
UserCityState CFlag
UserSecurity DFlag
PortNum ScrLen

Node := '1' ;
ExitPath := 'c:\ra\' ;
GetDorInfo (node, exitpath) ;

DORINFO1.DEF is read from the c:\ra\ subdirectory.
EXITINFO.BBS is read from the c:\ra\ subdirectory.
ExitInfoPath is set to 'c:\ra\'.


NOTES: If 'ExitPath' is specified as '' then the current directory will
be used and 'ExitInfoPath' will be set to ''.

'Node' defaults to '1' upon unit initialization.

This procedure must be called near the beginning of program execution
in order to initialize the unit variables.

Once unit variables are initialized, you may use them for display
or other purposes within your program. For example:

sDisplay(0,15,0,'The Sysop''s name is: ') ;
Display(0,14,0,SysopName) ;

JPDoor is designed to support RemoteAccess 0.03 data structures.
However, if the program you create is run on a QuickBBS 2.64 system,
the EXITINFO.BBS file will be converted automatically to RemoteAccess
0.03 format upon program startup. It will also be automatically
converted back to QuickBBS 2.64 format when your program ends. No
intervention or conversion is required by your program!

=============================================================================



[ JPDoor V3.2 SE Reference Manual ] [ Page 41]

Functions and Procedures (Continued)
------------------------------------

Function GetInput (external)

GetInput(EchoChar : STRING[1] ; Cap,Len : INTEGER) : STRING[80] ;

This function returns a STRING of length 'Len' characters received
from the Fossil or the local console. The STRING is shifted to upper case
if 'Cap' is set to 1. The STRING is not shifted if 'Cap' is set to 0. If
'EchoChar' is set to '' then the input received is what is echoed. If
'EchoChar' is set to anything other than '' then input received is echoed
to the Fossil and local console as the character specified. If 'Local' is
true, input is still accepted from the local console if any exists.

InStr := GetInput('',0,20) ; {get 20 chars, echo as entered, no upshift }
InStr := GetInput('~',0,20) ; {same as above but echo the '~' character }
InStr := GetInput('~',1,20) ; {same as above but shifts to upper case }

=============================================================================

Function GetLine (external)

GetLine(Length, TabLength, Color : BYTE) : STRING[255] ;

Returns a string of text with word wrap occurring at 'Length'
characters. TAB's are expanded to 'TabLength' spaces and output is
echoed using the foreground color 'Color'. The unit variable 'Scrap_Entry'
must be initialized prior to the use of this function. 'Scrap_Entry'
contains the wrapped string from the previous GetLine and will be inserted
before the string received in the next call to GetLine.
If 'Length' is less than 1 or greater than 255, it will be set to 77.
If 'TabLength' is less than 0 or greater than 32, it will be set to 8.
If 'Color' is less than 0 or greater than 15, it will be set to 7.

Scrap_Entry := '' ;
FOR i := 1 TO 5 DO Instr[i] := GetLine(77,8,15) ;
FOR i := 1 TO 5 DO WRITELN(Instr[i]) ;

=============================================================================




















[ JPDoor V3.2 SE Reference Manual ] [ Page 42]

Functions and Procedures (Continued)
------------------------------------

Function GetPhone (external)

GetPhone(Style : BYTE) : STRING[18] ;

Prompts for input of a USA or free-style format phone number
including area code. This function automatically formats the user
input field depending on the 'Style' used. Valid 'Styles' are:

0 : USA Format (Area Code) Prefix-Suffix. The formatted
result returned is: ###-###-####
1 : Free-Style - Stores input number as entered by the user.
Allows input of up to 18 characters including digits and
dashes ('-').

BEGIN
sDisplay(0,15,0,'Enter your phone number: ') ;
SetColor(1,15,0) ;
PhoneStr := GetPhone(0) ;
Crlf ;
sDisplay(0,12,0,'The phone number entered was: ') ;
Display(0,11,0,PhoneStr) ;
END ;

This procedure uses the currently selected color attributes. Therefore,
the color attributes last used in a call to Display, sDisplay or SetColor
will be used.

=============================================================================

Function GetSysDir (external/internal)

GetSysDir : String;

If your door needs to find a directory common to all nodes, this will return
one of the following:

The System Directory pointed to by the RA environment variable
The System Directory pointed to by the QUICK environment variable

If used on a system other than QBBS or RA, then you can have the user
set an environment variable JPDOOR and it will be used.


=============================================================================

Function GetWords (external/internal)

GetWords ( NumWords : INTEGER; Temp : STRING ) : STRING;

This is used to get 'NumWords' words from the string passed in 'Temp'
starting at the beginning of the line.

Example: GetWords(4,'This is a test of the Getwords Function');
would return 'This is a test'

=============================================================================

[ JPDoor V3.2 SE Reference Manual ] [ Page 43]

Functions and Procedures (Continued)
------------------------------------

Procedure Hangup (external)

HangUp ;

Turns DTR OFF for 700 milliseconds which causes carrier to drop on
modems which do not have carrier detect forced ON.

Display(0,15,0,'Hanging up on user') ;
Hangup ;

=============================================================================

Procedure IncTime (external)

IncTime(TimeInc:INTEGER) ;

Increments a user's time remaining in both the EXITINFO.BBS and
DORINFO1.DEF files in the 'ExitInfoPath' directory. These may be read
in by RemoteAccess using the RA -R command line and parameter.

IncTime(20) ;

Adds 20 minutes to the TmLimit field in the EXITINFO.BBS file. Subtracts
20 minutes from the UserInfo.Elapsed field in the EXITINFO.BBS file.

NOTE: This procedure should only be called when the program is ended
and before control returns to the BBS. So, instead of calling IncTime
repeatedly each time a user is awarded some time, keep a running
tally of time to be incremented and save it for program exit time.

See also: DecTime

=============================================================================

Function Inready (internal)

Inready : BOOLEAN ;

Returns TRUE or FALSE depending on status of port 'PortNum'. If a
character is ready to be read from the port, inready returns TRUE. This
function is called by other functions within the unit.

REPEAT
UNTIL Inready ;

=============================================================================

Procedure InitFossil (internal)

InitFossil ( Port : BYTE ) ;

You should have no reason to call this procedure, as it is called
internally by the SetFossil Function.

=============================================================================


[ JPDoor V3.2 SE Reference Manual ] [ Page 44]

Functions and Procedures (Continued)
------------------------------------

Function ITOA (external)

ITOA(I : LONGINT ) : STRING ;

This function will convert Integers and LongIntegers to a String Value.

Example :
sDisplay(0,15,0,ITOA(er));
would return: '45'

=============================================================================

Procedure JP_Log; (internal/external)

JP_Log ( TextToLog : String );

If JP_Debug is True

=============================================================================

Function JPUseAdd; (external)

JPUseAdd : Boolean; {See Multi.Doc}

This function is used when writing a multi-player door.
This function is used to add a player to the multi-node data file.
Returns TRUE if successful, FALSE if not.
=============================================================================

Procedure JPUseUpdate; (external)

JPUseUpdate; {See Multi.Doc}

This procedure is used when writing a multi-player door.
It is used to update the JPDOOR.USE file to reflect any new data
from this node.

=============================================================================

Procedure JPUseExit; (external)

JPUseExit; {See Multi.Doc}

This procedure is used when writing a multi-player door.
It is used to remove the user from the JPDOOR.USE file when your
door exits.

=============================================================================

Function JPUseGet; (external)

JPUseGet : Boolean; {See Multi.Doc}

This procedure is used when writing a multi-player door.
It is used to get data from another node.
=============================================================================

[ JPDoor V3.2 SE Reference Manual ] [ Page 45]

Functions and Procedures (Continued)
------------------------------------

Procedure KillFossil (internal)

KillFossil ;

De-initializes the FOSSIL driver. Upon program termination, this
procedure will run automatically.

=============================================================================

Function LastPos (internal/external)

LastPos( SubStr, InStr : STRING ) : INTEGER ;

The function LastPos finds the LAST occurance of SubStr in InStr.
One user of this function is to seperate a pathname from a full path\filename.

Example:
PathFile := 'D:\BBS\DOORS\YOURDOOR\YOURFILE.EXT';
Path := Copy(PathFile,1,LastPos('\',Pathfile));
FileName := Copy(PathFle,LastPos('\',PathFile)+1,256);
at this point, Path Will be D:\BBS\DOORS\YOURDOOR\
FileName will be YOURFILE.EXT


=============================================================================

Function LeftS (external)

LeftS ( StrToAdjust : STRING; Tot : INEGER ) STRING;

This function will return 'Tot' number of characters from the
beginning of 'StrToAdjust'.

Example: LeftS('12345',2); would return '12'

=============================================================================

Function LJust (external)

LJust ( StrToAdjust : STRING; Tot : INTEGER ) : STRING;

This function will left-justify 'StrToAdjust' in a field of 'Tot'
character.


Example: LJust('1',3); would return: '1 '

===========================================================================

Function LTrim (external)

LTrim( A : STRING ) : STRING ;

A simple function to remove all leading spaces from a string variable.

============================================================================


[ JPDoor V3.2 SE Reference Manual ] [ Page 46]

Functions and Procedures (Continued)
------------------------------------

Function Lock (external/internal)

Lock(Var FileToLock; LockStartByte,LockEndByte:Longint):Word;

This function is used to lock a portion of a typed file. If SHARE is
loaded, then this function will return one of the following values:
0 - Lock is successful
6 - File not open
33 - Some of the specified range is already locked

If share is not loaded, a 0 is returned as it assumes that locking is not
needed.

NOTE: If you lock a part of a data file, you MUST make sure you UNLOCK it
as well! If you do not, it WILL remain locked until you reboot the computer.

To lock the first record in a file:

Type
DataRecord = Record
Name : String[35];
Age : Word;
End;

Var
DataFile : File Of DateRecord;
Data : DataRecord;
Result : Word;

Begin
Assign(DataFile,'Names.dat');
Reset(DataFile);
Result := Lock(DataFile,1,SizeOf(Data));
If Result = 0 then
Begin
Writeln('Record 1 is locked);
End Else
Writeln('Lock Failed - Error : ',Result);
End;

=============================================================================

Function LowCase (internal/external)

LowCase(Ch : CHAR) : CHAR ;

Used to convert an upper case character to it's lower case value. If
'Ch' is not an upper case character between A and Z, then the function will
simply return the character originally passed, unchanged. This function
is called by the FormatStr function.

TChar := LowCase(TChar) ;

=============================================================================



[ JPDoor V3.2 SE Reference Manual ] [ Page 47]

Functions and Procedures (Continued)
------------------------------------

Function MaxNodes (external/internal)

MaxNodes : Integer;

This will scan either a QBBS 2.75 or RA 1.xx USERON.BBS and count the number
of records. This will be the maximum number of nodes supported by your door.
This routine is called internally.

=============================================================================

Function MKString (external)

MKString(Number,Character);

This handy function that can save time in drawing lines.

Before: (you had to do this)
sDisplay(0,15,0,'-------------------------');

Example: (now it's this easy)
sDisplay(0,15,0,MKString(25,'-'));

=============================================================================

Procedure More (external)

More(Prompt : STRING[80] ; n : BYTE) ;

Causes 'Prompt' to be displayed using color attribute 'n' to the Fossil
and local console and waits for single character input.

FOR i := 1 TO 5 DO Display(15,Instr[i]) ;
More('Press any key to continue',15) ;

=============================================================================

Procedure NilProc (external/internal)

NilProc;

This is simply a do-nothing procedure.

If SomeBoolean then NilProc Else OtherProcedure;

=============================================================================












[ JPDoor V3.2 SE Reference Manual ] [ Page 48]

Functions and Procedures (Continued)
------------------------------------

Function PostMsg (external)

PostMsg(Lines : Integer; MsgPath : String) : Integer;

This function will check the Global Boolean QBBS to see if it is to
write to the QBBS message base. If QBBS is False (default) then it will
attempt to write to an RA1.xx message base. Full file locking is supported.

Uses MsgBuff : Array[0..100] of String[80]; which is a global array.
Fill MsgBuff with your message, starting with MsgBuff[1].
MsgBuff[0] is used internally to add a product ID kludge to the message.
You MUST make sure to add a character 13 (Carriage Return) to the end of
each line, including blank lines...

Lines is the number of lines used (ie, if last line used was MsgBuff[10]
then set Lines := 10
MsgPath is the path to the message base - MUST end with \

If successful, PostMsg returns a 0, if not, -100

PostMsg will determine the correct Message Number, but you are required
to fill out the rest of the following structure:



MSGHDRrecord = record

MsgNum : Integer;
PrevReply,
NextReply,
TimesRead : Word;
StartBlock : Word;
NumBlocks,
DestNet,
DestNode,
OrigNet,
OrigNode : Word;
DestZone,
OrigZone : Byte;
Cost : Word;
MsgAttr,
NetAttr,
Board : Byte;
PostTime : String[5];
PostDate : String[8];
WhoTo,
WhoFrom : String[35];
Subject : String[72];
end;

The pre-defined variable that contains this structure is Hdr

Hdr : MsgHdrRecord;





[ JPDoor V3.2 SE Reference Manual ] [ Page 49]

Functions and Procedures (Continued)
------------------------------------

Function PostMsg (Continued)

Here is an example of posting a message, taken from my Battle Ships
Door:




Procedure PostResults;
Var
X : Integer;
Begin
ClearScreen;
Display(0,15,0,'Congratulations! You are a winner!');
With Hdr do
begin
WhoTo := FormatStr(Opponent);;
Subject := 'BattleShips Report';
Board := Boardno;
WhoFrom := UserName;
PostDate := DateStr;
PostTime := TimeStr;
PrevReply := 0;
NextReply := 0;
DestNet := 0;
DestNode := 0;
OrigNet := 0;
OrigNode := 0;
DestZone := 0;
OrigZone := 0;
Cost := 0;
MsgAttr := Msg_Local;
NetAttr := 0;
End;
MsgBuff[1] := 'Message posted by Motor City Battle Ships!'+#13;
MsgBuff[2] := ' ' + #13;
MsgBuff[3] := 'In a game of BattleShips on '+DateStr+' at '+TimeStr+ #13;
MsgBuff[4] := ' ' + #13;
MsgBuff[5] := FormatStr(Username)+' Won in '+ ItoA(NumShots) +' Shots!'+ #13;
MsgBuff[6] := FormatStr(Opponent)+' Lost'+ #13;
MsgBuff[7] := ' '+ #13;
If BoardNo <> 0 then
Begin
CrLf;
Display(0,14,0,'Hang on, posting message');
X := PostMsg(7,MsgPth);
Delay(2000);
End;
End;



=============================================================================




[ JPDoor V3.2 SE Reference Manual ] [ Page 50]

Functions and Procedures (Continued)
------------------------------------

Function RightS (external)

RightS ( StrToAdjust : STRING; Tot : INEGER ) STRING;

This function will return 'Tot' number of characters from the
end of 'StrToAdjust'.

Example: RightS('12345',2);
would return '45'

=============================================================================

Function RJust (external)

RJust(StrToAdjust : STRING ; Tot : INTEGER ) : STRING ;

This function will Right-justify 'StrToAdjust' in a field of 'Tot'
characters.

Example: RJust('1',3);
Would Return: ' 1'

============================================================================

Function RTrim (external)

RTrim(A : STRING) : STRING ;

This function will trim trailing spaces from the varaible string.

Example: RTrim('Apple ');
Would Return: 'Apple';

============================================================================

Procedure sDisplay (external)

sDisplay(BackGround,ForeGround,Blink : BYTE ; Line:STRING[80]) ;

This is identical to the Display procedure except that no carriage
return/line feed sequence is output.

sDisplay(0,15,0,'Menu options') ;
sDisplay(0,12,0,' [A/B/C/Q] ') ;
sDisplay(0,2,0,'Your choice: ') ;

=============================================================================










[ JPDoor V3.2 SE Reference Manual ] [ Page 51]

Functions and Procedures (Continued)
------------------------------------

Procedure sDisplayLoc (external)

sDisplayLoc(BackGround,ForeGround,Blink:BYTE ; Line:STRING[80]) ;

This procedure displays the line ('Line') to local console only. This
procedure should be used instead of WRITE when displaying text to the local
console only. If StatusLineON is set to TRUE, this procedure will take care
of scrolling the screen window properly.

Valid color attributes are as shown in the Display procedure.

BEGIN
IF NOT EXIST('MyFile.Txt') THEN BEGIN
sDisplayLoc(0,15,1,#7 + 'MYFILE.TXT') ;
DisplayLoc(0,14,0,' NOT FOUND') ;
HALT(15) ;
END ;
END ;


=============================================================================

Procedure SendMsg (external)

SendMsg;

This procedure is another of the Multi-node support functions and
procedures. This will allow your user to send an online message while they
are in the door program that you have constructed. Users can now send up to
10 lines of text in an online message. Online message may be broadcast to
ALL users currently online. DoNotDistrub flag is honored.

==============================================================================

Procedure SetColor (external)

SetColor(BackGround,ForeGround,Blink) ;

This procedure will initialize the ANSI sequences. This should only
be done after the unit variable ANSI has been set to either 0 (no graphics)
or 1 (ANSI on). The valid color values for initialization are given in the
color table shown under the Display procedure.

This procedure also initializes the variables C_Back, C_Fore and C_Blink.

GetDorInfo(Node,'') ;
SetColor(0,7,0) ;

=============================================================================








[ JPDoor V3.2 SE Reference Manual ] [ Page 52]

Functions and Procedures (Continued)
------------------------------------

Procedure SetFlag (external)

SetFlag(Flag : FlagSet ; OnOff : On_Off) ;

Sets a user's flag in the EXITINFO.BBS file in the 'ExitInfoPath'
directory. On a type 15 exit, the EXITINFO.BBS file would be read in
and the values stored in USERS.BBS upon re-entry to the BBS. So, a
permanent change would take effect when the user re-enters the BBS.

SetFlag(A1,On) ;

Sets the user's A1 flag to ON in the EXITINFO.BBS file contained
in the 'ExitInfoPath' directory.


=============================================================================

Function SetFlagUser (external)

SetFlagUser(Path:Str80 ; UserToSet:Str35 ; Flag:FlagSet ; OnOff:On_Off):BYTE;

Sets a flag for 'UserToSet' in the USERS.BBS file located in the
'Path' directory. If 'UserToSet' is set to 'ALL' then all users in the
USERS.BBS file will have their flags set accordingly. This function works
directly on the USERS.BBS file and does not effect any existing EXITINFO.BBS
file. This is good for other utility programs not necessarily run as door
programs.

SetFlagUser returns one of the following byte values:

0 : No errors
1 : 'UserToSet' was not found in the USERS.BBS file
2 : The USERS.BBS file was not found in the 'path' directory


HOW TO USE SetFlagUser:

VAR
ErrVal : BYTE ;
BEGIN
ErrVal := SetFlagUser('',UserName,A5,ON) ;
IF ErrVal <> 0 THEN BEGIN
CASE ErrVal OF
1 : WRITELN(UserName,' was not found in USERS.BBS') ;
2 : WRITELN('USERS.BBS file was not found') ;
END ;
END ;
END ;

Sets flag A5 to ON for the user name contained in the unit variable
'UserName' in the USERS.BBS file located in the current directory. If ErrVal
is not equal to 0, the appropriate error message is displayed to the local
console.




[ JPDoor V3.2 SE Reference Manual ] [ Page 53]

Functions and Procedures (Continued)
------------------------------------

Function SetFlagUser (Continued)

IF SetFlagUser('','John Doe',A5,ON) <> 0 THEN WRITELN('error occurred') ;

Sets flag A5 to ON for user name 'John Doe' in the USERS.BBS file
located in the current directory. If the value returned by SetFlagUser is
not equal to 0 then the error message 'error occurred' is displayed to the
local console.

IF SetFlagUser('\QuickBBS\','ALL',A5,ON) <> 0
THEN WRITELN('USERS.BBS file not found') ;

Sets flag A5 to ON for all users in the USERS.BBS file located in
the \QuickBBS\ directory. If the value returned by SetFlagUser is not
equal to 0 then we can assume that the USERS.BBS file was not found since
this example is not looking for a specific user. The error message
'USERS.BBS file not found' is displayed.

NOTE: The values passed to SetFlagUser are not case-sensitive. Therefore:

IF SetFlagUser('','all',a5,on) <> 0 THEN WRITELN('error occurred') ;

is the same as:

IF SetFlagUser('','ALL',A5,ON) <> 0 THEN WRITELN('error occurred') ;

=============================================================================

Function SetFossil (external)

SetFossil : BOOLEAN ;

Returns TRUE if a FOSSIL driver is installed and FALSE if one is not.

IF SetFossil THEN WRITELN('Fossil installed') ELSE BEGIN
WRITELN(#7,'Fossil not found') ;
HALT(0) ;
END ;

=============================================================================

















[ JPDoor V3.2 SE Reference Manual ] [ Page 54]

Functions and Procedures (Continued)
------------------------------------

Function SetGraphics (external)

SetGraphics : CHAR ;

SetGraphic returns a character value:

A = User has ASCII only Capability...... ANSI is set to 0.
C = User has Color and ANSI ability..... ANSI is set to 1.
M = User has ANSI but mono display...... ANSI is set to 5.

ANSI value of 5 is the used by DrawCard, and works well! So, we are
reserving ANSI = 5.

Example usage:
Var

Graphics : CHAR ;
.......
......

GetDorInfo('1','') ;
SetColor(0,7,0) ;
Graphics := SetGraphics ;
IF Graphics = 'A' THEN
BEGIN
sDisplay(0,7,0,'Sorry but this game Requires Graphics') ;
HALT(99) ;
END ;

=============================================================================

Procedure SetHotKeys_OFF (external)

SetHotKeys_OFF ;

Turns off Hot-Key trapping. Also, the following variables are set:

HotKeyPressed := FALSE ;
HotKeyOn := FALSE ;
Range := [#0] ;

=============================================================================















[ JPDoor V3.2 SE Reference Manual ] [ Page 55]

Functions and Procedures (Continued)
------------------------------------

Procedure SetHotKeys_ON (external)

SetHotKeys_ON(Kill:KillType ; Range:CharSet) ;

The TYPES used are declared as follows:

TYPE
KillType = Kill, NoKill ;
CharSet = Set Of CHAR ;

'Range' is a set of characters which are valid Hot-Keys. These should
be specified in upper case format. If any of the specified characters are
pressed, all display output is stopped (nothing is echoed to the FOSSIL
driver), and the global unit variable 'HotKeyPressed' is set to TRUE. Once
this call is made, an internal global variable 'HotKeyOn' is also set to
TRUE. You may reference this variable if necessary.


If 'Kill' is specified, the Hot-Key pressed is killed from its
accumulator. That is to say that it is not "remembered". If 'NoKill'
is specified, the Hot-Key is "remembered" and will be automatically
returned to the next call to GetChar. This is intended for uses such
as breaking out of a text file display. You can define a Hot-Key to
break out of the display yet not have it passed onto the next 'GetChar'
call. Specifying the 'Kill' parameter allows this.

For example:

VAR
Choice : CHAR ;
PROCEDURE ShowMenu ;
BEGIN
Display(0,15,0,'hange Setup') ;
Display(0,15,0,'elp Text') ;
Display(0,15,0,'oodbye') ;
CRLF ;
sDisplay(0,14,0,'Enter your choice: ') ;
END ;
BEGIN
SetHotKeys_ON(NoKill, ['C','H','G']) ;
ShowMenu ;
REPEAT
Choice := UPCASE(GetChar) ;
UNTIL Choice in ['C','H','G'] ;
Display(0,15,0,Choice) ;
SetHotKeys_OFF ;
CASE Choice OF
'C' : DoChangeSetup ;
'G' : DoLogOff ;
'H' : BEGIN
SetHotKeys_ON(Kill, ['S']) ;
ShowFiles(15,2,11,'MYHELP.ASC','\RA\TXTFILES\') ;
SetHotKeys_OFF ;
END ;
END ;


[ JPDoor V3.2 SE Reference Manual ] [ Page 56]

Functions and Procedures (Continued)
------------------------------------

Procedure SetHotKeys_ON (Continued)

This would allow the Hot-Keys C, H, or G to interrupt the display of the
menu called by ShowMenu and the next 'GetChar' call would "remember" the
Hot-Key that was pressed.

If H is selected, Hot_Keys are turned on specifying that S is a valid
Hot-Key and that if it is pressed, it will not be remembered by the next
call to 'GetChar'.

Valid 'Range' entries can be any number of characters:

SetHotKeys_On(NoKill, ['A'..'Z', '0'..'9', '!']) ;
SetHotKeys_On(Kill, ['S']) ;
SetHotKets_On(NoKill, ['A','B','C']) ;


=============================================================================

Procedure Set_Retries (external/internal)

Set_Retries(LockRetries,LockLoops:Integer);

LockRetries is the number of times DOS will try to read the locked file
before a failure is reported. LockLoops is the pause between each retry.
DOS defaults are LockRetries := 3, and LockLoops := 1

=============================================================================


Procedure ShowFile (external)

ShowFile(fColor, pType, pColor, FileName, Path)


fColor is the initial color to display 0 = no change.
pType is the prompt type 0 = no prompt. 1 = pause. 2 = more.
pColor is the prompt color 0 = no prompt.
FileName is the file name
Path is the path to find FileName


ShowFile replaces the ShowAnsiFile and ShowTextFile procedures. It
is used display ANSI files and/or ASCII text files. ShowFile will look for
the file 'FileName' in the 'Path' directory. If no filename extension is
specified, ShowFile will check the user's ANSI setting. If ANSI is set
to 1, ShowFile will then check for to see if 'FileName' + '.ANS' exists.
If no .ANS file exists, ShowFile will check to see if 'FileName' + '.ASC'
exists.

You may specify any filename extension. If the file exists in the
'Path' directory, ShowFile will display it.





[ JPDoor V3.2 SE Reference Manual ] [ Page 57]

Functions and Procedures (Continued)
------------------------------------

Procedure ShowFile (Continued)

ShowFile recognizes many of the RemoteAccess/QuickBBS embedded
control codes. If a control code is encountered for which there is
no support, 'N/A' will be substituted.

Examples :

ShowFile(0,0,0,'WELCOME.ANS','\RA\TXTFILES');

will display \RA\TXTFILES\WELCOME.ANS with no color change or pausing.

ShowFile(10,1,12,'HELLO.TXT','');

will display HELLO.TXT (from the current directory) in light green,
with a red '---PAUSED---' prompt.

ShowFile(1,2,2,'SECURITY','\');

will display \SECURITY.ANS, if ANSI = 1 and \SECURITY.ANS exists, and
will over ride the color/prompting settings to 0. If ANSI = 0 or
\SECURITY.ANS doesn't exist, it will display \SECURITY.ASC in blue
with a green 'More (Y,n)?' prompt.

ShowFile(7,1,7,'README.','');

will display the file README in white with a white '---PAUSED---' prompt
(specifying the '.' forces no extension).

Since a text file could have any name and extension (even an extension
of .ANS) it will use the color/prompt values passed, unless no extension
is specified and .ANS is automatically selected.

ShowFile(10,2,12,'GREET.ANS');

will display GREET.ANS with an initial color of green and a red
'More (Y,n)?' prompt.

ShowFile(0,0,0,'GREET.ASC');

will display STORY.ASC with no initial color change and no prompting.

ShowFile(10,2,12,'GREET');

will not use the color/prompting values, if it assumes .ANS, but will
use them, if it assumes .ASC.

=============================================================================









[ JPDoor V3.2 SE Reference Manual ] [ Page 58]

Functions and Procedures (Continued)
------------------------------------

Procedure ShowFilesBBS (external)

ShowFilesBBS(VAR LnCount : INTEGER ;
n, pause, Fc, Sc, Dc, Ec, Mc, Bc : BYTE ;
FPath, Fn : TextString ;
VAR Cont : BOOLEAN ;
oneline : BOOLEAN) ;

This procedure allows the user to pass a path and filename to a
files.bbs file format and the ShowFilesBBS will display with more prompting,
and display files, sizes, date/time stamp and description. This is fully
configurable.

LnCount : how many lines to display before issuing a more prompt.
n : color of more prompt
pause : 0 = no pause, 1 = '==PAUSED==', 2 = 'More (Y/n)' more prompt styles
Fc : color to use to display files
Sc : color to use to display file sizes
Dc : color to use to display date stamp
Ec : color to use to display descriptions
Mc : color to use to display *** MISSING ***
Bc : background color to all of the above.
Fpath : path to files.bbs (fully qualified)
fn : filename of files.bbs format file.
cont : passes the response to the more prompt back to users code segment.

=============================================================================

Procedure Show_Status (internal)

Show_Status ;

This procedure will cause the status line to be refreshed when called.
Users are not required to call this procedure directly as the use of any of
JPDOOR's I/O functions will automatically refresh the status line when needed.

JPDOOR MUST BE INITIALIZED BEFORE ANY CALLS ARE MADE TO THIS PROCEDURE
or unpredicted results will occurr. That is to say that this should only be
used after GetDorInfo has been executed.

=============================================================================

Function SizeFile (external)

SizeFile : LONGINT ;

This Function Returns LongInt vaule which represent the size (number of
bytes) of a file name that is passed to it.

=============================================================================







[ JPDoor V3.2 SE Reference Manual ] [ Page 59]

Functions and Procedures (Continued)
------------------------------------

Procedure StatBar (external/internal)

StatBar ( N : BYTE );

This procedure can be called to change the status bar to any
of the 9 visible status bars, or if you pass it a 10, it turns off the
status bar, and sets StatusLineOn := False; Hitting the function keys
while the door is running calls this procedure, EG F1 makes a call to
StatBar(1) while F6 makes a call to StatBar(6);

=============================================================================

Function TimeStr (external/internal)

TimeStr : String;

Returns the current time as HH:MM:SS in 24 hour format.

Display(0,15,0,'The Current Time Is ' + TimeStr);

=============================================================================

Function TimeToEvent (external)

TimeToEvent : INTEGER ;

Returns the number of minutes until the next system event. This
function will open and read the EXITINFO.BBS file in the 'ExitInfoPath'
directory. If not found, a halt code of 4 will be returned.

VAR
Time : INTEGER ;
s : STRING[4] ;
BEGIN
Time := TimeToEvent ;
sDisplay(0,15,0,'Time to next system event: ') ;
STR(Time,s) ;
sDisplay(0,5,0,s) ;
Display(0,15,0,' minutes') ;
END ;

=============================================================================

Procedure UnLock; (external/internal)

Unlock(Var FileToUnlock; LockStartByte,LockEndByte:LongInt);

When you lock a portion of a data file, you MUST make sure you unlock it
or it will remain locked until you reboot the computer!

=============================================================================






[ JPDoor V3.2 SE Reference Manual ] [ Page 60]

Functions and Procedures (Continued)
------------------------------------

Function UserOnNode (external/internal)

UserOnNode(NodeToPage : INTEGER ) : STRING ;

This function used with multi-node setups, will return the name of
the user on NodeToPage. And will return '' if no one is online.

=============================================================================

Procedure Win_Scroll (internal)

Win_Scroll ;

This procedure will cause the window (lines 1-23) to scroll up one
line. Users are not required to call this procedure directly as the use
of any of JPDOOR's I/O functions will automatically scroll the video when
needed, if StatusLineOn is set to TRUE.

=============================================================================

Procedure WhosOn (external)

WhosOn ;

This procedure will return a list of users currently online in a
multi-node(line) setup. Similar to RA 1.xx and Quickbbs 2.75.

===============================================================================

Function WTOA (external)

WTOA(I : WORD) : STRING ;

This function will convert a word value to string.

Example:
sDisplay(0,15,0,WTOA(75)) ;
Would return: '75'

===============================================================================

















[ JPDoor V3.2 SE Reference Manual ] [ Page 61]



E n d O f

D o c u m e n t a t i o n
-------------------------


For Printed copies of this documentation please contact

Motor City Software


ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ MOTOR CITY SOFTWARE ³
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³
³ ³ JPDoor - Version 3.2 SE ³ ³
³ ³ Copyright 1990 - 1992 ³ ³
³ ³ ÚÄÄÄÄÄÄÄÄÄÄ¿ ³ ³
³ ³ ³\ ³ ³ ³
³ ³ ³ \ ³ ³ ³
³ ³ ³ \ P ³ ³ ³
³ ³ ³ \ A ³ ³ ³
³ ³ ³ ³ S ³ ³ ³
³ ³ ³ ³ C ³ ³ ³
³ ³ 5.5 ³ ³ A ³ 6.0 ³ ³
³ ³ ³ o³ L ³ ³ ³
³ ³ ³ ³ ³ ³ ³
³ ³ \ ³ÄÄÄÄÄÄÙ ³ ³
³ ³ \ ³ ³ ³
³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄ\ ³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³
³ The Ultimate \³ Door Writing Unit. ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ



JPDoor - Version 3.2 SE
Copyright 1990,1991,1992 by Motor City Software
All Rights Reserved





















[ JPDoor V3.2 SE Reference Manual ] [ Page 62]