STRUCTP.101
52 KB
59dcc03aa6ef9b85…
(* Ezycom Structures (C) Peter Davies. All Rights Reserved.
Revised for Ezycom V1.01 09/05/1992.
May be freely used by 3rd Party Developers for Ezycom.
Written permission must be granted by Peter Davies for
non-third party use. *)
(* Pascal to C
typedef char unsigned byte;
typedef int unsigned word;
typedef char unsigned boolean;
typedef long signed longint;
All Strings require one extra character.
The first field of a string [0] is the length of the string *)
(* Turbo Pascal defines
DateTime = Record
Year,
Month,
Day,
Hour,
Min,
Sec : word;
end; *)
const
version = '1.01';
productname = 'Ezycom';
versionhigh = 1;
versionlow = 1;
copyright = 'Peter Davies';
maxfree = 685;
userfree = 35;
maxnodes = 128;
maxaka = 16;
maxmess = 400;
maxmessall = 500;
maxfile = 400;
(* Message Types *)
localmail = 0;
netmail = 1;
echomail = 2;
passthru = 3;
waitthru = 4;
allmail = 5;
(* Ask Types *)
askyes = 0;
askno = 1;
askask = 2;
(* Phone Types *)
business = 0;
data = 1;
nophone = 2;
(* File Size Types *)
nosize = 0;
sizebytes = 1;
sizekilobytes = 2;
(* Message Kinds Type *)
public = 0;
private = 1;
privatepublic = 2;
(* Swapping Types *)
SwapwithNone = 0;
SwapwithEMS = 1;
SwapwithXMS = 2;
SwapwithDISK = 3;
SwapwithEMSXMS = 4;
SwapwithXMSEMS = 5;
(* Toss Attribute 1 *)
msgdupedetect = 3;
msgdeletenetmail = 4;
msgechoarearecpt = 5;
msgimportnetsysop = 7;
(* Toss Attribute 2 *)
msgkillbadarchive = 2;
(* User Attributes *)
usr1deleted = 0;
usr1clrscr = 1;
usr1moreprompt = 2;
usr1ansicapable = 3;
usr1nokill = 4;
usr1filepointignore = 5;
usr1fullscreened = 6;
usr1quietmode = 7;
usr2ignorefileratios = 0;
usr2ibmextended = 1;
usr2dateformat = 2;
usr2ignorepaging = 3;
usr2excludeuser = 4;
usr2avatarcapable = 5;
usr2ignoretime = 6;
usr2ignoremessratio = 7;
usr3nopagesound = 0;
usr3pageatlogon = 1;
usr3holdmailbox = 2;
type
asktype = byte;
phonetype = byte;
msgtype = byte;
msgkindstype = byte;
showfilesizetype = byte;
maxstr = string[255];
userstring = string[35];
date = string[8];
str2 = string[2];
str3 = string[3];
str8 = string[8];
str12 = string[12];
str30 = string[30];
file8 = str8;
flagtype = array[1..4] of byte;
grouptype = array[1..4] of byte;
daterecord = record
year : word;
month : byte;
day : byte;
end;
securityrecord = record
security : word;
onflags : flagtype;
offflags : flagtype;
end;
netrecord = record
zone,
net,
node,
point : word;
end;
(* **********************************************************
Filename: <configrec.userbasepath>USERS.BBS
Description: Users File
Records in parrallel with USERSEXT.BBS
Limitations: 65536 records (users) maximum
********************************************************** *)
usersrecord = record
name : userstring;
alias : userstring;
password : string[15];
security : word;
attribute,
(* Bit 0 : Deleted
1 : Clear Screen
2 : More Prompt
3 : Ansi Capable
4 : Don't Kill User
5 : File Points Ignore
6 : Full Screen Ed
7 : Quiet Mode *)
attribute2,
(* Bit 0 : Ignore File Ratios
1 : Extended IBM Characters
2 : On = MMDDYY Off = DDMMYY
3 : Ignore Paging Hours
4 : Exclude User
5 : Avatar Capable
6 : Ignore Menu Time Restrictions
7 : Ignore Message Ratios *)
attribute3,
(* Bit 0 : Do Not Sound Page
1 : Page on Logon
2 : Hold Mailbox
3-7 : [Reserved] *)
attribute4 : byte;
(* Bit 0-7 : [Reserved] *)
flags : FlagType;
dataphone,
voicephone : String[14];
end;
(* **********************************************************
Filename: <configrec.userbasepath>USERSEXT.BBS
Description: Extended Users Information
Records in parrallel with USERS.BBS
Future: V1.02 Structure size increasing to 320 bytes
********************************************************** *)
usersextrarecord = record
location : string[25];
lasttimedate : longint;
(* DOS Packed Date/Time *)
credit,
(* Users netmail credit *)
pending : word;
(* Netmail cost pending export *)
msgsposted,
nocalls,
uploads,
todayk,
timeused,
downloads : word;
uploadsk,
downloadsk : longint;
screenlength : byte;
lastpwdchange : byte;
timebanked,
ksbanked,
filepoints : word;
qwkcompression : byte;
qwkdaysold : byte;
comment : string[40]; (* Sysop/User Comment *)
colour1_2, (* To retrieve the first colour AND 15
To retrieve the second colour SHR 4 *)
colour3_4,
colour5_6,
colour7_8,
bkcolour : byte;
sessionfailures : byte; (* Number of Session Failures since last
successful logon *)
topmenu : str8; (* User's Top Menu *)
filepointsgiven : word;
(* Number of Filepoints credited since last logon *)
dateofbirth : daterecord;
groups : grouptype; (* user's group setting (compressed) *)
regodate, (* Start of Registration *)
firstdate, (* Date of First Logon *)
lastfiledate : word; (* Last Time a New Files Search was done *)
defprotocol : char; (* Blank means no default protocol *)
timeleft : word; (* Users remaining time for today *)
filearea : word; (* Last file area user used *)
messarea : word; (* Last message area user used *)
usernumbermsb,
usernumberlsb : longint;
(* Both Most Significant and Least Significant
User Numbers together make a totally unique
user identification number. This should be
used by door writers to save space, instead
of storing the full users name. Obviously
not all doors would fit into this category,
but most should *)
qwkmaxmsgs : longint;
qwkmaxmsgsperarea : word;
extraspace : array[1..userfree] of byte;
end;
(* **********************************************************
Filename: <userbasepath>LASTCOMB.BBS
Description: Used be Ezycom to lastread & combined info
Note: This record adjusts when the number of
conferences change (in steps of 16).
Eg: 16 conferences takes up HALF of the
diskspace of 32 conferences
********************************************************** *)
userslastrecord = record (* LASTCOMB.BBS *)
combinedinfo : word;
lastreadinfo : array[0..15] of word;
end;
(* **********************************************************
Filename: <configrec.menupath>????????.MNU
Description: Menu Structure
Record 0 has a different record structure
Limitations: 51 records maximum
********************************************************** *)
mnurecord = record (* *.MNU *)
typ : byte;
security : word;
flags : flagtype;
display : string[90];
hotkey : char;
(* Ctrl-A means Automatic Option *)
miscdata : string[90];
foreground,
background : byte;
timeonline : byte;
timestart : word;
timeend : word;
(* Hours is "* 100" *)
attribute : byte;
(* bit 0 : Test Ratio K
bit 1 : Test Message/Call Ratio
bit 2 : Test Age <config age> and Over
bit 3 : Test Ratio Files
bit 4-7 [ Reserved ] *)
node : byte;
end;
(* **********************************************************
Filename: PROTOCOL.EZY
Description: Protocol Record Structure
Limitations: 60 records maximum
********************************************************** *)
protocolrecord = record (* PROTOCOL.EZY *)
name : string[15];
activekey : char;
attribute : byte;
(* bit 0 = enable/disable
bit 1 = batch protocol
bit 2 = [ Reserved ]
bit 3 = both directions
bit 4 = up/down
bit 5 = bidirectional
bit 6-7 [ Reserved ] *)
logfilename,
ctlfilename,
dnctlstring : string[60];
dncmdstring,
upcmdstring : string[100];
uplogkeyword,
dnlogkeyword,
uperrkeyword,
dnerrkeyword,
uperr2keyword,
dnerr2keyword : string[10];
xfernamewordnum : Byte;
xfercpswordnum : byte;
security : word;
flags : flagtype;
efficiency : byte;
end;
configrecord = record (* CONFIG.EZY *)
version : string[8];
system : string[40];
(* Constant *) sysop : userstring;
logpath,
textpath,
menupath,
mnurampath,
netmailpath,
nodelistpath,
msgpath,
filepath,
editorpath,
bipath,
temppath,
userbasepath,
avatarpath,
ascpath,
asclowpath,
filemaint,
(* Unused *) fileattachpath,
soundpath,
fastindexpath : string[60];
systempwd, (* Password to Logon System *)
sysoppwd, (* Password to Sysop Functions *)
newuserpwd : string[15]; (* Password for Newuser *)
newtopmenu : str8; (* NewUser TopMenu *)
(* Unused *) freespace2 : longint;
inboundmail,
outboundmail,
uploadpath,
swapfile,
multipath : string[60];
(* Not in 1.02 *) brackets : string[2];
inactivitytime,
minmesscheck,
maxlogintime : byte;
(* Constant *) multiline : boolean;
answerdelay : byte;
shellswap,
highbit,
disppass,
asklocalpass,
fastlogon,
sysopremote,
printerlog,
phone1ask,
colourask,
aliasask,
dobask,
phoneforce,
direct_video,
snow_check : boolean;
swaponezymail : byte;
screen_blank : byte;
oneword : boolean;
checkmail,
checkfile,
ansiask,
fullscreenask,
clearask,
moreask,
avatarask,
extendask,
usdateask : asktype;
phone2ask : boolean;
phoneformat : string[14];
nameprompt,
pwdprompt,
shellprompt,
shell2prompt,
enterprompt,
chatprompt,
listprompt,
graphicprompt,
fseprompt,
moreprompt,
waitphone,
chat2prompt,
screenlengthprompt,
screenclearprompt,
locationprompt,
userscanprompt,
loadprompt,
avatarprompt,
aliasprompt : string[60];
security,
logonsecurity : word;
flags : flagtype;
minpasslength,
(* Constant *) dispfwind,
(* Constant *) dispbwind,
(* Constant *) disppopupf, (* Popup Forground *)
(* Constant *) disppopupborder, (* Popup Border *)
(* Constant *) disppopupb, (* Popup Background *)
(* Constant *) dispf,
newusercol1,
comport,
passlogons : byte;
doblogon : byte;
printerport,
(* 0 : LPT1
1 : LPT2
2 : LPT3
3 : COM1
4 : COM2
5 : COM3
6 : COM4 *)
passtries : byte;
topmenu : string[8];
maxtimebank,
maxksbank,
watchmess,
netmailcredit,
ansiminbaud,
fileminbaud,
slowbaud,
minloginbaud : word;
lowsecuritystart,
lowsecurityend,
slowstart,
slowend : word;
quotestring : string[5];
unknownarea : byte;
(* 0 : Kill Messages
1 : Make a New EchoMail Area
2 : Make a New PassThru Area *)
(* Not in 1.02 *) SBIrq : byte;
forcecrashmail,
optioncrashmail,
netmailfileattach : word;
(* Constant *) popuphighlight : byte; (* Popup Highlight *)
(* Constant *) tossattr2 : byte;
(* Bit 0 : Route Mail (Off = Direct)
1 : [Reserved]
2 : Kill Bad Archives
3 : ARCMail 0.6 compat
4-7 [Reserved] *)
maxpages,
maxpagefiles,
pagelength : byte;
pagestart : array[0..6] of word;
pagemessboard,
(* Message Board for Paging (0=Not In Use) *)
(* Unused *) localfattachsec,
(* Unused *) sectouploadmess,
sectoupdateusers,
readsecnewecho,
writesecnewecho,
sysopsecnewecho,
secreplyvianetmail : word;
netmailkillsent : asktype;
swaponarchive : byte;
(* Constant *) qwkfilename : str8; (* QWK Unique Filename *)
(* Constant *) popuptext : byte; (* Popup Text *)
pageend : array[0..6] of word;
(* Constant *) newareagroup : array[1..16] of char;
(* Constant *) qwkmaxmail : longint;
badmsgboard,
incomingcallstart,
incomingcallend : word;
(* Not in 1.02 *) SBHex : word;
(* Sound Blaster Hex Address *)
altf : array[1..10] of string[60];
ctrlf : array[1..10] of string[40];
(* Constant *) maxmess,
(* Constant *) maxfile,
fp_credit : word; (* Newuser Filepoints *)
ks_per_fp, (* Number of Kilobytes per FP *)
fp_upload, (* Filepoints Upload Credit *)
rego_warn_1,
rego_warn_2 : byte;
badpwdmsgboard : word;
(* Failed Logon Message Board to Sysop (0=Off) *)
min_space_1 : word;
swapbimodem : boolean;
modembusy : boolean; (* Toggle DTR or ATH1 *)
scrheight : boolean; (* 43/50 line mode *)
(* Not in 1.02 *) msgtmptype : boolean;
(* True = MSGTMP
False = MSGTMP.<node> *)
swapupload : boolean;
phonelogon : byte;
carrierdetect : byte; (* Carrier Detect (Default=$80) *)
newfileshighlight : boolean;
(* Word in 1.02 *) max_descrip : byte;
min_descrip : byte;
requestreceipt : word;
ushowdate : boolean;
ufilesizek : showfilesizetype;
uuploader,
udownloadcount,
(* Unused *) freespace11,
ushowsecurity,
sshowdate : boolean;
sfilesizek : showfilesizetype;
suploader,
sdownloadcount,
(* Unused *) freespace10,
sshowsecurity,
ushowtime,
ushowfp,
sshowtime,
sshowfp : boolean;
fp_percent : word; (* Download Filepoints Credit *)
autodetect : byte;
(* Bit 0 : Auto Detect ANSI
1 : ANSI Detect for NewUser
2 : Auto Detect IEMSI
3 : IEMSI Detect for NewUser
4-7 [Reserved] *)
dispsecurityfile,
askforpagereason,
delincompletefiles,
(* Unused *) externalconvert : boolean;
(* Constant *) swaponfeditview : byte;
(* Unused *) freespace13,
secfileschar,
passchar,
(* Not in 1.02 *) highbitchar : char;
(* Unused *) conversiononmaster : byte;
(* Not in 1.02 *) leftbracket : string[1];
(* Not in 1.02 *) rightbracket : string[1];
ignorefp : word; (* Min Security to Ignore FPs *)
menuminage : byte; (* Minimum Age for Age Checks *)
(* Constant *) killnullnetmail : boolean;
modemeff : array[1..11] of word;
modembaud : array[1..11] of word;
modemconnect : array[1..11] of string[15];
modemerr : array[1..11] of byte;
(* Constant *) tossattr : byte;
(* Bit 0-2 [Reserved]
3 : Dupe Detection
4 : Delete Netmail on Import
5 : Keep EchoArea Node Receipts
6 : Allow Message Rescan
7 : Import Messages to Sysop *)
usercol1_2,
usercol3_4,
usercol5_6,
usercol7_8,
userbkcol : byte;
newusercol2 : byte;
chstatcol : byte;
getentercol : byte;
usdateforsysop : boolean;
ezyovrpath : string[60];
sysopalias : userstring;
ovrems : boolean;
swapezy : byte;
filesecpath : string[60];
(* Unused *) scanvirus : boolean;
multitasker : byte;
(* 0 = Do Not Detect or Use Any MultiTasker
1 = Auto-Detect
2 = Desqview
3 = Double DOS
4 = OS 2
5 = MultiDOS Plus
6 = Taskview
7 = Topview
8 = PC MOS
9..255 [Reserved] *)
maxbaud : word; (* longint in 1.02 *)
lockedport : boolean;
filereqsec : word;
autoanswer : boolean;
initresponse : string[10];
ringstring : string[10];
inittries : byte;
initstring1 : string[60];
initstring2 : string[60];
busystring : string[20];
answerstring : string[20];
mailerstring : string[60];
modemstart : word;
modemend : word;
modemdelay : byte;
sendbreak : boolean;
externaleditor : string[60];
defaultorigin : string[50];
(* Constant *) newareastmess : array[1..16] of word;
(* New Area Start Message Board *)
uploadcredit : word;
(* Upload Credit Percentage *)
systemlocation : string[35];
shownewfileschar : byte;
(* 0 - No
1 - ASCII Only
2 - Always *)
(* Constant *) zone : array[1..16] of word;
net : array[1..16] of word;
node : array[1..16] of word;
point : array[1..16] of word;
(* V1.02 this will be: netaka : array[1..16] of netrecord; *)
(* Constant *) netmailboard : array[1..16] of word;
(* Constant *) domain : array[1..16] of string[20];
nocarrierstring : string[20];
guestaccount : userstring;
freespace : array[1..maxfree] of byte;
end;
(* Note: Strings that are marked CONSTANT, should be constant
across all CONFIG.XXX. *)
compressrecord = record
echounarccmd : array[0..5] of String[12];
echounarcpar : array[0..5] of String[18];
echoarccmd : array[0..6] of String[12];
echoarcpar : array[0..6] of String[18];
end;
stringrecord = record
compress : compressrecord;
end;
limitsrecord = record (* LIMITS.EZY *)
security : word; (* Security level *)
time : word; (* Time limit per day *)
limit : array[1..11] of word;
ratio : byte; (* File Ratio *)
credit : word; (* File Ratio Credit *)
ratiok : byte; (* Kilobyte Ratio *)
creditk : word; (* Kilobyte Ratio Credit *)
regodays : word; (* Registration in Days *)
creditmess : word; (* PCR Credit *)
mess : word; (* PCR (%) *)
timepercall : word; (* Time limit per call 0=Disabled *)
callsperday : byte; (* Maximum Calls Per Day 0=Disabled *)
freespace : byte;
end;
filepathrecord = record (* FILEPATH.EZY *)
filepath : string[60];
security : word;
flags : flagtype;
uploadarea : word;
password : string[8];
attribute : byte;
(* Bit 0 = CD Rom Path
1 = Show as Not Found
2 = Free Downloads
3 = Age Check
4-7 [Reserved] *)
end;
filesecrecord = record (* FILESEC.EZY *)
filename : string[12];
security : word;
flags : flagtype;
password : string[8];
attribute : byte;
(* Bit 0 = [Reserved]
1 = Show as Not Found
2 = Free Downloads
3 = Age Check
4-7 [Reserved] *)
end;
filelistrecord = record (* FILEXXX.EZY *)
filename : string[12];
description : string[50];
fsize : longint;
fdate : word;
attribute : byte;
(* Bit 0 : checked
1 : [Reserved]
2 : offline
3 : [Reserved]
4 : private
5 : deleted
6 : [Reserved]
7 : security *)
attribute2 : byte;
(* bit 0-7 [Reserved] *)
uploader : userstring;
downloads : word;
end;
filerecord = record (* FILES.EZY *)
name : string[30];
attribute,
(* bit 0 : keep files offline
1 : offline allowed
2 : sortby date
3 : sortby alpha
4 : master list
5 : Age Check to View
6-7 [ Reserved ] *)
convert : byte;
(* 0 : none
1 : zip
2 : lzh
3 : arj
4 : pak
5 : arc
6 : zoo
7-255 : [ Reserved ] *)
filegroup : char;
uptemplate,
upfilepath : word;
freespace : longint;
security : word;
flags : flagtype;
syssecurity : word;
sysflags : flagtype;
end;
predownloadrecord = record (* EZYDOWN.<node> *)
filename : string[12];
locationfile : maxstr;
fsize : longint; (* KiloBytes *)
freedown : boolean;
timetodown : longint; (* Seconds *)
deleted : boolean;
end;
preuploadrecord = record (* EZYUP.<node> *)
filename : string[12];
description : string[50];
isdupe : boolean;
end;
maint_record = record (* MAINT1.BBS, MAINT2.BBS *)
filename : string[12];
filepoint : word;
downloader : userstring;
uploader : userstring;
end;
fastpointerrecord = array[1..730] of longint; (* FFPTR.EZY *)
fastindexrecord = record (* FFIDX.EZY *)
name : string[12];
template : word; (* Filearea 1 -> *)
deleted : boolean;
end;
(* **********************************************************
Filename: <multipath>ONLINE.BBS
Description: Used by Ezycom to store online information
Minimum Size: 1 Record
Maximum Size: 250 Records
********************************************************** *)
onlinerecord = record
name : userstring;
alias : userstring;
status : byte;
(* 0 - Active
1 - [Reserved]
2 - Downloading
3 - Uploading
4 - BiModem
5 - Message Browsing
6 - Door
7 - Chat with Sysop
8 - Chat with Other Users Channel 000
...................................
207 - Chat with Other Users Channel 199 (200 channels)
208 - 252 [Reserved]
253 - Node Not Active in Any Way
254 - User Logging On
255 - Waiting for Caller *)
attribute : byte;
(* Bit 0 - Quiet Do Not Disturb *)
baud : longint;
location : string[25];
end;
(* **********************************************************
Filename: <multipath>MESSNODE.<node>
Description: Used by Ezycom for conferencing
Minimum Size: 0 Records (Maybe not present!)
Maximum Size: Unlimited
Sharing:
Writing: Denynone + WriteOnly
Reading: Denyall + ReadWrite (Truncate after read)
********************************************************** *)
multimessagerecord = record
from : userstring;
message : string[80];
private : boolean;
end;
(* **********************************************************
Filename: <userbase>BESTSTAT.BBS
Description: Used by Ezycom to store best user stats
Minimum Size: 0 Records (Maybe not present!)
Maximum Size: 200 Records
********************************************************** *)
bestuserrecord = record
bestname : array[1..7] of userstring;
(* BestName[1] is for BestMessages
BestName[2] is for BestCalls
.....
BestName[7] is for BestDownK *)
bestmessages,
bestcalls,
bestups,
bestdns,
bestfps : word;
bestupk,
bestdownk : longint;
end;
(* **********************************************************
Filename: <msgpath>\AREA<<area-1>/4+1>\MSGH<area>.BBS
Description: Used by Ezycom to store message text
********************************************************** *)
msghdrrecord = record
prevreply,
nextreply : word;
(* 0 = No Reply Chain *)
startposition,
(* Physical Start Position in MSGT???.BBS *)
messagelength : longint;
(* Message Length including Null Terminator *)
destzone,
destnet,
destnode,
destpoint,
(* V1.02 this will be DestNet *)
origzone,
orignet,
orignode,
origpoint,
(* V1.02 this will be OrigNet *)
cost : word;
msgattr,
(* Bit 0 : Deleted
1 : Netmail pending export
2 : [Reserved]
3 : Private
4 : Received
5 : Echomail pending export
6 : Locally generated msg
7 : Do not kill message *)
netattr,
(* Bit 0 : Kill/sent
1 : Sent
2 : File Attach
3 : Crash
4 : File Req
5 : Request Receipt
6 : Audit Request
7 : Is a Return Receipt *)
extattr : byte;
(* Bit 0-7 [Reserved] *)
posttimedate : longint;
(* DOS Format Packed DateTime *)
recvtimedate : longint;
(* DOS Format Packed DateTime *)
whoto,
whofrom : userstring;
subject : string[72];
end;
(* **********************************************************
Filename: <msgpath>\AREA<<area-1>/4+1>\MSGT<area>.BBS
Description: Used by Ezycom to store message text
********************************************************** *)
(* Message Text
Each text part of the message starts at 'startposition',
and continues on until a NULL terminator is found, or end
of file is reached (shouldn't happen, but just in case). The
message text length is limited by Turbo Pascal to 16 Meg
in size. Each message is contained of plain text, with 0x08D
terminators for wrapped lines or 0x0D terminators for hard
carriage returns *)
(* **********************************************************
Filename: <msgpath>MSGFAST.BBS
Description: Used by Ezycom for mail checks
********************************************************** *)
msgfastrecord = record
whoto : longint;
(* standard 32 Bit CRC on whoto in MSGH???.BBS
Username is CRCd in UPPERCASE, and does not
include null terminator or "white space" *)
msgboard : word;
msgnumber : word;
end;
(* **********************************************************
Filename: <msgpath>MSGEXPRT.BBS
Description: Used by Ezycom to tell EzyNet/EzyMail whether
an area needs scanning or not
********************************************************** *)
needscan = boolean;
needscanrecord = array[1..maxmess] of needscan;
(* **********************************************************
Filename: <systempath>MESSAGES.EZY
Description: Used by Ezycom to store message areas
Size: 500 records
********************************************************** *)
messagerecord = record (* MESSAGES.EZY *)
name : string[30];
areatag : string[30];
typ : msgtype;
msgkinds : msgkindstype;
attribute,
(* Bit 0 : Allow Aliases
1 : Use Alias
2 : Use Alias, Ask for Aliases
3 : Test Age (use config age)
4 : Combined Area Access
5 : Local File attaches
6 : Keep Private Bit on Incoming EchoMail
7 : [Reserved] *)
attribute2,
(* Bit 0 : Show Seenby Lines
1 : [Reserved]
2 : Strip Forward Seenbys
3-4 [Reserved]
5 : Areafix Info Visible
6 : Initial Combined Area Access
7 : [Reserved] *)
attribute3 : byte;
dayskill,
recvkill : byte;
countkill,
kilobytekill,
readsecurity : word;
readflags : flagtype;
writesecurity : word;
writeflags : flagtype;
sysopsecurity : word;
sysopflags : flagtype;
originline : string[50]; (* Not in V1.02 *)
originaddress : byte;
seenby : array[1..maxaka div 8] of byte;
areagroup,
messgroup : char;
destnodes : array[1..maxnodes div 8] of byte;
(* Nodes 1 to 8 - DestNode[1]
Nodes 9 to 16 - DestNode[2]
Nodes 17 to 24 - DestNode[3]
etc *)
echomailfeed : byte;
(* 0=No Uplink *)
end;
(* **********************************************************
Filename: <systempath>ECHOMGR.EZY
Description: Used by Ezycom to store node information
Size: 128 records
********************************************************** *)
echomgrrecord = record
destpoint,
destnode,
destnet,
destzone : word;
(* V1.02 this will be: destnet : netrecord *)
groups : string[26];
(* V1.02 this will be: groups : array[1..4] of byte *)
compress : byte;
(* 0 : Compress to ZIP
1 : Compress to LZH
2 : Compress to ARJ
3 : Compress to ARC
4 : Compress to PAK
5 : Compress to ZOO
6 : Compress to LZH (Using LHA Old method though) *)
attribute : byte;
(* Bit 0 : Node Active
1 : Crash Mail
2 : Hold Mail
3 : Can Create New Echos
4 : Add to Export on New Echo
5-7 [Reserved] *)
passwordto,
passwordfr : string[20];
dayshold,
sendpkttype : byte;
(* 0 : Type 2
1 : Type 2+
2-255 [Reserved] *)
end;
(* **********************************************************
Filename: EVENTS.EZY (multinode file)
Description: Used by Ezycom to event information
Minimum Size: 1 record
Maximum Size: 65000 records
********************************************************** *)
eventrecord = record
attribute : byte;
(* Bit 0 = Enabled *)
starttime : word;
(* Hi Bit = Hour
Low Bit = Min *)
errorlevel : byte;
days : byte;
(* Bit 0 : Sunday
1 : Monday
...
6 : Saturday
7 : [ Reserved ] *)
lasttimerun : word;
end;
(* **********************************************************
Filename: <systempath>TODAY.BBS
<systempath>YESTER.BBS
Description: Used by Ezycom to today's/yesterday's callers
********************************************************** *)
ontodayrecord = record
line : byte;
name : userstring;
alias : userstring;
location : string[25];
baudrate : word;
logontime : word;
logofftime : word;
didwhat : byte;
(* Bit 0 : (N) NewUser
1 : (U) Upload
2 : (D) Download
3 : (R) Read Mail
4 : (S) Sent Mail
5 : (O) Outside
6 : (C) Chat
7 : (P) Paged *)
end;
(* **********************************************************
Filename: <systempath>TIME<node>.BBS
Description: Used by Ezycom to store usage information
********************************************************** *)
useagerecord = record
startdate : word;
busyperhour : array[0..23] of longint; (* Minutes Used *)
busyperday : array[0..6] of longint; (* Minutes Used *)
end;
(* **********************************************************
Filename: <systempath>MSGINFO.<node>
Description: Used by Ezycom and EzyEdit to interface to
each other
********************************************************** *)
fserecord = record (* MSGINFO.<node> *)
whofrom : userstring; (* User Who wrote message *)
orignet : netrecord; (* From Net Address *)
whoto : userstring; (* User Who message is to *)
destnet : netrecord; (* To Net Address *)
subject : string[72]; (* Subject of message *)
returnstatus : byte; (* Return Status *)
(* 0 : FSE Record Not Used
1 : Message Saved
2 : Message Aborted
3 : User Inactivity
4 : User Hungup
5 : Sysop Hungup
6-255 : Reserved *)
attribute : byte;
(* Bit 0 : Can Change Subject
1 : Can Change Whoto
2 : Can Change Private
3 : Private Message
4 : Is Message Forwarded (False = Quoted)
(Providing MSGTMP.<node> exists)
5 : Netmail Message
6 : [Reserved]
7 : EchoMail Message *)
end;
(* **********************************************************
Filename: <msgbasepath>MSGRSCAN.BBS
Description: Used by EzyNet and EzyMail for Rescanning a
Message Area for a particular node
********************************************************** *)
rescanrecord = record
nodetorescan : byte;
msgboard : word;
end;
(* **********************************************************
Filename: <msgbasepath>MSGSTATS.BBS
Description: Written by EzyMail for echomail statistics
********************************************************** *)
msgstatsrecord = record
tossedboard : array[1..maxmessall] of word;
(* Number of Messages Tossed to Msg Board *)
scannedboard : array[1..maxmessall] of word;
(* Number of Messages Tossed to Msg Board *)
tossednode : array[1..maxnodes] of longint;
(* Number of Messages Tossed to EchoArea Node *)
end;
(* **********************************************************
Filename: <systempath>EXITINFO.<node>
Description: Used by Ezycom in Type 15 exits to return
Used by Ezycom in Type 7 exits for door
information
Future: In V1.02 totally new structure as "userextra"
is increasing in size
********************************************************** *)
exitinforecord = record
baud : word; (* Speed between Modem/Modem *)
lockedbaud : word; (* Speed between Computer/Modem *)
comport : byte; (* Comport 1 = Com1, etc *)
efficiency : word; (* Baud Rate efficiency *)
userrecord : word; (* User Record Number (0=User1) *)
userinfo : usersrecord;
userextra : usersextrarecord;
sysopname, (* Sysop's Name *)
sysopalias : userstring;
system : string[40];
downloadlimit : word; (* Maximum Download Limit *)
timelimit : word; (* Daily Time Limit *)
timetakenevent : word;
(* Number of Minutes Taken from User for Event *)
timecreated : longint;
(* Number of Seconds since Midnight *)
timeofnextevent : longint;
(* Number of Seconds since Midnight *)
timetillnextevent : longint;
(* Number of Seconds after Time Created *)
dayofnextevent : byte;
(* 0 = Sunday
..........
6 = Saturday
7 = NOEVENT *)
errorlevelofnextevent : byte;
(* Errorlevel to return from next event *)
ratio : byte; (* File Ratio *)
credit : word; (* File Ratio Credit *)
ratiok : byte; (* Kilobyte Ratio *)
creditk : word; (* Kilobyte Ratio Credit *)
regodays : word; (* Registration Days *)
creditmess : word; (* Post Call Ratio Credit *)
mess : word; (* Post Call Ratio *)
logintimedate : datetime; (* Login Datetime *)
stack : array[1..20] of str8; (* Menu Stack *)
stackpos : byte; (* Menu Stack Position (0 = No Stack) *)
curmenu : str8; (* Current Menu *)
oldpassword : string[15];
limitrecnum : word; (* Limits Record Being Used *)
baudrecnum : byte; (* BaudRate Record Being Used *)
hibitreplace : char; (* Hi-Bit Replacement Character *)
maxpages : byte; (* Maximum Pages *)
pagedsysop : byte; (* Number of Times User has Paged Sysop *)
wantchat : boolean;
pagestart,
pageend : longint; (* Number of Seconds since Midnight *)
pagelength : byte; (* Page Length *)
echoentered,
netentered,
nextsysop : boolean;
inactivitytime : word; (* Seconds *)
protrecnum : byte;
(* Default Protocol Record Number 0=NoDefault *)
protname : string[15]; (* Default Protocol Name *)
didwhat : byte; (* Didwhat flag for Todays Callers *)
pagereason : string[60];
mtasker : byte;
iemsi_session : boolean;
iemsi_req1,
(* Bit 0 = News
1 = Mail
2 = File
3 = Clrscr
4 = Quiet
5 = More
6 = FSE
7 = [Reserved] *)
iemsi_req2,
(* Bit 0-7 = [Reserved] *)
iemsi_scrlen : byte;
(* Screen Length for current session
If NOIEMSI session, this is set to the
users screen length *)
iemsi_prot,
(* Bit 0 = ZModem
1 = SEAlink
2 = Kermit *)
iemsi_crt,
(* 0 = TTY
1 = ANSI
2 = AVT0+
3 = VT100
4 = VT52 *)
iemsi_cap : byte;
(* Bit 0 = CHT
1 = MNU
2 = TAB
3 = ASCII8 *)
pagesound : boolean;
freespace : array[1..99] of byte;
end;
sysinforecord = record
callcount : longint;
lastcaller : userstring;
filessizek : longint; (* Updated by Ezyff -C *)
newusers,
newfiles,
newmessages : word; (* Does NOT include Inbound Echomail *)
lastalias : userstring;
laststarttime : word;
extraspace : array[1..80] of byte;
end;
const
fnoinherit = 128; { No Interitence Flag }
fdenyall = 16; { These are MUTUALLY EXCLUSIVE!!!! }
fdenywrite = 32; { Only ONE of THESE SHOULD BE USED }
fdenynone = 64; { }
fdenyread = 48; { }
freadonly = 0; { THESE ALSO!!! }
fwriteonly = 1; { }
freadwrite = 2; { }
(*
*****************************
Sample PASCAL Source Code for
location of CONFIG, and
for date conversion.
*****************************
**************************
Returns True if file found
**************************
function find(path : maxstr) : boolean;
var
srec : searchrec;
begin
findfirst(path,anyfile,srec);
if doserror = 0
then find := true
else find := false;
end;
****************************************************
Returns the path of where to find CONFIG
ie findw("CONFIG") would return the path of where
it can be found. An additionial FIND should be done
on the result, as there may not be a CONFIG in the
system dir.
itos(x : longint) is simply a function that returns
the number in a string format.
node is the variable containing the current node
systempath is the path where the environment variable
EZY points to. If not present, it is the current
directory on start up.
****************************************************
function findw(s : maxstr) : maxstr;
begin
if find(systempath + s + '.' + itos(node)) then
findw := systempath + s + '.' + itos(node) else
if find(s + '.EZY') then
findw := s + '.EZY' else
findw := systempath + s + '.EZY';
end;
***********************
Checks for a valid date
***********************
function checkdate(yy,mm,dd : word) : boolean;
const
daysinmonth : array[1..12] of word =
(31,29,31,30,31,30,31,31,30,31,30,31);
begin
if (mm < 1) or (mm > 12) then
begin
checkdate := false;
exit;
end;
if (dd < 1) or (dd > daysinmonth[mm]) then
begin
checkdate := false;
exit;
end;
if (yy < 1900) then
begin
checkdate := false;
exit;
end;
if ((yy mod 4 <> 0) and (dd = 29) and (mm=2)) then
checkdate := false else
checkdate := true;
end;
***********************
Converts a Date to Word
***********************
function datetoword(yy,mm,dd : word) : word;
var
tofield : word;
tempbyte : byte;
begin
if not checkdate(yy,mm,dd) then
begin
datetoword := 65535;
exit;
end;
tofield := dd - 1;
tofield := tofield + ((mm - 1) shl 5);
if (yy < 1980) or (yy > (1980 + 127)) then
begin
datetoword := 65535;
exit;
end;
yy := yy - 1980;
tofield := tofield + (yy shl 9);
datetoword := tofield;
end;
***********************************
Converts a Word to a DATE
If date is ok then true is returned
***********************************
function wordtodate(temp : word;var yy,mm,dd : word) : boolean;
begin
if (temp = 65535) then
begin
wordtodate := false;
exit;
end else
wordtodate := true;
dd := temp and 31 + 1;
temp := temp shr 5;
mm := temp and 15 + 1;
temp := temp shr 4;
yy := (temp and 127) + 1980;
end;
*)