home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 2 BBS
/
02-BBS.zip
/
bos2_xr3.zip
/
xe_user.doc
< prev
Wrap
Text File
|
1996-10-13
|
74KB
|
1,712 lines
User documentation for Binkley 2.60 XE
======================================
Binkley 2.60 original version is (c) Vince Perriello and available
at 2:2474/400. Filenames: B???_260.ZIP (??? = DOS, OS2, W32 or SRC).
Modifications were done by (in alphabetical order) :
Mike Burgett, 1:215/705
Paul Edwards, 3:711/934
Carsten Ellermann, 2:2432/215
Tobias Ernst, 2:2476/418
Rudolf Heeb, 2:2464/44
Juergen Loh, 2:2448/823
Martin M. Pedersen, 2:238/45
Tom Schlangen, 2:2450/10
Matthias Tichy, 2:2433/955
Thomas J. Waldmann, 2:2474/400
This BT-XE version is named BT 2.60XE9610132100
This is date and time of creation ^----^^--^ of this compiled version.
Please refer to this version string if you speak of this modified version.
To be short, we abbreviate this as BT-XE below...
Standard disclaimer: regard this as BETA/GAMMA software.
We can NOT guarantee that this software has no bugs (but we use it ourselves
on our own risk). So if you use it, use it on YOUR own risk, too ...
If you have any problem with this BT-XE version, please contact us!
Also, if you are a programmer and doing BT source code modifications /
enhancements / bugfixes, too, please also contact us and work together with
us on this great project!
Tip from Hauke Hagenhoff, 2:2453/1030
=====================================
COM.SYS:
When using the original serial-port-driver for OS/2, COM.SYS, you will need to
configure the port using the MODE command for having BinkleyTerm work all right.
The following setting is recommended:
MODE COMx:yyyyy,N,8,1,,TO=ON,XON=OFF,IDSR=OFF,ODSR=OFF,OCTS=ON,
DTR=HS,RTS=HS,BUFFER=ON
(you need to enter this as ONE line!)
where x is the COMx:-port to set and yyyyy the desired port speed.
Most important are the IDSR and ODSR-settings, if they are wrong, BT won't work
properly. BUFFER=ON is to switch the FIFO-buffer on.
Modifications in this version done by Mike Burgett:
===================================================
- Maximus 3.x MCP support (OS/2 version only).
(thanks to Mike Burgett for writing and Bob Juge for sending, merged in
by TJW)
Just define the same path with MCPpipe statement of Binkley as in MCP
statement of Maximus, e.g.: MCPpipe \pipe\maximus\mcp
If you do NOT want to use MCP just do NOT define "MCPpipe" in your config!
Then use SM (session monitor of Max 3.x) to view line status.
MCP.EXE *MUST* be running on startup of BT-XE to use this feature.
You must also have MCP32.DLL in LIBPATH to run this version of BT-XE (even
if you don't use MCP).
Both is part of Maximus 3.xx package (but can also be used without having
Maximus installed).
Remark of TJW:
Due to file handle inheritance problems, automatic start code for MCP.EXE
was removed. So you have to start MCP.EXE before BT-XE or MCP will not
work.
You must *NOT* start MCP using SpawnInit - this would cause problems.
Use this a SINGLE time in your CMD file (startup.cmd e.g.) before you
invoke any BT-XE task using MCP:
MCP.EXE . <pipename> <number of tasks> server
E.g.: detach MCP.EXE . \pipe\maximus\mcp 16 server
Be sure that you have set MAXIMUS environment variable before
this command.
Directly after starting MCP it's a good idea to start SM.EXE to *use* MCP.
Do NOT start SM.EXE with SpawnInit.
Modifications in this version done by Paul Edwards:
===================================================
- see BTPE_402.TXT for details
Modifications in this version done by Carsten Ellermann:
========================================================
- Max. number of AKAs raised from original 25 to BT-XE value of 100 AKAs.
- "ConditionalPoll" - this new function is inserted in BinkleyTerm.
New: Multi-AKA and boolean operation support implemented by Thomas Waldmann.
ConditionalPoll (also known as "FreePoll" from Arjen G. Lentz, who invented
this in his mailer XENIA) allows an Uplink (you) to reject a call from a
Downlink, if there is less mail for him than the configured minimum.
This function will only work with ISDN or a modem that reports the caller ID
in the "Ring" string.
It's possible to list up to 100 ConditionalPoll entries.
How it does work: the downlink will call you, Binkley gets the caller-ID
(eg. "RING 57313340"), searches ALL ConditionalPoll entries for matching
addresses and checks if the condition (minimum outbound size for this AKA)
says "reject call" or "accept call" for each AKA.
The exact condition is: if outbound size <= MinSize * 1024 then reject.
MinSize = 0 rejects a call only if there is really NOTHING (0 bytes) on hold.
Each result (accept=TRUE or accept=FALSE) is evaluated (together with the
result of previous calculation for this number) with the according
boolean operation "AND" or "OR" to calculate the total result.
The boolean operation listed with the first configured ConditionalPoll entry
matching a specific number does not care, you can use "Or" or "And" - it
makes no difference.
If total result is TRUE, call will be accepted.
If total result is FALSE, call will be rejected.
To reject a call Binkley sends the string configured with "Reject" to the
modem. To accept a call, Binkley sends the answer string (normal behaviour).
For downlinks who want to make a file request or send an important crash
mail immediately, Binkley builds a zero byte size file in the outbound
called "*.TRX" for each user. If the downlink gets a "call reject", he/she
can call again within MaxDeltaT seconds and the call will be handled normally.
To configure the function use:
; accept call of 07142980031 if size for 2:2474/405>=100KB or 2nd call
; within 30 seconds:
;ConditionalPoll Or/And AKA [3..5D] MinSize[KB] MaxDeltaT[s] Phone
ConditionalPoll Or 2:2474/405 100 30 07142980031
; accept call of 07142980032 if (size for 2:2474/403>=20KB or 2nd call within
; 30 seconds) *AND* (size for 21:492/4003 >= 10KB or 2nd call within 20s).
;ConditionalPoll Or/And AKA [3..5D] MinSize[KB] MaxDeltaT[s] Phone
ConditionalPoll Or 2:2474/403 20 30 07142980032
ConditionalPoll And 21:492/4003 10 20 07142980032
; accept call of 07142980032 if (size for 2:2474/403>=100KB or 2nd call within
; 30 seconds) *OR* (size for 21:492/4003 >= 50KB or 2nd call within 20s).
;ConditionalPoll Or/And AKA [3..5D] MinSize[KB] MaxDeltaT[s] Phone
ConditionalPoll Or 2:2474/403 100 30 07142980032
ConditionalPoll Or 21:492/4003 50 20 07142980032
; you may configure up to 100 such ConditionalPoll lines
; dependant on your ISDN adaptor and configuration, you maybe should
; leave out the leading "0" (national calls) or "00" (intl calls).
To reject a call, define once:
Reject <Modem command string|>
For a ZyXEL Elite 2864I use:
Reject ATH1|ATH0|
For ELINK 310 use:
Reject AT\\K|
ATS21.2=1 (shows caller number after RING - tested with EPROM 1.36)
For ELINK 301 use:
Reject AT\\K| (since EPROM version 2.20 of 11.5.94)
AT\O5 (show caller number after RING, since v2.12)
Restriction for ELINKs: until a ROM is released which supports a "Call
rejected" response code, you will only be able to reject incoming calls, but
not to treat being rejected yourself (you will just receive "NO CARRIER" if
you are rejected). You may configure a very LOW MaxDeltaT value to handle
this (not nice, but possible) - see also binkley event file A= parameter.
But your links should be aware that they will flag you undialable if they
dial too often without getting a connection.
- New CFG-verb "ModemReject" to identify a rejection response from the modem.
New CFG-verb "AfterCallOut" to send an AT???-command to get a cause value
from ISDN adapters like ZyXEL 2864I.
There are two different ways to see if a call is rejected:
1) The ISDN adapter sends "Busy/Cause=34Be" in one line.
2) You send an AT??? command and get an answer like "Cause = Call reject".
For 1) you need only "ModemReject <Rejectstring>", for 2) you need the
Rejectstring and "AfterCallOut <Lines> <AT command>".
AfterCallOut needs a number of lines (of output caused by AT command) and an
AT command which leads to a report with the cause value.
After a rejected outbound call, all mail to this AKA will change to NORMAL
flavour. Now you have an easy way to ping your Uplink, if he knows the
feature of Freepoll<tm>/ConditionalPoll.
ModemReject will only work with automatic call not with manual calls!
For ZyXEL 2864I i use "AfterCallOut 9 ATI3|" and "ModemReject Call reject".
For CFOS you need only "ModemReject /Cause=34Be".
For ELINK, there is no such possibility until now.
- "ChangeMailTo <flavor>" for changing mail flavor to CRASH, DIRECT, NORMAL
or HOLD after an rejected outbound call. The default is the change to
Normal flavor.
Modifications in this version done by Tobias Ernst:
===================================================
- Support for a PROBOARD fileindex. Rather than scanning your whole hard
disk for each file request, information can now be taken directly from
your Proboard configuration, so that a) you don't have to set up a huge
OKFile and b) file request is accelerated considerably, allowing for
filerequest from CDROM. Perform the following steps to set up Proboard
support (this works much like the configuration of a Maximus fileindex):
- Add the following lines to your Binkley.Cfg
PBAreas <Proboard Fileareaconfig>
The Proboard Filearea configuration file is usually named
"FILECFG.PRO" and located in your Proboard system directory.
Example:
PBAreas e:\mailer\pb\filecfg.pro
FileSec <level>
KnownSec <level>
ProtSec <level>
In Proboard, you use "levels" (numbers from 1 to 255) to set up
which users are allowed to access which files. In BinkleyTerm,
calling systems area classified as unknown (->FileSec), listed in
your Nodelists (->Knownsec), and those with a session password
(->ProtSec). Here you can set up the correspondence between the
two security mechanisms. If you, e.g., enter KnownSec 30, then
every system which is listed in your nodelist may freq from file
areas with a security level of 30 or below. You should always
have a FileSec statement, while the two others are optional.
RequestTemplate <templatefile>
You normally already have this statement, wehre templatefile the
path and name of a text file containing your magics and filearea
paths.
- Now edit your RequestTemplate-file. Leave the magics there, but
remove all normal pathnames. Instead, enter the following line:
*<Proboard Fileindex>
The Proboard file index is usually named FILESIDX.PB and located
in your Proboard system directory.
Example for a requesttemplate file with PB-support:
@MAGIC e:\mailer\filebase\magic.zip
@NODELIST e:\mailer\nodelist\nodelist.lzh
*e:\mailer\pb\filesidx.pb
Please note that you must not use MaxAreas and PBAreas at the same time!
Only one of these keywords should occur in your Binkey.Cfg. - Also note
that you should run PBUTIL FI at least once a day in order to keep your
fileindex up to date.
As the Proboard fileindex is not fully documented, this feature is
experimental. I have tested this with PB 2.12 and PB 2.15. If you have
problems with future Proboard releases, please contact me via netmail.
- BT-XE now accepts the % char in the config file, e.g. for modem commands like
"at%tcbdt". Recognition of environment-variables and rest-of-line-comments
should normally not be affected if you care for the correct whitespaces.
Suppose you have SET DIALMODE=T somewhere. Then the following line:
Prefix AT%TCB D%DIALMODE% %Comment
is correctly computed into the dialstring "AT%TCB DT", while the following
line would not be correct:
Prefix AT%TCBD%DIALMODE%
because the environment variable TCBD would be looked up. The following line:
Prefix AT %TCBDT
would also not be correct, because TCBDT would be regarded as a comment.
- Workaround a problem when scrolling the Recent Activity window: The
appropriate keystroke combinations Ctrl+UpArrow, Ctrl+DownArrow are
nonstandard and do not work in some DOS environments. You may now
alternatively use Ctrl+RightArrow and Ctrl+LeftArrow (which should work
everywhere).
Modifications in this version done by Matthias Tichy:
=====================================================
- New config verb "ReInitTime".
This lets you specify the time between modem initializations.
ReInitTime 10 -> init the modem every 10 minutes.
Valid range for this setting is 1 .. 10 only.
If you specify 0, you will get 1 minute. If you specify >10, you will get
10 minutes. This is due to a restriction in BT's timer routine and may be
removed in a later version of BT-XE.
- New config verb "ReadHoldTime".
This lets you specify the time between automatic outbound rescans.
ReadHoldTime 10 -> rescan outbound 10 minutes. Valid range is 1...
- Support for external request processors (ERPs) with SRIF
To use this, specify in Binkley.Cfg:
SRIF e:\maxfrq\maxfreq $s
The $s parameter will be replaced by the SRIF filename by BT-XE.
The SRIF file will be called "SRIF.Txx", xx=TaskNumber in Hex.
Known limitations:
The external SRIF erp is only invoked in an EMSI/WaZOO session.
Also when JANUS is used, the SRIF ERP is not invoked.
This may be changed in the near future.
The generated SRIF is compatible with the SRIF 1.01 Standard.
But not all of the optional statements are included.
I tried it also with MaxFreq 1.00 wb2 ERP only, so i cannot guarantee that
also other ERPs work with Binkley.
MaxFreq needs in his config a Mailer statement. Since it is not (yet)
allowed to specify Binkley, i use Cantaloup };->=>
Have much fun, and please test carefully.
Modifications in this version done by Rudolf Heeb:
==================================================
- New config verb "ShowAlive".
Generates a file I_ALIVE.xx (xx=Tasknumber) in the "Flags" directory.
If the file exists, nothing is done except checking it for existance.
If it does not exist, it will be created by BT-XE.
Check for existance is done each minute. So external programs can check if
BT-XE is alive by deleting this flag file and waiting if it is re-created
in a minute. If BT-XE terminates, it deletes the flag file itself.
The file I_ALIVE.xx now generated also at transfer
via Hydra XModem ZModem Janus and Fax-Receive in Mailermode
The file I_ALIVE.xx now generated also in Terminalmode while waiting of
Keystrokes and while transfer with XModem and ZModem (UPload/DOWNload)
Also, I_ALIVE.xx is generated while user does an input (nodenumber,
systemname, filename and so on).
Yes, there are people needing more than 1 minute to enter a nodenumber. :-)
- No system crash at requests of PW-protected files without password.
- Enhanced user dialogue with Alt-G (get file[s]).
BT-XE will show destination address, system name after you entered
destination address. You can now enter up to 3 filenames, password/size and
flavour before the question "More Yes/No/Other" bothers you.
- Enhanced user dialogue with Alt-S (send file[s]).
BT-XE will show destination address, system name after you entered dest address.
If you enter a wildcard filename, it will use the first matching file.
If no (matching) file is found, Alt-S remains in filename input mode and
you can try again. No unrecognized typos any longer!
With Win32 version of BT-XE, "\" works with german Windows NT, too.
- Enhanced user dialogue with Alt-S/Alt-G.
After asking "More requests"/"More sends", the same address is used again
if you answer "y". To specify a new address, enter "o" for (o)ther node.
- Enhanced user dialogue with Alt-S (send file[s]).
Support filename expansion like 4OS2/4DOS using TAB for expansion.
Example:
type on my machine c:\d<TAB>\bi<TAB>\HR<TAB><TAB>
get on my machine c:\dowork\binkley\HR0418021.DOC
- made BT-XE compile for Win32 again using Visual C++
No hydra support and no timesync support yet.
- First implementation of Lookup functions with ALT-S (Send File),
ALT-G (Get File), ALT-P (Poll Node) and ALT-M (Manual Poll)
If you enter a sysopname and the sysop has more than one line, you see a
node entry select window now and you can choose the node to use for the
selected function.
Don't use wildcards as * and or ? - use only part of names - they are working
as wildcards.
So "R Heeb" will find "Rudolf Heeb or "Rudi Heeb".
You can also use the last name only. Waldmann finds all Waldmann, not only
Thomas. :-)
If you enter both (firstname AND lastname) lastname is nor interpreted as
wildcard. If you enter one name only, it is using it as wildcard for lastname.
Samples:
"R Heeb" finds Rudi Heeb, Rudolf Heeb, Renate Heeb.
"R Heeb" does NOT find Rudi Hee, Rudolf Heebermann.
"Hee" finds Rudi Heeb, Rudolf Heeb, Renate Heeb, Rudi Hee,
Rudolf Heebermann, Elke Heess ...
"T Wald" does NOT find Thomas Waldmann
"T Waldmann" finds Thomas Waldmann
Be aware that if you use only one or two characters, there will be many
entries to be found. Many entrys -> much time and much memory needed!
Please try it, and report any errors and whishes to Rudolf Heeb.
Now in ALT-S (Send) it is allowed, to input a address not shown in nodelist.
So you can put files on hold for unlisted nodes/points.
Now in ALT-G (Get) it is allowed, to input a address not shown in nodelist.
So you can do filerequests from unlisted nodes/points.
Modifications in this version done Martin M. Pedersen
=====================================================
- Implemented support for environment variables. If a sequence of
letters, digits, and underscores are enclosed between %'s, it is no
longer handled as a comment, but as an environment variable.
Otherwise, % is still handled as a comment. Also, the configuration
file parser now allows configuration verbs to be indented.
(TW had implemented support for environment variables, too).
- Conditional inclusion of lines based on the task number. If a line
begins with a decimal number, it is compared with the task number
as set by the TASK environment variable (e.g. TASK=n on command line).
This somehow offers the same functionality as [Common] and [%TASK%==n],
but is simpler to use for single line differences. Example:
1 Init |AT&FZ|
3 Init ATZ|~~ATH0S27=17|
- I don't think the distributed version of Binkley had this bug, as
IBMC was treated specially. But Watcom had the same problem as IBMC.
The number of minutes left is written to the screen through a file
which is buffered. This fucks up the display, if the buffer is not
flushed because the other status information was written directly to
the display bypassing the buffer. Now the buffer is flushed for both
the IBMC and the Watcom versions.
- Added new keyword "PutEnv". If this is used, there string following
it is put into the environment. Variables set in this way will be
visible to Binkley itself, and by programs spawned by it; e.g.
SPAWNBBS.CMD. Example:
PutEnv BBSHOME=f:\bbs
PutEnv PATH=%BBSHOME%;%BBSHOME%\bin;%PATH%
StatusLog %BBSHOME%\bt\bt%TASK%.log
CostLog %BBSHOME%\bt\costlog%TASK%.log
- "SpawnInit" keyword specifies a command that should be executed as part
of the first-time initialization. Example:
SpawnInit su %PORT% lock %BAUD%
The command is executed only once, in the moment when the command is
encountered in the configuration file. Binkley does not even store
the command in memory. This keyword can save you for a batchfile, and
can use environment variables set in the configuration file.
You may use multiple SpawnInit commands to start multiple commands.
Attention: do NOT use SpawnInit to directly run processes which stay
resident - this can cause file handle inheritance problems.
See also options of OS/2's "start" command.
- "MailFlag" keyword. If this is specified in the configuration file (no
arguments), and "Flags" is also specified, Binkley will create a file
called "BTMAIL.IN" in the flags directory when mail has been received.
- "TimeSync" keyword. Followed by an address and a MaxDeltaTSeconds value,
it specifies that the clock should be set to after an EMSI session (without
password error) with the node specified (using TRX) - if the time difference
is not more than MaxDeltaTSeconds seconds.
Example:
TimeSync 2:238/28 60
So time will get synced to time of 2:238/28, but only if difference is within
60 seconds to our own time.
Tip: setting MaxDeltaTSeconds to e.g. 3700 (more than 1 hour) lets you do
summer / winter time zone switching automatically.
- "LocalLog" keyword. If this keyword is specified (no arguments),
Binkley will write its log information (both the normal log, and the
cost log) to a log file in the same directory as BINKLEY.Dxx etc.
When Binkley exits, and at the end of a session, Binkley will move
the contents of the local file to the file specified in the
configuration file, but only if it is able to. The log file specified
in the configuration file will no longer be continiously opened by
Binkley, and can safely be accessed by other programs. If Binkley is
not able to write to the specified log file, the log entries just
stays put in the local file until Binkley is able to move it. The
local log files are called (xx is the task number):
BINKLEY.Cxx (Local Cost Log)
BINKLEY.Lxx (Local Status Log)
- Fix for ISDN caller ID using ZyXEL 2864I. When RING was seen and
Binkley was about to send the answer string, it would wait until the
modem became silent for a fraction of a second. In this delay, Binkley
would read characters from the modem, and silently throw them away.
The caller ID on ISDN lines was lost in this way! This is fixed, and
input from modem in this period, is now logged as usual. Setting
RingWait to 2, would also have solved this particular problem, but
there is no need to wait.
- "Respawn" command line argument. If this is specified, Binkley is
automatically respawned in the unexpected event that Binkley would
trap (memory access violations etc). This wan't work on DOS, but does
under OS/2, and may work with other real operating systems too.
The way this is accomplished is quite simple: We now have two processes
running for each Binkley. The first Binkley process spawns the other,
the normal Binkley, and monitors if it exits regularly. If so, the first
Binkley terminates itself with the errorlevel of the second Binkley. If
not, it just respawns the second Binkley.
The mechanism requires that the environment variable _BINKLEY_EXIT_ is
_NOT_ set when Binkley is initially started. Binkley checks if this
variable is set, and if so, assumes it is the second (normal) Binkley.
If it is not set, Binkley will set it itself, and spawn the second
Binkley. _BINKLEY_EXIT_ is set to the filename BINKxxxx.XIT, where xxxx is
the first Binkley's process ID. The second Binkley creates this file on
a normal exit, and the first Binkley checks if it can delete it. If not,
it didn't exist, and the normal Binkley must have died irregularly.
- The parser used to identify keywords would recognize "CostLogThingy" as
"CostLog"; i.e. allowing the input word to be longer than the keyword.
This may sound okay, but it means that you cannot have two keywords
where the first is a prefix of the other. Also, you cannot define
variables on the command line where the name matches a keyword. This
is changed now, and the parser requires the words to be of equal
length.
- Implemented TW's idea of setting environment variables on the command
line. If an argument contains a '=', it is put into the environment.
Example:
bt32 TASK=3
Remark of TW: The TASK=n argument on BT32.EXE command line is a
MUST HAVE in this version of BT-XE !
Don't use TaskNumber in Binkley.Cfg!
You MUST change your BAT / CMD files !!!
- Built the language file into the EXE file. If there is no language file,
Binkley now reads the language file from the EXE itself. The language is
simply appended to the EXE followed by the file size (two bytes). BTLNG
now can do this. Example:
btlng32 patch bt32.exe binkley.lng
Attention: you should NOT use an old *.LNG file nor an *.LNG file at all
if you want to have standard (english) messages - they are
built-in in the EXE now!
- "ShortCostLog" keyword. Binkley's costlog contains a log of useful
information that easier to monitor than the status log. However, this
log is ment for human reading, and not very easily handled with utilities
like grep, awk, (REXX?) etc. So i have invented a ShortCostLog
keyword. If it is used, the CostLog will be written in another format.
The argument to ShortCostLog is a format string specifying this
format. The format string can contain literal characters and macros. A
macro is prefixed with '$', followed by an optional length, and ended
with a character specifying what kind of information to write. If the
optional length begins with '0', the information is zero-padded;
otherwise it is space-padded. The following macros are defined:
$# TaskNumber
$$ The $ character
$< Newline
$A Node address
$B Baud rate
$C Size of biggest file sent or received
$D Seconds used to transmit biggest file ($C)
$E Total number of errors
$H Hour
$I Number of inbound files
$J CPS of inbound files
$M Minute
$O Number of outbound files
$P CPS of outbound files
$S Second
$T Total number of files
$U Total CPS
$V Size of biggest file received
$W Seconds used to receive biggest file ($V)
$X CPS of biggest file received ($V)
$Y CPS of biggest file send or received ($C)
$b Abbreviated month
$c Cost
$d Day of month
$f Number of errors when receiving files
$g Number of errors when transmitting files
$i Size of inbound files
$j Efficiency of inbound files
$m Month
$o Size of outbound files
$p Efficiency of outbound files
$r Remote's Cost
$s Seconds of session
$t Total size of files
$u Total efficiency
$v Size of biggest file sent
$w Seconds used to send biggest file ($v)
$x CPS of biggest file sent ($v)
$y Year without century
$z Cost Index (0 = no cost,
1.. = cost index into cost event's cost vector)
The format string can be left out in which case it defaults to:
ShortCostLog $02y$02m$02d $02H$02M$02S $# $14A $6B $4s $4c $4r $8i $8o $8C $4Y
Which produces log entries like:
Biggest file
Date Time Task Node Connect Sec Cost RCst In Out -size -cps
960328 132222 1 2:238/9 28800 29 0 24 6036 9903 9896 3298
960328 132539 1 2:238/54 28800 105 0 96 0 230517 223554 3287
You can also use ShortCostLog to produce comma separated files which can
be imported directly into a spreadsheet or a database.
- Source code fixes important to Watcom C only:
1. Watcom C uses buffered output as IBMC does, and this caused
problems with display updates while transferring files in terminal
mode. The real problem is that buffered writes are mixed with
unbuffered display output. The work-around for the IBM compiler
has been adopted for Watcom (flushing buffers).
2. The signal stuff used to handle Ctrl-C/Break didn't work with
Watcom. This seems to be a Watcom problem; signal(SIGBREAK,SIG_IGN)
is broken. The solution is to use signal(SIGBREAK,handler) instead,
letting handler() reinstall itself on SIGBREAK and do nothing else.
- "MaxBusyAge" keyword. Followed by a number of minutes, it specifies that
Binkley should ignore .BSY files older than that. This can be used to
automatically make a node dialable even if he has an old .BSY file laying
around. This can happen if Binkley for some reason didn't clean up after
a session; i.e. the system is rebooted. It will also handle the situation
where Binkley (god forbid) traps, and is respawned using the "Respawn"
command line argument. Example:
MaxBusyAge 240
- "SpawnNoOK" keyword. Followed by a command, it specified that the command
should be executed if the modem does not respond OK to the initialization
string in unattended mode within half a second. If your modem is too slow
to respond OK, you can add a number of tildes to the initialization string.
This feature is useful for detecting if a modem has hung itself, and notify
the sysop, or with the right software and hardware turn the modem off and
on again.
- "Quick" modifier for "AfterMail" keyword. Using "AfterMail Quick <command>",
Binkley does not spend unneccesary time on modem initialization. This is
useful if the AfterMail command is very quickly. On my system i can run
the aftermail in about the same time, as it take Binkley to initialize the
modem. Also, without "Quick" a caller can be so unlucky, that the modem is
reinitialized when he calls in.
- "CacheHold" keyword which enables caching of the outbound, and speeds up
rescanning. The usage is: CacheHold <level> [Stat]. <level> specifies the
amount of caching, and can take the following values:
0 No caching and Binkley scans as usual.
1 Directories are cached. Using this, Binkley only need to read the
directories once when scanning the outbound.
2 Flow files are kept in memory. Using this, Binkley does not need to
reread flow files that has not been changed.
On my system CacheHold reduces the average rescan time from approximately
2.70 seconds to 1.30 using 29 KB cache. However, the memory requirements
and improvement in speed will differ from system to system. Add "Stat" to
the line, and it will be logged how the rescanning performs. Use
"CacheHold 0 Stat" to log the performance without caching.
- Added the ability to freeze Binkley. When Binkley sees BTFREEZE.xx (xx
is the hexadecimal task number) in the flags directory, it deletes the
file, and creates BTFROZEN.xx instead. Then it lowers the DTR signal,
and waits for BTFROZEN.xx to disappear. When it disappears, the modem
is reinitialized. This feature is useful for freezing Binkley when
compiling nodelists in the background.
Modifications in this version done by Tom Schlangen:
====================================================
- misc. fixes and cleanup, esp. for compiling with EMX
- implemented visual progress metering bars for Janus/Hydra/Zmodem
in Wazoo/Emsi sessions
- moved progress meters to new window overlapping outbound window while
in Wazoo/Emsi sessions
- misc. fixups for Dos version using MSC7.00
- only in Dos version: announcement of the fossil in use.
Modifications in this version done by Thomas Waldmann:
======================================================
- Fixed Hydra buffer management bug which caused memory corruption in original
BT 2.60 release. In OS/2 on my system this bug showed as funny attributes
on the upper "windows" of BT screen. But the effects may have varied widely
depending on compiler and system ...
- Error message for "COM0?.SYS" changed to "COM.SYS".
- Activated priority control.
The originally released EXE didn't control priority, but worked EVER at
priority Normal/0. This is too low, if you have other "heavy" processes
running on your system. ISDN transfer rates dropped to below 5000 CPS in
such cases (normal: 7000..7800 CPS) on my system (P133,32MB).
I set the appropriate compiler switch and re-activated the priority control.
Also, I enhanced priority control via environment variables.
You may now influence priorities using these environment variables:
This is the default: This is as without priority control:
SET REGULARPRIORITY=R31 SET REGULARPRIORITY=R0
SET MODEMPRIORITY=F15 SET MODEMPRIORITY=R0
SET JANUSPRIORITY=F31 SET JANUSPRIORITY=R0
SET HYDRAPRIORITY=F31 SET HYDRAPRIORITY=R0
Syntax: ...PRIORITY=<class>[delta]
class:
I = Idle (1)
R = Regular (2)
F = Foregroundserver (4)
T = TimeCritical (3)
delta:
0 = normal
..
31 = high (default, if not specified)
Do experiments with these values! The defaults needn't to be the best values
for YOUR system and high priority needn't be better than low priority.
- The BINKLEY.DAY and .SCD are renamed to BINKLEY.Dxx and .Sxx (xx=TaskNumber).
- [Expression]
Multiline configuration via single Binkley.Cfg and Binkley.Evt files!
Config lines (sections) dependant on expressions!
[Common] and [%TASK%==x] in a Binkley.Cfg / .Evt make multiline operation
possible with one single Cfg and one single Evt file.
You needn't use this nice feature if you don't want to. Operation should be
possible with the same config / event files as in orig. BT 2.60 release
without usage of these "sections", because the implicit default section at
top of each config file read (or included) is "[Common]".
BUT: you MUST use TASK=n commandline argument in ANY case.
[Common]
; settings in this section are read by all tasks.
; ...
[%Task%==1]
; settings in this section are read by Task 1 only.
; all other tasks ignore these settings like if they were "blind" ...
[%Task%==2]
; settings in this section are read by Task 2 only.
; all other tasks ignore these settings like if they were "blind" ...
[Common]
; settings in this section are read by all tasks.
; ...
If you specify a setting first in [Common] and afterwards the same setting
in [%Task%==x] (or vice versa), behaviour of BT-XE in Task x is the same as
if you specified these settings twice in this order using original BT 2.60.
If you include another config file using "Include" statement, state (read
settings or not) is treated locally to each file and restored after return
from reading that file.
E.g.:
[Common]
; settings here are common for all tasks
Include Task1.Cfg <- may have [%Task%==x] and [Common] sections, too.
; settings here are common for all tasks, regardless of Task1.Cfg contents.
New since XR3:
[%Task%==1] use section if environment variable TASK equals 1
[%ENVVAR1%==%ENVVAR2%] ... if env. var. ENVVAR1 equals ENVVAR2
[%MODEM%==ZYXEL] ... if env. var. MODEM equals ZYXEL
[%PORT%!=2] ... if env. var. PORT is not equal to 2
[Common] or [True] use section in any case
[Ignore] or [False] ignore section
Obsolete style (not supported any longer): [Task 1]
- Using TaskNumber for BBS/EXT exits.
This is now handled like in Binkley 2.60 release (again).
Review your CMD / BAT files if you used former BT-XE versions !!!
BBS exits:
%1 %2 %3 %4 %5
DTErate ConnectRate COMhandle Time2NextEvent Modem-String
EXT exits:
%1 %2 %3 %4 %5 %6
DTErate ConnectRate COMhandle Time2NextEvent n Modem-String
This is NORMAL Binkley parameter layout again (no additional parameter as
in former betas of BT-XE). If you need the TaskNumber in this context, just
get it out of %TASK% environment variable (which is defined by BT-XE if you
invoke it with BT32.EXE TASK=n).
- Fixed bug caused by using wrong HPFS file timestamp in SCD/EVT and file
update request handling. Now, the "last file modification" timestamp is used.
Before, "last file access" timestamp was used - which was definitely WRONG
for HPFS. This caused problems on HPFS only, because FAT file system does not
have multiple different file timestamps like HPFS (file creation, last file
access, last file modification).
- "Hydra1st" config verb.
This was dropped after XE2 release and is no longer a valid config verb.
For explanation see "ProtocolPreference" keyword.
- Zoomed outbound view "Age" bug fixed (weird ages of some thousand days were
displayed - fixed!).
- Fixed cosmetical problem with password failure msg ("trash" at end of PW)
"His='', Ours='XXXXXXXX<trash>'
- Enhanced Screen Layout / Colors:
- Extended color settings (like BT-EE now! ;-)
There are 2 more colors (configured after the normal 2.60 colors) now for
windows frame title text and frame color. See sample configs ...
- TaskNumber in top left corner
- Port and Baud switched position
- broader Recent Activity and Hold Window
- with mail "Age" display in Hold Window
- one screen row more than before (there are 25, not 24).
Therefore one row more in Recent Activity window.
- Implemented "MakeDir" config verb. This creates outbound directories needed
for BSY flags. Also, it removes empty outbound directories.
- RecentyActivity-Buffer is saved to and restored from disk file Binkley.Axx.
- FREQ response packet fixes:
- time string had incorrect printf format
- time string had incorrect FTS format (should be 2 blanks in the mid!)
- put in session password into freq response packet as packet password (well,
this isn't correct in every case, but better than no password at all).
- put in destination NODE address, too. This was forgotten ...
- Fixed bug with not deleted *.REQ / *.Rxx files.
- Fixed >2GB bug.
- negative LogLevels do the same as positive ones, but only log to disk if
Carrier detect is true.
- xHydra AKA RH1 hydra, yeah! 8)
This modified Hydra (which identifies in EMSI with RH1 flag) does file
requests ONLY in the 1st transfer "batch". Mail packets and all flow file
attaches are sent in the 2nd batch - while you already get the requested
files from the other system!
Until now, this was only possible with Janus - now you can do this with
Hydra, too! So just send your filelist along with your filerequests if
the other system supports RH1 / xHydra, too.
Until now I know of these xHydra mailers: BT-XE ;-), Xenia and Maindoor
If xHydra is used, this is shown via "Session method: xHydra".
- fixed nopickup immediate hangup bug
- modified BTLNG to accept mixed multiple-language language source files
BTLNG key E language.txt english.lng
BTLNG key S language.txt startrek.lng
It is possible to use BTLNG without "key X" parameter to process old
language files.
- Language.Txt is a mixed language file with english and startrek language.
Lines with English text are prefixed by "E", lines with Startrek text are
prefixed by "S", common lines are prefixed by "*".
- No support for external language file any more, you MUST patch your LNG
into the EXE using BTLNG patch ... if you want to have something different
as standard english language.
- Hydra chat
If you have a hydra session, you might use chat mode now (if the other side
is capable of chat mode, too - some mailers tell you this with a message
displayed as "HCON: remote has chat capability (bell enabled/disabled)" or
similar).
To enter chat mode on your side, hit "Alt-C". Two windows "Local" and
"Remote" will appear, shrinking "Recent Activity" - I strongly(!) recommend
80*50 video mode for this (mode co80,50) - with 80*25 you will have only
2 lines as chat window(s).
At this moment, your side will transmit a string to the other side notifying
that you entered chat mode (and also two bell characters to wake up the
remote sysop).
If remote sysop is not awake yet, you may send some more bell characters
using Ctrl-G.
To send text to remote side, simply type it in.
All text entered on the remote side will appear in your "Remote" window.
To leave chat mode hit Alt-C again. Chat mode will automatically be left
at end of the session if one side leaves chat mode (or even did not enter
chat mode). Also, there is an input timeout, so don't sleep while chatting.
Please report any problems or incompatibilities with chat mode, especially
to other mailers.
- integrated BTCTL and BTLNG into a single tool named BTUTIL.
Invoke BTUTIL without parameters to see usage.
- "ProtocolPreference" keyword (this made "Hydra1st" keyword obsolete)
Binkley 2.60, 2.60 XE1 and XE2 were NOT fully FSC-0056 (EMSI specification)
conform yet (well, it worked, though ;-).
Old / wrong behaviour:
1. caller system sends all protocols (HYD,JAN,ZAP,ZMO) it can do.
2. called system (BT) chooses a protocol with fixed preference order
JAN,HYD,ZAP,ZMO (BT 2.60 orig) or HYD,JAN,ZAP,ZMO (XE and Hydra1st) -
no matter in which sequence the protocols are transmitted (preferred)
by caller.
New and correct behaviour:
1. caller system sends all protocols it can do in order of preference:
It sends e.g. HYD,JAN,ZAP,ZMO if it can do them all and prefers Hydra as
1st choice, then Janus as 2nd choice, ZedZap as 3rd choice etc.
2. called system chooses the FIRST protocol out of the transmitted protocol
preference string which it is itself capable of.
If ZAP,JAN,HYD,ZMO is received and it can do ZAP, it will choose ZAP,
doing the 1st choice protocol.
If JAN,HYD,ZAP,ZMO is received and it can't do JAN, but HYD, then HYD will
be done, doing the 2nd choice protocol.
With ProtocolPreference you can set what YOUR own Binkley will send in EMSI
if you call out to another system.
Default preference sequence (if you don't specify this keyword):
HYD,JAN,ZAP,ZMO (if Hydra is implemented in your Binkley version)
or
JAN,ZAP,ZMO (if no Hydra is implemented in your Binkley version)
With NoJanus, NoHydra, NoZedZap etc. the corresponding protocols will be
left out of the default ProtocolPreference string, of course.
If you specify
ProtocolPreference HYD,ZAP,ZMO
your Binkley will tell remote side on outgoing calls that it prefers
HYDRA as 1st choice, then ZedZap as 2nd choice and ZMO as last choice and
that it can NOT do anything other.
ATTENTION:
==========
Be aware that the user defined ProtocolPreference string is transmitted
"as is", there are no checks if it is valid or if it does comply with your
other settings! So DON'T use this keyword if you don't know what you're doing.
If you call out and the other side does not answer with the first available
protocol in YOUR ProtocolPreference although remote side is capable of doing
it and also has not disabled it, the remote side is NOT fully FSC-0056
compliant and you should notice the software author of that.
- "CostTimeCorrection"
With this you can configure the time in seconds that your modem / adaptor
needs to connect and also session overhead for cost calculation.
First value is the time in s (costing money) before you get a "CONNECT".
Default is 5s.
For ISDN you might want to configure a lower value.
For very bad lines you might want to configure a higher value.
Second value is the session handshake overhead in s used for calculations
for "L" event flag (before dialing out). Default is 5s, too. If you connect
to very fast or slow handshaking mailers, you might want to configure a
different value.
You should change the default values to typical ones for your system.
The defaults are just "better than nothing", but too low for analogue modems
and too high for ISDN adaptors.
E.g.: CostTimeCorrection 13 4
This gives a connect overhead of 13s and a session overhead of 4s (analogue
connect with V.32bis on good line, BT-XE to BT-XE).
E.g.: CostTimeCorrection 1 2
This gives a connect overhead of 1s and a session overhead of 2s (ISDN
connect with X.75, BT-XE to BT-XE).
- "Cost Event" - a new Event type with flag "!="
This new event type is used similar to normal "Event", but describes costs
involved with your outbound calls at different daytime, weekdays etc.
There can be ONLY such a cost definition in such an event, nothing else!
Such a "cost event" does NOT interfere with other event definitions.
The cost vector can include up to 16 comma separated entries, but there
MUST NOT be any blanks between them. You need not specify all 16 entries,
you need only to specify the ones you really use (c0,c1,c2 if you only use
3 cost indices).
Event <days> <start time> [<end time>] !=<c1>,<c2>,..,<c16>
^------------------------------^ ^----------------^
meaning as like in other events cost vector
The cost index used for a connection is reported after connection as
"Seconds: ... Tariff: <cost index> ... System: ...".
Example 1 for Germany (used with EuroCost and CostUnit 12):
Event All 00:00,12,24 05:00 !=2400,0600,0360,0360,0600,0090,0090,0054
This means that on December 24. from 00:00 until 05:00 the "cost vector" is
2400, 600, ... (meaning that cost index 1 (city zone) has unit lengths
of 240 seconds, cost index 2 (50km zone) has unit lengths of 60s etc.).
You have to compile the "cost index" into V7 nodelist index (cost field).
Binkley then uses this "cost index" as index into the "cost vector" of the
active CostEvent. "cost index" is 1-based (!), 0 means no/unknown cost!!!
You have to define the cost vector in 1/10 seconds (unit length).
CostUnit is the amount of money a unit costs (12 [Pf] in Germany).
So if you call somebody on Dec. 24 at 03:00 who has cost index 3 compiled
into the V7 cost field by your nodelist compiler, Binkley will calculate
with unit lengths of 36 seconds (360 * 0.1s).
Example 2 for US (NO "EuroCost" and NO "CostUnit"):
Event All 00:00 24:00 !=10,20,40,80,160
[Sorry, I don't have ANY information about US cost structure, so this is
just an example with not realistic numbers]
This means that on every day between 0:00 and 24:00 the "cost vector" is
10,20,...,160 (meaning that a minute shortest distance costs 10 [cents or
whatever] and a minute longest distance costs 160). You have to compile
the "cost index" (1 is nearest, 5 is farest in this example, up to 16
is possible) into V7 nodelist index (cost field). Binkley then uses this
"cost index" as index into the "cost vector" of the active CostEvent.
"cost index" is 1-based (!), 0 means no/unknown cost!!!
So if you call somebody (on any day, any time) who has cost index 3 compiled
into the V7 cost field by your nodelist compiler, Binkley will calculate
with costs of 40 [cents, whatever] per minute.
Here, for interested audience, the calculation method. If you aren't
interested, you can skip to next feature ...
Cost calculation algorithm for outbound calls (inbound: cost==0) :
StartTime = StartTime - CostTimeCorr_Connect the modems need some worthy
time before CONNECT !
get CostIndex (1..16) from V7 nodelist RealCost field
find CostEvent matching StartTime and get ActualCostVector
set return value Cost = ActualCostVector[CostIndex] !!!
EuroCost (unit based cost calculation) :
Time = StartTime set Time to StartTime
Ttimes10 = 0 set 1/10s timer to 0
TotalCost = 0 set TotalCost to 0
while Time < EndTime do as long as connection was
TotalCost = TotalCost + CostUnit spend one CostUnit
Ttimes10 = Ttimes10 we get this time for
+ ActualCostVector[CostIndex] one CostUnit
Time = StartTime + Ttimes10/10; afterwards we have this time
find CostEvent matching Time and get tariff information for
update ActualCostVector new Time
return TotalCost as total cost this is what we spent
No EuroCost (minute based cost calculation) :
Time = StartTime set time to StartTime
TotalCost = 0 set TotalCost to 0
while Time < EndTime do as long as connection was
TotalCost = TotalCost spend amount of money
+ ActualCostVector[CostIndex] one minute costs
Time = Time + 60s we get 1 minute for it
find CostEvent matching Time get tariff information for
and update ActualCostVector new Time
return TotalCost as total cost this is what we spent
I hope this is the correct way to do it.
If it is NOT correct like this, please let me know !!!
Don't forget to adapt your "L" flags in Binkley.Evt !!!
With L flag, Binkley will calculate costs before calling out:
It will assume a 1KB/s transfer rate (default, you may modify this by
specifying CostCPS, see below) to estimate session length.
Then it calculates real cost (in your currency) for this session at this
time and decides depending on L flag condition if it should dial out or not.
You can use this to send short crash mails immediately and delay crash
mails with file attaches to some later event with cheaper costs.
For a cost saving setup in Germany you could use L=12 (meaning L<=12) on
most of your events - except event at cheapest time 02:00-05:00, for this
event you should NOT do cost restrictions or BT-XE will not dial out at all
if costs are too high even at cheapest time. This will cause BT-XE to delay a crash
mail until cost is <=12 ("Pfennige") or until event with no cost
restriction or "H" flag.
- new keyword "CostCPS"
This sets the estimated CPS rate for cost calculations related to "L" event
flag. Default is 1024 CPS.
CostCPS 1500 ; could be used for lines connecting at 14400bps
CostCPS 3000 ; could be used for lines connecting at 28800bps
CostCPS 7000 ; could be used for ISDN X.75 lines with 64000bps
Additionally, the connect and session overhead is added for cost calculation.
- Shared outbound
First binkley task who decides to do a new rescan writes rescanned data
into FlagDir\BTRESCAN.DMP (saying "Rescanning").
If this file is not older than "ReadHoldTime" minutes, other lines will
just read this dump file (saying "Reading").
Touching FlagDir\BTRESCAN.FLG or manually pressing Alt-O unconditionally
leads to a REAL rescan (= update of BTRESCAN.DMP).
- new keyword "IPC"
With this, you define the directory which Binkley will use to write Max 2.x
compatible IPCxx.BBS (xx = tasknumber in Hex) files into.
E.g:
IPC h:\Max\IPC\
The IPC files will contain "BinkleyTerm 2.60XE" as user name and some
information about Binkley's state, e.g. "Waiting for Call or Event".
If you do not use IPC keyword, Binkley will NOT write IPC files.
- new keyword "ReadLog"
If you spawn other programs from Binkley which generate a binkley style
log, you can read this log into Binkley's screen (and log).
The log specified with "ReadLog" is DELETED after it is read and
incorporated into Binkley's log
E.g.: ReadLog c:\bt\1\bink_add.log
^ redirect all other bink style logs you want to
include to that location
- new keyword "NoHydraChat"
You can disable Hydra Chat capabilities using this keyword.
- new keyword "TaskPath"
You can specify a separate directory for BINKLEY.?xx files with this to
keep your Binkley directory clean. Defaults to Binkley directory.
E.g.: TaskPath c:\bt\task\
Modifications in this version done by Juergen Loh:
==================================================
- Added 'Sorted Outbound'
-----------------------
The 'Pending Outbound Mail' is sorted by Domain / Zone / Net /
Node / Point. Sendable mail is still on the top.
History:
BTXE_XR1
========
- first public release
BTXE 9606132330 (XR2 bugfix release)
====================================
Bug fixes:
- fixed cosmetical problem with Elapsed: xx:yy:zz (a trailing blank
overwrote the window frame)
- fixed cosmetical problems with Zoomed Outbound view: EE colors and headline
- fixed SRIF extension (wrong) .Txx to (correct) .xx (xx=TaskNo/Hex)
- fixed cursor position when shelling or entering terminal mode
- added Hydra key to "native_protocols". Until now, you were not able to
select Hydra in terminal mode ...
- fixed "main outbound removal" bug when using "MakeDir".
If there is an outbound without "." in its filename then just let it be -
even if it's empty.
- fixed ShortCostLog $m
- fixed cursor positioning to end of screen
- fixed saving of recent activity window - window is now saved on all exits,
not only on Alt-X exit
- fixed >2GB bug:
changed free space limitation from 2GB to 128GB (please test this! ;-)
- fixed % character
usage of % character in modem commands is now possible (see below).
- assured that answering and in/outbound sessions run at MODEMPRIORITY
With ZedZap, session were running at REGULARPRIORITY until yet.
Now, session run at least with MODEMPRIORITY (or with JANUS/HYDRAPRIORITY).
- SRIF now (finally!?) correctly states which system is listed / which is
protected.
- Fixes for dialtry's bug while using FreePoll
- Fixed *.REQ bug. If a session was aborted, *.Rxx files kept lying around
and the next caller got all the stuff he did not want. Especially long
distance links were quite unhappy with that, if the requested stuff was
large.
Now BT-XE deletes the <inbound>\<address>.R<task> request files for ALL your
own addresses at the end of the session.
- Removed additional "newline" in Binkley.Log after SPAWN and ext. protocols.
Additional newline is only printed at start of BT. This was maybe only the
case in some internal betas ...
- Fixed bug that TimeSync was not executed if mail was received.
Moved call for TimeSync direct to end of session. Mail exits etc. will be
done *after* TimeSync now.
- fixed SRIF response file naming (correct e.g.: outbound.zzz\NNNNnnnn.QLO)
Should work together with function request programs now.
- fixed SRIF session data in Yoohoo / FTSC sessions
If you had a EMSI session and after that a Yoohoo session with a SRIF freq,
wrong data was put in the response packet (Sysop name, site, mailer).
New features:
- enhanced CPS log entries (with lower .. upper CPS rate for each xfer)
- debug messages for creating / removing outbound directories
- added "Rescanning" status msg while outbound rescans
- source code: replaced all TABs by SPACEs for easier DIFF/RCS/CVS handling
- changed hydra crc table allocations from dynamic to STATIC
- added delay if wrong config verbs are read, also added filename and line
number to error message.
- SRIF file now also contains a "Password SECRET" (if SECRET is the actual PW
in protected sessions) line. This line is only present on PW protected
sessions.
- The logs are closed when spawning to allow other programs to include
their logs in the main log.
- support for Proboard file index
- negative LogLevels do the same as positive ones, but only log to disk if
Carrier detect is true.
- changed config file parser (; and % character treatment)
'%' has a VERY ambiguous semantics:
- it can prefix a "rest of line"-comment (if it is at 1st non-white-space
column position in the config line)
- it can designate the start/end of an environment variable reference.
- it can be used simply as "%" character
We resolve this the following way:
1. if first non-white-space char, it is a comment.
e.g.: "%comment" or " %comment"
2. if there are some characters between 2 percent signs try to evaluate an
environment variable of this name.
e.g.: "%TASK%" or "%task%" or "%What_Ever!%%What_Else?"
if there are no characters between two "%" ( = "%%"), use it as a single
"%" character.
e.g.: "Init AT%%B%%C %%D" -> "Init AT%B%C %D"
if the environment variable is not defined, just copy the name of it.
e.g.: there is not variable "NOTDEF" defined.
"%NOTDEF%" -> "NOTDEF"
4. if there is only a single "%" in the whole line, also use it as a single
"%" character.
e.g.: "Init AT %B" (no other % in this line) -> "Init AT %B"
BTW: %WHATEVER%%TASK% - this is valid and interpreted correctly (2 env vars).
1 2A B
This is no problem with the %% at pos 2 and pos A - because first
%WHATEVER% is evaluated (and consumes both % at pos 1 and pos 2).
Afterwards, %TASK% is evaluated ...
';' is a bit WEIRD, too:
- it can be a "rest-of-line"-comment
- it can be a literal character
We resolve this the following way:
1. if first non-white-space char, it is a comment.
";comment" or " ;comment"
2. if there is a sequence "<white space>;;", then don't
begin a comment, but just read it as "<white space>;"
e.g.: "AT ;;XY" -> "AT ;XY"
3. if there is a sequence "<white space>;" (and no ";"
following), it is a comment
e.g.: "Init ATZ| ; init the modem"
4. in any other case, just read it as ";" - no comment.
e.g.: "AT;XY" -> "AT;XY"
- lowered default JANUSPRIORITY and HYDRAPRIORITY values to F31 (was T31 yet)
lowered default MODEMPRIORITY to F15 (was F31 yet)
- added possibility to set Idle priority (be careful with setting prio to low)
- changed M_BYTE_SUMMARY to show KB size instead of Byte size
- changed janus/hydra update_status() to show min:sec instead of minutes
for time remaining until completion of file transfer (ETA)
- cleaned up STATIC variables and made some dynamic - saves DOS memory ...
- "ChangeMailTo <flavor>" for FreePoll/ConditionalPoll
- implemented xHydra / RH1 hydra (see above)
- modified output of AKAs:
until now there were 3 AKAs per line.
now the AKA: lines are "filled up" with AKAs as it fits on the screen
(assuming 80 chars width).
- added message "Rejecting human caller" if BBS caller tries while a MO event
- added message for FreePoll / ConditionalPoll:
"Accepting <nodenr>. First call. ..." to avoid user confusion if a link
calls the very first time using Freepoll (no TRX file present in outbound).
- bugfixes to freepoll
- removed warnings from BTLNG
- Enhanced ALT-S ALT-G dialogue
- Changed freepoll volume compare to use "reject if size <= MinSize*1024".
This means if you configure MinSize=0 only calls with really NOTHING on
hold will be rejected. Until now, configuring 0 made no sense (size < 0 ?).
- fixed some bugs in ShortCostLog output routine
- fixed "nopickup" bug
if you had NoPickup in your config and called a remote system using Bink 2.60
(XE or original, doesn't matter) to send some stuff, the remote Binkley
terminated the session immediately without even receiving your stuff.
BTXE 9610090130 (XR3 gamma release)
===================================
Please read this completely and thoroughly or you will run into problems!!!
Bug fixes:
- File privilege levels for FREQ:
changed file privilege levels from "(unsigned) word" to "(signed) short"
for file requests. So the "level problems" of XR2 should be history now.
- if incoming call failed (connect and nothing more) and last call before
was e.g. FAX, "last: FAX" was shown. This should be "Inc-Fail" now.
This is also shown at begin of an incoming call as long as the session
state is unknown.
- fixed BTCTL/BTUTIL for use without PrivateNet (point fake net)
- bugfix for all lines creating BBSBATCH.* at the same place.
BBSBATCH.* is now renamed to BBSBATxx.* (xx = Tasknumber in Hex)
- fixed scheduler bug
scheduler was not working correct with events on a specifiy day of
(any) month like with: Event All 00:00,0,1 00:00 F ...
but there are yet bugs left ...
- fixed minor bug in async_os.c ("in" and "out" were swapped in OS call)
- fixed wrong month in ShortCostLog output
- fixed (?) file sharing for IBM C++
- fixed dynamic events - a forced rescan is now done before a dynamic event
can end - to ensure that there is really no more mail to send
- fix for DOS SpawnInit
- EMSI bugfix: if a system sent x:y/z.0 and x:y/z.p EMSI AKA dupe check did
not work correctly (point addr was not compared and so a "false dupe" was
removed from AKA list of remote system).
- made internal FREQ processor OKFILE parsing more "robust"
If you had multiple blanks between filespec and password in your OKFile,
like in
c:\*.* !SECRET
Binkley didn't process this as you intended it to do. Everybody could freq
out of c.\*.* without using a password.
This worked correctly:
c:\*.* !SECRET
Now Binkley doesn't care about AMOUNT of blanks between filespec and password
any more.
This parser part was completely rewritten - be careful and test this !
- versions compiled for different CPUs show CPU type in announce string
- misc. cosmetical fixes
New features:
- BE CAREFUL! Changed [section] statements - see description of [Expression]
- new and powerful cost calculation scheme.
Adapt your Binkley.Evt ("L" flag) and your nodelist compiler setup or
you WILL run into problems !!!
- new keyword "CostCPS" for setting assumed CPS rate for cost calculation
related to L event flag
- new keyword "CostTimeCorrection"
- new Event flag "!=..." for Cost Events
- added '$' as mail status char for mail not matching cost setup (L event flag)
- new format char for ShortCostLog: $r
$r gives "remote's costs" for inbound calls
(like $c gives your own costs for outbound calls)
changed default ShortCostLog format to include remote costs
- added optional size parameter to *.REQ entries:
old *.REQ format new *.REQ format
file1 file1 $12345
file2 file2 $100000
file3 file3 $1000000
... ...
The value after $ is the size of the file to request in bytes.
This is used for cost calculation only, so an approx. value does the job, too.
Size value is optional, if no size is given, 1 is assumed.
In the REQ file transmitted to remote side, size information is filtered out,
of course.
- changed Alt-G dialogue to make input of $size possible
- changed "Tariff:" to show cost index
- new ShortCostLog format character "z" for Cost Index
- shared outbound / scanned outbound data dump
Files related to that:
"BTRESCAN.FLG":
this global flag for all lines works different from BTRESCAN.nn:
each line monitors this flag and if a line notices a change in the
modification timestamp of this file, the line initiates an outbound rescan.
if the file did not exist, but suddenly appears, a rescan is done, too.
if there is no change or the file does not exist, nothing happens.
For users of XenObm: this behaves very similar to XMRESCAN.FLG, so it
should work pretty good now with XenObm regarding rescan flag!
"BTRESCAN.BSY"
this global flag is generated at start of an outbound rescan / reread of
any line and deleted after the line finished rescanning / rereading outbound.
while this flag is present, no other line will begin an outbound rescan/
reread, but a line attempting to begin an outbound rescan / reread while this
flag is already present will "remember" to do the rescan later by creating
BTRESCAN.## for itself.
BTRESCAN.## will be deleted immediately after creation of BTRESCAN.BSY.
This will lower system load (especially in networks and multiline systems)
by avoiding multiple lines rescanning / rereading simultaneously.
- Language.Txt is a mixed language file with English, Startrek and German
language. Lines with English text are prefixed by "E", lines with Startrek
text are prefixed by "S", German is prefixed by "G" and common lines are
prefixed by "*".
- integrated BTCTL and BTLNG into one new tool named BTUTIL.
This saves about 53KB EXE size in total.
- modified BTUTIL to accept mixed multiple-language language source files
BTUTIL LNG key E language.txt english.lng
BTUTIL LNG key S language.txt startrek.lng
BTUTIL LNG key G language.txt german.lng
It is possible to use BTUTIL LNG without "key X" parameter to process old
language files.
- No support for external language file any more as this was a popular problem
source. English is built in, anything other has to be patched in with btutil.
- merged in BTPE 4.00, 4.01 and 4.02 diff of Paul Edwards
- Tom Schlangen / Thomas Waldmann: misc. source fixes and cleanup
- changed date / time display to 96/06/24 Mon 23:59 format
This is neither european nor US format, but simply logical ;-)
- Rudolf Heeb's lookup functions (try Alt-G + sysop name)
- TS: implemented visual progress metering bars
- Added magic check for reading Binkley.Axx dump files. Should help avoiding
crashes with trashed dump files.
- maybe improved recenty activity scrolling performance a bit by aligning each
line on a 4 byte boundary for video modes with a column count that is a
multiple of 4, too (e.g. 80 or 132).
- extended timesync to use EMSI addresses
- hydra chat 8)
- new keyword "NoHydraChat"
- sorted outbound windows (outbound on HPFS drives was already sorted even
without this feature - but FAT users [DOS] will now be happier, too)
- dropped "Hydra1st" keyword (see "ProtocolPreference")
- new keyword "ProtocolPreference"
- TS: DOS only: Fossil announcement
- new keyword "ReadLog"
- MMP: "SpawnNoOK", AfterMail "Quick", "CacheHold" keywords
New "BTFREEZE.xx" flag file.
- new keyword "EMSIbanner" for debugging purposes
if you put this in your Binkley.Cfg, Binkley will send a banner string
(+ Address ... using ...) before sending **EMSI_INQ - this helps with some
remote COM I/O systems which fail within the first few received bytes.
- new commandline verb "Debug" - does the same as "Debug" in config
- added mailstatus character to zoomed outbound view (-*x>$...)
- new keyword "IPC"
- changed janus.c to create JANUSREQ.R%02x in flagdir
- new keyword "TaskPath"
- changed order of config file reading:
old: binkley.scd -> binkley.evt -> binkley.cfg
new: binkley.cfg -> binkley.scd -> binkley.evt
This was necessary for TaskPath to be known before searching binkley.scd/sxx.
- changed "Today at a glance" to show Mail/BBS/Fax calls ("M/B/F") - also
changed alignment and moved it to language.txt
- changed message "File requests declined" to "Remote doesn't allow file
requests now"
- DOS only: makes fossil announcements configurable by using the
language file. this is way better than hardcoding them into
the executable.
the language file is readily prepared to detect and announce
the following fossils:
- ADF (AnDan), BNU, cFos, DrComm, FCI, Opus!Comm, VX00, X00
to add a new/other fossil, do the following:
look in the language file (LANGUAGE.TXT) for a line which
reads like this:
- *LVX00:VX00,X00:X00,BNU:BNU,CFOS:cFos,OPUS:Opus!Comm[,...]
this line is composed of pairs of strings. each pair contains
a search string and an answer string separated by a colon, e.g.:
OPUS:Opus!Comm
where `OPUS' is the string to look for in the internal fossil signature
id string, and `Opus!Comm' is the string that will be output to the
screen and logfiles.
you simply add the new/other fossil search/answer string pair at the
end of the line (preceeded by a `,'), but please mind that:
- the search string has to be in upper case, while the answer
string may be in upper/lower/mixed case,
- search- and answer strings must not contain any of the
characters: ` ' (blank/space), `,' and `:'.
- you have to use a search string which definitely designates a
fossil you look for. therefore the search string `VX00' has
to come before search string `X00', because the other way round
(`X00' first, that is) the answer string for `X00' would be
output for both `X00' _and_ `VX00' ...
- reduced stack space needed for "include", so you can do more "nested"
includes now
- worked HydraCom 1.09d changes into hydra / hydra chat source:
- Alt-C is now used for entering (and exiting) Hydra chat mode.
Clearing "Today at a glance" is done with Alt-D now.
- Hydra protocol now also works with long fnames correctly (OS/2 only).
Long filenames are NOT supported in BT yet except in hydra protocol.
- Modem command character translation "." -> "," removed.
So you can specify commands likw AT+FCLASS=2.0 now without having to "escape"
the dot. You MAY, of course, continue using AT+FCLASS=2\.0 ...
The only translations happening now are:
"|" -> output CR character
"v^" -> lower/raise DTR
"," -> pause 1s
"`" -> pause 0.1s
"-" -> don't output anything
If you don't want them, prefix them by an "escape" character which is: "\".
- RH: Now I_ALIVE is also supported in terminalmode and
in terminalmode as down/upload with Xmodem and Zmodem
- OS/2 only: BT-XE uses an undocumented OS/2 call to set the window title
of its own window to "BT-XE #<TaskNumber>: <Action>" (default).
"Action" is the same as in Maximus' session monitor (if you use MCP).
New keyword "WindowTitleFmt" for setting format string of window titles.
Default is:
WindowTitleFmt BT-XE #%%d: %%s
(you have to specify %% to get the single % as result or BT will crash)
You can use this to set different format, like:
WindowTitleFmt BT-XE #%%d USR V.34: %%s
But don't make the title format too long or it maybe won't function
correctly if it doesn't fit into title area of window.
You can also use WindowTitleFmt with NO format string specified to DISABLE
"set window title" calls:
WindowTitleFmt
- IPC:
"Snoop" defines the Snoop pipe - NOT the MCP pipe (OS/2 only).
"MCPpipe" defines the Maximus MCP pipe (OS/2 only).
"IPC" defines the directory for IPCxx.BBS (all platforms)
You can use ALL now, if you want.
[End of XR3 changes]
Known bugs / limitations / things to be done:
=============================================
- LocalLog is buggy ? Reason unknown yet. DO NOT USE EXCEPT FOR DEBUGGING.
- "CacheHold", "CacheHold 1" and "CacheHold 2" are buggy, outbound disappears
except MainZone after you do an Alt-P <MyAka> in the mailer and reappears
after a rescan on ANOTHER line. DO NOT USE EXCEPT FOR DEBUGGING.
"CacheHold 0" shows NO erroneous behaviour.
- Delete outbound *.REQ at end of SUCCESSFUL session (50% implemented yet).
- if DOS EXE is used without VFOSSIL there is ANSI trash at bottom of screen
and only 23 lines are used. This is maybe nothing new, but should be fixed.
- after Hydra xfers in terminal mode, there are some hydra protocol sequences
trashing the screen. Also not new, but should be fixed.
- DOS version only: under certain (not all) DOS environments, you might get
sharing violation errors. If you have these problems, please send us a
detailed bug report.