Changes in 0.08g1 ================= Changes ------- * Due to lack of performance, stability and most of all testers, EleBBS/GUI has been discontinued starting from this version. EleBBS/GUI is a version that originally started to fill a Sysop's demand for GUI programs. EleBBS/W32 originally started as a development version for me personally, which later was released to the betateam (because of demand). EleBBS/GUI gained less and less beta-testers and the need (or added value) of EleBBS/GUI prooved to be less and less. Enhancements ------------ * EleIRC now understands DCC retrieval of files. This means that users using EleIRC now can download files from other users on IRC. To enable DCC gets, add the /DCCBOARD=xxx where XXX is the number of an message areanumber that EleIRC will use to post the attachment to. There have been a few RAL prompts added to support this, so please be sure to update all your RAL files! Command reference: /DCC GET [xx] - get file xx from the remote /DCC ENABLE - enable DCC requests (impossible if /DCCBOARD is empty) /DCC DISABLE - disable DCC requests /DCC LIST - list all current DCC files. Doing a /DCC GET on a file which is already downloading will result in a status of how its currently is. * EleNEWS now use another way to mark messages as already sent. Please make *ABSOLUTELY SURE* that you have sent all EleNEWS messages before upgrading to the latest EleNEWS. Then, please clear out all your EleNEWS areas (delete all messages). This is to prevent EleNEWS from sending all messages back to the newsgroup. * Added another user-macro, the ^F@ will display the users age. * EleNEWS now supports the command -U@ to specify a username and a password to logon to your newsserver. * EleNEWS now intelligently (...) resets the highest message count on the newsgroup server when it finds this number to be below the last recorded number. * Added EleMAIL. Please check the program to see what it does. * ELCONFIG now displays "Unlm." when an unlimited value is used. * EleFILE ADOPT now logs which files are being added to the log. * When doing a filename or keyword search, the last area searched is now cleared from the screen. * Added another Systemcode-macro, ^K# will display the semaphore path. This can be usefull when writing scripts. * The authors of Mystic BBS, Synchronet BBS and EleBBS have joined forces in creating a standard for 32-bit doors. This resulted in the DOOR32.SYS standard which now is available for general review and usage. You can check its official website out at http://www.mysticbbs.com/door32/ - as well as some doors that actually use this standard. Scripting Commands Enhancements ------------------------------- (see Q-A.TXT for an explanation of what these functions do) * The SetSecurity command now understands variables * Added command GETENV * Added FILEOPEN, FILEWRITE, FILEREAD and FILECLOSE commands to the Q-A scripting language, see the examples for examples on these commands. * The CALC command now understands the '%' operator. This performs a MOD operation. * Added command DELETEMSG which deletes a message from a specified area, it can accept the following parameters: DeleteMsg All parameters can be proceeded with an # which makes it an variable referer. * FileExist now also accepts variables. * Added command FileDelete. * Implemented some nice things in the scripting language. Now virtually all EleBBS config files can be read and write to using some scripting codes: Cfg_FileOpen Cfg_FileRead Cfg_FileWrite Cfg_FileSeek Cfg_GetInfo Cfg_SetInfo Cfg_FileError Filesort can be any of the following file sorts: LIMITS, LANGUAGE, LASTCALL, FDBHDR, FDBIDX, USERSBBS, USERSIDX, SYSINFO, MENU, EVENTS, MESSAGES, GROUP, FILES, MODEM, CONFIG, PROTOCOL, TELNET, LIGHTBAR, NEWSSERVER, NEWSGROUP, CONFIGELE, MESSAGESELE, FILESELE, USERONBBS. The field-numbers are easily countable if you use the standard structure file. ; Open the file Cfg_FileOpen 1 C:\ra\config.ra CONFIG ; Read the contents Cfg_FileRead 1 ; Get fieldnumber 43 Cfg_FileGetInfo 1 43 1 ; Display it to the user Display "Systemname = " 1 ; Change it Assign 1 "The Elevator BBS the 2nd" ; Set the changes back into the record Cfg_FileSetInfo 1 43 1 ; Return to the beginning of this file Cfg_FileSeek 1 0 ; Write the changes back Cfg_FileWrite 1 ; Close the file. Please note that all changes arent applied until ; the file is re-read. For CONFIG this means that changes wont ; be made effective until a restart of EleBBS. Cfg_FileClose 1 Bug Fixes --------- * Reading reversed could sometimes cause EleBBS to skip the last message. * When ExcludeSysOpFromList was enabled, EleBBS didnt take the Sysop's handle into account. * Some important error notices werent displayed to the screen (they were logged to the EleBBS.LOG though) - this has been fixed. * Pasting clipboard contents into an EleBBS/W32 application wasn't working properly. * When receiving messages with large headers, those headers could leak into the actual message text (EleNEWS), this has been fixed. * EleIRC couldnt respond properly to CTCP actions (eg: /me is sleeping) * Messages addressed to "Sysop" in a netmail area, where always addressed to the local Sysop. * When a door is started with the *Z parameter, the ?FOS.BAT files arent started anymore. EleBBS/W32 only. * EleBBS started with the -D parameter (supress statusbar) wasnt working always as expected. * ALT-S wouldnt allow 65535 as security level while the user-editor (ALT-E) would, fixed. * Fixed several small bugs in EleCOM (the communication engine in EleBBS). * EleBBS wasn't always properly checking the attachment path of attachment. It was properly checking this while sending messages, but received messages could still be used to create problems. * The sample LASTCALL.Q-A was faulty and could show users multiple times. * In some weird cases, when logging on you could get the message that your time was almost exceeded. This should have been fixed by now. * EleFILE SORT could crash when you run it on a heavily damaged file- area. * The wildcard search routine would only accept wildcards at the end of a file. * EleNODE wouldnt compile nodelists unless at least one parameter was specified. 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 } { Bit 1: Do count the msglines/bytes } { Bit 2: Increase postscount } DomainName : String[120];{ Domainname of messages, emtpy=use ftn } FreeSpace : Array[0..38] of Longint; end; { NewsServerRecord } 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 } { Bit 1: From-address override } 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) }