//  This may look like C code, but it is really -*- C++ -*-

//  ------------------------------------------------------------------
//  The Goldware Library
//  Copyright (c) 1989-1994 by Marco Maccaferri
//  Copyright (C) 1990-1999 Odinn Sorensen
//  ------------------------------------------------------------------
//  This library is free software; you can redistribute it and/or
//  modify it under the terms of the GNU Library 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
//  Library General Public License for more details.
//
//  You should have received a copy of the GNU Library General Public
//  License along with this program; if not, write to the Free
//  Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
//  MA 02111-1307, USA
//  ------------------------------------------------------------------
//  $Id$
//  ------------------------------------------------------------------
//  LoraBBS Ver. 2.40 structures
//  ------------------------------------------------------------------

#ifndef __gs_lora240_h
#define __gs_lora240_h


//  ------------------------------------------------------------------

#if defined(GOLD_CANPACK)
#pragma pack(1)
#endif


//  ------------------------------------------------------------------

#define MAXFLAGS   4

#define SIZEOF_MSGAREA    512
#define SIZEOF_FILEAREA   640

struct _sysmsg {     /* Structure for the internal system records.
                        The files SYSMSG.DAT and SYSFILE.DAT
                        are composed by the respective portions of this
                        structure */

   char  msg_name[70];      /* Message area name */
   short msg_num;           /* Message area number */
   char  msg_path[40];      /* Message area path */
   char  origin[56];        /* Echomail origin line */
   bits  echomail  :1;      /* 1=Echomail area */
   bits  netmail   :1;      /* 1=Netmail area */
   bits  dopublic  :1;      /* 1=Public message allowed */
   bits  doprivate :1;      /* 1=Private message allowed */
   bits  anon_ok   :1;      /* 1=Use the user's handle in the from field */
   bits  no_matrix :1;      /* <reserved> (**) */
   bits  squish    :1;      /* Squish<tm> message area */
   bits  kill_unlisted :1;  /* <reserved> (**) */
   word msg_sig;           /* Message area's group */
   char  echotag[32];       /* Echotag name */
   word pip_board;         /* Pip-base board number */
   byte  quick_board;       /* QuickBBS board number */
   byte  msg_priv;          /* Minimum level to access this area */
   long  msg_flags;         /* Flags settings */
   byte  write_priv;        /* Minimum level to write messages */
   long  write_flags;       /* Flags settings */
   byte  use_alias;         /* Use alias # with this area */
   short max_msgs;          /* Maximum number of messages in this area */
   short max_age;           /* Max age of messages (days) */
   short age_rcvd;          /* Max age of received messages (days) */
   char  forward1[80];      /* Forward node list 1/3 */
   char  forward2[80];      /* Forward node list 2/3 */
   char  forward3[80];      /* Forward node list 3/3 */
   bits  msg_restricted :1; /* Access restricted to message area's group */
   bits  passthrough    :1; /* Pass-through area */
   byte  areafix;           /* Areafix access level for that area */
   char  qwk_name[14];      /* Short name used by the QWK mail packer */
   long  afx_flags;         /* Areafix flags */
   word gold_board;        /* Goldbase board number */
   char  filler1[27];
};

/* Privilege levels definitions */

#define TWIT        0x10
#define DISGRACE    0x20
#define LIMITED     0x30
#define NORMALx     0x40
#define WORTHY      0x50
#define PRIVIL      0x60
#define FAVORED     0x70
#define EXTRA       0x80
#define CLERK       0x90
#define ASSTSYSOP   0xA0
#define SYSOP       0xB0
#define HIDDEN      0xC0

#define NOCHANGE        0
#define WFC             1
#define LOGIN           2
#define BROWSING        3
#define UPLDNLD         4
#define READWRITE       5
#define DOOR            6
#define CHATTING        7
#define QUESTIONAIRE    8
#define QWKDOOR         9

struct _useron {               /* Structure for the USERON.BBS file */
  char   name[36];             /* User's name */
  short  line;                 /* Task number currently on */
  long   baud;                 /* Baud rate */
  char   city[26];             /* User's city */
  bits   donotdisturb: 1;      /* Do not disturb flag */
  bits   priv_chat   : 1;      /* <reserved> (**) */
  short  line_status;          /* User's status (numeric value) */
  short  cb_channel;           /* CB Chat System channel */
  char   status[32];           /* User's status (string) */
};

struct _lastcall {             /* Structure for the LASTCALL.BBS file */

  short line;                  /* Task number */
  char  name[36];              /* User's name */
  char  city[26];              /* User's city */
  word  baud;                  /* Baud rate */
  long  times;                 /* Times the user has called the system */
  char  logon[6];              /* Logon time HH:MM */
  char  logoff[6];             /* Logoff time HH:MM */
  long  timestamp;             /* Logout time-stamp (binary format) */
};

#define MAX_ALIAS        20
#define MAX_LANG         20

struct _alias {
  short zone;              /* Zone number */
  short net;               /* Net number */
  short node;              /* Node number */
  short point;             /* Point number */
  word  fakenet;           /* Fake net number */
  char  *domain;           /* <reserved> (**) */
};

struct class_rec {
  short priv;              /* Access level */
  short max_time;          /* Dayly time limit */
  short max_call;          /* Per call time limit */
  short max_dl;            /* Default download limit */
  short dl_300;            /* Speed specific download limit */
  short dl_1200;           /* Speed specific download limit */
  short dl_2400;           /* Speed specific download limit */
  short dl_9600;           /* Speed specific download limit */
  word  ratio;             /* Download/Upload ratio */
  word  min_baud;          /* Minimum login speed */
  word  min_file_baud;     /* Minimum file transfer speed */
  word  start_ratio;       /* Start ratio after some downloads */
};

struct _configuration {             /* Structure for the CONFIG.DAT file */

  short version;                    /* Configuration file version */

  char  sys_path[40];               /* System directory */

  char  log_name[40];               /* Log file name */
  char  log_style;                  /* Type of log: 0=Verbose, 1=Short */

  char  sched_name[40];             /* Scheduler file name */
  char  user_file[40];              /* User's file base name (w/o extension) */

  char  norm_filepath[40];          /* Unknow nodes inbound */
  char  know_filepath[40];          /* Know nodes inbound */
  char  prot_filepath[40];          /* Protected nodes inbound */
  char  outbound[40];               /* Outbound base directory */
  char  netmail_dir[40];            /* Netmail directory */
  char  bad_msgs[40];               /* Bad messages directory */
  char  dupes[40];                  /* Dupe messages directory */
  char  quick_msgpath[40];          /* QuickBBS (Hudson) message base path */
  char  pip_msgpath[40];            /* Pip-base path */
  char  ipc_path[40];               /* Temporary files storage */
  char  net_info[40];               /* Nodelist directory */
  char  glob_text_path[40];         /* Text files path */
  char  menu_path[40];              /* Menu/Languages path */
  char  flag_dir[40];               /* Activity flags directory */

  long  keycode;                    /* Registration key code (<2.33) */

  char  about[40];                  /* 'ABOUT' file to send */
  char  files[40];                  /* 'FILES' file to send */
  short norm_max_kbytes;            /* Unknow nodes f/req. kbytes limit */
  short prot_max_kbytes;            /* Protected nodes f/req. kbytes limit */
  short know_max_kbytes;            /* Know nodes f/req. kbytes limit */
  short norm_max_requests;          /* Unknow nodes f/req. files limit */
  short prot_max_requests;          /* Protected nodes f/req. files limit */
  short know_max_requests;          /* Know nodes f/req. files limit */
  char  def_pack;                   /* Default packer */

  char  enterbbs[70];               /* 'Press ESC to enter the BBS' */
  char  banner[70];                 /* Initial mailer banner */
  char  mail_only[70];              /* Mail only banner */

  short com_port;                   /* Serial port (0-based) */
  short old_speed;                  /* Obsolete */
  char  modem_busy[20];             /* Modem busy command */
  char  dial[20];                   /* Modem default dial command */
  char  init[40];                   /* Modem initialization command */
  char  term_init[40];              /* Terminal mode initialization command */

  byte mustbezero;                  /* Must be zero */

  byte echomail_exit;               /* <reserved> (**) */
  byte netmail_exit;                /* <reserved> (**) */
  byte both_exit;                   /* <reserved> (**) */

  long speed;                       /* Modem initial speed */

  byte filler[12];                  /* <reserved> (**) */

  struct _altern_dial {             /* Alternative dialing commands */
    char prefix[20];                /* Prefix command */
    char suffix[20];                /* Suffix command */
  } altdial[10];                   

  bits  lock_baud   :1;             /* 1=Lock serial port to speed baud */
  bits  ansilogon   :2;             /* 0=No ansi at logon, 1=Detect, 2=Ask, 3=Yes */
  bits  birthdate   :1;             /* 1=Ask for birthdate */
  bits  voicephone  :1;             /* 1=Ask for voice phone */
  bits  dataphone   :1;             /* 1=Ask for data phone */
  bits  emsi        :1;             /* 1=EMSI sessions enabled */
  bits  ibmset      :1;             /* 1=Ask for IBM set display */

  bits  wazoo       :1;             /* 1=WAZOO sessions enabled */
  bits  msgtrack    :1;             /* <reserved> (**) */
  bits  keeptransit :1;             /* 1=Keep in-transit netmail */
  bits  hslink      :1;             /* 1=HS-Link enabled */
  bits  puma        :1;             /* 1=Puma enabled */
  bits  secure      :1;             /* 1=Check import messages */
  bits  janus       :1;             /* 1=Janus protocol enabled */
  bits  terminal    :1;             /* 1=Null modem connections */

  bits  fillerbug   :1;             /* <reserved> (**) */
  bits  no_direct   :1;             /* 1=Use BIOS screen writes */
  bits  snooping    :1;             /* 1=Snoop user on-line */
  bits  snow_check  :1;             /* 1=CGA snow check */
  bits  unpack_norm :1;             /* <reserved> (**) */
  bits  unpack_know :1;             /* <reserved> (**) */
  bits  unpack_prot :1;             /* <reserved> (**) */

  short blank_timer;                /* Screen blanker timeout in minutes */

  struct _language {                /* Languages available for the users */
    char txt_path[30];              /* Text files directory */
    char descr[24];                 /* Description */
    char basename[10];              /* Base file name */
  } language[MAX_LANG];

  char  sysop[36];                  /* Sysop name */
  char  system_name[50];            /* System name */
  char  location[50];               /* System's location */
  char  phone[32];                  /* System's phone number */
  char  flags[50];                  /* System's flags */

  struct _alias alias[MAX_ALIAS];   /* Network addresses */

  char  newareas_create[50];        /* Nodes that can create new areas */
  char  newareas_link[50];          /* Nodes that are linked to new areas */

  short line_offset;                /* Task number */
  short min_calls;                  /* <reserved> (**) */
  short vote_limit;                 /* <reserved> (**) */
  short target_up;                  /* <reserved> (**) */
  short target_down;                /* <reserved> (**) */
  byte  vote_priv;                  /* <reserved> (**) */
  byte  max_readpriv;               /* <reserved> (**) */

  word speed_graphics;             /* Speed for ANSI/Avatar graphics */

  byte  aftercaller_exit;           /* After caller exit errorlevel */
  byte  aftermail_exit;             /* After mail exit errorlevel */
  short max_connects;               /* <reserved> (**) */
  short max_noconnects;             /* <reserved> (**) */

  byte  logon_level;                /* New users level */
  long  logon_flags;                /* New users flags */

  char  areachange_key[4];          /* Hotkeys for the change area command */
  char  dateformat[20];             /* Format of the date fields */
  char  timeformat[20];             /* Format fo the time fields */
  char  external_editor[50];        /* External BBS message editor */

  struct class_rec uclass[12];      /* Access level definitions */

  char  local_editor[50];           /* Local message editor */

  char  QWKDir[40];                 /* QWK mail packer work directory */
  char  BBSid[10];                  /* QWK board name */
  word  qwk_maxmsgs;                /* Maximum number of messages for QWK packets */

  char  galileo[30];                /* Clocksynch phone number */

  char  norm_okfile[40];            /* Unknow request list */
  char  know_okfile[40];            /* Know request list */
  char  prot_okfile[40];            /* Protected request list */

  char  reg_name[36];               /* <reserved> (**) */
  long  betakey;                    /* <unused> */

  struct _packers {                 /* Mail packers */
    char id[10];                    /* Short name */
    char packcmd[30];               /* Pack commands */
    char unpackcmd[30];             /* unpack commands */
  } packers[10];

  struct _nl {                      /* Nodelist database */
    char list_name[14];             /* Nodelist base name */
    char diff_name[14];             /* Nodediff base name */
    char arc_name[14];              /* <reserved> (**) */
  } nl[10];

  bits  ansigraphics   :2;          /* 0=No Ansi, 1=Yes, 2=Ask */
  bits  avatargraphics :2;          /* 0=No Avatar, 1=Yes, 2=Ask */
  bits  hotkeys        :2;          /* 0=No hotkeyed menu, 1=Yes, 2=Ask */
  bits  screenclears   :2;          /* 0=No screen clears, 1=Yes, 2=Ask */

  bits  autozmodem     :1;          /* Terminal mode auto zmodem download */
  bits  avatar         :1;          /* Terminal mode Avatar emulation */
  bits  moreprompt     :2;          /* 0=No more prompt, 1=Yes, 2=Ask */
  bits  mailcheck      :2;          /* 0=No mail check, 1=Yes, 2=Ask */
  bits  fullscrnedit   :2;          /* 0=No full screen editor, 1=Yes, 2=Ask */

  bits  fillerbits     :2;          /* <reserved> (**) */
  bits  ask_protocol   :1;          /* 1=Ask default protocol */
  bits  ask_packer     :1;          /* 1=Ask default packer */
  bits  put_uploader   :1;          /* 1=Put uploader name in files.bbs */
  bits  keep_dl_count  :1;          /* 1=Keep count of download times */
  bits  use_areasbbs   :1;          /* 1=Use the areas.bbs file */
  bits  write_areasbbs :1;          /* 1=Keep the areas.bbs file up to date */

  short rookie_calls;               /* Number of calls for new users to be a rookie */

  char  pre_import[40];             /* Pre import batch */
  char  after_import[40];           /* After import batch */
  char  pre_export[40];             /* Pre export batch */
  char  after_export[40];           /* After export batch */

  byte  emulation;                  /* <reserved> (**) */
  char  dl_path[40];                /* Terminal emulator download path */
  char  ul_path[40];                /* terminal emulator upload path */

  bits  manual_answer  :1;          /* Manually answers phone */
  bits  limited_hours  :1;          /* Answer only at certain hours */
  bits  solar          :1;          /* <reserved> (**) */
  bits  areafix        :1;          /* 1=Use internal areafix */
  bits  doflagfile     :1;          /* 1=Log semaphores creation/deletion */
  bits  multitask      :1;          /* 1=Multitasking environment */
  bits  ask_alias      :1;          /* 1=Ask for an alias name */
  bits  random_birth   :1;          /* 1=Random birthdate check */

  short start_time;                 /* Answer start time in minutes */
  short end_time;                   /* Answer end time in minutes */

  char  boxpath[40];                /* User's filebox base directory */
  char  dial_suffix[20];            /* Dialing suffix command */

  char  galileo_dial[40];           /* Clocksynch dialing command */
  char  galileo_suffix[40];         /* Clocksynch dialing suffix command */
  char  galileo_init[40];           /* Clocksynch initialization command */

  char  areafix_help[40];           /* Areafix's help file name */
  char  alert_nodes[50];            /* Nodes that receives a copy of all areafix response messages */

  char  automaint[40];              /* Batch to execute once a day */

  byte  min_login_level;            /* Minimum login level */
  long  min_login_flags;            /* Minimul login flags */
  byte  min_login_age;              /* Minimul login age */

  char  resync_nodes[50];           /* Nodes to resynch the clock with */
  char  bbs_batch[40];              /* External BBS batch file */
  byte  altx_errorlevel;            /* ALT-X command errorlevel */

  char  fax_response[20];           /* FAX response */
  byte  fax_errorlevel;             /* Fax exit errorlevel */

  char  dl_counter_limits[4];       /* Download counter delimiters */

  char  areas_bbs[40];              /* AREAS.BBS path and file name */
  byte  afx_remote_maint;           /* Areafix level for %FROM command */
  byte  afx_change_tag;             /* Areafix level for #<old>:<new> command */

  bits  allow_rescan    :1;         /* 1=Allow rescan of new areas */
  bits  check_city      :1;         /* 1=Check user's city at logon */
  bits  check_echo_zone :1;         /* 1=Check zones in areafix's requests */
  bits  save_my_mail    :1;         /* 1=Save mail directed to the Sysop */
  bits  mail_method     :2;         /* 0=Separate netmail, 1=Net & echomail */
                                    /* in the same packet */
  bits  replace_tear    :2;         /* 0=No, 1=Link unlimited, 2=Link */
                                    /* limited to 35 char, 3=Always */

  char  my_mail[40];                /* Path to Sysop's mail */

  bits  stripdash       :1;         /* 1=Strip dashes from phone numbers */
  bits  use_iemsi       :1;         /* 1=Allows IEMSI logins */
  bits  newmail_flash   :1;         /* 1=Flashing MAIL active */
  bits  mymail_flash    :1;         /* 1=Flashing PERSONAL active */
  bits  keep_empty      :1;         /* 1=Do not import empty netmail */
  bits  show_missing    :1;         /* 1=Show missing files in file listings */
  bits  random_redial   :1;         /* 1=Redial numbers at random time */

  char  override_pwd[20];           /* Mail only override password */
  char  pre_pack[40];               /* Pre-PACK DOS command */
  char  after_pack[40];             /* After-PACK DOS command */

  byte  modem_timeout;              /* Modem answer timeout (seconds) */
  byte  login_timeout;              /* User's login timeout (minutes) */
  byte  inactivity_timeout;         /* User's inactivity timeout (seconds) */

  struct _altern_prefix {
    char flag[6];                   /* Nodelist flag (HST,V32B,etc.) */
    char prefix[20];                /* Dialing prefix */
  } prefixdial[10];

  char  iemsi_handle[36];           /* IEMSI: User's handle name */
  char  iemsi_pwd[20];              /* IEMSI: Password */
  short iemsi_infotime;             /* IEMSI: Seconds to display server */
                                    /*        informations */

  bits  iemsi_on        :1;         /* IEMSI: 1=Active, 0=Ignore */
  bits  iemsi_hotkeys   :1;         /* IEMSI: 1=Use hot-keyed menu */
  bits  iemsi_quiet     :1;         /* IEMSI: 1=Do not disturb */
  bits  iemsi_pausing   :1;         /* IEMSI: 1=Pause at end of screen */
  bits  iemsi_editor    :1;         /* IEMSI: 1=Use full screen editor */
  bits  iemsi_news      :1;         /* IEMSI: 1=Display news bulletins */
  bits  iemsi_newmail   :1;         /* IEMSI: 1=Check for new mail */
  bits  iemsi_newfiles  :1;         /* IEMSI: 1=Check for new files */

  bits  iemsi_screenclr :1;         /* IEMSI: 1=Send clearing screen codes */
  bits  prot_xmodem     :1;         /* 1=Internal XMODEM active */
  bits  prot_1kxmodem   :1;         /* 1=Internal 1K-XMODEM active */
  bits  prot_zmodem     :1;         /* 1=Internal ZMODEM active */
  bits  prot_sealink    :1;         /* 1=Internal SEALINK active */

  char  newkey_code[30];            /* Registration key code (>=2.33) */
  char  tearline[36];               /* Custom tear line */

  char  uucp_gatename[20];          /* UUCP gateway name */
  short uucp_zone;                  /* UUCP gateway zone */
  short uucp_net;                   /* UUCP gateway net */
  short uucp_node;                  /* UUCP gateway node */

  byte  carrier_mask;               /* Carrier detect bit mask */
  byte  dcd_timeout;                /* Timeout after drop DCD before hangup */

  struct {
    char display[20];               /* User's display packer name */
    int  offset;                    /* Offset of the signature id */
    char ident[20];                 /* Packer's signature id */
  } packid[10];

  char quote_string[5];             /* String to put in front of quoted lines */
  char quote_header[50];            /* Quote text file header */

  char tic_help[40];                /* Help file name for TIC processor */
  char tic_alert_nodes[50];         /* Nodes that receives a copy of all TIC response messages */
  char tic_newareas_create[50];     /* Nodes that can create new TIC areas */
  char tic_newareas_link[50];       /* Nodes that are linked to new TIC areas */
  byte tic_remote_maint;            /* TIC level for %FROM command */
  byte tic_change_tag;              /* TIC level for #<old>:<new> command */

  int  uucp_point;                  /* UUCP gateway point */

  byte  dial_timeout;               /*  */
  byte  dial_pause;                 /*  */

  bits  newfilescheck   :2;         /*  */
  bits  mono_attr       :1;         /*  */
  bits  force_intl      :1;         /* 1=Force ^aINTL line in matrix */
  bits  inp_dateformat  :2;         /* Date format for input fields */
  bits  single_pass     :1;         /* <reserved> (**) */

  int   ul_free_space;              /* Min. disk space for uploads */
  char  hangup_string[40];          /* Modem hangup command */
  char  init2[40];                  /* 2nd modem init command */
  char  init3[40];                  /* 3th modem init command */

  int   page_start[7];              /* Sysop paging start hours */
  int   page_end[7];                /* Sysop paging end hours */

  char  logbuffer;                  /* Size of log file buffer */

  char  newareas_path[40];          /* Where to create new areas */
  char  newareas_base;              /* Message base type for new areas */

  char  answer[40];                 /* Modem answer command */

  bits  blanker_type   :3;          /* Screen blanker type */
  bits  tcpip          :2;          /* <reserved> (**) */

  char  internet_gate;              /* Type of internet gate */
                                    /* 0=Uupc */
                                    /* 1=GIGO */

  char  areafix_watch[50];          /* Alternate Areafix names */
  char  tic_watch[50];              /* Alternate Raid names */
};


//  ------------------------------------------------------------------

#if defined(GOLD_CANPACK)
#pragma pack()
#endif


//  ------------------------------------------------------------------

#endif

//  ------------------------------------------------------------------
