home *** CD-ROM | disk | FTP | other *** search
/ Beijing Paradise BBS Backup / PARADISE.ISO / software / BBSDOORW / ODOORS60.ZIP / OPENDOOR.H < prev    next >
C/C++ Source or Header  |  1996-02-27  |  40KB  |  1,006 lines

  1. /* OpenDoors 6.00
  2.  * (C) Copyright 1991 - 1996 by Brian Pirie. All Rights Reserved.
  3.  *
  4.  *
  5.  *        File: OpenDoor.h
  6.  *
  7.  * Description: C/C++ definition of the OpenDoors API. Any program source file
  8.  *              that uses OpenDoors must #include this file.
  9.  *
  10.  *   Revisions: Date          Ver   Who  Change
  11.  *              ---------------------------------------------------------------
  12.  *              Feb 27, 1996  6.00  BP   Final OpenDoors 6.00 release version.
  13.  */
  14.  
  15. /* Only parse OpenDoor.h once. */
  16. #ifndef _INC_OPENDOOR
  17. #define _INC_OPENDOOR
  18.  
  19.  
  20. /* ========================================================================= */
  21. /* Platform-specific definitions.                                            */
  22. /* ========================================================================= */
  23.  
  24. #if defined(WIN32) || defined(__WIN32__)
  25. #define ODPLAT_WIN32
  26. #undef ODPLAT_DOS
  27. #ifdef OD_WIN32_STATIC
  28. #pragma message("Compiling for Win32 static version of OpenDoors")
  29. #else /* !OD_WIN32_STATIC */
  30. #pragma message("Compiling for Win32 DLL version of OpenDoors")
  31. #define OD_DLL
  32. #endif /* !OD_WIN32_STATIC */
  33. #else /* !WIN32 */
  34. #define ODPLAT_DOS
  35. #undef ODPLAT_WIN32
  36. #pragma message("Compiling for DOS version of OpenDoors")
  37. #endif /* !WIN32 */
  38.  
  39. /* Include any other headers required by OpenDoor.h. */
  40. #ifdef ODPLAT_WIN32 
  41. #include "windows.h"
  42. #endif /* ODPLAT_WIN32 */
  43.  
  44. /* For DLL versions, definitions of function or data that is exported from */
  45. /* a module or imported into a module.                                     */
  46. #ifdef OD_DLL
  47. #ifdef _MSC_VER
  48. #define OD_EXPORT __declspec(dllexport)
  49. #else /* !_MSC_VER */
  50. #define OD_EXPORT _export
  51. #endif /* !_MSC_VER */
  52. #define OD_IMPORT DECLSPEC_IMPORT
  53. #else /* !OD_DLL */
  54. #define OD_EXPORT
  55. #define OD_IMPORT
  56. #endif /* !OD_DLL */
  57.  
  58. /* Definition of function naming convention used by OpenDoors. */
  59. #ifdef __cplusplus
  60. #define OD_NAMING_CONVENTION extern "C"
  61. #else /* !__cplusplus */
  62. #define OD_NAMING_CONVENTION
  63. #endif /* !__cplusplus */
  64.  
  65. /* Definition of function calling convention used by OpenDoors. */
  66. #ifdef ODPLAT_WIN32
  67. #define ODCALL WINAPI
  68. #define ODVCALL WINAPIV
  69. #define OD_GLOBAL_CONV WINAPI
  70. #else /* !ODPLAT_WIN32 */
  71. #define ODCALL
  72. #define ODVCALL
  73. #define OD_GLOBAL_CONV
  74. #endif /* !ODPLAT_WIN32 */
  75.  
  76. /* OpenDoors API function declaration type. */
  77. #ifdef BUILDING_OPENDOORS
  78. #define ODAPIDEF OD_NAMING_CONVENTION OD_EXPORT
  79. #else /* !BUILDING_OPENDOORS */
  80. #define ODAPIDEF OD_NAMING_CONVENTION OD_IMPORT
  81. #endif /* !BUILDING_OPENDOORS */
  82.  
  83. /* OpenDoors API global variable definition and declaration types. */
  84. #define OD_API_VAR_DEFN OD_NAMING_CONVENTION OD_EXPORT
  85.  
  86. #ifdef BUILDING_OPENDOORS
  87. #define OD_API_VAR_DECL extern OD_EXPORT
  88. #else /* !BUILDING_OPENDOORS */
  89. #define OD_API_VAR_DECL extern OD_IMPORT
  90. #endif /* !BUILDING_OPENDOORS */
  91.  
  92.  
  93. /* ========================================================================= */
  94. /* Primitive data types.                                                     */
  95. /* ========================================================================= */
  96.  
  97. /* Portable types that are the same size across all platforms */
  98. #ifndef ODPLAT_WIN32
  99. typedef unsigned char      BYTE;                        /* Unsigned, 8 bits. */
  100. typedef unsigned short     WORD;                       /* Unsigned, 16 bits. */
  101. typedef unsigned long      DWORD;                      /* Unsigned, 32 bits. */
  102. typedef char               CHAR;         /* Native character representation. */
  103. #endif /* !ODPLAT_WIN32 */
  104.  
  105. typedef signed char        INT8;                          /* Signed, 8 bits. */
  106. typedef signed short int   INT16;                        /* Signed, 16 bits. */
  107. typedef signed long int    INT32;                        /* Signed, 32 bits. */
  108.  
  109.  
  110. /* Types that vary in size depending on platform. These are guranteed to be */
  111. /* at least the given size, but may be larger if this platform can          */
  112. /* represent a larger value more efficiently (or as efficiently).           */
  113. #ifndef ODPLAT_WIN32
  114. typedef int                INT;                /* Integer, at least 16 bits. */
  115. typedef unsigned int       UINT;      /* Unsigned integer, at least 16 bits. */
  116. #ifndef BOOL
  117. typedef char               BOOL;           /* Boolean value, at least 1 bit. */
  118. #endif /* !BOOL */
  119. #endif /* !ODPLAT_WIN32 */
  120.  
  121. /* TRUE and FALSE manifest constants, for use with BOOL data type. */
  122. #ifndef FALSE
  123. #define FALSE 0
  124. #endif /* !FALSE */
  125. #ifndef TRUE
  126. #define TRUE 1
  127. #endif /* !TRUE */
  128.  
  129.  
  130. /* ========================================================================= */
  131. /* OpenDoors complex data types and defines.                                 */
  132. /* ========================================================================= */
  133.  
  134. /* Millisecond time type. */
  135. typedef DWORD tODMilliSec;
  136.  
  137. /* Special value tODMilliSec value for no timeouts. */
  138. #ifdef ODPLAT_WIN32
  139. #define OD_NO_TIMEOUT INFINITE
  140. #else /* !ODPLAT_WIN32 */
  141. #define OD_NO_TIMEOUT 0xffffffffL
  142. #endif /* !ODPLAT_WIN32 */
  143.  
  144.  
  145. /* Multi-line editor defintions. */
  146.  
  147. /* Editor text formats. */
  148. typedef enum
  149. {
  150.    FORMAT_PARAGRAPH_BREAKS,
  151.    FORMAT_LINE_BREAKS,
  152.    FORMAT_FTSC_MESSAGE,
  153.    FORMAT_NO_WORDWRAP,
  154. } tODEditTextFormat;
  155.  
  156. /* Menu callback function return values. */
  157. typedef enum
  158. {
  159.    EDIT_MENU_DO_NOTHING,
  160.    EDIT_MENU_EXIT_EDITOR,
  161. } tODEditMenuResult;
  162.  
  163. /* Editor flags. */
  164. #define EFLAG_NORMAL       0x00000000
  165.  
  166. /* Optional multi-line editor settings. */
  167. typedef struct
  168. {
  169.    INT nAreaLeft;
  170.    INT nAreaTop;
  171.    INT nAreaRight;
  172.    INT nAreaBottom;
  173.    tODEditTextFormat TextFormat;
  174.    tODEditMenuResult (*pfMenuCallback)(void *pUnused);
  175.    void * (*pfBufferRealloc)(void *pOriginalBuffer, UINT unNewSize);
  176.    DWORD dwEditFlags;
  177.    char *pszFinalBuffer;
  178.    UINT unFinalBufferSize;
  179. } tODEditOptions;
  180.  
  181. /* Editor return values. */
  182. #define OD_MULTIEDIT_ERROR          0
  183. #define OD_MULTIEDIT_SUCCESS        1
  184.  
  185.  
  186. /* Input event information. */
  187.  
  188. /* Input event types. */
  189. typedef enum
  190. {
  191.    EVENT_CHARACTER,
  192.    EVENT_EXTENDED_KEY,
  193. } tODInputEventType;
  194.  
  195. /* Extended key codes. */
  196. #define OD_KEY_F1          0x3b
  197. #define OD_KEY_F2          0x3c
  198. #define OD_KEY_F3          0x3d
  199. #define OD_KEY_F4          0x3e
  200. #define OD_KEY_F5          0x3f
  201. #define OD_KEY_F6          0x40
  202. #define OD_KEY_F7          0x41
  203. #define OD_KEY_F8          0x42
  204. #define OD_KEY_F9          0x43
  205. #define OD_KEY_F10         0x44
  206. #define OD_KEY_UP          0x48
  207. #define OD_KEY_DOWN        0x50
  208. #define OD_KEY_LEFT        0x4b
  209. #define OD_KEY_RIGHT       0x4d
  210. #define OD_KEY_INSERT      0x52
  211. #define OD_KEY_DELETE      0x53
  212. #define OD_KEY_HOME        0x47
  213. #define OD_KEY_END         0x4f
  214. #define OD_KEY_PGUP        0x49
  215. #define OD_KEY_PGDN        0x51
  216. #define OD_KEY_SHIFTTAB    0x0f
  217.  
  218. /* Input event structure. */
  219. typedef struct
  220. {
  221.    tODInputEventType EventType;
  222.    BOOL bFromRemote;
  223.    char chKeyPress;
  224. } tODInputEvent;
  225.  
  226.  
  227. /* Third option (in addition to TRUE and FALSE) for tri-state options. */
  228. #define MAYBE 2
  229.  
  230. /* od_spawnvpe() flags. */
  231. #define P_WAIT                  0
  232. #define P_NOWAIT                1
  233. #define CURRENT                 0
  234. #define IRET                    1
  235.  
  236. /* od_edit_str() flags. */
  237. #define EDIT_FLAG_NORMAL        0x0000
  238. #define EDIT_FLAG_NO_REDRAW     0x0001
  239. #define EDIT_FLAG_FIELD_MODE    0x0002
  240. #define EDIT_FLAG_EDIT_STRING   0x0004
  241. #define EDIT_FLAG_STRICT_INPUT  0x0008
  242. #define EDIT_FLAG_PASSWORD_MODE 0x0010
  243. #define EDIT_FLAG_ALLOW_CANCEL  0x0020
  244. #define EDIT_FLAG_FILL_STRING   0x0040
  245. #define EDIT_FLAG_AUTO_ENTER    0x0080
  246. #define EDIT_FLAG_AUTO_DELETE   0x0100
  247. #define EDIT_FLAG_KEEP_BLANK    0x0200
  248. #define EDIT_FLAG_PERMALITERAL  0x0400
  249. #define EDIT_FLAG_LEAVE_BLANK   0x0800
  250. #define EDIT_FLAG_SHOW_SIZE     0x1000
  251.  
  252. /* od_edit_str() return values. */
  253. #define EDIT_RETURN_ERROR       0
  254. #define EDIT_RETURN_CANCEL      1
  255. #define EDIT_RETURN_ACCEPT      2
  256. #define EDIT_RETURN_PREVIOUS    3
  257. #define EDIT_RETURN_NEXT        4
  258.  
  259. /* od_popup_menu() flag values. */
  260. #define MENU_NORMAL             0x0000
  261. #define MENU_ALLOW_CANCEL       0x0001
  262. #define MENU_PULLDOWN           0x0002
  263. #define MENU_KEEP               0x0004
  264. #define MENU_DESTROY            0x0008
  265.  
  266. /* od_autodetect() flag values. */
  267. #define DETECT_NORMAL           0x0000
  268.  
  269. /* od_scroll() flags. */
  270. #define SCROLL_NORMAL           0x0000
  271. #define SCROLL_NO_CLEAR         0x0001
  272.  
  273. /* OpenDoors status line settings */
  274. #define STATUS_NORMAL           0
  275. #define STATUS_NONE             8
  276. #define STATUS_ALTERNATE_1      1
  277. #define STATUS_ALTERNATE_2      2
  278. #define STATUS_ALTERNATE_3      3
  279. #define STATUS_ALTERNATE_4      4
  280. #define STATUS_ALTERNATE_5      5
  281. #define STATUS_ALTERNATE_6      6
  282. #define STATUS_ALTERNATE_7      7
  283.  
  284. /* OpenDoors color definitions. */
  285. #define D_BLACK                 0
  286. #define D_BLUE                  1
  287. #define D_GREEN                 2
  288. #define D_CYAN                  3
  289. #define D_RED                   4
  290. #define D_MAGENTA               5
  291. #define D_BROWN                 6
  292. #define D_GREY                  7
  293. #define L_BLACK                 8
  294. #define L_BLUE                  9
  295. #define L_GREEN                 10
  296. #define L_CYAN                  11
  297. #define L_RED                   12
  298. #define L_MAGENTA               13
  299. #define L_YELLOW                14
  300. #define L_WHITE                 15
  301. #define B_BLACK                 L_BLACK
  302. #define B_BLUE                  L_BLUE
  303. #define B_GREEN                 L_GREEN
  304. #define B_CYAN                  L_CYAN
  305. #define B_RED                   L_RED
  306. #define B_MAGENTA               L_MAGENTA
  307. #define B_BROWN                 L_YELLOW
  308. #define B_GREY                  L_WHITE
  309.  
  310. /* Door information file formats (od_control.od_info_type). */
  311. #define DORINFO1              0                              /* DORINFO?.DEF */
  312. #define EXITINFO              1     /* QBBS 2.6? EXITINFO.BBS & DORINFO?.DEF */
  313. #define RA1EXITINFO           2       /* RA 1.?? EXITINFO.BBS & DORINFO?.DEF */
  314. #define CHAINTXT              3                                 /* CHAIN.TXT */
  315. #define SFDOORSDAT            4                               /* SFDOORS.DAT */
  316. #define CALLINFO              5                              /* CALLINFO.BBS */
  317. #define DOORSYS_GAP           6                     /* GAP/PC-Board DOOR.SYS */
  318. #define DOORSYS_DRWY          7                          /* DoorWay DOOR.SYS */
  319. #define QBBS275EXITINFO       8               /* QuickBBS 2.75+ EXITINFO.BBS */
  320. #define CUSTOM                9                /* User-defined custom format */
  321. #define DOORSYS_WILDCAT       10                        /* WildCat! DOOR.SYS */
  322. #define RA2EXITINFO           11                    /* RA 2.00+ EXITINFO.BBS */
  323. #define NO_DOOR_FILE          100      /* No door information file was found */
  324.  
  325. /* Error type (od_control.od_error). */
  326. #define ERR_NONE              0                              /* No error yet */
  327. #define ERR_MEMORY            1          /* Unable to allocate enough memory */
  328. #define ERR_NOGRAPHICS        2    /* Function requires ANSI/AVATAR/RIP mode */
  329. #define ERR_PARAMETER         3    /* Invalid value was passed to a function */
  330. #define ERR_FILEOPEN          4                       /* Unable to open file */
  331. #define ERR_LIMIT             5       /* An internal limit has been exceeded */
  332. #define ERR_FILEREAD          6                  /* Unable to read from file */
  333. #define ERR_NOREMOTE          7  /* Function may not be called in local mode */
  334. #define ERR_GENERALFAILURE    8       /* Percise cause of failure is unknown */
  335. #define ERR_NOTHINGWAITING    9    /* A request for data when none was ready */
  336. #define ERR_NOMATCH           10                       /* No match was found */
  337. #define ERR_UNSUPPORTED       11            /* Not supported in this version */
  338.  
  339. /* od_control.od_errorlevel indicies. */
  340. #define ERRORLEVEL_ENABLE     0
  341. #define ERRORLEVEL_CRITICAL   1
  342. #define ERRORLEVEL_NOCARRIER  2
  343. #define ERRORLEVEL_HANGUP     3
  344. #define ERRORLEVEL_TIMEOUT    4
  345. #define ERRORLEVEL_INACTIVITY 5
  346. #define ERRORLEVEL_DROPTOBBS  6
  347. #define ERRORLEVEL_NORMAL     7
  348.  
  349. /* Special od_popup_menu() return values. */
  350. #define POPUP_ERROR           -1
  351. #define POPUP_ESCAPE          0
  352. #define POPUP_LEFT            -2
  353. #define POPUP_RIGHT           -3
  354.  
  355. /* od_get_input() flags. */
  356. #define GETIN_NORMAL          0x0000
  357. #define GETIN_RAW             0x0001
  358. #define GETIN_RAWCTRL         0x0002
  359.  
  360. /* od_control.od_box_chars array indicies. */
  361. #define BOX_UPPERLEFT         0
  362. #define BOX_TOP               1
  363. #define BOX_UPPERRIGHT        2
  364. #define BOX_LEFT              3
  365. #define BOX_LOWERLEFT         4
  366. #define BOX_LOWERRIGHT        5
  367. #define BOX_BOTTOM            6
  368. #define BOX_RIGHT             7
  369.  
  370. /* od_control.od_okaytopage settings. */
  371. #define PAGE_DISABLE          0
  372. #define PAGE_ENABLE           1
  373. #define PAGE_USE_HOURS        2
  374.  
  375. /*  Method used for serial I/O (od_control.od_com_method). */
  376. #define COM_FOSSIL            1
  377. #define COM_INTERNAL          2
  378. #define COM_WIN32             3
  379.  
  380. /* Flow control method (od_control.od_com_flow_control). */
  381. #define COM_DEFAULT_FLOW      0
  382. #define COM_RTSCTS_FLOW       1
  383. #define COM_NO_FLOW           2
  384.  
  385. /* Optional component initialization functions. */
  386. ODAPIDEF void ODCALL ODConfigInit(void);
  387. ODAPIDEF void ODCALL ODLogEnable(void);
  388. ODAPIDEF void ODCALL ODMPSEnable(void);
  389.  
  390. /* Optional OpenDoors component settings. */
  391. typedef void OD_COMPONENT;
  392. #define INCLUDE_CONFIG_FILE   (void *)ODConfigInit
  393. #define NO_CONFIG_FILE        NULL
  394. #define INCLUDE_LOGFILE       (void *)ODLogEnable
  395. #define NO_LOGFILE            NULL
  396. #define INCLUDE_MPS           (void *)ODMPSEnable
  397. #define NO_MPS                NULL
  398.  
  399. /* Built-in personality defintion functions. */
  400. ODAPIDEF void ODCALL pdef_opendoors(BYTE btOperation);
  401. ODAPIDEF void ODCALL pdef_pcboard(BYTE btOperation);
  402. ODAPIDEF void ODCALL pdef_ra(BYTE btOperation);
  403. ODAPIDEF void ODCALL pdef_wildcat(BYTE btOperation);
  404.  
  405. /* Personality proc type. */
  406. typedef void OD_PERSONALITY_PROC;
  407.  
  408. /* Personality identifiers. */
  409. #define PER_OPENDOORS         (void *)pdef_opendoors
  410. #define PER_PCBOARD           (void *)pdef_pcboard
  411. #define PER_RA                (void *)pdef_ra
  412. #define PER_WILDCAT           (void *)pdef_wildcat
  413.  
  414. /* od_control.od_disable flags. */
  415. #define DIS_INFOFILE          0x0001
  416. #define DIS_CARRIERDETECT     0x0002
  417. #define DIS_TIMEOUT           0x0004
  418. #define DIS_LOCAL_OVERRIDE    0x0008
  419. #define DIS_BPS_SETTING       0x0010
  420. #define DIS_LOCAL_INPUT       0x0020
  421. #define DIS_SYSOP_KEYS        0x0040
  422. #define DIS_DTR_DISABLE       0x0080
  423. #define DIS_NAME_PROMPT       0x0100
  424.  
  425. /* Event status settings. */
  426. #define ES_DELETED            0
  427. #define ES_ENABLED            1
  428. #define ES_DISABLED           2
  429.  
  430. /* Personality proceedure operations. */
  431. #define PEROP_DISPLAY1        0
  432. #define PEROP_DISPLAY2        1
  433. #define PEROP_DISPLAY3        2
  434. #define PEROP_DISPLAY4        3
  435. #define PEROP_DISPLAY5        4
  436. #define PEROP_DISPLAY6        5
  437. #define PEROP_DISPLAY7        6
  438. #define PEROP_DISPLAY8        7
  439. #define PEROP_UPDATE1         10
  440. #define PEROP_UPDATE2         11
  441. #define PEROP_UPDATE3         12
  442. #define PEROP_UPDATE4         13
  443. #define PEROP_UPDATE5         14
  444. #define PEROP_UPDATE6         15
  445. #define PEROP_UPDATE7         16
  446. #define PEROP_UPDATE8         17
  447. #define PEROP_INITIALIZE      20
  448. #define PEROP_CUSTOMKEY       21
  449. #define PEROP_DEINITIALIZE    22
  450.  
  451.  
  452. /* ========================================================================= */
  453. /* OpenDoors API function prototypes.                                        */
  454. /* ========================================================================= */
  455.  
  456. /* Programs interface with OpenDoors by calling any of the OpenDoors API
  457.  * functions. A summary of these functions appears below, followed by the
  458.  * function definition prototypes. Full information on these functions is
  459.  * provided by the OpenDoors manual. Functions denoted (ANS/AVT) require ANSI
  460.  * or AVATAR display modes to be active.
  461.  *
  462.  * OUTPUT FUNCTIONS - TEXT DISPLAY
  463.  *    od_printf()         - Performs formatted output, with colour settings
  464.  *    od_disp_str()       - Displays a normal, NULL-terminated string.
  465.  *    od_disp()           - Sends characters to modem, with/without local echo
  466.  *    od_disp_emu()       - Displays a string, interpreting ANSI/AVATAR codes
  467.  *    od_repeat()         - Efficiently displays a character repeatedly
  468.  *    od_putch()          - Displays a single character.
  469.  *
  470.  * OUTPUT FUNCTIONS - COLOUR AND CURSOR CONTROL
  471.  *    od_set_color()      - Sets colour according to fore/background values
  472.  *    od_set_attrib()     - Sets current colour to specified IBM-PC attribute
  473.  *    od_set_cursor()     - Positions cursor on screen in ANSI & AVATAR modes
  474.  *
  475.  * OUTPUT FUNCTIONS - SCREEN MANIPULATION
  476.  *    od_clr_scr()        - Clears the screen, if screen clearing enabled
  477.  *    od_save_screen()    - Saves the contents of entire screen, in any mode
  478.  *    od_restore_screen() - Restores the contents of entire screen, in any mode
  479.  *
  480.  * OUTPUT FUNCTIONS - BLOCK MANIPULATION
  481.  *    od_clr_line()       - Clears the remainder of the current line
  482.  *    od_gettext()        - Gets the contents of an area on the screen(ANS/AVT)
  483.  *    od_puttext()        - Displays block retrieved with gettext()   (ANS/AVT)
  484.  *    od_scroll()         - Scrolls a portion of the screen           (ANS/AVT)
  485.  *
  486.  * OUTPUT FUNCTIONS - WINDOWS & MENUS
  487.  *    od_draw_box()       - Draws a box on the screen                 (ANS/AVT)
  488.  *    od_window_create()  - Creates a window, storing underlying text (ANS/AVT)
  489.  *    od_window_remove()  - Removes window, restoring underlying text (ANS/AVT)
  490.  *    od_popup_menu()     - Displays popup menu with menu bar         (ANS/AVT)
  491.  *
  492.  * OUTPUT FUNCTIONS - FILE DISPLAY
  493.  *    od_send_file()      - Displays an ASCII/ANSI/AVATAR/RIP file
  494.  *    od_hotkey_menu()    - Displays ASCII/ANSI/AVATAR/RIP menu, with hotkeys
  495.  *    od_list_files()     - Lists files available for download using FILES.BBS
  496.  *
  497.  * INPUT FUNCTIONS
  498.  *    od_get_answer()     - Inputs a key, allowing only particular responses
  499.  *    od_get_key()        - Inputs a key, optionally waiting for next keypress
  500.  *    od_get_input()      - Obtains next input of any type, with translation
  501.  *    od_input_str()      - Inputs string of specified length from keyboard
  502.  *    od_edit_str()       - Fancy formatted string input function     (ANS/AVT)
  503.  *    od_clear_keybuffer()- Removes any waiting keys in keyboard input buffer
  504.  *    od_multiline_edit() - Edits text that spans multiple lines
  505.  *
  506.  * COMMON DOOR ACTIVITY FUNCTIONS
  507.  *    od_page()           - Allows user to page sysop
  508.  *    od_spawn()          - Suspends OpenDoors & starts another program
  509.  *    od_spawnvpe()       - Like od_spawn, but with more options
  510.  *    od_log_write()      - Writes a logfile entry
  511.  *    od_parse_cmd_line() - Adds support for standard command-line parameters
  512.  *
  513.  * SPECIAL CONTROL FUNCTIONS
  514.  *    od_init()           - Immediately begins door & sets up od_control struct
  515.  *    od_color_config()   - Translates colour configation line to colour value
  516.  *    od_add_personality()- Adds another personality definition
  517.  *    od_set_statusline() - Sets the current status line setting
  518.  *    od_autodetect()     - Determines the remote system terminal type
  519.  *    od_kernel()         - Call when not calling other functions for > 10 sec.
  520.  *    od_exit()           - Ends a door program and returns to BBS
  521.  *    od_carrier()        - Indicates whether remote connection is present
  522.  *    od_set_dtr()        - Raises / lowers the DTR signal to the modem
  523.  *    od_chat()           - Manually starts chat mode
  524.  *    od_sleep()          - Yield to other processes in multitasking environ
  525.  */
  526. ODAPIDEF BOOL ODCALL   od_add_personality(char *pszName, BYTE btOutputTop,
  527.                           BYTE btOutputBottom,
  528.                           OD_PERSONALITY_PROC *pfPerFunc);
  529. ODAPIDEF void ODCALL   od_autodetect(INT nFlags);
  530. ODAPIDEF BOOL ODCALL   od_carrier(void);
  531. ODAPIDEF void ODCALL   od_chat(void);
  532. ODAPIDEF void ODCALL   od_clear_keybuffer(void);
  533. ODAPIDEF void ODCALL   od_clr_line(void);
  534. ODAPIDEF void ODCALL   od_clr_scr(void);
  535. ODAPIDEF BYTE ODCALL   od_color_config(char *pszColorDesc);
  536. ODAPIDEF void ODCALL   od_disp(char *pachBuffer, INT nSize, BOOL bLocalEcho);
  537. ODAPIDEF void ODCALL   od_disp_emu(char *pszToDisplay, BOOL bRemoteEcho);
  538. ODAPIDEF void ODCALL   od_disp_str(char *pszToDisplay);
  539. ODAPIDEF BOOL ODCALL   od_draw_box(BYTE btLeft, BYTE btTop, BYTE btRight,
  540.                           BYTE btBottom);
  541. ODAPIDEF WORD ODCALL   od_edit_str(char *pszInput, char *pszFormat, INT nRow,
  542.                           INT nColumn, BYTE btNormalColour,
  543.                           BYTE btHighlightColour, char chBlank,
  544.                           WORD nFlags);
  545. ODAPIDEF void ODCALL   od_exit(INT nErrorLevel, BOOL bTermCall);
  546. ODAPIDEF char ODCALL   od_get_answer(char *pszOptions);
  547. ODAPIDEF BOOL ODCALL   od_get_input(tODInputEvent *pInputEvent,
  548.                           tODMilliSec TimeToWait, WORD wFlags);
  549. ODAPIDEF char ODCALL   od_get_key(BOOL bWait);
  550. ODAPIDEF BOOL ODCALL   od_gettext(INT nLeft, INT nTop, INT nRight,
  551.                           INT nBottom, void *pBlock);
  552. ODAPIDEF char ODCALL   od_hotkey_menu(char *pszFileName, char *pszHotKeys,
  553.                           BOOL bWait);
  554. ODAPIDEF void ODCALL   od_init(void);
  555. ODAPIDEF void ODCALL   od_input_str(char *pszInput, INT nMaxLength,
  556.                           unsigned char chMin, unsigned char chMax);
  557. ODAPIDEF void ODCALL   od_kernel(void);
  558. ODAPIDEF BOOL ODCALL   od_list_files(char *pszFileSpec);
  559. ODAPIDEF BOOL ODCALL   od_log_write(char *pszMessage);
  560. ODAPIDEF INT ODCALL    od_multiline_edit(char *pszBufferToEdit,
  561.                           UINT unBufferSize, tODEditOptions *pEditOptions);
  562. ODAPIDEF void ODCALL   od_page(void);
  563. #ifdef ODPLAT_WIN32
  564. ODAPIDEF void ODCALL   od_parse_cmd_line(LPSTR pszCmdLine);
  565. #else /* !ODPLAT_WIN32 */
  566. ODAPIDEF void ODCALL   od_parse_cmd_line(INT nArgCount,
  567.                           char *papszArguments[]);
  568. #endif /* !ODPLAT_WIN32 */
  569. ODAPIDEF INT ODCALL    od_popup_menu(char *pszTitle, char *pszText,
  570.                           INT nLeft, INT nTop, INT nLevel, WORD uFlags);
  571. ODAPIDEF void ODVCALL  od_printf(char *pszFormat, ...);
  572. ODAPIDEF void ODCALL   od_putch(char chToDisplay);
  573. ODAPIDEF BOOL ODCALL   od_puttext(INT nLeft, INT nTop, INT nRight,
  574.                           INT nBottom, void *pBlock);
  575. ODAPIDEF void ODCALL   od_repeat(char chValue, BYTE btTimes);
  576. ODAPIDEF BOOL ODCALL   od_restore_screen(void *pBuffer);
  577. ODAPIDEF BOOL ODCALL   od_save_screen(void *pBuffer);
  578. ODAPIDEF BOOL ODCALL   od_scroll(INT nLeft, INT nTop, INT nRight,
  579.                           INT nBottom, INT nDistance, WORD nFlags);
  580. ODAPIDEF BOOL ODCALL   od_send_file(char *pszFileName);
  581. ODAPIDEF void ODCALL   od_set_attrib(INT nColour);
  582. ODAPIDEF void ODCALL   od_set_color(INT nForeground, INT nBackground);
  583. ODAPIDEF void ODCALL   od_set_cursor(INT nRow, INT nColumn);
  584. ODAPIDEF void ODCALL   od_set_dtr(BOOL bHigh);
  585. ODAPIDEF BOOL ODCALL   od_set_personality(char *pszName);
  586. ODAPIDEF void ODCALL   od_set_statusline(INT nSetting);
  587. ODAPIDEF void ODCALL   od_sleep(tODMilliSec Milliseconds);
  588. ODAPIDEF BOOL ODCALL   od_spawn(char *pszCommandLine);
  589. ODAPIDEF INT16 ODCALL  od_spawnvpe(INT16 nModeFlag, char *pszPath,
  590.                           char *papszArg[], char *papszEnv[]);
  591. ODAPIDEF void * ODCALL od_window_create(INT nLeft, INT nTop, INT nRight,
  592.                           INT nBottom, char *pszTitle, BYTE btBorderCol,
  593.                           BYTE btTitleCol, BYTE btInsideCol, INT nReserved);
  594. ODAPIDEF BOOL ODCALL   od_window_remove(void *pWinInfo);
  595.  
  596.  
  597. /* ========================================================================= */
  598. /* The OpenDoors control structure (od_control)                              */
  599. /* ========================================================================= */
  600.  
  601. /* Force byte alignment, if possible */
  602. #ifdef __TURBOC__
  603. #if(__TURBOC__ >= 0x295)
  604. #pragma option -a-
  605. #endif /* __TURBOC__ >= 0x295 */
  606. #endif /* __TURBOC__ */
  607. #ifdef _MSC_VER
  608. #pragma pack(1)
  609. #endif /* _MSC_VER */
  610.  
  611. typedef struct
  612. {
  613.    /* Location or name of door information file (if one is to be used). */
  614.    char          info_path[60];
  615.  
  616.    /* Serial port settings. */
  617.    DWORD         baud;
  618.    DWORD         od_connect_speed;
  619.    INT16         od_com_address;
  620.    BYTE          od_com_irq;
  621.    BYTE          od_com_method;
  622.    BYTE          od_com_flow_control;
  623.    WORD          od_com_rx_buf;
  624.    WORD          od_com_tx_buf;
  625.    BYTE          od_com_fifo_trigger;
  626.    BOOL          od_com_no_fifo;
  627.    BOOL          od_no_fossil;
  628.    INT           port;
  629.    DWORD         od_open_handle;
  630.  
  631.    /* Caller and system information. */
  632.    char          system_name[40];
  633.    char          sysop_name[40];
  634.    INT32         system_calls;
  635.    char          system_last_caller[36];
  636.    char          timelog_start_date[9];
  637.    INT16         timelog_busyperhour[24];
  638.    INT16         timelog_busyperday[7];
  639.  
  640.    char          user_name[36];
  641.    char          user_location[26];
  642.    char          user_password[16];
  643.    char          user_dataphone[16];
  644.    char          user_homephone[16];
  645.    char          user_lasttime[6];
  646.    char          user_lastdate[9];
  647.    BYTE          user_attribute;
  648.    BYTE          user_flags[4];
  649.    DWORD         user_net_credit;
  650.    DWORD         user_pending;
  651.    WORD          user_messages;
  652.    DWORD         user_lastread;
  653.    WORD          user_security;
  654.    DWORD         user_numcalls;
  655.    DWORD         user_uploads;
  656.    DWORD         user_downloads;
  657.    DWORD         user_upk;
  658.    DWORD         user_downk;
  659.    DWORD         user_todayk;
  660.    WORD          user_time_used;
  661.    WORD          user_screen_length;
  662.    BYTE          user_last_pwdchange;
  663.    BYTE          user_attrib2;
  664.    WORD          user_group;
  665.  
  666.    BYTE          event_status;
  667.    char          event_starttime[6];
  668.    BYTE          event_errorlevel;
  669.    BYTE          event_days;
  670.    BYTE          event_force;
  671.    char          event_last_run[9];
  672.  
  673.    BYTE          user_netmailentered;
  674.    BYTE          user_echomailentered;
  675.    char          user_logintime[6];
  676.    char          user_logindate[9];
  677.    INT16         user_timelimit;
  678.    INT32         user_loginsec;
  679.    INT32         user_credit;
  680.    WORD          user_num;
  681.    INT16         user_readthru;
  682.    INT16         user_numpages;
  683.    INT16         user_downlimit;
  684.    char          user_timeofcreation[6];
  685.    char          user_logonpassword[16];
  686.    BYTE          user_wantchat;
  687.    BYTE          user_ansi;
  688.    INT16         user_deducted_time;
  689.    char          user_menustack[50][9];
  690.    BYTE          user_menustackpointer;
  691.    char          user_handle[36];
  692.    char          user_comment[81];
  693.    char          user_firstcall[9];
  694.    BYTE          user_combinedrecord[200];
  695.    char          user_birthday[9];
  696.    char          user_subdate[9];
  697.    BYTE          user_screenwidth;
  698.    BYTE          user_language;
  699.    BYTE          user_date_format;
  700.    char          user_forward_to[36];
  701.    BYTE          user_error_free;
  702.    BYTE          sysop_next;
  703.    BYTE          user_emsi_session;
  704.    char          user_emsi_crtdef[41];
  705.    char          user_emsi_protocols[41];
  706.    char          user_emsi_capabilities[41];
  707.    char          user_emsi_requests[41];
  708.    char          user_emsi_software[41];
  709.    BYTE          user_hold_attr1;
  710.    BYTE          user_hold_attr2;
  711.    BYTE          user_hold_len;
  712.    char          user_reasonforchat[78];
  713.    char          user_callsign[12];
  714.    WORD          user_msg_area;
  715.    WORD          user_file_area;
  716.    char          user_protocol;
  717.    WORD          user_file_group;
  718.    BYTE          user_last_birthday_check;
  719.    char          user_sex;
  720.    DWORD         user_xi_record;
  721.    WORD          user_msg_group;
  722.    BYTE          user_avatar;
  723.    char          user_org[51];
  724.    char          user_address[3][51];
  725.    INT32         user_pwd_crc;
  726.    INT32         user_logon_pwd_crc;
  727.    char          user_last_cost_menu[9];
  728.    WORD          user_menu_cost;
  729.    BYTE          user_rip;
  730.    BYTE          user_rip_ver;
  731.    BYTE          user_attrib3;
  732.    char          system_last_handle[36];
  733.  
  734.    /* Door information file statistics. */
  735.    BYTE          od_info_type;
  736.    BYTE          od_extended_info;
  737.    WORD          od_node;
  738.    BYTE          od_ra_info;
  739.  
  740.    /* Current program settings. */
  741.    BOOL          od_always_clear;
  742.    BOOL          od_force_local;
  743.    BOOL          od_chat_active;
  744.    BOOL          od_current_statusline;
  745.    INT16         od_error;
  746.    BYTE          od_last_input;
  747.    BOOL          od_logfile_disable;
  748.    char          od_logfile_name[80];
  749.    WORD          od_maxtime;
  750.    INT16         od_maxtime_deduction;
  751.    BOOL          od_okaytopage;
  752.    INT16         od_pagestartmin;
  753.    INT16         od_pageendmin;
  754.    BOOL          od_page_pausing;
  755.    INT16         od_page_statusline;
  756.    BOOL          od_user_keyboard_on;
  757.    BOOL          od_update_status_now;
  758.    INT16         od_cur_attrib;
  759.  
  760.    /* OpenDoors customization settings. */
  761.    char          od_box_chars[8];
  762.    char          od_cfg_text[48][33];
  763.    char          od_cfg_lines[25][33];
  764.    OD_COMPONENT  *od_config_file;
  765.    char *        od_config_filename;
  766.    void          (*od_config_function)(char *keyword, char *options);
  767.    char          od_color_char;
  768.    char          od_color_delimiter;
  769.    char          od_color_names[12][33];
  770.    BOOL          od_clear_on_exit;
  771.    void          (*od_default_personality)(BYTE operation);
  772.    BOOL          od_default_rip_win;
  773.    WORD          od_disable;
  774.    char          od_disable_dtr[40];
  775.    BOOL          od_disable_inactivity;
  776.    BOOL          od_emu_simulate_modem;
  777.    BYTE          od_errorlevel[8];
  778.    BOOL          od_full_color;
  779.    BOOL          od_full_put;
  780.    WORD          od_in_buf_size;
  781.    INT16         od_inactivity;
  782.    INT16         od_inactive_warning;
  783.    BOOL          od_internal_debug;
  784.    tODMilliSec   od_max_key_latency;
  785.    char          od_list_pause;
  786.    char          od_list_stop;
  787.    OD_COMPONENT  *od_logfile;
  788.    char          *od_logfile_messages[14];
  789.    OD_COMPONENT  *od_mps;
  790.    BOOL          od_nocopyright;
  791.    BOOL          od_noexit;
  792.    BOOL          od_no_ra_codes;
  793.    BYTE          od_page_len;
  794.    char          od_prog_copyright[40];
  795.    char          od_prog_name[40];
  796.    char          od_prog_version[40];
  797.    DWORD         od_reg_key;
  798.    char          od_reg_name[36];
  799.    BOOL          od_silent_mode;
  800.    BOOL          od_status_on;
  801.    BOOL          od_spawn_freeze_time;
  802.    BOOL          od_swapping_disable;
  803.    BOOL          od_swapping_noems;
  804.    char          od_swapping_path[80];
  805.  
  806.    /* Custom function hooks. */
  807.    void          (*od_no_file_func)(void);
  808.    void          (*od_before_exit)(void);
  809.    void          (*od_cbefore_chat)(void);
  810.    void          (*od_cafter_chat)(void);
  811.    void          (*od_cbefore_shell)(void);
  812.    void          (*od_cafter_shell)(void);
  813.    void          (*od_time_msg_func)(char *string);
  814.    void          (*od_ker_exec)(void);
  815.    void          (*od_local_input)(INT16 key);
  816.  
  817.    /* OpenDoors function key customizations. */
  818.    WORD          key_chat;
  819.    WORD          key_dosshell;
  820.    WORD          key_drop2bbs;
  821.    WORD          key_hangup;
  822.    WORD          key_keyboardoff;
  823.    WORD          key_lesstime;
  824.    WORD          key_lockout;
  825.    WORD          key_moretime;
  826.    WORD          key_status[9];
  827.    WORD          key_sysopnext;
  828.  
  829.    /* Additional function keys. */
  830.    BYTE          od_num_keys;
  831.    INT16         od_hot_key[16];
  832.    INT16         od_last_hot;
  833.    void          (*od_hot_function[16])(void);
  834.  
  835.    /* OpenDoors prompt customizations. */
  836.    char *        od_after_chat;
  837.    char *        od_after_shell;
  838.    char *        od_before_chat;
  839.    char *        od_before_shell;
  840.    char *        od_chat_reason;
  841.    char *        od_continue;
  842.    char          od_continue_yes;
  843.    char          od_continue_no;
  844.    char          od_continue_nonstop;
  845.    char *        od_day[7];
  846.    char *        od_hanging_up;
  847.    char *        od_exiting;
  848.    char *        od_help_text;
  849.    char *        od_help_text2;
  850.    char *        od_inactivity_timeout;
  851.    char *        od_inactivity_warning;
  852.    char *        od_month[12];
  853.    char *        od_no_keyboard;
  854.    char *        od_no_sysop;
  855.    char *        od_no_response;
  856.    char *        od_no_time;
  857.    char *        od_offline;
  858.    char *        od_paging;
  859.    char *        od_press_key;
  860.    char *        od_sending_rip;
  861.    char *        od_status_line[3];
  862.    char *        od_sysop_next;
  863.    char *        od_time_left;
  864.    char *        od_time_warning;
  865.    char *        od_want_chat;
  866.    char *        od_cmd_line_help;
  867.  
  868.    /* OpenDoors color customizations. */
  869.    BYTE          od_chat_color1;
  870.    BYTE          od_chat_color2;
  871.    BYTE          od_list_comment_col;
  872.    BYTE          od_list_name_col;
  873.    BYTE          od_list_offline_col;
  874.    BYTE          od_list_size_col;
  875.    BYTE          od_list_title_col;
  876.    BYTE          od_continue_col;
  877.    BYTE          od_menu_title_col;
  878.    BYTE          od_menu_border_col;
  879.    BYTE          od_menu_text_col;
  880.    BYTE          od_menu_key_col;
  881.    BYTE          od_menu_highlight_col;
  882.    BYTE          od_menu_highkey_col;
  883.  
  884.    /* Platform-specific settings. */
  885. #ifdef ODPLAT_WIN32
  886.    HICON         od_app_icon;
  887.    int           od_cmd_show;
  888.    void          (*od_help_callback)(void);
  889. #endif /* ODPLAT_WIN32 */
  890. } tODControl;
  891.  
  892. /* Restore original structure alignment, if possible. */
  893. #ifdef _MSC_VER
  894. #pragma pack()
  895. #endif /* _MSC_VER */
  896.  
  897.  
  898. /* The od_control external variable. */
  899. #ifdef __cplusplus
  900. extern "C" {
  901. #endif /* __cplusplus */
  902. OD_API_VAR_DECL tODControl OD_GLOBAL_CONV od_control;
  903. #ifdef __cplusplus
  904. }
  905. #endif /* __cplusplus */
  906.  
  907.  
  908. /* ========================================================================= */
  909. /* Definitions for compatibility with previous versions.                     */
  910. /* ========================================================================= */
  911.  
  912. /* Alternative spelling for the word color (colour). */
  913. #define od_chat_colour1                od_chat_color1
  914. #define od_chat_colour2                od_chat_color2
  915. #define od_colour_char                 od_color_char
  916. #define od_colour_delimiter            od_color_delimiter
  917. #define od_colour_names                od_color_names
  918. #define od_full_colour                 od_full_color
  919. #define od_colour_config               od_color_config
  920. #define od_set_colour                  od_set_color
  921.  
  922. /* Definitions for renamed od_control members and manifest constants. */
  923. #define key_help                       key_status[6]
  924. #define key_nohelp                     key_status[0]
  925. #define user_credit                    user_net_credit
  926. #define caller_netmailentered          user_netmailentered
  927. #define caller_echomailentered         user_echomailentered
  928. #define caller_logintime               user_logintime
  929. #define caller_logindate               user_logindate
  930. #define caller_timelimit               user_timelimit
  931. #define caller_loginsec                user_loginsec
  932. #define caller_credit                  user_credit
  933. #define caller_userrecord              user_num
  934. #define caller_readthru                user_readthru
  935. #define caller_numpages                user_numpages
  936. #define caller_downlimit               user_downlimit
  937. #define caller_timeofcreation          user_timeofcreation
  938. #define caller_logonpassword           user_logonpassword
  939. #define caller_wantchat                user_wantchat
  940. #define caller_ansi                    user_ansi
  941. #define ra_deducted_time               user_deducted_time
  942. #define ra_menustack                   user_menustack
  943. #define ra_menustackpointer            user_menustackpointer
  944. #define ra_userhandle                  user_handle
  945. #define ra_comment                     user_comment
  946. #define ra_firstcall                   user_firstcall
  947. #define ra_combinedrecord              user_combinedrecord
  948. #define ra_birthday                    user_birthday
  949. #define ra_subdate                     user_subdate
  950. #define ra_screenwidth                 user_screenwidth
  951. #define ra_msg_area                    user_msg_area
  952. #define ra_file_area                   user_file_area
  953. #define ra_language                    user_language
  954. #define ra_date_format                 user_date_format
  955. #define ra_forward_to                  user_forward_to
  956. #define ra_error_free                  user_error_free
  957. #define ra_sysop_next                  sysop_next
  958. #define ra_emsi_session                user_emsi_session
  959. #define ra_emsi_crtdef                 user_emsi_crtdef
  960. #define ra_emsi_protocols              user_emsi_protocols
  961. #define ra_emsi_capabilities           user_emsi_capabilities
  962. #define ra_emsi_requests               user_emsi_requests
  963. #define ra_emsi_software               user_emsi_software
  964. #define ra_hold_attr1                  user_hold_attr1
  965. #define ra_hold_attr2                  user_hold_attr2
  966. #define ra_hold_len                    user_hold_len
  967. #define caller_usernum                 user_num
  968. #define caller_callsign                user_callsign
  969. #define caller_sex                     user_sex
  970. #define od_avatar                      user_avatar
  971. #define B_YELLOW                       L_YELLOW
  972. #define B_WHITE                        L_WHITE
  973. #define od_rbbs_node                   od_node
  974. #define STATUS_USER1                   STATUS_ALTERNATE_1
  975. #define STATUS_USER2                   STATUS_ALTERNATE_2
  976. #define STATUS_USER3                   STATUS_ALTERNATE_3
  977. #define STATUS_USER4                   STATUS_ALTERNATE_4
  978. #define STATUS_SYSTEM                  STATUS_ALTERNATE_5
  979. #define STATUS_HELP                    STATUS_ALTERNATE_7
  980. #define od_registered_to               od_control.od_reg_name
  981. #define od_registration_key            od_control.od_reg_key
  982. #define od_program_name                od_control.od_prog_name
  983. #define od_log_messages                od_control.od_logfile_messages
  984. #define od_config_text                 od_control.od_cfg_text
  985. #define od_config_lines                od_control.od_cfg_lines
  986. #define od_config_colours              od_control.od_colour_names
  987. #define od_config_colors               od_control.od_colour_names
  988. #define config_file                    od_config_file
  989. #define config_filename                od_config_filename
  990. #define config_function                od_config_function
  991. #define default_personality            od_default_personality
  992. #define logfile                        od_logfile
  993. #define mps                            od_mps
  994. #define od_kernal                      od_kernel
  995.  
  996. /* Obsolete functions. */
  997. #define od_init_with_config(filename,function)\
  998.                                   od_control.config_file=INCLUDE_CONFIG_FILE;\
  999.                                   od_control.config_filename=filename;\
  1000.                                   od_control.config_function=function;\
  1001.                                   od_init()
  1002. ODAPIDEF BOOL ODCALL                   od_log_open(void);
  1003. ODAPIDEF void ODCALL                   od_emulate(register char in_char);
  1004.  
  1005. #endif /* _INC_OPENDOOR */
  1006.