THE FILE Aestiva HTML/OS reads standard HTML files. These files may contain additional tags placed within sets of double brackets.
These sets of tags, known as Overlays, extend the operation of the HTML file to the server-side of the Web "server-client relationship" giving Web designers control over the operation of a Web site where the "data" resides. Note that the HTML page may still be written without Overlays. In this case, the page appears as a standard HTML file.
In practice, Overlays may be placed above the page, within the page or below the page. Overlays may be placed inside HTML tags but they may not be placed inside other Overlays.
For example, writing <font size=<<mysize>> color=red> is fine, but writing << c=<<a+b>> >> will produce an error. We would write <<c=a+b>> instead.
The general types of Overlays are described in the following sections.
Underlays These are Overlays placed above the <HTML> tag. All operations are allowed with the exception of tags for displaying text within the page. An unlimited number of instructions may be placed in an Underlay. At most only one Underlay may be defined on a page.
Inlays These are Overlays placed between the <HTML> and </HTML> tags - the display portion of the page. All Otags are allowed in Inlays except those for exiting the page, such as GOTO. An unlimited number of instructions may be placed in an Inlay and an unlimited number of Inlays may be defined within the page.
On-click Overlays These are Overlays placed after the </HTML> tag of the file. All Otags are allowed with the exception of those for inserting text in the page. On-click Overlays start with the word "OVERLAY" followed by a name. They are invoked in response to a user click, not when the page is run. An unlimited number of Otags may be placed in an On-click Overlay and an unlimited number of On-click Overlays may be placed in sequence after the </HTML> tag on the page. See Figure 1.
<< Otags >>
<HTML> HTML tags and one or more << Otags >> placed in the display portion of the file. </HTML>
<<OVERLAY overlayname1Otags >>
<<OVERLAY overlayname2Otags >>
<<OVERLAY overlayname3Otags >>
Figure 1: Placing Overlays on the Page.
As an example, consider Figure 2. It contains an Overlay at the top of the file (an Underlay). It contains an Inlay that uses the Otag TODAY. And it contains an On-click Overlay called "doit."
<< IF mypassword != "please" THEN GOTO "/badpassword.html" /IF >>
<html> <title>Sample Page</title> <center> Welcome to Wally's Homepage! <br> Today is <<TODAY>><br> Come on in!<br> <form method=post action=doit> <input type=submit name=button value="Waffles"> <input type=submit name=button value="Donuts"> </form> </center> </html>
<<OVERLAY doit IF button="Waffles" THEN GOTO "/wwhome.html" /IF IF button="Donuts" THEN GOTO "/wdhome.html" /IF >>
Figure 2: Page With Overlays.
Note: Inlays with single expressions, such as <<TODAY>> or <<a+3>> are displayed in the page as if they were written as <<DISPLAY TODAY /DISPLAY>> or <<DISPLAY a+3 /DISPLAY>>.
NAMES AND VALUES In HTML/OS variables are also called names. They store one or more values. The values in a name are organized in columns and rows. The values may be text, numbers, dates and time, etc. First we look at names with a single column and row. Consider the Overlay:
<<myheader="<b>Smith and Company</b>">>.
It stores "<b>Smith and Company</b>" in the name "myheader". Subsequent use of the name myheader is equivalent to using its stored value. Since names retain their values as users move from page to page, the Overlay <<myheader>> can be placed on any page to display the HTML text "<b>Smith and Company</b>".
When creating names or variables remember these rules:
Otags are case insensitive. Once you've assigned a value to myname, for instance, you will get the same result whether you type myname, MYNAME or MYname.
Names can contain letters or numbers, but they must not begin with a number. For instance, myname1 is fine but 1name is not.
Names cannot contain special characters (such as @, $, and &) or spaces and cannot be more than 59 characters in length. Names like my_name and my.name are fine but names like my$name are not.
Do not use names that are the same as existing Otags. For instance, do not use names like IF or BROWSER. To keep names from matching those used by Otags use names containing a dot or an underscore, such as cart_total.
Kinds of Values The cells in a name can contain the following types of values:
Text (Up to 500,000 characters)
Integers (Whole numbers up to 11 digits)
Floating Point Numbers (Fractions up to 12 digits including decimal point)
Dates, Times, and Date and Times
Booleans (TRUE and FALSE)
Here are some examples: myname = "Tom" stores the text "Tom" into myname myage = 30 stores the integer 30 into myage ave_result = 42.25 stores the number 42.25 into ave_result mybirthday = "08/04/1951" stores a date into mybirthday thedeadline = "10:30" stores a time into thedeadline myentrytime = "12/31/1999 12:00" stores a date & time into myentrytime myflag = "TRUE" stores the logical value TRUE into myflag
Using quotation marks Quote marks differentiate names from literal values. Three quote characters are supported: the double quote, single quote and caret.
For instance, if myname contains "Tom", then <<LENGTH("myname")>> will return "6" (length of "myname"), but <<LENGTH(myname)>> returns "3" (length of "Tom").
If you need to use quotes in a name be sure to use one type of quotation mark (single, double or caret) to surround the text and the other type to enclose your literal text.
For example, it's proper to write: <<MYTEXT='She said, "Yippee!"'>> (double quotes within single quotes) or: <<DISPLAY "They're not using HTML/OS?" /DISPLAY>> (single quote within double quotes). It is not okay to write: <<"She said, "Yippee!"">> (double quotes within double quotes).
Names with Multiple Columns and Rows The names used in the preceding section contain one column and row - a single cell. When names have more than one cell they are often called HTML/OS tables or just tables. Consider the Overlay:
<<stooges = ROW("Larry","Moe","Curly")>>
The Otag ROW is used to create rows (tables with a single row) using a list of parameters. In this example, the parameters are "Larry","Moe" and "Curly". The ROW tag creates the table stooges. It has one row and three columns.
To identify a specific cell in a name write the name followed by the column and row number of the cell in square brackets. For example, the third column and first row of stooges is stooges[3,1]. As another example, to replace the value in the third column (Curly) with the value Shemp write:
<<stooges[3,1] = "Shemp">>
The ROW Otag is a single example of the many Otags that perform operations on variables with multiple cells. Tables may be loaded from delimited text files. They can be saved to delimited text files. They may be cut up, sorted, pasted together, sliced and diced.
Specifiers and Nesting In the example above the Otag ROW had three specifiers ("Larry","Moe" and "Curly"). Otags are pre-defined to accept a pre-defined number of specifiers. In the case of the ROW Otag, any number may be used. In the case of the LENGTH Otag, a single specifier must be provided. Each Otag can be different. However, in every case the specifiers observe the following rules:
Rule 1: Specifiers are placed within parentheses following the name of the Otag. Rule 2: A specifier can be a literal value (in quotes), a name, or an expression.
The two following examples save the same result into myfirstname. Example 1: <<myfirstname="Henry Smith" myfirstname=LEFT(myfirstname,5) myfirstname=UPPER(myfirstname)>>
Example 2: <<myfirstname=UPPER(LEFT("Henry Smith",5))>>
In the first example the operation was performed by three instructions. In the second example, the instructions were nested together into a single instruction. HTML/OS allows multiple levels of nesting.
DEFAULT VALUES AND ASSIGNMENT RULES By default, every variable is a one row by one column table that contains the text string ERROR. The values in cells outside of the defined rows and columns of the variable are always empty.
If a name is specified with a column but no row, as in myname="Hello", then the row is set to one. In other words, myname is the same as myname[5,1].
Assignment Shortcuts: Most assignments are done with the = character. In addition +=, -=, and &= operators are supported. They add, subtract and concatenate the expression to their right to the variable specified to their left.
MATHEMATICAL OPERATIONS The HTML/OS mathematical functions operate on integer and floating point (fractions) numerical types. The following basic mathematical operations are supported: + Addition / Division - Subtraction * Multiplication
Otags, names and values may be combined with these math tags to produce expressions. For example, display 1+3 /display is the same as display 4 /display which is the same as a=1 b=3 display a+b /display and so on.
In addition to these basic operations, logical operations, algebraic, trigonometric and other kinds of mathematical operation may be performed. See the appropriate sections in this reference.
Logical Operations Special conditional tags, such as IF test THEN ... /IF require that a test condition be "TRUE" before executing a set of Otags. These tests are written as:
Otag-expression Operator Otag-expression
For example, length(myname) > 5 is a test to see if the length of the value stored in the name "myname" is larger than "5". When placed inside an IF statement it looks like:
IF length(myname) > 5 THEN DISPLAY "Your name is too long" /DISPLAY /IF
This Overlay displays "Your name is too long" in the event the value stored in myname is longer than five characters. HTML/OS recognizes the following (single column and single row) operators:
equal to (case sensitive)
not equal to
not equal to (case sensitive)
not equal to
greater than or equal to
less than or equal to
begins with the text
begins with the text (case sensitive)
does not begins with the text
does not begins with the text (case sensitive)
contains the text
contains the text (case sensitive)
does not contain the text
does not contain the text (case sensitive)
Multi-word comparison operators
contains all whole words
contains any whole words
begin of words matched
any begin of word matched
all words found
any word found
Some Otags are specifically designed to arrive at a Boolean result (a result of TRUE or FALSE). As a convention, these tags begin with IS. For example, ISPAST("12/31/2000") compares the specified date with the present date and returns TRUE if it's in the past and FALSE otherwise. For example:
IF ISPAST("09/09/99") THEN DISPLAY "You are past the deadline" /DISPLAY /IF
will display the text "You are past the deadline" in the event the value "09/09/99" has passed.
Aestiva HTML/OS accepts standard HREF links and extends their functionality to support the needs of dynamic applications. HREFs are able to enter and exit the HTML/OS environment, assign values to names when they are clicked, link to On-click Overlays and be used to switch servers (for moving between secure and non-secure modes of a server, for instance).
Linking to an On-click Overlay To link to an On-click Overlay replace the htmlfilename with the name of the On-click Overlay (see "THE FILE" at the top of this section). For instance, the HREF:
<A HREF="gotit">Click Here</a>
links to the On-click Overlay "gotit" placed at the end of the file. "gotit" would have the form:
<<OVERLAY gotit # place some Otags here /# GOTO "/somepage.html" >>
Note: One must always exit out of an On-click Overlay with a GOTO Otag. Not doing so will result in an error.
HREF Names and Values Aestiva HTML/OS allows you to assign names and values to an HREF so that clicks of a particular HREF can be detected. The HREF is written as:
Let's assume the HREFs above point to the On-click Overlay below:
<<OVERLAY resize IF fff="enlarge" THEN myfontsize = myfontsize + 1 /IF IF fff="shrink" THEN myfontsize = myfontsize - 1 /IF GOTO "/samepage.html" >>
In this example the value of "fff' is determined depending on which HREF is clicked. In the On-click Overlay the value of "myfontsize" is increased or decreased depending on the value of "fff" received.
Links outside of HTML/OS The links shown above stay inside the HTML/OS engine. To exit HTML/OS use full URLs such as http://mydomain.com/index.html. Note that values in names are lost upon exiting HTML/OS.
Alternatively, one can display links using the EXITDISPLAY tag. All text, HTML and links are understood to be "outside of HTML/OS" when displayed with this tag. For example:
Start-links To activate a "new user session", i.e. to enter your HTML/OS site, use a Start-link. Start-links are of the form:
where cgidir is the "script-alias" of the site (which depends on your installation. Common values are scripts, cgi-bin, htmlos and cgi), startname is the name of the HTML/OS starter (which is called start, start.exe or start.cgi depending on the installation) and firstfile.html is the name of the HTML file accessed. Multiple Start-links may be created for any site.
If the Start-link is written with a preceding http://domain.com then the link will always create a new user session when clicked. If written without the preceding domain then HTML/OS will create a new user session the first time it is clicked, but not when the user is already inside HTML/OS.
Note: File names used in Start-links must be entered in the Start-link Allow list defined in the Control Panel, in order to be accessible. When a file name does not appear in the list, any attempt to access the file with a Start-link results in a permission denied error.
Switching to a Secure Server Aestiva provides the tag SECURE for switching to a secure server from a link or HTML form. To recognize a secure server use the Alt Server option in the Control Panel. Enter the path of the cgi-bin for the secure server and its file root. Once set, an HREF link to a secure server would look like:
<A HREF="filename.html" SECURE>Link Text</A>
Notes: HTML/OS automatically links back to the default server when these tags are not specified. Secure servers need to use the same file permissions as the non-secure server to work properly. The SECURE word can also follow the ACTION field in FORM tags.
THE FORM Setting up HTML forms is similar to setting up standard forms with the following differences:
The ACTION line in the form points to an HTML file or an On-click Overlay rather than a CGI program or a URL.
VALUES do not need to be specified for names since they are auto-filled from current names. If specified in the form however, they will overwrite the values in names.
Names in forms must conform to the HTML/OS variable name conventions.
The following form elements are supported:
TEXTBOX RADIO HIDDEN
PASSWORD CHECKBOX FILE
TEXTAREA SELECT SUBMIT
When a user submits a form values in the form are assigned to their associated names in HTML/OS and the name HTMLOS.CLICKED is set to the variable name specified in the submit button clicked. Methods POST and GET are supported.
Security Note: By default, HTML/OS filters out HTML and HTML links submitted in forms. To enable HTML and link submissions place the words ALLOWLINKS or ALLOWHTML respectively in the particular HTML component. For example:
<INPUT TYPE=TEXT NAME=X ALLOWHTML>
For programmers: Filling/Feeding HTML/OS Tables HTML FORMS can fill HTML/OS tables and can be fed from HTML/OS tables. Two types of integration are supported; Indexed and Automatic. This capability comes in handy when working with on-line spreadsheets and multi-select inputs (such as select boxes and checkboxes).
For programmers: Indexed Feeds and Fills Names in forms may be assigned to indexed entries of a table. For example, one may write NAME=mydata[2,3]. In such cases, the element in the second column and third row of the HTML/OS table mydata will be filled with the user-provided value when the SUBMIT button is clicked. Indexed names are useful when reading or writing to spreadsheet-like data.
When a form containing indexed entries is displayed, if the indexed elements have values, then they will appear in the form. Like other form elements, the VALUE tag is used only as a DEFAULT value (when a value for the name has not been defined).
For programmers: Automatic Feeds and Fills SELECT boxes and CHECKBOXES allow multiple selections of a single name. When a FORM with a single name receives multiple values, HTML/OS assigns the values to an HTML/OS table of the specified name, placing the values received in the form into the first column. For instance, consider the checkbox below:
If the user selects multiple entries the table mycolors will be filled with as many rows as colors selected. Selecting "Red" and "Green" will create a table with one column and two rows, containing the elements "Red" (value of mycolors[1,1]) and "Green" (value of mycolors[1,2]).
When a form containing repeated names is displayed, form elements are fed from values in existing names and tables. If a form has a checkbox with the name mycolors, and mycolors has the values mycolors[1,1]="Blue" and mycolors[1,2]="Red" then the checkboxes for "Blue" and "Green" will be checked.
Note: Automatic fills and feeds operate on the first column of the specified table. The order of rows does not need to match the order in which values appear in the form.
ISMAPS AND USEMAPS The ISMAP attribute of images allows one to attach links to components of an image. Links are of the form:
<A HREF=file.map><img src=file.gif ISMAP></A>
The "file.map" is a text file containing lines that specify where each portion of the image ("file.gif") links. An example file is shown below. Rectangles (specify RECT or RECTANGLE) and circles (specify CIRCLE) are supported. When specifying a RECT, include the X,Y coordinates of the upper-left and lower-right corners of the RECTANGLE. When specifying CIRCLE, include the X,Y coordinates of the circle's center and its radius.
RECT /file1.html 0 0 19 10 RECT /file2.html 20 0 39 10 RECT /file3.html 0 11 19 20 RECT /file4.html 20 11 39 20
Aestiva HTML/OS also supports the use of USEMAPs - which are the preferred mechanism for creating ISMAPs. An example is shown below.
Note: HTML/OS supports assignment of names and values in USEMAPs. To assign a value to a name upon clicking a portion of an image, add the "NAME=name" and VALUE=value" tags following the HREF definition in the "AREA COORDS" portion of the definition.
CLICKABLE IMAGES IN FORMS Images in forms can be used to provide added functionality to a Web site. Unlike USEMAPs, image buttons can tell you the pixel location clicked. Consider the button:
<input type=image name=cool src=mybutton.gif>
When a user clicks this button, the pixel location the user clicked is automatically stored in the names cool.x and cool.y. For example, a user clicking coordinate (10,10) of a 20 by 200 pixel image would have the values 10 stored in the variable names cool.x and cool.y before moving to the file or overlay specified in the ACTION line of the same form. Images in forms can be used simply to replace the buttons created by <input type=submit value=...> statements or to perform more sophisticated tasks where the X and Y coordinate information is used.
EXPIRE PAGE CONTROL Aestiva HTML/OS can direct users to a specified web page if their user session has expired. This is set up in the Control Panel. In general, pages expire after 100 minutes of inactivity.
Using the TAG tag An option is provided in HTML/OS for you to add "tags" to HREF links so users hitting expired pages can be directed to pre-specified pages. The feature is explained in the URL Tagging section in the Control Panel.
THE Aestiva Array CONTROL PANEL The "Control Panel" menu on the Aestiva Array desktop will display all the Control Panel icons. From there, you can find information on your version of Aestiva Array and how it is configured. You can use the control panel to make changes to your mail, security and other system configurations. Hover your mouse over each icon for an explanation of the feature.
WEB-ACCESS SECURITY Aestiva HTML/OS saves files in "public" and "private" file areas of the server. Files in the public area may be accessed from the Web with a URL. Files in the private area cannot be accessed by unauthorized users. They can only be accessed from the Aestiva Array desktop or by HTML files containing encoded links to such files. Web-access security is automatic.
Use the option File Info in the Aestiva Array File Manager to switch files back and forth between the public and private areas. In general, in-line files such as images, are public. HTML files, other than index.html, are private. HTML/OS places new files in one area or the other depending on its file name extension. Use the Control Panel to modify the "private extensions list" if you wish to change where files are saved in HTML/OS. Note: Modifying this setting is not recommended.
To fork a new user session from a current user session use a fork link. A new user session will be created, initialized with the Names of the parent user session. For example:
A fork link looks like an HREF link, with the HREF replaced with the word FORK. The link above, when clicked, launches a new user session in the frame newframe. Activity in the new user session has no affect on activity in the original window since the two user sessions are different. For the same reason, new activity in the original window has no effect on the forked application in newframe.
To exec a new user session from a current user session use an exec link. A new user session will be created, initialized with the Names of the parent user session. For example:
A exec link looks like an HREF link, with the HREF replaced with the word EXEC. The link above, when clicked, launches a new user session in the frame newframe. Activity in the new user session has no affect on activity in the original window since the two user sessions are different. For the same reason, new activity in the original window has no effect on the execed application in newframe.
ERROR REPORTING Multiple levels of error reporting are built into Aestiva Array. They are summarized below:
Aestiva Array reports errors in the grammar of tags when pages are run. Error messages are displayed along with the characters immediately preceding the error location. Severe errors resulting in the inability of Aestiva Array to render a Web page are displayed on stand-alone pages.
HTML/OS tags often contain their own error reporting. See the documentation for each specific tag for details.
Network errors are written to an error log accessible in the Control Panel. Use this error log to diagnose networking and peering configuration problems. The log retains the last ten errors.
Database errors are reported by each tag. They are "returned" or placed in the name TAGRESULTS. See the documentation for the specific database tag you are using for details. Database errors are also written to a database error log accessible in the Control Panel. The log retains the last ten errors.
NETWORKING Multiple copies of Aestiva Array may be placed in a network. Network support is built-in. No additional software and no hardware configuration on the servers hosting the copies of Aestiva Array are needed. The copies may reside on dedicated servers or shared hosting accounts.
Aestiva Array networking is hardware independent. Each copy of Aestiva Array (the "nodes" in the network) may reside on different hardware platforms.
To set up a network:
Define the identity of each copy of Aestiva Array (node) in the network. Use the identity option in the respective Control Panels of each node to set up the identity of each. Each node must have a different name. Although names may be long, it is best to keep names short. Single letters, such as A,B or X are preferred.
Using the Control Panel of each node, set up access to the other nodes. This is known as setting up the "peers" and is accomplished by defining a URL and security IP to each node. Two kinds of access are allowed; full or limited. Full access allows a remote node full access to the files and databases of the current node. Limited access gives you the ability to limit access to only specific files or databases. See the Control Panel for instructions. Do this for each node in the network.
Once your network is set up in the Control Panels of each of the nodes in your network you will be active. No other configuration is needed.
Using the network Once the network is set up Files, Databases and HTML files will be accessible between the nodes in the network (within the security limitations defined). HTML/OS tags support networking unless the documentation explicitly says they do not support networking. HREF links and GOTO tags also support networking.
To specify a file or database on a remote node precede the name with the identity of the node and a colon, as in x:/cart.html.
When specifying a remote file or database always use a full path. For example:
Running an application across the network is the same as operating an application on a single copy of Aestiva Array except for the need to specify node names.
Aestiva Array is now "multi-user" with each user having their own (sandboxed) Desktop.
Added group-based user security to multi-user Aestiva Array Desktop.
Admin features added to Control Panel.
Aestiva Array Desktop modified to support new multi-user functionality.
Added icon sharing to the Aestiva Array Desktop. Users can now share icons with other Aestiva Array users. Icon sharing creates automated "Single-Signon" icons so other users can log into a shared application without a new login and password.
Added database sharing to dbConsole. Users can now share databases; giving other users Read or Read/Write access to a database.
Added file sharing to the File Manager. Users can share files; giving other Aestiva Array users Read, Read/Write, or Run access to a file.
Added HTML/OS programming manual to the File Manager. Users can now search and use the HTML/OS manual within their file editor, as they write code.
Added indent function to File Manager to allow single-click auto-indent of HTML/OS code.
Added support for running programs in the background, at a delayed time, or at a scheduled time. Also provided under program control. (See new tags below).
Added "static" page emulation.
Page capture mode added to environment. Setting HTMLOS.PAGE to a variable name saves the HTML/OS web page output to a variable. Used for "emailing this page" type functions.
Added support for a file ID in <input type=file>, When an ID is specified, files are uploaded to /upload/[USERNUM]_[ID]. A convenient option for programming multi-user file uploads.
Support for session FORKs has been extended to also support session EXECs. A FORK is a new session which is created that inherits the previous session's environment. An EXEC is a new session which is created fresh, without the previous session's environment.
Renamed DOL database data type to CUR to be less dollar-centric.
HTML engine processing optimizations added.
Increased maximum array sizes from 100,000 rows to 1,000,000 rows.
Increased max size of variables stored in HREF links from 100,000 to 500,000 bytes.
FILECSUM(file) - returns a checksum of a file.
FILEMIDDLE(inFile,offset,length,outFile) - Copies block of data from inFile to outFile.
DBBATCHADD() - batch loads data into HTML/OS Database (same as older DBLOAD).
HTMLOSEXTENSIONS - returns list of system-wide program extensions.
HTMLOS.SUBUSERNAME - returns current Aestiva Array subuser name.
BACKGROUNDRUN(Filename) - run job in background.
BACKGROUNDRUN(Filename,Label) - run job in background (marked with Label).
BACKGROUNDRUN(Filename,RunTime,Label) - run job in background at specified time (marked with Label).