Introducing WML and WMLScript: WMLScript Crash Course | WebReference

Introducing WML and WMLScript: WMLScript Crash Course


Introducing WML and WMLScript

A Crash Course in WMLScript

You have already seen how to call WMLScript functions from a WML deck: WMLScript file name, followed by the # character and then the function name. The two calls are:

currency.wmls#convert()

and

currency.wmls#getInfoDate()

These functions are defined in the file currency.wmls. The getInfoDate() function is defined as follows:

extern function getInfoDate(varName) {
	WMLBrowser.setVar(varName,"October 29 1998");
	WMLBrowser.refresh();
}

Comparing to JavaScript, you can immediately notice several differences. First, the heavy usage of libraries, WMLBrowser in this case. To speed up the data transfer, WMLScript libraries are pre-compiled and loaded to the user agent's memory, providing a quick access to the WMLScript script. Secondly, the call by address is not supported by JavaScript. The argument varName is set inside the function and communicated back to the caller card, card1_help. JavaScript, on the other hand supports call-by-value only, i.e. functions can read parameter values from their caller, but cannot change these values in the caller's scope.

The main function is convert(). It converts amount number from one currency type to the other. The types are specified by the from and to arguments. The first argument is varName. It is assigned a variable name in the caller WML card:

currency.wmls#convert('conversion','$(from)','$(to)',$(amount))

As in the previous function, the convert() function ends with setting the caller's conversion variable and refreshing the caller card:

WMLBrowser.setVar(varName,returnString);
WMLBrowser.refresh();

The rest of the function's code looks like a normal JavaScript. Here is the function listing in full:

extern function convert(varName,from,to,amount) {
	var multiplier = 0.0;
	var returnString = "Not Available";
	var result;
	if (from == "DEM") {
		/* 
		 * German Mark 
		 */
		var DEM_FIM = 0.328728;
		var DEM_FRF = 0.298331;
		var DEM_USD = 1.653500;
		if (to == "DEM")
			multiplier = 1.0;
		else if (to == "FIM")
			multiplier = DEM_FIM;
		else if (to == "FRF")
			multiplier = DEM_FRF;
		else if (to == "USD")
			multiplier = DEM_USD;
	} else if (from == "FIM") {
		/*
		 * Finnish Markka
		 */
		var FIM_DEM = 3.042032;
		var FIM_FRF = 0.907533;
		var FIM_USD = 5.030000;
		if (to == "FIM")
			multiplier = 1.0;
		else if (to == "DEM")
			multiplier = FIM_DEM;
		else if (to == "FRF")
			multiplier = FIM_FRF;
		else if (to == "USD")
			multiplier = FIM_USD;
	} else if (from == "FRF") {
	/*
	 * French Franc
	 */
		var FRF_DEM = 3.351981;
		var FRF_FIM = 1.101889;
		var FRF_USD = 5.542500;
		if (to == "FRF")
			multiplier = 1.0;
		else if (to == "FIM")
			multiplier = FRF_FIM;
		else if (to == "DEM")
			multiplier = FRF_DEM;
		else if (to == "USD")
			multiplier = FRF_USD;
	} else if (from == "USD") {
		/*
		 * US Dollar
		 */
		var USD_DEM = 0.604778;
		var USD_FIM = 0.198807;
		var USD_FRF = 0.180424;
		if (to == "USD")
			multiplier = 1.0;
		else if (to == "FIM")
			multiplier = USD_FIM;
		else if (to == "FRF")
			multiplier = USD_FRF;
		else if (to == "DEM")
			multiplier = USD_DEM;
	} 
	if (multiplier != 0.0) {
		/*
		 * Make the calcualtion
		 */
		 result = amount / multiplier;
		 returnString = String.toString(result);
		 returnString = String.format("%.2f", returnString);
	}
 	
	/*
	 * Return the results to the browser
	 */
	WMLBrowser.setVar(varName,returnString);
	WMLBrowser.refresh();
}

Next: The WML Deck

http://www.internet.com

Produced by Yehuda Shiran and Tomer Shiran

Created: May 8, 2000
Revised: May 8, 2000

URL: http://www.webreference.com/js/column61/7.html