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:

		&[ <varname>[:encoding] ]

		Where encoding is one of the following:

			entities				Functionally the same as encodeentities()
			attribute				Functionally the same as encodeattribute()

		i.e.:

			&[ g.FormField:entities ]

	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.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