Version comments Version 1.3 contains the following new features: NEW CRYPTO CONSTRUCTS: [see "http://www.brics.dk/bigwig/refman/security/"] SSL: mode ::= "ssl" "ssl" is a service/session modifier that will make the entire service or a particular session subject to the SSL cryptographic protocol. It requires that the web server supports SSL. SINGULAR: mode ::= "singular" This modifier will cause the server to inspect the IP number of the client when the session is started and subsequently verify that it does not change. Thus, it makes sure the client remains the same throughout the execution of the session. SELECTIVE: mode ::= "selective" '(' exp_list ')' This modifier takes a comma separated list of string expressions in parentheses as arguments and verifies that the IP number of the client is in this list. There are three possibilities for the strings in the list: - A (PARTIAL) DOMAIN-NAME: Host whose name is, or ends in, this string are allowed access. However, this only works if the Web server does DNS-lookup. - A FULL IP ADDRESS: An IP address of a host allowed access - A PARTIAL IP ADDRESS: The first 1 to 3 bytes of an IP address, for subnet restriction. MD5: exp ::= "md5" '(' exp ')' This built-in function, "md5", takes a string and returns a string, namely the md5 hash value of the argument given. COOKIE SUPPORT: [see "http://www.brics.dk/bigwig/refman/web/"] GETCOOKIE: exp ::= "getcookie" '(' exp ')' This function takes a cookie (string) and returns the value (string) of this cookie ("" if there is no such cookie). SETCOOKIE: exp ::= "setcookie" '(' exp ',' exp ')' This function takes two arguments a cookie (string) and a value (string) and sets the cookie. Note that the actual setting of the cookie only takes place at the next "show" or "exit" statement. EXPRESSION-STATEMENTS: exp ::= '(' compound_stm ')' Statements can now be embedded in expressions (as in Gnu C). The result is the value of the last statement if it is a statement-expression (stm ::= exp ';') and "void" otherwise. [see "http://www.brics.dk/bigwig/refman/core/#expstm"] CODE GAPS: [see "http://www.brics.dk/bigwig/refman/dyndoc/#codegaps" and "http://www.brics.dk/bigwig/tutorial/dyndoc/#codeexp"] Code gaps are reminiscent of PHP and ASP evaluation tags. There are two kinds available in : CODE EXPRESSIONS: htmlbody ::= '<[' '(' exp ')' ']>' attr ::= '[' '(' exp ')' ']' Documents are now allowed to contain in-lined expressions that are evaluated just before the document is shown. The value of such an expression is coerced to a string and inserted in the document in the place of the code expression. CODE STATEMENTS: htmlbody ::= '<[' compound_stm ']>' attr ::= '[' compound_stm ']' The same thing is possible with statements. The last statement in the compound_stm must be a statement-expression whose type must not be void and whose value (coerced to a string) is inserted in the document. TYPEOF CONSTRUCTION: type ::= "typeof" '(' exp ')' The type of this construct is equal to the type of the expression. Note that the expression is solely used for determining the type and is thus never run. The construction is mostly intended for use via the syntax macros. HTML DOCUMENT PROTOTYPES: html ::= "" htmlbody_list "" '@' stringconst The stringconst must designate an html file. If the file is not present (at compile-time), the value of the construct is the value of the constant document listed. If, however, the file is present (at compile-time), it will be the value of the construct. The html document in the file is required to have the same document type as the constant document (i.e. same gaps and fields) which is checked at compile-time. The idea behind this construct is to provide a means for rapid prototyping. The programmer rapidly makes some ``prototype'' html documents, with focus on functionality and not on layout. Then, as the ``real'' documents are gradually created, they replace the prototype ones. FORMAT ON "PASSWORD" FIELDS: The PowerForms formats now also work on input fields of type "password". BUG FIXES: Minor bugs have been fixed. 2nd GENERATION SYNTAX MACROS MACRO SYNTAX CHANGE: Note that the syntax of actual arguments in macro bodies has (for reasons of readability) been changed from 'identifier' to ''. All macro files ``*.bigmac'' now have corresponding copies ``*.wigmac'' with this new syntax. MACRO PACKAGES (REQUIRE/EXTEND): has been enriched with a concept of ``macro packages'' which are essentially sets of macros. A service (or other macro packages) may now require or extend macro packages. Note that macros are no longer allowed in the service file and must now reside in packages (i.e. files). which means that you should most likely replace all ``#include '' occurrences with ``require ''. If you have written any macros yourself and in-lined them in your services, just place them in a file and require this file. [see "http://www.brics.dk/bigwig/refman/macro/" for more information.] METAMORPHIC SYNTAX MACROS: 's syntax macro language now supports the advanced concept of ``metamorphisms'' which is described in the paper "Growing Languages with Metamorphic Syntax Macros". You can get the paper here: "http://www.brics.dk/bigwig/research/publications/#macro". INSTALLATION & SETUP NEW COMPILER OPTIONS: The ``print macro parse information'' "-m" option has been changed to "-M". "-m" will now ``print macro (parse) error information''. [see "http://www.brics.dk/bigwig/compiler/options/"] A "--nojavascript" option has been added. When invoked, the compiler will generate html "submit" default continue buttons instead of "button" buttons with JavaScript on them. Also, the compiler will prohibit uses of "" which uses JavaScript. [see "http://www.brics.dk/bigwig/compiler/options/"] INSTALL SCRIPT MUST BE RUN ON WEB SERVER: The ``CGISERVER'' ".bigwig" configuration file option has been removed. Thus, a service will no longer automatically log in on the web server during installation. It now needs to be installed (invoking ``.install'') on the Web server. [see "http://www.brics.dk/bigwig/compiler/getting_started/"]. NEW SHELL SCRIPT: The compiler now also generates a shell script for each service titled ``.sh''. This script can be used to inspect and manipulate the runtime controller, the garbage collector, and running sessions. For more information on this script, turn to: "http://www.brics.dk/bigwig/compiler/getting_started/shell.html". BACKWARDS COMPATIBILITY ISSUES Four new features are NOT backwards-compatible: 1.MACRO SYNTAX CHANGE: Note that the syntax of actual arguments in macro bodies has (for reasons of readability) been changed from 'identifier' to ''. All macro files ``*.bigmac'' now have corresponding copies ``*.wigmac'' with this new syntax. 2.MACRO PACKAGES: Note that macros are no longer allowed in the service file and must now reside in packages (i.e. files) which means that you should most likely replace all ``#include '' occurrences with ``require ''. If you have written any macros yourself and in-lined them in your services, just place them in a file and require this file. 3.MACRO SEPARATORS ARE KEYWORDS: Macro identifier separators are now treated as keywords as with "else" in the "if-else" (non-macro) construction. 4.CONTINUE KEYWORD: "continue" is now a keyword, which means that you need to rename any variables you might have called "continue".