Preview Release (see note)
July 13, 1998
Contents
Data Types
Data Structures
Keywords
Comments
Operators and Precedence
Escaping Special Characters
Statements
Functions
Now
Mobile Channels Scripting Object
Channel Browser and Active Desktop HTML Extensions
Example CDF File
Parse Tree of the Example CDF File
The Mobile Channels scripting model is based on Active Server Pages (ASP), as defined in the Internet Information Server (IIS). ASP code is written in Visual Basic Script (VBScript). In Mobile Channels, both ASP and VBScript are scaled down to fit the constraints of Windows CE-based devices. The streamlined ASP is also referred to as pocket ASP (pASP). Together, pASP and VBScript are referred to as the Mobile Channels scripting environment. The discussions presented here focus on the differences between pASP/VBScript for Mobile Channels and ASP/VBScript for Active Channels.
There are three legal data types for Mobile Channels scripting: STRING, NUMERIC, and BOOLEAN. However, only STRING is supported internally. The other two are derived from STRING. String literals may be specified using the double quote character (") to bracket the expression. Numeric strings may be specified without quotes. Numbers must be integers with values between -32,768 and 32,767. Boolean expressions evaluate to 1 for TRUE and 0 for FALSE. They may not be assigned to TRUE or FALSE, as in Visual Basic.
The data types and their values are described in the following table.
Data Type | Value | Description |
---|---|---|
STRING | "Example string literal" | As the string is expressed as itself rather than a variable value or the result of an equation, the result evaluates to "Example string literal." |
NUMERIC | Result=3+4 |
The result evaluates to 7. But Result is stored as a string value. |
BOOLEAN | (a) 3 = 3, (b) 3 = 5 |
(a) evaluates to 1 and (b) to 0. |
Data structures supported by Mobile Channels are described in the following table.
Data structure | Description |
---|---|
Variable | Elemental data structure of the simple data types. Variable names are alphanumeric and must start with an alphabetical character. The underscore character can be used, but not as the leading character. Variable names should be short to conserve memory and cannot be longer than 255 characters. |
Array | An ordered collection with numeric keys. The index counts from zero (0). For example: Result = a(0)+a(1). The method, Array.Count, returns the total number of elements in the array. |
The following keywords are reserved and may not be used as variable names:
Comments are started with the single quote (') and may appear anywhere on a line. The VBScript REM keyword for comments is not supported for Mobile Channels scripting. The following code example shows a Mobile Channels comment.
' This is an example comment.
Expressions are evaluated according to operator precedence. Operators of higher precedence — 1 being the highest — are evaluated first. Operators of the same level are evaluated from left to right. Precedence may be overridden using parentheses, which can be nested. The inner most parenthesis is evaluated first. Operators, types, and precedence are described in the following table.
Operator | Type | Precedence | Description |
---|---|---|---|
* | NUMERIC | 1 | Multiplication |
/ | NUMERIC | 1 | Division |
Mod | NUMERIC | 1 | Modulo division |
+ | NUMERIC | 2 | Addition |
- | NUMERIC | 2 | Subtraction |
& | STRING | 2 | Concatenation |
< | BOOLEAN | 3 | Less than |
<= | BOOLEAN | 3 | Less than or equal to |
> | BOOLEAN | 3 | Greater than |
>= | BOOLEAN | 3 | Greater than or equal to |
= | BOOLEAN | 3 | Equal to |
<> | BOOLEAN | 6 | Not equal to |
And | BOOLEAN | 4 | Logical AND |
Or | BOOLEAN | 4 | Logical OR |
Not | BOOLEAN | 5 | Logical NOT |
Unlike VBScript, all expressions within a Mobile Channels statement are always evaluated. The following code example shows if arr.count is not greater than zero, arr(1) and arr(2) are evaluated and the references to arr(j) result in error.
If arr.count > 0 and arr(1) = "foo" then arr(2) = "bar" End If
If the first logical expression is FALSE, the ensuing expressions are invalid. The following code example shows correct implementation.
If arr.count > 0 then If arr(1) = "foo" then arr(2) = "bar" End If End If
Special characters, such as the double quote, may be escaped within a string literal by preceding it with the backward slash character (\). The following code example shows how the backward slash character can be included in a string by escaping it as well.
"This is a string that contains \" double quotes\"." "This is a string that contains slashes as in a path: \\c:\\windows."
In the Mobile Channels scripting environment, there are five classes of statements:
Assignment
The assignment statement is of the following form:
<variable> = <expression>
Conditional
The If statement provides conditional flow of control. The End If part is required. The statements after a logical expression are not evaluated unless the logical expression evaluates to 1. The conditional statement is one of the following forms:
If <logical expression> Then <statement> End If
– Or –
If <logical expression> Then <statement1> Else <statement2> End If
– Or –
If <logical expression1> Then <statement1> ElseIf <logical expression2> Then <statement2> End If
– Or –
If <logical expression1> Then <statement1> ElseIf <logical expression2> Then <statement2> Else <statement3> End If
Loop
There are two types of loop statements: For/Next and Do/While:
In the following code example, the For loop iterates through the loop by setting the variable initially at numeric expression1 and incrementing this value by the Step amount (expression 3) with each pass through the loop. When the optional Step clause is omitted, the default clause of Step 1 is invoked. The loop terminates when the variable reaches a value greater than expression2.
For <variable>=<expression1> To <expression2> [Step <expression3>] <statements1> Exit For ' Optional <statements2> Next
In the following code example, the Do While loop continues until the logical expression, logExpression, returns 0. The Exit statement provides a way to terminate a loop without satisfying the normal termination criteria. When Exit is encountered, the loop breaks and execution resumes at the statement immediately following the loop. Exit is usually used in conjunction with a conditional statement.
Do While <logExpression> <statements1> Exit While ' Optional <statements2> Loop
Active Server
Active Server statements refer to the methods of pASP objects, such as Response and Request. The following code example shows how the Response.Write statement returns an output to the HTML stream.
Response.Write("<A HREF=mctp://MSNBC/ch2>Click here to jump to Sports</A>")
The Mobile Channels scripting environment exposes certain server variables. The Request.ServerVariables statement may be used to query the server variables. It takes a name string expression and returns a value string expression associated with the name. For example,
newURL = Request.ServerVariables("URL")
obtains the root URL for the channel of the page. The platform strings returned by:
platStr = Request.ServerVariables("Platform")
are shown in the following table.
String | Platform |
---|---|
"WIN32_CE" | Windows CE |
"WIN32_WINDOWS" | Windows 95/Windows 98 |
"WIN32_NT" | Windows NT |
Similarly, the Request.QueryString statement returns the value of a specified argument passed to the page as part of the URL. For example, if the URL for a page is named "mctp://MSNBC/ch2?city=seattle," then the statement:
theCity = Request.QueryString("city")
Assigns "seattle" to the theCity variable.
Set
The Set statement assigns a variable to an instance of an object. Because the Mobile Channels scripting environment supports only the MobileChannels.Utilities pseudoobject, use the Set statement to create a MobileChannels.Utilities object. Then assign the object to an instance variable, as shown in the following code example.
Set MC = Server.Create("MobileChannels.Utilities")
In general, because line breaks are ignored when a statement is evaluated, statements can wrap to more than one line. The statement continuation character ("_") is recommended, but not mandatory. For example,
MyVar = "This is an example of " & _ "a statement appearing " & _ "on multiple lines." & MyVar
Functions exposed in the Mobile Channels scripting environment are described in the following table.
Function | Description |
---|---|
Now | Returns the current date and time. |
LocDate | Using the current regional settings, formats and returns the date. |
Len | Returns the length of a string. |
Mid | Returns a substring of an existing string. |
Split | Parses a string into substrings based on a specified delimiter. |
Asc | Converts a character string into its numeric ASCII value and returns an numeric expression. |
Chr | Converts an ASCII numeric value to the associated character. |
StrComp | Compares two strings, string 1 and string 2, optionally specifying the comparison mode, compare. |
Random | Generates a random number in the range 0 to -1. |
This function returns the current date and time and takes no argument.
Now
Response.Write("Today's date is " & Now)
This function, using the current regional settings, formats and returns the date.
LocDate
Response.Write("Date: " & LocDate)
This function returns the length of a string.
Len(<string>)
The following code example returns 6.
Len("Hello?")
This function returns a substring of an existing string. The resulting substring is of length characters long and begins at the Start character number — counting from one, not zero — in the original string expression.
Mid(aStringExpression, startNumExpression,[length])
The following code example shows how to set Foo to "my."
Foo = Mid("This is my String", 9, 2)
This function parses a string into substrings based on a specified delimiter. The result is an array of strings.
Split(aStringExpression, delimiterStringExpression)
The following code example results in the subsequent four substrings.
Names = Split("Bob;Fred;Joe;", ";") Names(0)="Bob" Names(1)="Fred" Names(2)="Joe" Names(3)=""
This function converts a character string into its numeric ASCII value and returns an numeric expression. If the aStringExpression is longer than one character, the function returns the ASCII value of the first character only.
Asc(aStringExpression)
This function converts an ASCII numeric value to the associated character and returns a string expression of one character.
Chr(numericExpression)
The following code example shows how to create a string containing one new line character.
str = Chr(10)
This function compares two strings, string 1 and string 2, optionally specifying the comparison mode, compare. The compare argument can be 0 or 1. If compare is omitted, a binary comparison is performed.
StrComp(string 1, string 2[compare])
The values returned by this function are shown in the following table.
Condition | Return Value |
---|---|
string 1 is less than string 2 | -1 |
string 1 is equal to string 2 | 0 |
string 1 is greater than string 2 | 1 |
The function generates a random number in the range 0 to -1.
Random(range)
The following code example generates random numbers from 0 to 9 inclusive.
num = Random(10)
MobileChannels.Utilities is a pseudoobject in the Mobile Channels scripting environment that provides support for navigation and manipulation of objects within a Channel Definition Format (CDF) file. The Utilities object provides a number of methods for Mobile Channels scripting. These methods are summarized in the following table.
Method | Description |
---|---|
Data | Reads a block of data from a data item. |
Debug | Emits debug output to aid script development. |
Href | Returns an element's HREF. |
HrefExists | Returns 1 if an item exists in the cache. |
IsSubscribed | Returns subscribed state of a channel or subchannel. |
IsUnread | Returns read or unread state of an item, channel, or subchannel. |
LibraryCall | Accesses a dynamic-link library (DLL) special function. |
Locate | Jump to a specified identifier within the CDF file. |
Navigate | Traverses a CDF file. |
Tag | Returns the tag of an element in a CDF file. |
Title | Returns an element's title. |
Value | Returns the value of an element in a CDF file. |
The following code example shows how, in order to use these methods, the Utilities object must first be instantiated using the Set function.
Set MC = Server.Create("MobileChannels.Utilities")
Hereafter, MC is used as shorthand for the MobileChannels.Utilities scripting object; however, the object may be assigned to any variable name.
The MC.Navigate method is a powerful, frequently used, and by far the most important method in pASP. It is designed to help examine the structure of a mobile channel, as represented in CDF, at run time. To understand the behavior of this method, a brief discussion of the background and terminology is helpful.
The basic operand of the Navigate method is an element that is the smallest unit of information in a CDF file. Every element has a tag and, optionally, a value. The MC.Tag and MC.Value methods of pASP may be used to retrieve these strings for any element. The elements are organized into a tree structure as specified by Extensible Markup Language (XML) as the CDF file is parsed. Using the Navigate method, you can move to specific elements within the tree and between elements with certain relationships. This information can be very useful to the channel scripts that use CDF to dynamically generate the HTML pages for the channel at run time.
The following discussions refer frequently to the sample CDF file and its associated parse tree, which are provided at the end of this document. The parse tree shows the internal representation of the sample CDF file. Each line of the parse tree is equivalent to an element, and all start with the tag for the element. The more indented elements are children of their less indented parents. Elements at the same level of indentation are siblings. In the CDF file, for example, the BASE element is a child of the top-level CHANNEL element. The first HREF element is a sibling of the BASE element. The INTERVALTIME element is a child of the SCHEDULE element.
Many elements are considered to have a default value. These are indicated in the parse tree by an "= [string]" expression following the tag of the element.
For example, the value of the first ID tag has a direct string, the TITLE tag has an explicit VALUE element, so this is used, and the value of first LOGO tag is its HREF element. The SCHEDULE tag has no direct string, VALUE or HREF children, so its value is empty.
The Navigate method has the following syntax:
NewElem = MC.Navigate(StartElem, NavAction, [,Match])
The method returns a new element, or 0 if the command could not find the specified element. The following code example shows how to test this return value using standard VBScript comparisons. Other standard VBScript comparisons may be used.
IF NOT NewElem THEN ' not found END IF
The StartElem parameter is the starting element from which to base relative movement commands. If you are using the absolute movement command "Jump," you must use " " for the StartElem parameter. But in all other cases, it must be a valid element returned from a previous Navigate method.
The NavAction parameter is one of the following strings:
The "Jump" action is the first command used to get a starting element. It is equivalent to the MC.Locate command. The StartElem parameter must be an empty string. The "Jump" action navigates directly to a specific element in the CDF as identified by the supplied identifier. For example, the statement
NewElem = MC.Navigate("", "Jump", "D1")
jumps to the first data item element in the example CDF file. The NewElem parameter is the ITEM parent element to the ID element, or "D1" in the example CDF file.
The "First" action moves to the first element at a specified level. For example, from the ID element of the first LOGO element in the example CDF file, a "First" action moves to the STYLE tag of that LOGO. More practical scenarios are to use this action to go back to the beginning of the list of ITEMs under a subchannel.
NewElem = MC.Navigate(StartElem, "First")
The "Out" action moves to the parent element from the current element, or to the left one indent in the parse tree diagram. For example, from the TITLE element in the example CDF file, an "Out" action results in the movement to the top-level channel element.
NewElem = MC.Navigate(StartElem, "Out")
The "In" action moves to first child element beneath the current element. For example, from the first USAGE element in the example CDF file, the "In" action results in a movement to the VALUE element.
NewElem = MC.Navigate(StartElem, "In")
The "Prev" action moves to the element at the same level immediately previous to the current element. If it does not find a previous element at the same level, it returns 0; it does not next out to the parent element. For example, from the BASE element in the example CDF file, the "Prev" action results in a move to the HREF element right before it. Because there are no more siblings at this level, calling "Prev" again returns 0.
NewElem = MC.Navigate(StartElem, "Prev")
The "Next" action moves to the next element at the same level. As with the "Prev" action, if it finds no such sibling element, it returns 0. For example, from the first LOGO tag in the example CDF file, the "Next" action results in a move to the second LOGO element.
NewElem = MC.Navigate(StartElem, "Next")
The "Match" action attempts to find a sibling element with a tag matching the specified match string. It traverses as many siblings as it needs to until it either finds a match or can find no more siblings. If the "Match" action starts from a matched element, it returns the current element. To match beyond the current element, the "Match" action must follow a "Next" action.
NewElem = MC.Navigate(StartElem, "Match"," TagToMatch")
The "InMatch" action is the same as "Match" except it begins its search at the first child of the current element. This can be useful when looking for specific subtags that modify the enclosing element. The following example code shows how to look for the USAGE tag for a specific item.
UsageElem = MC.Navigate(StartElem, "InMatch", "USAGE") If UsageElem Then UsageVal = MC.Val(UsageElem) ' Test for specific usage... End If
The only actions that use the optional third parameter are "Match" and "InMatch."
This method returns the tag name of an element.
DataItem(index).Tag
dataItems(n).Tag
This method returns the value of an element.
DataItem(index).Value
dataItems(n).Value
This method gets data from a Mobile Channels data file and returns an array of name and value pairs based on the current location and the specified block number. The names are the field names as specified in an ITEMFORMAT statement and the values are the data items, or lines, as retrieved from the data file.
MC.Data(elementID, blockNum)
The following code example shows that dataItems is an array to hold the data items, elementID is the current location within the CDF file — for example, the ID item for the Mobile Channels Data file (.mcd) — and blockNum is the block number within the file.
dataItems = MC.Data(elementID, blockNum)
Because blocks start with zero, the first repeating block is always block number one, even if there is no header. The resulting array, dataItems, contains an element for each item, or line, within the block. The items in a block count from zero.
Each data item is, in effect, an object that supports the Tag, Type, and Value methods to expose its own properties.
This method returns the value of the field for the indexed array position.
Value
dataItems(index).Value
This method returns the type as specified in the ITEMFORMAT tag. If no type is listed or if the ITEMFORMAT tag is missing, then the Type method returns HTML.
DataItem(index).Type
The return types are described in the following table.
Type | Description |
---|---|
HTML | The line item is HTML-formatted content. This is the default type. |
HREF | The line is a URL, either http:// or mctp://. |
IMG | The line contains the identifier of an image item in the CDF file. |
TEXT | Same as HTML. |
dataItems(n).Type
This method is a shorthand for the "Jump" action of the Navigate method, which has the following form:
newElem = MC.Navigate("", "Jump", "ID")
MC.Locate("ID")
newElem = MC.Locate("ID")
This method enables a script to access a custom DLL to perform functions not available through standard scripting.
MC.LibraryCall(LibName, FuncName [,param]*)
Result = MC.LibraryCall(LibName, FuncName [,param]*)
First, the method checks for security to verify that the DLL has been properly registered for access by means of pASP scripting. An accessible DLL must have a registry entry in \HKLM\Software\Microsoft\Mobile Channels\Components, matching the name of the DLL.
The LibraryCall method then dynamically loads the specified DLL by calling the GetProcAddress function to look up the specified function. Any additional parameters are then marshaled before being forwarded to the DLL function. Up to eight optional parameters may be passed.
The DLL function must return a LPWSTR value. If the return value is NULL, LibraryCall returns 0. Otherwise, it returns the string itself as a standard pVBS string value.
This method allows a debug string to be written during the execution of the script. This may be useful during development to help examine program flow. The debug messages appear in the console window of any attached debugger, similar to the OutputDebugString Microsoft® Win32® API.
MC.Debug(Msg)
MC.Debug("Starting phase 1")
None.
This method determines whether the specified URL can be found in the cache. It enables a script to gracefully handle missing images, data elements, or other components needed by the script. The URL must be a fully qualified HTTP-style URL.
MC.HrefExists(Href)
MC.HrefExists("http://myhome.site.com/personal/index.htm")
This method returns 1 if the URL is found in the cache; otherwise, a 0 is returned.
This function finds the full hypertext reference (HREF) for an item as captured in the CDF file. Href allows shorthand identifiers to be used in the scripts and resolved to full HREFs at run time. If the HREF in the CDF is relative, Href applies the BASE tag in the CDF to fully resolve the HREF.
MC.Href(Elem)
This method returns the full URL for a specified element if it is in the CDF file; otherwise, a 0 is returned.
This method tests to see if a user is currently subscribed to the specified channel or subchannel element.
MC.IsSubscribed(ChanElem)
This method returns 1 if there is a subscription; a 0 indicates that there was no subscription or that the channel or subchannel was not found.
This method does not work with items, only with channel elements. Furthermore, in Internet Explorer 4.0, it always returns 1 when running on the desktop computer.
This method attempts to retrieve the title of a specified element by the following means:
MC.Title(ElemString)
titleString = MC.Title(ElemString)
This method does not mark a data item as "Read" as it retrieves the title. When using the Navigate method to get the title, the item is marked as "Read," even if the user has not actually looked at it.
This method allows a script author to determine if an element has been read by a user. The author can then provide UI feedback to the user, such as showing unread or new items.
This method returns a 1 if the associated item or channel has been read. It returns nonzero value if called directly on an unread item, or called on a subchannel with unread contents.
newContent = MC.IsUnread(Elem)
This method sets the read or unread state for an item and returns no value.
MC.SetUnread(Elem [,Flag])
Mobile Channels Data (MDC) items are automatically marked as "Read," but image items are not. This results in the image remaining marked as "Unread" even if it has been read. Furthermore, all the parent subchannels are also marked as "Unread" as long as any images within are unread. To remedy this situation, the script author should call this method to manually mark each image as "unread" each time it is displayed.
Using several HTML extensions allows you to write advanced scripts for Active Desktop and to control page updates in Channel Browser.
Application links
The Active Desktop for a Windows CE-based device supports a special HREF for launching an application from a hyperlink. The form is as follows:
<A HREF="mcexe://[appname]">Launch Text</A>
The appname parameter is the name of the application to be launched when the link is clicked.
The application must have been registered by placing a value of the same name as the executable file (.exe) in the registry at \HKLM\Software\Microsoft\Mobile Channels\Components.
META tags
Channel Browser and the device's Active Desktop recognize the following special META tags. Embedding these META tags in the header of a page, either directly or through scripting, cause the page to be automatically handled or updated in a particular manner. These META tags — with the exception of Refresh — are ignored by Internet Explorer 4.0.
The META tags are summarized in the following table, proceeded by a detailed discussion of each.
HTTP-EQUIV value | Description | Support |
---|---|---|
Notify | Catch cache or database updates. | Active Desktop, Channel Browser |
Refresh | Reload after a specified time interval. | Active Desktop |
LaunchApp | Execute application for desktop component. | Active Desktop |
Autosize | Control image scaling. | Channel Browser |
Notify
This META tag allows a page to be automatically updated when there is an update to a particular database, or when a particular item is updated in the cache. It is used to regenerate a page automatically when a new version of the page or one of its components comes in by means of a mechanism such as sync. The following code examples show the two forms of this META tag.
<META HTTP-EQUIV="Notify" CONTENT="DBUPDATE=[DBname];URL=[RefreshUrl]"><META HTTP-EQUIV="Notify" CONTENT="CACHEUPDATE=[WatchUrl];URL=[RefreshUrl]">
Possible values are described in the following table.
Value | Meaning |
---|---|
DBname | Name of the database to monitor for updates. |
WatchUrl | URL of the item to monitor for cache updates. |
RefreshUrl | URL to load if an update is detected. |
Refresh
This META tag causes a page to be automatically reloaded after a specified time interval. The form is as follows:
<META HTTP-EQUIV="Refresh" CONTENT="[secs];URL=[RefreshUrl]">
Possible values are described in the following table.
Value | Meaning |
---|---|
secs | Sets the number of seconds until the page is reloaded. |
RefreshUrl | URL to load after the specified interval. |
LaunchApp
This META tag allows an application to be launched by clicking on the header of an Active Desktop component on a Windows CE-based device. The form is:
<META HTTP-EQUIV="LaunchApp" CONTENT="[appname][?params]">
Possible values are described in the following table.
Value | Meaning |
---|---|
appname | Name of the executable to launch. |
params | Optional comma-separated list of params to be passed to the application upon invocation. The application must have been registered by placing a value of the same name as the .exe in the registry at \HKLM\Software\Microsoft\Mobile Channels\Components. |
Autosize
This META tag allows the default image scaling behavior to be disabled for a particular page. The HTML control attempts, by default, to scale images for display on the smaller form factor screen. However, if this META tag is specified in the page header, the images are at the full size. Scrollbars appear, if needed. The form is as follows:
<META HTTP-EQUIV="Autosize" CONTENT="Off">
Because the default value is always "On," there is no need for any other value with the CONTENT attribute.
<?XML version="1.0"?> <CHANNEL HREF="mctp://mySite/34droad/34droad.cdf" BASE="http://mySite/" ID="34droad"> <SELF HREF="http://mySite/34droad/34droad.cdf" /> <SCHEDULE><INTERVALTIME MIN="40"/></SCHEDULE> <USAGE VALUE="MobileChannel"/> <TITLE>3 4 D Road</> <ABSTRACT>Things to think about while you're away...</> <LOGO STYLE="IMAGE" HREF="34droad/34logo.gif" ID="LOGO"/> <LOGO STYLE="ICON" HREF="34droad/34icon.gif" ID="ICON"/> <CHANSCRIPT VALUE="SS"/> <ITEMSCRIPT VALUE="SS"/> <ITEM HREF="34droad/34.mcs" ID="SS"> <ABSTRACT>Things to think about while you're away...</> </ITEM> <ITEM HREF="cgi-bin/deep1.mcd?1" ID="D1"> <USAGE VALUE="MobileChannel"/> <LOG VALUE="document:view"/> </ITEM> <ITEM HREF="cgi-bin/deep1.mcd?2" ID="D2"> <USAGE VALUE="MobileChannel"/> <LOG VALUE="document:view"/> </ITEM> <ITEM HREF="cgi-bin/deep1.mcd?3" ID="D3"> <USAGE VALUE="MobileChannel"/> <LOG VALUE="document:view"/> </ITEM> <ITEM HREF="34droad/34logo.gif" ID="LOGO"> <USAGE VALUE="None"/> </ITEM> <ITEM HREF="34droad/34icon.gif" ID="ICON"> <USAGE VALUE="None"/> </ITEM> <ITEM HREF="34droad/34main.gif" ID="MGIF"> <USAGE VALUE="None"/> <LOG VALUE="document:view"/> </ITEM> </CHANNEL>
CHANNEL = mctp://mySite/34droad/34droad.cdf HREF = mctp://mySite/34droad/34droad.cdf BASE = http://mySite/ ID = 34droad SELF = http://mySite/34droad/34droad.cdf HREF = http://mySite/34droad/34droad.cdf SCHEDULE INTERVALTIME MIN = 40 USAGE = MobileChannel VALUE = MobileChannel TITLE = 3 4 D Road VALUE = 3 4 D Road ABSTRACT = Things to think about while you're away... VALUE = Things to think about while you're away... LOGO = 34droad/34logo.gif STYLE = IMAGE HREF = 34droad/34logo.gif ID = LOGO LOGO = 34droad/34icon.gif STYLE = ICON HREF = 34droad/34icon.gif ID = ICON CHANSCRIPT = SS VALUE = SS ITEMSCRIPT = SS VALUE = SS ITEM = 34droad/34.mcs HREF = 34droad/34.mcs ID = SS ABSTRACT = Things to think about while you're away... VALUE = Things to think about while you're away... ITEM = cgi-bin/deep1.mcd?1 HREF = cgi-bin/deep1.mcd?1 ID = D1 USAGE = MobileChannel VALUE = MobileChannel LOG = document:view VALUE = document:view ITEM = cgi-bin/deep1.mcd?2 HREF = cgi-bin/deep1.mcd?2 ID = D2 USAGE = MobileChannel VALUE = MobileChannel LOG = document:view VALUE = document:view ITEM = cgi-bin/deep1.mcd?3 HREF = cgi-bin/deep1.mcd?3 ID = D3 USAGE = MobileChannel VALUE = MobileChannel LOG = document:view VALUE = document:view ITEM = 34droad/34logo.gif HREF = 34droad/34logo.gif ID = LOGO USAGE = None VALUE = None ITEM = 34droad/34icon.gif HREF = 34droad/34icon.gif ID = ICON USAGE = None VALUE = None ITEM = 34droad/34main.gif HREF = 34droad/34main.gif ID = MGIF USAGE = None VALUE = None LOG = document:view VALUE = document:view