{$R-,S-,I-,D-,F+,V-,B-,N-,L+ }
unit gentypes;       (* General Structures for ViSiON BBS *)

interface

uses dos;

const versionnum='0.82';
      NetMailVer=1;
      date='04-30-91';
      lastrevision=905;
      thisversioncode=1;
      maxusers=30000;
      maxmessagesize=100;
      maxlastcallers=20;
      maxtopics=10;
      maxcats=10;
      sectorsize=512;
      numsectors=10000;
      maxcatalogsize=50;
      maxgroupsize=50;
      maxsyslogdat=150;
      maxsyslogsize=1000;
      e_door=3;
      e_controlbreak=9;
      e_badconfig=4;
      e_fatalfileerror=90;
      e_files30=50;
      e_nomodemdrv=2;

{ All of these are extended keystroke values. }
      breakoutchar=    0;   {Control-Break}
      chatchar=        59;  {F1}
      sysopcomchar=    60;  {F2}
      sysnextchar=     65;  {F7}
      timelockchar=    66;  {F8}
      inlockchar=      67;  {F9}
      outlockchar=     68;  {F10}
      printerechochar= 114; {Ctrl-PrtSc}
      availtogglechar= 30;  {Alt-A}
      bottomchar=      48;  {Alt-B}
      texttrapchar=    18;  {Alt-E}
      sysophelpchar=   35;  {Alt-H}
      notimechar=      37;  {Alt-K}
      lesstimechar=    38;  {Alt-L}
      moretimechar=    50;  {Alt-M}
      tempsysopchar=   20;  {Alt-T}
      viewstatchar=    47;  {Alt-S}
      quicknukechar=   49;  {Alt-N}

type anystr=string[255];
     lstr=string[80];
     mstr=string[35];
     sstr=string[15];
     accesstype=(bylevel,keepout,letin,invalid);
     availtype=(available,bytime,notavailable);
     configtype=(lowercase,eightycols,linefeeds,postprompts,moreprompts,
                 asciigraphics,ansigraphics,udsysop,bulletinsysop,votingsysop,
                 emailsysop,doorssysop,mainsysop,databasesysop,wanted,
                 showtime,vt52,fseditor);
     groupclass=(publicgroup,privategroup,personalgroup);
     voteset=array [1..maxtopics] of byte;
     boardorder=array [0..255] of byte;
     conferenceset=array[0..32] of byte;
     newvote=array [1..30] of integer;

type userrec=record
       handle,              (* Users Handle *)
       realname:mstr;       (* Users Real Name *)
       password:sstr;       (* Users Password *)
       phonenum:string[10]; (* Users Phone Number *)
       laston:longint;      (* Last Call date in DATEPACK form *)
       numon,               (* Total Calls *)
       timetoday,           (* Time left today *)
       nup,                 (* G-File Uploads *)
       ndn,                 (* G-File Downloads *)
       nbu,                 (* Messages posted *)
       uploads,             (* Uploads *)
       downloads:integer;   (* Downloads *)
       totaltime:real;      (* Total Time spent on system by user *)
       voted:voteset;       (* What the user voted on *)
       udlevel,             (* File Level *)
       udpoints,            (* File Points *)
       level,               (* Main Access Level *)
       emailannounce,       (* Sector for Email Announcement "-1" if none *)
       beepedpwd,           (* Reserved *)
       infoform,            (* Location for Infoform #1 *)
       glevel,              (* G-File Level *)
       gpoints:integer;     (* G-File Points *)
       regularcolor,        (* The following are the users colors. *)
       promptcolor,
       statcolor,
       inputcolor,
       displaylen,
       menuboard,
       menuback,
       blowboard,
       blowinside:byte;
       config:set of configtype;   (* Various config stuff, i.e. Ansi, etc *)
       newscanconfig,              (* Various stuff dealing with message
                                      bases. Do not mess with these. *)
       access1,
       access2:set of byte;
       usernote,                   (* Account Note [Public] *)
       macro1,                     (* Predefined user macros *)
       macro2,
       macro3:mstr;
       upkay,                      (* Upload K *)
       dnkay:longint;              (* Download K *)
       lastbaud,                   (* Last baud rate used *)
       lastlevel,                  (* Last main access level *)
       lastxfer,                   (* Last File Level *)
       lastxferpts:integer;        (* Last File Points *)
       confset:conferenceset;      (* Array [1..32] of byte for the
                                      sub-conferences *)
       hackattempts:integer;       (* Password Hack Attempts *)
       revision:integer;           (* Last Revision Number *)
       lastposts,                  (* Last total messages in system *)
       lastfiles:word;             (* Last total files in system *)
       infoform2,                  (* Location of Infoforms 2-5 *)
       infoform3,
       infoform4,
       infoform5:integer;
       lastread:array [0..255] of word;        (* Message Stuff *)
       expdate:longint;             (* Expiration date in DATEPACK form *)
       timebank:integer;            (* Time stored in Time Bank *)
       lastcalno:word;              (* Last Caller Number *)
       udratio,                     (* Individual Upload/Download Ratio *)
       udkratio,                    (* Individual U/D K Ratio *)
       pcratio:integer;             (* Individual Post/Call Ratio *)
       avatar:byte;                 (* 0=Normal ansi, 1=Pull Down Windows,
                                       2=Avatar (not implemented yet) *)
       timelimits:integer;          (* Daily time limit (0 means normal) *)
       Conf:Array [1..5] of Boolean;   (* Main Conference Flags *)
       LastConf:Byte;                  (* Last Conference user was in *)
       SpecialSysopNote:Mstr;          (* Special Sysop Note *)
       MenuHighlight,statusboxcolor:Byte;
       LastGfiles:Word;
       prompttype:integer;
       NewVoteYes,NewVoteNo:integer;
       newvoteit:newvote;
       nuv1,nuv2,nuv3,nuv4,nuv5,nuv6,nuv7,nuv8,nuv9,nuv10:lstr;
       use1,use2,use3,use4,use5,use6,use7,use8:BooLean; (* Config File Listings *)
       YourPrompt:string[255]; (* User Defined Prompt *)
       MsgHeader:integer; (* ANSi Header or Boxed ANSi Header *)
  end;

     registerrec = record
       sysop:mstr;
       boardname:lstr;
       serial:sstr;
     end;

     userspecsrec=record
       name:String[34];
       Expired:Boolean;
       minlevel,maxlevel,minlaston,maxlaston:integer;
       minpcr,maxpcr:real
     end;

     boardrec=record
       boardname:mstr;
       sponsor:string[34];
       echo:Byte;
       level,autodel:integer;
       shortname:sstr;
       conference:byte
     end;

     Newsrec=Record
        Location:Integer;
        Level:Integer;
        From:mstr;
        When:longint;
        Title:String[28];
        MaxLevel:Integer;
      End;

     BulRec=record                (* Message Header Record *)
        leftby,leftto:String[30];
        title,status:String[30];
        when:longint;
        where:lstr;
        where2:lstr;
        version:byte;
        anon,recieved:boolean;
        line,plevel:integer;
        id:word;
        cnet,fidonet,flag3,flag4,flag5,flag6,flag7,flag8:boolean;
        realname:String[30];
     end;

     NodeNetRec=Record                 (* Node List Record *)
         Pass:Mstr;
         Name:Mstr;
         Phone:string[12];
         Baud:Word;
         LastDate:Longint;
         Celerity,Fido,Cnet,Flag4,Flag5,Flag6:Boolean;
         Node:string[10];
         BaseSelection:Array[1..255] of boolean;
     end;

     rumorrec=record
      title,author,author2:mstr;
       rumor:lstr;
       when:longint;
       level:integer;
     end;

     mailrec=record
       title,sentby:mstr;
       when:longint;
       anon,read:boolean;
       sentto,line,fileindex:integer
     end;

     abrec=record
       title,fname:lstr;
       level:integer;
       when:longint
     end;

     catalogrec=record
       nummail,additional:integer;
       mail:array [1..maxcatalogsize] of mailrec
     end;

     grouprec=record
       name:mstr;
       class:groupclass;
       creator,nummembers:integer;
       members:array [1..maxgroupsize] of integer
     end;

     message=record
       text:array [1..maxmessagesize] of lstr;
       title:mstr;
       sendto:mstr;
       note:mstr;
       anon:boolean;
       numlines:integer
     end;

     NetPostRec=Record                (* Net Mail Package Record *)
       NetIdNum:Byte;
       BulletinRec:BulRec;
       MessageRec:Message;
     End;

     topicrec=record
       topicname:lstr;
       numvoted,addlevel:integer;
       mandatory:boolean
     end;

     choicerec=record
       choice:lstr;
       numvoted:integer
     end;

     lastrec=record
       name:mstr;
       callnum:longint;
       when:longint;
       lastbps:integer
     end;

     buffer=array [1..sectorsize] of char;

     baserec=record
       numcats,numents,level:integer;
       basename:mstr;
       conference:byte;
       echomail:boolean;
       catnames:anystr
     end;

     entryrec=record
       data:anystr;
       when:longint;
       addedby:integer
     end;

     parsedentry=array [1..maxcats] of anystr;

     udrec=record
       sentby:mstr;
       when,whenrated:longint;
       filename:sstr;
       path:string[50];
       points:integer;
       filesize:longint;
       descrip:lstr;
       downloaded:integer;
       sendto:mstr;
       pass:sstr;
       newfile,specialfile:boolean
     end;

     arearec=record
       name,xmodemdir:lstr;
       sponsor,pass:mstr;
       conference:byte;
       uploadhere,downloadhere:boolean;
       level:integer
     end;

     windowrec=record
       x1,y1,x2,y2,
       cx,cy,color:byte
     end;

     fib=textrec;

     bbsrec=record
        name,leftby:mstr;
        baud:string[4];
        phone:string[12];
        ware:sstr
    end;

     doorrec=record
       name:mstr;
       level,numused,info:integer;
       batchname:lstr;
       getparams:boolean;
     end;

     minuterec=record
       started:boolean;
       startedat:integer;
       total:real
     end;

     logrec=record
       menu,subcommand:integer;
       param:string[41];
       when:longint
     end;

     syslogdatrec=record
       menu,subcommand:integer;
       text:mstr
     end;

     gfilerec=record
        gfiledescr:string[75];
        sentby:string[30];
        path:string[50];
        fname:string[30];
        filesize:longint;
        when:longint;
        downloaded:integer;
        arcname:lstr;
        specialfile,newfile:boolean;
     end;

     netnode=record
        name,phone:mstr;
        baud:word;
        note:lstr;
     end;

     gfilearea=record
        name:lstr;
        gfiledir:string[49];
        sponsor:string[30];
        level:integer;
        upable:boolean;
        defarc:sstr;
     end;

(*     MenuType=Array[1..24] of Mstr;

     LRMenuType=Array[1..4] of Mstr;     Pull Down Windows Commented *)

     Protorec=record
       key:char;
       desc:string[35];
       cline:string[100];
       exename:string[35];
     end;

     baudratetype=(b110,b300,b450,b600,b1200,b2400,b4800,b9600,b19200,b38400,b57600);
     baudset=set of baudratetype;

const baudarray:array [b110..b57600] of word=
				 (110,300,450,600,1200,2400,4800,9600,19200,38400,57600);
      versioncodes:array [1..thisversioncode] of string[4]=
        ('1.00');


const firstbaud=b110;
      lastbaud=b57600;

var registo,registb:mstr;
    matrix:anystr;
    totalsent:longint;
    totalrece:longint;
    confilesa:word;
    notvalidas,usedvmode:boolean;
    crazychat:BooLeaN; (* Multiple Chat Colors *)

implementation

begin
end.
