/* New Touch Pro v2.13 -
    © F. Jakobsson & J. Eliasson '92, '93, '94. */

#include "exec/ports.h"

/* Används i alls->nodetype för att visa om man kör lokalt eller via modem */
#define NTSER 1
#define NTCON 2

/* En del begränsningar i NT. Att få bort några av dessa är min målsättning. */
#define MAXCHARBUFF  128     /* "Type-ahead-buffer */
#define MAXNTS        16     /* Max 16 noder kan man ha */
#define MAXMEET      256     /* Max 256 möten */
#define MAXFIDOMEET  256     /* Max 256 fidomöten */
#define MAXAREA      128     /* Max 128 areor */
/* #define MAXFILE     8192      Max 8192 filer, Gammal begränsning! 8-) */
#define MAXUSER     2048     /* Max 2048 användare */
#define MAXMESSLENGTH 80     /* Maxlängden på meddelandet vid SÄG */
#define MAXCOMMENT    20     /* Max 20 kommentarer till en text */
#define MAXRECEIVER   20     /* Max 20 mottagare till ett brev */
#define MAXLETTER    100     /* Max 100 brev kan man ha i sin brevlåda */
#define MAXLASTIN    256     /* Lista senaste listar de 256 senaste */
#define MAXLIFO      100     /* En "last-in-first-out lista med 100 platser. Används för kommentarsträd */
#define MAPSIZE     1000     /* En bitmap som markerar vilka texter som är lästa */
#define MAXSTATUS     30     /* Sysop-Status */

#define MAXLONG 0xFFFFFFFF

/* Defaultvärden. Kan ändras i S:NT.cfg */
#define LOGIN     "S:NTLogIn"
#define LOGOUT    "S:NTLogOut"
#define HEADNAME  "TEXTS/Head"
#define TEXTNAME  "TEXTS/Text"
#define TXTDIR    "TXTFILES/"
#define DATDIR    "DATFILES/"
#define PRGDIR    "PRGS/"
#define PRIVATDIR "PRIVAT/"
#define ULDIR     "UL/"
#define DESCDIR   "DESC/"
#define PRINTDEV  "PRT:"

/* Mötestypen. Finns i meet->type */
#define MCLOSED   1 /* Slutet möte */
#define MNOWRITE  2 /* Skrivskyddat */
#define MNOCOMM   4 /* Kommentarsskyddat */
#define MSECRET   8 /* Hemligt */
#define MANONYM  16 /* Anonymt möte/area */
#define MALIAS   32 /* Alias möte */
#define MAUTO    64 /* Automedlems möte */

/* user->protocol talar om överföringsprotokollet. Kommer att utökas när
  XPR-protokollet implementeras ordentligt. */
#define UXMODEM   1
#define UZMODEM   2

/* Internt */
#define BITR      0
#define BIT1      1
#define BIT2      2

/* user->flags. I samma ordning som när man gör LISTA FLAGGOR */
#define FSTOP         1
#define FPLOT         2
#define FISO          4
#define FNUMBER       8
#define FPROTECT     16
#define FCLRBUFF     32
#define FCLRSCR      64
#define FAUTOZM     128
#define FISO8       256
#define FSTRIPJUNK  512
#define FANSI      1024
#define FPRTSCR    2048
#define FFSED      4096   /* Används ej för tillfället! */

/* Actionflags */
#define AFHANGUP      1
#define AFCHAT	      2
#define AFAFTERDL     4
#define AFALLOCREQ    8
#define AFNODELOCKED 16
#define AFTVINGA     32

/* Defultflaggor, kan ändras i S:NT.cfg */
#define DEFFLAGS 296

/* Internt - för meddelanden som skickas till Servern */
#define MEXSQUIT     1  /* Kommunikation KillServer - Servern */
#define MEKSNODE     2  /* Kernel vill ha ett nodnummer */
#define MEKSGETAS    3  /* Kernel vill ha alls-adressen */
#define MESKOPWIN    4  /* Server vill att Kernel ska öppna fönstret */
#define MESKCLWIN    5  /* Server vill att Kernel ska stänga fönstret */
#define MEKSWRSYS    6  /* Kernel vill skriva .dat */
#define MEKSBACK     7  /* Kernel vill göra backup */
#define MEXSKISER    8  /* Killserver vill stänga Servern */
#define MEKSGDEFF    9  /* Kernel vill läsa in NT.cfg */
#define MEKSREDEFF  10  /* Kernel vill att Server läser in NT.cfg igen */
#define MEKSRECOMM  11  /* Kernel vill att Server läser in Command.dat igen */
#define MEXSGETLINE 12  /* NTGetLine */
#define MEXSRELLINE 13  /* NTRelLine */
#define MEKSLOGOUT  14  /* Kernel loggar ut */

#define MESSSAY 1
#define MESSTALK 2
#define MESSLOGIN 3
#define MESSLOGOUT 4
#define MESSSEND 5

/* Defines för def->title */
#define TITLE_NONE	0
#define TITLE_DOING	1

/* Macron för att slippa skriva så mycket */
#define deff alls->defaulx
#define sys alls->syx
#define stat alls->stax
#define commands alls->commandx
#define meets alls->meetx
#define areas alls->areax
#define files alls->filex
#define user_name alls->user_namx
#define fidomeets alls->fidomeetx

#ifndef LIBPORT_NAME
#define LIBPORT_NAME	"ntpro.library"
#endif

/* Defines för ntSetFunction() */
#define NTSF_BEFORE               0 /* Utföres INNAN kommandot */
#define NTSF_AFTER                1 /* Utföres EFTER kommandot */
#define NTSF_TEMPCOM              2 /* Ett TEMPCOM             */

/* Defines för ntDoingExt() */
#define NTDE_NONE	0
#define NTDE_MEET	1
#define NTDE_FILE	2
#define NTDE_USER	3
#define NTDE_FIDOMEET	4

#ifndef MEETTYPE_NORMAL
#define MEETTYPE_NORMAL 0
#define MEETTYPE_FIDO   1
#endif

/* En användbar define... */
#define BREVLÅDAN	0

/* Dessa värden läses in från S:NT.cfg. */
typedef struct
{
  long flags;
  short guardtime, dummy1, time[31], clearuser, maxline, window[4];
  char device[31], login[31], logout[31], prgdir[31], updir[31], txtdir[31],
       datdir[31], descdir[31], headname[31], textname[31], printdev[31], logfile[31],
       export[31], modeminit[31], udratio[31], timezon[8], DosSer[31],
       closedbbs, maxlogg, inactive, xscreen, yscreen, protocol,
       status, safesave, modem, instatus, timewarn, setcomment, unit, hangup, handshake,
       lace, updatexpr, chuserstat, chmeetstat, chfilestat, chvotestat, val[31],
       dummy[24], ssalias, ssanonym, terminit[31], xprinit[81],
       ntanswer, delmeet, delarea, Debug;
  char DebugFile[31];
  char bbsname[30];
  short title; /* Typ av fönstertitel */
  char logdepth;
  char privatdir[31];
  ULONG baud;
} DEFAULT;

/* System.dat */
typedef struct
{
  short tot_command, tot_meet, tot_area, tot_file, tot_user;
  short tot_fidomeet;
} SYSTEM;

/* Statistic.dat */
typedef struct
{
  long tot_call[20], tot_time, tot_read, tot_write, tot_upload,
       tot_download, last_in_time[MAXLASTIN];
  short last_in[MAXLASTIN], last_in_read[MAXLASTIN], last_in_write[MAXLASTIN];
  char last_in_dl[MAXLASTIN], last_in_ul[MAXLASTIN], last_in_log[MAXLASTIN];
} STATISTIC;

/* Command.dat */
typedef struct
{
  short Type, MinLogg, MinDays;
  char  *Exec, *Password;
  unsigned char Status, Param, Flags;
  char *doing;
  char *Before;
  char *After;
  BOOL disabled;  /* disabled och func har temporära värden */
  APTR func[3];
  ULONG MinBytes;
} NEWCOMMAND;

/* Används också till kommandona. Anledningen till att det finns en "head" och
   en vanlig "command" är att flera head kan peka till samma "command". T.ex.
   är ju SLUTA och LOGOUT samma kommando. */
typedef struct
{
  APTR Next;
  char *Name;
  BOOL Alloc;
  NEWCOMMAND *Com;
} NEWCOMHEAD;

/* Meet.dat */
typedef struct
{
  long creat_time, tot_char, del_char;
  USHORT max_text, tot_text, del_text, creator;
  char name[31], type, right[MAXUSER/8], with[MAXUSER/8];
  short admin;             /* Användarnumret på mötesadministratören */
  unsigned char minage;    /* Hoppas ingen användare är mer än 256 år gammal! 8-) */
  unsigned char minstatus; /* Lägsta status för mötet */
} MEET;

/* Area.dat */
typedef struct
{
  long creat_time, last_upload, last_download;
  short chain_meet, tot_file, creator;
  char name[31], dir[31];
  short minbaud; /* Minimi-baud för arean */
  long flags;
} AREA;

/* File.dat */
typedef struct
{
  long upload_time, size;
  short upload_by, tot_download;
  unsigned char freedl,longdescript, validated;
  char name[26], descript[71], area;
} PROG;

/* User.dat */
typedef struct
{
  long  tot_time, first_time, last_time, tot_read, tot_write, flags;
  short tot_logg, tot_letter, last_read[MAXMEET],letter[MAXLETTER];
  ULONG tot_upload, tot_download;
  char  name[31], password[26], phone[16], computer[41], xscreen, yscreen,
        protocol, status, adress1[41], adress2[41], adress3[41];
  char editor;
  char alias[31];
  unsigned char ratio;
  short last_fido[MAXFIDOMEET];
} USER;

/* Vote.dat */
typedef struct
{
  APTR  Next;
  short num_votes;
  char  voted[MAXUSER/8];
  char  text[41];
} VOTE;

typedef struct
{
  APTR  Next;
  long  creat_time;
  short tot_votes, creator;
  char  text[76];
  VOTE  *vote;
} VOTEHEAD;

/* TextXX */
typedef struct
{
  long time, point_text;
  USHORT text_num, writer, lines, receiver[MAXRECEIVER], comment_to, comment_of;
  short comment_in[MAXCOMMENT], comment_by[MAXCOMMENT];
  char del, subject[41];
} TEXTHEAD;

/* Används till SÄG och PRATA */
typedef struct
{
  APTR Next;
  short MessFrom;
  unsigned char Type;
  char *Mess;
} USERMESS;

/* All info om fido-areor */
typedef struct
{
  char name[50];
  char tagname[50];
  short maxtexts;
  char status;
  short lownum;
  short highnum;
  short lastsent;
  long createtime;
  char type;
  char path[50];
  char origin[60];
  char with[MAXUSER/8];
  char readstat;
  char writestat;
  char nodenr[15];
  char hubnr[15];
  char charset;
  char routeto[20][15];
} FIDOMEET;

/* FidoTexter. xxxxx.yyyyy ,där x är möte och y textnr. */
typedef struct
{
  char fromUserName[36];
  char toUserName[36];
  char subject[72];
  char DateTime[20];
  short timesRead;
  short destNode;
  short origNode;
  short cost;
  short origNet;
  short destNet;
  short destZone;
  short origZone;
  short destPoint;
  short origPoint;
  short replyTo;
  short Attribute;
  short nextReply;
} FIDOTEXT;

typedef struct
{
  char origNodelo, origNodehi;
  char destNodelo, destNodehi;
  char yearlo, yearhi;
  char monthlo, monthhi;
  char daylo, dayhi;
  char hourlo, hourhi;
  char minutelo, minutehi;
  char secondlo, secondhi;
  char baudlo, baudhi;
  char typelo, typehi;
  char origNetlo, origNethi;
  char destNetlo, destNethi;
  char prodCode;
  char serialNo;
  char password[8];
  char origZonelo, origZonehi;
  char destZonelo, destZonehi;
  char fill[20];
} BUNDLEHEADER;

typedef struct
{
  char typelo, typehi;
  char origNodelo, origNodehi;
  char destNodelo, destNodehi;
  char origNetlo, origNethi;
  char destNetlo, destNethi;
  char Attributelo, Attributehi;
  char costlo, costhi;
  char DateTime[20];
/*
  char toUserName[36];
  char fromUserName[36];
  char subject[72];
 */
} BUNDLEPACKET;

/* Utifrån denna struktur utgår allting. */
typedef struct
{
  struct Screen *screen;
  DEFAULT *defaulx;
  SYSTEM *syx;
  STATISTIC *stax;
  NEWCOMHEAD *FirstCom;
  PROG **filex;
  MEET *meetx[MAXMEET];
  AREA *areax[MAXAREA];
  USERMESS *um[MAXNTS];
  VOTEHEAD *FirstVote;
  char *user_namx[MAXUSER];
  long ntmess, ntmess2;
  short user_in[MAXNTS];
  short getletter[MAXNTS];
  short dopar[MAXNTS];
  char node;
  char lockcom, lockmess, lockmeet, lockarea, lockfile, lockuser,
       lockstat, locknode[MAXNTS], locktext[MAXMEET], lockum[MAXNTS];
  char chatflag[MAXNTS];
  char dopartype[MAXNTS];
  char nodetype[MAXNTS];
  char shutdown, numscreen;
  char *screentitle, tmp[40];
  char dostr[MAXNTS][50];
  BOOL ChMeet, ChArea, ChFile, ChVote;
  ULONG useradress[MAXNTS];
  DEFAULT *defadress[MAXNTS];
  ULONG actionflags[MAXNTS];
  short MarkedFiles[MAXNTS][20];
  struct Task *task[MAXNTS];
  struct Window *window[MAXNTS];
  ULONG at[MAXNTS];
  char version[8];
  char History[MAXNTS][11][81]; /* Kommando-slots... */
  char histpos[MAXNTS]; /* Kommando-slot position */
  short currentmeet[MAXNTS]; /* Vilket möte usern är i */
  char filetrans[MAXNTS][81]; /* Path+namn för fil som just UL'ats! */
  short transnr[MAXNTS]; /* NT's nummer på filen som just UL'ats! */
  FIDOMEET *fidomeetx[MAXFIDOMEET];
  char lockfidotext[MAXMEET], lockfidomeet;
  BOOL ChFidoMeet;
  char meettype[MAXNTS]; /* FIDO = 1, annars 2 */
  BOOL dummy;
  BOOL multimode[MAXNTS];
  short multichat[MAXNTS];
  BOOL hiddenmode[MAXNTS];
  short vemtvingar[MAXNTS];
  char tvinga[MAXNTS][71]; /* Det ngn tvingar en att göra... */

  /* För språkdatan */
  char **language;
  short totalstr;

} ALLSTRUCT;

/* För kommunikation mellan servern och noderna */
typedef struct
{
  struct Message msg;
  long skks;
  long param;
  char node;
} NTMessage;

