Telegard Bulletin Board Software, v3.00 Revision History Documentation Copyright (C) 1995,1996 by Tim Strike All Rights Reserved. 3.00 Release (final) - June 18, 1996 Installation Notes: Please refer to the documentation INSTALL.DOC for instructions on how to upgrade from previous versions of Telegard, or how to install Telegard for the first time. It is *imperative* that you follow these instructions! Release Notes: This version is quite a huge jump in terms of magnitude of the items required to update (language & scripts). The reasons are two fold; it's been 3 months since the last Telegard release (2.99.g4) and the changes made since then are quite big (this WHATSNEW.300 file contains only the changes from G4 to 3.00, and is as big as the file for G2 to G4). Please review this *entire* file, paying special attention to the languages and scripts sections. You *will* need to change your scripts for this version to properly run (sorry). Changes planned for 3.1: While these changes outline those things that I intend on changing for 3.1, they are not finalized -- other items may be changed, and these items may not be changed. (a) Scripting language overhaul (b) File description storage overhaul (c) Scan record overhaul (faster and more efficient) (d) User-ID fields to 4 characters (nn-nnnn to nnnn) (still base 36 - leaving 1,600,000 users possible) (e) Text date fields from MM/DD/YY to MM/DD/YYYY (f) Further multinode support (possibly node-to-node chat) The remainder of my plans for 3.1 have not been decided upon. IMPORTANT CHANGES + Password encryption (PWE) is now available. Here is how the system works . . . Telegard stores a CRC32 value for the input password *regardless* of the current settings for the password encryption. If PWE is enabled, then the password text is not stored, otherwise it is. With this system, the CRC32 is then always used for password verification, and the toggle only controls the storage of the text password. Because of the design of this system, this feature can be toggled off -- and on again -- without loss of user records. Caveat: If the user forgets, tough -- the CRC32 can't rebuild the password text if PWE is enabled-then-disabled if the user can't remember the password which matches the stored CRC32). Here is how it works (the low down). If PWE is enabled, all the stored password text is cleared, leaving only the CRC32 value. The user inputs the password, and the CRC32 is checked, and if equal, the passwords match and the user can login. If PWE is disabled *after* it has been enabled, the first time that a user logs in with the correct password (matches CRC32), that password will be stored back into the user record (and voila, the text is back, woohoo!). The password will only be displayed in the user editor (a) if PWE is disabled, and (b) if the stored CRC32 matches the CRC32 of the password text . . . otherwise, the password text is non existent (PWE enabled) or is damaged (CRC32s don't match). To enable/disable these flags, you must use the utility USERS utility (Version 1.10+) with the option "PWE". This will make the necessary modifications to the user file. PLEASE DO NOT WRITE UTILITIES TO TOGGLE THIS FLAG, AS YOU MAY DAMAGE YOUR USER FILES BEYOND RECOVERY. If utility authors are going to change the PW text, they must also update the CRC with the correct CRC32 routine (start with 0xFFFFFFFF as the initial value). Remember password input is entirely in uppercase, and the CRC32 is only stored for the actual text string, not the length byte (i.e. starts at pw[1] instead of pw[0]). If PWE is enabled, then only the CRC should be saved to the userfile. This method closely (well, almost identically) mimics the method used in RemoteAccess. Infact, I waited until 2.50 was officially released to see how successful it would be. It's not an original idea, but it was an often requested feature. LANGUAGES * Please see the file LANGUAGE.300 for the changes to the language files for 3.0. The language changes were fairly significant (the cleanup the text therein is likely done now . . .) UTILITIES + USERS.EXE now sorts deleted users to the END of the user data area so they are all grouped together. Sorting within the deleted users group works the same as non-deleted users (by security then by alphanumeric sort). + MAKELANG has been updated to 1.11. This version adds several different commands which can be helpful in finding problems or changing your language text. (i) This version can create a text dump of the language file, without MCI codes and without colour/comments. The file can then be be used to spell check without hassle (well, without as much hassle). It's option -D (after the filename). (ii) This version can also update language text automatically with the output file (language.NEW) a merge between two languages. Added lines will be written with ;!ADDED preceeding, removed lines will be commented out with ;!REMOVED preceding, and updated lines will be double listed with ;!UPDATED preceding. This is not useful for most SysOps since heavy language modification will result in a large number of duplicate lines, so I suggest using CMPRLANG and the listing in LANGUAGE.UPD instead. The commandline would be "MAKELANG lang-1.txt -M lang-2.txt" where lang-1.txt is the language to be updated from lang-2.txt (which should be our release language, i.e. ENGLISH.TXT). (iii) This version gives a more indepth warning message. (iv) This version adds another language file compilation method was added for fks Utilities (TCR, News, etc) . . . information will be distributed with these programs. AREAS * Area managers (file & message) are now paged. The length of the page is determined from the online user (WFC=SysOp Account) and adjusted accordingly so that no other page pause should have to take place. * Internally renamed "base" to "area" for all prompts and log entries. Combined with the update to the language files, "bases" are now "areas" (which is more intuitive). * Semaphore files TGMBASE.NOW (message areas modified) and TGFBASE.NOW (file areas modified) are now named TGMAREA.NOW and TGFAREA.NOW respectively. * Area compression is now re-enabled -- it now comes with a lengthy warning as well. MESSAGES * More intuitive Internet Email/Newsgroup setup -- including both as options in the area type setup (old options were Local, Netmail and Echomail). Telegard automatically toggles UUCP on for these new "types" and describes the areas as 'Internet' or 'Newsgroup' accordingly. No structural changes were made for this version. * Waiting mail scan will now skip areas toggled as Newsgroups (UUCP+Echomail). Waiting mail scan now also uses the index files (*.SQI/*.JDX) to determine if mail is waiting for the current user in any given area -- this scan is inherently faster than the previous scan because it's all done with crc/hash values and requires little more than a quick memory scan for areas and only one disk read for each area (instead of multiple) - the buffer works for 8191 JAM messages or 5461 Squish messages, and automatically recycles itself if areas contain more messages. Please let me know if you notice the speed difference . . . I'll keep working on it too. + Added subcommand to menu item MW for listing areas with new messages; i.e. using menu command MW with options L will generate a list of message areas with new messages. If the option is P instead of L, the user will be prompted to read the messages if any are found . . . * Nodelist browsing problems should now be fixed once and for all -- my terminals and the local screen translate NULL (#0) as a space character, whereas most terminal programs ignore the character, causing a jumbled column listing. * Squish control information is now correctly read and processed by Telegard from both the control area (as it was skipping before) and the message text (as it was before). During this process, I fixed (a) MSGID processing, and (b) extra blank lines appearing at the end of a message after origin lines. Telegard now uses the MSGID as follows (this was how I designed it for gamma-4, but it was not working properly) -- the MSGID is first used to determine the ORIGIN address of the message. If a MSGID field is *not* there, and the header origin address zone is not zero, that address is used. If none of the above finds the address properly, it will come out blank . . . * Replying to messages in private email from a public area will (a) no longer prompt to delete the message from the public area, and (b) no longer send a 'REPLIED TO' receipt. + Added antiquated UUCP support (UUCP in the header, TO: name in the message text). Most gateways (useful, up-to-date gateways) no longer require this option. However, if needed, it is now supported. + Added QuickQuote features which automatically assume RANGE types, allow up to 9 lines to be quoted at once (don't ask for any more -- I won't add support because you'll notice the software which DOES support such quoting ranges end up with hundreds of lines of quoted text!). This is faster and perhaps more intuitive for some. Upon successful range selection, text input mode is automatically re-enabled. * Reworked the squish code to fix up a number of inefficiencies and problems; (a) The frame length of free frames will be maintained so they can be used efficiently. This *should* help with some space usage problems when the areas are dynamically packed by Telegard. (b) The control information (kludge) is now written properly into the control area of the header instead of the message text. * Hitting '-' to goto the previous message should now skip over deleted messages until it finds the previous available message. * Kludge lines now work as in 2.7 (I changed my mind on how I wanted to implement them). Kludge lines buried within the message text in Squish areas (i.e. invalid lines) and SEEN-BY and PATH lines in Squish areas will be shown in the TEARLINE colour. Other kludge lines, and all JAM kludge lines, will appear at the top of the text in the kludge line colour. The toggle now works until it's turned *off* (meaning, once you turn kludge line viewing on, each message you view will have the kludge lines until you turn them off again). + Cross posting of messages has been finished. Messages which have either files or carbon copies attached with them can *not* be cross posted. Messages can only be cross posted into PUBLIC local or echomail areas. Telegard will properly update origin lines, kludge lines, MSGID, etc for each cross posted message. A maximum of 10 cross posted areas has been set internally, and the cross posting ACS is determined by a new ACS setting (see Config.Messages.Access.CrossPosting). Cross posted areas will be displayed at the top of the message in each of the areas cross posted into (and the original). + Carbon copying messages has been finished. The message must be posted from either board=0 or a netmail area. A maximum of 20 cross posted messages has been set (internally), and the carbon cop ACS is determined by the ACS setting (see Config.Messages.Access.CarbonCopy). Like cross posting, all CC'd users are added to the message text (i.e. there is no blind CC: option in Telegard), and origin lines and kludges lines are properly adjusted. * Messages with more than one file attach should now have all the files available for transfer (a count variable was not being reset). * After sending file attaches, if the last transfer was OKAY, and the message is TO the online user, the files will be prompted for deletion. * Completely reworked the header initialization code (i.e. to/from/subj headers) and while I have attempted to ensure nothing went wrong, please let me know if it did. The code is now more compact, and indeed, easier to follow as well (this was more important from my point of view . . . ) * Posting messages from a kludge-line generating FSE in a "Dear Abby" area with the "Real Name" option (3) should no longer cause problems -- my fault folks -- my oversight! * Replying to messages in internet email areas now sends prompt 1126 instead of the standard netmail reply prompt. * Copying and moving messages now reproduce the *identical* message (header information, etc.) except with the following modifications: (a) Filtered (ANSI, etc removed per area setting) (b) -- forwarded message -- text (c) Header information, if requested (d) PRIVATE setting if appropriate (pvt only area) (e) Echo/Net/Local flag as appropriate All other status bits, kludge lines, origin lines, etc. are kept as is. Messages being sent from other systems will *not* be re-echoed, local status bit will not be toggled, date will not be changed, etc. If you want these features, FORWARD the message instead. * After forwarding/copying a message, the next message will not automatically be loaded (i.e. you will remain at the present message). The message header/text will also be intact as it should be (without the forwarding text). Moving messages will still move to the next message (the moved message is toggled as deleted). * QWK header initialization now uses the code the regular posting does -- this should tighten up the header generation and make the messages a little more consistent (i.e. they will contain the proper MSGID (they didn't before), as well as any other kludge lines added by the software. * Posted messages will now have the following tear/origin lines as appropriate: ~~~ Telegard/QWK v { QWK, local or no tear lines } --- Telegard/QWK v { echomail & tear lines, QWK } * Origin: ... ~~~ Telegard v { internet email/newsgroup } --- * Origin: ... --- Telegard v { echomail/netmail } * Origin: ... * Users should no longer be able to send email to their own accounts. SysOps (with sysop access for that area) on the other hand now *will* be able to send email to their own account (for various reasons) -- I had a variable reversed. + AKA matching has been implemented within Telegard; the AKA matching is done for each of the defined addresses (AKA matching *must* be setup in the address configuration). This means that a *single* netmail area can be used, and that the address will be matched when the message is saved. The matching is done as follows: (1) Search for matching AKA ZONE:NET entry, and use the *first* associated address if found. (2) If not found, search for matching AKA ZONE:0 entry for the outbound address zone (matches ZONE and *all* nets in that zone), and use the *first* associated address if found. (3) If not found, search for matching ZONE:NET address, and use the first one found. (4) If not found, search for matching ZONE address, and use the first one found. (5) If not found, use the primary address (address 1). Of important note, this will *only* work for Netmail areas. The area must also be configured for AKA matching -- if not, the address used will be as defined regardless of the outbound address (this can be used if you wish to separate the areas and use a specific address for each area). ALSO OF IMPORTANCE: This feature makes use of the data files as they were defined in the DEVEL300 package. However, they use a setting (=0) which is likely not recognized by the current offline mail doors. Thus, if you use either of these doors (TGwave 1.12 or prior, Bluewave 3.11 or prior) it is suggested that you do not enable AKA matching for any of your areas until updated versions of the doors are available which support the new files in the DEVEL301 package. + Added ECHOMAIL.JAM and NETMAIL.JAM support for all posted messages. To turn this feature on, define the path for the files in the Configuration.MessageSystem.Echolog path. These files can be used to do a QUICKSCAN with your favourite JAM tosser (I still suggest a FORCED FULL scan at least once daily). Naturally they only contain messages posted in echomail or netmail JAM areas . . . ;) * TGMSCAN.NOW has been replaced with four separate semaphore files dependant on the type/format of the posted message: * ECHOMAIL.TGJ (JAM, Echomail) * ECHOMAIL.TGS (Squish, Echomail) * NETMAIL.TGJ (JAM, Netmail) * NETMAIL.TGS (Squish, Netmail) (NOTE: for semantics, newsgroups are set as ECHOMAIL, internet email as netmail). The semaphore files are touched when the message is WRITTEN to the area, and no longer at the end of the BBS session (logout). * Fixed importing text from the FSE, or when formating Squish text so that initial 1st line characters are not lost. + Internet email areas now force the internet address to be of the form user-name@server-name. If the server-name is not included (i.e. 4ts2, 4ts2@) or if the user-name is not included (@qlink.queensu.ca) the address will be rejected. This is *not* active for replies, since some replies are sent to UUCP, and since if the message arrived from an address, it should be able to go back from whence it came! * Users who do not have enough SL or ACS (restriction flags, etc.) to post a password inquiry message will be informed of such, and then hungup. Private posting ACS, as well as the Email/Post restriction flags all affect this. * Telegard now has two distinct quoting methods - SmartQuote enabled or disabled. If ENABLED, Telegard will wrap lines of 70 characters or more together to create smooth flowing text. If DISABLED, Telegard will truncate lines that are too long to fit onto one line. Both should create "smoother" quoting than the previous zig-zag production. * I believe I may have nailed the "*" Anonymous toggle option w.r.t. JAM areas -- Squish areas have another problem in relation to that, something I'm in the process of fixing. + New menu command M! which will provide a listing of message area traffic (i.e. low & high message numbers, total messages, local messages, % local, active days, message/day). Useful for quickly judging those echomail areas to get rid of (0% local & high daily traffic, low daily traffic, etc.) * Reworked the error code return procedures, such that DOS ERRORS and SWAPPING ERRORS will be the only cause of the internal FSE loading up after a failed external FSE. If the FSE returns with an errorlevel <> 0, then the message will simply not be saved (i.e. aborted) -- useful for those FSE versions which return errorlevel=1 for aborted messages. * JAM messages with control fields (subfield) lengths longer than 8K will be truncated at that point - for Fidonet messages, this is of no *real* concern (the only thing which could cause it to hit that length would be an extreme amount of message routing with lots of ^aVIA lines). Internet routed messages *can* cause this to happen, especially those silly-go-lucky internet mail readers which append a CC: for hundreds of users in a blind (and shall I say extremely negligent) manner. + Added Confirm FSE Save option (if enabled, will prompt as usual -- if disabled, will just automatically save the message (well, move to the next step (cross-post, etc.). * Deleting users while editing them from a message should no longer lose the last-read & scan tables for that message area. With enough information, I've been able to track this one down (so don't be brief in your bug reports!) * Message header should be properly updated when files attaches are successfully transferred/moved. * With SmartQuote disabled, Telegard was getting hung up on soft-CR and erroneously removing lines. Telegard will truncate text not wrapped in soft-CR's when the text to be truncated is less than 10 characters in length. * Fixed up some of the message area code with regards to skipping in private areas/private messages -- messages which are private (area or message) and are not to/from the online user will always be skipped in Waiting, ToUser or FromUser scans, and will be skipped for Non-SysOp ACS users otherwise. I *think* I now have the logic properly defined. + Telegard now uses specific netmail areas for specific AKA's. There are a few things to note with respect to this new method of matching netmail areas: (a) UUCP Netmail and Regular Netmail should be separated - such that you have a Regular Netmail, and an Internet Email Area (UUCP Netmail). If you use the same net address for both regular netmail and UUCP mail, you will need to define two AKAs the same with different netmail areas, and the correct AKA# in your message areas. (I personally use a point address for my UUCP Newsgroups and Internet Email, specifically to avoid confusion). (b) Telegard does AKA matching *after* checking the netmail area. If the message area uses AKA#3, then Telegard uses the netmail area for #3, then checks the AKA match setting for that netmail area. It does *not* IOW, match aka's, then use the appropriate area -- it is assumed the specific echomail conference in use is using the AKA with the appropriate outbound mail settings. (c) Replies to messages *in* a netmail area will use the current area for those replies. ? Want to hide your Email area, but still have it accessible to all your users for reply/reading with the email functions? Just add it to a dummy conference (C! for example), and it won't show up in area listings, but it will still be available for all regular email functions! (a handy tip from your friendly TG users on TG_SUPPORT that even I wasn't aware could be done . . . ) * Message area compression always starts at area #1 -- The email area, if the user has ACS, is always area #0. This means that using the above method to 'hide' the email area will leave all other areas starting as area #1 (a helpful solution from your friendly TG programmer . . . ) * Waiting (Personal) mail scan should now allow an abort and properly pay attention to it. ;) It should now also start at the correct first message, instead of the first message after the last-read pointer. * Hitting '-' when reading messages in a non-reverse mode while at the first message, will no longer end the scan. + Netmail will be prompted for deletion after replying. Netmail can be forced deleted (as in email) with the new flag ForceNetmail (see OTHER section). * Origin lines will be truncated to 79 characters. The origin line setup in Telegard was left long enough that short node addresses could use the full length. However, some longer addresses would incorrectly wrap with the same origin line. Telegard now truncates that line (the origin text portion) if adding the node number would create too long a line. * JAM message bases now properly support the LOCK_FIRST_BYTE when writing messages back the file. Note the following consideration (important) when using JAM: Do *not* pack your message bases while there are active nodes . . . If the base happens to be open and being read by a user, the packer will likely open the file in ReadWrite+DenyAll mode, which when Telegard attempts to read the next message will crash the online node. (same goes for Squish as well . . . ) * Telegard will only prompt if the message is to be deleted if the original base was either base #0 or was a netmail area. This will stop the RT#100 and asking to delete messages from a public base after they have been replied too . . . + New message command MT to automatically post a file (from default TEXT path only). The required parameters are area#;filename;subj;from;to;toaddr, where: area# Post to area# filename Filename to post subj Subject (blank=filename) from Post from user (blank=SysOp) to Post to user (blank=Online User) toaddr Netmail address (if netmail area) This is an internal routine that I'm making available for SysOps to use in menus/scripts. Please note that because of the limited menu options space, you can only have a combined total of 50 characters (running from a script will give you ~250 characters). MCI translations will take place in the routines for the subject, from and to fields, as well as the imported message text. For example: MT 0;NEWUSER.TXT;Welcome New User! Will post the file \text\NEWUSER.TXT in the email base, with the subject "Welcome New User!", from the SysOp (no from), to the active Online User (no to/toaddr). MT 51;TGSUPP.TXT;ELU MOD;Tim Strike;Echolist;1:201/0 Will post the file \text\TGSUPP.TXT in the netmail base (#51 on my system), with the subject ELU MOD, from Tim Strike, to Echolist with the netmail address 1:201/0. MT 0;ECHOSTAT.TXT;;;Tim Strike Will post the file \text\ECHOSTAT.TXT in the email base, with the subject ECHOSTAT.TXT (no subj), from SysOp (no from), to Tim Strike. There are tonnes more things you can easily do, just remember to keep things simple. If you need something more complex, may I suggest an external autoposter . . . :) * Replying to the original poster in a netmail area would result in the incorrect address being used (oops). FILES * CD-ROM support should now work again. The labels off CD-ROM should be the label listed with a DOS directory listing -- no difference from that used by Telegard. Audio CD support is almost ready (since Telegard currently crashes OS/2 and certain drivers, it needs to be fixed soon). * Timeleft will now be updated at the file tagging prompt, instead of waiting util the user hits the next menu prompt. * File size (~&3) now puts a leading zero for decimal point numbers < 2 characters. * Fixed bug of waiting for description after a user has hungup; it would correctly process the first file if it hadn't already bee done, but would prompt on any successive files. If it occurs now, it should just boot past and dequeue all the files automatically (incl. testing). * File manager will not attempt to create directories on CD-ROM detected media (for those who type the paths from their CD's in wrong . . . :). * Conversion command will not prompt for CD-ROM area selection, but rather will just avoid CD-ROM areas (for due reason). * If "Search All" is selected as NO, then the "Search CD-ROM" prompt will not be given at all (why bother, it's one area). If you really mean to search only one area, well . . . ;) * 1,000,000 bytes is now considered a meg in terms of the file section -- this isn't true, but it will suffice for the display purposes of the file system. * Cosmetic changes to /U command (fixes pause overwriting scan) * ?: input text is now definable in the language file (it was hardcoded to `09?:`1F previously). * Telegard now handles highlighting text/colour restoration internally. Searching for text that is a part of your display line should no longer highlight that text. * Files which fail the virus/integrity check were properly marked as 'unavailable', but the users were still erroneously given credit for the failed file (Thanks Keith -- I did eventually find the problem). * Unvalidated files will now always show in the newscan to users with SysOp ACS. This is how it used to be, and is infinitely handy . . . * The file listing now displays the files (and the appropriate lines) in the following order (using the first logical one): 1. 'Failed' files 3. Offline files 2. Unvalidated files 4. Normal listing This should make it more apparent when a file was failed, instead of having to first validate the file before the failed tag would appear. + File listings can now display the uploader name/date. This is controlled via the SystemConfig.FileSystem.ListUploader toggle, and secondly by the SeeNamesACS for each area (if not met, the line will not be sent). * Unlisted uploads (not in queue) are now sent to the default UL area if defined, and to the SysOp area if not defined. The default UL area is set via System.Config.FileSystem.UlArea. * Just deleted files will not appear as 'invalid' when trying to re-upload the files. I was foolishly checking some flags when exact extension matching as off. * Offline files will no longer be given tagging numbers. This saves the tagging numbers for active files only. The field is just blank for offline files. * # of tagged downloads MCI is actually ~FQ instead of ~FG. + Minimum upload space check has been re-enabled. Somewhere in my rewrite of the file sections, we lost the check for drive space . . . it should now properly deny uploads if less space than configured is detected (on the upload drive). * I removed the validate-all-files variable (which used to indicate whether incoming files were automatically validated) and included that code as part of auto-validate and credit users (which used to read autovalidate ul ACS, but only updated the users credit). This was done to alleviate some confusion, and hopefully -- hopefully -- fix some bugs. * Queued file points were not being added up - and thus, only newest file was checked for available points. If all the files were within the ratio, all the files could be transferred. This was incorrect -- queued files are counted. * Fixed non-archive auto-uploading (which would print files on the same line) -- it now prints the "default" description instead. SCRIPTS * Variable substitution will now work in get input mask. + Added TRANSLATE and RANDOM functions - see SCRIPT.REF. + Included BDAYCHEK.SCR which can be run, as an example, from your LOGON.SCR file . . . it randomly checks the Birthdate of the users and hangs them up if they get it wrong . . . * Telegard now reads the file as READONLY + DENYNONE in binary format rather than text format. This will hopefully stop the OS/2 access denied problems, as well as end some of the 103/105 problems some multinode environments have encountered. Please note, that because text files are inherently faster to process in BP, I have had to write some buffering routines. While I've tested them and they *do* work, there could be minor bugs in the routines. * IF/IFNOT statement handling has been changed -- DRASTICALLY. Please test these functions carefully, as my logic, while it looks good on paper and in code may not work as well in practice. Putting JUMP statements in IF/IFNOT statement blocks should no longer cause any RT202 problems -- just be careful of where you put your :LABELs. You can now only have up to 20 nested IF/IFNOT statements. * The script is now recursive to only one level deep. The only code that is recursive beyond this are the ACS, KEYPRESSED and FILEEXIST statments. Be careful of how many of these statements you link together (as you may find significant problems if you link too many together) -- for instance: ACS S255 ACS FA GOTO PASSED ; is incorrect, and dangerous ACS S255FA JUMP PASSED ; is correct and ACS S255 KEYPRESSED FILEEXIST JUMP LEVEL ; is dangerous because it nests 3 functions * Labels can now only be 12 characters in length. Labels are expected at the first level, not buried within IF/IFNOT...ELSE...ENDIF statements. If labels are buried, they will cause signficant problems. * Removed BEGIN/END blocks. I decided this would remove *some* of the 202 errors that were happening (and if 202 didn't come up, the system *might* hang). BEGIN/END blocks with IF/IFNOT statements are not required, and other statements can be worked around differently (if you need help, mail me). + Added JE (Jump Equal) and JNE (Jump Not Equal) to the SCRIPT commands. They are used to explicitly replace the following type of construction, which *will* cause problems: IF "$OPTION$" "A" GOTO opta ENDIF JE "$OPTION$" "A" opta * GOTO has been renamed JUMP. This coincides with the JE/JNE statements, and also forces people to look at their scripts for the proper :LABEL format now expected. + CALL/RETURN functions have been added. CALL stores the current position and then jumps to a label. RETURN returns to the last CALL position and continues executing from there. You can only have 10 nested CALL statements at any time. + Added ELSE construct to the IF statement. The correct method of use would be: IF/IFNOT "test1" "test2" ELSE ENDIF * Input of a CHAR will now accept ^M (ENTER), ^[ (ESC), ^_ (SPACE) and ^^ (^). If you want to include ^ in your "valid" characters for a CHAR, you must use ^^. The IF statements will also check this; so if you want to use ^ in your IF statements, you must use ^^. Thus, doing IF "$INP$" "^[" will check to see if the input character was ESC. * More of the login sequence was moved from the actual code into the LOGON.SCR file. Please review this file for changes and make the necessary changes to your script (short msg, voting, mail check, etc. are all now part of the script). * FILEEXIST/ERASE now append /temp/ to the filename if a path is not given. This is used to test/erase files in the temporary directory, such as those created with FILECREATE (which when a path is not given, defaults to /temp/). MULTINODE * NODEACSn file renamed to NODEAnnn for support of more nodes on this file (1-9 previously, now 1-999). + I finished the node phone option. It is now displayed with the MCI code ~CF (the primary phone number is still displayed with the old MCI code -- this one changes depending on what node is in use, and what the nodephone setting is defined as). This is one of the two MCI codes which can be used in the origin line (~CN being the other). * Fixed bug of last node always being "unused". MENUS + Added option to change the Who's Online text when menus are loaded -- if set to NULL (blank), then whatever is currently on the status is left, otherwise it's updated to the text stored for each menu. Thus, you can create status of "File Menu", "Main Menu", "Message Menu", etc. without having to link a FIRSTCMD for each of those menus . . . + Added menu command OY, to add VOTING QUESTIONS (this was an oft requested feature, and with the addition of my init vote code, a really _easy_ feature to add). * Menu editor uses More? pausing when listing commands. + Added L; pre-door command to turn off logging of the door (door use & login time, logout time). * A clarification on usage of those toggles is required as well; put all the door flags you want BEFORE a semi-colon, then put the door command. i.e. LSR;C:\DOORS\BRE... would indicate NO LOGGING, NO STATUS UPDATE, REAL NAMES in drop file and C:\DOORS\BRE... is the door command to be run. + New menu option to center/not center sub-titles, separated from the center/not center titles (which will now only work on the main menu titles). * Menus with passwords will now properly check the ACS for the menu first, then if that passes, check the password, and if that passes, allow the user into the menu (otherwise the defined FALLBACK menu is processed). + Menu command OI to automatically change languages. The syntax is OI with as the Options. If does not exist, be forewarned, the user will be prompted for a language to use (I didn't rewrite any routines, this is why it works this way -- sorry). Language ACS is *not* checked. * Added -M menu command to send short messages. The required parameters are user;message (input will *not* be requested if the parameters are missing). If the user is online (on any node), the message will be sent right away, otherwise it'll be stored in the shortmessage file. Use for messages to a specific user rather then to a specific node (use NM for that). + New option for menus; the ability to set the input type to FORCED SINGLE KEY, FORCED FULL LINE and USER SETTING for each menu (the addition was the first listed -- it's helpful for menus when where you need KEYED input). * I rewrote part of the core menu handler to optimize for memory and speed. I have tested it fairly well (-^,-/,-\) but let me know if there are any problems. DOORS * CHAIN.TXT now accepts the R parameter in the options field. This format stores BOTH names, which is why it wasn't available before, however, some doors do not have toggles of which to use. Adding R will reverse the field order to enable the SysOp to choose which is used. OTHER * Found and fixed a flush input buffer problem - this routine was only called during shutdown, but under the right circumstances (RTS/CTS low), it would call a fossil function which would lock the system up tight. * File copy/move routine now uses it's own internal buffer. It is a little slower (64K vs. 1K buffer), but will not cause problems during file attaches, etc. * Fixed timeout of WFC ocmmands (so they properly abort instead of using previously input command). * Language manager starts numbering at 1 to be consistent with the language selection prompts. * Telegard will check language ACS during the login process, and if the user does not meet the ACS, will prompt them to select a different language. * Telegard will now loop until a valid language is found at the language selection prompt. * Language .TGL will be checked for existance in the \language\ path before offering a language to a user for selection. If it does not exist, the language is not offered. * At the WFC menu, local security enabled, returning from the shell should return the cursor to the proper position. * Deleting users from the WFC screen without having first gone into the WFC QuickMessage area should no longer result in error. + User editor search engine has been completed and added back to the Telegard code. I just rewrote it instead of importing anything from 2.7, so *please* give it a really good run through. (a) The text search is case insensitive (b) If an ACS function exists for a specific item, there is no duplicate option (use ACS) The search engine can be defined with '*'. Once satisfied, you must start the engine with the start function from this menu. Use '}', '{' to search forward/backward, and '/' to list all matching users. * Updated RAR archive definition -- it was incorrectly using an external view, when Telegard itself has RAR viewing built in. If you previously imported the RAR definition, you can safely blank out the view command and let Telegard handle it (this is safer and faster!). + Added CAPTURE keyword to archive definitions, to coincide with a new feature - capture external. The reason, is that some people wanted to integrate seemless archive viewers into Telegard, but prior to 3.0, Telegard was redirecting the output. If you were using external viewers before and relying on Telegard to automatically capture the output, you must now toggle this feature with the archive manager. * Since I implemented CC: and cross-posting differently than I originally intended, I didn't need all the memory that Telegard was reserving. Subsequently, I've reduced the reserved memory quantity from 55K(g4) to 15K -- since only scripts use this memory and this should be more than enough for all the script variables etc. to be stored. This will free more for low memory doors (use !; no swap to take advantage of the extra memory for these doors). Thus, Telegard expects ~440K in memory requirements total, and really only requires 425K to run (without scripts -- although that really *is* pushing things). * Semaphore directory now defaults to \tg\SEMAPHOR\ * As requested, voting answers now have a vote tally MCI code. * Backspace is available during the SysOp PW input at the WFC. * Installation will now set NodeCheck timing to 10 seconds instead of 0 seconds. If your entry is set to 0 seconds, I suggest a range from 4-15. + Added ForceNetmail flag to user record. This operates the same as the ForceEmail flag, except on netmail areas. If enabled, it forces the netmail to be deleted before continuing with any type of scan (ala Email) and also auto-deletes the netmail message after email. By extension, this flag also controls Internet Email areas. * Displayed files are now opened in fmRead+fmDenyNone mode instead of fmText mode. Again, I've had to buffer the file input on a file by file basis; the buffer is 128 bytes in length (standard textfile buffer) and performance wise there should be no difference, but it may stop problems on OS/2 systems and systems where the files are poorly locked. Since BP does not contain internal buffering I've had to write my own little routines. Please let me know if there are any problems. * ALT-P now works from the initial ANSI/Language prompt (I was incorrectly checking for online users, and not taking any input for a filename if there wasn't one, and then incorrectly using that non-filename for the capture file ;) * Telegard now opens the overlay in fmRead + fmDenyWrite mode instead of just fmRead mode (which can often be interpretted by another task as fmRead+fmDenyAll). * The search progress is now back in the nodelist browse (where it got removed, I don't know). I also added the highlighting of the search text as per the user browse/file area sections. I also fixed some RT problems I was having here -- I couldn't figure out why, but I'm no longer getting them . . . + Added -NET command which will disable local SysOp keys so they can't be used. This option should be used when allowing network access via a lan to the system. The command to load (create a TELEGARD.BAT file if neccessary) would be: TELEGARD -B0 -NET -Q which will load up in local login mode (-b0), toggle network mode (-NET) and quit after login (-Q). To restrict the access in this manner, it may be neccessary to limit the usage of the /telegard/ directory to a specific account login name (i.e. "Telegard") which automatically loads in this manner -- but don't quote me yet, my network isn't up and running just yet. + SysOp Macros (F1..F10) are now available. These are always active, even when the user macros are not. Be forewarned however that Telegard internally clears the buffer to ensure user continuity, and thus, occasionally you will find the stored keys are cleared. See SystemConfig.SysopMacros. Added ability for the sysop macros to spawn a shell process. Starting a macro with # will write the remainder of the macro to a batch file, which will then be executed from the /temp/ directory. * ~ER will trim characters from the left rather than the right when the field is longer than the imposed limit. Colour codes may be truncated . . . * Telegard now handles highlighting text in the user browser differently. Searching for 2 will not highlight colour codes for instance. In addition, because of some logistically problems, Telegard will search only the displayed name/location for the text (if you're not displaying location in your user listing, you'll have some empty highlighted users. * Because of the changes to the highlighting code, Telegard now uses ^K and ^N internally (Ascii 11, 14). Since these are commonly control characters, they shouldn't be used in regular output. But they might come in handy in scripts -- ^K stores the colour, and ^N restores the saved colour . . . only from within text displayed strings (runtime). + Added option to remove color codes from user information (names & address). See SystemConfig.NewUsers.KillColor. * Input fields will no longer be generated for PW/SPW areas - this isn't too important, just might help a few FS login designs. * ANSI/Avatar files with line lengths longer than 255 characters will be adjusted in an attempt to keep ANSI, and to a lessor extent Avatar, sequences together; the ANSI/Avatar character *must* however appear within the last 50 characters for speed/parsing reasons. I've tested it with long ANSI screens which used to mess up without problems . . . this however is *before* MCI parsing -- if you use extensive MCI expansion, Telegard does not (yet) currently extend past the 255 character string restriction. * Redesigned the voting updates a little - vote updates are now done on the fly if a user has not yet voted on a question; based on the last voting that was done, and the initialization time of the voting question. This should (a) eliminate any potential problems of 'ghost' votes (I could not replicate this, but it was reported), (b) eliminate the need to worry about other online nodes, (c) speed up the initialization (it's only done for users as they login as opposed to all users each time the question is initialized . . . and probably many other facets I have yet to even imagine. This change *might* mean your users get asked to vote on questions again, and quite possibly create a skewered number of vote returns -- if you wish to fix that, you'll have to manually (R)eset your questions in the voting manager. * Added MULTIRING support (i.e. answer only on second ring, etc.). This was added for future caller-ID support (which I'm working on now). If using multiring answering, then I suggest you set the counter reset value to ~3-5 seconds. This will prevent counter rollovers between a sequence. * I'm fairly certain that now I fixed the local-after-remote login problems that the gammas were having (even though I *thought* I caught it last time). It should also stop the RING etc. problems when in the quick message/file areas . . . modem incoming should be disabled except for actual connections, and only for the most current connection (oops). * I believe that the all the 'memory' code is now working properly, included the "Used" portion of memory (which, when added with "Reserved" should equal the entire program usage give or take ~250 bytes). The two of main concern are: * Stack ~31K * Used ~423K If stack grows too small, or used grows much bigger then this, the system has problems. Telegard also needs *some* reserved memory. If the window memory is set too small ("Reserved"+"Memory" < 5K) then Telegard is likely to run into problems during operation. It's better to give the window at least ~10K more then is actually needed -- i.e. 433K ("Used"+buffer). The "Memory" field lists memory outside of the reach of Telegard; this can be used run programs when not swapping memory; if your shell doesn't work, perhaps you're not giving the window enough memory -- in this case, turn memory swapping on. * Local modems (comport=0) boot into local I/O only at startup; if a connection (-Bnnn with nnn>0) is being loaded, the connection is refused. + Added "SysOp" login to the WFC menu (provided that local security is *not* enabled). This option boots into the system, but automatically loads the first user record (Record 1, Offset 0) from the user file . . . no name input, no password input, just logged on. Yes, it's wonderful . . . :) * WFC help (ESC) will now process commands as well -- i.e. hitting ESC to see help, and hitting any valid WFC command will jump directly into that command (instead of having to clear the menu then hit the key) -- any invalid key will just clear the help screen as will hitting ESC again. + Added TG_OPTS environment variable to hold standard command line parameters (so that they are not required on the command line) -- use only for global command line parameters, unless using a local copy of the environment (shelled window). Suggested options which can be easily included are: -EE[n], -EN[n], -P, -V[n] and possibly -N[n] for those with a good grasp of global/local environments and the right system configuration. * SysOp logs during the login process have been updated to be a little more helpful under circumstances where users are forced offline (no time/no calls left), forced to change passwords, etc. * SYSOP and NEW as user names will be correctly denied under all circumstances now (before they were working only about 50% of the time). * Unix time input routines now work correctly for hours > 18. * Patched up the SHELL_TO_DOS routines, at least partially, so that they don't require 8K of free STACK space to work properly (returning error #202, or worse, a QEMM or system error when returning from a dos shell). * #C acs parsing now uppercases the user comment (only internal to the routine) so that you can check text which isn't uppercased in the sysop user comment field. + Added XN ACS for *inside* new user process (logging in). * IEMSI with blank user names will not continuously cycle through the name/IEMSI sequence (i.e. it would run the IEMSI sequence several times -- it would, however, after 10 attempts hangup). Now, after the first attempt, it should stop using IEMSI, and prompt for a user name (whats is the point of enabling IEMSI without a username? -- ask the braindead program Terminate! (my favorite of all the IEMSI compatible terminal programs -- not)) * Numerous cosmetic (spelling, keys, etc) fixes -- far too many to bother listing individually unless they are relatively different than previous versions in operation . . . * I rewrote some of the event code to make it a little more efficient. Please report any event-related problems. * I reworked some of the ACS parsing code to improve efficiency in both size and speed. Please let me know of any ACS parsing problems you encounter. * Automessage line (1811) will now properly truncate at the width of the longest automessage line (it was incorrectly using 79 character or zero characters before). * Fixed up the Avatar code -- it was _supposed_ to prompt for ANSI fallback, and was not. It was also not properly using the internal colours for Avatar mode (i.e. it was using B&W) and several other items were not being used properly (high bit for the graphs, etc.). RIP code now asks for both ANSI or Avatar fallback (as it was supposed to). * While searching for the above bug, I finally decided to track and nail another pesky bug (since 2.7's time!) -- it would cause the screen to go into CYAN mode only with TTY/Text users online when certain events happened (such as entering message text). At any rate -- tracked and squashed. * Fixed a bug in the login routines, which would, if the user hungup at the name prompt, cause the current user to be filled with random 'garbage', resulting in the log routines reading that garbage and seeing the 'trap activity' flag, and thus creating SysOp logs with garbage ID's and garbage data. * Fixed a bug (found while testing above) of newly created separate logs missing a slew of logging information because of an unprocessed file close. * ANSI/Avatar files with line lengths of 254 + CR would cause Telegard to incorrectly wrap the text -- fixed. This *should* be all of the ANSI/Avatar problems fixed! * The "current" language attributes are used for the VL/VM mci codes. The "default" language filename for the online user is stored in VV. This will normally be identical to VM, except if the login language feature is used. The default and current languages are now shown in the SysOp window as well. * Fixed login with name;password combination -- if the phone numbers were included, there was no problem -- but a name;password login would prompt again for a password. + Option to use TASK= environment variable for node number if -Nnnn is not passed on the command line. Set to YES if you have each task/node with a different TASK= environment setting and want to use that as the default node for that task (also take out references to -Nnnn from your command lines since that parameter will be used first if found). * The casino will display the dealer cards if the player has Blackjack -- before it would just end. + Geographic region (U.S./Canada/International) can now be forced to one of the aforementioned types - this is especially helpful for systems which cater to entirely local audiences (community systems for instance), and especially to international sites. * Windows 4.0 (aka 95) will now be reported as Windows 95 -- obviously this only applies when running in GUI mode, otherwise it looks and operates just like DOS (7.00). * Re-enabled toggle for global activity trapping (it was an overlooked toggle even though the field has existed since 2.7). It's now item P on the Config.BBSConfig menu. * ALT_N (line noise) has been removed. * I rewrote the macro handling routines; they now allow macros to be "stacked" instead of wiping out any previous macro, or waiting for the previous macro to finish. This was done to remove some unrequired code -- please let me know if it has any side effects. * During nightly maintenance, .SWP files in the /swap/ directory that are older than 2 days will be automatically purged. If any active window is open for more than two days, tough. This much has been added -- now I just need a way to ensure the files are always "*.SWP" files (they aren't right now). * I started bracing the system for a change to 4 character YEAR fields (required for >2000 to work properly). Some fields already use the expanded 4 character year, all input fields still use 2 characters, although all the code is in place for 4 character date fields for post-3.0 (file formats will need to be updated). QWK code now always uses the logic if the date < 1970 after conversion, that it's actually date+100 (i.e. 1901 => 2001, 1969 => 2069, 1970 = 1970 etc.). * In the process of doing the above, I may have fixed the post-birthday happy birthday code, which was unlikely to ever execute. * If the user does not meet the graphics requirements (minimum graphics bps) during login, they will automatically be reset to text only. * I have done a rather lengthy run through of several commands and updated the variables that they use. This was in order to reduce the stack usage due to local variables during any given procedure. I'm hoping that that I didn't blindly break anything -- if you experience problems, let me know . . . * While doing the above stack usage optimization, I had to rework the SysOp window routines (mainly to get rid of the 8k (80*50*2) screen image). I'm using insert/delete options of the BIOS/etc. so let me know if there are any problems. Mike: I was unable to find the offending code that leaves your cursor sitting at 1,1 after a door swap -- still trying. * WFC menu now obeys Hardware.Mono setting - some of the menu commands were not before. In addition, the SysOp side info windows now obey this setting as well. * Automessage will truncate at 79 characters, instead of using 80 (standard screen width), since most terminals autowrap and cause an extra . * IEMSI software information will now be purged to just software name & revision, rather then including the serial/ extra information as well [oft used for software bragging (.terminate.), something that I despise]. * Keyboard input at some point had the added bonus of clearing out the screen line count; any key pressed during the execution would be parsed, and if it wasn't an abort key would accidentally reset the screen line count. This will fix amung other things message title scans going longer than a page, user listing not pausing, nodelisting not pausing, etc. * The WFC will now load the user language used by the "wfc" user record (Record 1, Offset 0 = SysOp). Thus the WFC Message/File will use the SysOp's language of choice. * The login sequence (before the Telegard version information), will load the default NewUser language, and thus pull the ANSI/name prompts from that language instead of the language already loaded (the first language loaded for -Bn connected calls, and the last active language for WFC answered calls).