<< Click to Display Table of Contents >> Navigation: Using SyncBackPro > Technical Reference > Scripting > Pascal Scripting Language |
The Pascal syntax is similar to Delphi and supports:
•begin .. end constructor
•procedure and function declarations
•if .. then .. else constructor
•for .. to .. do .. step constructor
•while .. do constructor
•repeat .. until constructor
•try .. except and try .. finally blocks
•case statements
•array constructors (x:=[ 1, 2, 3 ];)
•^ , * , / , and , + , - , or , <> , >=, <= , = , > , < , div , mod , xor , shl , shr operators
•access to object properties and methods ( ObjectName.SubObject.Property )
Like in Pascal, statements should be terminated by the ";" character. Begin..end blocks are allowed to group statements.
Identifiers
Identifier names in scripts (variable names, function and procedure names, etc.) follow the most common rules in Pascal: they should begin with a character (a..z or A..Z), or '_', and can be followed by alphanumeric chars or '_' char. They cannot contain any other character or spaces.
For example:
•Valid: VarName, _Some, V1A2, _____Some____
•Invalid: 2Var, My Name, Some-more, This,is,not,valid
Assign Statements
Just like in Pascal, assign statements (assign a value or expression result to a variable or object property) are built using ":=". Examples:
MyVar := 2;
Button.Caption := 'This ' + 'is ok.';
Character Strings
Strings (sequence of characters) are declared in Pascal using single quote (') character. Double quotes (") are not used. You can also use #nn to declare a character inside a string. There is no need to use '+' operator to add a character to a string. For example:
A := 'This is a text';
Str := 'Text '+'concat';
B := 'String with CR and LF char at the end'#13#10;
C := 'String with '#33#34' characters in the middle';
Comments
Comments can be inserted inside scripts. You can use // chars or (* *) or { } blocks. Using // the comment will finish at the end of line. For example:
// This is a comment before ShowMessage
ShowMessage('Ok');
(* This is another comment *)
ShowMessage('More ok!');
{ And this is a comment
with two lines }
ShowMessage('End of okays');
Variables
Unlike Basic scripting, when using Pascal you must declare variables. However, there is no need to declare variable types. To declare variables use the var directive and the variable name. For example:
procedure Msg;
var S;
begin
S:='Hello world!';
ShowMessage(S);
end;
When passing variables to functions or procedures that can return values, you must set the variable before the call, e.g.
var Executed;
var RetVal;
var ErrMsg;
begin
ErrMsg:='';
RetVal:=0;
Executed:=SBSystem.Exec('C:\Windows\notepad.exe', 0, RetVal, ErrMsg);
end;
Indexes
Strings, arrays and array properties can be indexed using "[" and "]" chars. For example, if Str is a string variable, the expression Str[3] returns the third character in the string denoted by Str, while Str[X + 1] returns the character immediately after the one indexed by X. For example:
MyChar:=MyStr[2];
MyStr[1]:='A';
MyArray[1,2]:=1530;
Lines.Strings[2]:='Some text';
Arrays
Array constructors and variant arrays are supported. To construct an an array, use "[" and "]" chars. You can construct multi-index array nesting array constructors. You can then access arrays using indexes. If the array is multi-index, separate indexes using ",".
If a variable is a variant array, then indexing in that variable is supported. A variable is a variant array if it was assigned using an array constructor, if it is a direct reference to a Delphi variable which is a variant array or if it was created using the VarArrayCreate procedure.
Arrays are 0-based index. For example:
NewArray := [ 2,4,6,8 ];
Num:=NewArray[1]; //Num receives "4"
MultiArray := [ ['green','red','blue'] , ['apple','orange','lemon'] ];
Str:=MultiArray[0,2]; //Str receives 'blue'
MultiArray[1,1]:='new orange';
If statements
There are two forms of if statement: if...then and the if...then...else. Like normal Pascal, if the if expression is true, the statement (or block) is executed. If there is an else part and the expression is false, then the statement (or block) after else is executed. For example:
if J <> 0 then Result := I/J;
if J = 0 then Exit else Result := I/J;
if J <> 0 then begin
Result := I/J;
Count := Count + 1;
end else
Done := True;
While statements
A while statement is used to repeat a statement or a block, while a control condition (expression) is evaluated as true. The control condition is evaluated before the statement. Hence, if the control condition is false at first iteration, the statement sequence is never executed. The while statement executes its constituent statement (or block) repeatedly, testing the expression before each iteration. As long as the expression returns True, execution continues. For example:
while Data[I] <> X do I := I + 1;
while I > 0 do begin
if Odd(I) then Z := Z * X;
I := I div 2;
X := Sqr(X);
end;
while not Eof(InputFile) do begin
Readln(InputFile, Line);
Process(Line);
end;
Repeat statements
The syntax of a repeat statement is repeat statement1; ...; statementn; until expression where expression returns a Boolean value. The repeat statement executes its sequence of constituent statements continually, testing the expression after each iteration. When the expression returns True, the repeat statement terminates. The sequence is always executed at least once because the expression is not evaluated until after the first iteration. For example:
repeat
K := I mod J;
I := J;
J := K;
until J = 0;
repeat
Write('Enter a value (0..9): ');
Readln(I);
until (I >= 0) and (I <= 9);
For statements
The for statement has the following syntax: for counter := initialValue to finalValue do statement
The for statement sets the counter to initialValue, repeats execution of the statement (or block) and increments the value of counter until counter reaches finalValue. For example:
for c:=1 to 10 do
a:=a+c;
for i:=a to b do begin
j:=i^2;
sum:=sum+j;
end;
Case statements
Case statements have the following syntax:
case selectorExpression of
caseexpr1: statement1;
...
caseexprn: statementn;
else
elsestatement;
end;
if selectorExpression matches the result of one of the caseexprn expressions, the respective statement (or block) will be executed. Otherwise, the elsestatement will be executed. The Else part of a case statement is optional. It is different from Delphi because the case statement in doesn't need to use only ordinal values. You can use expressions of any type in both selector expression and case expression. For example:
case uppercase(Fruit) of
'lime': ShowMessage('green');
'orange': ShowMessage('orange');
'apple': ShowMessage('red');
else
ShowMessage('black');
end;
Function and Procedure declarations
The declaration of functions and procedures is similar to Object Pascal in Delphi, with the difference you don't specify variable types. Just like OP, to return function values, use the implicitly declared result variable. Parameters by reference can also be used, with the restriction that there is no need to specify variable types. For example:
procedure HelloWorld;
begin
ShowMessage('Hello world!');
end;
procedure UpcaseMessage(Msg);
begin
ShowMessage(Uppercase(Msg));
end;
function TodayAsString;
begin
result:=DateToStr(Date);
end;
function Max(A,B);
begin
if A>B then
result:=A
else
result:=B;
end;
procedure SwapValues(var A, B);
Var Temp;
begin
Temp:=A;
A:=B;
B:=Temp;
end;
Exceptions
Exceptions can be caught between try...except blocks. on: exception filtering is not supported, but you can get the exception details using LastExceptionClassName and LastExceptionMessage. For example:
try
...
except
ShowMessage(LastExceptionClassName);
ShowMessage(LastExceptionMessage);
end;
All Content: 2BrightSparks Pte Ltd © 2003-2024