451 lines
13 KiB
C
451 lines
13 KiB
C
/* OpenDoors Online Software Programming Toolkit
|
|
* (C) Copyright 1991 - 1999 by Brian Pirie.
|
|
*
|
|
* 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: ODInEx.h
|
|
*
|
|
* Description: OpenDoors initialization and shutdown operations
|
|
* (od_init() and od_exit()), including drop file I/O.
|
|
*
|
|
* Revisions: Date Ver Who Change
|
|
* ---------------------------------------------------------------
|
|
* Nov 22, 1995 6.00 BP Created.
|
|
* Nov 23, 1995 6.00 BP 32-bit portability.
|
|
* Dec 03, 1995 6.00 BP Win32 port.
|
|
* Jan 19, 1996 6.00 BP Don't use atexit() under Win32.
|
|
* Jan 19, 1996 6.00 BP Make ODInitError() a shared function.
|
|
* Jan 20, 1996 6.00 BP Prompt for user name if force_local.
|
|
* Feb 02, 1996 6.00 BP Added RA 2.50 EXITINFO.BBS support.
|
|
* Feb 19, 1996 6.00 BP Changed version number to 6.00.
|
|
* Feb 20, 1996 6.00 BP Added bParsedCmdLine.
|
|
* Feb 21, 1996 6.00 BP Don't override command line options.
|
|
* Feb 21, 1996 6.00 BP Force single-byte structure alignment.
|
|
* Feb 23, 1996 6.00 BP Make DTR disable code shared.
|
|
* Mar 03, 1996 6.10 BP Begin version 6.10.
|
|
*/
|
|
|
|
#ifndef _INC_ODINEX
|
|
#define _INC_ODINEX
|
|
|
|
#include "ODPlat.h"
|
|
|
|
/* Drop file structures. */
|
|
|
|
/* 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
|
|
{
|
|
WORD baud;
|
|
DWORD num_calls;
|
|
char last_caller[36];
|
|
char sLastHandle[36]; /* New to RA 2.50 */
|
|
char extra1[92];
|
|
char start_date[9];
|
|
WORD busyperhour[24];
|
|
WORD busyperday[7];
|
|
char name[36];
|
|
char location[26];
|
|
char organisation[51];
|
|
char address[3][51];
|
|
char handle[36];
|
|
char comment[81];
|
|
DWORD password_crc;
|
|
char dataphone[16];
|
|
char homephone[16];
|
|
char lasttime[6];
|
|
char lastdate[9];
|
|
BYTE attrib;
|
|
BYTE attrib2;
|
|
char flags[4];
|
|
DWORD credit;
|
|
DWORD pending;
|
|
WORD posted;
|
|
WORD sec;
|
|
DWORD lastread;
|
|
DWORD nocalls;
|
|
DWORD ups;
|
|
DWORD downs;
|
|
DWORD upk;
|
|
DWORD downk;
|
|
DWORD todayk;
|
|
INT16 elapsed;
|
|
WORD screenlen;
|
|
char lastpwdchange;
|
|
WORD group;
|
|
WORD combinedrecord[200];
|
|
char firstcall[9];
|
|
char birthday[9];
|
|
char subdate[9];
|
|
BYTE screenwidth;
|
|
BYTE language;
|
|
BYTE dateformat;
|
|
char forwardto[36];
|
|
WORD msgarea;
|
|
WORD filearea;
|
|
BYTE default_protocol;
|
|
WORD file_group;
|
|
BYTE last_dob_check;
|
|
BYTE sex;
|
|
DWORD xirecord;
|
|
WORD msg_group;
|
|
BYTE btAttribute3; /* New to RA 2.50. */
|
|
char sPassword[16]; /* New to RA 2.50. */
|
|
BYTE extra2[31];
|
|
char status;
|
|
char starttime[6];
|
|
char errorlevel;
|
|
char days;
|
|
char forced;
|
|
char lasttimerun[9];
|
|
char netmailentered;
|
|
char echomailentered;
|
|
char logintime[6];
|
|
char logindate[9];
|
|
INT16 timelimit;
|
|
DWORD loginsec;
|
|
WORD userrecord;
|
|
WORD readthru;
|
|
WORD numberpages;
|
|
WORD downloadlimit;
|
|
char timeofcreation[6];
|
|
DWORD logonpasswordcrc;
|
|
BYTE wantchat;
|
|
INT16 deducted_time;
|
|
char menustack[50][9];
|
|
BYTE menustackpointer;
|
|
char extra3[200];
|
|
BYTE error_free;
|
|
BYTE sysop_next;
|
|
char emsi_session;
|
|
char emsi_crtdef[41];
|
|
char emsi_protocols[41];
|
|
char emsi_capabilities[41];
|
|
char emsi_requests[41];
|
|
char emsi_software[41];
|
|
BYTE hold_attr1;
|
|
BYTE hold_attr2;
|
|
BYTE hold_len;
|
|
char page_reason[81];
|
|
BYTE status_line;
|
|
char last_cost_menu[9];
|
|
WORD menu_cost_per_min;
|
|
BYTE has_avatar;
|
|
BYTE has_rip;
|
|
BYTE btRIPVersion; /* New to RA 2.50. */
|
|
BYTE btExtraSpace[85];
|
|
} tRA2ExitInfoRecord;
|
|
|
|
|
|
typedef struct
|
|
{
|
|
WORD baud;
|
|
DWORD num_calls;
|
|
char last_caller[36];
|
|
char extraspace[128];
|
|
char start_date[9];
|
|
WORD busyperhour[24];
|
|
WORD busyperday[7];
|
|
char uname[36];
|
|
char uloc[26];
|
|
char password[16];
|
|
char dataphone[13];
|
|
char homephone[13];
|
|
char lasttime[6];
|
|
char lastdate[9];
|
|
BYTE attrib;
|
|
BYTE flags[4];
|
|
WORD credit;
|
|
WORD pending;
|
|
WORD posted;
|
|
WORD lastread;
|
|
WORD sec;
|
|
WORD nocalls;
|
|
WORD ups;
|
|
WORD downs;
|
|
WORD upk;
|
|
WORD downk;
|
|
WORD todayk;
|
|
WORD elapsed;
|
|
WORD screenlen;
|
|
BYTE lastpwdchange;
|
|
BYTE attrib2;
|
|
BYTE group;
|
|
WORD xirecord;
|
|
char extra2[3];
|
|
char status;
|
|
char starttime[6];
|
|
char errorlevel;
|
|
char days;
|
|
char forced;
|
|
char lasttimerun[9];
|
|
char netmailentered;
|
|
char echomailentered;
|
|
char logintime[6];
|
|
char logindate[9];
|
|
WORD timelimit;
|
|
DWORD loginsec;
|
|
DWORD net_credit;
|
|
WORD userrecord;
|
|
WORD readthru;
|
|
WORD numberpages;
|
|
WORD downloadlimint;
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
char timeofcreation[6];
|
|
char logonpassword[16];
|
|
char wantchat;
|
|
} ra;
|
|
struct
|
|
{
|
|
char qwantchat;
|
|
char gosublevel;
|
|
char menustack[20][9];
|
|
char menu[9];
|
|
BYTE screenclear;
|
|
BYTE moreprompts;
|
|
BYTE graphicsmode;
|
|
BYTE externedit;
|
|
INT16 screenlength;
|
|
BYTE mnpconnect;
|
|
char chatreason[49];
|
|
BYTE externlogoff;
|
|
BYTE ansicapable;
|
|
BYTE ripactive;
|
|
BYTE extraspace[199];
|
|
} qbbs;
|
|
} bbs;
|
|
} tExitInfoRecord;
|
|
|
|
typedef struct
|
|
{
|
|
INT16 deducted_time;
|
|
char menustack[50][9];
|
|
char menustackpointer;
|
|
char userhandle[36];
|
|
char comment[81];
|
|
char firstcall[9];
|
|
char combinedrecord[25];
|
|
char birthday[9];
|
|
char subdate[9];
|
|
BYTE screenwidth;
|
|
BYTE msgarea;
|
|
BYTE filearea;
|
|
BYTE language;
|
|
BYTE dateformat;
|
|
char forwardto[36];
|
|
char extra_space[43];
|
|
char error_free;
|
|
char sysop_next;
|
|
char emsi_session;
|
|
char emsi_crtdef[41];
|
|
char emsi_protocols[41];
|
|
char emsi_capabilities[41];
|
|
char emsi_requests[41];
|
|
char emsi_software[41];
|
|
char hold_attr1;
|
|
char hold_attr2;
|
|
char hold_len;
|
|
char extr_space[100];
|
|
} tExtendedExitInfo;
|
|
|
|
struct _pcbsys
|
|
{
|
|
char display[2]; /* "-1" = On, " 0" = Off */
|
|
char printer[2];
|
|
char pagebell[2];
|
|
char calleralarm[2];
|
|
char sysopflag; /* ' ', 'N'=sysop next, 'X'=exit to dos */
|
|
char errorcorrection[2];
|
|
char graphicsmode; /* 'Y'=Yes, 'N'=No, '7'=7E1 */
|
|
char nodechat; /* 'A'=available, 'U'=unavailable */
|
|
char dteportspeed[5];
|
|
char connectspeed[5]; /* "Local"=local mode */
|
|
WORD recordnum;
|
|
char firstname[15];
|
|
char password[15];
|
|
INT16 logontimeval; /* minutes since midnight */
|
|
INT16 todayused; /* -ve # of minutes */
|
|
char logontime[5];
|
|
INT16 timeallowed;
|
|
WORD kallowed;
|
|
char conference;
|
|
char joined[5];
|
|
char scanned[5];
|
|
INT16 conferenceaddtime;
|
|
INT16 creditminutes;
|
|
char languageext[4];
|
|
char fullname[25];
|
|
INT16 minutesremaining;
|
|
char node; /* ' ' if no network */
|
|
char eventtime[5];
|
|
char eventactive[2];
|
|
char slideevent[2];
|
|
DWORD memmessage;
|
|
char comport; /* 0=none, 1-8 */
|
|
char reserved1[2];
|
|
char useansi; /* 1 = yes, 0 = no */
|
|
char lasteventdate[8];
|
|
WORD lasteventminute;
|
|
char dosexit;
|
|
char eventupcoming;
|
|
char stopuploads;
|
|
WORD conferencearea;
|
|
};
|
|
|
|
struct _userssyshdr
|
|
{
|
|
WORD Version; /* PCBoard version number (i.e. 145) */
|
|
DWORD RecNo; /* Record number from USER's file */
|
|
WORD SizeOfRec; /* Size of "fixed" user record */
|
|
WORD NumOfAreas; /* Number of conference areas (Main=1) */
|
|
WORD NumOfBitFields; /* Number of Bit Map fields for conferences */
|
|
WORD SizeOfBitFields; /* Size of each Bit Map field */
|
|
char AppName[15]; /* Name of the Third Party Application */
|
|
WORD AppVersion; /* Version number for the application */
|
|
WORD AppSizeOfRec; /* Size of a "fixed length" record (if any) */
|
|
WORD AppSizeOfConfRec; /* Size of each conference record (if any) */
|
|
DWORD AppRecOffset; /* Offset of AppRec into USERS.INF record */
|
|
char Updated; /* TRUE if USERS.SYS has been updated */
|
|
};
|
|
|
|
struct _pcbflags
|
|
{
|
|
int Dirty :1; /* Dirty Flag (meaning file has been updated) */
|
|
int MsgClear :1; /* User's choice for screen clear after messages */
|
|
int HasMail :1; /* Indicates if NEW mail has been left for user */
|
|
int Reserved :5;
|
|
};
|
|
|
|
struct _pcbdate
|
|
{
|
|
int Day :5; /* 5 bit integer representing the Day */
|
|
int Month :4; /* 4 bit integer representing the Month */
|
|
int Year :7; /* 7 bit integer representing the Year MINUS 80 */
|
|
};
|
|
|
|
struct _userssysrec
|
|
{
|
|
char Name[26]; /* Name (NULL terminated) */
|
|
char City[25]; /* City (NULL terminated) */
|
|
char Password[13]; /* Password (NULL terminated) */
|
|
char BusDataPhone[14]; /* Business or Data Phone (NULL terminated) */
|
|
char HomeVoicePhone[14];/* Home or Voice Phone (NULL terminated) */
|
|
WORD LastDateOn; /* Julian date for the Last Date On */
|
|
char LastTimeOn[6]; /* Last Time On (NULL Terminated) */
|
|
char ExpertMode; /* 1=Expert, 0=Novice */
|
|
char Protocol; /* Protocol (A thru Z) */
|
|
struct _pcbflags PackedFlags;
|
|
struct _pcbdate DateLastDirRead;
|
|
INT16 SecurityLevel; /* Security Level */
|
|
WORD NumTimesOn; /* Number of times the caller has connected */
|
|
char PageLen; /* Page Length when display data on the screen */
|
|
WORD NumUploads; /* Total number of FILES uploaded */
|
|
WORD NumDownloads; /* Total number of FILES downloaded */
|
|
DWORD DailyDnldBytes; /* Number of BYTES downloaded so far today */
|
|
char UserComment[31]; /* Comment field #1 (NULL terminated) */
|
|
char SysopComment[31]; /* Comment field #1 (NULL terminated) */
|
|
INT16 ElapsedTimeOn; /* Number of minutes online */
|
|
WORD RegExpDate; /* Julian date for Registration Expiration Date */
|
|
INT16 ExpSecurityLevel; /* Expired Security Level */
|
|
WORD LastConference; /* Number of the conference the caller was in */
|
|
DWORD TotDnldBytes; /* Total number of BYTES downloaded */
|
|
DWORD TotUpldBytes; /* Total number of BYTES uploaded */
|
|
char DeleteFlag; /* 1=delete this record, 0=keep */
|
|
DWORD RecNum; /* Record Number in USERS.INF file */
|
|
char Reserved[9]; /* Bytes 391-399 from the USERS file */
|
|
DWORD MsgsRead; /* Number of messages the user has read in PCB */
|
|
DWORD MsgsLeft; /* Number of messages the user has left in PCB */
|
|
};
|
|
|
|
/* Restore original structure alignment, if possible. */
|
|
#ifdef _MSC_VER
|
|
#pragma pack()
|
|
#endif /* _MSC_VER */
|
|
|
|
|
|
/* od_init() and od_exit() global helper functons. */
|
|
#ifndef ODPLAT_WIN32
|
|
void ODAtExitCallback(void);
|
|
#endif /* !ODPLAT_WIN32 */
|
|
INT ODWriteExitInfoPrimitive(FILE *pfDropFile, INT nCount);
|
|
BOOL ODReadExitInfoPrimitive(FILE *pfDropFile, INT nCount);
|
|
INT ODSearchForDropFile(char **papszFileNames, INT nNumFileNames,
|
|
char *pszFound, char *pszDirectory);
|
|
void ODInitError(char *pszErrorText);
|
|
#ifdef ODPLAT_WIN32
|
|
BOOL CALLBACK ODInitLoginDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,
|
|
LPARAM lParam);
|
|
void ODInExDisableDTR(void);
|
|
#endif /* ODPLAT_WIN32 */
|
|
|
|
|
|
/* Global variables. */
|
|
extern WORD wODNodeNumber;
|
|
extern BOOL bIsCoSysop;
|
|
extern BOOL bIsSysop;
|
|
extern char *apszDropFileInfo[25];
|
|
extern BYTE btExitReason;
|
|
extern DWORD dwForcedBPS;
|
|
extern INT nForcedPort;
|
|
extern DWORD dwFileBPS;
|
|
extern char szDropFilePath[120];
|
|
extern char szExitinfoBBSPath[120];
|
|
extern INT16 nInitialElapsed;
|
|
extern char *szOriginalDir;
|
|
extern BYTE btDoorSYSLock;
|
|
extern time_t nStartupUnixTime;
|
|
extern INT16 nInitialRemaining;
|
|
extern BOOL bSysopNameSet;
|
|
extern char szForcedSysopName[40];
|
|
extern BOOL bSystemNameSet;
|
|
extern char szForcedSystemName[40];
|
|
extern BOOL bUserFull;
|
|
extern BOOL bCalledFromConfig;
|
|
extern tRA2ExitInfoRecord *pRA2ExitInfoRecord;
|
|
extern tExitInfoRecord *pExitInfoRecord;
|
|
extern tExtendedExitInfo *pExtendedExitInfo;
|
|
extern struct _pcbsys *pPCBoardSysRecord;
|
|
extern struct _userssyshdr *pUserSysHeader;
|
|
extern struct _userssysrec *pUserSysRecord;
|
|
extern BOOL bPreOrExit;
|
|
extern BOOL bRAStatus;
|
|
extern BOOL bPromptForUserName;
|
|
extern BOOL bParsedCmdLine;
|
|
extern WORD wPreSetInfo;
|
|
#ifdef ODPLAT_WIN32
|
|
extern tODThreadHandle hFrameThread;
|
|
#endif /* ODPLAT_WIN32 */
|
|
|
|
|
|
/* wPreSetInfo flags. */
|
|
#define PRESET_BPS 0x0001
|
|
#define PRESET_PORT 0x0002
|
|
#define PRESET_REQUIRED (PRESET_BPS | PRESET_PORT)
|
|
|
|
|
|
#endif /* _INC_ODINEX */
|