Changes made in BinkleyTerm v2.60XE/Gamma-5


Bug fixes
---------

SM: fixed: while manually polling node, Binkley did not update 'Current
    Settings' and WindowTitle (IPC_SetStatus).


RH: fixed changing colour after "connected with <sysopname>"


RH: fixed mistake in handling of (COM) device names.

  Now values >9 are possible. Added code to async_os.c to allow use of "Port
  COMx" statement.


RH: fixed bug in language code (msgs.h).

  Now the newsreader and the shells are displayed in unattended help window.


RH: fixed a serious bug in my "Override" code.

  The fields after "Nodenumber" are by definition not required and the
  pointer(s) in my structure is (are) NULL if the field(s) in question is (are)
  not defined.

  I forgot to check for NULL in "GetAlt...()" in misc.c and had some exceptions
  because of that.


RH: Squish error (could not display pending netmails if squish base) fixed.


RH: XR4 traps if no "binkley.evt" exists. Fixed.


RH: hydra chat

  If "noHydraChat" defined and ALT-C is pressed in hydra and other side has
  hydra chat available, XR4 traps. Fixed.


RH: EMSI

  While implementing smart_bidi, I found and removed a bug in emsi.c that could
  (and did) lead to that the called side told the caller "agree to zmodem", but
  in fact switched to hydra. The error was that neither my_capabilities nor
  remote_capabilities were not masked by the actual protocol but all
  protocol-bits remained to be set.


RH: fixed cosmetical bug with binkpipe

  "Last:" field was wrong.


RH: fixed cosmetical bug in pending outbound

  Scroll down scrolled one line too much.


RH: OS/2 only: moved all functions that need OS/2 PM to a separate DLL.

  The new code is located in ..\os2_pm. I've made makefiles for VAC and WATCOM,
  compiled with both and both versions run fine.

  If you don't have OS/2 PM installed, don't install bink_pm.dll.
  If you have OS/2 PM installed (standard), put bink_pm.dll in the same
  directory as BT32.EXE.
  
  
TJW: corrected range check for V7 cost field (solves potential 16Bit problem
     with cost = -1 / 65535)


TJW: removed blinking cursor after unfreeze


TJW: fixed bug in Alt-S (if you gave no path/drive, first letter was
     duplicated)


TJW: "Resending ..." corrupted Transfer Status window

  Omitted displaying this message and changed status log entry from > to !


TJW: fixed bug in receive_exit

  Any stuff to do IN binkley has to be done, before any errorlevel exit may
  happen (mail flag, aftermail etc.).


TJW: fixed misc. "cosmetical" bugs in Zmodem display routines


TJW: fixed wrong blanks (instead of leading '0's) in cost.log


SM: fixed "Are you sure ?"-bug in terminal (answer was case-sensitive)


SM: fixed 'outbound reading bug' in mailovly.c


SM: bink_pm.dll caused exception in _crt_term() when more than one instance of
    binkleyterm was loaded and exited in the same order they were started.


TS: misc fixes only of concearn for the emx compiler


TJW: Made "ReadLog" feature more safe.

  Shouldn't crash any more if input log format is invalid (e.g. if Maximus
  crashed)


TJW: sized requests were broken

  fixed by removing mailovly.c::netsize() and adapting cache.c::netsize for
  cached/uncached operation.


TJW: fixed RC* <-> RC$ confusion


TJW: if there is mail for a "Hold"-listed node, Binkley showed strange
     behaviour ("NO DIALTONE ..."). Temporary fix.


TJW: fixed EMSI.C::EncodeEmsiHeader (removed superfluous strtok call) this bug
     caused outgoing calls NOT to do ZedZap (e.g.)


MR: Bugfix: allocated memory for chat windows will now be freed


TJW: hopefully fixed "freezing bug" of animation in top left corner


TS: fixed `ErrLevelShell' bug present in DOS versions


MR: fixed CacheHold bug

  
TJW: fixed bug with dupe pkt names

  This happened if multiple pkts are sent within the same second (happened
  rarely, but happened ;-)


TJW: fixed bug in EMSI.

  As a consequence of this fix, password failure msgs are logged earlier in
  EMSI processing (before System:, Aka:, Uses: etc. is logged).

  Thanks to Stephan Jaensch and Philip Richter for discovering this bug.


MR: Made answering more save.


MR: Readdressing to same address could end in an endless loop, fixed.



New features
------------

RH: "EMSILog <filename>"

  Lets you log your sent and received EMSI string in a file. This is extremely
  useful in case you have problems with EMSI. Assume you get a password
  error: do you really KNOW wich password you ACTUALLY have sent? Log it, and
  you'll see it. Assume you don't get a hydra connect: are you absolutely
  sure that you told the other system about your capability and are you
  absolutely sure, that the other system told you about to use hydra? Log it,
  and you'll see it.


RH: "RedialTime <seconds>"

  Time between redial attempts when you are polling (only then!). This will
  give you a better chance to get a connect without increasing "polltries" to
  infinity. Works on BUSY, ERROR and timeouts ("NO CARRIER"). Does not work on
  NO DIALTONE.


RH: "AssumeBaud <bpsrate>"

  In case the modem reports "CONNECT" or "CONNECT 300" binkley will use the
  rate defined with assumebaud. Important for calculations of connect/frequest
  times.


RH: "BitType"

  Default in binkley is "TypeExact".

  This means, that a nodelist line with both analog and ISDN capability can be
  separated only with acrobatic efforts. If you include "BitType" in your
  binkley.cfg Binkley will scan each modemflag separately and will use the
  first matching predial string. If you don't configure a "ModemTrans" predial
  string, then the string after "Predial" (if any) is used (and this may lead
  to dial attempts even if not wanted as of ISDN<-->modems.

  Just look at my example:

  [fastlst.cfg]
  TypeDef HST      1
  TypeDef PEP      2
  TypeDef V32      4
  TypeDef V32B     8
  TypeDef VFC     16
  TypeDef X75     32
  TypeDef V110L   64
  TypeDef V110H  128
  TypeDef UX75    32
  TypeDef UV110L  64
  TypeDef UV110H 128

  Now let's look at binkley.cfg. Please note the sequence of the entries!

  [binkley.cfg]
  BitType
  ModemType 32      /  /X75
  ModemType 64      /  /V110L
  ModemType 128     /  /V110H
  Modemtype 31   ATD/  /MODEM

  RESULT: Your line will NOT call any ISDN node, even if (s)he has any modem
          flag set!

  [binkley.cfg]
  BitType
  ModemType 32   ATD/   /X75
  ModemType 64   ATD/   /V110L
  ModemType 128  ATD/   /V110H
  Modemtype 31      /   /MODEM

  RESULT: Your line will ONLY call ISDN nodes, even if they have a modem flag
          set. It will never call a "modem only" node

  [binkley.cfg]
  BitType
  ModemType 32   ATD/     /X75
  ModemType 64   ATD/     /V110L
  ModemType 128  ATD/     /V110H
  Modemtype 31   ATK99D/  /MODEM

  RESULT: Your line will call both ISDN and modem nodes, with different dial
          strings. Preferred is "ISDN", but "modem" is possible


RH: "ModemTrans"

  Old style: "ModemTrans <flag> <prefix>/<suffix>"
  New style: "ModemTrans <flag> <prefix>/<suffix> /<name of flag>"

  There are no changes for your current config, but if you like to see the
  nodelist info in the zoomed outbound window (ALT-I), you would like to see
  the modem flags of the node in "ascii".

  A line "ModemTrans 32 ATD/ /X75" would allow to display a modem of type 32 as
  "X75". The display is "BitType" aware.


RH: "NoErrDelay"

  Binkley XE has the feature to wait 5 seconds after each error found in any
  config file. With this keyword you can switch this off.


RH: "BinkDir"

  If a directory needed for binkley to run is not found: create it. This works
  for all directories that are given in binkley.cfg. It works for the logfile's
  directory, too.


RH: "ShowDomains"

  Binkley 2.60 and all XEs did NOT show the domains of outbound mail in their
  outbound window. If you like it or if you need displaying of domains: include
  this keyword in your config.

  Default is: no domains in "Pending Outbound"

  Note about domains:

  Binkley is fully capable to handle 5D addresses, but you have to know how it
  is done ;)

  Assume there is mail for a node 256:256/256 (MXBBSNet). Where is his
  outbound mail searched for?

  Binkley 2.60 searches this mail in \MXBBSNet.100.

  If you are using a 5D setup (this is: you are using domains) then your setup
  has to be like this:

  ;domain       domainname   abbreviation  name_of_nodelist
  Domain        MXBBsNet     MXBBsNet      nodex

  ;domainkludge zone         outbound_directory_PRE(!!)_name
  DomainKludge  256          MXBBsNet

  With these lines you determined, that "MXBBSNet.100" is the outbound
  directory for all nodes in zone 256 (256 is hex 100, this is where this
  ".100" comes from).


RH: "BiDiOK", "JanusOK"

  If either of them is set, binkley will allow janus/hydra connects even in
  case the modem doesn't tell a "reliable" string. This only happens, however,
  if the actual "baudrate" is equal or less then "BiDiBaud" resp. "JanusBaud".

  Difference:

  formerly: BiDiOk   /ARQ
            BiDiBaud 9600

  -> Only if modem reports "CONNECT <rate<9600>/ARQ" hydra/janus will be
  enabled.

  now:      BiDiOk
            BiDiBaud 9600

  -> If modem reports "CONNECT <rate<9600>/<anything>" hydra/janus will be
  enabled, don't care about "<anything>"


RH: "Port <name>"

  Normally this would be "Port <number of comport>", as in "Port 2". From now
  on you can write "Port COM1" as well as "Port 1", meaning that you can give
  the device name of the port to use. This has, at the moment, no effect beyond
  the fact that you can play with it. It will, however, be extended to use any
  device that can handle serial communication.


RH: "PasswordFile <path+filename>"

  Instead of recompiling your nodelist again and again if you have password
  problems or a new password protected link, you can from now on tell binkley
  where it can search for YOUR passwords directly.

  The file has to have the same format as a "fastlist" (tm) password file, i.e.
  a line has to look like:

  "PASSWORD zone:net/node.point@domain password"

  Example:

     Password 2:2476/7 passed ;comment        valid, password is "passed"
     Password 2:2476/* passed                 invalid, no wildcards allowed
     Password 2:2476/7@fidonet passed         valid, defines password "passed"
                                              only for a node "2:2476/7" with
                                              the CORRECT domain ("fidonet"). A
                                              node 2:2476/7@anynet would get a
                                              password failure.

  This is an extension of password protection, 'cause with passwords only in
  compiled nodelists binkley can normally not distinguish between a password
  for "2:2476/7@anynet" and "2:2476/7@fidonet".

  Note:  The password directly read from this file overrides any password
  -----  in your compiled nodelist(s)! This feature IS intented to change
         passwords on-the-fly without recompiling. The file is always read
         at runtime when a password has to be verified. You don't need to
         restart Binkley to be aware of any updates to that file.


RH: "NoFancyStrings"

  I really don't like that binkley changes strings. Sometimes it's ok, but most
  times it is not, imho.

  Don't use this keyword and nothing will change.


RH: "ForcedRescan"

  I've had the situation that one of my 2 lines crashed and left a BTRESCAN.BSY
  file in the flags directory. When it started again it produced really a lot
  of zero byte files in my \deleted\ directory (with OS/2 you can redirect all
  deleted files to a directory of your wish).

  Therefore i included this keyword: If you include it, too, then Binkley will
  not create nor care about BTRESCAN.BSY and BTRESCAN.DMP but perform a real
  rescan when it is scheduled.


RH: "HoldAfterBadConnect <1...65535>"

  Have you ever had this problem:

  You have a session password with someone. This person has included it, you
  have. But no session will be established because your friend uses some brand
  new beta mailer with some little bugs?? I've had this situation. I will never
  have it, cause this is very expensive: Binkley calls, all is technically ok,
  the other side hangs up. No mail has been transferred, that's why binkley
  calls again. And again. And again.

  After <number> calls HoldAfterBadConnect will flag this nodes outgoing mail
  as "has already made 65535 attempts to send".

  This is something harder then "HOLD", cause other programs (Squish f.e.)
  would probably set the status of "HOLD" mail back to "NORMAL". No program
  except binkley itself will, however, decrease the count of 65535 or delete
  the respectice counter file.


RH: "ShowPassword"

  Allows displaying of the password in the information window. Maybe you don't
  like others to be allowed to press "alt-i" and view your session-pws. If you
  don't care: include this keyword.


RH: "NoEMSI"
    "NoWaZOO"
    "NoHydra"
    "NoJanus"
    "FTS-0001"
    "NoRequests"
    "NoDietIFNA"
    "NoZedZap"
    "NoSeaLink"
    "ReqOnUs"
    "NoPickup"
    "NoWildcards"    this is a new statement

  Now works either as known (this means: it is a global setting) or on a
  per-node base. If you put nothing behind this verb, it works "globally", else
  it works "on this node only". If you mix both, let's say "NoEMSI" and "NoEMSI
  1:1/0", then it works globally, too, of course.

  New Syntax:

  FTS-0001    <nodenumber>: is the same as NoEMSI plus NoWaZoo plus NoSeaLink.
                            and results in XModem connects.
  NoEMSI      <nodenumber>: no EMSI on calls to "nodenumber".
  NoWazoo     <nodenumber>: no WaZoo on calls to/from "nodenumber".
  NoHydra     <nodenumber>: no Hydra on calls to/from "nodenumber".
  NoJanus     <nodenumber>: no Janus on calls to/from "nodenumber"
  NoZedZap    <nodenumber>: no ZedZap on calls to/from "nodenumber"
  NoSeaLink   <nodenumber>: no Sealink on calls to/from "nodenumber"
  NoDietIFNA  <nodenumber>: no FTS-1 sessions on calls to "nodenumber"
  NoPickup    <nodenumber>: No Pickup FROM "nodenumber"
  NoReqests   <nodenumber>: No Requests FROM "nodenumber"
  ReqOnUs     <nodenumber>: Allow "nodenumber" to frequest even if YOU called.
  NoHydraChat <nodenumber>: no hydrachats on calls to/from "nodenumber"
  NoWildcards <nodenumber>: Reject requests containing wildcards (* and ?).

  Default:   As in earlier times. If you don't change your config, you have no
  --------   changes in binkley's behaviour.

  Exception: As in earlier times: if no common protocol exists, FTS-0001 will
  ---------- be choosen for INCOMING calls. You can, however, deny FTS-0001
             sessions on OUTGOING calls with "NoDietIFNA".

  Without "nodenumber" the changed behaviour works on both in- and outgoing
  calls. With "nodenumber" it depends on *when* the nodenumber in fact is
  known.

  On outgoing calls it is always known, but on incoming calls you first have to
  do (f.e.) EMSI, and after EMSI has been successful you will know that the
  nodenumber is a "NoEmsi" number.

  ALT-E in zoomed outbound lets you toggle the flags at runtime.

              That state will be forgotten if binkley terminates!


RH: "NoFilter"

  Binkley in the past required a "filter string" (fe. "NoFilter /ARQ"). This
  has been changed to not filter AT ALL if no string is present. "NoFilter"
  means: no filtering.


RH: Changed "current settings" window

  It now doesn't show "M'Task" but the current DTE rate ("modem baudrate")
  instead. With ISDN and 115200 bps there has been not enough space behind "COM
  1". The "Status"-line now *shows* the status: "Waiting", "Init" but also
  "Hydra", "Janus", "FTSC" and so on.


RH: Changed size and position of the three windows "status", "recent", and
    "outbound". The outbound window now is 2 columns more in size.


RH: "AfterMail" with OS/2

  Old Style: "AfterMail <any string>"
  New Style: "AfterMail [#]<any string>"

  I changed this to start a detached session of "aftermail" program. The
  session is in VIO-mode, independent and gets the starting binkleys
  environment. It will be started minimized and invisible. Don't forget to put
  an EXIT statement at the end if CMD-files!

  To enable detached sessions you have

   1) to add the "#" char (this signals your intentions)

   2) to change the command this way:

        AfterMail #<os2-path>\CMD.EXE /C <script-path>\Toss.cmd

      because CMD.EXE must be started to execute "toss.cmd".

  Example: AfterMail #c:\os2\cmd.exe /c f:\binkley\toss.cmd

  If you don't change your config, nothing changes. The char "# has is removed
  if you don't run OS/2.


RH: Changed behaviour so that a nodes mail is handled as if it were mail of an
    "unlisted system" if that nodes modem is undialable.


RH: Removed the limitation of number of allowed AKAs ("Address" keyword).

  The limitation of recognizing the remotes AKAs is still left, though.


RH: Added code to allow an EMSI string up to 64kB (EMSI limit).

  In normal systems this code will have no function, but in systems with many
  many AKAs (>100) it will work.


RH: ALT-L in unattended mode

  Toggles between loglevel 6 (debug mode) and configured loglevel.


RH: Node Information

  ALT-I in zoomed outbound and the "Send" and "Get" window, also in nodelist
  lookup brings information about the currently tagged node. This led to an
  extension of the keyword Modemtrans.


RH: Loglevels

  I extended it to up to 7 (formerly: 6).

  Up to now LogLevel 7 is necessary to log the states of the statemachine to
  binkley.log. The corresponding char is '&'. See StateTbl.c and Misc.c. If you
  are really debugging the state machine: set your loglevel to 7.

  Allowed Loglevel 0. Loglevel 0 means, that only strings staring with a '!'
  will be logged to the logfile.


RH: "Override <address> <phone> <modemflag[,modemflag]> <fidoflag[,fidoflag]>"

  Allows to override any nodelist entry. Everything after a ";" or "%" is cut!

  You can add nodes and points, that are not in the nodelist and change the
  settings for listed nodes and points.

  The <address> must be at least 3D (Zone:Net/Node). If you don't fill in the
  address completely, the line is skipped.

  The <phone> field must contain a "dialable" number, this is: the pure number
  you have to dial. No prefixes for local calls, f.e.

  The <modemflag> field
   * requires configuration of "ModemTrans" statements
   * "Override" must be included *after* "ModemTrans".

  You are completely free in the names of the modemflags, but they must be the
  same as in the third (new) field of "ModemTrans".

  You can insert more then 1 string by putting a comma after each string.

  The <fidoflag> field allows the following strings:
   CM : this means CM (continious mail) as defined in FTS-5
   HUB: this node is a hub
   RC : this node is a region coordinator

  The flags for "Host", "Point" and "ZC" are set by binkley internally.

  You can insert more then 1 string by putting a comma after each string.

  Instead of filling in the fields "phone" and/or "modemflag" you can insert a
  dash ("-") as a placeholder if another field follows. Then Binkley will
  ignore the "dashed" fields and will use the data from the nodelist.

  Empty fields are allowed only from behind to the front.

  Examples:

    ModemTrans  31    / /Modem    ; links type 31 with string "Modem"
    ModemTrans  32 ATD/ /X75      ; links type 32 with string "X75"
    ModemTrans  64 ATD/ /V110L    ; links type 64 with string "V110L"
    ModemTrans 128 ATD/ /V110H    ; links type 128 with .. you know it!

    Override 1:-1/-1.0@fidonet   110 ; don't copy this line! #(
    Override 1:901/499.0@fidonet 0054-1-8765432 X75,V32B
    Override 1:901/499.0@fidonet 0054-1-8765432 X75,V32B CM
    Override 1:901/400.0@fidonet 0054-1-8765432 - CM,HUB
    Override 1:901/499.0@fidonet - X75
    Override 1:901/499.7@fidonet - - CM,POINT
                                ^^^^^^^^^^^^^^^^^^^^ note the dashes!


RH: "PipeTo <remote computer name>"

  Binkley OS/2 writes to a pipe named "\PIPE\BINKPIPE.???" with "???" being the
  decimal tasknumber. This is NOT intended to serve a "Snoop" program, but to
  transmit the complete screen to the pipe server "binkpipe.exe" (see below).

  If you insert this keyword, be sure only to give the name of the remote
  computer. Do NOT give the pipe's name, 'cause this is pre-defined and must
  not be given!

  Example:

  [%Task%==1]
  PipeTo \\pentium

  [%Task%==2]
  PipeTo \\notebook

  [%Task%==3]
  ;no "PipeTo" statement

  Binkley (task 1), will write "\\pentium\pipe\binkpipe.001", and
  Binkley (task 2), will write "\\notebook\pipe\binkpipe.002".
  Binkley (task 3), will write "\pipe\binkpipe.003" if and only if binkpipe.exe
  is running on the same computer as binkley/task 3 is running.

  Note:  If you take use of this statement, then be aware that if the remote
  -----  computer is switched off, binkley may slow down hardly!


RH: "binkpipe.exe" (OS/2 only, Freeware under the binkley license agreement)

  This is the serverside of said pipe.

  It runs under OS/2 PM and displays binkley's screen. It must be called with
  "tasknumber" at the commandline.

  Example:

  binkpipe         installs binkpipe watching for binkley/task 1
  binkpipe 1       installs binkpipe watching for binkley/task 1
  binkpipe 2       installs binkpipe watching for binkley/task 2

  If you start binkpipe.exe after binkley, you will only see the screen
  updates, not the complete screen. This is because it only prints what binkley
  actually writes.

  Note:  Due to many changes to the screen layout of BT-XE after this program
  -----  was introduced (and nobody changed binkpipe, too), this is not up to
         date and can't be used any more (the results are unpredictable...).


RH: "DelBadCall"

  Binkley remembers bad connects in his "netnode.$$?" files. If too many bad
  connects are remembered, binkley will never call this system again. You, as
  the sysop, have to delete this file manually. If you insert "DelBadCall" in
  binkley.cfg then binkley will act as follows:

  On outbound calls nothing changes: after x tries the remote system will be
  remembered as "undialable" and will not be called again.

  On inbound sessions, however, it will always check if there exists a
  "netnode.$$?" file for the called system and delete it.

  Where is the beef?

  Without this feature, your binkley would not have called the remote system
  even if the system becomes "living" again (proofed by his call to your
  system). With this feature it will assume that the problem on the remote side
  has been solved and will try again to connect.

  If your leave the "DelBadCall" statement away, nothing will change.


RH: BBSwelcome

  Changed it from static data to a pointer to char. The needed memory will be
  requestet and BBSwelcome set at runtime.


RH: binkley.evt

  Old behaviour: request 32KB and load up to 255 events there.

  New behaviour:
    request 32KB.
    check for binkley.S??
    if it exists:
       request as much memory you need to load binkley.s??
       success: free the old 32KB.
                load binkley.s??
                done.
       failure: recompile binkley.evt to binkley.s??
    else
       continue with old code.


RH: "EventFile <drive:\path\filename>"

  If you omit this, binkley will read its events from "binkley.evt", this is
  the normal behaviour. This normal behaviour means: it is not depending on
  TASK variables, all tasks read the same file "binkley.evt", and that file has
  to exist in binkleys start directory. This new statement allows (but doesn't
  require) a path, however. If you ommit the path, the eventfile will be
  searched in binkleys directory.

  I've included in my binkley-configuration:

  eventfile c:\binkley\cfg\binkley.event.0%task%

  So task 1 reads "binkley.event.01" from path c:\binkley\cfg\ whereas task 2
  reads "binkley.event.02".

  Since task 2 is my modem line, that should always "do nothing but wait +
  check if task 1 is living", I've a very small eventfile for task 2, but a
  normal one for task 1.


RH: "Event"

  Added "Y" and "P"

  Event All 00:00 00:01 Y   ; "no sound" between 00:00 and 00:01
  Event All 00:00 00:01 P   ; "no pickup" between 00:00 and 00:01

  Y and P can be mixed with every other flag, of course. NoPickup <nodenumber>
  and the "no pickup event" work as "Do not pickup if either NoPickup is set or
  this event does not allow pickups".


RH: Modem-Init

  After end of session binkley needed up to 10 seconds on my side before it
  reinitialized the modem (and hung up).

  I changed it to send a modem-init immediately after a session is in fact
  finished, this means: no more mail to send and/or to receive. After this is
  done binkley may do whatever it likes to: write a costlog, etc, but i don't
  wanna charge for this time.


RH: Borland C 3.1 for DOS

  Made it compilable and running with BC 3.1 (not so much work)


RH: Event A=x

  The possible value for "A=x" has been documented as 0..1800. This maximum of
  1800 would result in 180,000 1/100 secs (30 minutes). A value of 180,000
  doesn't fit in a 16 bit integer, however. Therefore I changed binkley to
  accept only values between 0 and 655.


SM: "async_os.c"

  32 bit comm routines are now included with some bugfixes. comTXBlockTimeout()
  is now multithreaded and com_getbuf() now uses the receive-buffer much
  better.


SM: snserver.dll is not necessary anymore

  The sourcecode is now in "pipe.c". The pipe is now only created at startup,
  snoop_close is called by the system on exit (atexit(snoop_close) in "bt.c")


SM: AfterCall

  If 'AfterCall <n> <string>' is being used and n>0, Binkley sends <string>
  between 'PreInit' and 'Init'.


SM: new config statement 'SharePort'

  If 'SharePort' is specified and the (internal) 32 bit com-routines are used,
  binkley opens the com-port as OPEN_SHARE_DENYNONE. This enables binkley to
  share the com-port with a MDOS - BBS (via vfd.sys or vcfos.sys).


SM: new config statement 'ModemRing RINGING' replaces 'ModemIgnore RINGING'.


RH: status field of outbound window

  Added '?' for status field of outbound window, meaning "undialable system".
  The message "don't know.." is now displayed only in debug mode. New mail flag
  "MAIL_CANTDIAL".


RH: share_fopen()

  If a share_fopen() can't be done, binkley will display a perror() status_line
  message if in debug mode (except if called from freepoll.c/netsize()).


RH: changed use of CACHE.C

  If you do not #define CACHE, then the old BT 2.60 code is re-enabled. Reduces
  EXE size by about 6KB.


RH: freepoll.c

  Removed netsize() from freepoll.c and changed both netsize() functions in
  cache.c and mailovly.c to fit the convention needed in freepoll.c. Reduces
  EXE size by 800 byte.


RH: Removed "EventSub()" from bink.h, misc.c and timers.c - it was not coded.


RH: Added set_prior(2) in b_spawn.c before do_exec, and set_prior(Regular)
    after spawning.


RH: changed respond_to_file_requests to update fsent.

  Made fsent global, and changed janus.c to update fsent, too. moved
  "invoke_SRIF()" calls to respond_to_file_requests().


RH: mailovly.c:

  Moved the (large) recursive search through all outbounds to a separate
  routine "do_for_all_domains".


RH: changed version_timestamp:

  It's built from the __DATE__ and __TIME__ macros and reflects the date, hour
  and minute of the compilation. Since __DATE__ and __TIME__ are defined by
  ANSI committee there should be no problems with compiler dependence.


RH: SendBuffer()

  Changed SendBuffer() to abort if not forced to send all and if received byte
  looks like a '*' (EMSI). Increased speed for session startup by 3 seconds
  (from formerly 10 to now 7).


RH: MCP_SetStatus()

  Rearranged MCP_SetStatus() in some files and debugged it (send MCP string to
  status_line). It seems to be all "ok" now.


RH: async_os.c

  Removed tBuf[] array of async_os.c and replaced tBuf by a pointer to
  hydra._txbuf. This saved 8KB static memory, increased speed (no "memcpy") and
  it *works*.


RH: enabled debug to file (formerly "btpe_debug") in async_os.c.

  If you set the environment variable "BINKDBG=<path+filename>" you'll get a
  logfile of your com-transmission.


RH: changed ALL protocols to return the same resultcodes to their application
    layer. They codes are #defined in xfer.h! (hope i didn't forget one.).


RH: Removed "NoMNPFilter".

  See note above about "NoFilter".


RH: Removed j_message and z_message.

  Created a new transfer_message() in zmisc.c similar to j_message. This is
  called by ZModem, Janus and Hydra. Fixed bug in not showing the complete
  filesize during the transfer (both ?_messages showed only the transferred
  size).


RH: changed the computation of the remaining time for file transfers to use 1
    common routine (in misc.c: "long remaining(long bytes, long efficicency)".

  Added a function "estimate_time()" (similar to elapse_time() ) that displays
  that time at POS_ESTIMATED in filewin.

  Changed ALL protocols to display both elapsed and estimated time in the
  format hh:mm:ss, and changed them so, that they display that values at the
  same position on the screen (if ever possible).


RH: missing in the 2.60 doc:

  Function Requests are possible if you add a line of that format

   $<freq-magic> [!<password>] <params,...> %04x %04x %04x

  To your "Okfiles"-list. This is a very useful and powerful feature, that i
  lately re-enabled ;)

  The format of the last three (and required!) params can be choosen at will,
  but they should exist if you don't like the risk of a hang. They represent
  the callers addess' "Node", "Net" and "Point".

  The following line in OKFILES.TXT:

  $GET_BT32 C:\OS2\CMD.EXE /C c:\zip.cmd  bt32    %04x    %04x    %04x
  -magic--- ----------command----------- -para1- -para2- -para3- -para4-

  will invoke this OS/2-Script if a caller frequests "GET_BT32":

  +----------------------------------------------+----------------------
  |@SETLOCAL                                     |set some local params
  |SET BINKLEY=C:\BINKLEY\                       |
  |SET  SOURCE=C:\BINKLEY\BIN                    |ZIP should be in the PATH
  |SET     OUT=C:\BINKLEY\OUTBOUND               |
  |                                              +----------------------
  |ZIP %OUT%\%1.ZIP %SOURCE%\%1.EXE              |perform ZIP
  |                                              +----------------------
  |IF ".%4"==".0000" GOTO NODE                   |if point is 0000, then
  |                                              |the caller is a node else
  |MD   %OUT\%2%3.PNT                            |make point directory and
  |ECHO %OUT%\%1.ZIP>%OUT%\%2%3.PNT\0000%4.QLO   |create a QLO-file with the
  |ECHO           .>>%OUT%\%2%3.PNT\0000%4.QLO   |zipped filename
  |EXIT                                          +----------------------
  |                                              |
  |:NODE                                         |if it is a node, then do
  |ECHO %OUT%\%1.ZIP>%OUT%\%2%3.QLO              |do the same for the node
  |ECHO           .>>%OUT%\%2%3.QLO              |this line makes a
  |EXIT                                          |"newline" only.
  +----------------------------------------------+----------------------


RH: "Processing node ...."

  Removed that bothering "Processing node ...." from unattended modes status
  lines. Instead i changed it so, that the dial message looks like:

   :12:34:45 BINK Dialing 0721821350  (2:2476/7@fidonet -- systemname)

  That way binkley is completely quiet (if not in debug mode) if the other
  nodes modem is "undialable".


RH: xmit_set()

  Rearranged xmit_set() and added the possiblity of a 'M H' event definition.
  'M H' will lead to C-mail (CUT and CLO) to non-CM nodes been sent without
  regarding the costs. Other non-CM mail (DUT and OUT) will be sent only if the
  costs allow it.


RH: event flag L

  Added code to not send mail in case you defined an event with "L=xx", but the
  assumed cost to transfer the stuff is not EQUAL xx. Formerly you could define
  L=999 or L<1000, it was exactly the same: all mail was sent if the cost has
  been assumed to be "less then 1000". But if i configure an event with exact
  costs, i expect binkley to do that exactly as i configured it: if "L=999" is
  defined, it shall not dial if cost is 998 or 1000 or even 0. In these cases i
  would have written "L<1000".


RH: "HoldAreaNameMunge"

  Changed "HoldAreaNameMunge" to return a directory name parallel to our "Hold"
  directory if the remote address contains domains we have not defined (where
  we have no "abbreviations" for).

  Formerly all *.BSY flags were created in the parent directory of our "Hold"
  directory. If the "hold" directory was "\binkley\outbound", then all unknown
  domains led to \binkley\*.BSY flags.

  Now they lead to \binkley\outbound.???\*.BSY, where ??? is the zone number
  (if not "nozones" defined in binkley.cfg).

  OLD:

   Setting flag_file for 2:2476/8@fidonet
   MakeDir: Attempting to create \Binkley\Outbound
   Erzeuge Flagfile \Binkley\Outbound\09ac0008.BSY.

   Setting flag_file for 999:4711/0.815@lachdoch.net
   MakeDir: Attempting to create \Binkley
   MakeDir: Attempting to create \Binkley\12670000.PNT
   Erzeuge Flagfile \Binkley\12670000.PNT\0000032f.BSY.

  NEW:

   Setting flag_file for 2:2476/8@fidonet
   MakeDir: Attempting to create \Binkley\Outbound
   Erzeuge Flagfile \Binkley\Outbound\09ac0008.BSY.

   Setting flag_file for 999:4711/0.815@lachdoch.net
   MakeDir: Attempting to create \Binkley\Outbound.3e7
   MakeDir: Attempting to create \Binkley\Outbound.3e7\12670000.PNT
   Erzeuge Flagfile \Binkley\Outbound.3e7\12670000.PNT\0000032f.BSY.


RH: Since that "junk character from keyboard" message is removed, one can't
    check whether BT lives or sleeps or is dead. I changed the "[" and "]"
    around the task display to pulse. I hope this doesn't bother someone.


RH: Removed "parse_list" structure and changed all occurences.

  Instead of defining a statement the like { 9,"statement"} you can now define
  if like {"statement"}. This saves really a lot! of static data space!


RH: Removed "char blanks[264]" from static data.

  The data will be requested on the heap, depending on the actual needed size
  (SB_COLS).


RH: "Clock [<colour>] [<char>]"

  The screen saver now displays a 7-segment digital clock if you put that
  statement to binkley.cfg.

  You can add a colour value for the clock to be displayed.

  You can also add, after the colour value if any, a char that should be used to
  display.

  If you omit both parameters, then a "1" is drawn with '1' chars, a "2" is
  drawn with '2' chars and so on.

  Clock      ; displays the clock with default values
  Clock 31   ; displays a clock white on blue with default chars
  Clock °    ; displays a clock grey on black using '°' to draw it.
  Clock 31 ° ; displays a clock... ok?

  Clock ° 31 ; is *wrong* and will not work as you expected!


RH: "Unread Netmails Pending"

  "Unread Netmails Pending" now shows the amount of *received* and not
  "intransit" unread netmails.


RH: moved "Prometer" stuff to the z_message routine, where possible. Did the
    same with janus' "update_status".


RH: "cFosCost"

  Add "cFosCost" to your binkley.cfg to get the real costs of an outbound call.
  You need an ISDN line and cFos must be the actual "modem". You must configure
  cFos to get the charge information, though!

  If "cFosCost" is read before "AfterCall" then it will override and disable
  any following "AfterCall" statements. Instead it will work as if "AfterCall 3
  ATi1|" has been defined.

  If "cFosCost" is read after "AfterCall", then your "AfterCall" string will be
  used to get the costs.

  "cFosCost" overrides any event-based cost definitions and cost calculations.
  You should define a correct "CostUnit".


RH: reversed all changes with hydra timers.

  They now are time() based as before.


RH: changed code when to display "chat available" in the caption field of the
    "recent activity" window.

  Obviously not everybody that has HOPT_DEVICE also has chat available. I've
  seen that with BT EE, that has HOPT_DEVICE but no chat. With the current mode
  of displaying this information it should be correct in that way, that binkley
  will not show "chat available" if the other side does not explicitly transmit
  the string "Remote has chat facility available".


RH: It will help you that I included code to dump exception information to a
    trapfile ;)

  This code is able to tell the source code line where an exception occured,
  but it needs a SYM file in the start directory. Thats a miss, because WATCOMS
  SYM files are not decipherable from that code. At least it will even with
  WATCOM (and EMX, i hope so) tell the exact reason for the exception.

  This code can (and maybe should) be removed in a public version. You need to
  define EXCEPTIONS to include it. See my makefile for how to create a SYM
  file.

  You will have to recompile bt.c in case of #define EXCEPTIONS


RH: changed ZSEND.C to show another behavior in case of ZMODEM_END.

  This is *only* a test at this time, it *may be* that this is wrong! See
  ..\doc\fsent.doc for the reason.


RH: Created makefiles for WATCOM to make binkpipe.exe and bink_pm.dll.

  Change to ..\os2_pm and call watcom10.cmd.


RH: changed zmodem.h to contain the comments from original zmodem.h again.


RH: os2_pm.c

  Changed OS2_PM.C to load all external DLLs with DosLoadModule and provide an
  interface to binkley. This way binkley can be compiled "completely" and no
  functions are missing, if the runtime environement allows it. removed all
  #definitions for MAX_MCP, OS2SETWINDOWTITLE and LOAD_PM_DLLS. Binkley doesn't
  need to care about any more.


RH: Removed support for SNSERVER.DLL completely.

  Binkley uses its internal pipe code by Steffen Motzer. This code uses an own
  thread and works perfectly. The config statement "Snoop" and the environment
  variable "SNOOPPIPE" remain valid and are used for the same purpose.

  Removed #define Snoop and all recerences. To include this code is now default
  behaviour in OS/2, because it requires no further action of the user (he
  doesn't need a special 3thd party DLL as SNSERVER.DLL was).


RH: Changed the way the names of "Snoop" and "MCPpipe" are evaluated to this:

  If binkley.cfg contains the statement without a pipe name, then the
  environment is searched for "SNOOPPIPE" or "MCPPIPE" respectively, else the
  environment name is ignored.

  This way you can, but must not, override the environment name. Old behaviour
  was: if an environment name existed, this one was taken and the name in
  binkley.cfg was ignored.


RH: Re-installed support for name search for dialing in non fullscreen session.


RH: The "blinking" flag around the task number should now work in X, Y and
    ZModem sessions, too.


RH: Removed UUE and ASC capabilities of hydra protocol.

  You can easily enabled them again by #defining HYDRA_UUE in your makefile.
  This #define HYDRA_UUE does both enabling UUE and ASC and increasing hydras
  buffers to the then necessary (large!) size.


RH: "SmartBiDi [Outgoing]"

  SmartBidi enables SmartBidi behaviour - without this keyword, BT-XE will
  behave as before.

  With SmartBidi, BT will disable Hydra and Janus in case of we have no local
  mail on hold for the remote system if:

  - it is an inbound call (so all AKAs of remote are known to us [EMSI])
  or:
  - we have "NoPickUp" active
  or:
  - "SmartBidi Outgoing" has been configured and we do an outbound call.
    This will check only the amount for the CALLED AKA (no other AKA is known
    at this moment).

  Then zmodem will be the fastest method (100 percent eff, whilst hydra and
  janus have only 95 percent eff.) and is choosen. Since calling a system means
  that EMSI knows nothing but the called address, and since the called system
  might have other AKAs, too, for which we might have mail on hold, the
  statement "SmartBiDi Outgoing" is used to force this behaviour in case we
  are calling.

  Be aware that SmartBidi may confuse your links because they are used to get
  (x)Hydra and now get ZedZap.
  Also, you won't be able to chat with ZedZap ...
  Also, sending a file along with a file request to your system (expecting
  xHydra) won't be nice with SmartBidi enabled, because you will get ZedZap.

Comment of TJW: shall we really keep this keyword ? As it seems to me, it has
                more disadvantages than advantages...


RH: Changed Alex Woicks code to set the Netware Server time to make it
    work with VAC, too.


RH: Changed btconfig.c to use less code for error messages.


TJW: Removed superfluous "Application" keyword


TJW: Removed obsolete "Zone", "Aka", "Point" keywords


TJW: Removed obsolete "NoZones" keyword


TJW: added MCP / tasklist messages for outbound rescan / read


CFS: New keyword: CallBack <node> [<callerid>]

  If a call from node comes, it is rejected and all mail for 'node' is changed
  to crash. If there is no mail, a .CLO is created. You'll also need ModemCID
  and CallerID (to tell Binkley the node's CallerID). Alternativly you can also
  add the number as the last parameter in CallBack. If you need more than one
  CallerID for one node, DO NOT use multiple CallBack keywords but multiple
  CallerID keyword.

  Example:

    CallBack 2:341/79 003413782005

  If 003413782005 (that's me) calls, it is rejected and called back. Be aware
  that cost and event configuration applies. If calling the node is too
  expensive or the event is set to receive-only (or the nodelist flags don't
  allow calling), BT-XE will *not* call, but still reject the call.

  Remember to define ModemCID or callback will not work. Finally, remember that
  callerID is used only to identify the call, but the number used to call back
  is the nodelisted one.


CFS: Added ModemCostReset.

  If used, the cost timer will not start after connecting but after the last
  string specified in ModemCostReset is received from the modem (or after
  dialing if none is received). If the modem is able to return RINGING, it is a
  good idea to use these keywords, as it will result in BT-XE knowing exactly
  the true start of the charges.

  Be aware that costtimecorrection still applies, so you may want to set it
  to 0 if ModemCostReset is used.

  Example:

      ModemCostReset RINGING
      ;ModemIgnore   RINGING
      ;ModemRing     RINGING


CFS: Added StatsToMsg.

  BT-XE now has the ability of logging a stat sheet at the end of the day.

  Syntax: StatsToMsg OurAKA DestAKA <PKT password>
      or: StatsToMsg OriginAKA Echotag <PKT password>

  BT-XE now has the ability of logging a stat sheet at the end of the day.

  Examples:

    StatsToMsg 2:341/70 BINKLEY.STATS would post the message in the echo
                                      BINKLEY.STATS.

  StatsToMsg writes a .PKT in the protected inbound directory, so one can store
  the message in any messagebase supported by his/her tosser.

  For echomail, the address is the 'from' address of the PKT. The destination
  address is always the main address of the system.


TS: DOS only:

  Removed config statements (not recognized any more):
   - MultiLink
   - TaskView
   - TopView
   - Rev3

  Removed code for the following obsolete multitaskers:
   - DoubleDOS
   - MOS386
   - MultiLink
   - TaskView
   - TopView

  Removed code for obsolete revision 3 type fossils


TS: all versions

  Removed config statement `NoFullScreen' (not recognized any more) and the
  ability to run in line-oriented output mode.


MT: New Keyword HydraMsgSend <text>

  Sends a message to the remote system at the end of each hydra-block


TS: updates MSC700/800 stuff;

  Now able to produce an overlayed i386 16bit dos exe with MSC800


MR: Changed config file search "logic"

  If the environment variable BINKLEY is set then this is binkley's home
  directory. Otherwise it's the current directory. The config and the event
  file as well as binkley.ban are taken from binkley's home directory.


MR: Include keyword

  Binkley now checks if the given file name already has a complete path
  (drive:\path\filename) and does no longer simply always add his home
  directory.


RH: fixed xmit_setflags() bug

  "HOLD" and "REQ" files are not to be handled in xmit_setflags() (thanks to
  Alex Woick who pointed this out).


RH: fixed some errors in latest XE*.DIF

  removed the partially included NetWare-Stuff (awaiting Alex' new DIF)


RH: Updated exceptio.c

  now it *does* print line numbers


RH: janus and hydra

  Removed throughput() calls from janus and hydra. It can't be done this way.


RH: shells

  Had the problem that pressing ALT-F2 lead to start a shell (SQUISH SQUASH)
  and on return binkley could not re-open the COM port. Changed mailer.c to
  avoid that problem.


MR: new keyword: "UseCompletePaths"

  If this keyword was found in the config file, Binkley adds its home
  directory, when creating BAT or CMD files for BBS Exit/Batch and Extern
  Exit/Batch. Also, the files created contain Binkley's home directory.

   Example: home directory: c:\binkley
            BBSBAT## is always created in c:\binkley
            BBSBAT## calles c:\binkley\spawnbbs ...

  Binkley also adds it's home directory to commands called when using BBS Spawn
  and Extern Spawn.

   Example: home directory: c:\binkley
            binkley calls : c:\binkley\spawnbbs ...
                            c:\binkley\extmail  ...


MR: Little internal change

  BBSopt and EXTopt no longer keep the string (e.g. "spawn") but only a flag
  what to do. This saves about 8 bytes of memory! ;)


MR: "BBS Batch" now always exits with errorlevel 101.

  So you can simply use "if errorlevel 101 %binkley%\bbsbat%task%" to call your
  BBS. But you should check your config to be sure, that you don't use this
  errorlevel somewhere else...


MR: ErrorLevelShell now works for the funktion keys, too.


MR: "ErrorLevelShell <errlvl> none"

  Nothing will be done for errorlevel <errlvl>. So you can disable unused
  function keys if you like.


MR: I_ALIVE.xx will now (hopefully) be deleted upon all exits.


MR: language.txt

  Changed language.txt for use with editors that strip trailing blanks. Please
  use "\b" instead of them!


MR: BINK_PM.DLL is now searched in binkley's home directory


MR: added missing \n to error message used by share_fopen


TJW: SmartBidi keyword/behaviour

  Changed SmartBidi keyword/behaviour so that it is disabled if unused, see
  above.


CFS: Added colour support for the activity window.

  Rather than providing it for the programmer, I have added it for the user.
  This means that one can change the colours by editing the language file.

  Colours are selected by inserting `new_colour` in the string, for example:

    `cyan`Password `white`error

  String replacements take effect before processing the colours, so you may add
  colours (or remove them) if you wish, i.e.

    StringRep CONNECT `red`CONNECT`white`

  would result in something such as

    CONNECT 64000/ID=003413782005

  with CONNECT in red and the rest of the line in white.

  Available colours are:

    "black", "blue", "green", "cyan", "red", "magenta", "brown", "white",
    "gray", "brightblue", "brightgreen", "brightcyan", "brightred",
    "brightmagenta", "yellow" and "brightwhite".

  Note:  If you use colours in the language file, you have to pay attention:
  -----
          1. Do not use colours in front of a log level indicator:

               WRONG:   E#032L`brightred`*Lost Carrier.
               CORRECT: E#032L*`brightred`Lost Carrier.

          2. The whole line INCLUDING the colour tags must be shorter than
             the screen width. Longer lines will be cut off.


JNK: "ErrorLevelShell <errlvl> poll <node1> <node2>..."

  Creates poll-file for all nodes <nodex>. Checks if node is listed.


SM: "ErrorLevelShell <errlvl> post \sem32\<name>"

  Binkley will post the specified Event Semaphore (usefull to start tosser).


TJW: added some brightred colour to severe error messages (PW error e.g.)


TJW: caution: new L event flags (only "L" is not valid any more):

  Li : compares with cost index (V7 "RealCost" value)
  Lc : compares with cost[cost index] * 1 minute
  Lt : compares with cost[cost index] * (estimated transfer time)

  Also made L handling in BT source a bit more "explicit".


TJW: changed layout of event display in "Transfer Status" window


MR: New command line keyword: TERM

  Starts binkley in terminal mode.


MR: Added Modem Window, new keyword: ShowModemWin

  Can be switched off and on with Alt+V. If ShowModemWin is found in config,
  modem window will be switched on upon startup.


MR: Watcom DOS overlayed version

  Moved some object files from overlay to root.


MR: Cosmetical fix: window title

  Title of recent activity window shouldn't be removed any more when switching
  on/off chat windows.


TJW: CSS (current session statistic) window implementation.


TJW: did some changes in EMSI.C to speed up EMSI handshaking retries

  (TJW 970309: EMSI data loss checker, EMSI_DAT resend, EMSI_INQ resend)
     
  Be careful with this. It worked here, but who knows ...
     

CFS: Added a event behaviour setup screen, just press alt-n and see.


TJW: changed FORCEXIT.%u to FORCEXIT.%02X (same naming convention as other
     flags)
     

TJW: removed single task "support" (TaskNumber==0)

          
JNK: "NoTranx"

  Do not send Tranx info in EMSI-handshake.


CFS: OS/2 only: Added CID detection directly from CAPI.

  The scenario where this is useful is the following: An ISDN card (usually
  used with a mailer task) is connected to an ISDN bus. A modem is connected to
  the same bus, either via an A/B switch in the NT, or via an A/B switch in the
  card. In any case, when an analog call comes to be answered by the modem, the
  modem misses the caller-id.

  This scenario is the one I have at home, and I think it is common. Since the
  ISDN card gets the caller-id (I used Jörg-Stefan Sell's Caller-id to see it),
  it is possible to use it to get the caller-id. The usage is the following:

   CAPICID EAZs Services Modem_string1 [Modem_string2] ... [Modem_stringN]

  When a call comes for any of the specified EAZs (of course, only the same
  used by the modem should be indicated) and for the specified services (list
  of services is listed below), BT-XE adds /ID=number to all the strings coming
  from the modem that starts with modem_string.

  For example:

    CAPICID 0 T RING CONNECT

  In my old 14400 it produces the following effect:

    RING/ID=3780127
    CONNECT 14400/ARQ/V32/LAPM/V42BIS/ID=3780127

  The ID addition is performed right at the modem reception part. So it can be
  used for freepoll, pass it to the BBS and everything that can be done with
  "real" CIDs from modems.

  Notes: While it seems to work great here, it is still a bit untested.

  When this feature is used, BT-XE starts a new thread to answer the CAPI
  messages, and if one of them is a phone number, BT-XE records it for "future"
  usage. When a qualified modem string comes, BT-XE just adds the phone number.
  Thus if a RING is detected by the modem before the CAPI message arrives (this
  doesn't happen at home, but it's conceivable) it is possible that the RING
  isn't followed by a ID, or could even be followed by a wrong ID! Be aware of
  these potential problems and test to see how it works for you. (if it
  doesn't, let me know :-)). Also note that the stored CID is reset after each
  call, to avoid getting a RING with the phone number from the previous call.

  The fake CID change is blocked (i.e. if a new CID comes it is ignored) in a
  two cases: When we have dialed (the stored CID is changed to the dialed
  number, so a valid ID is added to the CONNECT), and when we have answered.

  The valid services to monitor are (you may indicate as many as you wish, even
  if it is probably nonsense):

     V -> Videophone       T -> Telephony    A -> A/B services
     2 -> X.21             4 -> Fax (gr. 4)  I -> Videotext
     D -> Data transmis.   5 -> X.25         L -> Teletex
     M -> Mixed mode       R -> Remote ctl.  G -> Graphic telephone service
     X -> Videotext (new standard).


MR: "Colors" keyword:

  Added two new colours (add at the end of "Colors" in Cfg) for modem activity
  window: sent and received stuff. Please note, that you cannot change the
  background colour.


MR: Waiting for modem answers:

  Binkley checked for key strokes while initializing the modem and getting
  modem information after sessions. Now this is only done while answering and
  dialing.


MR: Init and TermInit

  Binkley now accepts multiple init strings for mailer and terminal. At the
  moment up to 5 for each.


MR: Binkley now always checks for OK when initializing the modem.

  If no OK was received, the init string will be retransmitted. After three
  tries, SpawnNoOK will be called if specified.


MR: New keyword: PreAnswer <string>.

  Lets you setup the modem before answering a call. Binkley will check for OK.


MR: New keyword: CallerID <nodenumber> <callerid>.

  Lets you setup callerids for a node. Used for ConditionalPoll and CallBack.
  If you need more than one CallerID for one node, simply use mutiple CallerID
  keywords with the same node number.

  Note:  Remember to set CallerID for EVERY nodenumber you use with
  -----  ConditionalPoll (you can still set the callerid with the last
         parameter of ConditionalPoll) and CallBack!


MR: CallerID, CallBack and ConditionalPoll

  ConditionalPoll and CallBack now optionally take a CallerID. You only need to
  set a CallerID once for each AKA, either with CallerID or ConditionalPoll and
  CallBack respectivly. Binkley will display an error message if you specify a
  CallerID twice for an AKA.

  Note: YOU MUST USE "ModemCID <string>" to use THESE THREE FEATURES!


MR: Changed WindowTitleFmt

  Do NOT use this keyword if you don't want to use this feature. DO use it
  WITHOUT parameter to use default title format. Use it WITH parameter to use
  your own title format.


TJW: changed progress meter optics (after an idea of Timo Maier)


TJW: IMPORTANT!!! Change your configs:

  Keywords About, KnownAbout, ProtAbout, Avail, KnownAvail, ProtAvail have been
  removed!
  
  Just add @FILES and @ABOUT to your OKfile / KnownReqList / ProtReqList - as
  you do it with other magics, too (hint: add FILES and ABOUT magic at the
  TOP[!] of the OKfile).


CFS: (OS/2 only) Added CFOS support.

  If 'CFOSLine' is used the last line will show a status line with data from
  CFOS: Current ISDN time (based on the last info received from the telco),
  whether the call is incoming or outgoing, phone number, b-channels being
  used, control flow support, error correction support, CPS, B1 bps rate (for
  example 64000), and cost info. I don't have cost info so this is untested.

  There are three keys available on connections:

    Alt-R    -> Reset ISDN hardware (terminates all connections)
    Key Up   -> Add a b-channel
    Key Down -> Remove a b-channel

  Note:  CFOS/2 build 1214 or later is required.


CFS: It is now possible to skip files in Hydra and Zmodem

  Alt-S -> Skip file but keep all bytes received so far
  Alt-K -> Skip file and kill it


CFS: Added StringRepModem.

  Works as StringRep but only operates on strings coming from the modem.


TJW: removed "MakeDir" keyword

  This is default behaviour now!


TJW: changed efficiency / remaining time calculations

  Changed efficiency / remaining time calculations to calculate with 8
  bits/byte (assuming sync transfers) instead of 10 bits/byte (as needed with
  async transfers, 8n1). This will give lower efficiencies (<100%), but they
  are more useable than the old ones ...


MR: CSS progress bars

  Moved chars for progress bars to language.txt.


MR: CallerIDs

  The given CallerIDs now only need to be a substring of the CallerID
  presented by a caller and do not need to be exactly the same.
  You can now also define multiple CallerIDs for one node.


CFS: Added a history window, press alt-h to enter.

  Colours have the following meaning:
    Yellow -> Incoming mailer call
    Red    -> Outgoing mailer call
    Cyan   -> Fax call
    Green  -> BBS call


MR: removed keyword "DTRHigh"

  If you want the DTR to stay high on exits, use the Keyword "Busy" and don't
  add a 'v' (see modem command character translation) to drop the DTR.

  On the other hand if you wish to drop the DTR on exits, you now HAVE to add
  a 'v' to drop the DTR if you use the keyword "Busy".

  New default for Busy: v


MR: REQ files are now only deleted after a successfull session


MR: new keyword: "HangUp"

  Use this keyword to define the string to be sent to the modem to hang up. It
  shouldn't do anything else than sending a CR, drop DTR and raise DTR again
  with some pause between those actions.

  Default: |`v~~^`````|


TJW: added V7+ support - changed Version7 keyword

  You may activate V7+ support by using: Version7 Plus

  So just add the "Plus" specifier after the normal Version7 keyword. To use
  V7+ you additionally need a nodelist compiler generating a V7+ compatible
  nodex.dtp/*.dtp file.

  V7+ support will enable BT-XE to access complete raw nodelist data, e.g. for
  supporting ,U,Txy flags and similar stuff. We just began implementing this,
  so there isn't much USE of V7+ yet - but this will come later!

  Concerning your other tools using V7: V7+ is highly compatible with V7 - so
  there should be NO problems if programs that don't know V7+ (but only V7)
  access a V7+ nodelist.

  If you only specify "Version7" (without "Plus"), Binkley will use standard
  V7 nodelist - as ever (but see also SysopNDX keyword !!!) ...


MR: multiple PreAnswer keywords

  Up to 5 PreAnswer strings are allowed now.


CFS: Added some (more or less) complete stats screens.

  Press Ctrl-T and then 1-7 to select stat page. The stats screens are based on
  the data from the history file therefore the more time you have been using a
  BT-XE with it the better the stats will be.

  Note:  Stats are system-based, not call-based. For example the "top mailers"
  -----  will tell you the mailers that are used by most different systems, not
         by most different callers, so if someone calls 100 times it is only
         counted once. So what BT-XE does is build a list of different systems
         and sort it for each stat. For the mailer stats, the speed stats, etc,
         which may vary for a given system between different calls, only the
         *last* entry in the history window counts. So if a guy switch to a
         different mailer, only the new one is accounted.


CFS: Added new keyword AutoChatOpen.

  If used, the chat window will open as soon as the remote types something (so
  no HCON: lines are logged). autochatopen also disables computer-generated
  beeps in chat (for chat timeout or close or whatever). 


CFS: Added ChatLogDir directory

  To indicate the directory where chat sessions are to be stored.


CFS: Started work on a chat-based command interpreter.

  It will allow both the local and the remote sysops to do real-time requests,
  such as attaching or freqing files on the fly.

  As of now, you may only do
  
    /btloc log filename
     
  to record the chat session. ChatLogDir must be used in order for this to
  work.

  I plan to add some more (useful) commands as soon as possible (I need to do
  some other things that can't wait because I'm about to install BT-XE in a
  special enviroment).


CFS: Added NodeExtraDir directory

  Allows to "link" a node with a directory. When the node connects, BT-XE will
  send and delete everything in that directory before the usual .?LO and .?UT
  stuff.

   Example: NodeExtraDir 2:2453/470 e:\hauke\

  Most of the people will have no use for this, however it is very useful if
  you wish to share the files to send to a node between BT-XE and a FTP server,
  for example. Just set the home directory in the daemon and the NodeExtraDir
  in BT-XE to the same path. The user may now get its stuff with the most
  convenient method each time. No need to choose... Of course, a utility to
  move .?LO and ?UT files to the remote's directory is a handy tool if you plan
  to use this :-) I'll provide a good (=one that does more than just moving
  files) one in the near future.

  Note:  You should make sure that files are not marked read only, otherwise
  -----  BT-XE will not be able to delete them and will try to send them each
         time the node connects.

  Also, if you are running the DOS or Windows versions, be aware that I don't
  know what happens if the directory has subdirectories (this means that you
  should try it and notify - don't expect someone else to do so). The OS/2
  version will just ignore them so you can build a tree for your FTP server or
  whatever you need.

  Note:  These NodeExtraDirs are not visible in the outbound window, nor
  -----  do they influence anything else like calling or conditional poll.
         Only their content is sent if a session was estabished with the
         corresponding node. Not more, not less.


MR: multiple TimeSync keywords.

  You now can use multiple TimeSync keywords to define as many sync addresses
  as you like.

  Note:  MaxDeltaTSeconds is a global value, you can't define different
  -----  values for different nodes. The last value is used for all nodes.


MR: default address for node dialogs

  Nearly all node dialogs now present a default address. This default address
  is either the address under your cursor (zoomed pending outbound mail window)
  or the top address (small pending outbound mail window).

  If you want to edit the default address, simply use backspace or left arrow.
  All other keys delete the default address. So if you want to enter a
  completely different address simply type it in and do not use backspace.


TS: added free stack / mem space display (DOS-versions only)


TJW: fixed CPU-hogging of Janus, made Janus (hopefully) SRIF-capable


TJW: "SysopNDX" keyword

  If you want Binkley to use the old style "SYSOP.NDX", then you MUST use
  this keyword. Version7 normally needs this keyword.
  
  If this keyword isn't used, Binkley will use <NODEX>.SDX for sysop name
  lookups. If you use only V7+ software, this should work.


TS: fixed "CursorRow" bug


AW: History importer for Maximus 3.0x

  The program getmax3 imports the last called user from Maximus CBCS 3.0x into
  the XE history. It must be called after a user logged off and Maximus exited
  with errorlevel 3 or above (2 and below means: no user was logged on).
  Help for getmax3 with "getmax3 -?".

  Example spawnbbs.cmd:

    maxp max -s%1 -b%2 -p%3 -n%TASK% -t%4 -y%5%6 -e0 -ll:\log\line%TASK%ad.log
    if errorlevel 3 goto lastuser
    goto end
  :lastuser
    getmax3 /h:%bt%\task\callhist.all
  :end


AW: added history importer for the internal fax receiver

  

Back to What's new in BinkleyTerm XE? or to Index
Maintained by the BTXE-Team last modified: May, 05 2000