home *** CD-ROM | disk | FTP | other *** search
/ Shareware 1 2 the Maxx / sw_1.zip / sw_1 / BBS / TG27.ZIP / TELEGARD.INC < prev    next >
Text File  |  1991-12-15  |  44KB  |  921 lines

  1. (*****************************************************************************)
  2. (*>                                                                         <*)
  3. (*>                     Telegard Bulletin Board System                      <*)
  4. (*>      Copyright 1988-1991 by Martin Pollard.  All rights reserved.       <*)
  5. (*>                                                                         <*)
  6. (*>                     Data Types and File Structures                      <*)
  7. (*>                                                                         <*)
  8. (*****************************************************************************)
  9.  
  10. const
  11.   ver:string[15]='2.7';         { current version number }
  12.  
  13.   maxboards=255;                { msg bases, 0 - x }
  14.   maxuboards=255;               { file bases, 0 - x }
  15.   maxprotocols=120;             { xfer protocols, 1 - x }
  16.   maxevents=10;                 { scheduled events, 0 - x          }
  17.                                 { #0 is Nightly Events (if active) }
  18.   maxarcs=8;                    { archivers, 1 - x }
  19.   numvoteqs=20;                 { voting questions, 1 - x }
  20.   numvoteas=9;                  { voting question answers, 0 - x }
  21.   maxmenucmds=50;               { menu commands, 1 - x }
  22.  
  23. (*---------------------------------------------------------------------------*)
  24.  
  25. type
  26.   acstring = string[20];                      { Access Control System string }
  27.   acrq = '@'..'Z';                            { AR flags }
  28.   clrs = array[FALSE..TRUE,0..9] of byte;     { color records:     }
  29.                                               { [FALSE][x] = mono  }
  30.                                               {  [TRUE][x] = color }
  31.   secrange = array[0..255] of integer;        { security tables }
  32.   cpackdatetime = array[1..6] of byte;        { packed date/time }
  33.   mzscanr = set of 0..maxboards;              { msg base scan flags }
  34.   fzscanr = set of 0..maxuboards;             { file base scan flags }
  35.   mhireadr =
  36.     array[0..maxboards] of cpackdatetime;     { last msg read table }
  37.  
  38. (*****************************************************************************)
  39. (*                                                                           *)
  40. (*       The format of the packed date/time structure is as follows:         *)
  41. (*                                                                           *)
  42. (*                 Byte #1    |    Byte #2    |    Byte #3                   *)
  43. (*             ===============|===============|===============               *)
  44. (*             7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0               *)
  45. (*             `-----------' `-------------' `-----' `-------'               *)
  46. (*                RESERVED        Year        Month     Day                  *)
  47. (*                              (8 bits)    (4 bits) (5 bits)                *)
  48. (*                                                                           *)
  49. (*                 Byte #4    |    Byte #5    |    Byte #6                   *)
  50. (*             ===============|===============|===============               *)
  51. (*             7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0               *)
  52. (*             `-------' `---------' `---------' `-----------'               *)
  53. (*               Hour      Minute      Second    1/100 Seconds               *)
  54. (*             (5 bits)   (6 bits)    (6 bits)     (7 bits)                  *)
  55. (*                                                                           *)
  56. (*****************************************************************************)
  57.  
  58.   uflags =            { user AC flags }
  59.   (
  60.     rlogon,           { L - Restricted to one call a day }
  61.     rchat,            { C - Can't page the SysOp }
  62.     rvalidate,        { V - Posts marked unvalidated }
  63.     ramsg,            { A - Can't change the AutoMessage }
  64.     rpostan,          { * - Can't post anonymously }
  65.     rpostpvt,         { E - Can't post private }
  66.     rpostnet,         { N - Can't post NetMail }
  67.     rpost,            { P - Can't post at all }
  68.     rvoting,          { K - Can't vote }
  69.     rmsg,             { M - Force mail deletion }
  70.     rreserved,        { RESERVED }
  71.     onekey,           { onekey input mode }
  72.     avatar,           { user has AVATAR }
  73.     pause,            { pause }
  74.     novice,           { user is at novice help level }
  75.     ansi,             { user has ANSI }
  76.     color,            { user has color }
  77.     alert,            { alert SysOp when user logs on }
  78.     smw,              { short-message waiting for user }
  79.     nomail,           { user mail-box is closed }
  80.     fnodlratio,       { 1 - No UL/DL ratio }
  81.     fnopostratio,     { 2 - No post/call ratio }
  82.     fnofilepts,       { 3 - No file points checking }
  83.     fnodeletion       { 4 - Protection from deletion }
  84.   );
  85.  
  86.   anontyp =           { msg base anonymous types }
  87.   (
  88.     atno,             { No anonymous posts allowed }
  89.     atyes,            { Anonymous posts are allowed }
  90.     atforced,         { ALL posts are forced anonymous }
  91.     atdearabby,       { "Dear Abby" message base }
  92.     atanyname         { User's can post as ANY name they want }
  93.   );
  94.  
  95.   basetyp =           { msg base types }
  96.   (
  97.     mlocal,           { local messages }
  98.     mnetmail,         { NetMail messages }
  99.     mechomail,        { EchoMail messages }
  100.     mgroupmail        { GroupMail messages }
  101.   );
  102.  
  103.   posttyp =           { msg base message types }
  104.   (
  105.     mpublic,          { public messages only }
  106.     mprivate          { private messages only }
  107.   );
  108.  
  109. (*---------------------------------------------------------------------------*)
  110.  
  111.   msgindexstatr=      { *.MIX status flags }
  112.   (
  113.     deleted,          { is message deleted? }
  114.     unvalidated,      { is message unvalidated? }
  115.     permanent         { is message permanent? }
  116.   );
  117.  
  118.   fidoattrib=         { *.MIX Fido message attributes }
  119.   (
  120.     private,          { private }
  121.     crash,            { crash mail }
  122.     received,         { received }
  123.     sent,             { sent }
  124.     fattach,          { file attached }
  125.     intransit,        { in-transit }
  126.     orphan,           { orphaned }
  127.     kill,             { kill after sending }
  128.     local,            { local message }
  129.     hold,             { hold for pickup }
  130.     unused,           { **UNUSED** }
  131.     freq,             { file request }
  132.     rreq,             { return receipt request }
  133.     receipt,          { return receipt message }
  134.     areq,             { audit request }
  135.     fureq             { file update request }
  136.   );
  137.  
  138.   fidoxattrib=        { *.MIX Fido message attributes (extended) }
  139.   (
  140.     direct,           { direct to recipient }
  141.     immediate,        { immediate delivery }
  142.     delsent           { delete when sent }
  143.   );
  144.  
  145.   msgindexrec=        { *.MIX : Message index records }
  146.   record
  147.     hdrptr:longint;                   { message header pointer }
  148.     isreplyto:integer;                { reply-to message number (-1=none) }
  149.     isreplytoid:cpackdatetime;        { packed date/time of replied message }
  150.     numreplies:integer;               { number of replies to THIS message }
  151.     msgdate:cpackdatetime;            { message date/time (packed) }
  152.     msgdowk:byte;                     { message day of week (0=Sun..6=Sat) }
  153.     attrib:set of fidoattrib;         { Fido msg attributes (see above) }
  154.     xattrib:set of fidoxattrib;       { extended Fido attribs (see above) }
  155.     flags:set of msgindexstatr;       { status flags (see above) }
  156.   end;
  157.  
  158.   fromtoinfo=         { *.BRD from/to information }
  159.   record
  160.     anon:byte;              { anonymous type (0=no, 1/2=yes, 3="Abby", }
  161.                             {   4="Problemed Person", 5=any name }
  162.     usernum:word;           { user number (0=none) }
  163.     zone:word;              { zone (0=none) }
  164.     net:word;               { net (0=none) }
  165.     node:word;              { node (0=none) }
  166.     point:word;             { point (0=none) }
  167.     name:string[36];        { user name (all caps) if anon=3..5, }
  168.                             { otherwise null ('')                }
  169.     real:string[36];        { user real name (all caps) }
  170.     alias:string[36];       { user alias (all caps) }
  171.   end;
  172.  
  173.   mheaderrec=         { *.BRD : Message header records }
  174.   record
  175.     msgptr:longint;             { pointer to message text }
  176.     msglength:word;             { length of message text }
  177.     cost:word;                  { cost to send message (NetMail only) }
  178.     fromi:fromtoinfo;           { from user information }
  179.     toi:fromtoinfo;             { to user information }
  180.     title:string[71];           { title of message }
  181.     datetime:string[19];        { Net/Echo/Group original msg date }
  182.   end;
  183.  
  184. (*---------------------------------------------------------------------------*)
  185.  
  186.   filstat=            { *.DIR status flags }
  187.   (
  188.     notval,                       { if file is not validated }
  189.     isrequest,                    { if file is offline }
  190.     resumelater                   { if file is resume-later }
  191.   );
  192.  
  193.   ulfrec=             { *.DIR : File records }
  194.   record
  195.     filename:string[12];          { filename }
  196.     description:string[60];       { file description }
  197.     filepoints:integer;           { file points }
  198.     nacc:integer;                 { number DLs }
  199.     res1:byte;                    { RESERVED }
  200.     blocks:integer;               { # 128 byte blks }
  201.     owner:integer;                { ULer of file }
  202.     stowner:string[36];           { ULer's name }
  203.     date:string[8];               { date ULed }
  204.     daten:integer;                { numeric date ULed       }
  205.                                   { (# days since 01/01/85) }
  206.     vpointer:longint;             { pointer to verbose descr (-1=none) }
  207.     filestat:set of filstat;      { file status }
  208.     res2:array[1..10] of byte;    { RESERVED }
  209.   end;
  210.  
  211. (*---------------------------------------------------------------------------*)
  212.  
  213.   mnuflags=           { *.MNU status flags }
  214.   (
  215.     clrscrbefore,                 { C: clear screen before menu display }
  216.     dontcenter,                   { D: don't center the menu titles! }
  217.     nomenuprompt,                 { N: no menu prompt whatsoever? }
  218.     forcepause,                   { P: force a pause before menu display? }
  219.     autotime                      { T: is time displayed automatically? }
  220.   );
  221.  
  222.   menurec=            { *.MNU : Menu records }
  223.   record
  224.     menuname:array[1..3] of string[100]; { menu name }
  225.     directive:string[12];                { help file displayed }
  226.     tutorial:string[12];                 { tutorial help file }
  227.     menuprompt:string[120];              { menu prompt }
  228.     acs:acstring;                        { access requirements }
  229.     password:string[15];                 { password required }
  230.     fallback:string[8];                  { fallback menu }
  231.     forcehelplevel:byte;                 { forced help level for menu }
  232.     gencols:byte;                        { generic menus: # of columns }
  233.     gcol:array[1..3] of byte;            { generic menus: colors }
  234.     menuflags:set of mnuflags;           { menu status variables }
  235.   end;
  236.  
  237.   cmdflags=           { *.MNU command status flags }
  238.   (
  239.     hidden,                       { H: is command ALWAYS hidden? }
  240.     unhidden                      { U: is command ALWAYS visible? }
  241.   );
  242.  
  243.   commandrec=         { *.MNU : Command records }
  244.   record
  245.     ldesc:string[70];               { long command description }
  246.     sdesc:string[35];               { short command description }
  247.     ckeys:string[14];               { command-execution keys }
  248.     acs:acstring;                   { access requirements }
  249.     cmdkeys:string[2];              { command keys: type of command }
  250.     mstring:string[50];             { MString: command data }
  251.     commandflags:set of cmdflags;   { command status variables }
  252.   end;
  253.  
  254. (*---------------------------------------------------------------------------*)
  255.  
  256.   zlogrec=            { ZLOG.DAT : System log }
  257.   record
  258.     date:string[8];                   { entry date }
  259.     userbaud:array[0..4] of integer;  { new user logon BPS rates   }
  260.                                       { (300,1200,2400,4800,9600+) }
  261.     active:integer;                   { % activity }
  262.     calls:integer;                    { # of calls }
  263.     newusers:integer;                 { # of new users }
  264.     pubpost:integer;                  { # of public posts }
  265.     privpost:integer;                 { # of private posts }
  266.     netpost:integer;                  { # of NetMail posts }
  267.     criterr:integer;                  { # of critical errors }
  268.     uploads:integer;                  { # of uploads }
  269.     downloads:integer;                { # of downloads }
  270.     uk:longint;                       { amount ULed in K }
  271.     dk:longint;                       { amount DLed in K }
  272.   end;
  273.  
  274. (*---------------------------------------------------------------------------*)
  275.  
  276.   mbflags=            { BOARDS.DAT status flags }
  277.   (
  278.     mbrealname,                   { real names are forced }
  279.     mbvisible,                    { visible to users w/o access }
  280.     mbfilter,                     { filter ANSI/8-bit ASCII }
  281.     mbstrip,                      { strip center/title codes }
  282.     mbaddtear,                    { add tear/origin lines }
  283.     mbtopstar,                    { Top Star base (GroupMail only) }
  284.     mbimmune,                     { immune to "twitting" }
  285.     mbinternet                    { special Internet (UUCP) handling }
  286.   );
  287.  
  288.   boardrec=           { BOARDS.DAT : Message base records }
  289.   record
  290.     name:string[40];              { message base description }
  291.     filename:string[8];           { BRD/MIX data filename }
  292.     msgpath:string[40];           { messages pathname }
  293.     password:string[20];          { base password }
  294.     acs:acstring;                 { access requirement }
  295.     postacs:acstring;             { post access requirement }
  296.     maxmsgs:word;                 { max message count }
  297.     anonymous:anontyp;            { anonymous type }
  298.     mbstat:set of mbflags;        { message base status vars }
  299.     mbtype:basetyp;               { message base type }
  300.     mbpost:posttyp;               { message base posting type }
  301.     origin:string[50];            { origin line }
  302.     kludge_color:byte;            { color of kludge line }
  303.     quote_color:byte;             { color of quoted line }
  304.     tear_color:byte;              { color of tear line }
  305.     origin_color:byte;            { color of origin line }
  306.     zone:word;                    { network address }
  307.     net:word;                     { (zone:net/node.point) }
  308.     node:word;
  309.     point:word;
  310.   end;
  311.  
  312. (*---------------------------------------------------------------------------*)
  313.  
  314.   confrec=            { CONFRENC.DAT : Conference data }
  315.   record
  316.     conference:array['@'..'Z'] of
  317.     record
  318.       acs:acstring;       { access requirement }
  319.       name:string[40];    { name of conference }
  320.     end;
  321.   end;
  322.  
  323. (*---------------------------------------------------------------------------*)
  324.  
  325.   eventrec=           { EVENTS.DAT : Scheduled event records }
  326.   record
  327.     active:boolean;               { whether active }
  328.     description:string[30];       { event description (for logs) }
  329.     etype:char;                   { A:CS, C:hat, D:os call, E:xternal }
  330.     execdata:string[20];          { errorlevel if "E", commandline if "D" }
  331.     busytime:integer;             { off-hook time before; 0 if none }
  332.     exectime:integer;             { time of execution }
  333.     busyduring:boolean;           { busy phone DURING event? }
  334.     duration:integer;             { length of time event takes }
  335.     execdays:byte;                { bitwise execution days,    }
  336.                                   { or day of month if monthly }
  337.     monthly:boolean;              { monthly event? }
  338.   end;
  339.  
  340. (*---------------------------------------------------------------------------*)
  341.  
  342.   tbflags=            { GFILES.DAT status flags }
  343.   (
  344.     tbunhidden,                   { whether *VISIBLE* to users w/o access }
  345.     tbreserved1,                  { RESERVED FLAG #1 }
  346.     tbreserved2                   { RESERVED FLAG #2 }
  347.   );
  348.  
  349.   tfilerec=           { GFILES.DAT : Text-file records }
  350.   record
  351.     title:string[40];             { title }
  352.     filen:string[12];             { filename }
  353.     gdate:string[8];              { date of Tfile / Tfile base }
  354.     gdaten:integer;               { numeric date for fast calculation }
  355.     acs:acstring;                 { access requirement }
  356.     ulacs:acstring;               { upload to base access requirement }
  357.     tbstat:set of tbflags;        { text-file base status vars }
  358.     res:array[1..10] of byte;     { RESERVED }
  359.   end;
  360.  
  361. (*---------------------------------------------------------------------------*)
  362.  
  363.   lcallers=           { LASTON.DAT : Last few callers records }
  364.   record
  365.     callernum:longint;            { system caller number }
  366.     name:string[36];              { user name of caller }
  367.     number:integer;               { user number of caller }
  368.     citystate:string[30];         { city/state of caller }
  369.   end;
  370.  
  371. (*---------------------------------------------------------------------------*)
  372.  
  373.   macrorec=           { MACROS.LST : Keyboard macro records }
  374.   record
  375.     macro:array[1..4] of string[240];
  376.   end;
  377.  
  378. (*---------------------------------------------------------------------------*)
  379.  
  380.   modemflags=         { MODEM.DAT status flags }
  381.   (
  382.     lockedport,       { COM port locked at constant rate }
  383.     xonxoff,          { XON/XOFF (software) flow control }
  384.     ctsrts            { CTS/RTS (hardware) flow control }
  385.   );
  386.  
  387.   modemrec=           { MODEM.DAT : Modem configuration }
  388.   record
  389.     waitbaud:word;                { wait bps }
  390.     comport:byte;                 { COM port number }
  391.     init:string[80];              { initialization string }
  392.     answer:string[40];            { answer string }
  393.     hangup:string[40];            { hangup string }
  394.     offhook:string[40];           { phone off-hook string }
  395.     nocallinittime:integer;       { reinit modem after x mins of inactivity }
  396.     lockedportbaud:word;          { bps rate to use when COM port locked }
  397.     flags:set of modemflags;      { status flags (see above) }
  398.     nocarrier:byte;               { NO CARRIER result code }
  399.     resultcode:array[1..2,0..7]   { CONNECT result codes:                    }
  400.                  of byte;         { 300,1200,2400,4800,7200,9600,12000,14400 }
  401.   end;
  402.  
  403. (*---------------------------------------------------------------------------*)
  404.  
  405.   smalrec=            { NAMES.LST : Sorted names listing }
  406.   record
  407.     name:string[36];                  { user name }
  408.     number:integer;                   { user number }
  409.   end;
  410.  
  411. (*---------------------------------------------------------------------------*)
  412.  
  413.   netflags=           { NETWORK.DAT status flags }
  414.   (
  415.     nstrip,           { strip message codes? }
  416.     naddtear,         { add tear/origin lines to Net/Group? }
  417.     nholduser,        { hold all non-SysOp NetMail? }
  418.     nhold,            { default NetMail to "hold"? }
  419.     ncrash,           { default NetMail to "crash"? }
  420.     nkill             { default NetMail to "kill/sent"? }
  421.   );
  422.  
  423.   networkrec=         { NETWORK.DAT : Network information }
  424.   record
  425.     zone:word;                { network address       }
  426.     net:word;                 { (zone:net/node.point) }
  427.     node:word;
  428.     point:word;
  429.     origin:string[50];        { origin line }
  430.     kludge_color:byte;        { color of kludge line }
  431.     quote_color:byte;         { color of quoted text }
  432.     tear_color:byte;          { color of tear line }
  433.     origin_color:byte;        { color of origin line }
  434.     flags:set of netflags;    { status flags }
  435.     netpath:string[40];       { NetMail path }
  436.     echopath:string[40];      { EchoMail path }
  437.     grouppath:string[40];     { GroupMail path }
  438.     nodepath:string[40];      { nodelist path }
  439.   end;
  440.  
  441. (*---------------------------------------------------------------------------*)
  442.  
  443.   nodeflags=          { NODELIST.DAT status flags }
  444.   (
  445.     hub,      { node is a net hub }
  446.     host,     { node is a net host }
  447.     region,   { node is region coord }
  448.     zone,     { node is a zone coord }
  449.     cm,       { runs continuous mail }
  450.     ores1,    { reserved for Opus }
  451.     ores2,    { reserved for Opus }
  452.     ores3,    { reserved for Opus }
  453.     ores4,    { reserved for Opus }
  454.     ores5,    { reserved for Opus }
  455.     nores1,   { reserved for non-Opus }
  456.     nores2,   { reserved for non-Opus }
  457.     nores3,   { reserved for non-Opus }
  458.     nores4,   { reserved for non-Opus }
  459.     nores5,   { reserved for non-Opus }
  460.     nores6    { reserved for non-Opus }
  461.   );
  462.  
  463.   modemtypes=         { NODELIST.DAT modem type flags }
  464.   (
  465.     hst,      { node uses a USRobotics HST modem }
  466.     pep,      { node uses a Telebit PEP modem }
  467.     v32,      { node uses a V.32 modem }
  468.     v32b,     { node uses a V.32bis modem }
  469.     h96       { node uses a Hayes Express96 modem }
  470.   );
  471.  
  472.   nodedatarec=        { NODELIST.DAT : Version 6 nodelist data }
  473.   record
  474.     net:integer;                    { net number }
  475.     node:integer;                   { node number }
  476.     cost:integer;                   { cost per minute to call }
  477.     name:array[0..33] of byte;      { node name }
  478.     phone:array[0..39] of byte;     { phone number }
  479.     city:array[0..29] of byte;      { city and state }
  480.     password:array[0..7] of byte;   { password }
  481.     realcost:integer;               { phone company's charge }
  482.     hubnode:integer;                { node # of this node's hub (0=none) }
  483.     rate:byte;                      { actual bps rate divided by 300 }
  484.     modem:set of modemtypes;        { modem type codes }
  485.     flags:set of nodeflags;         { set of flags }
  486.     res:array[1..2] of byte;        { RESERVED }
  487.   end;
  488.  
  489.   nodeindexrec=       { NODELIST.IDX : Version 6 nodelist index }
  490.   record
  491.     node:integer;       { node number }
  492.     net:integer;        { net number }
  493.   end;
  494.  
  495. (*---------------------------------------------------------------------------*)
  496.  
  497.   xbflags=            { PROTOCOL.DAT status flags }
  498.   (
  499.     xbactive,                       { is protocol active? }
  500.     xbisbatch,                      { is batch definition? }
  501.     xbisresume,                     { is resume definition? }
  502.     xbxferokcode                    { does result code = xfer OK? }
  503.   );
  504.  
  505.   protrec=            { PROTOCOL.DAT : File transfer protocols }
  506.   record
  507.     xbstat:set of xbflags;              { protocol flags }
  508.     ckeys:string[14];                   { command keys }
  509.     descr:string[40];                   { description }
  510.     acs:acstring;                       { access string }
  511.     templog:string[25];                 { temp. log file }
  512.     uloadlog:string[25];                { permanent log files }
  513.     dloadlog:string[25];
  514.     ulcmd:string[78];                   { UL/DL command lines }
  515.     dlcmd:string[78];
  516.     ulcode:array [1..6] of string[6];   { UL/DL codes }
  517.     dlcode:array [1..6] of string[6];
  518.     envcmd:string[60];                  { environment setup cmd (B) }
  519.     dlflist:string[25];                 { DL file lists (B) }
  520.     maxchrs:integer;                    { max chrs in cmdline }
  521.     logpf:integer;                      { pos in log file for data (B) }
  522.     logps:integer;
  523.     res:array[1..15] of byte;           { RESERVED }
  524.   end;
  525.  
  526. (*---------------------------------------------------------------------------*)
  527.  
  528.   smr=                { SHORTMSG.DAT : One-line messages }
  529.   record
  530.     msg:string[160];    { message }
  531.     destin:integer;     { destination user # (-1=deleted) }
  532.   end;
  533.  
  534. (*---------------------------------------------------------------------------*)
  535.  
  536.   filearcinforec=     { STATUS.DAT archive configuration records }
  537.   record
  538.     active:boolean;               { whether this archive format is active }
  539.     ext:string[3];                { 3-char file extension }
  540.     listline:string[25];          { view archive cmdline ('' for internal) }
  541.     arcline:string[25];           { compression cmdline }
  542.     unarcline:string[25];         { de-compression cmdline }
  543.     testline:string[25];          { integrity test cmdline ('' for *None*) }
  544.     cmtline:string[25];           { comment cmdline ('' for *None*) }
  545.     succlevel:integer;            { success ERRORLEVEL (-1=ignore results) }
  546.   end;
  547.  
  548.   systatrec=          { STATUS.DAT : System configuration }
  549.   record
  550.     gfilepath:string[79];             { GFILES path (data files) }
  551.     afilepath:string[79];             { AFILES path (text files) }
  552.     menupath:string[79];              { MENUS path (system menu files) }
  553.     trappath:string[79];              { LOGS path (trap/chat/log files) }
  554.     msgpath:string[79];               { MSGS path (msg base data files) }
  555.     tfilepath:string[79];             { TFILES path (Tfiles base files) }
  556.     temppath:string[79];              { TEMP path (temporary files) }
  557.  
  558.     bbsname:string[80];               { BBS name }
  559.     bbsphone:string[12];              { BBS phone number }
  560.     sysopname:string[30];             { SysOp's full name or alias }
  561.     maxusers:integer;                 { max number of users system can have }
  562.     lowtime:integer;                  { SysOp begin minute (in minutes) }
  563.     hitime:integer;                   { SysOp end time }
  564.     dllowtime:integer;                { normal downloading hours }
  565.     dlhitime:integer;
  566.     shuttlelog:boolean;               { is Shuttle Logon active? }
  567.     lock300:boolean;                  { lock out 300 baud? }
  568.     sysoppw:string[20];               { SysOp PW }
  569.     newuserpw:string[20];             { newuser PW (or NULL if none) }
  570.     shuttlepw:string[20];             { Shuttle PW (if Shuttle active) }
  571.     b300lowtime:integer;              { 300 baud calling hours }
  572.     b300hitime:integer;
  573.     b300dllowtime:integer;            { 300 baud DL hours }
  574.     b300dlhitime:integer;
  575.     closedsystem:boolean;             { DON'T allow new users? }
  576.     swapshell:boolean;                { is swap shell function enabled? }
  577.     eventwarningtime:integer;         { time before event warning }
  578.     tfiledate:string[8];              { last date text-files were inserted }
  579.     swapshelltype:byte;               { swap shell type (0=disk,1=EMS) }
  580.  
  581.     res1:array[1..23] of byte;        { RESERVED SPACE #1 }
  582.  
  583.     sop:acstring;                     { SysOp }
  584.     csop:acstring;                    { Co-SysOp }
  585.     msop:acstring;                    { Message SysOp }
  586.     fsop:acstring;                    { File SysOp }
  587.     spw:acstring;                     { SysOp PW at logon }
  588.     seepw:acstring;                   { see SysOp PWs remotely  }
  589.     normpubpost:acstring;             { post public messages }
  590.     normprivpost:acstring;            { post private messages }
  591.     anonpubread:acstring;             { see who posted public anon }
  592.     anonprivread:acstring;            { see who posted private anon }
  593.     anonpubpost:acstring;             { post anon public messages }
  594.     anonprivpost:acstring;            { post anon private messages }
  595.     seeunval:acstring;                { see unvalidated files }
  596.     dlunval:acstring;                 { DL unvalidated files }
  597.     nodlratio:acstring;               { no UL/DL ratio }
  598.     nopostratio:acstring;             { no post/call ratio }
  599.     nofilepts:acstring;               { no file points checking }
  600.     ulvalreq:acstring;                { uploads require validation by SysOp }
  601.     normnetpost:acstring;             { post NetMail messages }
  602.  
  603.     fsecmd:string[40];                { full screen editor command }
  604.  
  605.     res2:array[1..38] of byte;        { RESERVED SPACE #2 }
  606.  
  607.     maxprivpost:byte;                 { max private posts per call }
  608.     maxnetpost:byte;                  { max NetMail posts per call }
  609.     maxpubpost:byte;                  { max public posts per call }
  610.     maxchat:byte;                     { max chat-pages per call }
  611.  
  612.     res3:array[1..4] of byte;         { RESERVED SPACE #3 }
  613.  
  614.     maxlogontries:byte;               { tries allowed for PW's at logon }
  615.     bsdelay:byte;                     { backspacing delay }
  616.     sysopcolor:byte;                  { SysOp color in chat mode }
  617.     usercolor:byte;                   { user color in chat mode }
  618.     minspaceforpost:integer;          { minimum K drive space left to post }
  619.     minspaceforupload:integer;        { minimum K drive space left to upload }
  620.     backsysoplogs:byte;               { days to keep SYSOP##.LOG }
  621.     wfcblanktime:byte;                { minutes after which to blank WFC menu }
  622.     linelen:byte;                     { default video line length }
  623.     pagelen:byte;                     { default video page length }
  624.  
  625.     res4:array[1..18] of byte;        { RESERVED SPACE #4 }
  626.  
  627.     specialfx:boolean;                { WFC menu "special effects" }
  628.     logonlogoff:boolean;              { enable LOGON.BAT & LOGOFF.BAT? }
  629.     allowalias:boolean;               { allow alias's? (handles) }
  630.     phonepw:boolean;                  { use phone number password in logon? }
  631.     localsec:boolean;                 { is local security ON? }
  632.     localscreensec:boolean;           { is local screen-security ON? }
  633.     globaltrap:boolean;               { trap ALL USER'S activity? }
  634.     autochatopen:boolean;             { does chat buffer auto-open? }
  635.     autominlogon:boolean;             { Auto-Message in logon? }
  636.     bullinlogon:boolean;              { bulletins in logon? }
  637.     lcallinlogon:boolean;             { "Last Few Callers" list in logon? }
  638.     yourinfoinlogon:boolean;          { "Your Info" in logon? }
  639.     multitask:boolean;                { is BBS multitasking? }
  640.     offhooklocallogon:boolean;        { take phone off-hook for local logons? }
  641.     forcevoting:boolean;              { is manditory logon voting active? }
  642.     compressbases:boolean;            { "compress" file/message base numbers? }
  643.     searchdup:boolean;                { search for dup. filenames when UL? }
  644.     slogtype:byte;                    { SysOp log type: File/Printer/Both }
  645.     stripclog:boolean;                { strip colors from SysOp log output? }
  646.     newapp:integer;                   { user# to send new user application to }
  647.     guestuser:integer;                { user# of guest user account }
  648.     timeoutbell:integer;              { minutes before time-out bell }
  649.     timeout:integer;                  { minutes before timeout (logoff) }
  650.     usewfclogo:boolean;               { whether to use WFC menu logo }
  651.     useems:boolean;                   { attempt to use EMS for overlay }
  652.     usebios:boolean;                  { use ROM BIOS for local video output }
  653.     cgasnow:boolean;                  { suppress snow on CGA systems }
  654.  
  655.     res5:array[1..16] of byte;        { RESERVED SPACE #5 }
  656.  
  657.     filearcinfo:array[1..maxarcs]
  658.                 of filearcinforec;    { archive specs }
  659.     filearccomment:array[1..3]
  660.                    of string[80];     { BBS comments for archives }
  661.  
  662.     uldlratio:boolean;                { are UL/DL ratios active? }
  663.     fileptratio:boolean;              { is auto file-pt compensation active? }
  664.     fileptcomp:byte;                  { file point compensation ratio }
  665.     fileptcompbasesize:byte;          { file point "base compensation size" }
  666.     ulrefund:byte;                    { percent time refund for ULs }
  667.     tosysopdir:byte;                  { "To SysOp" file base }
  668.     validateallfiles:boolean;         { validate ALL FILES automatically? }
  669.     remdevice:string[10];             { remote output device (GATEx,COMx,etc) }
  670.     maxintemp:integer;                { max K allowed in TEMP\3\ }
  671.     minresume:integer;                { min K to allow resume-later }
  672.     maxdbatch:byte;                   { max files in DL batch queue }
  673.     maxubatch:byte;                   { max files in UL batch queue }
  674.     unlistfp:byte;                    { # of file points for unlisted DLs }
  675.  
  676.     res6:array[1..21] of byte;        { RESERVED SPACE #6 }
  677.  
  678.     newcredit:longint;                { newuser NetMail credit }
  679.     autocredit:longint;               { auto-validation NetMail credit }
  680.     newsl:byte;                       { newuser SL }
  681.     newdsl:byte;                      { newuser DSL }
  682.     newar:set of acrq;                { newuser AR }
  683.     newac:set of uflags;              { newuser AC }
  684.     newfp:integer;                    { newuser file points }
  685.     autosl:byte;                      { auto-validation SL }
  686.     autodsl:byte;                     { auto-validation DSL }
  687.     autoar:set of acrq;               { auto-validation AR }
  688.     autoac:set of uflags;             { auto-validation AC }
  689.  
  690.     allstartmenu:string[8];           { logon menu to start ALL users on }
  691.  
  692.     res7:array[1..22] of byte;        { RESERVED SPACE #7 }
  693.  
  694.     batchfileext:string[3];           { batch filename extension }
  695.     bulletprefix:string[8];           { default bulletins filename prefix }
  696.  
  697.     res8:array[1..15] of byte;        { RESERVED SPACE #8 }
  698.  
  699.     timeallow:secrange;               { time allowance }
  700.     callallow:secrange;               { call allowance }
  701.     dlratio:secrange;                 { # ULs/# DLs ratios }
  702.     dlkratio:secrange;                { DLk/ULk ratios }
  703.     postratio:secrange;               { post/call ratios }
  704.  
  705.     lastdate:string[8];               { last system date }
  706.     curwindow:byte;                   { type of SysOp window currently in use }
  707.     istopwindow:boolean;              { is SysOp window on top of screen? }
  708.     callernum:longint;                { total number of callers }
  709.     numusers:integer;                 { number of users }
  710.     todayzlog:zlogrec;                { TODAY's ZLOG record }
  711.     postcredits:integer;              { file points/upload credit }
  712.                                       { compensation for posts    }
  713.     rebootforevent:boolean;           { reboot before events? }
  714.     watchdogdoor:boolean;             { WatchDog active in doors? }
  715.     windowon:boolean;                 { is SysOp window on? }
  716.     swappath:string[79];              { swap shell path }
  717.     arcpath:string[40];               { archive utility path }
  718.     protpath:string[40];              { protocol driver path }
  719.  
  720.     res9:array[1..35] of byte;        { RESERVED SPACE #9 }
  721.  
  722.     versionid:word;                   { version (eg $0270 = v2.7) }
  723.   end;
  724.  
  725. (*---------------------------------------------------------------------------*)
  726.  
  727.   fstringrec=         { STRING.DAT : User-definable strings }
  728.   record
  729.     ansiq:string[80];                 { "Do you want ANSI? " string }
  730.     note:array[1..2] of string[80];   { Logon notes (L #1-2) }
  731.     lprompt:string[80];               { Logon prompt (L #3) }
  732.     echoc:char;                       { Echo char for PWs }
  733.     sysopin:string[80];               { "SysOp In" (inside SysOp hours)}
  734.     sysopout:string[80];              { "SysOp Out" }
  735.     engage:string[80];                { "Engage Chat" }
  736.     endchat:string[80];               { "End Chat" }
  737.     wait:string[80];                  { "SysOp Working" }
  738.     pause:string[80];                 { "Pause" }
  739.     entermsg1:string[80];             { "Enter Message" line #1 }
  740.     entermsg2:string[80];             { "Enter Message" line #2 }
  741.     newscan1:string[80];              { "NewScan begin" }
  742.     newscan2:string[80];              { "NewScan done" }
  743.     scanmessage:string[80];           { Message scanning prompt }
  744.     automsgt:string[80];              { Auto-Message title }
  745.     autom:char;                       { Auto-Message border characters }
  746.  
  747.     shelldos1:string[80];             { " >> SysOp shelling to DOS ..." }
  748.     shelldos2:string[80];             { " ... thank you for waiting." }
  749.     chatcall1:string[80];             { "Paging SysOp, please wait..." }
  750.     chatcall2:string[80];             { ">>><*><<<" }
  751.     guestline:string[80];             { "To be a guest ... " }
  752.     namenotfound:string[80];          { "Name NOT found in user list." }
  753.     bulletinline:string[80];          { Bulletin line }
  754.     thanxvote:string[80];             { "Thanks for voting" }
  755.  
  756.     listline:string[80];              { "List files - P to pause" }
  757.     newline:string[80];               { "Search for new files -" }
  758.     searchline:string[80];            { "Search all dirs for file mask" }
  759.     findline1:string[80];             { "Search for descriptions... " }
  760.     findline2:string[80];             { "Enter the string to search for.." }
  761.     downloadline:string[80];          { "Download - " }
  762.     uploadline:string[80];            { "Upload - " }
  763.     viewline:string[80];              { "View interior files - " }
  764.     nofilepts:string[80];             { "Insufficient file points." }
  765.     unbalance:string[80];             { "Your UL/DL ratio is unbalanced" }
  766.  
  767.     pninfo:string[80];                { "P to Pause, N for next dir" }
  768.     gfnline1:string[80];              { "[Enter]=All files" }
  769.     gfnline2:string[80];              { "File mask: " }
  770.     batchadd:string[80];              { "File added to batch queue." }
  771.  
  772.     quotestr1:string[50];             { message quote header #1 }
  773.     quotestr2:string[50];             { message quote header #2 }
  774.  
  775.     mtaskline:string[80];             { "System Under Multi-Tasking..." }
  776.   end;
  777.  
  778. (*---------------------------------------------------------------------------*)
  779.  
  780.   fbflags=            { UPLOADS.DAT status flags }
  781.   (
  782.     fbnoratio,                    { if <No Ratio> active }
  783.     fbunhidden,                   { whether *VISIBLE* to users w/o access }
  784.     fbdirdlpath,                  { if *.DIR file stored in DLPATH }
  785.     fbreserved1,                  { RESERVED FLAG #1 }
  786.     fbusegifspecs,                { whether to use GifSpecs }
  787.     fbreserved2                   { RESERVED FLAG #2 }
  788.   );
  789.  
  790.   ulrec=              { UPLOADS.DAT : File base records }
  791.   record
  792.     name:string[40];              { area description }
  793.     filename:string[12];          { filename + ".DIR" }
  794.     dlpath:string[40];            { download path }
  795.     ulpath:string[40];            { upload path }
  796.     maxfiles:integer;             { max files allowed (1-2000) }
  797.     password:string[20];          { password required }
  798.     arctype:byte;                 { wanted archive type (1..max,0=inactive) }
  799.     cmttype:byte;                 { wanted comment type (1..3,0=inactive) }
  800.     res1:array[1..2] of byte;     { RESERVED SPACE #1 }
  801.     fbstat:set of fbflags;        { file base status vars }
  802.     acs:acstring;                 { access requirements }
  803.     ulacs:acstring;               { upload requirements }
  804.     nameacs:acstring;             { see-names requirements }
  805.     res2:array[1..10] of byte;    { RESERVED SPACE #2 }
  806.   end;
  807.  
  808. (*---------------------------------------------------------------------------*)
  809.  
  810.   userflags=          { USER.LST status flags }
  811.   (
  812.     lockedout,          { if locked out }
  813.     udeleted,           { if deleted }
  814.     trapactivity,       { if trapping users activity }
  815.     trapseperate,       { if trap to seperate TRAP file }
  816.     chatauto,           { if auto chat trapping }
  817.     chatseperate,       { if seperate chat file to trap to }
  818.     slogseperate,       { if seperate SysOp log }
  819.     clsmsg,             { if clear-screen before message }
  820.     avadjust            { if AVATAR color adjust }
  821.   );
  822.  
  823.   userrec=            { USER.LST : User account records }
  824.   record
  825.  
  826.     { configuration information }
  827.  
  828.     name:string[36];                  { user name }
  829.     realname:string[36];              { real name }
  830.     street:string[30];                { mailing address }
  831.     citystate:string[30];             { city, state }
  832.     zipcode:string[10];               { zipcode }
  833.     ph:string[12];                    { user phone # }
  834.     bday:string[8];                   { user birthdate }
  835.     sex:char;                         { user sex }
  836.  
  837.     pw:string[20];                    { user password }
  838.     firston:string[8];                { firston date }
  839.     laston:string[8];                 { laston date }
  840.  
  841.     computer:string[30];              { type of computer }
  842.     occupation:string[40];            { occupation }
  843.     wherebbs:string[40];              { BBS reference }
  844.     note:string[39];                  { SysOp note }
  845.  
  846.     lockedfile:string[8];             { lockout msg to print }
  847.     cols:clrs;                        { user colors }
  848.     linelen:byte;                     { line length (# cols) }
  849.     pagelen:byte;                     { page length (# rows) }
  850.     mpointer:longint;                 { pointer to entry in MACRO.LST }
  851.     userstartmenu:string[8];          { menu to start user out on }
  852.  
  853.     flags:set of userflags;           { flags (see above) }
  854.  
  855.     { system access information }
  856.  
  857.     sl:byte;                          { SL }
  858.     dsl:byte;                         { DSL }
  859.     ac:set of uflags;                 { user flags }
  860.     ar:set of acrq;                   { AR flags }
  861.  
  862.     { message system information }
  863.  
  864.     lastmsg:byte;                     { last message base # }
  865.     pubpost:integer;                  { # public posts }
  866.     privpost:integer;                 { # private posts }
  867.     netpost:integer;                  { # NetMail posts }
  868.     forusr:integer;                   { forward mail to user # }
  869.     credit:longint;                   { NetMail points (credit) }
  870.     debit:longint;                    { NetMail points (debit) }
  871.     mhiread:mhireadr;                 { NewScan high message pointers }
  872.     mzscan:mzscanr;                   { NewScan message bases }
  873.     boardsysop:array[1..5] of byte;   { msg board SysOp }
  874.  
  875.     { file system information }
  876.  
  877.     lastfil:byte;                     { last file base # }
  878.     uploads:integer;                  { # of ULs }
  879.     downloads:integer;                { # of DLs }
  880.     uk:longint;                       { amount ULed (kilobytes) }
  881.     dk:longint;                       { amount DLed (kilobytes) }
  882.     filepoints:integer;               { # of file points }
  883.     flistopt:byte;                    { type of file list type to use }
  884.     fzscan:fzscanr;                   { NewScan file bases }
  885.  
  886.     { system usage information }
  887.  
  888.     ttimeon:longint;                  { total mins spent on }
  889.     loggedon:integer;                 { # times logged on }
  890.     tltoday:integer;                  { # min left today }
  891.     ontoday:byte;                     { # times on today }
  892.     illegal:byte;                     { # illegal logon attempts }
  893.  
  894.     { miscellaneous information }
  895.  
  896.     vote:array[1..20] of byte;        { voting data }
  897.     timebank:integer;                 { # mins in Time Bank }
  898.     timebankadd:integer;              { time added to timebank TODAY }
  899.   end;
  900.  
  901. (*---------------------------------------------------------------------------*)
  902.  
  903.   verbrec=            { VERBOSE.DAT : Verbose descriptions }
  904.   record
  905.     descr:array[1..4] of string[50];
  906.   end;
  907.  
  908. (*---------------------------------------------------------------------------*)
  909.  
  910.   vdatar=             { VOTING.DAT : Voting records }
  911.   record
  912.     question:string[79];          { voting question }
  913.     numa:integer;                 { number of user's who have answered }
  914.     answ:array[0..numvoteas] of
  915.     record
  916.       ans:string[40];             { answer description }
  917.       numres:integer;             { # user's who picked this answer }
  918.     end;
  919.   end;
  920.  
  921.