Dec 262017
Door structure for different bbs door files...
File DOORREC.ZIP from The Programmer’s Corner in
Category BBS Files
Door structure for different bbs door files…
File Name File Size Zip Size Zip Type
DATA.DOC 21526 6347 deflated

Download File DOORREC.ZIP Here

Contents of the DATA.DOC file

Updated: 03/21/88


Sample DOOR.SYS file to be used as a STANDARD for ALL Bulletin Board Systems.


This file format has been laid out and will be presented to ALL BBS authors
in an attempt to establish a national standard for door program applications.

BBS AUTHORS: I urge you to consider this STANDARD with respect for your 3rd
party support authors. Come on guys, make life EASY for us.


I have tried to include EVERYTHING a 3rd party DOOR author would need to
provide the SYSOPS with the look and feel they want from an online program
while at the same time keeping things plain and simple to ease the problems
of interfacing programs with a system. This type of format is intended to be
a "read-only" type of file (although it could be written again) because most
BBS's have some sort of other file they use for re-entering the system with
(PCBoard uses PCBOARD.SYS, GAP uses GAPDOS.DAT, Ect.) which is harder to read
in, and changes frequently. This file format, once established, wouldn't need
to be changed EVERYTIME a new version of the BBS software gets released and
this would also ease the demand for more info being made available in the BBS
Re-Entry file thus making life easier for both parties. If there is something
found in the following format that your BBS software may not be currently
supporting, a DEFAULT value has been suggested.

COM1: <-- Comm Port - COM0: = LOCAL MODE
2400 <-- Baud Rate - 300 to 38400
8 <-- Parity - 7 or 8
1 <-- Node Number - 1 to 99 (Default to 1)
Y <-- 19200 Flag - Host/Modem LOCKED at 19200 (Default to N)
Y <-- Screen Display - Y=On N=Off (Default to Y)
Y <-- Printer Toggle - Y=On N=Off (Default to Y)
Y <-- Page Bell - Y=On N=Off (Default to Y)
Y <-- Caller Alarm - Y=On N=Off (Default to Y)
Rick Greer <-- User Full Name
Lewisville, Tx. <-- Calling From
214 221-7814 <-- Home Phone
214 221-7814 <-- Work/Data Phone
PASSWORD <-- Password
110 <-- Security Level
1456 <-- Total Times On
03/14/88 <-- Last Date Called
7560 <-- Seconds Remaining THIS call (for those that particular)
126 <-- Minutes Remaining THIS call
GR <-- Graphics Mode - GR=Graph, NG=Non-Graph, 7E=7,E Caller
23 <-- Page Length
Y <-- User Mode - Y = Expert, N = Novice
1234567 <-- Conferences/Forums Registered In (ABCDEFG)
7 <-- Conference Exited To DOOR From (G)
01/01/99 <-- User Expiration Date
1 <-- User File's Record Number
Y <-- Default Protocol - X, C, Y, G, I, N, Etc.
0 <-- Total Uploads
0 <-- Total Downloads
0 <-- Daily Download "K" Total
999999 <-- Daily Download Max. "K" Limit

***** Each line being STRAIGHT ASCII TEXT with a CR at the end. *****

{---------------------- Declaration for CALLINFO.BBS ----------------------}
{ CALLINFO.BBS used with Live Programs. This is a straight ASCii File }
{ Users Full Name } { Line 1 }
{ Baud Rate 0 = 2400, 1= 300, 2= 1200, 3=9600 } { Line 2 }
{ Calling From } { Line 3 }
{ Security Level} { Line 4 }
{ Logon Time Left } { Line 5 }
{ Either 'COLOR' or 'MONO' } { Line 6 }
{ Password } { Line 7 }
{ User Record Number } { Line 8 }
{ Minutes On } { Line 9 }
{ Time entered Live Program HH:MM } { Line 10 }
{ Time Called HH:MM } { Line 11 }
{ Conferences Joined} { Line 12 }
{ Daily Download Files Total} { Line 13 }
{ Max Daily Download Limit} { Line 14 }
{ Daily Download K Total } { Line 15 }
{ Max Download K Limit} { Line 16 }
{ Phone Number} { Line 17 }
{ Time/Date of last call } { Line 18 }
{ Either 'NOVICE' or 'EXPERT' } { Line 19 }
{ Protocol Transfer_Method (One of the Following: } { Line 20 }
{'N' - none 'X' - Xmodem 'C' - Xmodem/CRC
'Y' - Ymodem 'G' - Ymodem-G 'I' - Imodem }
{ Last New file search MM/DD/YY } { Line 21 }
{ Total Times On } { Line 22 }
{ Lines Per Page } { Line 23 }
{ Last Message Read } { Line 24 }
{ Total Uploads } { Line 25 }
{ Total Downloads } { Line 26 }
{ DataBits either '7 Databits ' or '8 Databits ') } { Line 27 }
{ Either 'LOCAL' or 'REMOTE');} { Line 28 }

PCBOARD.SYS File (Text Version)
This file is formatted to a length of 128 bytes and should be used
by DOOR programmers wishing to interface a DOOR or utility program
to PCBoard's operation.

1,2 Ascii Display On/Off ("-1"=on, " 0"=off)
3,2 Ascii Printer On/Off ("-1"=on, " 0"=off)
5,2 Ascii Page Bell On/Off ("-1"=on, " 0"=off)
7,2 Ascii Caller Alarm On/Off ("-1"=on, " 0"=off)
9,1 Ascii Sysop Flag (N, X or Space)
10,2 Ascii Error Corrected Connect ("-1"=yes, " 0"=no)
12,1 Ascii Graphics Mode of Caller ("Y", "N", "7")
13,1 Ascii Node CHAT Status ("U" or "A")
14,5 Ascii BPS Rate to Open Modem Port At
19,5 Ascii BPS CONNECT rate of caller or "Local"
24,2 MKI$ User's Database Record #
26,15 Ascii User's First Name Padded to 15 Spaces
41,12 Ascii Password of Caller padded to 12 spaces
53,4 MKS$ Time User Logged on in Seconds Format
57,5 Ascii Time Caller Logged On (hh:mm format)
62,2 MKI$ Allowed time of user in minutes from PWRD file.
NOTE: This is NOT the calculated allowed time
remaining! The user's record in the USERS file
is NOT updated with "Last Date On" or Elapsed
Time so far that day before the code exits to
either DOS or a DOOR. DOOR programs should
NOT update the USERS file in their application
if the caller is returning to PCBoard. Only
if the caller hangs up inside the DOOR and the
DOOR modifies PCBOARD.SYS, should the file be

64,2 MKI$ Allowed D/L Bytes from the PWRD file (multiply
by 1024 to get total bytes allowed) NOTE: The
USERS file is updated with all U/L and D/L
information before DOOR/DOS exit.
66,1 chr$() Area of the board user exited from
67,5 BitMap Areas of the board the user has already been in
72,5 Bit Map Area the user has already done a "Y" command on
77,2 MKI$ Highest Area "Add Time" so far in minutes
79,2 MKI$ Upload time credit so far that call in minutes
81,4 Ascii Language being used (" ", ".FRE", etc.)
85,25 Ascii Complete Name of caller (first & Last)
110,19 (Space) (Reserved for future use)

(Remaining pcboard record structure for database records)

* This describes the layout of the PCBoard 14.0 database records and
* the various free variables that are provided by the ProKIT library.
* See DATA12.DOC for declarations used under PCB 12.1 (prokit 2.7)
("-1"=on or yes, "0"=off or no)
{layout of the PCBOARD.SYS file while doors are open}
pcb_sys_rec = record
{1 }display: char2; {display on console? -1 or 0}
{3 }printer: char2; {print log? -1 or 0}
{5 }page_bell: char2; {bother sysop? -1 or 0}
{7 }alarm: char2; {caller alarm sound? -1 or 0}
{9 }sysop_next: char; {force sysop on next? 'N', 'X' or ' '}

{10 }errcheck: char2; {error check/correcting modem? -1 or 0}
{12 }graphics: char; {ansi graphics mode? 'Y','N','7'}
{13 }nodechat: char; {node chat status 'U' or 'A'}
{14 }openbps: char5; {BPS rate to open modem port at}
{19 }connectbps: char5; {BPS connect rate or 'Local'}
{24 }usernum: integer; {record number in user file}
{26 }firstname: char15; {caller's first name}
{41 }password: char12; {caller's password}
{53 }time_on: integer; {when the user logged on in MINUTES}
{55 }prev_used: integer; {minutes used in prev calls today, <0}
{57 }time_logged: char5; {hh:mm time the user logged on}
{62 }time_limit: integer; {maximum minutes allowed from PWRD}
{64 }down_limit: integer; {daily download limit/1000 from PWRD}
{66 }curconf: byte; {active conference when door opened}
{67 }joined: bitmap; {areas user has been in}
{72 }ydone: bitmap; {areas user has done 'Y' on}
{77 }time_added: integer; {highest conference added time in mins}
{79 }time_credit: integer; {upload/chat time credit in minutes}
{81 }slanguage: char4; {language used, blank, .FRE etc}
{85 }name: char25; {caller's full name}
{110}sminsleft: integer; {minutes left when door opened}
{112}snodenum: byte; {current node number}
{113}seventtime: char5; {hh:mm event time}
{118}seventactive: char2; {event time active? "-1" or "0 "}
{120}sslide: char2; {slide event? "-1" or " 0"}
{122}smemmsg: single; {memorized message number}
{126}scomport: char; {com port number '0','1','2'}
{127}fill99: char2; {filler UNDOCUMENTED}
{record size: 128}

{layout of the USERS file}
pcb_user_rec = record
{1 }name: char25;
{26 }city: char24;
{50 }passwd: char12; {no spaces allowed}
{62 }busphone: char13;
{75 }phone: char13;

{88 }date: char6; {yymmdd of last call}
{94 }time: char5; {hh:mm of last call}
{99 }expert: char; {pcboard expert status Y or N}
{100}protocol: char; {X, C, Y, N}
{101}space1: char; {space - reserved}
{102}filedate: char6; {yymmdd of last file directory}
{108}level: byte; {security level}
{109}total_calls: integer; {number of times on system}
{111}pagelen: byte; {page length}
{112}uploads: integer; {number of uploads}
{114}downloads: integer; {number of downloads}
{116}downbytes: double; {daily download bytes so far}
{124}usercomment: char30; {user entered comment field}
{154}sysopcomment: char30; {sysop maintained comment field}
{184}lastused: integer; {minutes used so far today}
{186}expdate: char6; {yymmdd expiration date}
{192}explevel: byte; {expired security level}
{193}curconf: byte; {current conference number}
{194}conferences: bitmap; {area registration 1-39 (5 bytes)}
{199}expconf: bitmap; {expired conference registration}
{204}scanconf: bitmap; {user configured scan conferences}
{209}downtotal: double; {total bytes downloaded, all calls}
{217}uptotal: double; {total bytes uploaded, all calls}
{225}dead: char; {positive delete flag, Y or N}

{226}lastread: array[0..39] of single;
{last message pointer, main+39 conf's}

{386}reserved: char7; {reserved for future use}

{393}xpert: char; {pcb/pro's expert flag}
{394}nulls: char; {pcb/pro's nulls flag}
{395}scratchnum: byte; {scratch file number - incremented for
each use of a scratch file}
{396}dooruse: byte; {times in prodoor, up to 255}
{397}earned_k: word; {prodoor; earned kbytes}
{399}reserve3: word; {used by qmail??}
{total size: 400}

{layout of the PCBOARD.SYS file when offline}
pcb_offline_sys_rec = record
display: char2; {display on console? -1 or 0}
printer: char2; {print log? -1 or 0}
page_bell: char2; {bother sysop? -1 or 0}
alarm: char2; {caller alarm sound? -1 or 0}
sysop_next: char; {force sysop on next? 'N', 'X' or ' '}
filler: array[1..119] of char; {filler, spaces}

{layout of the CALLER file}
pcb_caller_rec = record
message: array[1..62] of char;
crlf: char2;

(* layout of CNAMES record *)
pcbconf_rec = record
conf_name: varstring; {full name of the conference}
conf_rejoin: boolean;
conf_viewmembers: boolean;
conf_private_ul: boolean;
conf_private_mail: boolean;
conf_echo_mail: boolean;
conf_addsec: integer;
conf_addtime: integer; {minutes}
conf_msgblocks: integer; {1-32 message blocks; 1024 msgs each}

conf_msgfile: varstring; {conference message base pathname}
conf_updir: varstring; {conference upload dir}
conf_public_uplist: varstring; {public uploads listing pathname}
conf_private_uplist: varstring; {private uploads listing pathname}
conf_private_updir: varstring; {private uploads dir}
conf_menufile: varstring; {normal user menu file pathname}
conf_smenufile: varstring; {sysop menu file pathname}
conf_newsfile: varstring; {conference news pathname}

conf_doors: integer; {number of door programs}
conf_doormenu: varstring; {door menu pathname}
conf_doorinfo: varstring; {door info data pathname}

conf_bulletins: integer;
conf_bltmenu: varstring; {bulletin menu pathname}
conf_bltinfo: varstring; {bulletin info pathname}

conf_scripts: integer; {number of scripts}
conf_scriptmenu: varstring; {script menu pathname}
conf_scriptinfo: varstring; {script info pathname}

conf_dirs: integer; {file areas (not counting U/L dir)}
conf_dirmenu: varstring; {file area menu pathname}
conf_dirinfo: varstring; {file area info pathname}

conf_dlpaths: integer; {number of download paths}
conf_dlinfo: varstring; {download path info pathname}

(* layout of pcboard.dat *)
pcbsetup_rec = record
sysop_name: varstring; {sysop display name}
use_realname: boolean; {use real name for sysop?}
local_graphics: boolean; {graphics on in local mode?}
userix_dir: varstring; {user index location}
users_path: varstring; {user file pathname}
caller_path: varstring; {caller log pathname}
cnames_path: varstring; {cnames file pathname}
fsec_path: varstring; {fsec file pathname}
upsec_path: varstring; {upsec file pathname}
conference_menu: varstring; {conference menu pathname}
tranlog_path: varstring; {down/upload transfer log pathname}
logoff_path: varstring; {logoff message pathname}
modem_offhook: varstring; {modem off-hook command}
disable_CTS_check: boolean; {disable modem rts/cts handshake}
recycle_offhook: boolean; {modem offhook during recycle?}
disable_filter: boolean; {disable high-bit filter}
disable_quick: boolean; {disable quick logon/join}
disable_graphics: boolean; {disable graphics mode?}
dos_recycle: boolean; {exit to dos after each caller}
allow_esc_codes: boolean; {allow escape codes in messages}
allow_cc_msgs: boolean; {allow carbon copy messages}
validate_to: boolean; {validate "TO:" in messages}
update_lastread: boolean; {update lastread on msg leave}
new_news: boolean; {display only NEW news files?}
timeout_minutes: integer; {keyboard timeout in minutes}
under_network: boolean; {running multi-node?}
node_number: varstring; {node number}
network_timeout: integer; {network timeout in seconds}
system_name: varstring; {name of the bbs system}
macro_string: array[1..10] of varstring;
{shift-F1 thru F10 macros}
public_conferences: BitMap; {public conferences}
conf_count: integer; {number of conferences}
msg_lines: integer; {maximum message lines (1-99)}
ansi_intensity: varstring; {default intensity}
ansi_color: varstring; {color for inputs/filedisps}
event_active: boolean; {is event active?}
event_time: string8; {event time hh:mm}
event_buffer: integer; {minutes buffer before event}
event_noul: boolean; {disable uploads before event}
slide_event: boolean; {slide event time if needed}
disable_freecheck: boolean; {disable free space check}
printer_num: varstring; {printer port number 1..3}
min_upload_free: integer; {stop uploads if free space less (K)}

(* ---------------------------------------------------------------- *)
(* variables *)

linenum: integer; {used in "More?" prompting;
<0 for nonstop mode,
>1000 for user abort or ^K}

pcbsys: pcb_sys_rec; {contents of pcboard.sys}

user: pcb_user_rec; {contents of user record}

pcbsetup: pcbsetup_rec; {contents of pcboard.dat}

conf_info: array[0..max_conf] of pcbconf_rec;
{contents of cnames}

topcps: integer; {highest cps possible, this caller}
baudrate: string8; {caller's baud rate}
username: string30; {callers full name}
first_name: string20; {callers first name}

dump_user: boolean; {set by F8, carrier loss or time elapsed *)

cmdline: string; {current command line *)
par: string; {current command parameter *)

config_file: filenames; {filename of configuration file *)
sys_dir: filenames; {directory where pcboard.sys is stored *)
home_dir: filenames; {directory door was loaded from}

alt_i: boolean; {file input in effect? *)
alti_fd: text; {... file *)

key_source: (sysop_key, user_key);
{set by get_key - where did key come from? *)

 December 26, 2017  Add comments

Leave a Reply