home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 2 BBS / 02-BBS.zip / bos2_xr3.zip / xe_user.doc < prev   
Text File  |  1996-10-13  |  74KB  |  1,712 lines

  1. User documentation for Binkley 2.60 XE
  2. ======================================
  3.  
  4. Binkley 2.60 original version is (c) Vince Perriello and available
  5. at 2:2474/400. Filenames: B???_260.ZIP (??? = DOS, OS2, W32 or SRC).
  6.  
  7. Modifications were done by (in alphabetical order) :
  8.   Mike Burgett,       1:215/705
  9.   Paul Edwards,       3:711/934
  10.   Carsten Ellermann,  2:2432/215
  11.   Tobias Ernst,       2:2476/418
  12.   Rudolf Heeb,        2:2464/44
  13.   Juergen Loh,        2:2448/823
  14.   Martin M. Pedersen, 2:238/45
  15.   Tom Schlangen,      2:2450/10
  16.   Matthias Tichy,     2:2433/955
  17.   Thomas J. Waldmann, 2:2474/400
  18.  
  19. This BT-XE version is named BT 2.60XE9610132100
  20. This is date and time of creation    ^----^^--^  of this compiled version.
  21. Please refer to this version string if you speak of this modified version.
  22. To be short, we abbreviate this as BT-XE below...
  23.  
  24. Standard disclaimer: regard this as BETA/GAMMA software.
  25.  
  26. We can NOT guarantee that this software has no bugs (but we use it ourselves
  27. on our own risk). So if you use it, use it on YOUR own risk, too ...
  28.  
  29. If you have any problem with this BT-XE version, please contact us!
  30.  
  31. Also, if you are a programmer and doing BT source code modifications /
  32. enhancements / bugfixes, too, please also contact us and work together with
  33. us on this great project!
  34.  
  35. Tip from Hauke Hagenhoff, 2:2453/1030
  36. =====================================
  37.  
  38. COM.SYS:
  39.  
  40. When using the original serial-port-driver for OS/2, COM.SYS, you will need to 
  41. configure the port using the MODE command for having BinkleyTerm work all right.
  42.  
  43. The following setting is recommended:
  44.  
  45. MODE COMx:yyyyy,N,8,1,,TO=ON,XON=OFF,IDSR=OFF,ODSR=OFF,OCTS=ON,
  46.      DTR=HS,RTS=HS,BUFFER=ON
  47. (you need to enter this as ONE line!)
  48.  
  49. where x is the COMx:-port to set and yyyyy the desired port speed.
  50. Most important are the IDSR and ODSR-settings, if they are wrong, BT won't work  
  51. properly. BUFFER=ON is to switch the FIFO-buffer on.
  52.  
  53.  
  54.  
  55. Modifications in this version done by Mike Burgett:
  56. ===================================================
  57.  
  58. - Maximus 3.x MCP support (OS/2 version only).
  59.   (thanks to Mike Burgett for writing and Bob Juge for sending, merged in
  60.   by TJW)
  61.  
  62.   Just define the same path with MCPpipe statement of Binkley as in MCP
  63.   statement of Maximus, e.g.: MCPpipe \pipe\maximus\mcp
  64.   If you do NOT want to use MCP just do NOT define "MCPpipe" in your config!
  65.  
  66.   Then use SM (session monitor of Max 3.x) to view line status.
  67.  
  68.   MCP.EXE *MUST* be running on startup of BT-XE to use this feature.
  69.   You must also have MCP32.DLL in LIBPATH to run this version of BT-XE (even
  70.   if you don't use MCP).
  71.  
  72.   Both is part of Maximus 3.xx package (but can also be used without having
  73.   Maximus installed).
  74.   
  75.   Remark of TJW:
  76.   Due to file handle inheritance problems, automatic start code for MCP.EXE
  77.   was removed. So you have to start MCP.EXE before BT-XE or MCP will not
  78.   work.
  79.   
  80.   You must *NOT* start MCP using SpawnInit - this would cause problems.
  81.     
  82.   Use this a SINGLE time in your CMD file (startup.cmd e.g.) before you
  83.   invoke any BT-XE task using MCP:
  84.   
  85.           MCP.EXE . <pipename> <number of tasks> server
  86.  
  87.   E.g.:   detach MCP.EXE . \pipe\maximus\mcp 16 server
  88.           Be sure that you have set MAXIMUS environment variable before
  89.           this command.
  90.  
  91.   Directly after starting MCP it's a good idea to start SM.EXE to *use* MCP.
  92.   Do NOT start SM.EXE with SpawnInit.
  93.     
  94.   
  95. Modifications in this version done by Paul Edwards:
  96. ===================================================
  97.  
  98. - see BTPE_402.TXT for details
  99.  
  100.  
  101. Modifications in this version done by Carsten Ellermann:
  102. ========================================================
  103.  
  104. - Max. number of AKAs raised from original 25 to BT-XE value of 100 AKAs.
  105.  
  106. - "ConditionalPoll" - this new function is inserted in BinkleyTerm.
  107.   New: Multi-AKA and boolean operation support implemented by Thomas Waldmann.
  108.   ConditionalPoll (also known as "FreePoll" from Arjen G. Lentz, who invented
  109.   this in his mailer XENIA) allows an Uplink (you) to reject a call from a
  110.   Downlink, if there is less mail for him than the configured minimum.
  111.   This function will only work with ISDN or a modem that reports the caller ID
  112.   in the "Ring" string.
  113.   It's possible to list up to 100 ConditionalPoll entries.
  114.  
  115.   How it does work: the downlink will call you, Binkley gets the caller-ID
  116.   (eg. "RING 57313340"), searches ALL ConditionalPoll entries for matching
  117.   addresses and checks if the condition (minimum outbound size for this AKA)
  118.   says "reject call" or "accept call" for each AKA.
  119.   The exact condition is: if outbound size <= MinSize * 1024 then reject.
  120.   MinSize = 0 rejects a call only if there is really NOTHING (0 bytes) on hold.
  121.   
  122.   Each result (accept=TRUE or accept=FALSE) is evaluated (together with the
  123.   result of previous calculation for this number) with the according
  124.   boolean operation "AND" or "OR" to calculate the total result.
  125.  
  126.   The boolean operation listed with the first configured ConditionalPoll entry
  127.   matching a specific number does not care, you can use "Or" or "And" - it
  128.   makes no difference.
  129.   If total result is TRUE, call will be accepted.
  130.   If total result is FALSE, call will be rejected.
  131.   To reject a call Binkley sends the string configured with "Reject" to the
  132.   modem. To accept a call, Binkley sends the answer string (normal behaviour).
  133.  
  134.   For downlinks who want to make a file request or send an important crash
  135.   mail immediately, Binkley builds a zero byte size file in the outbound
  136.   called "*.TRX" for each user. If the downlink gets a "call reject", he/she
  137.   can call again within MaxDeltaT seconds and the call will be handled normally.
  138.  
  139.   To configure the function use:
  140.  
  141.   ; accept call of 07142980031 if size for 2:2474/405>=100KB or 2nd call
  142.   ; within 30 seconds:
  143.   ;ConditionalPoll  Or/And AKA [3..5D]  MinSize[KB]  MaxDeltaT[s] Phone
  144.   ConditionalPoll   Or     2:2474/405   100          30           07142980031
  145.  
  146.   ; accept call of 07142980032 if (size for 2:2474/403>=20KB or 2nd call within
  147.   ; 30 seconds) *AND* (size for 21:492/4003 >= 10KB or 2nd call within 20s).
  148.   ;ConditionalPoll  Or/And AKA [3..5D]  MinSize[KB]  MaxDeltaT[s] Phone
  149.   ConditionalPoll   Or     2:2474/403    20          30           07142980032
  150.   ConditionalPoll   And    21:492/4003   10          20           07142980032
  151.  
  152.   ; accept call of 07142980032 if (size for 2:2474/403>=100KB or 2nd call within
  153.   ; 30 seconds) *OR* (size for 21:492/4003 >= 50KB or 2nd call within 20s).
  154.   ;ConditionalPoll  Or/And AKA [3..5D]  MinSize[KB]  MaxDeltaT[s] Phone
  155.   ConditionalPoll   Or     2:2474/403   100          30           07142980032
  156.   ConditionalPoll   Or     21:492/4003   50          20           07142980032
  157.  
  158.   ; you may configure up to 100 such ConditionalPoll lines
  159.   ; dependant on your ISDN adaptor and configuration, you maybe should
  160.   ; leave out the leading "0" (national calls) or "00" (intl calls).
  161.  
  162.   To reject a call, define once:
  163.  
  164.         Reject <Modem command string|>
  165.  
  166.   For a ZyXEL Elite 2864I use:
  167.  
  168.         Reject ATH1|ATH0|
  169.  
  170.   For ELINK 310 use:
  171.         Reject AT\\K|
  172.         ATS21.2=1     (shows caller number after RING - tested with EPROM 1.36)
  173.  
  174.   For ELINK 301 use:
  175.  
  176.         Reject AT\\K|     (since EPROM version 2.20 of 11.5.94)
  177.         AT\O5            (show caller number after RING, since v2.12)
  178.  
  179.   Restriction for ELINKs: until a ROM is released which supports a "Call
  180.   rejected" response code, you will only be able to reject incoming calls, but
  181.   not to treat being rejected yourself (you will just receive "NO CARRIER" if
  182.   you are rejected). You may configure a very LOW MaxDeltaT value to handle
  183.   this (not nice, but possible) - see also binkley event file A= parameter.
  184.   But your links should be aware that they will flag you undialable if they
  185.   dial too often without getting a connection.
  186.  
  187. - New CFG-verb "ModemReject" to identify a rejection response from the modem.
  188.   New CFG-verb "AfterCallOut" to send an AT???-command to get a cause value
  189.   from ISDN adapters like ZyXEL 2864I.
  190.  
  191.   There are two different ways to see if a call is rejected:
  192.   1) The ISDN adapter sends "Busy/Cause=34Be" in one line.
  193.   2) You send an AT??? command and get an answer like "Cause = Call reject".
  194.  
  195.   For 1) you need only "ModemReject <Rejectstring>", for 2) you need the
  196.   Rejectstring and "AfterCallOut <Lines> <AT command>".
  197.  
  198.   AfterCallOut needs a number of lines (of output caused by AT command) and an
  199.   AT command which leads to a report with the cause value.
  200.  
  201.   After a rejected outbound call, all mail to this AKA will change to NORMAL
  202.   flavour. Now you have an easy way to ping your Uplink, if he knows the
  203.   feature of Freepoll<tm>/ConditionalPoll.
  204.   ModemReject will only work with automatic call not with manual calls!
  205.  
  206.   For ZyXEL 2864I i use "AfterCallOut 9 ATI3|" and "ModemReject Call reject".
  207.   For CFOS you need only "ModemReject /Cause=34Be".
  208.   For ELINK, there is no such possibility until now.
  209.  
  210. - "ChangeMailTo <flavor>" for changing mail flavor to CRASH, DIRECT, NORMAL
  211.   or HOLD after an rejected outbound call. The default is the change to
  212.   Normal flavor.
  213.  
  214.  
  215. Modifications in this version done by Tobias Ernst:
  216. ===================================================
  217.  
  218. - Support  for a PROBOARD fileindex.  Rather than scanning  your whole hard
  219.   disk for each file request, information can now be  taken  directly  from
  220.   your  Proboard  configuration, so that a) you don't have to set up a huge
  221.   OKFile and b)  file  request  is  accelerated  considerably, allowing for
  222.   filerequest from CDROM.  Perform the following steps to set  up  Proboard
  223.   support (this works much like the configuration of a Maximus fileindex):
  224.  
  225.   - Add the following lines to your Binkley.Cfg
  226.  
  227.        PBAreas <Proboard Fileareaconfig>
  228.  
  229.           The   Proboard  Filearea  configuration  file  is  usually  named
  230.           "FILECFG.PRO" and  located  in  your  Proboard  system directory.
  231.           Example:
  232.  
  233.           PBAreas e:\mailer\pb\filecfg.pro
  234.  
  235.        FileSec <level>
  236.        KnownSec <level>
  237.        ProtSec <level>
  238.  
  239.           In  Proboard,  you use "levels" (numbers from 1 to 255) to set up
  240.           which users are allowed  to  access which files.  In BinkleyTerm,
  241.           calling systems area classified as unknown (->FileSec), listed in
  242.           your Nodelists (->Knownsec), and those with  a  session  password
  243.           (->ProtSec).   Here you can set up the correspondence between the
  244.           two security mechanisms.  If  you,  e.g., enter KnownSec 30, then
  245.           every system which is listed in your nodelist may freq from  file
  246.           areas  with  a  security level of 30 or below.  You should always
  247.           have a FileSec statement, while the two others are optional.
  248.  
  249.        RequestTemplate <templatefile>
  250.  
  251.           You normally already have this statement, wehre templatefile  the
  252.           path  and name of a text file containing your magics and filearea
  253.           paths.
  254.  
  255.   - Now edit your  RequestTemplate-file.   Leave  the  magics  there,  but
  256.     remove all normal pathnames. Instead, enter the following line:
  257.  
  258.        *<Proboard Fileindex>
  259.  
  260.           The  Proboard file index is usually named FILESIDX.PB and located
  261.           in your Proboard system directory.
  262.  
  263.     Example for a requesttemplate file with PB-support:
  264.  
  265.     @MAGIC e:\mailer\filebase\magic.zip
  266.     @NODELIST e:\mailer\nodelist\nodelist.lzh
  267.     *e:\mailer\pb\filesidx.pb
  268.  
  269.   Please  note that you must not use MaxAreas and PBAreas at the same time!
  270.   Only one of these keywords should  occur  in your Binkey.Cfg. - Also note
  271.   that you should run PBUTIL FI at least once a day in order to  keep  your
  272.   fileindex up to date.
  273.  
  274.   As the Proboard fileindex  is  not  fully  documented,  this  feature  is
  275.   experimental.   I have tested this with PB 2.12 and PB 2.15.  If you have
  276.   problems with future Proboard releases, please contact me via netmail.
  277.  
  278.  
  279. - BT-XE now accepts the % char in the config file, e.g. for modem commands like
  280.   "at%tcbdt". Recognition of environment-variables and rest-of-line-comments
  281.   should normally not be affected if you care for the correct whitespaces.
  282.  
  283.   Suppose you have SET DIALMODE=T somewhere. Then the following line:
  284.     Prefix AT%TCB D%DIALMODE% %Comment
  285.   is correctly computed into the dialstring "AT%TCB DT", while the following
  286.   line would not be correct:
  287.     Prefix AT%TCBD%DIALMODE%
  288.   because the environment variable TCBD would be looked up. The following line:
  289.     Prefix AT %TCBDT
  290.   would also not be correct, because TCBDT would be regarded as a comment.
  291.  
  292. - Workaround a problem when scrolling the Recent Activity window:  The
  293.   appropriate keystroke combinations Ctrl+UpArrow, Ctrl+DownArrow are
  294.   nonstandard and do not work in some DOS environments.  You may now
  295.   alternatively use Ctrl+RightArrow and Ctrl+LeftArrow (which should work
  296.   everywhere).
  297.  
  298.  
  299. Modifications in this version done by Matthias Tichy:
  300. =====================================================
  301.  
  302. - New config verb "ReInitTime".
  303.   This lets you specify the time between modem initializations.
  304.   ReInitTime 10 -> init the modem every 10 minutes.
  305.   Valid range for this setting is 1 .. 10 only.
  306.   If you specify 0, you will get 1 minute. If you specify >10, you will get
  307.   10 minutes. This is due to a restriction in BT's timer routine and may be
  308.   removed in a later version of BT-XE.
  309.  
  310. - New config verb "ReadHoldTime".
  311.   This lets you specify the time between automatic outbound rescans.
  312.   ReadHoldTime 10 -> rescan outbound 10 minutes. Valid range is 1...
  313.  
  314. - Support for external request processors (ERPs) with SRIF
  315.  
  316.   To use this, specify in Binkley.Cfg:
  317.  
  318.     SRIF e:\maxfrq\maxfreq $s
  319.  
  320.   The $s parameter will be replaced by the SRIF filename by BT-XE.
  321.   The SRIF file will be called "SRIF.Txx", xx=TaskNumber in Hex.
  322.  
  323.   Known limitations:
  324.  
  325.   The external SRIF erp is only invoked in an EMSI/WaZOO session.
  326.   Also when JANUS is used, the SRIF ERP is not invoked.
  327.   This may be changed in the near future.
  328.  
  329.   The generated SRIF is compatible with the SRIF 1.01 Standard.
  330.   But not all of the optional statements are included.
  331.  
  332.   I tried it also with MaxFreq 1.00 wb2 ERP only, so i cannot guarantee that
  333.   also other ERPs work with Binkley.
  334.  
  335.   MaxFreq needs in his config a Mailer statement. Since it is not (yet)
  336.   allowed to specify Binkley, i use Cantaloup };->=>
  337.  
  338.   Have much fun, and please test carefully.
  339.  
  340.  
  341. Modifications in this version done by Rudolf Heeb:
  342. ==================================================
  343.  
  344. - New config verb "ShowAlive".
  345.   Generates a file I_ALIVE.xx (xx=Tasknumber) in the "Flags" directory.
  346.   If the file exists, nothing is done except checking it for existance.
  347.   If it does not exist, it will be created by BT-XE.
  348.   Check for existance is done each minute. So external programs can check if
  349.   BT-XE is alive by deleting this flag file and waiting if it is re-created
  350.   in a minute. If BT-XE terminates, it deletes the flag file itself.
  351.   The file I_ALIVE.xx now generated also at transfer
  352.   via Hydra XModem ZModem Janus and Fax-Receive in Mailermode
  353.   The file I_ALIVE.xx now generated also in Terminalmode while waiting of
  354.   Keystrokes and while transfer with XModem and ZModem (UPload/DOWNload)
  355.   Also, I_ALIVE.xx is generated while user does an input (nodenumber,
  356.   systemname, filename and so on).
  357.   Yes, there are people needing more than 1 minute to enter a nodenumber. :-)
  358.  
  359. - No system crash at requests of PW-protected files without password.
  360.  
  361. - Enhanced user dialogue with Alt-G (get file[s]).
  362.   BT-XE will show destination address, system name after you entered
  363.   destination address. You can now enter up to 3 filenames, password/size and
  364.   flavour before the question "More Yes/No/Other" bothers you.
  365.  
  366. - Enhanced user dialogue with Alt-S (send file[s]).
  367.   BT-XE will show destination address, system name after you entered dest address.
  368.   If you enter a wildcard filename, it will use the first matching file.
  369.   If no (matching) file is found, Alt-S remains in filename input mode and
  370.   you can try again. No unrecognized typos any longer!
  371.   With Win32 version of BT-XE, "\" works with german Windows NT, too.
  372.  
  373. - Enhanced user dialogue with Alt-S/Alt-G.
  374.   After asking "More requests"/"More sends", the same address is used again
  375.   if you answer "y". To specify a new address, enter "o" for (o)ther node.
  376.  
  377. - Enhanced user dialogue with Alt-S (send file[s]).
  378.   Support filename expansion like 4OS2/4DOS using TAB for expansion.
  379.  
  380. Example:
  381.      type on my machine c:\d<TAB>\bi<TAB>\HR<TAB><TAB>
  382.      get on my machine  c:\dowork\binkley\HR0418021.DOC
  383.  
  384. - made BT-XE compile for Win32 again using Visual C++
  385.   No hydra support and no timesync support yet.
  386.   
  387.  
  388. - First implementation of Lookup functions with ALT-S (Send File),
  389.   ALT-G (Get File), ALT-P (Poll Node) and ALT-M (Manual Poll)
  390.   
  391.   If you enter a sysopname and the sysop has more than one line, you see a
  392.   node entry select window now and you can choose the node to use for the
  393.   selected function.
  394.   Don't use wildcards as * and or ? - use only part of names - they are working
  395.   as wildcards.
  396.   So "R Heeb" will find "Rudolf Heeb or "Rudi Heeb".
  397.   You can also use the last name only. Waldmann finds all Waldmann, not only
  398.   Thomas. :-)
  399.   If you enter both (firstname AND lastname) lastname is nor interpreted as 
  400.   wildcard. If you enter one name only, it is using it as wildcard for lastname.
  401.   Samples:
  402.   "R Heeb" finds Rudi Heeb, Rudolf Heeb, Renate Heeb.
  403.   "R Heeb" does NOT find Rudi Hee, Rudolf Heebermann.
  404.   "Hee" finds Rudi Heeb, Rudolf Heeb, Renate Heeb, Rudi Hee,
  405.               Rudolf Heebermann, Elke Heess ...
  406.   "T Wald" does NOT find Thomas Waldmann
  407.   "T Waldmann" finds Thomas Waldmann
  408.  
  409.   Be aware that if you use only one or two characters, there will be many
  410.   entries to be found. Many entrys -> much time and much memory needed!
  411.   Please try it, and report any errors and whishes to Rudolf Heeb.
  412.  
  413.   Now in ALT-S (Send) it is allowed, to input a address not shown in nodelist.
  414.   So you can put files on hold for unlisted nodes/points.
  415.   Now in ALT-G (Get) it is allowed, to input a address not shown in nodelist.
  416.   So you can do filerequests from unlisted nodes/points.
  417.  
  418.  
  419. Modifications in this version done Martin M. Pedersen
  420. =====================================================
  421.  
  422. - Implemented support for environment variables. If a sequence of
  423.   letters, digits, and underscores are enclosed between %'s, it is no
  424.   longer handled as a comment, but as an environment variable.
  425.   Otherwise, % is still handled as a comment. Also, the configuration
  426.   file parser now allows configuration verbs to be indented.
  427.   (TW had implemented support for environment variables, too).
  428.  
  429. - Conditional inclusion of lines based on the task number. If a line
  430.   begins with a decimal number, it is compared with the task number
  431.   as set by the TASK environment variable (e.g. TASK=n on command line).
  432.   This somehow offers the same functionality as [Common] and [%TASK%==n],
  433.   but is simpler to use for single line differences. Example:
  434.  
  435.         1 Init  |AT&FZ|
  436.         3 Init  ATZ|~~ATH0S27=17|
  437.  
  438. - I don't think the distributed version of Binkley had this bug, as
  439.   IBMC was treated specially. But Watcom had the same problem as IBMC.
  440.   The number of minutes left is written to the screen through a file
  441.   which is buffered. This fucks up the display, if the buffer is not
  442.   flushed because the other status information was written directly to
  443.   the display bypassing the buffer. Now the buffer is flushed for both
  444.   the IBMC and the Watcom versions.
  445.  
  446. - Added new keyword "PutEnv". If this is used, there string following
  447.   it is put into the environment. Variables set in this way will be
  448.   visible to Binkley itself, and by programs spawned by it; e.g.
  449.   SPAWNBBS.CMD. Example:
  450.  
  451.         PutEnv          BBSHOME=f:\bbs
  452.         PutEnv          PATH=%BBSHOME%;%BBSHOME%\bin;%PATH%
  453.         StatusLog       %BBSHOME%\bt\bt%TASK%.log
  454.         CostLog         %BBSHOME%\bt\costlog%TASK%.log
  455.  
  456. - "SpawnInit" keyword specifies a command that should be executed as part
  457.   of the first-time initialization. Example:
  458.  
  459.         SpawnInit su %PORT% lock %BAUD%
  460.  
  461.   The command is executed only once, in the moment when the command is
  462.   encountered in the configuration file. Binkley does not even store
  463.   the command in memory. This keyword can save you for a batchfile, and
  464.   can use environment variables set in the configuration file.
  465.  
  466.   You may use multiple SpawnInit commands to start multiple commands.
  467.   
  468.   Attention: do NOT use SpawnInit to directly run processes which stay
  469.              resident - this can cause file handle inheritance problems.
  470.              See also options of OS/2's "start" command.
  471.  
  472. - "MailFlag" keyword. If this is specified in the configuration file (no
  473.   arguments), and "Flags" is also specified, Binkley will create a file
  474.   called "BTMAIL.IN" in the flags directory when mail has been received.
  475.  
  476. - "TimeSync" keyword. Followed by an address and a MaxDeltaTSeconds value,
  477.   it specifies that the clock should be set to after an EMSI session (without
  478.   password error) with the node specified (using TRX) - if the time difference
  479.   is not more than MaxDeltaTSeconds seconds.
  480.   Example:
  481.  
  482.         TimeSync        2:238/28  60
  483.  
  484.   So time will get synced to time of 2:238/28, but only if difference is within
  485.   60 seconds to our own time.
  486.  
  487.   Tip: setting MaxDeltaTSeconds to e.g. 3700 (more than 1 hour) lets you do
  488.        summer / winter time zone switching automatically.
  489.  
  490. - "LocalLog" keyword. If this keyword is specified (no arguments),
  491.   Binkley will write its log information (both the normal log, and the
  492.   cost log) to a log file in the same directory as BINKLEY.Dxx etc.
  493.   When Binkley exits, and at the end of a session, Binkley will move
  494.   the contents of the local file to the file specified in the
  495.   configuration file, but only if it is able to. The log file specified
  496.   in the configuration file will no longer be continiously opened by
  497.   Binkley, and can safely be accessed by other programs. If Binkley is
  498.   not able to write to the specified log file, the log entries just
  499.   stays put in the local file until Binkley is able to move it. The
  500.   local log files are called (xx is the task number):
  501.  
  502.         BINKLEY.Cxx     (Local Cost Log)
  503.         BINKLEY.Lxx     (Local Status Log)
  504.  
  505. - Fix for ISDN caller ID using ZyXEL 2864I. When RING was seen and
  506.   Binkley was about to send the answer string, it would wait until the
  507.   modem became silent for a fraction of a second. In this delay, Binkley
  508.   would read characters from the modem, and silently throw them away.
  509.   The caller ID on ISDN lines was lost in this way! This is fixed, and
  510.   input from modem in this period, is now logged as usual. Setting
  511.   RingWait to 2, would also have solved this particular problem, but
  512.   there is no need to wait.
  513.  
  514. - "Respawn" command line argument. If this is specified, Binkley is
  515.   automatically respawned in the unexpected event that Binkley would
  516.   trap (memory access violations etc). This wan't work on DOS, but does
  517.   under OS/2, and may work with other real operating systems too.
  518.  
  519.   The way this is accomplished is quite simple: We now have two processes
  520.   running for each Binkley. The first Binkley process spawns the other,
  521.   the normal Binkley, and monitors if it exits regularly. If so, the first
  522.   Binkley terminates itself with the errorlevel of the second Binkley. If
  523.   not, it just respawns the second Binkley.
  524.  
  525.   The mechanism requires that the environment variable _BINKLEY_EXIT_ is
  526.   _NOT_ set when Binkley is initially started. Binkley checks if this
  527.   variable is set, and if so, assumes it is the second (normal) Binkley.
  528.   If it is not set, Binkley will set it itself, and spawn the second
  529.   Binkley. _BINKLEY_EXIT_ is set to the filename BINKxxxx.XIT, where xxxx is
  530.   the first Binkley's process ID. The second Binkley creates this file on
  531.   a normal exit, and the first Binkley checks if it can delete it. If not,
  532.   it didn't exist, and the normal Binkley must have died irregularly.
  533.  
  534. - The parser used to identify keywords would recognize "CostLogThingy" as
  535.   "CostLog"; i.e. allowing the input word to be longer than the keyword.
  536.   This may sound okay, but it means that you cannot have two keywords
  537.   where the first is a prefix of the other. Also, you cannot define
  538.   variables on the command line where the name matches a keyword. This
  539.   is changed now, and the parser requires the words to be of equal
  540.   length.
  541.  
  542. - Implemented TW's idea of setting environment variables on the command
  543.   line. If an argument contains a '=', it is put into the environment.
  544.   Example:
  545.  
  546.         bt32 TASK=3
  547.  
  548.   Remark of TW: The TASK=n argument on BT32.EXE command line is a
  549.                 MUST HAVE in this version of BT-XE !
  550.                 Don't use TaskNumber in Binkley.Cfg!
  551.                 You MUST change your BAT / CMD files !!!
  552.  
  553. - Built the language file into the EXE file. If there is no language file,
  554.   Binkley now reads the language file from the EXE itself. The language is
  555.   simply appended to the EXE followed by the file size (two bytes). BTLNG
  556.   now can do this. Example:
  557.  
  558.         btlng32 patch bt32.exe binkley.lng
  559.  
  560.   Attention: you should NOT use an old *.LNG file nor an *.LNG file at all
  561.              if you want to have standard (english) messages - they are
  562.              built-in in the EXE now!
  563.  
  564. - "ShortCostLog" keyword. Binkley's costlog contains a log of useful
  565.   information that easier to monitor than the status log. However, this
  566.   log is ment for human reading, and not very easily handled with utilities
  567.   like grep, awk, (REXX?) etc. So i have invented a ShortCostLog
  568.   keyword. If it is used, the CostLog will be written in another format.
  569.   The argument to ShortCostLog is a format string specifying this
  570.   format. The format string can contain literal characters and macros. A
  571.   macro is prefixed with '$', followed by an optional length, and ended
  572.   with a character specifying what kind of information to write. If the
  573.   optional length begins with '0', the information is zero-padded;
  574.   otherwise it is space-padded. The following macros are defined:
  575.  
  576.         $#          TaskNumber
  577.         $$          The $ character
  578.         $<          Newline
  579.         $A          Node address
  580.         $B          Baud rate
  581.         $C          Size of biggest file sent or received
  582.         $D          Seconds used to transmit biggest file ($C)
  583.         $E          Total number of errors
  584.         $H          Hour
  585.         $I          Number of inbound files
  586.         $J          CPS of inbound files
  587.         $M          Minute
  588.         $O          Number of outbound files
  589.         $P          CPS of outbound files
  590.         $S          Second
  591.         $T          Total number of files
  592.         $U          Total CPS
  593.         $V          Size of biggest file received
  594.         $W          Seconds used to receive biggest file ($V)
  595.         $X          CPS of biggest file received ($V)
  596.         $Y          CPS of biggest file send or received ($C)
  597.         $b          Abbreviated month
  598.         $c          Cost
  599.         $d          Day of month
  600.         $f          Number of errors when receiving files
  601.         $g          Number of errors when transmitting files
  602.         $i          Size of inbound files
  603.         $j          Efficiency of inbound files
  604.         $m          Month
  605.         $o          Size of outbound files
  606.         $p          Efficiency of outbound files
  607.         $r          Remote's Cost
  608.         $s          Seconds of session
  609.         $t          Total size of files
  610.         $u          Total efficiency
  611.         $v          Size of biggest file sent
  612.         $w          Seconds used to send biggest file ($v)
  613.         $x          CPS of biggest file sent ($v)
  614.         $y          Year without century
  615.         $z          Cost Index (0 = no cost,
  616.                                 1.. = cost index into cost event's cost vector)
  617.  
  618.   The format string can be left out in which case it defaults to:
  619.  
  620.    ShortCostLog $02y$02m$02d $02H$02M$02S $# $14A $6B $4s $4c $4r $8i $8o $8C $4Y
  621.  
  622.   Which produces log entries like:
  623.                                                                        Biggest file
  624. Date   Time   Task      Node  Connect  Sec Cost RCst      In      Out    -size -cps
  625. 960328 132222 1      2:238/9   28800    29    0   24    6036     9903     9896 3298
  626. 960328 132539 1     2:238/54   28800   105    0   96       0   230517   223554 3287
  627.  
  628.   You can also use ShortCostLog to produce comma separated files which can
  629.   be imported directly into a spreadsheet or a database.
  630.  
  631. - Source code fixes important to Watcom C only:
  632.   1. Watcom C uses buffered output as IBMC does, and this caused
  633.      problems with display updates while transferring files in terminal
  634.      mode. The real problem is that buffered writes are mixed with
  635.      unbuffered display output. The work-around for the IBM compiler
  636.      has been adopted for Watcom (flushing buffers).
  637.   2. The signal stuff used to handle Ctrl-C/Break didn't work with
  638.      Watcom. This seems to be a Watcom problem; signal(SIGBREAK,SIG_IGN)
  639.      is broken. The solution is to use signal(SIGBREAK,handler) instead,
  640.      letting handler() reinstall itself on SIGBREAK and do nothing else.
  641.  
  642. - "MaxBusyAge" keyword. Followed by a number of minutes, it specifies that
  643.   Binkley should ignore .BSY files older than that. This can be used to
  644.   automatically make a node dialable even if he has an old .BSY file laying
  645.   around. This can happen if Binkley for some reason didn't clean up after
  646.   a session; i.e. the system is rebooted. It will also handle the situation
  647.   where Binkley (god forbid) traps, and is respawned using the "Respawn"
  648.   command line argument. Example:
  649.  
  650.         MaxBusyAge      240
  651.  
  652. - "SpawnNoOK" keyword. Followed by a command, it specified that the command
  653.   should be executed if the modem does not respond OK to the initialization
  654.   string in unattended mode within half a second. If your modem is too slow
  655.   to respond OK, you can add a number of tildes to the initialization string.
  656.   This feature is useful for detecting if a modem has hung itself, and notify
  657.   the sysop, or with the right software and hardware turn the modem off and
  658.   on again.
  659.  
  660. - "Quick" modifier for "AfterMail" keyword. Using "AfterMail Quick <command>",
  661.   Binkley does not spend unneccesary time on modem initialization. This is
  662.   useful if the AfterMail command is very quickly. On my system i can run
  663.   the aftermail in about the same time, as it take Binkley to initialize the
  664.   modem. Also, without "Quick" a caller can be so unlucky, that the modem is
  665.   reinitialized when he calls in.
  666.  
  667. - "CacheHold" keyword which enables caching of the outbound, and speeds up
  668.   rescanning. The usage is: CacheHold <level> [Stat]. <level> specifies the
  669.   amount of caching, and can take the following values:
  670.     0  No caching and Binkley scans as usual.
  671.     1  Directories are cached. Using this, Binkley only need to read the
  672.        directories once when scanning the outbound.
  673.     2  Flow files are kept in memory. Using this, Binkley does not need to
  674.        reread flow files that has not been changed.
  675.   On my system CacheHold reduces the average rescan time from approximately
  676.   2.70 seconds to 1.30 using 29 KB cache. However, the memory requirements
  677.   and improvement in speed will differ from system to system. Add "Stat" to
  678.   the line, and it will be logged how the rescanning performs. Use
  679.   "CacheHold 0 Stat" to log the performance without caching.
  680.  
  681. - Added the ability to freeze Binkley. When Binkley sees BTFREEZE.xx (xx
  682.   is the hexadecimal task number) in the flags directory, it deletes the
  683.   file, and creates BTFROZEN.xx instead. Then it lowers the DTR signal,
  684.   and waits for BTFROZEN.xx to disappear. When it disappears, the modem
  685.   is reinitialized. This feature is useful for freezing Binkley when
  686.   compiling nodelists in the background.
  687.   
  688.  
  689.  
  690. Modifications in this version done by Tom Schlangen:
  691. ====================================================
  692.  
  693. - misc. fixes and cleanup, esp. for compiling with EMX
  694.  
  695. - implemented visual progress metering bars for Janus/Hydra/Zmodem
  696.   in Wazoo/Emsi sessions
  697.  
  698. - moved progress meters to new window overlapping outbound window while
  699.   in Wazoo/Emsi sessions
  700.  
  701. - misc. fixups for Dos version using MSC7.00
  702.  
  703. - only in Dos version: announcement of the fossil in use.
  704.   
  705.  
  706. Modifications in this version done by Thomas Waldmann:
  707. ======================================================
  708.  
  709. - Fixed Hydra buffer management bug which caused memory corruption in original
  710.   BT 2.60 release. In OS/2 on my system this bug showed as funny attributes
  711.   on the upper "windows" of BT screen. But the effects may have varied widely
  712.   depending on compiler and system ...
  713.  
  714. - Error message for "COM0?.SYS" changed to "COM.SYS".
  715.  
  716. - Activated priority control.
  717.   The originally released EXE didn't control priority, but worked EVER at
  718.   priority Normal/0. This is too low, if you have other "heavy" processes
  719.   running on your system. ISDN transfer rates dropped to below 5000 CPS in
  720.   such cases (normal: 7000..7800 CPS) on my system (P133,32MB).
  721.  
  722.   I set the appropriate compiler switch and re-activated the priority control.
  723.   Also, I enhanced priority control via environment variables.
  724.  
  725.   You may now influence priorities using these environment variables:
  726.  
  727.   This is the default:                 This is as without priority control:
  728.     SET REGULARPRIORITY=R31              SET REGULARPRIORITY=R0
  729.     SET MODEMPRIORITY=F15                SET MODEMPRIORITY=R0
  730.     SET JANUSPRIORITY=F31                SET JANUSPRIORITY=R0
  731.     SET HYDRAPRIORITY=F31                SET HYDRAPRIORITY=R0
  732.  
  733.   Syntax: ...PRIORITY=<class>[delta]
  734.     class:
  735.       I = Idle (1)
  736.       R = Regular (2)
  737.       F = Foregroundserver (4)
  738.       T = TimeCritical (3)
  739.     delta:
  740.       0 = normal
  741.      ..
  742.      31 = high (default, if not specified)
  743.  
  744.   Do experiments with these values! The defaults needn't to be the best values
  745.   for YOUR system and high priority needn't be better than low priority.
  746.  
  747. - The BINKLEY.DAY and .SCD are renamed to BINKLEY.Dxx and .Sxx (xx=TaskNumber).
  748.  
  749. - [Expression]
  750.   Multiline configuration via single Binkley.Cfg and Binkley.Evt files!
  751.   Config lines (sections) dependant on expressions!
  752.   
  753.   [Common] and [%TASK%==x] in a Binkley.Cfg / .Evt make multiline operation
  754.   possible with one single Cfg and one single Evt file.
  755.  
  756.   You needn't use this nice feature if you don't want to. Operation should be
  757.   possible with the same config / event files as in orig. BT 2.60 release
  758.   without usage of these "sections", because the implicit default section at
  759.   top of each config file read (or included) is "[Common]".
  760.  
  761.   BUT: you MUST use TASK=n commandline argument in ANY case.
  762.  
  763.   [Common]
  764.   ; settings in this section are read by all tasks.
  765.   ; ...
  766.   [%Task%==1]
  767.   ; settings in this section are read by Task 1 only.
  768.   ; all other tasks ignore these settings like if they were "blind" ...
  769.   [%Task%==2]
  770.   ; settings in this section are read by Task 2 only.
  771.   ; all other tasks ignore these settings like if they were "blind" ...
  772.   [Common]
  773.   ; settings in this section are read by all tasks.
  774.   ; ...
  775.  
  776.   If you specify a setting first in [Common] and afterwards the same setting
  777.   in [%Task%==x] (or vice versa), behaviour of BT-XE in Task x is the same as
  778.   if you specified these settings twice in this order using original BT 2.60.
  779.  
  780.   If you include another config file using "Include" statement, state (read
  781.   settings or not) is treated locally to each file and restored after return
  782.   from reading that file.
  783.   E.g.:
  784.   [Common]
  785.   ; settings here are common for all tasks
  786.   Include Task1.Cfg         <- may have [%Task%==x] and [Common] sections, too.
  787.   ; settings here are common for all tasks, regardless of Task1.Cfg contents.
  788.  
  789.   New since XR3:
  790.  
  791.   [%Task%==1]             use section if environment variable TASK equals 1
  792.   [%ENVVAR1%==%ENVVAR2%]  ...         if env. var. ENVVAR1 equals ENVVAR2
  793.   [%MODEM%==ZYXEL]        ...         if env. var. MODEM equals ZYXEL
  794.   [%PORT%!=2]             ...         if env. var. PORT is not equal to 2
  795.   [Common] or [True]      use section in any case
  796.   [Ignore] or [False]     ignore section
  797.   
  798.   Obsolete style (not supported any longer): [Task 1]
  799.  
  800.  
  801. - Using TaskNumber for BBS/EXT exits.
  802.  
  803.   This is now handled like in Binkley 2.60 release (again).
  804.   Review your CMD / BAT files if you used former BT-XE versions !!!
  805.  
  806.   BBS exits:
  807.   %1      %2          %3        %4             %5
  808.   DTErate ConnectRate COMhandle Time2NextEvent Modem-String
  809.  
  810.   EXT exits:
  811.   %1      %2          %3        %4             %5 %6
  812.   DTErate ConnectRate COMhandle Time2NextEvent n  Modem-String
  813.  
  814.   This is NORMAL Binkley parameter layout again (no additional parameter as
  815.   in former betas of BT-XE). If you need the TaskNumber in this context, just
  816.   get it out of %TASK% environment variable (which is defined by BT-XE if you
  817.   invoke it with BT32.EXE TASK=n).
  818.  
  819. - Fixed bug caused by using wrong HPFS file timestamp in SCD/EVT and file
  820.   update request handling. Now, the "last file modification" timestamp is used.
  821.   Before, "last file access" timestamp was used - which was definitely WRONG
  822.   for HPFS. This caused problems on HPFS only, because FAT file system does not
  823.   have multiple different file timestamps like HPFS (file creation, last file
  824.   access, last file modification).
  825.  
  826. - "Hydra1st" config verb.
  827.   This was dropped after XE2 release and is no longer a valid config verb.
  828.   For explanation see "ProtocolPreference" keyword.
  829.  
  830. - Zoomed outbound view "Age" bug fixed (weird ages of some thousand days were
  831.   displayed - fixed!).
  832.  
  833. - Fixed cosmetical problem with password failure msg ("trash" at end of PW)
  834.   "His='', Ours='XXXXXXXX<trash>'
  835.  
  836. - Enhanced Screen Layout / Colors:
  837.   - Extended color settings (like BT-EE now! ;-)
  838.     There are 2 more colors (configured after the normal 2.60 colors) now for
  839.     windows frame title text and frame color. See sample configs ...
  840.   - TaskNumber in top left corner
  841.   - Port and Baud switched position
  842.   - broader Recent Activity and Hold Window
  843.   - with mail "Age" display in Hold Window
  844.   - one screen row more than before (there are 25, not 24).
  845.     Therefore one row more in Recent Activity window.
  846.  
  847. - Implemented "MakeDir" config verb. This creates outbound directories needed
  848.   for BSY flags. Also, it removes empty outbound directories.
  849.  
  850. - RecentyActivity-Buffer is saved to and restored from disk file Binkley.Axx.
  851.  
  852. - FREQ response packet fixes:
  853.   - time string had incorrect printf format
  854.   - time string had incorrect FTS format (should be 2 blanks in the mid!)
  855.   - put in session password into freq response packet as packet password (well,
  856.     this isn't correct in every case, but better than no password at all).
  857.   - put in destination NODE address, too. This was forgotten ...
  858.  
  859. - Fixed bug with not deleted *.REQ / *.Rxx files.
  860.  
  861. - Fixed >2GB bug.
  862.  
  863. - negative LogLevels do the same as positive ones, but only log to disk if
  864.   Carrier detect is true.
  865.  
  866. - xHydra AKA RH1 hydra, yeah! 8)
  867.   This modified Hydra (which identifies in EMSI with RH1 flag) does file
  868.   requests ONLY in the 1st transfer "batch". Mail packets and all flow file
  869.   attaches are sent in the 2nd batch - while you already get the requested
  870.   files from the other system!
  871.   Until now, this was only possible with Janus - now you can do this with
  872.   Hydra, too! So just send your filelist along with your filerequests if
  873.   the other system supports RH1 / xHydra, too.
  874.   Until now I know of these xHydra mailers: BT-XE ;-), Xenia and Maindoor
  875.   If xHydra is used, this is shown via "Session method: xHydra".
  876.   
  877. - fixed nopickup immediate hangup bug
  878.  
  879. - modified BTLNG to accept mixed multiple-language language source files
  880.   BTLNG key E language.txt english.lng
  881.   BTLNG key S language.txt startrek.lng
  882.   It is possible to use BTLNG without "key X" parameter to process old
  883.   language files.
  884.  
  885. - Language.Txt is a mixed language file with english and startrek language.
  886.   Lines with English text are prefixed by "E", lines with Startrek text are
  887.   prefixed by "S", common lines are prefixed by "*".
  888.  
  889. - No support for external language file any more, you MUST patch your LNG
  890.   into the EXE using BTLNG patch ... if you want to have something different
  891.   as standard english language.
  892.  
  893. - Hydra chat
  894.   If you have a hydra session, you might use chat mode now (if the other side
  895.   is capable of chat mode, too - some mailers tell you this with a message
  896.   displayed as "HCON: remote has chat capability (bell enabled/disabled)" or
  897.   similar).
  898.  
  899.   To enter chat mode on your side, hit "Alt-C". Two windows "Local" and
  900.   "Remote" will appear, shrinking "Recent Activity" - I strongly(!) recommend
  901.   80*50 video mode for this (mode co80,50) - with 80*25 you will have only
  902.   2 lines as chat window(s).
  903.   At this moment, your side will transmit a string to the other side notifying
  904.   that you entered chat mode (and also two bell characters to wake up the
  905.   remote sysop).
  906.  
  907.   If remote sysop is not awake yet, you may send some more bell characters
  908.   using Ctrl-G.
  909.  
  910.   To send text to remote side, simply type it in.
  911.   All text entered on the remote side will appear in your "Remote" window.
  912.   
  913.   To leave chat mode hit Alt-C again. Chat mode will automatically be left
  914.   at end of the session if one side leaves chat mode (or even did not enter
  915.   chat mode). Also, there is an input timeout, so don't sleep while chatting.
  916.   
  917.   Please report any problems or incompatibilities with chat mode, especially
  918.   to other mailers.
  919.  
  920. - integrated BTCTL and BTLNG into a single tool named BTUTIL.
  921.   Invoke BTUTIL without parameters to see usage.
  922.  
  923. - "ProtocolPreference" keyword (this made "Hydra1st" keyword obsolete)
  924.  
  925.   Binkley 2.60, 2.60 XE1 and XE2 were NOT fully FSC-0056 (EMSI specification)
  926.   conform yet (well, it worked, though ;-).
  927.  
  928.   Old / wrong behaviour:
  929.   1. caller system sends all protocols (HYD,JAN,ZAP,ZMO) it can do.
  930.   2. called system (BT) chooses a protocol with fixed preference order
  931.      JAN,HYD,ZAP,ZMO (BT 2.60 orig) or HYD,JAN,ZAP,ZMO (XE and Hydra1st) -
  932.      no matter in which sequence the protocols are transmitted (preferred)
  933.      by caller.
  934.  
  935.   New and correct behaviour:
  936.   1. caller system sends all protocols it can do in order of preference:
  937.      It sends e.g. HYD,JAN,ZAP,ZMO if it can do them all and prefers Hydra as
  938.      1st choice, then Janus as 2nd choice, ZedZap as 3rd choice etc.
  939.   2. called system chooses the FIRST protocol out of the transmitted protocol
  940.      preference string which it is itself capable of.
  941.      If ZAP,JAN,HYD,ZMO is received and it can do ZAP, it will choose ZAP,
  942.      doing the 1st choice protocol.
  943.      If JAN,HYD,ZAP,ZMO is received and it can't do JAN, but HYD, then HYD will
  944.      be done, doing the 2nd choice protocol.
  945.      
  946.   With ProtocolPreference you can set what YOUR own Binkley will send in EMSI
  947.   if you call out to another system.
  948.   
  949.   Default preference sequence (if you don't specify this keyword):
  950.   
  951.   HYD,JAN,ZAP,ZMO       (if Hydra is implemented in your Binkley version)
  952.   or
  953.   JAN,ZAP,ZMO           (if no Hydra is implemented in your Binkley version)
  954.   
  955.   With NoJanus, NoHydra, NoZedZap etc. the corresponding protocols will be
  956.   left out of the default ProtocolPreference string, of course.
  957.   
  958.   If you specify
  959.   ProtocolPreference HYD,ZAP,ZMO
  960.   your Binkley will tell remote side on outgoing calls that it prefers
  961.   HYDRA as 1st choice, then ZedZap as 2nd choice and ZMO as last choice and
  962.   that it can NOT do anything other.
  963.  
  964.   ATTENTION:
  965.   ==========
  966.   
  967.   Be aware that the user defined ProtocolPreference string is transmitted
  968.   "as is", there are no checks if it is valid or if it does comply with your
  969.   other settings! So DON'T use this keyword if you don't know what you're doing.
  970.   
  971.   If you call out and the other side does not answer with the first available
  972.   protocol in YOUR ProtocolPreference although remote side is capable of doing
  973.   it and also has not disabled it, the remote side is NOT fully FSC-0056
  974.   compliant and you should notice the software author of that.
  975.   
  976. - "CostTimeCorrection"
  977.  
  978.   With this you can configure the time in seconds that your modem / adaptor
  979.   needs to connect and also session overhead for cost calculation.
  980.  
  981.   First value is the time in s (costing money) before you get a "CONNECT".
  982.   Default is 5s.
  983.   For ISDN you might want to configure a lower value.
  984.   For very bad lines you might want to configure a higher value.
  985.   
  986.   Second value is the session handshake overhead in s used for calculations
  987.   for "L" event flag (before dialing out). Default is 5s, too. If you connect
  988.   to very fast or slow handshaking mailers, you might want to configure a
  989.   different value.
  990.  
  991.   You should change the default values to typical ones for your system.
  992.   The defaults are just "better than nothing", but too low for analogue modems
  993.   and too high for ISDN adaptors.
  994.   
  995.   E.g.: CostTimeCorrection 13 4
  996.   This gives a connect overhead of 13s and a session overhead of 4s (analogue
  997.   connect with V.32bis on good line, BT-XE to BT-XE).
  998.  
  999.   E.g.: CostTimeCorrection 1 2
  1000.   This gives a connect overhead of 1s and a session overhead of 2s (ISDN
  1001.   connect with X.75, BT-XE to BT-XE).
  1002.  
  1003. - "Cost Event" - a new Event type with flag "!="
  1004.  
  1005.   This new event type is used similar to normal "Event", but describes costs
  1006.   involved with your outbound calls at different daytime, weekdays etc.
  1007.   
  1008.   There can be ONLY such a cost definition in such an event, nothing else!
  1009.   Such a "cost event" does NOT interfere with other event definitions.
  1010.   
  1011.   The cost vector can include up to 16 comma separated entries, but there
  1012.   MUST NOT be any blanks between them. You need not specify all 16 entries,
  1013.   you need only to specify the ones you really use (c0,c1,c2 if you only use
  1014.   3 cost indices).
  1015.   
  1016.   Event <days> <start time> [<end time>] !=<c1>,<c2>,..,<c16>
  1017.         ^------------------------------^   ^----------------^
  1018.          meaning as like in other events       cost vector
  1019.             
  1020.  
  1021.   The cost index used for a connection is reported after connection as
  1022.   "Seconds: ... Tariff: <cost index> ... System: ...".
  1023.   
  1024.   Example 1 for Germany (used with EuroCost and CostUnit 12):  
  1025.   
  1026.   Event All 00:00,12,24 05:00 !=2400,0600,0360,0360,0600,0090,0090,0054 
  1027.  
  1028.   This means that on December 24. from 00:00 until 05:00 the "cost vector" is
  1029.   2400, 600, ... (meaning that cost index 1 (city zone) has unit lengths
  1030.   of 240 seconds, cost index 2 (50km zone) has unit lengths of 60s etc.).
  1031.   You have to compile the "cost index" into V7 nodelist index (cost field).
  1032.   Binkley then uses this "cost index" as index into the "cost vector" of the
  1033.   active CostEvent. "cost index" is 1-based (!), 0 means no/unknown cost!!!
  1034.   
  1035.   You have to define the cost vector in 1/10 seconds (unit length).
  1036.   CostUnit is the amount of money a unit costs (12 [Pf] in Germany).
  1037.   
  1038.   So if you call somebody on Dec. 24 at 03:00 who has cost index 3 compiled
  1039.   into the V7 cost field by your nodelist compiler, Binkley will calculate
  1040.   with unit lengths of 36 seconds (360 * 0.1s).
  1041.   
  1042.   
  1043.   Example 2 for US (NO "EuroCost" and NO "CostUnit"):  
  1044.  
  1045.   Event All 00:00 24:00 !=10,20,40,80,160
  1046.  
  1047.   [Sorry, I don't have ANY information about US cost structure, so this is
  1048.   just an example with not realistic numbers]
  1049.   
  1050.   This means that on every day between 0:00 and 24:00 the "cost vector" is
  1051.   10,20,...,160 (meaning that a minute shortest distance costs 10 [cents or
  1052.   whatever] and a minute longest distance costs 160). You have to compile
  1053.   the "cost index" (1 is nearest, 5 is farest in this example, up to 16
  1054.   is possible) into V7 nodelist index (cost field). Binkley then uses this
  1055.   "cost index" as index into the "cost vector" of the active CostEvent.
  1056.   "cost index" is 1-based (!), 0 means no/unknown cost!!! 
  1057.   
  1058.   So if you call somebody (on any day, any time) who has cost index 3 compiled
  1059.   into the V7 cost field by your nodelist compiler, Binkley will calculate
  1060.   with costs of 40 [cents, whatever] per minute.
  1061.  
  1062.   Here, for interested audience, the calculation method. If you aren't
  1063.   interested, you can skip to next feature ...
  1064.   
  1065.   Cost calculation algorithm for outbound calls (inbound: cost==0) :
  1066.   
  1067.   StartTime = StartTime - CostTimeCorr_Connect  the modems need some worthy
  1068.                                                 time before CONNECT !
  1069.  
  1070.   get CostIndex (1..16) from V7 nodelist RealCost field  
  1071.   find CostEvent matching StartTime and get ActualCostVector
  1072.   set return value Cost = ActualCostVector[CostIndex] !!!
  1073.   
  1074.   EuroCost (unit based cost calculation) :
  1075.  
  1076.     Time = StartTime                             set Time to StartTime
  1077.     Ttimes10 = 0                                 set 1/10s timer to 0
  1078.     TotalCost = 0                                set TotalCost to 0
  1079.     while Time < EndTime                         do as long as connection was
  1080.        TotalCost = TotalCost + CostUnit           spend one CostUnit
  1081.        Ttimes10 = Ttimes10                        we get this time for
  1082.                   + ActualCostVector[CostIndex]   one CostUnit
  1083.        Time = StartTime + Ttimes10/10;            afterwards we have this time
  1084.        find CostEvent matching Time and           get tariff information for
  1085.        update ActualCostVector                    new Time
  1086.  
  1087.     return TotalCost as total cost               this is what we spent
  1088.  
  1089.   No EuroCost (minute based cost calculation) :
  1090.   
  1091.     Time = StartTime                             set time to StartTime
  1092.     TotalCost = 0                                set TotalCost to 0
  1093.     while Time < EndTime                         do as long as connection was
  1094.        TotalCost = TotalCost                       spend amount of money
  1095.                    + ActualCostVector[CostIndex]   one minute costs
  1096.        Time = Time + 60s                           we get 1 minute for it
  1097.        find CostEvent matching Time                get tariff information for
  1098.        and update ActualCostVector                 new Time
  1099.    
  1100.     return TotalCost as total cost                this is what we spent
  1101.     
  1102.     I hope this is the correct way to do it.
  1103.     If it is NOT correct like this, please let me know !!!
  1104.     
  1105.     Don't forget to adapt your "L" flags in Binkley.Evt !!!
  1106.  
  1107.     With L flag, Binkley will calculate costs before calling out:
  1108.     It will assume a 1KB/s transfer rate (default, you may modify this by
  1109.     specifying CostCPS, see below) to estimate session length.
  1110.     Then it calculates real cost (in your currency) for this session at this
  1111.     time and decides depending on L flag condition if it should dial out or not.
  1112.  
  1113.     You can use this to send short crash mails immediately and delay crash
  1114.     mails with file attaches to some later event with cheaper costs.
  1115.  
  1116.     For a cost saving setup in Germany you could use L=12 (meaning L<=12) on
  1117.     most of your events - except event at cheapest time 02:00-05:00, for this
  1118.     event you should NOT do cost restrictions or BT-XE will not dial out at all
  1119.     if costs are too high even at cheapest time. This will cause BT-XE to delay a crash
  1120.     mail until cost is <=12 ("Pfennige") or until event with no cost
  1121.     restriction or "H" flag.
  1122.     
  1123. - new keyword "CostCPS"
  1124.   This sets the estimated CPS rate for cost calculations related to "L" event
  1125.   flag. Default is 1024 CPS.
  1126.   CostCPS 1500             ; could be used for lines connecting at 14400bps
  1127.   CostCPS 3000             ; could be used for lines connecting at 28800bps
  1128.   CostCPS 7000             ; could be used for ISDN X.75 lines with 64000bps
  1129.  
  1130.   Additionally, the connect and session overhead is added for cost calculation.
  1131.   
  1132. - Shared outbound
  1133.  
  1134.   First binkley task who decides to do a new rescan writes rescanned data
  1135.   into FlagDir\BTRESCAN.DMP (saying "Rescanning").
  1136.   If this file is not older than "ReadHoldTime" minutes, other lines will
  1137.   just read this dump file (saying "Reading").
  1138.  
  1139.   Touching FlagDir\BTRESCAN.FLG or manually pressing Alt-O unconditionally
  1140.   leads to a REAL rescan (= update of BTRESCAN.DMP).
  1141.  
  1142. - new keyword "IPC"
  1143.  
  1144.   With this, you define the directory which Binkley will use to write Max 2.x
  1145.   compatible IPCxx.BBS (xx = tasknumber in Hex) files into.
  1146.   E.g:
  1147.  
  1148.   IPC h:\Max\IPC\
  1149.  
  1150.   The IPC files will contain "BinkleyTerm 2.60XE" as user name and some
  1151.   information about Binkley's state, e.g. "Waiting for Call or Event".
  1152.   
  1153.   If you do not use IPC keyword, Binkley will NOT write IPC files.
  1154.  
  1155. - new keyword "ReadLog"
  1156.  
  1157.   If you spawn other programs from Binkley which generate a binkley style
  1158.   log, you can read this log into Binkley's screen (and log).
  1159.   The log specified with "ReadLog" is DELETED after it is read and
  1160.   incorporated into Binkley's log
  1161.   
  1162.   E.g.:          ReadLog c:\bt\1\bink_add.log
  1163.                          ^ redirect all other bink style logs you want to
  1164.                            include to that location
  1165.                          
  1166.  
  1167. - new keyword "NoHydraChat"
  1168.  
  1169.   You can disable Hydra Chat capabilities using this keyword.
  1170.   
  1171. - new keyword "TaskPath"
  1172.   You can specify a separate directory for BINKLEY.?xx files with this to
  1173.   keep your Binkley directory clean. Defaults to Binkley directory.
  1174.   
  1175.   E.g.:      TaskPath c:\bt\task\
  1176.   
  1177.     
  1178. Modifications in this version done by Juergen Loh:
  1179. ==================================================
  1180.  
  1181. - Added 'Sorted Outbound'
  1182.   -----------------------
  1183.  
  1184.   The 'Pending Outbound Mail' is sorted by Domain / Zone / Net /
  1185.   Node / Point.  Sendable mail is still on the top.
  1186.  
  1187.  
  1188. History:
  1189.  
  1190. BTXE_XR1
  1191. ========
  1192.  
  1193. - first public release
  1194.  
  1195. BTXE 9606132330 (XR2 bugfix release)
  1196. ====================================
  1197.  
  1198. Bug fixes:
  1199.  
  1200. - fixed cosmetical problem with Elapsed: xx:yy:zz  (a trailing blank
  1201.   overwrote the window frame)
  1202.  
  1203. - fixed cosmetical problems with Zoomed Outbound view: EE colors and headline
  1204.  
  1205. - fixed SRIF extension (wrong) .Txx to (correct) .xx (xx=TaskNo/Hex)
  1206.  
  1207. - fixed cursor position when shelling or entering terminal mode
  1208.  
  1209. - added Hydra key to "native_protocols". Until now, you were not able to
  1210.   select Hydra in terminal mode ...
  1211.  
  1212. - fixed "main outbound removal" bug when using "MakeDir".
  1213.   If there is an outbound without "." in its filename then just let it be -
  1214.   even if it's empty.
  1215.  
  1216. - fixed ShortCostLog $m
  1217.  
  1218. - fixed cursor positioning to end of screen
  1219.  
  1220. - fixed saving of recent activity window - window is now saved on all exits,
  1221.   not only on Alt-X exit
  1222.  
  1223. - fixed >2GB bug:
  1224.   changed free space limitation from 2GB to 128GB (please test this! ;-)
  1225.  
  1226. - fixed % character
  1227.   usage of % character in modem commands is now possible (see below).
  1228.   
  1229. - assured that answering and in/outbound sessions run at MODEMPRIORITY
  1230.   With ZedZap, session were running at REGULARPRIORITY until yet.
  1231.   Now, session run at least with MODEMPRIORITY (or with JANUS/HYDRAPRIORITY).
  1232.  
  1233. - SRIF now (finally!?) correctly states which system is listed / which is
  1234.   protected.
  1235.  
  1236. - Fixes for dialtry's bug while using FreePoll
  1237.  
  1238. - Fixed *.REQ bug. If a session was aborted, *.Rxx files kept lying around
  1239.   and the next caller got all the stuff he did not want. Especially long
  1240.   distance links were quite unhappy with that, if the requested stuff was
  1241.   large.
  1242.  
  1243.   Now BT-XE deletes the <inbound>\<address>.R<task> request files for ALL your
  1244.   own addresses at the end of the session.
  1245.  
  1246. - Removed additional "newline" in Binkley.Log after SPAWN and ext. protocols.
  1247.   Additional newline is only printed at start of BT. This was maybe only the
  1248.   case in some internal betas ...
  1249.  
  1250. - Fixed bug that TimeSync was not executed if mail was received.
  1251.   Moved call for TimeSync direct to end of session. Mail exits etc. will be
  1252.   done *after* TimeSync now.
  1253.  
  1254. - fixed SRIF response file naming (correct e.g.: outbound.zzz\NNNNnnnn.QLO)
  1255.   Should work together with function request programs now.
  1256.  
  1257. - fixed SRIF session data in Yoohoo / FTSC sessions    
  1258.   If you had a EMSI session and after that a Yoohoo session with a SRIF freq,
  1259.   wrong data was put in the response packet (Sysop name, site, mailer).
  1260.  
  1261. New features:
  1262.  
  1263. - enhanced CPS log entries (with lower .. upper CPS rate for each xfer)
  1264.  
  1265. - debug messages for creating / removing outbound directories
  1266.  
  1267. - added "Rescanning" status msg while outbound rescans
  1268.  
  1269. - source code: replaced all TABs by SPACEs for easier DIFF/RCS/CVS handling
  1270.  
  1271. - changed hydra crc table allocations from dynamic to STATIC
  1272.  
  1273. - added delay if wrong config verbs are read, also added filename and line
  1274.   number to error message.
  1275.  
  1276. - SRIF file now also contains a "Password SECRET" (if SECRET is the actual PW
  1277.   in protected sessions) line. This line is only present on PW protected
  1278.   sessions.
  1279.   
  1280. - The logs are closed when spawning to allow other programs to include
  1281.   their logs in the main log.
  1282.  
  1283. - support for Proboard file index
  1284.  
  1285. - negative LogLevels do the same as positive ones, but only log to disk if
  1286.   Carrier detect is true.
  1287.  
  1288. - changed config file parser (; and % character treatment)
  1289.  
  1290.   '%' has a VERY ambiguous semantics:
  1291.   - it can prefix a "rest of line"-comment (if it is at 1st non-white-space
  1292.     column position in the config line)
  1293.   - it can designate the start/end of an environment variable reference.
  1294.   - it can be used simply as "%" character
  1295.  
  1296.   We resolve this the following way:
  1297.   1. if first non-white-space char, it is a comment.
  1298.      e.g.: "%comment" or "     %comment"
  1299.  
  1300.   2. if there are some characters between 2 percent signs try to evaluate an
  1301.      environment variable of this name.
  1302.      e.g.: "%TASK%" or "%task%" or "%What_Ever!%%What_Else?"
  1303.      if there are no characters between two "%" ( = "%%"), use it as a single
  1304.      "%" character.
  1305.      e.g.: "Init AT%%B%%C %%D" -> "Init AT%B%C %D"
  1306.      if the environment variable is not defined, just copy the name of it.
  1307.      e.g.: there is not variable "NOTDEF" defined.
  1308.            "%NOTDEF%" -> "NOTDEF"
  1309.   4. if there is only a single "%" in the whole line, also use it as a single
  1310.      "%" character.
  1311.      e.g.: "Init AT %B" (no other % in this line) -> "Init AT %B"
  1312.  
  1313.   BTW: %WHATEVER%%TASK% - this is valid and interpreted correctly (2 env vars).
  1314.        1        2A    B
  1315.        This is no problem with the %% at pos 2 and pos A - because first
  1316.        %WHATEVER% is evaluated (and consumes both % at pos 1 and pos 2).
  1317.        Afterwards, %TASK% is evaluated ...
  1318.  
  1319.   ';' is a bit WEIRD, too:
  1320.   - it can be a "rest-of-line"-comment
  1321.   - it can be a literal character
  1322.  
  1323.   We resolve this the following way:
  1324.   1. if first non-white-space char, it is a comment.
  1325.      ";comment" or "    ;comment"
  1326.  
  1327.   2. if there is a sequence "<white space>;;", then don't
  1328.      begin a comment, but just read it as "<white space>;"
  1329.      e.g.: "AT ;;XY" -> "AT ;XY"
  1330.  
  1331.   3. if there is a sequence "<white space>;" (and no ";"
  1332.      following), it is a comment
  1333.      e.g.: "Init ATZ|      ; init the modem"
  1334.  
  1335.   4. in any other case, just read it as ";" - no comment.
  1336.      e.g.: "AT;XY" -> "AT;XY"
  1337.  
  1338. - lowered default JANUSPRIORITY and HYDRAPRIORITY values to F31 (was T31 yet)
  1339.   lowered default MODEMPRIORITY to F15 (was F31 yet)
  1340.  
  1341. - added possibility to set Idle priority (be careful with setting prio to low)
  1342.  
  1343. - changed M_BYTE_SUMMARY to show KB size instead of Byte size
  1344.  
  1345. - changed janus/hydra update_status() to show min:sec instead of minutes
  1346.   for time remaining until completion of file transfer (ETA)
  1347.  
  1348. - cleaned up STATIC variables and made some dynamic - saves DOS memory ...
  1349.  
  1350. - "ChangeMailTo <flavor>" for FreePoll/ConditionalPoll
  1351.  
  1352. - implemented xHydra / RH1 hydra (see above)
  1353.  
  1354. - modified output of AKAs:
  1355.   until now there were 3 AKAs per line.
  1356.   now the AKA: lines are "filled up" with AKAs as it fits on the screen
  1357.   (assuming 80 chars width).
  1358.  
  1359. - added message "Rejecting human caller" if BBS caller tries while a MO event
  1360.  
  1361. - added message for FreePoll / ConditionalPoll:
  1362.   "Accepting <nodenr>. First call. ..." to avoid user confusion if a link
  1363.   calls the very first time using Freepoll (no TRX file present in outbound).
  1364.  
  1365. - bugfixes to freepoll 
  1366.  
  1367. - removed warnings from BTLNG
  1368.  
  1369. - Enhanced ALT-S ALT-G dialogue
  1370.  
  1371. - Changed freepoll volume compare to use "reject if size <= MinSize*1024".
  1372.   This means if you configure MinSize=0 only calls with really NOTHING on
  1373.   hold will be rejected. Until now, configuring 0 made no sense (size < 0 ?).
  1374.  
  1375. - fixed some bugs in ShortCostLog output routine
  1376.  
  1377. - fixed "nopickup" bug
  1378.   if you had NoPickup in your config and called a remote system using Bink 2.60
  1379.   (XE or original, doesn't matter) to send some stuff, the remote Binkley
  1380.   terminated the session immediately without even receiving your stuff.
  1381.  
  1382.  
  1383. BTXE 9610090130 (XR3 gamma release)
  1384. ===================================
  1385.  
  1386. Please read this completely and thoroughly or you will run into problems!!!
  1387.  
  1388. Bug fixes:
  1389.  
  1390. - File privilege levels for FREQ:
  1391.   changed file privilege levels from "(unsigned) word" to "(signed) short"
  1392.   for file requests. So the "level problems" of XR2 should be history now.
  1393.   
  1394. - if incoming call failed (connect and nothing more) and last call before
  1395.   was e.g. FAX, "last: FAX" was shown. This should be "Inc-Fail" now.
  1396.   This is also shown at begin of an incoming call as long as the session
  1397.   state is unknown.
  1398.  
  1399. - fixed BTCTL/BTUTIL for use without PrivateNet (point fake net)  
  1400.  
  1401. - bugfix for all lines creating BBSBATCH.* at the same place.
  1402.   BBSBATCH.* is now renamed to BBSBATxx.* (xx = Tasknumber in Hex)
  1403.  
  1404. - fixed scheduler bug
  1405.   scheduler was not working correct with events on a specifiy day of
  1406.   (any) month like with: Event All 00:00,0,1 00:00 F ...
  1407.   but there are yet bugs left ...
  1408.  
  1409. - fixed minor bug in async_os.c ("in" and "out" were swapped in OS call)
  1410.  
  1411. - fixed wrong month in ShortCostLog output
  1412.  
  1413. - fixed (?) file sharing for IBM C++
  1414.  
  1415. - fixed dynamic events - a forced rescan is now done before a dynamic event
  1416.   can end - to ensure that there is really no more mail to send
  1417.  
  1418. - fix for DOS SpawnInit
  1419.  
  1420. - EMSI bugfix: if a system sent x:y/z.0 and x:y/z.p EMSI AKA dupe check did
  1421.   not work correctly (point addr was not compared and so a "false dupe" was
  1422.   removed from AKA list of remote system).
  1423.   
  1424. - made internal FREQ processor OKFILE parsing more "robust"
  1425.   If you had multiple blanks between filespec and password in your OKFile,
  1426.   like in
  1427.             c:\*.*  !SECRET
  1428.   Binkley didn't process this as you intended it to do. Everybody could freq
  1429.   out of c.\*.* without using a password.
  1430.  
  1431.   This worked correctly:
  1432.             c:\*.* !SECRET
  1433.  
  1434.   Now Binkley doesn't care about AMOUNT of blanks between filespec and password
  1435.   any more.
  1436.   This parser part was completely rewritten - be careful and test this !
  1437.   
  1438. - versions compiled for different CPUs show CPU type in announce string
  1439.  
  1440. - misc. cosmetical fixes
  1441.  
  1442.  
  1443. New features:
  1444.  
  1445. - BE CAREFUL! Changed [section] statements - see description of [Expression]
  1446.  
  1447. - new and powerful cost calculation scheme.
  1448.   Adapt your Binkley.Evt ("L" flag) and your nodelist compiler setup or
  1449.   you WILL run into problems !!!
  1450.   
  1451. - new keyword "CostCPS" for setting assumed CPS rate for cost calculation
  1452.   related to L event flag
  1453.  
  1454. - new keyword "CostTimeCorrection"
  1455.  
  1456. - new Event flag "!=..." for Cost Events
  1457.  
  1458. - added '$' as mail status char for mail not matching cost setup (L event flag)
  1459.  
  1460. - new format char for ShortCostLog: $r
  1461.   $r gives "remote's costs" for inbound calls
  1462.   (like $c gives your own costs for outbound calls)
  1463.   changed default ShortCostLog format to include remote costs
  1464.  
  1465. - added optional size parameter to *.REQ entries:
  1466.  
  1467.   old *.REQ format       new *.REQ format
  1468.  
  1469.   file1                  file1 $12345
  1470.   file2                  file2 $100000
  1471.   file3                  file3 $1000000
  1472.   ...                    ...
  1473.  
  1474.   The value after $ is the size of the file to request in bytes.
  1475.   This is used for cost calculation only, so an approx. value does the job, too.
  1476.   Size value is optional, if no size is given, 1 is assumed.
  1477.   In the REQ file transmitted to remote side, size information is filtered out,
  1478.   of course.
  1479.  
  1480. - changed Alt-G dialogue to make input of $size possible
  1481.  
  1482. - changed "Tariff:" to show cost index
  1483.  
  1484. - new ShortCostLog format character "z" for Cost Index
  1485.  
  1486. - shared outbound / scanned outbound data dump
  1487.  
  1488.   Files related to that:
  1489.   
  1490.   "BTRESCAN.FLG":
  1491.   this global flag for all lines works different from BTRESCAN.nn:
  1492.   each line monitors this flag and if a line notices a change in the
  1493.   modification timestamp of this file, the line initiates an outbound rescan.
  1494.   if the file did not exist, but suddenly appears, a rescan is done, too.
  1495.   if there is no change or the file does not exist, nothing happens.
  1496.   For users of XenObm: this behaves very similar to XMRESCAN.FLG, so it
  1497.   should work pretty good now with XenObm regarding rescan flag!
  1498.   
  1499.   "BTRESCAN.BSY"
  1500.   this global flag is generated at start of an outbound rescan / reread of
  1501.   any line and deleted after the line finished rescanning / rereading outbound.
  1502.   while this flag is present, no other line will begin an outbound rescan/
  1503.   reread, but a line attempting to begin an outbound rescan / reread while this
  1504.   flag is already present will "remember" to do the rescan later by creating
  1505.   BTRESCAN.## for itself.
  1506.   BTRESCAN.## will be deleted immediately after creation of BTRESCAN.BSY.
  1507.  
  1508.   This will lower system load (especially in networks and multiline systems)
  1509.   by avoiding multiple lines rescanning / rereading simultaneously.
  1510.  
  1511. - Language.Txt is a mixed language file with English, Startrek and German
  1512.   language. Lines with English text are prefixed by "E", lines with Startrek
  1513.   text are prefixed by "S", German is prefixed by "G" and common lines are
  1514.   prefixed by "*".
  1515.  
  1516. - integrated BTCTL and BTLNG into one new tool named BTUTIL.
  1517.   This saves about 53KB EXE size in total.
  1518.  
  1519. - modified BTUTIL to accept mixed multiple-language language source files
  1520.   BTUTIL LNG key E language.txt english.lng
  1521.   BTUTIL LNG key S language.txt startrek.lng
  1522.   BTUTIL LNG key G language.txt german.lng
  1523.   It is possible to use BTUTIL LNG without "key X" parameter to process old
  1524.   language files.
  1525.  
  1526. - No support for external language file any more as this was a popular problem
  1527.   source. English is built in, anything other has to be patched in with btutil.
  1528.  
  1529. - merged in BTPE 4.00, 4.01 and 4.02 diff of Paul Edwards
  1530.  
  1531. - Tom Schlangen / Thomas Waldmann: misc. source fixes and cleanup
  1532.  
  1533. - changed date / time display to 96/06/24 Mon 23:59 format
  1534.   This is neither european nor US format, but simply logical ;-)
  1535.  
  1536. - Rudolf Heeb's lookup functions (try Alt-G + sysop name)
  1537.  
  1538. - TS: implemented visual progress metering bars
  1539.  
  1540. - Added magic check for reading Binkley.Axx dump files. Should help avoiding
  1541.   crashes with trashed dump files.
  1542.  
  1543. - maybe improved recenty activity scrolling performance a bit by aligning each
  1544.   line on a 4 byte boundary for video modes with a column count that is a
  1545.   multiple of 4, too (e.g. 80 or 132).
  1546.  
  1547. - extended timesync to use EMSI addresses  
  1548.  
  1549. - hydra chat 8)
  1550.  
  1551. - new keyword "NoHydraChat"
  1552.  
  1553. - sorted outbound windows (outbound on HPFS drives was already sorted even
  1554.   without this feature - but FAT users [DOS] will now be happier, too)
  1555.  
  1556. - dropped "Hydra1st" keyword (see "ProtocolPreference")
  1557.  
  1558. - new keyword "ProtocolPreference"
  1559.  
  1560. - TS: DOS only: Fossil announcement
  1561.  
  1562. - new keyword "ReadLog"
  1563.  
  1564. - MMP: "SpawnNoOK", AfterMail "Quick", "CacheHold" keywords
  1565.        New "BTFREEZE.xx" flag file.
  1566.  
  1567. - new keyword "EMSIbanner" for debugging purposes
  1568.  
  1569.   if you put this in your Binkley.Cfg, Binkley will send a banner string
  1570.   (+ Address ... using ...) before sending **EMSI_INQ - this helps with some
  1571.   remote COM I/O systems which fail within the first few received bytes.
  1572.  
  1573. - new commandline verb "Debug" - does the same as "Debug" in config
  1574.  
  1575. - added mailstatus character to zoomed outbound view (-*x>$...)  
  1576.  
  1577. - new keyword "IPC"
  1578.  
  1579. - changed janus.c to create JANUSREQ.R%02x in flagdir
  1580.  
  1581. - new keyword "TaskPath"
  1582.  
  1583. - changed order of config file reading:
  1584.   old: binkley.scd -> binkley.evt -> binkley.cfg
  1585.   new: binkley.cfg -> binkley.scd -> binkley.evt
  1586.   This was necessary for TaskPath to be known before searching binkley.scd/sxx.
  1587.     
  1588. - changed "Today at a glance" to show Mail/BBS/Fax calls ("M/B/F") - also
  1589.   changed alignment and moved it to language.txt
  1590.  
  1591. - changed message "File requests declined" to "Remote doesn't allow file
  1592.   requests now"
  1593.  
  1594. - DOS only: makes fossil announcements configurable by using the
  1595.   language file. this is way better than hardcoding them into
  1596.   the executable.
  1597.  
  1598.   the language file is readily prepared to detect and announce
  1599.   the following fossils:
  1600.  
  1601.   -   ADF (AnDan), BNU, cFos, DrComm, FCI, Opus!Comm, VX00, X00
  1602.  
  1603.   to add a new/other fossil, do the following:
  1604.  
  1605.   look in the language file (LANGUAGE.TXT) for a line which
  1606.   reads like this:
  1607.  
  1608.   -   *LVX00:VX00,X00:X00,BNU:BNU,CFOS:cFos,OPUS:Opus!Comm[,...]
  1609.  
  1610.   this line is composed of pairs of strings. each pair contains
  1611.   a search string and an answer string separated by a colon, e.g.:
  1612.  
  1613.         OPUS:Opus!Comm
  1614.  
  1615.   where `OPUS' is the string to look for in the internal fossil signature
  1616.   id string, and `Opus!Comm' is the string that will be output to the
  1617.   screen and logfiles.
  1618.  
  1619.   you simply add the new/other fossil search/answer string pair at the
  1620.   end of the line (preceeded by a `,'), but please mind that:
  1621.  
  1622.   -   the search string has to be in upper case, while the answer
  1623.       string may be in upper/lower/mixed case,
  1624.  
  1625.   -   search- and answer strings must not contain any of the
  1626.       characters: ` ' (blank/space), `,' and `:'.
  1627.  
  1628.   -   you have to use a search string which definitely designates a
  1629.       fossil you look for. therefore the search string `VX00' has
  1630.       to come before search string `X00', because the other way round
  1631.       (`X00' first, that is) the answer string for `X00' would be
  1632.       output for both `X00' _and_ `VX00' ...
  1633.  
  1634. - reduced stack space needed for "include", so you can do more "nested"
  1635.   includes now
  1636.   
  1637. - worked HydraCom 1.09d changes into hydra / hydra chat source:
  1638.  
  1639.   - Alt-C is now used for entering (and exiting) Hydra chat mode.
  1640.     Clearing "Today at a glance" is done with Alt-D now.
  1641.   
  1642.   - Hydra protocol now also works with long fnames correctly (OS/2 only).
  1643.     Long filenames are NOT supported in BT yet except in hydra protocol.
  1644.     
  1645. - Modem command character translation "." -> "," removed.
  1646.  
  1647.   So you can specify commands likw AT+FCLASS=2.0 now without having to "escape"
  1648.   the dot. You MAY, of course, continue using AT+FCLASS=2\.0 ...
  1649.  
  1650.   The only translations happening now are:
  1651.    "|"  -> output CR character
  1652.    "v^" -> lower/raise DTR
  1653.    ","  -> pause 1s
  1654.    "`"  -> pause 0.1s
  1655.    "-"  -> don't output anything
  1656.   If you don't want them, prefix them by an "escape" character which is: "\".
  1657.   
  1658. - RH: Now I_ALIVE is also supported in terminalmode and
  1659.       in terminalmode as down/upload with Xmodem and Zmodem
  1660.  
  1661. - OS/2 only: BT-XE uses an undocumented OS/2 call to set the window title
  1662.   of its own window to "BT-XE #<TaskNumber>: <Action>" (default).
  1663.   "Action" is the same as in Maximus' session monitor (if you use MCP).
  1664.   
  1665.   New keyword "WindowTitleFmt" for setting format string of window titles.
  1666.  
  1667.   Default is:
  1668.     WindowTitleFmt BT-XE #%%d: %%s
  1669.   (you have to specify %% to get the single % as result or BT will crash)
  1670.     
  1671.   You can use this to set different format, like:
  1672.     WindowTitleFmt BT-XE #%%d USR V.34: %%s
  1673.  
  1674.   But don't make the title format too long or it maybe won't function
  1675.   correctly if it doesn't fit into title area of window.
  1676.  
  1677.   You can also use WindowTitleFmt with NO format string specified to DISABLE
  1678.   "set window title" calls:
  1679.     WindowTitleFmt
  1680.  
  1681. - IPC:
  1682.   "Snoop"   defines the Snoop pipe - NOT the MCP pipe (OS/2 only).
  1683.   "MCPpipe" defines the Maximus MCP pipe (OS/2 only).
  1684.   "IPC"     defines the directory for IPCxx.BBS (all platforms)
  1685.   You can use ALL now, if you want.
  1686.  
  1687.       
  1688. [End of XR3 changes]
  1689.  
  1690. Known bugs / limitations / things to be done:
  1691. =============================================
  1692.  
  1693. - LocalLog is buggy ? Reason unknown yet. DO NOT USE EXCEPT FOR DEBUGGING.
  1694.  
  1695. - "CacheHold", "CacheHold 1" and "CacheHold 2" are buggy, outbound disappears
  1696.   except MainZone after you do an Alt-P <MyAka> in the mailer and reappears
  1697.   after a rescan on ANOTHER line. DO NOT USE EXCEPT FOR DEBUGGING.   
  1698.   "CacheHold 0" shows NO erroneous behaviour. 
  1699.   
  1700. - Delete outbound *.REQ at end of SUCCESSFUL session (50% implemented yet).
  1701.  
  1702. - if DOS EXE is used without VFOSSIL there is ANSI trash at bottom of screen
  1703.   and only 23 lines are used. This is maybe nothing new, but should be fixed.
  1704.  
  1705. - after Hydra xfers in terminal mode, there are some hydra protocol sequences
  1706.   trashing the screen. Also not new, but should be fixed.
  1707.  
  1708. - DOS version only: under certain (not all) DOS environments, you might get
  1709.   sharing violation errors. If you have these problems, please send us a
  1710.   detailed bug report.
  1711.   
  1712.