Passa al contenuto principale

Syntax and Structure

Basic syntax
IndySoft's Custom Scripting executes code written in Basic syntax. Current Basic syntax supports:

·sub .. end and function .. end declarations

·byref and dim directives

·if .. then .. else .. end constructor

·for .. to .. step .. next constructor

·do .. while .. loop and do .. loop .. while constructors

·do .. until .. loop and do .. loop .. until constructors

·^ , * , / , and , + , - , or , <> , >=, <= , = , > , < , div , mod , xor , shl , shr operators

·try .. except and try .. finally blocks

·select case .. end select constructor

·array constructors (x:=[ 1, 2, 3 ];)

·exit statement

·access to object properties and methods ( ObjectName.SubObject.Property )

Script structure

Script structure is made of two major blocks:

a) function and sub declarations and

b) main block.

Both are optional, but at least one should be present in script.

Some examples:

SCRIPT 1:

SUB DoSomething

CallSomething

END SUB

CallSomethingElse

SCRIPT 2:

CallSomethingElse

SCRIPT 3:

FUNCTION MyFunction

MyFunction = 'Ok!'

END FUNCTION

Like in normal basic, statements in a single line can be separated by ':' character.

Identifiers

Identifier names in script (variable names, function and procedure names, etc.) follow the most common rules in basic :

  1. | should begin with a character (a..z or A..Z), or '_', and can be followed by alphanumeric chars or '_' char.2. | Cannot contain any other character os spaces.Valid identifiers:

VarName

_Some

V1A2 _____Some____

Invalid identifiers:

2Var

My Name Some-more

This,is,not,valid

Assign statements

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 basic using double quote (') character.

Some examples:

A = 'This is a text'

Str = 'Text '+'concat'

Comments

Comments can be inserted inside script. You can use ' chars or REM. Comment will finish at the end of line.

Examples:

' This is a comment before ShowMessage

ShowMessage('Ok')

REM This is another comment ShowMessage('More ok!')

' And this is a comment

' with two lines

ShowMessage('End of okays')

Variables

There is no need to declare variable types in script. Thus, you declare variable just using DIM directive and its name.

There is no need to declare variables if scripter property OptionExplicit is set to false. In this case, variables are implicit

declared. If you want to have more control over the script, set OptionExplicit property to true. This will raise a compile

error if variable is used but not declared in script.

Examples:

SCRIPT 1:

SUB Msg

DIM S

S = 'Hello world!'

ShowMessage(S)

END SUB

SCRIPT 2:

DIM A

A = 0

A = A+1

ShowMessage(A)

Note that if script property OptionExplicit is set to false, then variable declarations are not necessary in any of scripts

above.

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[I + 1] returns the character

immediately after the one indexed by I.

More examples:

MyChar = MyStr[2]

MyStr[1] = 'A' MyArray[1,2] = 1530

Lines.Strings[2] = 'Some text'

Arrays

Script support array constructors and support to variant arrays. To construct an array, use '[' and ']' chars. You can

construct multi-index array nesting array constructors. You can then access arrays using indexes. If array is multi-index,

separate indexes using ','.

If variable is a variant array, script automatically support indexing in that variable. A variable is a variant array is it was

assigned using an array constructor, if it is a direct reference to a Delphi variable which is a variant array (see Delphi

integration later) or if it was created using VarArrayCreate procedure.

Arrays in script are 0-based index. Some examples:

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..end if and the if...then...else..end if. Like normal basic, if the if expression

is true, the statements are executed. If there is else part and expression is false, statements after else are executed.

Examples:

IF J <> 0 THEN

Result = I/J

END IF

IF J = 0 THEN

Exit Sub

ELSE

Result = I/J

END IF

IF J <> 0 THEN

Result = I/J

Count = Count + 1

ELSE

Done = True

END IF

while statements

A while statement is used to repeat statements, while a control condition (expression) is evaluated as true. The control

condition is evaluated before the statements. Hence, if the control condition is false at first iteration, the statement

sequence is never executed. The while statement executes its constituent statement repeatedly, testing expression before

each iteration. As long as expression returns True, execution continues.

Examples:

WHILE (Data[I] <> X)

I = I + 1

END WHILE

WHILE (I > 0)

IF Odd(I) THEN

Z = Z * X

END IF

X = Sqr(X)

END WHILE

WHILE (not Eof(InputFile))

Readln(InputFile, Line)

Process(Line)

END WHILE

loop statements

Script support loop statements. The possible syntax are:

DO WHILE expr statements LOOP

DO UNTIL expr statements LOOP

DO statements LOOP WHILE expr

DO statement LOOP UNTIL expr

statements will be execute WHILE expr is true, or UNTIL expr is true. if expr is before statements, then the control

condition will be tested before iteration. Otherwise, control condition will be tested after iteration.

Examples:

DO

K = I mod J

I = J

J = K

LOOP UNTIL J = 0

DO UNTIL I >= 0

Write('Enter a value (0..9): ') Readln(I)

LOOP

DO

K = I mod J

I = J

J = K

LOOP WHILE J <> 0

DO WHILE I < 0

Write('Enter a value (0..9): ')

Readln(I)

LOOP

for statements

Scripter support for statements with the following syntax: FOR counter = initialValue TO finalValue STEP stepValue

statements NEXT. For statement set counter to initialValue, repeats execution of statement until 'next' and increment

value of counter by stepValue, until counter reachs finalValue. Step part is optional, and if omitted stepValue is

considered 1.

Examples:

SCRIPT 1:

FOR c = 1 TO 10 STEP 2

a = a + c

NEXT

SCRIPT 2:

FOR I = a TO b

j = i ^ 2

sum = sum + j

NEXT

select case statements

Scripter support select case statements with following syntax:

SELECT CASE selectorExpression

CASE caseexpr1

statement1

CASE caseexprn

statementn

CASE ELSE

elsestatement

END SELECT

if selectorExpression matches the result of one of caseexprn expressions, the respective statements will be execute.

Otherwise, elsestatement will be executed. Else part of case statement is optional.

Example:

SELECT CASE uppercase(Fruit)

CASE 'lime' ShowMessage('green')

CASE 'orange' ShowMessage('orange')

CASE 'apple' ShowMessage('red')

CASE ELSE ShowMessage('black')

END SELECT |