## Script syntax changes - version 2.00

Version 2.32

Manual page for Script_syntax_changes_-_version_2.00(PL)

## NEW SCRIPT INTERPRETER

Ploticus release 2.00 debuts a new underlying script interpreter system, with some consequent changes in legal script syntax.`` These changes should be fairly obscure; when I tested on the collection of gallery examples there were minor problems with 3 or 4 of the examples and these were easily fixed.`` I appologize in advance for any disruption this may cause.``

Changes that may require maintenance to existing scripts:

- Variables no longer need to be #declared.`` #declare no longer does anything; if encountered it will be silently ignored. Scripts that depended on #declare to initialize a variable should now use #set or #setifnotgiven instead.``
- #setifnotgiven should be used to set a default value for any variable that may be passed in to the script. Scripts that use #declare soft, $exists(), or $notexists() to handle passed variables should be changed to use #setifnotgiven.``
- References to variables that have never been given a value cause evaluation to be cancelled, leaving the variable name to appear in result, and do not cause an error message to be issued.
- Concatenation of constants and/or variables in #set statements are now done differently. You used to be able to do this: `#set A = /home/scg/data/@TESTRUN`
  Now it must be done this way: `#set A = "/home/scg/data/" @TESTRUN`
- Implicit concatentation of constants and/or variables in an #if statement is longer supported. For instance, you used to be able to do this:
  `#if @FILENAME = /home/scg/data/@TESTRUN`
  Now it must be done this way:

       #set F = "/home/scg/data/" @TESTRUN
       #if @FILENAME = @F
       ...

- The $system() function is no longer supported, since the new script interpreter has #shell for issuing shell commands and capturing the results, including multi-row results.`` For example, this old code:

         #set dir = $system(pwd)

  can be replaced with the following:

         #shell #processrows pwd
         #call $shellrow( dir )

  Spaces may be freely used in the #shell command. (this item added Mar 26 '02)
- Resource utilization limits have been added as a safety feature for automated situations. By default pl (and any other process it initiates) are limited to 10 cpu seconds and 5MB of created disk space. When a process exceeds a limit, a core dump occurs. These limits can be raised via proc settings or a config file.`` Or, you can remove the safety limits altogether by making an adjustment in the Makefile (see step 3) and then do make clean and then make.``
- The $change() function no longer supports the special symbol `space`.`` A space may be represented naturally, eg `$change( "_", " ", @FOO )`
- The $validate() function is no longer supported.`` Scripts should use $isnumber() to test numbers, $datevalid() to test date values, and $timevalid() to test time values.``
- Trailing comments may cause errors where they didn't before.`` This line contains a trailing comment:

      	rectangle: 1 1 5 6.5    //xlo, ylo, xhi, yhi

  The documentation has always stated that "any line beginning with a double slash (//) is taken as a comment", however some of the examples may have used trailing comments. When in doubt don't use them. (this item added Oct 2 '01)
- #clone no longer accepts a filename argument. Use #include and #procdef instead.``

Changes that should not affect existing scripts:

- #if statements support quoted operands, useful for constants that have embedded white space.`` Example: `#if @A = "hello world"`
- Function constructs may now contain embedded spaces, and quoted arguments.`` Exceptions are $arith() and $arithl(), which do not allow embedded spaces within the arithmetic expression.``
- #hideund and #showund directives are no longer necessary, and are silently ignored.``
  data display engine
  Copyright Steve Grubb

Markup created by unroff 1.0, `` `` August 23, 2005.