r
This version of the BBS software includes the following changes:

The Area.Control.Sample file should give people an enough of a example of
how to setup areafix echo request forwarding, and auto add capabilities.

The English.Text file is no longer called English.Text, but instead called
Language.Text in order to be language neutral.

The BBS software now includes Multi-Linqual support.  The following is a
example 'Languages' file.  The Language file is the configuration file for
the multi-lingual support.  The languages file has three fields delimited
by a comma.  The first parameter is the name of the language, the second is
the Identifier for the language, and the third is the root dir in which
that language resides.

You can have up to 36 languages.  If the need arises we can expand this
number, but in order to assure that the mailer is still operational on all
levels we decided to limit it to the keys 1-0, and A - Z.

-- BEGIN: 'Languages' file ---
English ,ENG,D:\Adept\
French  ,FRN,D:\Adept\French\
Spanish ,SPN,D:\Adept\Spanish\
Finish  ,FIN,D:\Adept\Finish\
-- END: 'Languages' file ---

If the user chooses French the BBS will look in the following directories
for the language support files.

\Adept\French\System
\Adept\French\Menus
\Adept\French\Text

You should place all the files that you would normally put in the
\Adept\System, \Adept\Menus, and \Adept\Text sub-dir in the language
directories corresponding to the language they refere to.

If a user chooses a language and the BBS cannot find the Language.text
file in the \Adept\Languagename\System sub-dir it will default to the
language.text in the \adept\system dir.

Fixed a bug in menu option 200, and 201.  If you had a message being
forced to a specific subject or node number the BBS would also force
the message to the sysop of the BBS.  This command now works as
documented.

Added a option when replying to a message that would allow you to change
who it was to, and the subject, and will also prompt for carbon copies
if the person has the right security level.

Added the ability to set a users inactivity timeout period.  The timeout
period is listed in minutes.  Set it to 1440 for a unlimited timeout.

The BBS software now uses a new multi-system, multi-server capable chat
server.  You can configure the base node/line number from the config
->BBS->general settings menu.  Right now this only supports multiple
copies of adept running on the same network.  It will be expanded to
support serial, internet, and other network links.

In order for multi-line chat to work, you will need to run the deamon
ChatServer.Exe in anouther Window.

The EMSI mailer session have been QUITE cleaned up!  At the moment
AdeptXBBS connects with every mailer we have tested it with and vice
versa.  I personally have not seen a failed connect in a few weeks.

Fixed a bug in the files system where the BBS would crash on a uploaded
file.

Worked more on stability and speed issues.

Fixed a bug in GIOMT.  Sometimes when connecting to a program with a borken
zmodem implementation implementaton protocol engine would completely freak
out and create a GIOMT.LOG from hell sucking all CPU and writing a file
until it ran out of disk space or until you rebooted your computer.

Fixed the Bluewave Mail importing!

96a - Fixed two bugs in Gatekeeper.  Removed the PM version.  The two
      bugs in Gatekeeper where it would not allow areas above 1024
      and was not unarchive/arciving mail properly.

97  - Fixed a bug in the mailer, we couldn't sucessfully complete a mail
      session with Xenia.

      Fixed a bug in the multi-lingual support.  The BBS software wasn't
      running the MAIN.CMD from the languages menu sub-dir but instead
      from the BBS's default sub-dir.

      Fixed a possible timeout bug having to do with the new inactivity
      timeout options.

      Fixed a video display problem that was causing the system to act
      like it wasn't working locally when DOS doors when being run.

      Fixed several other Misc. Bugs in Gate Keeper.

      Fixed a bug in the message editor, when the sysop would exit chat
      mode it would abort the message.

      Added a user list to the Find Users Option.

      I was accidently shipping a old, thus bad, version of the fsys .dll
      for the BBS.  This was causing readon crashes in trhe BBS software
      especially if the user had entered the file system at some point.

      I am now shipping Othello, with full source to give both users and
      authors the ability to work with type 802 doors.  These can be VERY
      powerful.  It will allow you to write native OS/2 doors without
      having to deal with things such as com port access and what type
      of connect they are comming in on.

      Rexx now includes the following new functions:

      AdeptCheckBit, AdeptSetBit, AdeptUnsetBit.

      Retcode = AdeptCheckBit(line, BIT NUMBER, Numeric Long)

      Returns '1' if the BIT is set, '0' if it is not.

      This can be used to test if a users bit is turned on for any of the
      LONG bitmap'd flags.

      AdeptSetBit(line, BIT NUMBER, Numeric Long)

      Will set BIT Number 1 - 32 to ON.

      AdeptUnsetBit(line, BIT NUMBER, Numeric Long)

      Will set BIT Number 1 - 32 to OFF.

      'Example:'

       -- BEGIN --

       /* - - - - - - - - - x - - - - - - - - - - - - - - - - - - - - - - */

       UserFlag = AdeptGetVar(line, 42) /* 42 - User Flags */

       IsOn = AdeptCheckBit(line, 10, UserFlag)

       if IsOn = '1' then
       adeptprint(line, "Flag 10 is on!\r\n")

       AdeptUnsetBit(line, 10, UserFlag) /* turns bit 10 off */

       /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */

        AdeptSetBit(line, 5, UserFlag) /* Turns bit 5 on */

       /* - - - - x - - - - - - - - - - - - - - - - - - - - - - - - - - - */

       AdeptPutVar(line, 42, UserFlag) /* Make changes to the user record */

       -- END --

       The changes are not saved until you put the changes back into active
       memory with the AdeptPutVar option.

       AdeptDoDTR(line, '0' or '1')

           0 - Drop DTR (Will leave it dropped)

           1 - Raise DTR (Will Leave it raised)

       Ret = AdeptPeekByte(line, length)

           Will place the next char in the incomming stream that is waiting.
           It will NOT remove it from the incomming data steam.

           Length is the amount of time to wait for the next char to
           enter the data stream.  (This is a RAW comm function).

           The software will return TIMEOUT or LOSTCARRIER.

       NNTP Support!  This is the first version of the BBS software with
       native Internet Newsgroup Support via NNTP!

       *WARNING* The BBS software WILL CRASH if you are pulling in a news
       group that is NOT setup in the message area configuration!!!

       To setup NNTP go to the Config->BBS->Internet Options and fill in
       the name of your NNTP News Server.  Next click on The NNTP Client
       option checkbox. (It is best that you already have your SLIP, PPP
       or TCP/IP network running with the news server available).  The
       BBS should be able to handle it if you are not connected to the
       to the NET.   When the software first connect to the server it will
       pull down the available newsgroup list.  This could take 5/10
       minutes.

       After you have the list it is recomended that you then decide what
       newsgroups you would like to get.  There will be a file in the
       \adept\usenet dir called Available.List that will also contain
       a list of available newsgroups.  You can pick the newsgroups to
       turn on, and off from the Config->BBS->Internet Options Menu.

       Be Warned!!! Do to a bug that will be fixed in the next release
       if you try to shut the BBS down while your news client is 'BUSY'
       the BBS will have a tendency to 'LOCK' your entire computer for
       30 seconds.  DO NOT freak out!  It will release the message que
       within 30 seconds.  If you shut the BBS down with the upper left
       hand corner this will not happen, but your newgroup last reads and
       other important info will nto be saved.

       Fixed a couple of bugs in the AdeptGetVar and AdeptPutVar REXX
       functions.

       The Events Editor is BACK!  It actually works this time too. :)

       Fixed DUPE Checking in GateKeeper.

       Fixed the Dupe Area 0 Warning.

       Changed the packet headers a slight bit so that some programs
       would stop complaining about our packets being non-standard.

       The ability to post messages in a newsgroup is now available.

       I added additional options to the BBS that should allow it to
       hangup on the user almost everywhere now.  Before it wasn't
       always hanging up when you hung up, or locked out a user.

       fList is a complete update.  Looks like I was accidently
       distributing a WAY OLD version of this utility.  No wonder it
       didn't work right.

       fUtil is also a complete update, same mistake as above.

       AdeptComFlush - now really makes sure the incoming/outgoing port
                       info is flushed.

       More new REXX functions!

       AdeptPrintL(line, "Text to print locally ONLY")

        AdeptPrintL works exactly like AdeptPrint except it prints to the
        LOCAL screen only.

       AdeptWaitConnect(line, time)

        AdeptWaitConnect will wait for a modem connect or error code.  It
        will return 0 if it time outs if it doesn't timeout it will
        then return the return code from the modem i.e. 'CONNECT 28800'
        'ERROR', 'OK', 'NO CARRIER'.

        The time is in the format of milliseconds.

       AdeptDial(line, "STRING TO DIAL")

       AdeptDial will parse a string to the modem through the dialing
       translation.  I.E. "v~^ATDT555-1212|" will be translated to
       LOWER DTR, PAUSE FOR A SECOND, RAISE DTR, SEND 'ATDT555-1212' then
       a CR (Carriage Return to the modem'.

       Added a new Meta command to be used with the who is on, {CQ will
       display the users handle, it defaults to {CG the users real name.

97a  - Fixed a possibility that the BBS could go into a loop if a rexx
       script had changed the state of carrier checking and accidently
       exited do to error or a trap.

       Made some MAJOR stability enhancements in serveral sections and
       areas of code.  The mysterious BBS 'vanishing' symptoms should
       not accure.  As you know the BBS will shut itself down cleanly
       if it encounters a problem it cannot handle.  There should be
       less of a chance that it will now encounter a problem it cannot
       handle.

       The BBS now retains the last known settings for the outbound box.

       Fixed a bug in the Message Area configuration, it wouldn't handle
       the message base path properly, now it does.  It was still creating
       some of the files in the \adept\system dir not the path to the
       message area dir.

       The message base will no longer allow illegal charecters.  ALL
       message base utilities had to be updated.  These chars will no
       longer be allowed '\, /, *. ?, ^, %' and will be converted
       to '_'.

       Added some code the the mailer the will let it settle down a
       little better durring mail session, helping to prevent fewer
       bad mail connects.

       The BBS software no longer crashes when you are editing a
       outbound icon and it rescans.

       Added a new menu option '28' Message Searching!

       Moved several hard coded pieces of text into the Language.Text file.

       GateKpr accepts lines in an Areafix style message that
       begin with '+'

       GateKpr accepts lines in an areafix style message that
       begin with '%'  the two key words recognized are
       'query' and 'list' all other words are ignored at this
       time.

       Attempted fix on routed netmail occasionally getting
       put into a type 2.2 packet.

       New GateKpr keyword:  IMPORTALLNETMAIL
       This keyword causes any netmail  going thru a system
       to be imported into the netmail area. If this keyword
       is not present, the current default behavior occurs.

       Fixed a bug with time calculation in the system events.

       Changed Config->BBS Action Flags, and Config->BBS->Default User
       Settings.

       New REXX Function.  AdeptChangeGroup(line, group_num)

       The AdeptChangeGroup function will return '0' if the users
       group was not upgraded, or not found.  It will return '1'
       if the users group was upgraded.  This works just like
       upgrading a users group in the local user editor.  The user
       will take on the changes specified for the specific group
       that they have joined/are in.

97b    Definately fixed the bugs in the Events Editor this time around.

       Increased stability even more, a LOT more.

       EMSI Mail Sessions are MUCH MUCH smoother now!  Sysops who have
       seen failed connects in the past should not see them as much
       or at all.

       If the BBS software encounters a error it cannot handle it should
       edit with a errorlevel of '1'.  With this you can automatically
       restart adept in event of a error.

       This is definately one of those historic moments.  The SYSOP CHAT
       PAGE TIME NOW WORKS!!!

       The BBS_Configuration grunding seems to be gone, we also added some
       additional protection to the mailer configuration saving even though
       we have had no reports of problems with it.  So far the word back
       on this one is good.

       Fixed a bug in the logon sequence, if you where running multi-linqual
       support it wouldn't obey login timeouts.

97c  - Fixed a bug in the time bank, it would let a user put in as much
       time as they wanted.  And would let the store ALL of their time.

       Added support for Send Crash Mail ONLY, and Send Crash Mail No
       Matter what the cost.  We where not handling this properly, now
       we do.

       You can now adjust the amount of time a user used today.  This can
       be changed form the users record of from the right mouse popup while
       they are on-line.

       The file list now goes from 1 - 99, then repeats.

       Edit Tagged Files List should now allow you to add files when
       chosen from a menu.

       FileAreas.asc/ans/avt/etc and MessageAreas.asc/ans/avt/etc will
       now handle meta variables, and more prompts.

       Fixed a bug in the file listing more prompt, if you hit any key
       other then one of the ones on the list it went into continuious
       list mode.

       In the events editor, if you removed or cleared the COMMAND option
       it wouldn't make the changes.

       Added ReadArc.cmd to the distribution archive.

       When searching messages the Next key acted as the abort key, and the
       abort key acted as the next key.

       Fixed a bug in XMSG it wouldn't handle message bases on multiple
       drives/directories when doing a personal message index scan.

       The local user editor would close the second a user logged off,
       now it should not.

       New type 803 DOOR.  The type 803 door works exactly like a type
       802 except that it sets, and allows your to set several 32-bit
       semephores giving you and the BBS more interaction.

       They are as follows.

       \SEM32\ChildDone\Line#
       \SEM32\Carrier\Line#
       \SEM32\TimeTick\Line#

       We will activate the \SEM32\Carrier\Line# when a user drops
       carrier.  This then gives you 10 minutes to complete your
       task and return to the BBS software.  If you issue
       a \SEM32\ChildDone\Line# and exit we will handle everything
       normally.

       Next the TimeTick warns you of when the user has 3, 2, and 1 minute
       remaining.  We will issue it three times.

       These should help make your programs more aware of Adept, and Adept
       more aware of them.

97d  - I wasn't expecting to release v0.97d so soon, but since several
       major bugs are fixed I figured it was important to get this one
       out fast.  Some of the bugs we where going to fix in 97d will
       be moved to 97e.

       GateKpr now has a 1.2 meg message size limit.  Also GatePm is
       back! :)

       Areafix SYS 3175's should be gone!  Please let us know!

       Users have reported some problems with user handles when they
       log on, this is now fixed.

       I think I found what was causing AdeptXBBS to not run on
       some systems.  The culprit seems to be OS/2 v2.x and it was
       a limitation in the values we where using that OS/2 v3.0
       could handle but v2.x could not.

       Included new REXX DOCS and Examples, these docs where written
       by Steven Tower and Jean-Ray Arseneau.


97e    A lot of sysops who resgistered the REXX module have asked what
       will it be getting me.  We have been working on a enhanced REXX
       module for some time now.  As I have said that ONLY the functions
       that duplicate what the .menu system allows will be available to
       the sysops who have not purchased the REXX module.  Since this
       version of the BBS supports the enhanced REXX module I will outline
       what this module will be giving you.

       Several things will change in reference to the REXX system
       in this next beta.  We will no longer run .CMD file.   We have
       decided to call .CMD files .SRX (Standard REXX) files.  This
       will pave the way for .ERX (Extended REXX) files.  .ERX files
       are preprocessed REXX files for use with Adept.  Sysops who own
       the REXX module will be able to execute .ERX files.  Sysops who
       do not will ONLY be able to execute .SRX files.

       Why ERX files?

            ERX files are REXX files that have been preprocessed with the
       AdeptREXX Processor (SrToErx).  ERX files are typically 50% smaller
       and always faster then standard REXX files (When run Cached).

       We are acking that people who write rexx scripts for Adept that
       are not pre-processsed please use the extention .srx.  The
       preprocessor will ONLY process files with the .srx extention.

       SrxToErx.Exe FileNameWithoutExtention will yield a file with the
       same name, but the .erx extention.  If you are a commercial
       developer is is recomended that you preprocess your rexx .srx
       files before distributing them.  Also it it recomended that you
       DO NOT preprocess the following!

       Atstart.Cmd - This MUST remain a .CMD file.  So that others may
       modify it and chain needed rexx scripts (preprocessed or not) from
       it.

       The BBS software will look for .erx versions of files that we
       feel are ok to pre-process.  In fact if you are running a .srx
       file (i.e. .cmd) file in cached mode (as we default to) it is
       treated as a .erx file after we preprocess it internally.  So
       it is honestly recomended that you do not preprocess anything
       that you are NOT going to be distributing.

       AdeptXBBS now includes REXX Caching.  And two new REXX functions for
       chaining REXX files within REXX files.  The first AdeptChainRexx
       runs the rexx script in cached mode.  The second runs it in NON
       cached mode.  Once a REXX script is cached it's cached until you
       shut down your copy of Adept.

       There is also a new menu option 11.  Menu type 11 runs a REXX
       script in NON cached mode.  Menu option 10 runs rexx scripts in
       Cached mode.

       AdeptChainRexx("RexxScripName", line)
       AdeptChainRexxNc("RexxScripName", line)

       Messages posted in a area that has messages marked as forced
       private will be forced private no matter what the off-line mail
       reader tells it to post it as.  This has been causing confusion
       with users who find that they can read some of the messages in
       the Private Mail area because some mail reader was marking
       messages in a private area as public.

       Now when a user send a /s,## message to anouther user NOT in
       multi-node chat a press any key is displayed before the message
       scrolls off the screen. (Prompt #420)

       The Call Collision checkmark on the Mail Settings dialog now works.

       Changed the way the outbound mail scan works.  It's much less CPU
       intensive!

       Fixed the New Message scan bug.  To clean up your current new
       message scan it is recomended that you run XMSG -I to rebuild
       Personal Mail Index's.

       There is a new ATO on Data checkbox in the Modem Settings option.
       This is for people who are using the FAX cmd files to receive fax's
       with Adept.  Some modems want a ATO after the DATA string is
       received, soem do not.  This allows you to specify which you wish
       to use for your specific modem.

       Made some changed to the BBS Configuration internal functions to
       see who/what how it's getting currupted.

       UNREGSITERED SYSOPS:

           This will be the last beta of AdeptXBBS that will handle more
       then 2 nodes, and run .erx files, and with REXX caching.  The folling
       REXX functions will NO longer be available to sysops who do not and
       have not purchased the REXX module.

     AdeptComFlush
     AdeptComWrite
     AdeptPutVar
     AdeptPutC
     AdeptPutKey
     AdeptDoDTR
     AdeptPeekByte
     AdeptSetTimer
     AdeptTimerUp
     AdeptDial
     AdeptWaitConnect
     Adept16BitCRC
     Adept32BitCRC

        The following REXX functions will be NEW in the next major beta

     AdeptChatSendMsg     - Multi-node chat
     AdeptCharRead        - Multi-node chat
     AdeptChatDeleteAll   - Multi-node chat
     AdeptChatUnavailable - Multi-node chat

     AdeptCheckCard     - Validate credit card

     -- Userbase minipulation functions --

     AdeptGetUser       - Get a user and pull their record into a temp var
     AdeptNextUser      - Get next user in the file and pull into a temp var
     AdeptPrevUser      - Get prev user in the file and pull into a temp var
     AdeptGetUserVar    - Get functions for temp user in memory
     AdeptPutUserVar    - Put functions for temp user in memory
     AdeptSaveUser      - Saved the temp memory vars to users record

    -- More REXX to come --

    SysEdit.Exe is a local OS/2 command prompt version of SysEdit. It
    should be run from the Adept directory.

    SysEditR.Exe is a remote Adept 802 door version of SysEdit.

    The menu option woud look like:

    "R, 802, Remote Editor,SysEditR.Exe,0"
 
    Plus whatever security level you want for that program.

    This is the first version.. User editor only!  More to come very soon!

97f - Bug Fix, Pressing OK on New user Defaults caused the BBS to crash and
      wouldn't save the changes.

      Ok, on the CPU Priorities will used to also cause a crash.

97g - AdeptChainRexxNC is broken, do not use it with .erx files, it will
      still work with .cmd, and .srx files.

      AdeptChainRexx and AdeptChainRexxNC have syntax changes, and notes
      that need to be addressed here and now.

      I have been informed that ALL rexx functions in the software enless
      you are looking for a value should be called with the CALL function
      NOT with the () method as documented. i.e.

      call AdeptChainRexx "RexxCmdFile.Cmd", line

      NOT - AdeptChainRexx("RexxCmdFile.Cmd", line)

      The second one will usually not work correctly.  The first works.

      Also you should try to use the call functioname ANY time you are
      not get a value back i.e.

      call AdeptPrint line, "This is a line to print"

      key = AdeptWaitKey(line)

      Also I documented the AdeptChainRexx, and AdeptChainRexxNC functions
      wrong.  The proper syntax is "call AdeptChainRexx ScriptName, line",
      and  "call AdeptChainRexxNC ScriptName, line" please make a note of
      this.  Using the function the way I originally documented it can
      cause the script to exit wrong, and our cause the BBS software to
      crash.

      Fixed a serious bug in the outbound mail scanning/handling.  When
      a node was sent mail, their entry in the outbound box wasn't being
      pulled for up to 5 minutes after the poll was completed.  It was
      causing the system ot be polled again and again until the 5 minute
      timer was up.  This is corrected.  This wouldn't have created any
      dupe problem, and multiple copies of the mail packet where not
      sent, it was just causing accessive calls to be made.

      BBS Action flags editing, and New User Default flag editing would
      cause the BBS software to crash.  This is also fixed.

      Made some additional speed improvements in the software.

      Some people have been confused by the fact that we store our
      Fidonet mail packets in x.x.x.x.x.domain_name format.  Our mailer
      is 100% Fidonet Standard compatible and will convert the long
      filename on the file to the fidonet xxxxxxxx.xxx format when
      transmitting the mail to anouther fidonet mail.  We store our
      mail in this format to make 5-D addressing easyer, and I personally
      don't think any of you want to sit there and do HEX calculations
      to figure out that xxxxxxxx.xxx is actually a packet going to
      p.1.369.210.0.Fidonet.  If you try to do 5-D addressing with
      mail in the standard fidonet xxxxxxxx.xxx format you lose the
      Zone, Point ID and Domain Name.  The xxxxxxxx.xxx is only a 3-D
      capable format and must be put through a lot of work to make it
      4-D and 5-D capable.  For example you then need a Sub-directory
      for each seperate domain.  Then hope you don't have a BBS with
      the same zone, node and net number, because then we're talking
      serious problems.  So as you can see, we eliminate a lot of
      headaches and potential problems with using our format.

      Expectations...

          Several people have expected a Printed Manual, Box, and
      Diskettes when registering thier copy of AdeptXBBS.  Several
      things prevent us from being able to do the above.  Cost, Time,
      and the fact that Adept is, and will continue to be in such
      rapid development.  First Cost.  I have made it clear that I will
      gladly start shipping AdeptXBBS with a professional Box, Disk,
      and Manuals when either of the following occure.  The price
      doubles, or we become the #1 selling BBS program available.

      Time, there are only a handful of us here.  We've already have
      so much to do that we cannot keep up with it.  Stuffing envelopes
      with diskettes, binding manualls, and then shipping them
      would be the straw that would break us as a company.  We're
      trying to put out the best bbs program ever written.  If you want
      pretty box's and bound documentation there are several companies
      who will give you fluff, but very little content.

      Last but not least, rapid development.  We have no plans to stop
      the rapid development process that has been going on for the last
      3 years.  You can certianly expect to see new versions, upgrades,
      bug fixes, and blinding speeds.  This also includes revisions to
      the documentation, enhancements of options, and more.  I would
      like to keep this pace up rather then be bogged down with
      things that in no way effect the programs performance, features,
      and how well it runs, and how satisfied you are with it.

      For example we have spent the last several weeks boosting our
      support team, and getting tech support up to something that is
      acceptable.  We're not quite there yet.  Please if you are having
      problems log into our support BBS (407) 477-6310, or telnet to
      AdeptSoft.Com (199.227.57.1) and go into message area #10. Post
      what you need help with or are having a problem with.  Someone
      will certianly help you!

      Several people have asked about registrations, I will be spending
      all this next week making sure that every single registered sysop
      has thier registration keys.  If by the end of the week you have
      not received your key e-mail Julies@AdeptSoft.Com,
      Tower@AdeptSoft.Com and Jlawlor@AdeptSoft.Com.  This will insure
      that you absolutely DO get your key.

      We would also like to thank everyone who registered.  Please remember
      your feedback on this product is VERY important to us.  We need to
      know your about your good experiences, bad experiences, gripes,
      sugestions, and ideas.  It is you who will mold the direction and
      what features go into this program!

      I guess thats enough of my soapbox mode.  Thanks for all of your
      support!

       -- Steven

97h - When a user forgets their password or entered it wrong 3 times
      the BBS will look for and autoexecute the menu BadPass.Menu.
      We also look for and display BadPass.Asc/Ans/Te2/Etc

      Fixed a bug in both the message and file areas.  We where not
      really handling message and file areas above 1024, this is
      now definatly fixed.

      In a Rexx Script we where not allowing access to the bbs variables
      and when they where accessed the BBS software would completely
      crash.  This is corrected.

97i - Not released do to the fact that 97i, and 97l will look almost exactly
      alike and we're not out to totally confuse people.

97j - Policy Change - REXX is NO LONGER A OPTION.  #1 Since so few people
      have not registered AdeptXBBS without the REXX programing sub-system
      and since there are so many rexx scripts being released in such a
      small amount of time we've decided to no longer offer AdeptXBBS
      without the REXX options.  The REXX sub-system is one of the most
      unique features of AdeptXBBS, with over 270 keywords and functions
      and over 500 of our own predefined constants and structors it makes
      adept the most unique BBS ever written for OS/2.  We've told people
      that the rexx engine will give you total control over the BBS.  With
      version 97j we've completely lived up to this promise.

      Not all the new rexx functions are going to be completely documented
      in this beta.  In the 3 weeks since the release of the last beta
      we've added so many new functions that keeping up with the docs
      has been a impossible task.  As you can see though some of the
      functions are quite concisely documented and this will be the
      format we will be using for a complete rewrite of the docs in the
      next few weeks.  Once the new docs are finished v1.0 of AdeptXBBS
      will be released.

      Added:  AdeptCurPos(line, ##, ##) or AdeptCurPos(line)

      The AdeptCurPos function works identically to the OS/2 SysCurPos
      rexx function, except that you must pass the line number, and like
      the SysCurPos function it's 0,0 based, not 1,1.  I.E. In ANSI codes
      1,1 is the upper left hand corner, in Screen Positioning like
      what SysCurPos and AdeptCurPos 0,0 is the upper left hand corner.

      Fixed mailer connection problems with Intermail.
      Fixed mailer connection problems with VFIDO.

      Fixed a bug in AdeptChangeGroup, it would go into a endless loop.

      Fixed a bug with not recognizing +FCO fax connects.

      Fixed the spawning of sessions durring events.  The BBS should now
      properly free the port, spawn the program, and restart the port.

      Added better filtering to the EMSI mail sessions.

      Fixed the 'Lockup' on shutdown problems.

      View files is now working again.

      Fixed a bug in the Events file save routiens.

      Fixed a bug in events ignoring costs, and bad calls, etc based on
      the events setup.

      Fixed several problems with REXX and .menu interaction.  For example
      if a menu was called from a rexx script the only way to get back to
      the rexx script was to simulate a user loging off.  This is no longer
      the case, a menu will now return to a rexx script when the Clear All
      Gosubs is called, and when your have reached the first gosub and it
      was the menu called by the rexx script.  Also when a user presses
      the menu items for logoff it trigures a option so that you can check
      and see apon returning from your menu if the user wants to log off.

      rc = AdeptRequestsLogoff(line) will return 0 of the user doesn't
                                     want to log off, or 1 if the user
                                     wants to log off.

      Function keys now work from the local window!!! And Shift-F10 will
      bring up the right mouse popup if you do not have a mouse.

      Fixed the problems with files grunging.  You shouldn't see any
      more problems with the user file grunging, along with the
      configuration and other files.

      Did a near complete rewrite of the off-line mail functions.
      .QWK, Bluewave, Fidonet, and Text export should all give the
      same display feedback, and should function identically.  It
      should also be faster.

      Changed the date storage method in the message base so that GIGO
      doesn't complain anymore.

      Fixed several misc bugs having to do with the message base.

      The BBS will now look for and display MsgAreas###.ext, and
      FileAreas###.ext, first before displaying MsgAreas.ext, and
      FileAreas.ext.  The ### is the security level of the user.

      The [RUN] option in the language.text will execute a rexx script
      of your choice.

      AtEnd.Cmd is now executed locally.

      NoMoreTime.[ext] will now be properly displayed when a user is
      logged off and has no more time remaining.

      Fixed a bug where adept would count BUSY's as no-connects and report
      that it had lost carrier after a busy signal.

      Fixed some bugs in the chat, menu driver, edit options, message base,
      text display functions, and numerious other little fixes here and
      there.

      Fixed a message write security bug.

      Fixed numerious bugs in the new rexx engine, along with a working
      AdeptChainRexxNC function.

      Now when the BBS cannot initialize a modem instead of killing the
      node it marks the node as inactive.  The node can be reactivated
      when the problem is corrected by clicking on mailer, and then
      clicking on Inactive.

  RetCode = AdeptRexxStartThread(FileName, [var1 var2 var3 var4])

  PARAMETERS

      FileName - Name of AdeptRexx program to execute as a background
                 thread.

      Var1 - Variable to pass to the rexx program, you can pass as many
             variables you want.  They are not shared once they are
             passed. See - AdeptSetGlobalVar, and AdeptGetGlobalVar

  RETURNS

      Rexx Error Codes

  EXAMPLE

      ThreadID = AdeptRexxStart('Thread.Cmd', line)

  DESCRIPTION

      This will cause the program Thread.Cmd to be run in the backgroung
      with the rexx programing calling it as the parent.  When the
      parent ends, all children and grandchildren are killed with it.

      Just one programing note.  DO NOT use functions in the background
      script that sit 'inside' internal adept functions.  For example
      AdeptInput should NEVER be used from a child if you want to be
      able to kill that thread with the AdeptKillRexxThread function.

  RELATED FUNCTIONS

      AdeptKillRexxThread, AdeptSetGlobalVar, AdeptGetGlobalVar,
      AdeptDropGlobalVar

  AdeptRexxKillThread(ThreadID)
  AdeptSetGlobalVar('VarName', Value)
  AdeptGetGlobalVar('VarName')
  AdeptDropGlobalVar('VarName')

  Data = ARStrip(Var)  /* Right strips leading spaces and tabs from Var */
  Data = ALStrip(Var)  /* Left strips leading spaces and tabs from Var  */
  Data = AToUpper(Var) /* Converts all text in Var to upper case         */
  Date = AStripCr(Var) /* Strips remaining Cariage returns from Var     */

<---------------------------------------------------------------------------->

  RetCode = AfSysOpen(Directory, fSysHandle, Create)

  FSysOpen should be called by each program in the process which wants
  to use the file system.

  PARAMETERS

    Directory -
        This is the directory that the files system is located in. Normally
        a program whis uses the Adept file system is started in the '\Adept'
        directory, and the files system would then be in '.\Files', or more
        simply, 'Files'.   The directory name should NOT end with a 
        backslash or forward slash.

    FSysHandle - output
        This contains the handle to the file system.

    Create - input
        Tells the file system whether to open the current file system files,
        or to create new ones.

        FALSE - Open current files.
        TRUE  - Create/Open new files.

  RETURNS

    Return Code.

    AFSysOpen may return the following values:

    0           No errors.
    90          FSYS_ERROR_ALLOC_MEM        
    91          FSYS_ERROR_INIT_BIDX
    100         FSYS_ERROR_OPEN_DATA
    101         FSYS_ERROR_OPEN_DESC
    102         FSYS_ERROR_OPEN_PATH
    103         FSYS_ERROR_OPEN_NIDX
    104         FSYS_ERROR_OPEN_DIDX
    105         FSYS_ERROR_OPEN_AIDX
    180         FSYS_ERROR_CREATING_KEY

  REMARKS
    A successful AfSysOpen request returns a handle to the file system. All
    other calls to the file system functions require this handle.

    Note: When you choose to create a new file system, the indexes are
    destroyed if they exist. All other files are opened, and NOT destroyed.
    If you wish to create all files from scratch, make sure there are no
    files in the directory.

    You could call AfSysOpen twice with a different directory to open
    two different files system to copy entries from one file system
    to another.

  EXAMPLE CODE
    This example calls AfSysOpen, and uses the current file system files.

        RetCode = FSysOpen('.\Files', 'FSysHandle', 'FALSE')

<---------------------------------------------------------------------------->

  RetCode = AfSysClose(fSysHandle)

  AfSysClose close the file system.

  PARAMETERS

    fSysHandle - input
        Handle to the currently open file system.

  RETURNS
    Return Code.

    AfSysClose may return the following values:

    0           No errors.

  EXAMPLE CODE
    This example calls AfSysOpen, and creates new file system files, then
    closes the file system.

        RetCode = AfSysOpen('.\Files', 'fSysHandle', 'FALSE')

        .
        .
        // use the file system.
        .
        .

        RetCode = fSysClose(fSysHandle)

<---------------------------------------------------------------------------->

  RetCode = AfSysDeleteIndexEntries(fSysHandle)

  AfSysDeleteIndexEntries deletes a file from all of the indexes.

  PARAMETERS
    fSysHandle - input
        Handle to the currently open file system.

  RETURNS
    Return Code.

    AfSysDeleteIndexEntries may return the following values:

    0           No errors.
    92          FSYS_ERROR_SEM_TIMEOUT
    190         FSYS_ERROR_DELETING_DATED
    191         FSYS_ERROR_DELETING_ANAME
    192         FSYS_ERROR_DELETING_NAME
  
  REMARKS
    AfSysDeleteIndexEntries deletes all refrences to a certain file in the
    indexes. It does NOT remove that files record from the data file.

    To set which file you wish to delete, you must either search for, and
    find the file using the searching functions, or you must use the
    AfSysSetIndexXXXXX series of functions to set the correct filename, date,
    area name, and file record offset.  Obviously it is best to search for
    the file, find it, and confirm it is the file you wish to delete before
    you delete it.

  EXAMPLE CODE
    Assuming you have already set the file index information this example 
    calls AfSysDeleteIndexEntries to delete the file from the indexes.

        RetCode = AfSysDeleteIndexEntries(fSysHandle)

<---------------------------------------------------------------------------->

  RetCode = AfSysAddIndexEntries(fSysHandle)

  AfSysAddIndexEntries adds entries in the indexes for a file.

  PARAMETERS
    fSysHandle- input
        Handle to the currently open file system.

  RETURNS
    Return Code.

    AfSysAddIndexEntries may return the following values:

    0           No errors.
    92          FSYS_ERROR_SEM_TIMEOUT
    200         FSYS_ERROR_ADDING_DATED
    201         FSYS_ERROR_ADDING_ANAME
    202         FSYS_ERROR_ADDING_NAME
  
  REMARKS
    Index data should be set using the AfSysSetIndexXXXX series of functions
    before adding a file to the indexes.

  EXAMPLE CODE
    This example deletes the old index entries for a file, set the new index
    data, then adds in the new index entries.

        FSysDeleteIndexEntries(hFSys)

        /* set new index data */
        AfSysGetFileName(fSysHandle, 'Buffer')

        AfSysSetIndexFilename(fSysHandle, Buffer)

        AfSysGetFileDate(fSysHandle, 'Date')

        AfSysSetIndexEntryDate(fSysHandle, Date.1, Date.2, Date.3)

        AreaNum = FSysGetFileArea(fSysHandle)

        AfSysSetIndexAreaNumber(fSysHandle, AreaNum)

        /* add in new index entries */
        FSysAddIndexEntries(fSysHandle);

<---------------------------------------------------------------------------->

  AfSysSetIndexFileName(Handle, FileName)
  AfSysSetIndexRecordOffset(Handle, Offset)
  AfSysSetIndexAreaNumber(Handle, PathIndex)
  AfSysSetIndexEntryDate(Handle, Year, Month, Day)
  (If Year, Month, and Day are omitted it will use the current date)
  AfSysSetFileName(Handle, FileName)
  AfSysGetFileName(Handle)
  AfSysSetUploader(Handle, UserName)
  AfSysGetUploader(Handle)
  AfSysSetFileSize(Handle, FileSize)
  AfSysGetFileSize(Handle)
  AfSysSetFileArea(Handle, AreaNum)
  AfSysGetFileArea(AreaNum)
  AfSysSetFileDate(Handle, Year, Month, Day)
  (If Year, Month, and Day are omitted it will use the current date)
  AfSysGetFileDate(Handle, 'Date.')
  Returns Date.1 - Year, Date.2 - Month, Date.3 - Day
  AfSysGetFileDescription(Handle, 'Buffer')
  Fills Buffer with the full description.
  AfSysSetFileDescription(Handle, Buffer)
  Will write buffer as the files description.
  AfSysSetListable(Handle, 'TRUE' or 'FALSE')
  AfSysGetListable(Handle)
  AfSysGetFreeFile(Handle)
  AfSysGetFreeTime(Handle)
  AfSysGetFreeBytes(Handle)
  AfSysgetSecLevel(Handle)
  AfSysGetCopyFile(Handle)
  AfSysGetAge(Handle)
  AfSysGetDlAble(Handle)
  AfSysGetPathName(Handle)
  AfSysGetTimesDl(Handle)
  AfSysSetPathIndex(Handle, PathIndex)
  AfSysSetAge(Handle, Age)
  AfSysSetDlAble(Handle, 'TRUE' or 'FALSE')
  AfSysSetSecLevel(Handle, SecLevel)
  AfSysSetReadDescFlag(Handle, 'TRUE' or 'FALSE')
  AfSysSetCopyFile(Handle, 'TRUE' or 'FALSE')
  AfSysSetFileRecord(Handle)
  AfSysSetDescOffset(Handle, Offset)
  AfSysReadFilePath(Handle, Index, 'PathBuffer')
  AfSysWriteFilePath(Handle, Index, FilePath)
  AfSysFindFirstName(Handle, Buffer)
  AfSysFindNextName(Handle)
  AfSysFindExact(Handle, Buffer, AreaNum)
  AfSysListFirst(Handle, AreaNum, Date, SearchString)
  AfSysListNext(Handle)
  AfSysZeroFileRecord(Handle)
  AfSysFirstName(Handle)
  AfSysAddIndexEntries(Handle)
  AfSysResetFilePtr(Handle)
  AfSysResetDescFilePtr(Handle)
  AfSysReadDescriptionLine(Handle, 'DescBuffer')
  AfSysRawReadFileRecord(Handle)

  AdeptComPutC(Line, Int)
  AdeptComWrite(Line, Buffer)
  AdeptComPeekByte(Line, CheckTime)
  AdeptComGetByte(Line, CheckTime)
  AdeptComDoDTR(Line, '1' or '0')
  AdeptComFlush(Line)
  AdeptComGetString(Line, Len, CheckTime, WatchChar, Ignore, 'Buffer')
  AdeptComGetBlock(Line, Len, CheckTime, 'Buffer')
  AdeptComWaitConnect(Line)
  AdeptComDial(Line, 'String to Dial')

  AdeptRawOpenSocket(Flags, 'HostName', PortNum)
  AdeptRawComOpen(PortName, BaudRate, 'N' or 'E' or 'O', Parity, StopBit, Flags, 'HandleBuf')
  AdeptRawComClose(Handle)
  AdeptRawComGetBlock(Handle, Len, CheckTime, 'TRUE' or 'FALSE', 'Buffer')
  AdeptRawComGetString(Handle, Len, Term, CheckTime, 'TRUE' or 'FALSE', 'Buffer')
  AdeptRawComWrite(Handle, Buffer, Length)
  AdeptRawSetBPS(Handle, BaudRate)
  AdeptRawComLink(Handle, ToComHandle)

  ReturnComPort(Line, Port, Port, Port, etc)

  AdeptTimeLeft(Line, [NewTime, '1' or '0'])
  AdeptCurPos(line, etc etc, check the OS/2 docs)

  Print(line, 'data to display')
   The print function differs from all the other print functions in that
   meta variables and \ metas are not converted. i.e. \r\n will not produce
   a carriage return/new line.
  AdeptPrintL

  AChatSendMsg(Line, Flags, Msg, Text)
  AChatGetMsg(Line, To, From, Text)

  AdeptCheckCard(Card Number)

 --- Language Text Changes ---------------------------------------------------

  If you decided NOT to overwrite your Language.text you will need to replace
  the following lines with the below info.

  #590
  [Cvt][Str]File: %s  **  Page #%u\r\n
  #591
   (END)
  #592
  [Cvt]\r\nNot found\r\n
  #593
  [Cvt][Str]\r\n Search string: [%s]\r\n -> ;
  #594
  [Cvt]\r\nNot yet implemented\r\n
  #595
  Next Page
  Prev Page
  Home
  End
  Find String
  Over
  More
  Stop
  #596
  [N]ext Page, P)rev Page, H)ome, E)nd, F)ind String, O)ver, M)ore, S)top

 --- Language Text Changes ---------------------------------------------------

  Sorry about the state of the READ.ME file.  While the pre-release is
  available we'll work on the docs, and read.me's to make them more
  professional.

v1.02


When checking use socket and use telnet it would check both - Fixed
The BBS Software would trap if it couldn't bind a socket    - Fixed
Hanging up on a user sometimes doesn't work                 - Fixed
Yoohoo/2u2 Sessions would sometimes fail                    - Fixed
Zedzap sessions with TBBS and other systems was fail        - Fixed

Added a 'NOEMSI' option to the Mailer->Controls pulldown.

Archive was missing the following files:

XMSG.EXE, Unuke.Exe, and Usermod.Exe - Included

GS.EXE was corrupt - Replaced

GATEKPR.EXE now defaults to the text mode version.  GatePm.Exe is the
PM version of gatekpr.  The doscall1.dll errors should be fixed.  I think
it too was a cause of a corrupt .exe file.

v1.04

Fixed several Zmodem problems that cropped up in the v1.0x series of the
BBS software.

Increased Zmodem efficiency.

Fixed several bugs in Gatekpr.exe, there is ONLY the PM version in this
release.

Fixed several problems with the Prompts System, it should be over twice
as fast.

Fixed some problems with the meta conversion system, it too should be
almost twice as fast.

Fixed NNTP File Corruption.

Added two new command line options.

/NOFREEALIAS - This could fix some possible traps that some people are
               having and should not really effect system usage much at
               all.

/MEMDEBUG    - Turn on memory allocation debugging.  This will REALLY slow
               the BBS Software down, but will give us info on anything
               in the memory allocaton/deallocation that might go wrong.

Added several very high level file system functions to the AdeptREXX system.

AfSysGetAreaFileList(hFsys, AreaNumber, 'ListBuffer')

Returns = ListBuffer.0 = Number of Files in Current Area
          ListBuffer.1.1 = File Name
          ListBuffer.1.2 = File Path
          ListBuffer.1.3 = File Size
          ListBuffer.1.4 = File Ul Date
          ListBuffer.1.5 = Times Downloaded

          ListBuffer.2.# - Next File Name until last number of files

AFSysAddFile(hFsys, AreaNumber, FileName, FilePath with trailing '\',
             Description, FileSize)

AfSysMoveFile(hFSys, AreaFromNumber, AreaToNumber, FileName)

AfSysDelFile(hFSys, AreaNumber, FileName)

Comming in v1.05 -

 Full Enhanced Support for Durand Communications Windows Interface Protocol.
 More Internet Options.

v1.05 -

  W.I.P. was delayed while we rewrite the AdeptXBBS menu system.

  Included the complete documentation for the @SPTH supported by AdeptXBBS
  with sample source and more.  If you are a developer PLEASE add support
  for this much improved 'PATH' line into your software.  Once two other
  programs support the SPTH we will gladly add support for the PATH
  kludge.  The PATH line is a 2-D fidonet Kludge, the SPTH is a 5-D
  capable version of the PATH.

  v1.05 has probably the most tested and debugged version of AdeptXBBS
  released to date.  This is one of the reason why there has been such a
  gap between the release of v1.04 -> v1.05.

  The following known bugs have been fixed in the BBS software and related
  programs.

  All known .TIC processing bugs are fixed.

  All known Areafix processing bugs are fixed.

  Fixed a password packet problem with Gatekpr.

  Gatekpr trapping on exit is fixed for most people, we have a debug version
  for those who are still having trap problems.  You can contact us on the
  support BBS for a copy.

  FAX is fixed!  The setup of the fax has also changed.  Now when the BBS
  receives a fax connect it spawns the file FIX#.CMD # = the node number
  that is receiving the fax.  Please check out the AdeptXBBS FAQ for more
  details on setting up faxing.

  Fixed a serious design flaw in the BBS software.  We had to rewrite two
  very large sections of code in order to fix this one.  With this rewrite
  some areas of the BBS software are now 4-5x's faster then the previous
  versions.  This fixed all known random traps!  People who couldn't get
  AdeptXBBS to stay up for more then a short period of time should no
  longer have any more stability problems.

  All known startup problems are fixed in v1.05.  Those of you who couldn't
  get the software to even run before shouldn't have any problems now.  The
  events problem mentioned in install.cmd may still exist.

  If you are still having stability problems, I.E. ZedZap not working, or
  random traps in .QWK or Bluewave support delete your Line_#_Configuration
  files and reconfigure the BBS software.  It looks like these files have
  been corrupted on some people over time and have caused strange problems
  with the BBS software.

  Added a NNTP Ctrl pull down.  This will let you know the status of
  incomming and outgoing NNTP messages.  We also fixed many known bugs
  in the NNTP support.  You can abort a NNTP mail process by clicking on
  the STOP option in this pull down.  It will cleanly close a NNTP
  connect so that you can shut the BBS down.

  The BBS software was not displaying toomanypages.asc when a user had
  paged the sysop too many times.

  I would really like to thank several of our registered sysops (you know
  who you are) who willingly went through hell to help us find the bugs
  in this latest version, we wouldn't have found them without you.


/* Sample Rexx Script to see if a user has expired and expire them */

ARG Line

 Expire = AdeptUserExpire(line)

 if(Expire < 10) then
 do
     AdeptPrint(line, '[0m\r\nYou expire in ' || Expire || ' Days\r\n')
 end

 if(Expire = 0) then
 do
     ExpGroup = AdeptGetVar(line, 65)
     AdeptChangeGroup(line, ExpGroup)
 end

/* End Sample Rexx Script */


