718 lines
19 KiB
C++
718 lines
19 KiB
C++
#ifndef PROBOARD_HPP
|
|
#define PROBOARD_HPP
|
|
|
|
#include <tslib.hpp>
|
|
#include <time.h>
|
|
|
|
#define VERSION "2.22b"
|
|
#define TEARVERSION "2.22b"
|
|
#define PID_STRING "ProBoard 2.22b"
|
|
#define PID_STRING_HUDSON PID_STRING " H"
|
|
#define PID_STRING_SQUISH PID_STRING " S"
|
|
#define PID_STRING_JAM PID_STRING " J"
|
|
#define PORT_VALUE 0
|
|
|
|
#define MAX_UNREG_NODES 255
|
|
#define MAX_UNREG_USERS 100000
|
|
|
|
#define VER_NUM 222
|
|
|
|
const word VER_WORD = 0x0220;
|
|
const word VER_BETA = 0xFFFF; // 0000-EFFF = beta
|
|
// F000-FEEE = gamma
|
|
// FFFF = release
|
|
|
|
|
|
//--------------------------------------------
|
|
// Color of the status bar on the main console
|
|
//--------------------------------------------
|
|
|
|
#define BAR_COLOR 0x4E
|
|
|
|
|
|
#include <pb_lib.hpp>
|
|
|
|
#ifndef MSGAPI
|
|
class MSG;
|
|
#endif
|
|
|
|
#ifdef Use_MsgBase
|
|
#include "msgbase.hpp"
|
|
#else
|
|
class Message;
|
|
class MsgBase;
|
|
class MsgBaseList;
|
|
class SquishMsgBase;
|
|
class HudsonMsgBase;
|
|
class JamMsgBase;
|
|
#endif
|
|
|
|
extern String S_PRESS_ENTER_TO_CONTINUE;
|
|
|
|
const int MAX_PEX_HANDLERS = 100;
|
|
|
|
const int BUFSIZE_FAST = 2048;
|
|
const int BUFSIZE_SLOW = 512;
|
|
|
|
#ifdef RELEASE
|
|
inline void SCRAMBLE()
|
|
{
|
|
*((dword _far *)12) = *((dword _far *)0x46C);
|
|
}
|
|
#else
|
|
#define SCRAMBLE() ;
|
|
#endif
|
|
|
|
/*
|
|
struct User : _User
|
|
{
|
|
int Read(int rec); // Read record from recnr 'rec'
|
|
int Write(int rec); // Write record to recnr 'rec' (-1 = add)
|
|
int Find(char *username); // Find user with name 'username'
|
|
int FindAlias(char *alias); // Find user with alias 'alias'
|
|
void list(char *); // Generate user list
|
|
void gentops(); // Generate top-statistics
|
|
int FindFirstMatch(char *str,bool fuzzy);
|
|
int FindNextMatch (char *str,bool fuzzy);
|
|
};
|
|
*/
|
|
|
|
struct User : _User
|
|
{
|
|
void list(char *,bool aliases=FALSE); // Generate user list
|
|
//void gentops(); // Generate top-statistics
|
|
};
|
|
|
|
struct Config : _Config {};
|
|
struct LanguageString : _LanguageString {};
|
|
struct AreaGroup : _AreaGroup {};
|
|
|
|
struct FileArea : _FileArea
|
|
{
|
|
static File f;
|
|
static int lastAreaNum;
|
|
static FileArea *lastArea;
|
|
static int numAreas;
|
|
|
|
static void open();
|
|
public:
|
|
int areaNum;
|
|
|
|
bool read(int);
|
|
|
|
static void close();
|
|
static int highAreaNum();
|
|
};
|
|
|
|
struct timelog : _TimeLog
|
|
{
|
|
void read();
|
|
void update();
|
|
};
|
|
|
|
struct dl_today
|
|
{
|
|
int files;
|
|
int kb;
|
|
};
|
|
|
|
struct BinLog
|
|
{
|
|
Date date; // 3
|
|
Time timeIn; // 3
|
|
Time timeOut; // 3
|
|
char name[36]; // 36
|
|
char city[26]; // 26
|
|
char country[26]; // 26
|
|
long baud; // 4
|
|
word node; // 2
|
|
long kbDown; // 4
|
|
long kbUp; // 4
|
|
word yells; // 2
|
|
word level; // 2
|
|
dword uflags; // 4
|
|
char alias[36]; // 36
|
|
|
|
byte extra[45];
|
|
|
|
BinLog();
|
|
|
|
bool append();
|
|
};
|
|
|
|
struct user_online
|
|
{
|
|
char name[36];
|
|
char city[16];
|
|
unsigned baud;
|
|
int status;
|
|
byte extra[8];
|
|
|
|
void read(int = 0);
|
|
void write();
|
|
void clear();
|
|
int chatreq(int); // 0->Chat Granted 1->Timeout 2->Not Avail
|
|
int check_chat(); // 0->No (>0)->node
|
|
void setstatus(int stat,int node=0);
|
|
int getstatus(int node=0);
|
|
};
|
|
|
|
#define UO_OFFLINE -2
|
|
#define UO_BROWSING 0
|
|
#define UO_SHELLING -3
|
|
#define UO_BUSY -4
|
|
#define UO_CHATTING -1
|
|
|
|
struct limits
|
|
{
|
|
unsigned level;
|
|
int timelimit;
|
|
int daily_klimit;
|
|
int pre_download;
|
|
char id[6];
|
|
unsigned free; // Free upload in Kb.
|
|
unsigned char factor; // Percentage upload required
|
|
unsigned max_download; // Max download for this level
|
|
unsigned fallto; // Fall to level x when max. reached
|
|
int msgfactor; // # Kbytes granted per message written
|
|
int sessionlimit; // Time limit per session
|
|
byte extra[3];
|
|
};
|
|
|
|
struct topentry
|
|
{
|
|
char name[36];
|
|
dword n;
|
|
};
|
|
|
|
struct aka
|
|
{
|
|
int zone;
|
|
int net;
|
|
int node;
|
|
int point;
|
|
|
|
int read(int n);
|
|
};
|
|
|
|
|
|
class usertimer
|
|
{
|
|
time_t started;
|
|
time_t suspend_start;
|
|
int suspendedtime;
|
|
bool suspended;
|
|
int fixedtime;
|
|
time_t inactivity_start;
|
|
public:
|
|
usertimer();
|
|
void start(int minutes);
|
|
void increase();
|
|
void decrease();
|
|
void changeleft(int);
|
|
void suspend();
|
|
void restart();
|
|
int timesuspended() { return suspendedtime; }
|
|
int left();
|
|
int online();
|
|
int used();
|
|
void check();
|
|
void clearinactivity();
|
|
void checkinactivity();
|
|
};
|
|
|
|
#define READMODE_ALL 0
|
|
#define READMODE_UPFIRST 1
|
|
#define READMODE_UPALL 2
|
|
#define READMODE_DIGITS 3
|
|
#define READMODE_PWD 64
|
|
#define READMODE_NOFIELD 128
|
|
|
|
class command_stack
|
|
{
|
|
int sp;
|
|
char buf[100];
|
|
public:
|
|
command_stack() { sp=0; }
|
|
void parse(char *);
|
|
void clear() { sp=0; }
|
|
char getnext();
|
|
char pollnext();
|
|
};
|
|
|
|
struct fossilio
|
|
{
|
|
int port; // comport (0=COM1)
|
|
long baud; // baud rate
|
|
int external; // 1 if key received from com-port
|
|
int stopenabled;
|
|
bool show_local;
|
|
bool show_remote;
|
|
command_stack inputbuffer;
|
|
int (*more_func)();
|
|
|
|
byte *outputBuffer;
|
|
int bufferPtr;
|
|
|
|
void init(int port,long baud);
|
|
fossilio() { baud = 65535L; outputBuffer = NULL; }
|
|
~fossilio();
|
|
void flush();
|
|
byte readkey();
|
|
byte wait();
|
|
byte wait(char *);
|
|
void wait(char);
|
|
fossilio& operator<<(char);
|
|
fossilio& operator<<(char*);
|
|
byte send(char *str,char *hotkeys=NULL);
|
|
byte sendfile(char *filename,char *hotkeys=NULL);
|
|
void drawfield(int len);
|
|
void read(char *s,int max,byte mode=READMODE_ALL);
|
|
int read(int& i,int max=5);
|
|
int read(long&, int max=7);
|
|
void readpass(char *s);
|
|
void hangup();
|
|
int ask(int def=1);
|
|
void cooldown();
|
|
void heatup();
|
|
void color(byte);
|
|
void fullcolor(byte);
|
|
void move(int x,int y);
|
|
void clreol();
|
|
void cls();
|
|
void enablestop();
|
|
void disablestop();
|
|
void clearinput();
|
|
};
|
|
|
|
|
|
struct node_entry
|
|
{
|
|
byte type;
|
|
int zone,region,net,node;
|
|
int cost;
|
|
char name[50];
|
|
char city[50];
|
|
|
|
int read(char *);
|
|
};
|
|
|
|
struct KeyData
|
|
{
|
|
Date createDate;
|
|
Time createTime;
|
|
char createdBy[36];
|
|
char sysopName[36];
|
|
char bbsName[36];
|
|
bool alpha;
|
|
bool beta;
|
|
bool gamma;
|
|
bool distSite;
|
|
bool regSite;
|
|
bool commercial;
|
|
Date expirDate;
|
|
word expirVersion;
|
|
byte extra[2];
|
|
};
|
|
|
|
#define NODE_ZONE 1
|
|
#define NODE_REGION 2
|
|
#define NODE_HOST 3
|
|
#define NODE_HUB 4
|
|
|
|
struct event
|
|
{
|
|
int type; // Errorlevel or DOS command
|
|
int errorlevel; // Errorlevel to use (>5)
|
|
char command[80]; // DOS Command to execute
|
|
Time start; // Time of the event
|
|
int duration; // Duration of the event (min).
|
|
byte empty;
|
|
byte days; // Bits 0-6 -> days of the week
|
|
byte node; // Node number to execute the event on
|
|
byte enabled; // Enabled?
|
|
|
|
int minutesleft(); // Minutes until this event
|
|
int nextday(); // Day of this event
|
|
};
|
|
|
|
struct pvt_file
|
|
{
|
|
Date date;
|
|
char fname[13];
|
|
char username[36];
|
|
char from[36];
|
|
};
|
|
|
|
|
|
struct modem_response
|
|
{
|
|
long baud;
|
|
int port;
|
|
};
|
|
|
|
struct protocol
|
|
{
|
|
char name[50]; // Name of protocol
|
|
char key; // Hotkey for Protocol
|
|
char flags; // Protocol behavior
|
|
char logfile[60]; // Logfile from protocol
|
|
char ctlfile[60]; // Control file (redirection file)
|
|
char dlcom[126]; // Download command line
|
|
unsigned efficiency; // Throughput efficiency
|
|
char ulcom[128]; // Upload command line
|
|
char dlstring[80]; // String to place in download control file
|
|
char ulstring[80]; // String to place in upload control file
|
|
char dlkeyword[40]; // Download keyword to search for in logfile
|
|
char ulkeyword[40]; // Upload keyword to search for in logfile
|
|
int wordnr; // File name word nr after keyword (1-..)
|
|
|
|
bool read(int n);
|
|
};
|
|
|
|
#define PROT_BATCH 1
|
|
#define PROT_ENABLED 2
|
|
#define PROT_BOTH 4
|
|
#define PROT_BIM 8
|
|
#define PROT_LOCAL 16
|
|
|
|
extern byte current_color;
|
|
|
|
extern bool chatflag;
|
|
extern bool noyell_flag;
|
|
extern int num_yells;
|
|
|
|
extern bool stopped;
|
|
|
|
extern char user_firstname[];
|
|
extern char mypath[];
|
|
extern char syspath[];
|
|
extern char curmenu[];
|
|
extern char page_reason[];
|
|
|
|
extern bool menuchanged;
|
|
extern bool updatemenu;
|
|
|
|
extern long totalcalls;
|
|
extern bool password_ok;
|
|
extern int num_users;
|
|
extern int time_limit;
|
|
extern int event_due;
|
|
extern int time_removed;
|
|
extern int download_limit;
|
|
extern int download_delay;
|
|
extern word free_download;
|
|
extern word upload_needed;
|
|
extern int node_number;
|
|
extern bool desqview;
|
|
extern int num_limits;
|
|
extern int returnvalue;
|
|
extern bool quiet;
|
|
extern bool net_entered,echo_entered;
|
|
extern bool registered;
|
|
extern word max_node_count;
|
|
extern int display_mode;
|
|
extern bool ega_43;
|
|
extern bool use_ems;
|
|
extern byte org_videomode;
|
|
extern word org_numlines;
|
|
extern bool ignore_carrier;
|
|
extern bool reliable;
|
|
extern bool fatal;
|
|
extern bool no_hangup;
|
|
extern word min_level;
|
|
extern bool rip_detected;
|
|
extern bool sysop_next;
|
|
extern int rip_screenlines;
|
|
extern int pastFirstUse;
|
|
extern bool newFilesChecked;
|
|
|
|
extern User user;
|
|
extern int user_recnr;
|
|
extern Config far cfg;
|
|
extern limits limit[];
|
|
extern command_stack comstack;
|
|
extern KeyData regis;
|
|
extern fossilio io;
|
|
extern event nextevent;
|
|
|
|
extern LanguageFile pb_curlang;
|
|
extern LanguageString *pb_lang;
|
|
extern int pb_num_lang;
|
|
|
|
extern BinLog lastcaller;
|
|
|
|
#ifdef Use_TagList
|
|
extern LinkedList<FilesIdx> taglist;
|
|
#endif
|
|
|
|
struct PEXhandle
|
|
{
|
|
void *func;
|
|
unsigned ds;
|
|
};
|
|
|
|
//extern PEXhandle pex_handlers[];
|
|
|
|
extern "C" int CallPEX(PEXhandle * ...);
|
|
//extern "C" void add_fhandles();
|
|
|
|
#ifdef Use_Handlers
|
|
extern LinkedList<PEXhandle> sysopkey_handlers;
|
|
extern LinkedList<PEXhandle> hangup_handlers;
|
|
#endif
|
|
|
|
/*
|
|
#define PEX_IO_INIT (&pex_handlers[0])
|
|
#define PEX_IO_STATUS (&pex_handlers[1])
|
|
#define PEX_IO_HANGUP (&pex_handlers[2])
|
|
#define PEX_IO_READBYTE (&pex_handlers[3])
|
|
#define PEX_IO_SENDBYTE (&pex_handlers[4])
|
|
#define PEX_IO_SENDBLOCK (&pex_handlers[5])
|
|
#define PEX_SYSOPKEY (&pex_handlers[6])
|
|
#define PEX_HANGUP (&pex_handlers[7])
|
|
*/
|
|
|
|
/*
|
|
extern
|
|
File f_users,
|
|
f_usersxi,
|
|
f_usersidx,
|
|
f_userspb;
|
|
*/
|
|
|
|
extern char *noregmsg;
|
|
|
|
extern Date login_date;
|
|
extern Time login_time;
|
|
|
|
void chat();
|
|
void LOG(char * ...);
|
|
void LOG(int level, char * ...);
|
|
void fatalerror(char *s);
|
|
void file_error(int fn , int errno = 0); // <0 -> Return, >0 -> Exit
|
|
void file_error (char *fn , int errno = 0);
|
|
void file_warning(char *fn , int errno = 0);
|
|
int login();
|
|
void menu_processor();
|
|
|
|
void shell (char * = NULL), combined_clear (char * = NULL),
|
|
showansasc (char * = NULL), clearmarked (char * = NULL),
|
|
pagesysop (char * = NULL), qscan_msg (char * = NULL),
|
|
writemsg (char * = NULL), scan_msg (char * = NULL),
|
|
readmsg (char * = NULL), usage_graph (char * ),
|
|
city_change (char * = NULL), days_graph (char * ),
|
|
change_state (char * = NULL), weeks_graph (char * ),
|
|
password_change (char * = NULL), version_info (char * = NULL),
|
|
lines_change (char * = NULL), raw_dir (char * = NULL),
|
|
ansi_toggle (char * = NULL), list_files (char * = NULL),
|
|
cls_toggle (char * = NULL), new_files (char * = NULL),
|
|
pause_toggle (char * = NULL), keyword_search (char * = NULL),
|
|
set_filearea (char * = NULL), filename_search (char * = NULL),
|
|
fsed_toggle (char * = NULL), download (char * = NULL),
|
|
hotkey_toggle (char * = NULL), upload (char * = NULL),
|
|
user_list (char * = NULL), view_named_file (char * = NULL),
|
|
questionnaire (char * = NULL), view_file (char * = NULL),
|
|
mailcheck (char * = NULL), view_file_wait (char * = NULL),
|
|
list_archive (char * = NULL), lastcallers (char * = NULL),
|
|
time_stat (char * = NULL), logentry (char * = NULL),
|
|
combined_select (char * = NULL), logoff (char * = NULL),
|
|
change_access (char * = NULL), view_gif (char * = NULL),
|
|
tops (char * = NULL), ibm_toggle (char * = NULL),
|
|
show_users_online (char * = NULL), phone_change (char * = NULL),
|
|
multichat (char * = NULL), dataphone_change (char * = NULL),
|
|
set_msgarea (char * = NULL), handle_change (char * = NULL),
|
|
view_ans_wait (char * = NULL), usereditor (char * = NULL),
|
|
bulletin (char * = NULL), toggle_avatar (char * = NULL),
|
|
toggle_avtplus (char * = NULL), show_graph (char * ),
|
|
ripfont_change (char * = NULL), select_language (char * = NULL),
|
|
rip_toggle (char * = NULL), edit_taglist (char * = NULL),
|
|
change_dateformat (char * = NULL), change_faxphone (char * = NULL),
|
|
change_address (char * = NULL), change_country (char * = NULL),
|
|
change_default_protocol(char * = NULL),
|
|
select_msggroup (char * = NULL), select_filegroup (char * = NULL);
|
|
|
|
int run_sdkfile (char * = NULL);
|
|
char showansascrip (char *);
|
|
extern void (*menufunctions[])(char *);
|
|
|
|
void parse_date(Date& d,char *s,int format);
|
|
void multilinechat(int);
|
|
char *strstrl(char *,char *);
|
|
int check_access(unsigned,AccessFlags); // 0 -> Denied
|
|
int check_access(unsigned,AccessFlags,AccessFlags); // 0 -> Denied
|
|
int linecounter(int = -1);
|
|
void sysopkey(word);
|
|
void replymsg(Message&);
|
|
int matchstring(char *s,char *d); // 1->ok, 0->not ok
|
|
int matchstring(char *s,char *d,int l); // 1->ok, 0->not ok
|
|
int matchfile(char *search,char *file);
|
|
char *findmatch(char *,char *);
|
|
void strip_path(char *);
|
|
void strip_fname(char *);
|
|
void msged();
|
|
char showansasc(char *file,char *hotkeys);
|
|
bool show_rip( char *file , bool reset = FALSE);
|
|
|
|
void rip_send( char *s);
|
|
void rip_query( char *cmd);
|
|
void rip_reset();
|
|
void rip_textmode();
|
|
void rip_nomore();
|
|
void rip_kill_mouse_fields();
|
|
void rip_bar(int,int,int,int);
|
|
void rip_color(int);
|
|
void rip_fill_color(int,int);
|
|
void rip_send_icons();
|
|
void rip_button(int x1,int y1,int x2,int y2,int hotkey,bool def,char *icon,char *text,char *hostcmd);
|
|
void rip_start_dialog(char *prompt,int max);
|
|
void rip_end_dialog();
|
|
void rip_start_yesno_dialog( char *prompt , bool);
|
|
void rip_clear_status();
|
|
void rip_show_more();
|
|
void rip_show_more_tag();
|
|
void rip_show_enter();
|
|
|
|
#define rip_save_textwindow() rip_query("$STW$")
|
|
#define rip_restore_textwindow() rip_query("$RTW$")
|
|
#define rip_save_mouse_fields() rip_query("$SMF$")
|
|
#define rip_restore_mouse_fields() rip_query("$RMF$")
|
|
#define rip_paste_clipboard() rip_query("$PCB$")
|
|
#define rip_doorway_on() rip_query("$DWAYON$")
|
|
#define rip_doorway_off() rip_query("$DWAYOFF$")
|
|
#define rip_cursor_on() rip_query("$CON$")
|
|
#define rip_cursor_off() rip_query("$COFF$")
|
|
|
|
String meganum(word);
|
|
|
|
void readconfig();
|
|
int parse_data(char *s,String *param); // ret=number of params
|
|
void create_arealist(String param[],int numpara,BitArray& arealist,bool msgareas = FALSE);
|
|
void adjust_limits();
|
|
void deltrailspaces(char *);
|
|
int wordwrap(char *,String&,int max);
|
|
char playsong(char *name,char *keys,int length);
|
|
void toggle_userinfo();
|
|
void toggle_help();
|
|
void toggle_macrohelp();
|
|
void edit_user();
|
|
void screen_image();
|
|
void update_user_window();
|
|
void update_display();
|
|
long post_message(char *from,char *to,char *subj,int area,int pvt);
|
|
long post_netmail_message(char *from,char *to,char *subj,int area,int zone,int net,int node,int point,bool crash,bool attach,bool kill);
|
|
void write_msgtmp(char *s);
|
|
void edit_message();
|
|
void write_msginf( char *from , char *to , char *subj , long num , char *area , char *pvt);
|
|
String replace_stringvars(char *s);
|
|
void show_intro();
|
|
void check_exe(char *);
|
|
int fuzzy_search(char *,char *,int);
|
|
int intimewindow(Time t1,Time t2);
|
|
char *dos_error_message(int errno);
|
|
bool select_protocol(protocol& p , char protocol_key = '\0' , bool seldef = FALSE);
|
|
String fullcolor_string(byte color);
|
|
void remove_tag(char *name , int area);
|
|
bool is_tagged(char *name , int area);
|
|
void write_taglist();
|
|
void read_taglist();
|
|
void InputDate( Date &d,
|
|
byte iDateFormat );
|
|
|
|
void rip_text_window( int x0, int y0 , int x1 , int y1 , int font );
|
|
|
|
extern "C"
|
|
{
|
|
void set43();
|
|
void set25();
|
|
void setvideomode(unsigned);
|
|
unsigned getvideomode();
|
|
}
|
|
|
|
void exit_proboard(int level = 0);
|
|
|
|
extern char *months_short[];
|
|
extern char *months_full [];
|
|
extern char *days_short [];
|
|
extern char *days_full [];
|
|
extern char *date_formats[];
|
|
extern char *date_formats_long[];
|
|
|
|
extern usertimer timer;
|
|
|
|
extern FileName FN_BINLOG_PB,
|
|
FN_TIMELOG_PRO,
|
|
FN_ONLINE_PRO,
|
|
FN_MSGAREAS_PRO,
|
|
FN_PVTFILES_PB;
|
|
|
|
const int ERR_BINLOG_PB = 6;
|
|
const int ERR_TIMELOG_PRO = 7;
|
|
const int ERR_ONLINE_PRO = 9;
|
|
const int ERR_AKA_PRO = 10;
|
|
const int ERR_USERS_BBS = 11;
|
|
const int ERR_USERSXI_BBS = 12;
|
|
const int ERR_USERSIDX_BBS = 13;
|
|
const int ERR_USERSPB_BBS = 14;
|
|
const int ERR_LASTREAD_BBS = 15;
|
|
|
|
extern char *EMPTY_STRING;
|
|
|
|
#define COLOR_RED 1
|
|
#define COLOR_GREEN 2
|
|
#define COLOR_YELLOW 3
|
|
#define COLOR_BLUE 4
|
|
#define COLOR_MAGENTA 5
|
|
#define COLOR_CYAN 6
|
|
#define COLOR_WHITE 7
|
|
#define COLOR_BLINK 0x80
|
|
|
|
#define ERRLVL_FATALERR 1
|
|
|
|
#define READMSG_ALL 1
|
|
#define READMSG_FWD 1
|
|
#define READMSG_REV 2
|
|
#define READMSG_SEL 3
|
|
#define READMSG_SEARCH 4
|
|
#define READMSG_NEW 5
|
|
#define READMSG_INDIV 6
|
|
#define READMSG_MARKED 7
|
|
|
|
#define ANS_OK 0 // showansasc retval if ok
|
|
#define ANS_STOP 1 // showansasc retval if file stopped
|
|
#define ANS_NOFILE 2 // showansasc retval if no file
|
|
|
|
#define ansi_mode (user.uFlags & UFLAG_ANSI)
|
|
#define cls_mode (user.uFlags & UFLAG_CLEAR)
|
|
#define pause_mode (user.uFlags & UFLAG_PAUSE)
|
|
#define fsed_mode (user.uFlags & UFLAG_FSED)
|
|
#define rip_mode (rip_detected && !(user.uFlags & UFLAG_NORIP))
|
|
#define stack_mode (!(user.uFlags & UFLAG_HOTKEYS))
|
|
#define no_ibm (user.uFlags & UFLAG_NOIBM)
|
|
#define avatar (user.uFlags & UFLAG_AVATAR)
|
|
#define avtplus (user.uFlags & UFLAG_AVTPLUS)
|
|
|
|
struct DownloadFile
|
|
{
|
|
int area;
|
|
long size;
|
|
bool free;
|
|
bool copy;
|
|
String name;
|
|
};
|
|
|
|
#include "prompts.hpp"
|
|
|
|
bool ReadLanguage( char *langname );
|
|
|
|
char wait_language_hotkeys(char *hk, bool enter = TRUE);
|
|
int language_string_length( char *str );
|
|
|
|
|
|
|
|
#include "reg.hpp"
|
|
|
|
|
|
#endif
|
|
|