Skip to content

Caller and system information

OpenDoors normalizes several door-information formats into a common set of fields. String arrays are fixed-size C buffers and are always subject to the capacity declared in OpenDoor.h.

Unless an entry says otherwise, the field has static-storage initialization: numeric and Boolean fields begin at zero, character arrays begin as empty strings, and pointers begin as NULL. During initialization OpenDoors fills the fields which are available from the selected door-information file. A field which is not supplied by that format normally retains its initial value. Use od_info_type when a program depends upon format-specific information; the presence and precise representation of each such field are stated below.

Most fields on this page are information for the door to read. OpenDoors also reads some of them while the session is running, and writes a smaller subset back to formats which support updates. Each entry identifies those uses. A door should not alter an informational field merely to change its own local copy unless the entry specifically documents a write-back effect.

System events

event_days

BYTE od_control.event_days;

This byte is the EXITINFO.BBS day mask for the next BBS event:

Mask Day
0x01 Sunday
0x02 Monday
0x04 Tuesday
0x08 Wednesday
0x10 Thursday
0x20 Friday
0x40 Saturday
0x80 Every day

The field begins at zero and is populated only when an EXITINFO.BBS record is read. OpenDoors does not interpret it independently, but includes an application replacement when rewriting that record. See bit-mapped flags for the operations used to test individual bits.

event_errorlevel

BYTE od_control.event_errorlevel;

This is the error level associated with the next event in EXITINFO.BBS. It begins at zero and is populated only from that format. The RemoteAccess-style DOS status personality displays it when the event is enabled; other OpenDoors code does not interpret the value. Application changes are written back to EXITINFO.BBS.

event_force

BYTE od_control.event_force;

This EXITINFO.BBS Boolean indicates whether the BBS regards the next event as forced. A true value means that the caller must be taken offline for the event; a false value permits the event to wait until the caller leaves normally. It begins false and is populated only from EXITINFO.BBS. OpenDoors does not enforce the event itself. It preserves an application replacement when the record is rewritten.

event_last_run

char od_control.event_last_run[9];

This is the EXITINFO.BBS date on which the event last ran. OpenDoors converts the source Pascal string, which contains at most eight bytes, to a null-terminated C string without interpreting its date format. The array is initially empty and remains empty for other drop-file formats. OpenDoors does not otherwise use it and writes an application replacement back to EXITINFO.BBS.

event_starttime

char od_control.event_starttime[6];

This is the scheduled event time as a five-character, null-terminated string. It is read from EXITINFO.BBS and from the event field of a Wildcat-style DOOR.SYS; the array is initially empty when neither source supplies it. OpenDoors displays it in the RemoteAccess-style DOS status personality and can substitute it while displaying a RemoteAccess/QuickBBS file. An application replacement is written back to EXITINFO.BBS and to the supported Wildcat-style DOOR.SYS output.

event_status

BYTE od_control.event_status;

This is the event-status byte from EXITINFO.BBS. When it equals ES_ENABLED, the associated event fields describe an enabled event. The byte begins at zero and is populated only from EXITINFO.BBS. The RemoteAccess-style DOS status personality reads it to decide whether to show event information. Application changes are written back to that record.

BBS identity and traffic

sysop_name

char od_control.sysop_name[40];

This is the BBS system operator's name. OpenDoors obtains it from DORINFO?.DEF, DOOR.SYS, SFDOORS.DAT, CALLINFO.BBS, CHAIN.TXT, a custom door-information format, or a command-line/configuration override. If no source supplies a name, initialization changes the initial empty string to "Sysop".

OpenDoors displays the name on its local interface and exposes it to applications. It writes an application replacement to formats whose output contains the sysop name, including DORINFO?.DEF and the supported DOOR.SYS variants.

system_calls

INT32 od_control.system_calls;

This is the BBS-wide call count stored in EXITINFO.BBS. It begins at zero and is populated only from that format. The RemoteAccess-style DOS status personality and the RemoteAccess/QuickBBS display-file substitutions may show it as an unsigned decimal count. OpenDoors does not increment it. Application changes are written back to EXITINFO.BBS.

system_last_caller

char od_control.system_last_caller[36];

This is the previous caller's name from EXITINFO.BBS, converted from a Pascal string of at most 35 bytes to a null-terminated C string. The array is empty when that format is not available. The RemoteAccess-style DOS status personality and display-file substitutions may show it. An application replacement is written back to EXITINFO.BBS.

system_last_handle

char od_control.system_last_handle[36];

This is the previous caller's handle from the RemoteAccess 2.x extended EXITINFO.BBS record, converted from a Pascal string of at most 35 bytes. It is initially empty and remains so for formats which do not supply the field. OpenDoors does not display or interpret it and writes an application replacement only to that extended record.

system_name

char od_control.system_name[40];

This is the BBS name. It may be populated from every supported text drop-file family, a custom door-information format, or a command-line/configuration override. On Unix, if the field is still empty after those sources have been processed, OpenDoors uses the host name. Otherwise an unavailable value remains the initial empty string.

OpenDoors displays the name on its local interface and exposes it to applications. It writes an application replacement to formats whose output contains the system name, including DORINFO?.DEF and supported DOOR.SYS variants.

timelog_start_date

char od_control.timelog_start_date[9];

This is the EXITINFO.BBS traffic-log starting date, exposed as an eight-character, null-terminated string in the representation stored by the BBS record. The array is initially empty and is populated only from an EXITINFO.BBS format which contains the traffic log. OpenDoors does not parse or display the date. An application replacement is included when that record is rewritten.

Caller record

user_ansi

BYTE od_control.user_ansi;

This Boolean states whether the caller's terminal is to receive ANSI display sequences. It begins false, then may be populated by the door-information file, a custom format, a command-line override, or terminal autodetection. Formats which do not report terminal capabilities leave the effective value selected by those other sources.

OpenDoors reads the field whenever it selects ANSI, AVATAR, or plain-text output and displays the mode on supported local status interfaces. An application may change it after initialization to record a caller's selection. The new value affects subsequent output and is written back only to door-information formats whose caller record contains a corresponding graphics-mode setting.

Whether the connection can carry eight-bit character data is a separate capability available through od_get_user_8bit() and od_set_user_8bit(). It is not a member of tODControl, so applications can use it without changing this structure's ABI.

user_attribute

BYTE od_control.user_attribute;

This is the first EXITINFO.BBS caller-attribute byte:

Mask Meaning when set
0x01 Caller record is deleted
0x02 Screen clearing is enabled
0x04 End-of-page prompts are enabled
0x08 ANSI mode is enabled
0x10 The caller has the BBS “no kill” setting
0x20 Transfer priority is enabled
0x40 Full-screen message editor is enabled
0x80 Quiet mode is enabled

Before reading a non-custom format, OpenDoors initializes the byte to 0x06, enabling screen clearing and page prompts. EXITINFO.BBS replaces the complete byte; custom-format settings can set the two presentation bits. OpenDoors reads 0x02 for clear-screen policy, 0x04 for listing pauses and display-file substitutions, and derives user_ansi from 0x08 after reading EXITINFO.BBS. The entire byte is written back to supported EXITINFO.BBS records. See bit-mapped flags.

user_attrib2

BYTE od_control.user_attrib2;

This is the second EXITINFO.BBS caller-attribute byte:

Mask Meaning when set
0x01 User hot keys are enabled
0x02 AVATAR mode is enabled
0x04 Full-screen message reader is enabled
0x08 Caller is hidden from the user list

The byte begins at zero and is populated only from EXITINFO.BBS. OpenDoors derives user_avatar from 0x02 and uses several bits in RemoteAccess/QuickBBS display-file substitutions; it does not otherwise enforce the BBS preferences. Application changes are written back to supported EXITINFO.BBS records.

user_attrib3

BYTE od_control.user_attrib3;

This is the third caller-attribute byte in a RemoteAccess 2.x extended EXITINFO.BBS record. OpenDoors copies the byte without defining or interpreting its individual BBS-owned bits. It begins at zero, is populated only from that extended format, and is written back to the same format after any application change. Consult the applicable RemoteAccess record definition before testing a bit.

user_avatar

BYTE od_control.user_avatar;

This Boolean states whether OpenDoors may use AVATAR terminal commands. It begins false and is populated from formats which report AVATAR, including the second attribute byte of EXITINFO.BBS; a custom format or application may also set it. OpenDoors reads the field when selecting its output protocol and when drawing supported local status displays.

An application may change the value after initialization when the caller selects a terminal mode. The change affects subsequent output. It is reflected in BBS writeback only when the active record has a corresponding AVATAR flag.

user_birthday

char od_control.user_birthday[9];

This variable is a string, in the same format as the od_control.user_lastcall variable, which stores the date of the user's birthday, if it is available. This variable is only available under systems that produce an RA 1.00 and later style extended EXITINFO.BBS or Wildcat style DOOR.SYS file.

user_callsign

char od_control.user_callsign[12];

This variable is a string which contains the user's amateur radio call sign, if any. This variable is only available under systems that produce a CHAIN.TXT file.

user_combinedrecord

BYTE od_control.user_combinedrecord[200];

This array is the BBS caller record's combined-message-area bitmap. Bit zero of element zero represents the first message area, bit one the second, and so forth; a set bit enables that area for combined access. The interpretation of combined access itself belongs to the producing BBS.

The array begins filled with zero bytes. OpenDoors copies all 200 bytes from a RemoteAccess 2.x extended EXITINFO.BBS record and copies the 25-byte QuickBBS/older extended form into the beginning of the array, leaving the remainder zero. OpenDoors does not interpret the bits. It writes the applicable 200- or 25-byte portion back to the same format. The compatibility name ra_combinedrecord designates this same field. See bit-mapped flags.

user_comment

char od_control.user_comment[81];

This variable is a string which contains the sysop's comment about the user that is currently online. This comment may be displayed on the OpenDoors status line, if this variable is available. This variable is available under systems that produce an RA 1.00 and later style extended EXITINFO.BBS or Wildcat style DOOR.SYS file.

user_credit

INT32 user_credit; /* physical member in tODControl */

tODControl physically contains this member, but after the structure declaration OpenDoor.h defines the source-compatibility macro user_credit as user_net_credit. Consequently, ordinary source such as od_control.user_credit is preprocessed into od_control.user_net_credit and does not access this physical INT32 member.

The current drop-file readers and writers do not populate or consume the physical member. It remains part of the structure layout for binary compatibility and should not be addressed by undefining the compatibility macro. Use user_net_credit for the NetMail credit value handled by OpenDoors.

user_dataphone

char od_control.user_dataphone[16];

This string contains the user's data or business phone number, if available. This value is only available under system that produce EXITINFO.BBS, PC-Board/GAP style DOOR.SYS and WildCat DOOR.SYS format door information files.

user_deducted_time

INT16 od_control.user_deducted_time;

This variable contains a signed integer value, which indicates the total amount of time that has been deducted from the user during this call. This variable is only available under systems that produce an RA 1.00 and later style extended EXITINFO.BBS door information file.

user_downk

DWORD od_control.user_downk;

This variable contains the total kilobytes of files that the current user has downloaded from the BBS, and is available under systems that produce EXITINFO.BBS, Wildcat style DOOR.SYS or SFDOORS.DAT format door information files.

user_downlimit

INT16 od_control.user_downlimit;

This variable contains the total number of kilobytes that the caller is permitted to download during this call. If your door allows files do be downloaded, you will probably want to compare the value of this variable to the size of any file to be transferred and the total kilobytes already downloaded, as stored in the od_control.user_todayk variable. This variable is only available under systems that produce an EXITINFO.BBS file.

user_downloads

DWORD od_control.user_downloads;

This variable contains the total number of files that the current user has downloaded from the BBS, and is available under systems that produce EXITINFO.BBS, PC-Board/GAP style DOOR.SYS, WildCat style DOOR.SYS or SFDOORS.DAT format door information files.

user_echomailentered

BYTE od_control.user_echomailentered;

This variable is a Boolean value, indicating whether or not the user has entered new EchoMail during this call. If this variable has a value of TRUE, then EchoMail has been entered, and if it has a value of FALSE, then EchoMail has not been entered. This variable will contain a valid value only after od_init() or some OpenDoors function has been called. Any changes made to this variable will be reflected within the BBS software when control is returned to the BBS. This variable is accessible only under systems which produce an EXITINFO.BBS door information file.

user_error_free

BYTE od_control.user_error_free;

This variable contains a Boolean value indicating whether or not the user is connected to the BBS via an error free connection (eg. a V.42/MNP or similar modem protocol). This variable is only available under systems that produce an SFDOORS.DAT, Wildcat style DOOR.SYS or RA 1.00 or later style extended EXITINFO.BBS door information file.

user_firstcall

char od_control.user_firstcall[9];

This variable is a string which contains the date of the user's first call, in the same format as the od_control. user_lastcall variable. This variable is only available under systems which produce an RA 1.00 and later style extended EXITINFO.BBS door information file.

user_flags

BYTE od_control.user_flags[4];

The od_control.user_flags variable is an array of four sysop defined bit-mapped flags, which represent some sort of information about the user. od_control.user_flags[0] stores flags A1 - A8 in bits 0 through 7, respectively. Likewise, od_control.user_flags[1] stores flags B1 - B8, and so on. This variable is only available under systems that produce EXITINFO.BBS format door information files.

user_handle

char od_control.user_handle[36];

This variable contains the user's alias or handle name, if any. If the user does not have an alias or handle, this variable will be blank. Door-information formats which supply it include CHAIN.TXT, RA 1.00 and later extended EXITINFO.BBS, and Wildcat-style DOOR.SYS.

During a Unix forced-local login, OpenDoors replaces this field with the login name from the current user's account record. If that record or its login name is unavailable, the existing field is retained. OpenDoors reads the handle for status display and writes it back to supported door-information formats. An application may supply a value before initialization or change it afterward.

user_homephone

char od_control.user_homephone[16];

This string contains the user's home or data phone number, if available. This value is only available under system that produce one of the following door information files: EXITINFO.BBS, PC-Board/GAP style DOOR.SYS, WildCat style DOOR.SYS or SFDOORS.DAT.

user_last_pwdchange

BYTE od_control.user_last_pwdchange;

This variable contains the number of calls that the user has made since they last changed their password. This variable is only available under EXITINFO.BBS files.

user_lastdate

char od_control.user_lastdate[9];

This variable is a string containing the date of the user's last call to the BBS, and should always be of the format:

"MM-DD-YY"

Where MM is two digits representing the number of the month of the user's call, with 1 being January, 2 being February, and so on. DD should be two digits representing the day of the month of the user's last call, beginning with 1, and MM should be the last two digits of the year of the user's last call.

This variable is only available under systems that produce one of the following door information files: CHAIN.TXT, EXITINFO.BBS, PC-Board/GAP style DOOR.SYS or WildCat style DOOR.SYS files.

user_lastread

DWORD od_control.user_lastread;

This variable contains the number of the highest message number that the user has read, and is only available under EXITINFO.BBS format door information files.

user_lasttime

char od_control.user_lasttime[6];

This variable contains a string representing the time of the user's last call to the BBS, and should always be of the format:

"HH:MM"

Where HH is two digits representing the 24-hour format hour of the user's last call, and MM is two digits representing the minute of the user's last call. Thus, the following strings would be valid entries for this string:

"00:01" (12:01 am) "03:47" (3:47 am) "18:20" (6:20 pm)

This variable is only available under systems that produce an EXITINFO.BBS or Wildcat style DOOR.SYS format door information file.

user_location

char od_control.user_location[26];

This string contains the name of the location from which the current user is calling from. This will usually be the name of the city, region (province, state, etc.) and sometimes country where the user lives. The contents of this variable are displayed on the OpenDoors status line. The value of this variable is valid after od_init() or any other OpenDoors function has been called. Also, you may change the value of this variable if you wish. However, not that these changes may not immediately be reflected in the status line, and may or may not cause the setting to be changed after the user returns to the BBS. This variable is available under systems that produce one of the following door information files: DORINFO?.DEF, EXITINFO.BBS, PC-Board/GAP style DOOR.SYS, WildCat style DOOR.SYS SFDOORS.DAT and CALLINFO.BBS, but is not available under CHAIN.TXT or DoorWay style DOOR.SYS files.

user_loginsec

INT32 od_control.user_loginsec;

This variable contains the user's security at login, and can be used to detect changes by the sysop or other programs during the course of the call, by comparing it's value with the od_control.user_security variable. This variable is only available under systems which produce an EXITINFO.BBS file.

user_logintime

char od_control.user_logintime[6];

This variable contains the time of day at which the current call to the BBS began, in the same 24-hour "HH:MM" format as od_control.user_lasttime. For SFDOORS.DAT, line 15 is a decimal count of minutes: OpenDoors divides it by 60 for HH and uses the remainder for MM. Thus, a value of 754 becomes "12:34". This variable is available under systems which produce an EXITINFO.BBS, a Wildcat-style DOOR.SYS, or an SFDOORS.DAT file.

user_logonpassword

char od_control.user_logonpassword[16];

This variable is a string which contains the user's password at the time at which the current call to the BBS began. This variable can be used to detect changes by the sysop or other programs to the user's password, which have taken place during the course of the call. In order to detect such changes, simply compare the contents of this string with the contents of the od_control.user_password variable. This variable is only available under systems which produce an EXITINFO.BBS format door information file.

user_menustack

char od_control.user_menustack[50][9];

This variable is an array of 50 strings, containing the stack of BBS menus that have been executed, and is used to record the current position of the user within the BBS's menu system. Each string contains just the base portion of the filename of the menu, without the extension. The od_control.ra_menustackpointer variable points to the top of the menu stack. However, a complete discussion of the menu stack is beyond the scope of this manual. This variable is only available under systems that produce an RA 1.00 and later style extended EXITINFO.BBS door information file.

user_menustackpointer

BYTE od_control.user_menustackpointer;

This variable points to the top of the current menu stack. For more information on the menu stack, please refer to the od_control.ra_menustack variable, above. This variable is only available under systems that produce an RA 1.00 and later style extended EXITINFO.BBS door information file.

user_messages

WORD od_control.user_messages;

This variable contains a value representing the total number of messages that have been written by the user, and is available under EXITINFO.BBS or Wildcat style DOOR.SYS format door information files.

user_name

char od_control.user_name[36];

This string contains the name of the user who is currently online. OpenDoors uses it on the status line, and a door will commonly use it to distinguish among callers. All supported door-information formats provide a caller name. The field begins empty when the control structure has static storage and is populated during initialization unless the application supplied the session information itself.

Forced-local initialization uses the configured sysop name as its initial caller name. On Unix, OpenDoors replaces that value with the GECOS name from the current user's account record when one is available. If the account record or its GECOS string is unavailable, the existing caller name is retained.

In most cases, a door should not change this value because a user's name does not normally change and some BBS formats write the modified value back when the door exits. For an example of reading this field, see the EX_VOTE.C example program.

user_net_credit

DWORD od_control.user_net_credit;

Contains the caller's remaining NetMail credit from supported EXITINFO.BBS records. OpenDoors reads the field during initialization and writes its current value back when updating those records. The public compatibility name user_credit expands to this member, as do the applicable older caller-credit aliases.

The value is a DWORD in tODControl. Individual legacy records can store a narrower credit field; for example, the primitive EXITINFO.BBS writer casts the value to WORD. A door targeting such a format must not assume that a value above 65,535 will survive the write-back conversion.

user_netmailentered

BYTE od_control.user_netmailentered;

This variable is a Boolean value, indicating whether or not the user has entered new NetMail or GroupMail during this call. If this variable has a value of TRUE, then NetMail/GroupMail has been entered, and if it has a value of FALSE, then NetMail/GroupMail has not been entered. This variable will contain a valid value only after od_init() or some OpenDoors function has been called. Any changes made to this variable will be reflected within the BBS software when control is returned to the BBS. This variable is accessible only under systems which produce an EXITINFO.BBS door information file.

user_num

WORD od_control.user_num;

This variable contains the number of the user's record in the user database file, where 0 is the first record. This can be useful for changing user settings that are not re-read by the BBS, such as the user's phone number or security level which might be altered by a call back verification door. However, the value of this variable itself should not be altered.

This variable is available under systems which produce any of the following door information file formats: CHAIN.TXT, PC- Board/GAP style DOOR.SYS, Wildcat style DOOR.SYS SFDOORS.DAT and EXITINFO.BBS.

user_numcalls

DWORD od_control.user_numcalls;

This variable contains the total number of calls that the current user has placed to the BBS, and is available under systems that produce EXITINFO.BBS or PC-Board/GAP and Wildcat style DOOR.SYS door information files.

user_numpages

INT16 od_control.user_numpages;

The value of this variable contains the total number of times that the user has paged the sysop, and can be used to limit the number of times that the user is permitted to page the sysop. OpenDoors increments this variable every time that the user pages the sysop, via the od_page() function. This variable is used with all types of door information files. However, this variable will only reflect the value within the BBS if an EXITINFO.BBS file is produced. Otherwise, the variable will only contain the number of times that the user has paged within the door, but not the total number of times the user has paged. Under EXITINFO.BBS systems, changes to the value of this variable will be reflected within the BBS upon return by the DOOR.

user_password

char od_control.user_password[16];

This variable contains the user's password for accessing the BBS. OpenDoors does not use this value itself. This variable will contain a valid value only after od_init() or some OpenDoors function has been called. You may change the value of this variable. Note, however, that changes in this variable may or may not cause the setting to be changed when control returns to the BBS - this will depend upon the particular BBS system your door is running under. This variable is only available under systems that produce one of the following door information files: EXITINFO.BBS, PC-Board/GAP and Wildcat style DOOR.SYS, SFDOORS.DAT, and CALLINFO.BBS.

user_pending

DWORD od_control.user_pending;

This variable represents the total value of NetMail that has been written by the current user, but not yet exported from the message base. This variable is only available under systems that produce an EXITINFO.BBS door information file.

user_reasonforchat

char od_control.user_reasonforchat[78];

This variable is a string, containing the reason for which the user wishes to chat with the sysop, as they entered at the time of paging the sysop. This variable will contain an empty string if the user has not paged the sysop, or if the reason the user wishes to chat is unknown. See also the od_control.user_wantchat variable. This variable is available under all BBS systems, regardless of what style of door information file they produce. However, this variable will not be passed between the door and BBS, and thus the user's reason for chat within the door will not necessarily correspond to their reason for chat outside the door.

user_screen_length

WORD od_control.user_screen_length;

This value of this variable represents the total number of lines that can be displayed on the user's screen at once, and is usually either 24 or 25. You may wish to make use of this variable to allow your door to pause the display of long pieces of text after every screen length, in order to allow the user to read this information before it passes off of their screen. In this case, you would simply maintain a counter of the total number of lines displayed, and when this value reaches one less than the length of the user screen, display a prompt asking the user to whether or not they wish to continue.

This variable is set to the user's setting within the BBS under systems that produce any of the following door information file formats: CHAIN.TXT, EXITINFO.BBS, PC-Board/GAP and Wildcat style DOOR.SYS and CALLINFO.BBS files.

This variable is used by the OpenDoors function, od_list_files(). If this variable contains a valid value, OpenDoors will pause the listing of files after every screen, and give the user the option of continuing, aborting, or disabling the "Continue?" prompt for the rest of the file listing. Thus, if you are using the od_list_files() under a system that does not produce one of the door information files listed above, you may wish to obtain the user's screen length from the user themselves. If the screen length is not available from the particular type of door information file that is found, and you do not set this value yourself, this variable will default to 23. A nonzero value assigned before od_init() is preserved unless the selected door-information format supplies a replacement.

user_screenwidth

BYTE od_control.user_screenwidth;

This variable contains a value representing the width of the user's screen, and will most often be equal to 80. This variable is only available under systems that produce a CHAIN.TXT or RA 1.00 and later style extended EXITINFO.BBS door information file.

When no width is supplied, od_init() defaults this field to 80. A nonzero value assigned before initialization is preserved unless the selected door-information format supplies a replacement.

user_security

WORD od_control.user_security;

This variable contains a numerical value representing the user's security access level on the BBS. You may wish to use this value to determine whether or not the current user of your door should have access to certain sysop-only functions. In this case, you may wish to have a configuration file used by your door, in which the sysop may define the minimum security level for sysop access. You would then be able to compare this configuration setting to the security level stored in this variable, in order to determine whether or not sysop function should be available. An alternative method, used by the EX_VOTE.C sample door, of determining whether or not the current user is the sysop is to compare the user's name with the value of the od_control.sysop_name variable. This method has the advantage of not requiring a configuration program, but the disadvantage that the door will not function correctly under all BBS systems, as the od_control.sysop_name variable is not available under all BBS systems.

The od_control.user_security variable is available under BBS systems that produce any of the following door information file

formats: CHAIN.TXT, EXITINFO.BBS, PC-Board/GAP and Wildcat style DOOR.SYS, SFDOORS.DAT or CALLINFO.BBS.

user_sex

char od_control.user_sex;

This variable contains a single character representing the gender of the user that is currently online. This variable will contain an upper-case 'F' if the user is female, and an upper- case 'M' if the user is male. This variable is available under systems that produce a CHAIN.TXT or RA 2.x style EXITINFO.BBS file.

user_subdate

char od_control.user_subdate[9];

This variable is a string, in the same format as the od_control.user_lastdate variable, which stores the date of expiry of the user's subscription to the BBS. This variable is only available under systems which produce a PC-Board/GAP and Wildcat style DOOR.SYS or RA 1.00 and later style extended EXITINFO.BBS door information file.

user_timelimit

INT16 od_control.user_timelimit;

This variable contains the amount of time, in minutes, that the user has left in the door. Note that this value may or may not be equal to the total amount of time that the user has left on the BBS, depending upon whether the BBS or a third-party door manager program only allows a limited amount of time in this door. This variable contains a valid value after od_init() or some OpenDoors function has been called. OpenDoors uses this variable to keep track of how much time the user has left in the door, and will automatically warn the user when nearly all of his or her time has been used up. OpenDoors will also force the user out of the door when their time in the door has expired. OpenDoors automatically subtracts one minute from this variable every minute that OpenDoors is active, unless chat mode has been activated (in which case the user's time will freeze), and also adjusts the value of this variable when the sysop uses the time adjustment function keys. Hence, you will not normally have any need to alter the value of this variable yourself. However, there may be some cases in which you wish to subtract a penalty or add a bonus to the user's time, such as in a "timebank" door or a door game that permits the user to "gamble time". Depending on which BBS system your door is running under, the value of this variable may or may not effect the user's time left upon return to the BBS. The BBS system will either reset the user's time to the value re-written to the door information file (this variable), or will always subtract the amount of time spent in the door from the user's remaining time.

When rewriting a primitive EXITINFO.BBS record, OpenDoors compensates for the elapsed time in the door so that only a sysop or application adjustment is applied to the time limit stored by the BBS. If the system clock was unavailable at initialization or write-back, OpenDoors cannot distinguish elapsed time from an adjustment and leaves the record's original time limit unchanged. The same fallback applies if the system clock has moved backwards.

This variable is available under all door information file formats.

user_todayk

DWORD od_control.user_todayk;

This variable contains the total kilobytes of files that the current user has downloaded from the BBS during the current day, and is available under systems that produce EXITINFO.BBS, PC- Board/GAP and Wildcat style DOOR.SYS, or SFDOORS.DAT format door information files.

user_upk

DWORD od_control.user_upk;

This variable contains the total kilobytes of files that the current user has uploaded to the BBS, and is available under systems that produce EXITINFO.BBS, Wildcat style DOOR.SYS or SFDOORS.DAT files.

user_uploads

DWORD od_control.user_uploads;

This variable contains the total number of files that the current user has uploaded to the BBS, and is available under systems that produce EXITINFO.BBS, PC-Board/GAP and Wildcat style DOOR.SYS, or SFDOORS.DAT format door information files.

user_wantchat

BYTE od_control.user_wantchat;

This variable is a Boolean value which indicates whether or not the user wishes to chat with the sysop (ie, the user has paged the sysop, but has yet to receive a chat with the sysop). This variable is used under all door information file formats. However, changes to this variable are only reflected on the BBS when the door is running under a system that produces an EXITINFO.BBS door information file.

This variable is automatically turned on (ie., set to TRUE), when the user begins to page the sysop for chat, within the od_page() function, and is automatically turned off (ie., set to FALSE), when the sysop breaks in for chat via the chat function key. Also, setting this variable to TRUE will turn on the flashing want-chat indicator on the OpenDoors status line.

user_xi_record

DWORD od_control.user_xi_record;

This variable contains the number of the user's record in the USERXI.BBS file, if any. This variable is only available under system that produce a Remote Access 1.00 and later style extended door information file.

Traffic-log fields

timelog_busyperhour

INT16 od_control.timelog_busyperhour[24];

Each element contains the count recorded by EXITINFO.BBS for the corresponding hour of the day: element 0 covers 00:00 through 00:59, element 1 covers 01:00 through 01:59, and so forth through element 23. The array is zero-initialized and is populated only when OpenDoors reads an EXITINFO.BBS record containing the traffic log. OpenDoors does not otherwise use these counts. All 24 values are copied back when a standard, RemoteAccess 1.x, QuickBBS 2.75, or RemoteAccess 2.x EXITINFO.BBS record is rewritten.

timelog_busyperday

INT16 od_control.timelog_busyperday[7];

These are the EXITINFO.BBS traffic counts for Sunday through Saturday, in that order. The array is zero-initialized and unavailable values therefore cannot be distinguished from valid zero counts. OpenDoors does not interpret the counts. All seven values are copied back with the hourly values when a supported EXITINFO.BBS record is rewritten. Historic RemoteAccess versions were known not to maintain this array consistently, so the presence of an EXITINFO.BBS record does not imply that nonzero data will be present.

Extended RemoteAccess identity

user_org

char od_control.user_org[51];

This is the caller's organization from a RemoteAccess 2.x extended EXITINFO.BBS record, converted from a Pascal string of at most 50 bytes to a null-terminated C string. It is empty for formats which do not provide the field. OpenDoors does not display or interpret it, but writes an application replacement back to a RemoteAccess 2.x record.

user_address

char od_control.user_address[3][51];

These are the three postal-address lines in a RemoteAccess 2.x extended EXITINFO.BBS record. Each source Pascal string can contain at most 50 bytes; OpenDoors exposes it as a null-terminated C string. All elements are empty when the active format does not supply them. OpenDoors does not otherwise read the address and writes all three elements back only to the RemoteAccess 2.x record.

user_pwd_crc

INT32 od_control.user_pwd_crc;

This is the signed 32-bit password_crc value stored in a RemoteAccess 2.x extended EXITINFO.BBS user record. OpenDoors copies the value without calculating, validating, or using it. Its initial zero can be either an unavailable value or a value supplied by the BBS; only od_info_type establishes whether the RA2 field was read. Application changes are written back to that format.

user_logon_pwd_crc

INT32 od_control.user_logon_pwd_crc;

This is the RemoteAccess 2.x logonpasswordcrc value captured at the start of the current BBS session. It permits an application which understands that BBS field to compare the login value with user_pwd_crc. OpenDoors does not calculate or compare either checksum. The field begins at zero, is populated only by a full RemoteAccess 2.x record, and is written back to the same format.

user_last_cost_menu

char od_control.user_last_cost_menu[9];

This is the base menu name stored in the RemoteAccess 2.x last_cost_menu field, exposed as a C string of at most eight bytes plus the terminator. It is empty when unavailable. OpenDoors does not use the name and writes an application replacement back only to the RemoteAccess 2.x record.

user_menu_cost

WORD od_control.user_menu_cost;

This is the unsigned 16-bit RemoteAccess 2.x menu_cost_per_min value associated with user_last_cost_menu. OpenDoors preserves the numeric value but does not apply it to time or credit accounting. It is zero-initialized and written back only to the full RemoteAccess 2.x record.

Areas, groups, and preferences

user_group

WORD od_control.user_group;

This is the caller's RemoteAccess group number. It is populated by EXITINFO.BBS formats which contain the group field and otherwise remains zero. The RemoteAccess personality displays the value on one local status screen; the remainder of OpenDoors treats it as application data. On write-back to the older record layout it is narrowed to one byte, while the RemoteAccess 2.x layout retains the full WORD.

user_msg_area

WORD od_control.user_msg_area;

This is the number of the caller's current message area. OpenDoors can obtain it from SFDOORS.DAT and from the extended RemoteAccess 1.x and 2.x EXITINFO.BBS layouts. It is zero when unavailable. OpenDoors does not use it outside door-information input and output; the RemoteAccess 1.x extended layout stores only one byte and therefore narrows values above 255.

user_file_area

WORD od_control.user_file_area;

This is the number of the caller's current file area. Its sources and write-back behavior are the same as user_msg_area: SFDOORS.DAT and extended RemoteAccess EXITINFO.BBS, with a one-byte field in the RemoteAccess 1.x extension. OpenDoors otherwise leaves the value for the application.

user_file_group

WORD od_control.user_file_group;

This is the current file-group number from a full RemoteAccess 2.x extended EXITINFO.BBS record. It is copied as an unsigned 16-bit value, is not used by OpenDoors, and is written back to that record. Zero means either group zero or that the active format did not provide the field.

user_msg_group

WORD od_control.user_msg_group;

This is the current message-group number from a full RemoteAccess 2.x extended EXITINFO.BBS record. OpenDoors preserves it as an unsigned 16-bit value but does not otherwise read it. It is written back to that format; zero is ambiguous when another format is active.

user_protocol

char od_control.user_protocol;

This is the single-byte default_protocol selector from a RemoteAccess 2.x extended EXITINFO.BBS record. It is the BBS's protocol-selection character, not an OpenDoors enumeration. OpenDoors neither selects a transfer protocol from it nor changes it automatically; application changes are written back to the same format.

user_last_birthday_check

BYTE od_control.user_last_birthday_check;

This is the raw one-byte last_dob_check value from RemoteAccess 2.x. The current OpenDoors implementation defines no date conversion or constants for the field and does not inspect it. It remains zero for other formats and is preserved when the RA2 record is rewritten.

user_language

BYTE od_control.user_language;

This is the RemoteAccess language-table index from an extended 1.x or 2.x EXITINFO.BBS record. OpenDoors does not use the index to translate its own prompts; an application must select any corresponding strings itself. The field begins at zero and is written back to either extended layout.

user_date_format

BYTE od_control.user_date_format;

This is the RemoteAccess dateformat selector from an extended 1.x or 2.x EXITINFO.BBS record. OpenDoors copies the one-byte value without interpreting or normalizing date strings and supplies no manifest constants for its values. It begins at zero and is written back to either extended layout.

user_forward_to

char od_control.user_forward_to[36];

This is the RemoteAccess message-forwarding destination, converted from a Pascal string of at most 35 bytes. Extended RemoteAccess 1.x and 2.x records provide and accept it. OpenDoors does not perform forwarding or validate the name; the application receives an empty string when the field is unavailable.

user_expert

BOOL od_control.user_expert;

TRIBBS.SYS line 5 supplies TRUE when its first character is Y and FALSE otherwise. OpenDoors writes it back as Y or N when rewriting that format, but does not alter menus, prompts, or other behavior in response to the value. It remains the static value FALSE for formats which do not supply it unless the application assigns it.

IEMSI and held-message data

user_emsi_session

BYTE od_control.user_emsi_session;

This is the one-byte IEMSI-session flag supplied by extended RemoteAccess 1.x and 2.x EXITINFO.BBS records. A nonzero value reports that the BBS had an interactive EMSI session; OpenDoors does not establish or negotiate the session itself. The value is zero when unavailable and is written back with the other extended fields.

user_emsi_crtdef

char od_control.user_emsi_crtdef[41];

This is the IEMSI terminal-definition string from extended RemoteAccess EXITINFO.BBS, converted from a Pascal field of at most 40 bytes. OpenDoors does not parse the IEMSI token and writes the C string back to either supported extended layout.

user_emsi_protocols

char od_control.user_emsi_protocols[41];

This is the IEMSI protocols string from the same extended records. It is a null-terminated copy of the BBS's at-most-40-byte Pascal field. OpenDoors does not use it for protocol selection.

user_emsi_capabilities

char od_control.user_emsi_capabilities[41];

This is the IEMSI capabilities string from the same extended records, preserved as at most 40 bytes plus a null terminator. Capability interpretation is left to the application; OpenDoors only reads and writes the field.

user_emsi_requests

char od_control.user_emsi_requests[41];

This is the IEMSI requests string from the same extended records, converted to a null-terminated C string. OpenDoors does not act on the requests.

user_emsi_software

char od_control.user_emsi_software[41];

This is the IEMSI client-software identification string from the same extended records. It can contain at most 40 bytes before the terminator. OpenDoors does not parse it.

user_hold_attr1

BYTE od_control.user_hold_attr1;

This is the first raw held-message attribute byte from extended RemoteAccess 1.x and 2.x EXITINFO.BBS. OpenDoors defines no bit masks for it and does not inspect it; the value is preserved on write-back.

user_hold_attr2

BYTE od_control.user_hold_attr2;

This is the second raw held-message attribute byte. Its availability and handling are identical to user_hold_attr1.

user_hold_len

BYTE od_control.user_hold_len;

This is the raw held-message length byte adjacent to the two held-message attributes in extended RemoteAccess EXITINFO.BBS. OpenDoors copies it but does not use it to address or allocate any buffer.

Session and terminal extensions

user_logindate

char od_control.user_logindate[9];

This is the date on which the current BBS session began, from EXITINFO.BBS, stored as an eight-character string plus its terminator. The representation is supplied by the BBS and is normally the same as user_lastdate. OpenDoors does not parse it and writes a replacement back when the active EXITINFO.BBS layout supports the field.

user_timeofcreation

char od_control.user_timeofcreation[6];

This is the creation time stored in an EXITINFO.BBS record, exposed as five characters plus a terminator. It normally has the HH:MM form used by user_lasttime. OpenDoors does not parse the string and writes it back with supported EXITINFO.BBS variants.

user_readthru

INT16 od_control.user_readthru;

This is the signed 16-bit readthru value from EXITINFO.BBS. It is copied without interpretation and written back with that record. The field is initially zero, and OpenDoors itself does not read it outside the format conversion path.

user_time_used

WORD od_control.user_time_used;

This field begins with the elapsed minutes from EXITINFO.BBS; other formats leave it zero. During od_exit(), OpenDoors adds its calculated change in used time before rewriting the door-information record. If either session timestamp is unavailable, or the system clock has moved backwards, OpenDoors cannot calculate that change and retains the existing value. The terminal-emulation control-code path can also display the current numeric value. Applications may read or adjust it, but a zero value is ambiguous when no EXITINFO.BBS elapsed field was available.

user_rip

BYTE od_control.user_rip;

This Boolean reports whether RIP graphics are active for the caller. Several text drop-file formats, custom configuration definitions, QuickBBS and RemoteAccess EXITINFO.BBS variants can supply it; otherwise it begins as FALSE. od_autodetect() can set it to TRUE after a successful RIP probe.

OpenDoors reads this field when selecting RIP-specific clear-screen behavior, terminal-emulation commands, status-line indicators, and .RIP file handling. Application changes take effect immediately and are written back only by door-information formats which have a RIP field.

user_rip_ver

BYTE od_control.user_rip_ver;

This is the raw RIP version byte supplied by a full RemoteAccess 2.x extended EXITINFO.BBS record. OpenDoors preserves it on write-back but does not use it to select or reject RIP commands; user_rip is the active-mode switch. The field remains zero when the version is unavailable.