Remember these can change at any time and be or not exist on final A37
+ New Python functions for reading Message Bases:
msg_open, msg_seek, msg_found, msg_next, msg_prev, msg_gethdr,
msg_gettxt, msg_close
Rather than try to document them all here I’ve included a “msgread.mpy”
in the default installation as an example of how to use these functions.
This example implments a very basic message reader using the user’s current
message base.
! Mystic will now show “proto.xxx” or “protob.xxx” for batch-only protocols
if they exist instead of generating a list of protocols. PROTO should
contain all protocols, regardless of batch or not. PROTOB should contain
only batch-supported protocols.
! Fixed a bug where Mystic was allowing non-batch protocols to be selected
for a batch file transfer.
! Fixed a bug where the -Y and -N MCI codes were not always working for the
next Yes/No prompt.
+ Changed the format of the “scan” settings data for message and file bases,
this should be total transparent to everyone, except that update.exe needs
to be ran to update the data files.
+ MUTIL has a new “PurgeUserBase” function will which mark users who have
not connected to the BBS in X days for deletion. UKILL function has been
removed from MBBSUTIL. Default mutil.ini has been updated
+ MUTIL has a new “PackUserBase” function which will physically delete user
records, private messages to and from them, their lastread pointers in
message bases, their scan settings in message and file bases. This can
only be executed when there are no users online. Default mutil.ini has
been updated.
! Fixed a bug where MUTIL was not always removing the proper BSY files when
it timed out waiting for a node to finish.
+ New Python function “charxy(x,y)” returns the character and attribute of
the user’s screen at the X/Y coordinate. Example:
ch, attr = charxy(1, 1);
writeln(“attr=” + str(attr));
writeln(“char=” + ch);
+ New Python function getcfg() returns basic configuration options in a
Python dictionary. I am not going to list out dictionaries here as I am
adding to it as people ask for it, but for with any dictionary you can
always iterate through it to see the elements until it lands on the Wiki
import mystic_bbs as bbs;
bbs.writeln(“|CLElements:”)
cfg = bbs.getcfg()
for key, value in cfg.items():
bbs.write (“Key: ” + key.ljust(20));
if isinstance(value, bool):
bbs.writeln(” Value: ” + (value and “True” or “False”));
elif isinstance(value, (int, long)):
bbs.writeln(” Value: ” + str(value))
else:
bbs.writeln(” Value: ” + value)
bbs.writeln(“|PA”)
+ New Python function “getyn(text, default)”. This presents a Yes/No prompt
and returns True if they answer yes, False if they answer no. The
second parameter is the default selection (True is yes, False is no):
if getyn(“Is this an example? “, True):
writeln(“You answered Yes!”)
else:
writeln(“You answered No!”)
+ New Python function “showfile(filename, baud, pause, abort, onlynew)”
This function shows a display file and provides all options specific to
how it is displayed as parameters and returns True or False depending on
if a display file was found and shown.
The filename logic uses the same as the GD menu command (see the Wiki
documentation for GD for more info) which means it has implied paths and
extensions and random display files if desired.
The baud parameter is 0 for full speed or whatever the baud rate at which
Mystic should display the file.
The Pause parameter is a True/False value that when True will attempt to
pause on a full screen.
The Abort parameter is a True/False value that when True will allow the
file to be adorted while display using the space bar.
The OnlyNew parameter is a True/False value that when True will only show
the file if it has been update since the user’s last login to the BBS. Ex:
showfile(“gj-glue1”, 9600, False, True, False)
showfile(“c:\mystic\textfiles\mytext.txt”, 0, True, True, False)
+ New Python command “getprompt(number)” will return prompt (number) from
user’s currently selected theme. If the prompt has been replaced with
a script or display file, Mystic will execute the script or show the
file.
! Fixed an issue where setting scanned bases with the /qwknet option was
not showing anything in the QWK networking menu.
+ New Python command “stuffkey(text)”. This function adds text into the
input buffer as if the user had typed it.
+ New Python command “sysoplog(level, text)” logs a line to the node’s
log using level as the loglevel. Only if the loglevel is set equal to
or greater than <level> will it be shown in the log. Text is a string
of text which will have a datestamp added to it automatically.
sysoplog(1, “Welcome to my Python script!”)
+ New Python command “access(acsstring)” returns True or False if the user
passes (has access) to the supplied <acsstring>:
if access(“s20”):
writeln(“User has a security level of 20 or higher!”)
else:
writeln(“User has less than 20 security.”)
+ New Python command “rwrite(text)” writes text to the user with no line
ending and no MCI or color code processing.
rwrite(“You |12will actually see the color code here”);
+ New Python command “rwriteln(text)” writes text to the user with no MCI
or color code processing, and moves to the next line after sending:
rwriteln(“Line one”)
rwriteln(“Line two”)
+ New Python function “upuser(seclevel)”. Updates the current user’s security
profile to <seclevel>, which includes access flags, time left, daily
limits, etc. Ex: upuser(50)
+ New Python function “wherex” returns the current X location of the cursor
+ New Python function “wherey” returns the current X location of the cursor
+ New Python function “textattr” returns the current text color attribute
+ New Python function “textcolor(attribute)” sets the current text color
to <attribute> where attribute is calculated as (FG + BG) * 16 so white
on a blue background would be 15 + 1 * 16 (or 31).
+ New Python function “getmgroup(number)” returns a dictionary of the message
group at record number <number>.
+ New Python function “getmgroupid(number)” returns a dictionary of the
message group with the ID of <number>.
+ New Python function “getfgroup(number)” returns a dictionary of the file
group at record number <number>.
+ New Python function “getfgroupid(number)” returns a dictionary of the
file group with the ID of <number>.
+ New Python function “getfbase(number)” returns a dictionary of the file
base located at record number <number>
+ New Python function “getfbaseid(number)” returns a dictionary of the file
base with the ID of <number>
+ MUTIL’s MergeNodeList should no longer care about the casing of the file
archives or the nodelists within those archives. In otherwords, its now
case insensitive even on case sensitive OSes.
+ Mystic BBS now has a built in text editor which will be expanded on as
development continues. Like all of Mystic’s functions this is designed to
work over any terminal connection and will be a work in progress.
+ Small revamp of the System configuration to add a “Networking” category
as the Configuration column is getting cluttered and will be moreso as I
add in several new options that are planned.
+ Configuration now allows many of Mystic’s text-based control files to be
edited within the configuration using the new text editor.
! Message and File group editors were not assigning a new Unique ID to the
group when pasting.
! Fixed a bug during graphics detection in Linux where Mystic would still
show ANSI codes until after the graphics prompt was displayed.
+ New Python function “mci2str(code)”. This function returns the value of
an MCI code, where code is the two digit MCI code. For example:
writeln(“User: ” + mci2str(“UH”));
+ New Python procedure “gotoxy(x,y)”. This locates the cursor to the X
and Y position if the user has ANSI graphics. If you supply a 0 for
either value it will be replaced by the current cursor position.
+ When snap_new is enabled in the Index message reader, Mystic will now snap
to a base with new messages after a CTRL+U.
+ Renamed the configuration themes to “3D ANSI” and “Shareware BBS” and
updated the cfgroot1.ans file in DATA slightly. If you want to have the
Shareware BBS theme look as its intended, replace your old cfgroot1.ans
with the updated one from a fresh installation.
+ Pre-alpha versions of Mystic are now compiled with full debugging
information. Binaries will create a <program name>.mem file in the
directory where it exists which could help debugging if a crash occurs.
As a result of this change, the size of the binary files will be huge in
comparison up to around 10 times the normal size. Alphas will still be
compiled in “release” form.
+ MYSTIC.DAT and USERS.DAT are no longer linked together, so if they are
separated the user number generator will not generate bogus numbers. The
downside is it will take longer to save a new user account.
+ MUTIL now has a function to sort files in file bases [FileSort] replacing
the similar function in MBBSUTIL. See the default mutil.ini for more
sort options. The sort only works for bases that contain up to 250,000
files but this can be easily expanded if anyone ever hit that limit.
+ MBBSUTIL has been removed from Mystic BBS and should be deleted.
+ Mystic’s text editor is now available in the System Configuration in the
Other section and will allow loading and editing of any text file. Keep
in mind that it has some limitations. Raw tabs will be converted to 8
spaces, character 12 will be escaped and represented as ^L while character
27 will be escaped as ^[. Any occurance of these will be converted back
upon saving, with the exception of raw tabs which will remain as spaces.
+ New command line option for mystic: -text <filename> while open the text
editor from the command line. If <filename> is supplied it will open that
file otherwise it will create an empty buffer. IE:
mystic -text mytext.txt
+ All SysOp menu commands (that begin with a *) now have an optional data
parameter “/nopw” which will tell Mystic not to ask for the SysOp password
prior to executing the command.
+ EchoMail Node editor now uses a paged style form similar to the user editor
instead of opening up various boxes.
+ New Menu command: *1 Edit text file. This command’s optional data should
include a filename in which to edit. If the file does not exist by default
the editor will not execute. The user cannot open any other text files
unless the “/open” parameter is supplied. If /open is passed then Mystic
will start with an empty buffer if a filename is not given (or doesn’t
exist) and the user will be allowed to open any file on your drive as well
! Color editor and access flag editor were not using the configuration theme
and instead were always using 3D ANSI. This has been fixed.
+ Use Passive mode is now defaulted to Yes when creating new QWK Network and
FTN BY FTN client.
+ Added two new Configuration themes: Mono Pink and Mono Blue. You’ll need
to copy cfgroot2.and and cfgroot3.ans to your DATA directory from the DATA
directory of a new installation.
+ New command line option for mystic: -ansi <filename> while open the ANSI
editor from the command line. If <filename> is supplied it will open that
file otherwise it will create an empty buffer. IE:
mystic -ansi text\gj-glue1.ans
The ANSI editor can load display files with color codes from PCBoard,
Wildcat, Mystic’s pipe codes, and ANSI. The editor can save in ASCII or
Pipe Code or ANSI and includes variable line length saving for ANSI files
as well as some display options that can be set specifically to Mystic
BBS.
+ Mystic’s System Configuration > Other tab now has an “Text Editor” option
which will open up the Text editor.
+ Mystic’s System Configuration > Other tab now has an “ANSI Editor” option
which will open up the ANSI editor
+ Mystic’s Theme Editor now has a function for “Templates” which will open
up a listing of all .ini files in that theme’s text directory. When one
of those files is selected, Mystic will open its text editor.
+ Mystic’s Theme Editor now has a function for “Display Files” which will
open up a listing of all .a?? files in that theme’s text directory. When
one is selected, Mystic will open its ANSI editor.
+ New Menu command: *2 Edit ANSI file. This command’s optional data should
include a filename in which to edit. If the file does not exist by default
the editor will not execute. The user cannot open any other ANSI files
unless the “/open” parameter is supplied. If /open is passed then Mystic
will start with an empty buffer if a filename is not given (or doesn’t
exist) and the user will be allowed to open any file on your drive as well
+ The beginning of Echomail node security is here! The easiest way to think
about how this system works is to relate an Echomail node to the way
security works for a user in your BBS. Each node will have a security
level, access flags, and can be a member of many Echomail groups (up to
65000 echomail groups can be defined).
Different functions throughout the echomail system will eventually have
“Echo ACS” strings which work just like the user ACS strings that we’re
familiar with. For example, you might have “Hatch File EACS” in a file base
where you could say that you wanted only echomail nodes within a particular
group to be able to hatch files, or a particular security level or access
flag(s), or even by static echomail node ID. For example:
Hatch File EACS: g2|s255|fH|u10
The above would say that any echomail node that is a member of Echomail
group 2, OR any node that has a security level of 255 OR any Echomail node
that has flag H can hatch files to that file base. The Echomail node
with the ID of #10 can also hatch.
This is a very powerful system for managing an Echomail network, and EACS
strings will be added to various functions in the future as seen fit.
+ New Python command: msg_delete(handle). This deletes the current message
as returned by msg_first or msg_next
+ Echomail Node editor will now check for any other active nodes with the
same configured adddressed whenever it saves an echomail node. If it finds
a conflict it will pop up a message warning you of the conflict.