Changes in 0.07g1 ================= Enhancements ------------ * Rewritten the messagebase code, it is now more flexible and has lesser limits concerning messagetext. Also the internal (line) editor has been rewritten to match the new messagebase code. * The usereditor (in EleBBS and in EleMGR) now can edit the users combined settings. * IRC now sets the useron settings to conferencing. Please update RAL prompt 571 accordingly. * Users now can tag a range of files, eg: 1-12 * External protocols can now support longfilenames as long as the filename is in between quotes ("Long filename.ele") * MIME representation of attachments are now automaticly filtered by EleNEWS if an extract-to area is defined. * EleMGR now uses 4-year-digits dates when appropriate. * EleFILE now uses 4-year-digits for its listings * EleUSER now has a switch -T to prevent it from killing frequent callers. * EleFILE can now export using the same format as RA uses, using the EleFILE EXPORT /RA command. * EleMON now also works on EleBBS/GUI * EleMON now can also take control over an Waiting For Caller screen of EleBBS/W32, EleBBS/OS2 and EleBBS/Linux and during filetransfers. * EleNEWS and NEWSSRV now use an Fidonet style e-mail address when sending newsgroup messages (Arnoud.Aquina@p1.f516.n283.z2.fidonet.org) Scripting Commands Enhancements ------------------------------- (see Q-A.TXT for an explanation of what these functions do) * Added GetXY command * Gosub and Goto can now use variables, eg: Goto #12 will goto a label as defined by var-number 12. Bug Fixes --------- * Reading reversed could sometimes cause EleBBS to skip the last message. * You needed a call to DefineOutput in the Q-A scripts in order for them to actually write something to the file. * Adding files in EleMGR had a too small limit for the input row. * UPLDSCAN.A??, RATIO.A?? and RATIOK.A?? werent correctly supported * Running a Win32 door from EleBBS/GUI could crash EleBBS. * The Window title in Win9x/NT/OS2 wasnt set in EleBBS * EleNEWS would sometimes timeout too soon. * The ^F< macro didnt return the correct information when using a dateformat that used more than 4-digits for the year format. * Users werent able to delete their own messages, even if this was enabled in ELCONFIG * In some weird conditions, EleBBS could crash on some exotic JAM message bases. * Running EleFILE HTMLLIST when the FDBHTML?.Q-A wasnt there would result in an RTE203 * Guest users were also forced a password change * EleNEWS was too slow on retrieving newsarticles. * EleFILE would mentioned "FILES.RDX is out of date" when this wasnt true. * Searching for filenames using wildcards wouldnt utilize longfilenames and yield incorrect results when used with LFN's. * Writing a message to a user in the To: field would force the capitalisation of this name, ignoring the setting in ELCONFIG. * Dates entered in the format YYYY-MM-DD were always considered invalid and rejected * When a newuser signed on, the HUDSON messagebase lastread pointers could get messed up. * If the dateformat was using only 2 digits for its year representation and the year was 2009 or less, EleBBS would show 01-01-0 instead of 01-01-00. * EleUSER's -M command was working reversed * When tagging a file for download which would take longer than the users time, EleBBS would show an incorrect prompt. * The MM-DD.A?? file wasnt displayed, this was not Y2K related. * On multiline systems EleBBS would never check the ?FOS.BAT files in the EleBBS system directory, but only in the current directory. * Displaylocal (Q-A command) didnt work properly, it also showed it to the remote. * Editting the default key in the RAL file was not working properly. * The Q-A command ASK was reversing its parameters, limitting the maximal length of input to 50 characters. * Combined messagereading wasnt working after all. * EleFILE ADD command couldnt handle paths in its commandline * The REPLY kludge in messages wasnt written * The temporary directories EleNEWS used to extract attachments werent removed by EleNEWS * Changing the statusbar in EleBBS/GUI would crash it. * The FDBxx.IDX files would get corrupted when Updating/Touching etc files in EleMGR. * Mentions of a incompatibility of EleBBS' Q-A scripts and RA ones have been made. There is indeed a small incompatibility between RA and EleBBS, this has been done on purpose. The "IF" command in RA can successfully parse the following command: if 3>1 if this is fed to the EleBBS' Q-A parser, it will not accept this, it requires you to use: if 3 > 1 instead. This has been done on purpose, to make it possible for one to use the "IN" and "NIN" commands. If this has not been changed, those commands wouldn't been possible - commands which are used in some of the more popular scripts. * The POSTINFO Q-A command didnt format the date using the users preferences. * LASTCALL.Q-A could sometimes display entries multiple times. * EleBBS/2 could crash upon returning of a door. * Renumbering fileareas wouldnt change the area files * NICK changes in EleBBS' IRC client werent handled properly * EleFILE SORT and EleMGR's filebase sort routines werent using the longfilename. Developer information (Long FileName Support) --------------------------------------------- Starting from EleBBS v0.04.g1 there is support for filenames longer than the standard 8.3 (DOS) format. Because the original RA structures does not allow this, there had to be made an extension to these structures. There has been added an 4-byte field and the "FreeSpace" field has been reduced to remain compatible with earlier versions of EleBBS and other BBS programs/utilties. The added field is called LfnPtr and is basically the same as the LongDescPtr field but gives an file-offset to the longfilename field as stored in the same file as the descriptions are. Where possible (Windows95/98/NT) the short version of the filename is also stored in the normal name to make sure that EleBBS/DOS can handle the file. For more information look at LFNEXAM.ZIP which includes Pascal example code. Structures ---------- type MsgKindsType = (elemsgBoth, elemsgPrivate, elemsgPublic, elemsgROnly, elemsgNoReply); LIMITSrecord = record Security, Ltime, L300, L1200, L2400, L4800, L7200, L9600, L12000, L14400, L16800, L19200, L38400, Llocal, RatioNum, RatioK : SmallWord; PerMinCost : TPReal; L21600, L24000, L26400, L28800, L57600, L64000 : SmallWord; FlexiTime : TPReal; LsessionTime : SmallWord; ResetAmt : SmallWord; ResetPeriod : ResetType; ResetOffset : SmallWord; L31200, L33600, L115200 : SmallWord; FreeSpace : Array[1..11] of Byte; end; FILESHDRrecord = record Name : String[12]; Size, CRC32 : LongInt; Uploader : String[35]; UploadDate, FileDate, LastDL : LongInt; TimesDL : SmallWord; Attrib : Byte; PassWord : String[15]; KeyWord : Array[1..5] of String[15]; Cost : SmallWord; LongDescPtr : LongInt; LfnPtr : Longint; FreeSpace : Array[1..16] of Byte; end; {Attrib - Bit 0 : Deleted 1 : Unlisted 2 : Free (don't adjust ratio) - Does NOT affect "Cost" 3 : Not available (don't allow downloads) 4 : Locked (no kill) 5 : Missing/offline 6 : No time restrictions - always allow DL } MODEMrecord = record ComPort, InitTries : Byte; BufferSize, ModemDelay : SmallWord; MaxSpeed : LongInt; SendBreak, LockModem, AnswerPhone, OffHook : Boolean; InitStr, InitStr2, BusyStr : String[70]; InitResp, BusyResp, Connect300, Connect1200, Connect2400, Connect4800, Connect7200, Connect9600, Connect12k, Connect14k, Connect16k, Connect19k, Connect38k, ConnectFax : String[40]; RingStr, AnswerStr : String[20]; ErrorFreeString : String[15]; Connect21k, Connect24k, Connect26k, Connect28k, Connect57k, Connect64k : String[40]; Connect31k, Connect33k, Connect115k : String[40]; FreeSpace : Array[1..59] of Byte; end; AccessType = (nwsPostNever, nwsPostAlways, nwsPostUseSettings, nwsUseBoth); TagFileRecord = packed record { RA v2.02 but never properly documented } Name : String[12]; { For using LFN, use the RecordNum and } Password : String[15]; { Look it up } Attrib : Byte; AreaNum, RecordNum : SmallWord; Size : Longint; Filedate : Longint; { Not used } Cost : Longint; CDROM : Boolean; FoundFirst : Boolean; { Internally used only } xFerTime : SmallWord; end; { TagFileRecord } TelnetRecord = record MaxSessions : Longint; { Maximum concurrent sessions } ServerPort : Longint; { Port we are listening on } StartNodeWith : Longint; { Starting point for the nodes } Attrib : Longint; { Bit 0: Deny telnet download } { Bit 1: Start EleBBS minized for telnet nodes } ProgramPath : String; { Path were to find EleBBS.EXE } NodeDirectories : String; { Directory TELSRV will switch to } FreeSpace : Array[1..20] of Longint; end; { Telnetrecord } LightbarRecord= record LightX : Byte; { X, Y screen coordinates } LightY : Byte; LowItem : String[135]; { Low-color item } SelectItem : String[135]; { Selected item } Attrib : Byte; { Bit 0: Enabled } FreeSpace : Array[1..100] of Byte; end; { LightbarRecord } NewsArticleRecord= record GroupName : String[100]; ArticleNr : Longint; { Article number in news group } AreaNum : Longint; { Areanumber in MESSAGES.RA } BodyLen : Longint; { Length of the body text } Attribute : Longint; { Bit 0: Tossed into msgbase? } TimesSent : Longint; { Number of tries sending this msgs?, } FreeSpace : Array[1..100] of Longint; { Body : Array[0..BodyLen] of Char; } end; { NewsArticleRecord } NewsGroupStatRecord=record GroupName : String[100]; LoMsgCount : Longint; FreeSpace : Array[1..40] of Longint; end; { NewsGroupStatRecord } NewsServerRecord = record MaxSessions : Longint; { Maximum concurrent sessions } ServerPort : Longint; { Port we are listening on } Attribute : Longint; { Bit 0: Allow Sysop to logon } FreeSpace : Array[0..38] of Longint; end; { Telnetrecord } NewsGroupStat = record GroupName : String[100]; { Group name of these statistics } NumRead : Longint; { Articles read in this newsgroup } NumWrite : Longint; { Articles written in this newsgroup } NumDeny : Longint; { Articles denied in this newsgroup } LastAccessed : String[10]; { Date this newsgroup was last accesed } FreeSpace : Array[0..40] of Longint; end; { NewsGroupStat } ELECONFIGrecord = packed record VersionID : SmallWord; { $007 } UtilityLogFileName : String[250]; { Utilities/Servers logfilename } CapitalizeUserName : Boolean; { Capitalize username/handle? } AttachPassword : String[15]; { pwd needed to attach to a session } FreeSpace : Array[0..8174] of Byte; end; { ELECONFIGrecord } EleMessageRecord = Record AreaNum : Longint; GroupName : String[128]; Attribute : Byte; { Bit 0: Available for usenet } AccessSettings : AccessType; AttachArea : Longint; { Areanumber to put attachments in } FreeSpace : Array[1..37] of Longint; end; { EleMessageRecord } EleFilesRecord = Record AreaNum : Longint; ExportURL, { URL used by EleFILE HTMLIST } ftpPath : String[250]; ftpLoginName, ftpPassword : String[35]; Attribute : Byte; { Bit 0: Available for usenet } FreeSpace : Array[1..140] of Longint; end; { EleFilesRecord } USERONrecord = record Name, Handle : MSGTOIDXrecord; Line : Byte; Baud : SmallWord; City : String[25]; Status, Attribute : Byte; StatDesc : String[10]; FreeSpace : Array[1..90] of Byte; NoCalls : SmallWord; NodeNumber : Longint; {!} LastUpdate : Longint; {unixtimestamp, EleWEB only } end; { Status byte - 0 : Browsing (in a menu) 1 : Uploading/downloading 2 : Reading/posting messages 3 : In a door/external utility 4 : Chatting with sysop 5 : Answering questionnaire 6 : RTC 7 : New user logon 255 : User-defined - display StatDesc Attribute - Bit 0 : Hidden 1 : Wants chat 2 : Reserved for RANETMGR 3 : Do not disturb flag 6 : Ready (0=busy) }