/* OpenDoors Online Software Programming Toolkit * (C) Copyright 1991 - 1999 by Brian Pirie. * * Oct-2001 door32.sys/socket modifications by Rob Swindell (www.synchro.net) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * * File: OpenDoor.h * * Description: C/C++ definition of the OpenDoors API. Any program source file * that uses OpenDoors must #include this file. * * Revisions: Date Ver Who Change * --------------------------------------------------------------- * Dec 02, 1995 6.00 BP New file header format. * Dec 09, 1995 6.00 BP Added od_multiline_edit() prototype. * Dec 12, 1995 6.00 BP Cleaned up, added DLL definitions. * Dec 12, 1995 6.00 BP Moved ODPLAT_??? to OpenDoor.h. * Dec 21, 1995 6.00 BP Add ability to use already open port. * Dec 22, 1995 6.00 BP Added od_connect_speed. * Dec 23, 1995 6.00 BP Added EDIT_FLAG_SHOW_SIZE. * Dec 30, 1995 6.00 BP Added ODCALL for calling convention. * Jan 01, 1996 6.00 BP BCC32 compatibility changes. * Jan 01, 1996 6.00 BP Added new mulitline editor options. * Jan 01, 1996 6.00 BP Added od_disable_dtr, DIS_DTR_DISABLE. * Jan 03, 1996 6.00 BP Further BCC32 compatiblity changes. * Jan 04, 1996 6.00 BP Added od_get_input() and related defs. * Jan 07, 1996 6.00 BP Added OD_GLOBAL_CONV. * Jan 19, 1996 6.00 BP Removed some unused stuff. * Jan 19, 1996 6.00 BP Added od_internal_debug. * Jan 23, 1996 6.00 BP Added od_exiting and ERR_UNSUPPORTED. * Jan 30, 1996 6.00 BP New extern "C" decl for od_control. * Jan 30, 1996 6.00 BP Replaced od_yield() with od_sleep(). * Jan 31, 1996 6.00 BP Added DIS_NAME_PROMPT. * Jan 31, 1996 6.00 BP Added tODMilliSec, OD_NO_TIMEOUT. * Jan 31, 1996 6.00 BP Added timeout for od_get_input(). * Feb 02, 1996 6.00 BP Add RA 2.50-related od_control vars. * Feb 03, 1996 6.00 BP Added more editor options. * Feb 06, 1996 6.00 BP Added od_silent_mode. * Feb 08, 1996 6.00 BP Added editor buffer grow option. * Feb 13, 1996 6.00 BP Added od_get_input() flags parameter. * Feb 14, 1996 6.00 BP Recognize Borland's __WIN32__ define. * Feb 17, 1996 6.00 BP Added OD_KEY_F1 thru OD_KEY_F10. * Feb 19, 1996 6.00 BP Changed version number to 6.00. * Feb 27, 1996 6.00 BP Added od_max_key_latency. * Mar 03, 1996 6.10 BP Begin version 6.10. * Mar 03, 1996 6.10 BP Fixed OD_COMPONENT for medium mem mod. * Mar 06, 1996 6.10 BP Added TRIBBS.SYS support. * Mar 06, 1996 6.10 BP Added COM_DOOR32. * Mar 11, 1996 6.10 BP Added OD_VERSION. * Mar 13, 1996 6.10 BP Added od_get_cursor(). * Mar 13, 1996 6.10 BP Added od_local_win_col. * Mar 14, 1996 6.10 BP Added od_config_callback. * Mar 21, 1996 6.10 BP Added od_control_get(). * Apr 08, 1996 6.10 BP Added command-line parsing callbacks. * Oct 19, 2001 6.20 RS Added door32.sys and socket support. * Oct 19, 2001 6.21 RS Fixed socket disconnect bug. */ /* Only parse OpenDoor.h once. */ #ifndef _INC_OPENDOOR #define _INC_OPENDOOR /* ========================================================================= */ /* Version and platform definitions. */ /* ========================================================================= */ /* OpenDoors API version number. */ #define OD_VERSION 0x624 #define DIRSEP '\\' #define DIRSEP_STR "\\" /* OpenDoors target platform. */ #if defined(WIN32) || defined(__WIN32__) || defined(_WIN32) #define ODPLAT_WIN32 #undef ODPLAT_DOS #ifdef OD_WIN32_STATIC #pragma message("Compiling for Win32 static version of OpenDoors") #else /* !OD_WIN32_STATIC */ #pragma message("Compiling for Win32 DLL version of OpenDoors") #define OD_DLL #endif /* !OD_WIN32_STATIC */ #else /* !WIN32 */ #if defined(__unix__) || defined(__NetBSD__) || defined(__APPLE__) #define ODPLAT_NIX #undef ODPLAT_DOS #undef DIRSEP #define DIRSEP '/' #undef DIRSEP_STR #define DIRSEP_STR "/" #else #define ODPLAT_DOS #undef ODPLAT_WIN32 #pragma message("Compiling for DOS version of OpenDoors") #endif /* !NIX */ #endif /* !WIN32 */ /* Include any other headers required by OpenDoor.h. */ #ifdef ODPLAT_WIN32 #include "windows.h" #endif /* ODPLAT_WIN32 */ /* For DLL versions, definitions of function or data that is exported from */ /* a module or imported into a module. */ #ifdef OD_DLL #if defined(_MSC_VER) || defined(__BORLANDC__) #define OD_EXPORT __declspec(dllexport) #else /* !_MSC_VER || __BORLANDC__ */ #define OD_EXPORT _export #endif /* !_MSC_VER */ #define OD_IMPORT DECLSPEC_IMPORT #else /* !OD_DLL */ #define OD_EXPORT #define OD_IMPORT #endif /* !OD_DLL */ /* Definition of function naming convention used by OpenDoors. */ #ifdef __cplusplus #define OD_NAMING_CONVENTION extern "C" #else /* !__cplusplus */ #define OD_NAMING_CONVENTION #endif /* !__cplusplus */ /* Definition of function calling convention used by OpenDoors. */ #ifdef ODPLAT_WIN32 #define ODCALL WINAPI #define ODVCALL WINAPIV #define OD_GLOBAL_CONV WINAPI #else /* !ODPLAT_WIN32 */ #define ODCALL #define ODVCALL #define OD_GLOBAL_CONV #endif /* !ODPLAT_WIN32 */ /* OpenDoors API function declaration type. */ #ifdef BUILDING_OPENDOORS #define ODAPIDEF OD_NAMING_CONVENTION OD_EXPORT #else /* !BUILDING_OPENDOORS */ #define ODAPIDEF OD_NAMING_CONVENTION OD_IMPORT #endif /* !BUILDING_OPENDOORS */ /* OpenDoors API global variable definition and declaration types. */ #define OD_API_VAR_DEFN OD_NAMING_CONVENTION OD_EXPORT #ifdef BUILDING_OPENDOORS #define OD_API_VAR_DECL extern OD_EXPORT #else /* !BUILDING_OPENDOORS */ #define OD_API_VAR_DECL extern OD_IMPORT #endif /* !BUILDING_OPENDOORS */ /* Explicitly far pointers. */ #ifdef ODPLAT_DOS #define ODFAR far #else /* !ODPLAT_DOS */ #define ODFAR #endif /* !ODPLAT_DOS */ /* ========================================================================= */ /* Primitive data types. */ /* ========================================================================= */ /* Portable types that are the same size across all platforms */ #ifndef ODPLAT_WIN32 #ifndef BYTE typedef unsigned char BYTE; /* Unsigned, 8 bits. */ #endif #ifndef WORD typedef unsigned short WORD; /* Unsigned, 16 bits. */ #endif #ifndef DWORD typedef unsigned long DWORD; /* Unsigned, 32 bits. */ #endif #ifndef CHAR typedef char CHAR; /* Native character representation. */ #endif #define DWORD_DEFINED #define WORD_DEFINED #endif /* !ODPLAT_WIN32 */ typedef signed char INT8; /* Signed, 8 bits. */ typedef signed short int INT16; /* Signed, 16 bits. */ #ifndef ODPLAT_WIN32 /* avoid type redefinition from basetsd.h */ typedef signed long int INT32; /* Signed, 32 bits. */ #endif /* Types that vary in size depending on platform. These are guranteed to be */ /* at least the given size, but may be larger if this platform can */ /* represent a larger value more efficiently (or as efficiently). */ #ifndef ODPLAT_WIN32 typedef int INT; /* Integer, at least 16 bits. */ typedef unsigned int UINT; /* Unsigned integer, at least 16 bits. */ #ifndef BOOL typedef char BOOL; /* Boolean value, at least 1 bit. */ #endif /* !BOOL */ #endif /* !ODPLAT_WIN32 */ /* TRUE and FALSE manifest constants, for use with BOOL data type. */ #ifndef FALSE #define FALSE 0 #endif /* !FALSE */ #ifndef TRUE #define TRUE 1 #endif /* !TRUE */ /* ========================================================================= */ /* OpenDoors complex data types and defines. */ /* ========================================================================= */ /* Millisecond time type. */ typedef DWORD tODMilliSec; /* Special value tODMilliSec value for no timeouts. */ #ifdef ODPLAT_WIN32 #define OD_NO_TIMEOUT INFINITE #else /* !ODPLAT_WIN32 */ #define OD_NO_TIMEOUT 0xffffffffL #endif /* !ODPLAT_WIN32 */ /* Multi-line editor defintions. */ /* Editor text formats. */ typedef enum { FORMAT_PARAGRAPH_BREAKS ,FORMAT_LINE_BREAKS ,FORMAT_FTSC_MESSAGE ,FORMAT_NO_WORDWRAP } tODEditTextFormat; /* Menu callback function return values. */ typedef enum { EDIT_MENU_DO_NOTHING ,EDIT_MENU_EXIT_EDITOR } tODEditMenuResult; /* Editor flags. */ #define EFLAG_NORMAL 0x00000000 /* Optional multi-line editor settings. */ typedef struct { INT nAreaLeft; INT nAreaTop; INT nAreaRight; INT nAreaBottom; tODEditTextFormat TextFormat; tODEditMenuResult (*pfMenuCallback)(void *pUnused); void * (*pfBufferRealloc)(void *pOriginalBuffer, UINT unNewSize); DWORD dwEditFlags; char *pszFinalBuffer; UINT unFinalBufferSize; } tODEditOptions; /* Editor return values. */ #define OD_MULTIEDIT_ERROR 0 #define OD_MULTIEDIT_SUCCESS 1 /* Input event information. */ /* Input event types. */ typedef enum { EVENT_CHARACTER ,EVENT_EXTENDED_KEY } tODInputEventType; /* Extended key codes. */ #define OD_KEY_F1 0x3b #define OD_KEY_F2 0x3c #define OD_KEY_F3 0x3d #define OD_KEY_F4 0x3e #define OD_KEY_F5 0x3f #define OD_KEY_F6 0x40 #define OD_KEY_F7 0x41 #define OD_KEY_F8 0x42 #define OD_KEY_F9 0x43 #define OD_KEY_F10 0x44 #define OD_KEY_UP 0x48 #define OD_KEY_DOWN 0x50 #define OD_KEY_LEFT 0x4b #define OD_KEY_RIGHT 0x4d #define OD_KEY_INSERT 0x52 #define OD_KEY_DELETE 0x53 #define OD_KEY_HOME 0x47 #define OD_KEY_END 0x4f #define OD_KEY_PGUP 0x49 #define OD_KEY_PGDN 0x51 #define OD_KEY_F11 0x85 #define OD_KEY_F12 0x86 #define OD_KEY_SHIFTTAB 0x0f /* Input event structure. */ typedef struct { tODInputEventType EventType; BOOL bFromRemote; char chKeyPress; } tODInputEvent; /* Third option (in addition to TRUE and FALSE) for tri-state options. */ #define MAYBE 2 /* od_spawnvpe() flags. */ #define P_WAIT 0 #define P_NOWAIT 1 #define CURRENT 0 #define IRET 1 /* od_edit_str() flags. */ #define EDIT_FLAG_NORMAL 0x0000 #define EDIT_FLAG_NO_REDRAW 0x0001 #define EDIT_FLAG_FIELD_MODE 0x0002 #define EDIT_FLAG_EDIT_STRING 0x0004 #define EDIT_FLAG_STRICT_INPUT 0x0008 #define EDIT_FLAG_PASSWORD_MODE 0x0010 #define EDIT_FLAG_ALLOW_CANCEL 0x0020 #define EDIT_FLAG_FILL_STRING 0x0040 #define EDIT_FLAG_AUTO_ENTER 0x0080 #define EDIT_FLAG_AUTO_DELETE 0x0100 #define EDIT_FLAG_KEEP_BLANK 0x0200 #define EDIT_FLAG_PERMALITERAL 0x0400 #define EDIT_FLAG_LEAVE_BLANK 0x0800 #define EDIT_FLAG_SHOW_SIZE 0x1000 /* od_edit_str() return values. */ #define EDIT_RETURN_ERROR 0 #define EDIT_RETURN_CANCEL 1 #define EDIT_RETURN_ACCEPT 2 #define EDIT_RETURN_PREVIOUS 3 #define EDIT_RETURN_NEXT 4 /* od_popup_menu() flag values. */ #define MENU_NORMAL 0x0000 #define MENU_ALLOW_CANCEL 0x0001 #define MENU_PULLDOWN 0x0002 #define MENU_KEEP 0x0004 #define MENU_DESTROY 0x0008 /* od_autodetect() flag values. */ #define DETECT_NORMAL 0x0000 /* od_scroll() flags. */ #define SCROLL_NORMAL 0x0000 #define SCROLL_NO_CLEAR 0x0001 /* OpenDoors status line settings */ #define STATUS_NORMAL 0 #define STATUS_NONE 8 #define STATUS_ALTERNATE_1 1 #define STATUS_ALTERNATE_2 2 #define STATUS_ALTERNATE_3 3 #define STATUS_ALTERNATE_4 4 #define STATUS_ALTERNATE_5 5 #define STATUS_ALTERNATE_6 6 #define STATUS_ALTERNATE_7 7 /* OpenDoors color definitions. */ #define D_BLACK 0 #define D_BLUE 1 #define D_GREEN 2 #define D_CYAN 3 #define D_RED 4 #define D_MAGENTA 5 #define D_BROWN 6 #define D_GREY 7 #define L_BLACK 8 #define L_BLUE 9 #define L_GREEN 10 #define L_CYAN 11 #define L_RED 12 #define L_MAGENTA 13 #define L_YELLOW 14 #define L_WHITE 15 #define B_BLACK L_BLACK #define B_BLUE L_BLUE #define B_GREEN L_GREEN #define B_CYAN L_CYAN #define B_RED L_RED #define B_MAGENTA L_MAGENTA #define B_BROWN L_YELLOW #define B_GREY L_WHITE /* Door information file formats (od_control.od_info_type). */ #define DORINFO1 0 /* DORINFO?.DEF */ #define EXITINFO 1 /* QBBS 2.6? EXITINFO.BBS & DORINFO?.DEF */ #define RA1EXITINFO 2 /* RA 1.?? EXITINFO.BBS & DORINFO?.DEF */ #define CHAINTXT 3 /* CHAIN.TXT */ #define SFDOORSDAT 4 /* SFDOORS.DAT */ #define CALLINFO 5 /* CALLINFO.BBS */ #define DOORSYS_GAP 6 /* GAP/PC-Board DOOR.SYS */ #define DOORSYS_DRWY 7 /* DoorWay DOOR.SYS */ #define QBBS275EXITINFO 8 /* QuickBBS 2.75+ EXITINFO.BBS */ #define CUSTOM 9 /* User-defined custom format */ #define DOORSYS_WILDCAT 10 /* WildCat! DOOR.SYS */ #define RA2EXITINFO 11 /* RA 2.00+ EXITINFO.BBS */ #define TRIBBSSYS 12 /* TRIBBS.SYS */ #define DOOR32SYS 13 /* DOOR32.SYS */ #define NO_DOOR_FILE 100 /* No door information file was found */ /* Error type (od_control.od_error). */ #define ERR_NONE 0 /* No error yet */ #define ERR_MEMORY 1 /* Unable to allocate enough memory */ #define ERR_NOGRAPHICS 2 /* Function requires ANSI/AVATAR/RIP mode */ #define ERR_PARAMETER 3 /* Invalid value was passed to a function */ #define ERR_FILEOPEN 4 /* Unable to open file */ #define ERR_LIMIT 5 /* An internal limit has been exceeded */ #define ERR_FILEREAD 6 /* Unable to read from file */ #define ERR_NOREMOTE 7 /* Function may not be called in local mode */ #define ERR_GENERALFAILURE 8 /* Percise cause of failure is unknown */ #define ERR_NOTHINGWAITING 9 /* A request for data when none was ready */ #define ERR_NOMATCH 10 /* No match was found */ #define ERR_UNSUPPORTED 11 /* Not supported in this version */ /* od_control.od_errorlevel indicies. */ #define ERRORLEVEL_ENABLE 0 #define ERRORLEVEL_CRITICAL 1 #define ERRORLEVEL_NOCARRIER 2 #define ERRORLEVEL_HANGUP 3 #define ERRORLEVEL_TIMEOUT 4 #define ERRORLEVEL_INACTIVITY 5 #define ERRORLEVEL_DROPTOBBS 6 #define ERRORLEVEL_NORMAL 7 /* Special od_popup_menu() return values. */ #define POPUP_ERROR -1 #define POPUP_ESCAPE 0 #define POPUP_LEFT -2 #define POPUP_RIGHT -3 /* od_get_input() flags. */ #define GETIN_NORMAL 0x0000 #define GETIN_RAW 0x0001 #define GETIN_RAWCTRL 0x0002 /* od_control.od_box_chars array indicies. */ #define BOX_UPPERLEFT 0 #define BOX_TOP 1 #define BOX_UPPERRIGHT 2 #define BOX_LEFT 3 #define BOX_LOWERLEFT 4 #define BOX_LOWERRIGHT 5 #define BOX_BOTTOM 6 #define BOX_RIGHT 7 /* od_control.od_okaytopage settings. */ #define PAGE_DISABLE 0 #define PAGE_ENABLE 1 #define PAGE_USE_HOURS 2 /* Method used for serial I/O (od_control.od_com_method). */ #define COM_FOSSIL 1 #define COM_INTERNAL 2 #define COM_WIN32 3 #define COM_DOOR32 4 #define COM_SOCKET 5 #define COM_STDIO 6 /* Flow control method (od_control.od_com_flow_control). */ #define COM_DEFAULT_FLOW 0 #define COM_RTSCTS_FLOW 1 #define COM_NO_FLOW 2 /* Optional component initialization functions. */ ODAPIDEF void ODCALL ODConfigInit(void); ODAPIDEF void ODCALL ODLogEnable(void); ODAPIDEF void ODCALL ODMPSEnable(void); /* Optional OpenDoors component settings. */ typedef void(ODFAR OD_COMPONENT)(void); #define INCLUDE_CONFIG_FILE (OD_COMPONENT *)ODConfigInit #define NO_CONFIG_FILE NULL #define INCLUDE_LOGFILE (OD_COMPONENT *)ODLogEnable #define NO_LOGFILE NULL #define INCLUDE_MPS (OD_COMPONENT *)ODMPSEnable #define NO_MPS NULL /* Built-in personality defintion functions. */ ODAPIDEF void ODCALL pdef_opendoors(BYTE btOperation); ODAPIDEF void ODCALL pdef_pcboard(BYTE btOperation); ODAPIDEF void ODCALL pdef_ra(BYTE btOperation); ODAPIDEF void ODCALL pdef_wildcat(BYTE btOperation); /* Personality proc type. */ typedef void(ODFAR OD_PERSONALITY_PROC)(BYTE); /* Personality identifiers. */ #define PER_OPENDOORS (void *)pdef_opendoors #define PER_PCBOARD (void *)pdef_pcboard #define PER_RA (void *)pdef_ra #define PER_WILDCAT (void *)pdef_wildcat /* od_control.od_disable flags. */ #define DIS_INFOFILE 0x0001 #define DIS_CARRIERDETECT 0x0002 #define DIS_TIMEOUT 0x0004 #define DIS_LOCAL_OVERRIDE 0x0008 #define DIS_BPS_SETTING 0x0010 #define DIS_LOCAL_INPUT 0x0020 #define DIS_SYSOP_KEYS 0x0040 #define DIS_DTR_DISABLE 0x0080 #define DIS_NAME_PROMPT 0x0100 /* Event status settings. */ #define ES_DELETED 0 #define ES_ENABLED 1 #define ES_DISABLED 2 /* Personality proceedure operations. */ #define PEROP_DISPLAY1 0 #define PEROP_DISPLAY2 1 #define PEROP_DISPLAY3 2 #define PEROP_DISPLAY4 3 #define PEROP_DISPLAY5 4 #define PEROP_DISPLAY6 5 #define PEROP_DISPLAY7 6 #define PEROP_DISPLAY8 7 #define PEROP_UPDATE1 10 #define PEROP_UPDATE2 11 #define PEROP_UPDATE3 12 #define PEROP_UPDATE4 13 #define PEROP_UPDATE5 14 #define PEROP_UPDATE6 15 #define PEROP_UPDATE7 16 #define PEROP_UPDATE8 17 #define PEROP_INITIALIZE 20 #define PEROP_CUSTOMKEY 21 #define PEROP_DEINITIALIZE 22 /* ========================================================================= */ /* The OpenDoors control structure (od_control) */ /* ========================================================================= */ /* Force byte alignment, if possible */ #ifdef __TURBOC__ #if(__TURBOC__ >= 0x295) #pragma option -a- #endif /* __TURBOC__ >= 0x295 */ #endif /* __TURBOC__ */ #ifdef _MSC_VER #pragma pack(1) #endif /* _MSC_VER */ typedef struct { /* Location or name of door information file (if one is to be used). */ char info_path[60]; /* Serial port settings. */ DWORD baud; DWORD od_connect_speed; INT16 od_com_address; BYTE od_com_irq; BYTE od_com_method; BYTE od_com_flow_control; WORD od_com_rx_buf; WORD od_com_tx_buf; BYTE od_com_fifo_trigger; BOOL od_com_no_fifo; BOOL od_no_fossil; BOOL od_use_socket; INT16 port; DWORD od_open_handle; /* Caller and system information. */ char system_name[40]; char sysop_name[40]; INT32 system_calls; char system_last_caller[36]; char timelog_start_date[9]; INT16 timelog_busyperhour[24]; INT16 timelog_busyperday[7]; char user_name[36]; char user_location[26]; char user_password[16]; char user_dataphone[16]; char user_homephone[16]; char user_lasttime[6]; char user_lastdate[9]; BYTE user_attribute; BYTE user_flags[4]; DWORD user_net_credit; DWORD user_pending; WORD user_messages; DWORD user_lastread; WORD user_security; DWORD user_numcalls; DWORD user_uploads; DWORD user_downloads; DWORD user_upk; DWORD user_downk; DWORD user_todayk; WORD user_time_used; WORD user_screen_length; BYTE user_last_pwdchange; BYTE user_attrib2; WORD user_group; BYTE event_status; char event_starttime[6]; BYTE event_errorlevel; BYTE event_days; BYTE event_force; char event_last_run[9]; BYTE user_netmailentered; BYTE user_echomailentered; char user_logintime[6]; char user_logindate[9]; INT16 user_timelimit; INT32 user_loginsec; INT32 user_credit; WORD user_num; INT16 user_readthru; INT16 user_numpages; INT16 user_downlimit; char user_timeofcreation[6]; char user_logonpassword[16]; BYTE user_wantchat; BYTE user_ansi; INT16 user_deducted_time; char user_menustack[50][9]; BYTE user_menustackpointer; char user_handle[36]; char user_comment[81]; char user_firstcall[9]; BYTE user_combinedrecord[200]; char user_birthday[9]; char user_subdate[9]; BYTE user_screenwidth; BYTE user_language; BYTE user_date_format; char user_forward_to[36]; BYTE user_error_free; BYTE sysop_next; BYTE user_emsi_session; char user_emsi_crtdef[41]; char user_emsi_protocols[41]; char user_emsi_capabilities[41]; char user_emsi_requests[41]; char user_emsi_software[41]; BYTE user_hold_attr1; BYTE user_hold_attr2; BYTE user_hold_len; char user_reasonforchat[78]; char user_callsign[12]; WORD user_msg_area; WORD user_file_area; char user_protocol; WORD user_file_group; BYTE user_last_birthday_check; char user_sex; DWORD user_xi_record; WORD user_msg_group; BYTE user_avatar; char user_org[51]; char user_address[3][51]; INT32 user_pwd_crc; INT32 user_logon_pwd_crc; char user_last_cost_menu[9]; WORD user_menu_cost; BYTE user_rip; BYTE user_rip_ver; BYTE user_attrib3; BOOL user_expert; char system_last_handle[36]; /* Door information file statistics. */ BYTE od_info_type; BYTE od_extended_info; WORD od_node; BYTE od_ra_info; /* Current program settings. */ BOOL od_always_clear; BOOL od_force_local; BOOL od_chat_active; BOOL od_current_statusline; INT16 od_error; BYTE od_last_input; BOOL od_logfile_disable; char od_logfile_name[80]; WORD od_maxtime; INT16 od_maxtime_deduction; BOOL od_okaytopage; INT16 od_pagestartmin; INT16 od_pageendmin; BOOL od_page_pausing; INT16 od_page_statusline; BOOL od_user_keyboard_on; BOOL od_update_status_now; INT16 od_cur_attrib; /* OpenDoors customization settings. */ char od_box_chars[8]; char od_cfg_text[48][33]; char od_cfg_lines[25][33]; OD_COMPONENT *od_config_file; const char * od_config_filename; void (*od_config_function)(char *keyword, char *options); char od_color_char; char od_color_delimiter; char od_color_names[12][33]; BOOL od_clear_on_exit; void (*od_cmd_line_handler)(char *pszKeyword, char *pszOptions); void (*od_cmd_line_help_func)(void); void (*od_default_personality)(BYTE operation); BOOL od_default_rip_win; WORD od_disable; char od_disable_dtr[40]; BOOL od_disable_inactivity; BOOL od_emu_simulate_modem; BYTE od_errorlevel[8]; BOOL od_full_color; BOOL od_full_put; WORD od_in_buf_size; INT16 od_inactivity; INT16 od_inactive_warning; BOOL od_internal_debug; tODMilliSec od_max_key_latency; char od_list_pause; char od_list_stop; OD_COMPONENT *od_logfile; char *od_logfile_messages[14]; OD_COMPONENT *od_mps; BOOL od_nocopyright; BOOL od_noexit; BOOL od_no_ra_codes; BYTE od_page_len; char od_prog_copyright[40]; char od_prog_name[40]; char od_prog_version[40]; DWORD od_reg_key; char od_reg_name[36]; BOOL od_silent_mode; BOOL od_status_on; BOOL od_spawn_freeze_time; BOOL od_swapping_disable; BOOL od_swapping_noems; char od_swapping_path[80]; /* Custom function hooks. */ void (*od_no_file_func)(void); void (*od_before_exit)(void); void (*od_cbefore_chat)(void); void (*od_cafter_chat)(void); void (*od_cbefore_shell)(void); void (*od_cafter_shell)(void); void (*od_config_callback)(void); void (*od_help_callback)(void); void (*od_ker_exec)(void); void (*od_local_input)(INT16 key); void (*od_time_msg_func)(char *string); /* OpenDoors function key customizations. */ WORD key_chat; WORD key_dosshell; WORD key_drop2bbs; WORD key_hangup; WORD key_keyboardoff; WORD key_lesstime; WORD key_lockout; WORD key_moretime; WORD key_status[9]; WORD key_sysopnext; /* Additional function keys. */ BYTE od_num_keys; INT16 od_hot_key[16]; INT16 od_last_hot; void (*od_hot_function[16])(void); /* OpenDoors prompt customizations. */ char * od_after_chat; char * od_after_shell; char * od_before_chat; char * od_before_shell; char * od_chat_reason; char * od_continue; char od_continue_yes; char od_continue_no; char od_continue_nonstop; char * od_day[7]; char * od_hanging_up; char * od_exiting; char * od_help_text; char * od_help_text2; char * od_inactivity_timeout; char * od_inactivity_warning; char * od_month[12]; char * od_no_keyboard; char * od_no_sysop; char * od_no_response; char * od_no_time; char * od_offline; char * od_paging; char * od_press_key; char * od_sending_rip; char * od_status_line[3]; char * od_sysop_next; char * od_time_left; char * od_time_warning; char * od_want_chat; char * od_cmd_line_help; /* OpenDoors color customizations. */ BYTE od_chat_color1; BYTE od_chat_color2; BYTE od_list_comment_col; BYTE od_list_name_col; BYTE od_list_offline_col; BYTE od_list_size_col; BYTE od_list_title_col; BYTE od_local_win_col; BYTE od_continue_col; BYTE od_menu_title_col; BYTE od_menu_border_col; BYTE od_menu_text_col; BYTE od_menu_key_col; BYTE od_menu_highlight_col; BYTE od_menu_highkey_col; /* Platform-specific settings. */ #ifdef ODPLAT_WIN32 HICON od_app_icon; int od_cmd_show; #endif /* ODPLAT_WIN32 */ } tODControl; /* Restore original structure alignment, if possible. */ #ifdef _MSC_VER #pragma pack() #endif /* _MSC_VER */ /* The od_control external variable. */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ OD_API_VAR_DECL tODControl #ifndef _WIN32 /* warning C4229: anachronism used : modifiers on data are ignored */ OD_GLOBAL_CONV #endif od_control; #ifdef __cplusplus } #endif /* __cplusplus */ /* ========================================================================= */ /* OpenDoors API function prototypes. */ /* ========================================================================= */ /* Programs interface with OpenDoors by calling any of the OpenDoors API * functions. A summary of these functions appears below, followed by the * function definition prototypes. Full information on these functions is * provided by the OpenDoors manual. Functions denoted (ANS/AVT) require ANSI * or AVATAR display modes to be active. * * OUTPUT FUNCTIONS - TEXT DISPLAY * od_printf() - Performs formatted output, with color settings * od_disp_str() - Displays a normal, nul-terminated string. * od_disp() - Sends chars to modem, with/without local echo * od_disp_emu() - Displays a string, translating ANSI/AVT codes * od_repeat() - Efficiently displays a character repeatedly * od_putch() - Displays a single character. * * OUTPUT FUNCTIONS - COLOUR AND CURSOR CONTROL * od_set_color() - Sets color according to fore/background values * od_set_attrib() - Sets color to specified IBM-PC attribute * od_set_cursor() - Positions cursor on screen (ANS/AVT) * od_get_cursor() - Estimates the current cursor position on screen * * OUTPUT FUNCTIONS - SCREEN MANIPULATION * od_clr_scr() - Clears the screen * od_save_screen() - Saves the contents of entire screen * od_restore_screen() - Restores the contents of entire screen * * OUTPUT FUNCTIONS - BLOCK MANIPULATION * od_clr_line() - Clears the remainder of the current line * od_gettext() - Gets the contents a block of screen (ANS/AVT) * od_puttext() - Displays block stored by gettext() (ANS/AVT) * od_scroll() - Scrolls a portion of the screen (ANS/AVT) * * OUTPUT FUNCTIONS - WINDOWS & MENUS * od_draw_box() - Draws a box on the screen (ANS/AVT) * od_window_create() - Creates a window, storing underlying (ANS/AVT) * od_window_remove() - Removes window, restoring underlying (ANS/AVT) * od_popup_menu() - Displays popup menu with "light" bar (ANS/AVT) * * OUTPUT FUNCTIONS - FILE DISPLAY * od_send_file() - Displays an ASCII/ANSI/AVATAR/RIP file * od_hotkey_menu() - Displays ASC/ANS/AVATAR/RIP menu, with hotkeys * od_list_files() - Lists files avail for download using FILES.BBS * * INPUT FUNCTIONS * od_get_answer() - Inputs a key, allowing only specified responses * od_get_key() - Inputs a key, optionally waiting for next key * od_get_input() - Obtains next input, with translation * od_input_str() - Inputs string of specified length from keyboard * od_edit_str() - Fancy formatted string input function (ANS/AVT) * od_clear_keybuffer() - Removes any waiting keys in keyboard buffer * od_multiline_edit() - Edits text that spans multiple lines (ANS/AVT) * od_key_pending() - Returns TRUE if a key is waiting to be processed * * COMMON DOOR ACTIVITY FUNCTIONS * od_page() - Allows user to page sysop * od_spawn() - Suspends OpenDoors & starts another program * od_spawnvpe() - Like od_spawn, but with more options * od_log_write() - Writes a logfile entry * od_parse_cmd_line() - Handles standard command-line parameters * * SPECIAL CONTROL FUNCTIONS * od_init() - Forces OpenDoors initialization * od_color_config() - Translates color description to color value * od_add_personality() - Adds another local interface personality * od_set_statusline() - Sets the current status line setting * od_autodetect() - Determines the remote system terminal type * od_kernel() - Call when not calling other functions * od_exit() - Ends OpenDoors program * od_carrier() - Indicates whether remote connection is present * od_set_dtr() - Raises / lowers the DTR signal to the modem * od_chat() - Manually starts chat mode * od_sleep() - Yield to other processes * od_control_get() - Returns a pointer to the od_control structure. */ ODAPIDEF BOOL ODCALL od_add_personality(const char *pszName, BYTE btOutputTop, BYTE btOutputBottom, OD_PERSONALITY_PROC *pfPerFunc); ODAPIDEF void ODCALL od_autodetect(INT nFlags); ODAPIDEF BOOL ODCALL od_carrier(void); ODAPIDEF void ODCALL od_chat(void); ODAPIDEF void ODCALL od_clear_keybuffer(void); ODAPIDEF void ODCALL od_clr_line(void); ODAPIDEF void ODCALL od_clr_scr(void); ODAPIDEF BYTE ODCALL od_color_config(char *pszColorDesc); ODAPIDEF tODControl * ODCALL od_control_get(void); ODAPIDEF void ODCALL od_disp(const char *pachBuffer, INT nSize, BOOL bLocalEcho); ODAPIDEF void ODCALL od_disp_emu(const char *pszToDisplay, BOOL bRemoteEcho); ODAPIDEF void ODCALL od_disp_str(const char *pszToDisplay); ODAPIDEF BOOL ODCALL od_draw_box(BYTE btLeft, BYTE btTop, BYTE btRight, BYTE btBottom); ODAPIDEF WORD ODCALL od_edit_str(char *pszInput, char *pszFormat, INT nRow, INT nColumn, BYTE btNormalColour, BYTE btHighlightColour, char chBlank, WORD nFlags); ODAPIDEF void ODCALL od_exit(INT nErrorLevel, BOOL bTermCall); ODAPIDEF char ODCALL od_get_answer(const char *pszOptions); ODAPIDEF void ODCALL od_get_cursor(INT *pnRow, INT *pnColumn); ODAPIDEF BOOL ODCALL od_get_input(tODInputEvent *pInputEvent, tODMilliSec TimeToWait, WORD wFlags); ODAPIDEF BOOL ODCALL od_key_pending(void); ODAPIDEF char ODCALL od_get_key(BOOL bWait); ODAPIDEF BOOL ODCALL od_gettext(INT nLeft, INT nTop, INT nRight, INT nBottom, void *pBlock); ODAPIDEF char ODCALL od_hotkey_menu(char *pszFileName, char *pszHotKeys, BOOL bWait); ODAPIDEF void ODCALL od_init(void); ODAPIDEF void ODCALL od_input_str(char *pszInput, INT nMaxLength, unsigned char chMin, unsigned char chMax); ODAPIDEF void ODCALL od_kernel(void); ODAPIDEF BOOL ODCALL od_list_files(char *pszFileSpec); ODAPIDEF BOOL ODCALL od_log_write(char *pszMessage); ODAPIDEF INT ODCALL od_multiline_edit(char *pszBufferToEdit, UINT unBufferSize, tODEditOptions *pEditOptions); ODAPIDEF void ODCALL od_page(void); #ifdef ODPLAT_WIN32 ODAPIDEF void ODCALL od_parse_cmd_line(LPSTR pszCmdLine); #else /* !ODPLAT_WIN32 */ ODAPIDEF void ODCALL od_parse_cmd_line(INT nArgCount, char *papszArguments[]); #endif /* !ODPLAT_WIN32 */ ODAPIDEF INT ODCALL od_popup_menu(char *pszTitle, char *pszText, INT nLeft, INT nTop, INT nLevel, WORD uFlags); ODAPIDEF void ODVCALL od_printf(const char *pszFormat, ...); ODAPIDEF void ODCALL od_putch(char chToDisplay); ODAPIDEF BOOL ODCALL od_puttext(INT nLeft, INT nTop, INT nRight, INT nBottom, void *pBlock); ODAPIDEF void ODCALL od_repeat(char chValue, BYTE btTimes); ODAPIDEF BOOL ODCALL od_restore_screen(void *pBuffer); ODAPIDEF BOOL ODCALL od_save_screen(void *pBuffer); ODAPIDEF BOOL ODCALL od_scroll(INT nLeft, INT nTop, INT nRight, INT nBottom, INT nDistance, WORD nFlags); ODAPIDEF BOOL ODCALL od_send_file(const char *pszFileName); ODAPIDEF BOOL ODCALL od_send_file_section(char *pszFileName, char *pszSectionName); ODAPIDEF void ODCALL od_set_attrib(INT nColour); ODAPIDEF void ODCALL od_set_color(INT nForeground, INT nBackground); ODAPIDEF void ODCALL od_set_cursor(INT nRow, INT nColumn); ODAPIDEF void ODCALL od_set_dtr(BOOL bHigh); ODAPIDEF BOOL ODCALL od_set_personality(const char *pszName); ODAPIDEF void ODCALL od_set_statusline(INT nSetting); ODAPIDEF void ODCALL od_sleep(tODMilliSec Milliseconds); ODAPIDEF BOOL ODCALL od_spawn(const char *pszCommandLine); ODAPIDEF INT16 ODCALL od_spawnvpe(INT16 nModeFlag, char *pszPath, char *papszArg[], char *papszEnv[]); ODAPIDEF void * ODCALL od_window_create(INT nLeft, INT nTop, INT nRight, INT nBottom, char *pszTitle, BYTE btBorderCol, BYTE btTitleCol, BYTE btInsideCol, INT nReserved); ODAPIDEF BOOL ODCALL od_window_remove(void *pWinInfo); /* ========================================================================= */ /* Definitions for compatibility with previous versions. */ /* ========================================================================= */ /* Alternative spelling for the word color (colour). */ #define od_chat_colour1 od_chat_color1 #define od_chat_colour2 od_chat_color2 #define od_colour_char od_color_char #define od_colour_delimiter od_color_delimiter #define od_colour_names od_color_names #define od_full_colour od_full_color #define od_colour_config od_color_config #define od_set_colour od_set_color /* Definitions for renamed od_control members and manifest constants. */ #define key_help key_status[6] #define key_nohelp key_status[0] #define user_credit user_net_credit #define caller_netmailentered user_netmailentered #define caller_echomailentered user_echomailentered #define caller_logintime user_logintime #define caller_logindate user_logindate #define caller_timelimit user_timelimit #define caller_loginsec user_loginsec #define caller_credit user_credit #define caller_userrecord user_num #define caller_readthru user_readthru #define caller_numpages user_numpages #define caller_downlimit user_downlimit #define caller_timeofcreation user_timeofcreation #define caller_logonpassword user_logonpassword #define caller_wantchat user_wantchat #define caller_ansi user_ansi #define ra_deducted_time user_deducted_time #define ra_menustack user_menustack #define ra_menustackpointer user_menustackpointer #define ra_userhandle user_handle #define ra_comment user_comment #define ra_firstcall user_firstcall #define ra_combinedrecord user_combinedrecord #define ra_birthday user_birthday #define ra_subdate user_subdate #define ra_screenwidth user_screenwidth #define ra_msg_area user_msg_area #define ra_file_area user_file_area #define ra_language user_language #define ra_date_format user_date_format #define ra_forward_to user_forward_to #define ra_error_free user_error_free #define ra_sysop_next sysop_next #define ra_emsi_session user_emsi_session #define ra_emsi_crtdef user_emsi_crtdef #define ra_emsi_protocols user_emsi_protocols #define ra_emsi_capabilities user_emsi_capabilities #define ra_emsi_requests user_emsi_requests #define ra_emsi_software user_emsi_software #define ra_hold_attr1 user_hold_attr1 #define ra_hold_attr2 user_hold_attr2 #define ra_hold_len user_hold_len #define caller_usernum user_num #define caller_callsign user_callsign #define caller_sex user_sex #define od_avatar user_avatar #define B_YELLOW L_YELLOW #define B_WHITE L_WHITE #define od_rbbs_node od_node #define STATUS_USER1 STATUS_ALTERNATE_1 #define STATUS_USER2 STATUS_ALTERNATE_2 #define STATUS_USER3 STATUS_ALTERNATE_3 #define STATUS_USER4 STATUS_ALTERNATE_4 #define STATUS_SYSTEM STATUS_ALTERNATE_5 #define STATUS_HELP STATUS_ALTERNATE_7 #define od_registered_to od_control.od_reg_name #define od_registration_key od_control.od_reg_key #define od_program_name od_control.od_prog_name #define od_log_messages od_control.od_logfile_messages #define od_config_text od_control.od_cfg_text #define od_config_lines od_control.od_cfg_lines #define od_config_colours od_control.od_colour_names #define od_config_colors od_control.od_colour_names #define config_file od_config_file #define config_filename od_config_filename #define config_function od_config_function #define default_personality od_default_personality #define logfile od_logfile #define mps od_mps #define od_kernal od_kernel /* Obsolete functions. */ #define od_init_with_config(filename,function)\ od_control.config_file=INCLUDE_CONFIG_FILE;\ od_control.config_filename=filename;\ od_control.config_function=function;\ od_init() ODAPIDEF BOOL ODCALL od_log_open(void); ODAPIDEF void ODCALL od_emulate(register char in_char); #endif /* _INC_OPENDOOR */