|
Miva Mia v3.63 Changelog
Changes in Miva Mia v3.63
-------------------------
1. Fixed several security flaws:
/..../ no longer allows scripts outside the configured script directory
to be run.
Special windows filenames (AUX, CON, PRN, etc...) are no longer allowed.
Trailing .'s (i.e. test.mv..) no longer cause the source code of a script
to be displayed.
2. EIN/ECIN now return 0 when their left operand is NULL. This fixes backwards
compatibility with Miva v3.57 and earlier and Htmlscript.
3. Fixed a bug which caused the Htmlscript operator SUBSTR to crash if one of
the two numbers was omitted from the right operand (i.e. "Xyz" SUBSTR ",1").
Changes in Miva Mia v3.62
-------------------------
1. Fixed a bug in the processing of multipart/form-data POSTed data which
would sometimes cause garbage to be placed in fields.
Changes in Miva Mia v3.61
-------------------------
1. The MvCOMMERCE tag now uses dynamically loaded commerce libraries.
These libraries may be configured via the Commerce tab.
2. A new option for the STANDARDOUTPUTLEVEL attribute of the MIVA tag
has been added: compresswhitespace, when enabled, will cause the
Miva Engine to eliminate extra whitespace in the output of Miva scripts.
3. The ACTION and FIELDS attributes of the MvCOMMERCE tag are no longer
required by default (some commerce libraries may still require them).
4. The METAMETHOD attribute of the MvCOMMERCE tag has been deprecated in
favor of METHOD.
5. Fixed a bug which caused NULL left operands to the IN/CIN/EIN/ECIN to
return 0. They now return 1, which was the previous behavior.
6. Fixed a bug which prevented deleting open files. The new behavior is
more consistent with the behavior of Miva under UNIX.
7. New builtin functions have been added for package management. Note that
under Miva Mia, these functions are not functional, and are merely
present for compatibility with the UNIX and NT versions:
miva_package_list
miva_package_name( code )
miva_package_description( code )
miva_package_version( code )
miva_package_defaultpath( code )
miva_package_extract( code, directory, license )
8. Fixed a bug which caused STANDARDOUTPUTLEVEL and/or ERROROUTPUTLEVEL not
to be restored upon returning from a function call that changed the value(s),
if the values had not been changed from the defaults by the caller of the
function.
Changes in Miva Mia v3.57
-------------------------
1. Fixed a bug which prevented the sdelete() builtin function
from working.
2. Fixed a bug in MvCALL which prevented text which immediately
preceded EOF from being processed correctly.
Changes in Miva Mia v3.56
-------------------------
1. Fixed a bug in MvCALL that prevented fields from being passed
when the METHOD attribute was GET.
Changes in Miva Mia v3.55
-------------------------
1. Fixed a bug in the handling of multipart/form-data that could cause
data corruption and deadlocks.
2. Fixed a bug in MvCALL regarding the handling of slashes in the middle
of an unquoted attribute value.
3. Fixed a bug in MvCALL regarding the handling of attributes with empty
values.
4. Fixed a bug in MvCALL regarding the handling of slashes at the ends
of tags (ie <TAG NAME="VALUE"/>).
5. Fixed a bug which would cause Miva to go into an infinite loop if the
builtin function glosub was called with a NULL search parameter.
6. Changed the wording of the error message displayed when attempting to
access an unopened database to be grammatically correct.
Changes in Miva Mia v3.54
-------------------------
1. Modified the handling of temporary files to prevent a potential race
condition.
Changes in Miva Mia v3.52
-------------------------
1. Fixed a bug which caused the miva_getvarlist builtin function to return
all system variables twice.
Changes in Miva Mia v3.51
-------------------------
1. CyberCash results which return multiple results (query, etc..) now
have their results sorted properly.
2. tagname_Error attributes to the MIVA tag are no longer case-sensitive.
Changes in Miva Mia v3.50
-------------------------
1. Fixed a bug which caused the recno database variable to be clobbered
by an <MvIMPORT> loop.
2. Fixed a bug which caused Miva to enter an infinite loop when reading
some xBase memo files.
3. Fixed a bug which caused an MvDELETE or MvUNDELETE to update the current
database record, which made indexes get out of sync, and caused "Record
not in index" errors.
4. Added support for the CyberCash Cash Register API.
5. Added support for HTTP file upload.
6. Variable names posted from an HTML FORM or passed on the URL
command line are no longer checked for invalid characters. If
a variable name contains a character that may not be used in an
expression (i.e. -, +, *, %, etc..) it can be escaped by prepending
a backslash.
7. Added builtin functions to manipulate files in the script directory.
The following functions are functional equivalents the "f" functions,
except that they manipulate files in the script directory:
sexists( path )
smkdir( path )
sdelete( path )
scopy( source, dest )
srename( source, dest )
schmod( path, mode )
ssize( path )
smode( path )
The following functions transfer files from the script directory
to the data directory (functions starting in "sf") or from the
data directory to the script directory (functions starting in "fs"):
fscopy( source, dest )
sfcopy( source, dest )
fsrename( source, dest )
sfrename( source, dest )
8. Two new system variables have been added to allow scripts to deal with
globaltimeout:
globaltimeout Contains the maximum number of seconds that the
current script may execute
dyn_time_remaining Contains the number of seconds that may elapse
before the current script is terminated
9. The following builtin functions have been added:
isalpha( string )
isupper( string )
islower( string )
isdigit( string )
isxdigit( string )
isalnum( string )
isspace( string )
ispunct( string )
isprint( string )
isgraph( string )
iscntrl( string )
isascii( string )
10. The following builtin functions have been added:
abs( number )
acos( number )
asin( number )
atan( number )
atan2( x, y )
ceil( number )
cos( number )
cosh( number )
exp( number )
floor( number )
fmod( x, y )
int( number )
log( number )
log10( number )
sin( number )
sinh( number )
sqrt( number )
tan( number )
tanh( number )
11. Two new system variables have been added:
tm_usec
dyn_tm_usec
The variables contain the current microsecond relative to tm_sec/
dyn_tm_sec. Note that under Windows, the operating system only
allows Miva to receive this value in 50-0 increments.
12. A new builtin function, miva_getvarlist, has been added.
miva_getvarlist( scope )
Returns a comma separated list of variables in the specified scope
13. Runtime errors may now be controlled on a per-tag basis.
<MIVA tagname_Error = "fatal/nonfatal, display/nodisplay">
For example:
<MIVA MvOPEN_Error = "fatal, display">
Would cause all runtime errors generated by MvOPEN to be
fatal (script execution stops) and displayed (Miva outputs
the error message).
<MIVA MvOPEN_Error = "nonfatal, nodisplay">
Would cause all runtime errors generated by MvOPEN to be
non-fatal (script execution continues) and not to be
displayed by Miva.
Changes in Miva Mia v3.22
-------------------------
1. Fixed a bug which prevented MvPOP from loading the system variables
describing an e-mail message.
2. Fixed a bug which caused MvPACK to fail when packing databases contained
in a sub-directory on some platforms.
3. Changed the handling of large number comparisons. Miva should now handle
very large numbers correctly.
4. Strings consisting solely of spaces are now NOT EQUAL to NULL. Previous
versions of Miva (and Htmlscript) considered them equal.
5. Fixed a bug which caused MvHIDE to change the case of variable names.
Changes in Miva Mia v3.21
-------------------------
1. Fixed a bug which caused Miva Mia to crash when MvEXIT was
used inside a function.
2. Fixed a bug which caused Miva Mia to lock up while two scripts
were updating database files simultaneously.
Changes in Miva Mia v3.2
------------------------
1. MvDO has been changed to always function relative to the *current*
running script, rather than relative to the *initial* script.
2. MvLOCKFILE has been altered to improve its utility. MvLOCKFILE
now creates and locks a "semaphore" file named <filename>.lck,
where <filename> is the value of the FILE parameter passed
to MvLOCKFILE. This allows you to lock dBase databases and flat
files, and use them while they are locked.
Changes in Miva Mia v1.20 Beta 3
--------------------------------
1. Fixed a bug which caused MvEXIT within a function called via MvDO to crash.
2. Changed MvDO to function relative to the directory of the "master" script
file.
3. Fixed a crash which occurred when a filter is set inside a file called
with MvDO.
4. Changed dBase MEMO fields to be loaded only when they are referenced.
5. EncodeAttribute() no longer encodes underscores.
6. Added the "string" FLAG for dBase indexes to force string comparisons
in the case of large numeric strings.
7. Fixed several memory overwrites in the SCMP processing code.
8. Fixed a bug which would cause spurious syntax errors when an index
expression or MvDO function call contained parenthesis or commas
inside a quoted string.
9. Fixed a bug which caused the EOF flag to be reset when skipping 0
rows.
10. Fixed a bug in the UPSOnLine Cost Calculation which prevented
sending values with spaces.
11. dBase NUMBER fields now truncate numbers to the specified number
of decimal places.
12. Fixed a bug which caused MvSKIP operations immediately following
an MvUPDATE to occasionally go to the wrong row.
13. Indexes are now updated ONLY if the index key value has changed.
14. Fixed a bug which caused MvSKIP after MvPRIMARY to position to the
wrong row.
15. Fixed a bug which caused pages to display incorrectly in v3.X browsers
and Opera.
16. Fixed a crash which occurred when dBase files with version tags
other than 0x83 contain memo fields.
17. A new tag, MvLOCKFILE, has been added:
<MvLOCKFILE FILE = "filename">
...
</MvLOCKFILE>
MvLOCKFILE exclusively locks a file. Please note that it SHOULD NOT
be used to lock an in-use dBase file, as this will cause a deadly
embrace. Instead, you should create a semaphore file and lock it.
i.e.:
<MvLOCKFILE FILE = "database.lck">
<MvPACK NAME = "database">
</MvLOCKFILE>
18. The output of macros may now be optionally encoded:
]
Where encoding is one of the following:
entities Functionally the same as encodeentities()
attribute Functionally the same as encodeattribute()
i.e.:
19. Fixed a bug which caused a dBase memo file to be incorrectly updated while
at EOF.
20. A new function, gettoken() has been added:
gettoken() allows quick parsing of strings, ala the C function strtok:
gettoken( string, separators, position )
string The source string
separators A string containing the single character separators
position The token to retrieve
gettoken() returns the specified token, or NULL if the token could not be found.
i.e.:
<MvASSIGN NAME = "l.pos" VALUE = 1>
<MvASSIGN NAME = "l.string" VALUE = "1,2,3,4,5">
<MvASSIGN NAME = "l.token" VALUE = "{ gettoken( l.string, ',', l.pos ) }">
<MvWHILE EXPR = "{ l.token }">
<MvEVAL EXPR = "{ l.token }">
<MvASSIGN NAME = "l.pos" VALUE = "{ l.pos + 1 }">
<MvASSIGN NAME = "l.token" VALUE = "{ gettoken( l.string, ',', l.pos ) }">
</MvWHILE>
21. Fixed a bug which prevented storing negative numbers into dBase NUMBER fields.
22. Fixed bugs in rtrim and ltrim which prevented them from correctly removing newlines.
23. Added STANDARDOUTPUTLEVEL and ERROROUTPUTLEVEL attributes to MvFUNCTION:
STANDARDOUTPUTLEVEL and ERROROUTPUTLEVEL may now be specified for a function.
If specified, they override the previous settings until the function returns.
i.e:
<MvFUNCTION NAME = "Test" STANDARDOUTPUTLEVEL = "">
... Some large looping operation ...
</MvFUNCTION>
Changes in Miva Mia v1.20 Beta 2
--------------------------------
New Features
- GET support
Miva now supports name/value pairs as part of the URL. This
allows Miva to process HTML FORMs submitted using a METHOD of
GET. In addition, it makes parsing the s.argN variables a
thing of the past.
A global variable is created for each variable passed in the
URL. For example, the URL:
http://www.somesite.com/test.mv?VarA=This+is+a+test&VarB=123
would create two global variables:
VarA = This is a test
VarB = 123
If a variable is specified without a value, it will be created
with its value equal to the name of the variable.
- UPS OnLine Cost Calculation
MvCOMMERCE now supports a METAMETHOD of UPSCost. This allows
you to do *online* calculation of UPS shipping charges using
UPS' CGI gateway.
Syntax:
<MvCOMMERCE ACTION = "http://www.ups.com/using/services/rave/qcostcgi.cgi"
METAMETHOD = "UPSCost"
FIELDS = "...">
</MvCOMMERCE>
The value of the FIELDS attribute is dependent on the request, and
is beyond the scope of this document. You can see ups.mv for
a partial list, or download the complete documentation from
UPS' web site.
Depending on the services requested, MvCOMMERCE will iterate
once or multiple times. Iteration may be stopped by using
MvCOMMERCESTOP.
While inside the MvCOMMERCE block, the following variables are
available:
errmsg Description of error, or NULL if no
error occurred.
errorcode Numeric code of error, or NULL if no
error occurred.
message Informational message
product UPS product code
orig_postal Shipment source postal code
orig_country Shipment source country code
dest_postal Shipment destination postal code
dest_country Shipment destination country code
zone UPS shipping zone
weight Shipment weight
productchrg Shipment charge, minus any accessory or
surcharges
accs_surcharg Shipment accessory or surcharges
totalchrg Total cost of shipment
time Commit time, or -1 if EOD
- dBase III Memo Fields
dBase III memo fields are now supported.
Syntax:
<MvCREATE NAME = "database"
DATABASE = "database.dbf"
FIELDS = "memofield MEMO">
Memo field data is stored in a separate file. The memo file
has the same name as the database file, but with the extension
.DBT. The memo file is automatically created/opened by Miva.
Due to the structure of the dBase III memo file, all updates are
done by simply appending the new data to the end of the file.
To prevent the memo files from growing out of control, Miva only
updates the memo file when a field is considered "dirty." A
field is flagged as dirty whenever a value is assigned to it,
even if that value is the same as the previous value of the field.
- MvFILTER
A new tag, MvFILTER, has been added. MvFILTER provides a fast,
easy way to do sequential searches through a dBase database.
Syntax:
<MvFILTER NAME = "database"
FILTER = "{ filter expression }">
After specifying a filter, only fields which match the filter
will be "visible."
The variables totrec and recno will still refer to the total
number of records in the database and the absolute record
number.
When using MvFIND with a filter, the first record which matches
both the value being searched for and the filter will be found.
- MvDO
A new tag, MvDO, has been added. MvDO provides an easy way
to include HTML and/or Miva code from supplemental script
files.
Syntax:
<MvDO FILE = "file.mv"
NAME = "variable"
VALUE = "{ expression }">
If the NAME and VALUE attributes are specified, Miva will
evaluate the expression in VALUE and store the result into
NAME (this would be used, for example, to call a function
in the file specified by FILE).
If NAME/VALUE are not specified, Miva will simply begin
executing the file specified by FILE from the top, and
will merge the output of the supplemental file with the
output of the primary file.
- encodeentities/decodeentities
Two new builtin functions are provided to encode and decode
HTML entities (ie >, <, etc..).
Syntax:
<MvASSIGN NAME = "encoded" VALUE = "{ encodeentities( value ) }">
<MvASSIGN NAME = "decoded" VALUE = "{ decodeentities( value ) }">
- makesessionid/Cookies
Cookies have been revamped again. The htscallerid cookie now
expires one year after being set, and has been lengthened to
128 bits to aid uniqueness.
In addition, a builtin function, makesessionid, has been
provided to generate a 128 bit unique id.
Syntax:
<MvASSIGN NAME = "sessionid" VALUE = "{ makesessionid() }">
- CyberSource SCMP
This build of Miva Mia supports CyberSource SCMP commerce
processing. For full documentation on the Miva/CyberSource
integration, see http://www.htmlscript.com/cybersource
Bug Fixes
Fixed a bug which caused the process_id variable to be negative.
Fixed a bug which caused empty dBase CHAR fields to show up as
a single space instead of NULL.
Fixed several crashes caused by using MvPACK while a filter was
in use.
Fixed a bug which caused records added when the current record is
marked as deleted to be added as deleted.
Fixed a bug which prevented removing a filter once one had been
specified. To remove the filter, simply use MvFILTER with no
FILTER attribute specified.
Fixed isalpha. It was behaving as if it were isnumber.
Changes in Miva Mia v1.12
-------------------------
This is the first non-beta release of Miva Mia. We at Htmlscript Corporation
would like to thank all the users who aided us in the beta program.
Added browse buttons for the paths in the WWW tab.
Changed the network-related tags not to attempt a DNS lookup when an IP
address was specified.
Changed Miva Mia not to attempt to open non-Miva documents in exclusive mode.
This fixes occasional "File Not Found" errors.
Added the process_id system variable.
Fixed the right mouse button menu so it would go away if ESC was pressed
or the mouse was clicked outside the menu.
Fixed a bug which caused the fsize builtin function to always return -1.
Fixed <MvIMPORT> so it wouldn't strip whitespace from the beginning or end
of imported data fields (ala Htmlscript 2.x).
Fixed "Unable to Lock" error messages when attempting to update a database
from multiple concurrent processes.
Fixed multiple crashes related to ODBC support.
Changes in Miva Mia Beta 3
--------------------------
**************** ODBC Support ****************
Miva Mia Beta 3 contains preliminary ODBC support. This
support is accomplished through the addition of three tags and
modification of other existing database tags.
v1.1138 of the Miva Engine introduces a new paradigm for database
access: the VIEW. The following tags have been modified to
allow the optional VIEW attribute:
<MvSKIP>
<MvGO>
<MvPRIMARY>
<MvFIND>
<MvSETINDEX>
<MvUPDATE>
<MvDELETE>
<MvUNDELETE>
<MvADD>
<MvREVEALSTRUCTURE>
Currently, only <MvSKIP> and <MvGO> are supported for ODBC.
To connect to an ODBC datasource, use the following syntax:
<MvOPEN NAME = "name"
TYPE = "odbc"
DATABASE = "DSN=<odbc datasource>;UID=<userid>;PWD=<password>">
The value for the DATABASE attribute is an ODBC connection string.
As an example:
DSN=Sample;UID=dba;PWD=sql
Would connect to ODBC Datasource "Sample," using the user id "dba"
and the password "sql." Some ODBC drivers may allow or require
additional values.
To run an SQL statement that does NOT return any results, such
as an update, delete, or insert, use <MvQUERY>:
<MvQUERY NAME = "name" QUERY = "sql statement">
For example:
<MvQUERY NAME = "name" QUERY = "create table Sample ( Sample_ID integer,
Sample_Name char( 100 ) )">
SQL statements that return results are handled via the new VIEW
paradigm. To open a view, use <MvOPENVIEW>:
<MvOPENVIEW NAME = "name" VIEW = "viewname" QUERY = "sqlquery">
For example:
<MvOPENVIEW NAME = "name" VIEW = "viewname" QUERY = "select * from Sample">
Once you have opened a view, you may use the familiar <MvSKIP> and <MvGO>
tags to navigate through the result set.
For example:
<MvSKIP NAME = "name" VIEW = "viewname" ROWS = 1>
or
<MvGO NAME = "name" VIEW = "viewname" ROW = "top">
The variable EOF will indicate if you have hit the end of the recordset, and
recno will indicate your current position in the recordset. totrec, available
for xBase databases, is not currently supported with ODBC.
When you are done with a view, close it using <MvCLOSEVIEW>:
<MvCLOSEVIEW NAME = "name" VIEW = "view">
**********************************************
Scope specifiers were changed to be non case-sensitive.
Fixed a bug which caused Miva Mia to crash if nested old-style <IMPORT>
tags were used.
Fixed a bug in the expression analyzer dealing with multiple operators
joined by and/or in a single set of parenthesis.
Fixed a bug which caused index operations with numbers longer than
12 digits to fail.
Fixed a bug which caused Miva Mia to crash if a single variable containing
more than 8192 bytes was output.
Fixed several bugs dealing with function calls in index expressions.
Fixed a bug which caused "mismatched parenthesis" errors when an expression
containing parenthesis was used as a parameter to a function.
Fixed a bug which caused Miva Mia to crash if a forward-referenced function
with no parameters was called.
Fixed a bug which caused Miva Mia to crash on return from a function that
ended in a non-terminated IF which evaluated to false.
Fixed a bug which sometimes caused date fields in dBase databases to
be corrupted.
Fixed a bug which would sometimes cause floating point operations to
truncate at the 15th decimal place, causing strange results for
multiplication and division.
Added a check for multiple functions declared with the same name.
Added a check to prevent two databases to be opened with the same
value for the NAME attribute.
A new builtin function, padl, has been added.
padl( string, length, pad_character )
Will pad "string" to length characters long, using pad_character.
Pad characters are added to the beginning of the string.
A new builtin function, padr, has been added.
padr( string, length, pad_character )
Will pad "string" to length characters long, using pad_character.
Pad characters are added to the end of the string.
A new builtin function, glosub, has been added.
glosub( string, search, replace )
Will globally search for "search" in string and replace it with
"replace."
Fixed the server_port system variable.
Reorganized the control screens so they would fit on a 640x480 screen.
Added a check to the "Show Home Page" button and "blue links" to
display an error message if unable to launch the browser.
Changed the "Port in Use" dialog to recommend ports above 8000.
Added datafile and script security similar to the functionality of
Miva under UNIX.
Changes in Miva Mia Beta 2
--------------------------
A new option on the WWW tab, "Do DNS Lookups," has been added.
Turning off DNS lookups may improve performance while online
(Miva Mia does not have to establish a connection to the ISP's DNS
server for every connection), and may solve some mysterious "lockups,"
which were actually attempted connections to an unavailable DNS
server.
Fixed a bug with handling multiple simultaneous connections.
This bug showed up most frequently under Netscape Navigator as
pages failing to load completely, or the browser "locking up."
Fixed cookies.
Fixed truncation of the new _year, _month, and _day database date variable names.
This bug prevented use of the new variables if the name of a date field
in an xBase database was longer than 4 characters.
Added a new variable, <fieldname>_raw, for database date fields.
This variable provides the "raw" data, as it is stored in the database file.
The format is "YYYYMMDD"
Added special handling for "Address already in use" errors.
One of the most common problems people had with Beta 1 was installation
alongside another WWW server. A new dialog now informs the user that
another WWW server is running and allows the port to be changed.
Fixed GlobalTimeout handling.
Fixed a bug which caused the Tabs in the control panel not to change occasionally.
A new tab, "Information," was added.
This tab provides links to useful WWW pages, and version, license, and contact
information.
Fixed a bug in the Sitevars processor which caused an extra carriage return to be
appended to every variable.
Changes in Miva Mia Beta 1
--------------------------
This was the first public release of Miva Mia
|