AdoScript Language Constructs ​
This section introduces the AdoScript language constructs in detail, starting with basic assignment statement to structuring AdoScript in re-usable PROCEDURE calls and FUNCTIONS.
API Command Structure ​
The basic structure of every call to an AdoScript command is shown in the image below. The constructs needed to call a command are:
- CC + "MessagePort": Every call has to start with the CC - "Call Command" and the respective MessagePort.
- API Command: the command is specified in CAPITAL letters. In case the command should be run in debug mode, add "debug" between the MessagePort and the command. This results in a pre-execution of the command including the possibility to view input and result values before actual execution.
- Input Values: if needed according to API signature
- Result Value: as produced by the command
AdoScript Command Structure
# Reading out of the ModelID of a model currently open
CC "Modeling" GET_ACT_MODEL
# Errorcheck modelid
IF ( modelid > 0 ) {
# Command Call(Keywords in Capitals)
CC "Core" GET_MODEL_INFO modelid: ( modelid )
# Handling of Return Values
CC "AdoScript" INFOBOX ("The active model is "" + modelname
- "" (" + modeltype + ")") } ELSE {
# ecode returned
CC "AdoScript" ERRORBOX "No model is opened!" }
Example AdoScript "Read Model Information"
AdoScript Basics ​
Variable declaration ​
SET, LEO
Control structures ​
IF/ELSIF/ELSE, WHILE, FOR, BREAK, EXIT, PROCEDURE, FUNCTION
External programs / File callings (AdoScript, EXE, DLL) ​
EXECUTE, SYSTEM, START, CALL
Sending of messages to ADOxx Component (MessagePorts) ​
CC, SEND
LEO Expressions ​
Usage of expressions for call parameters.
AdoScript Operators ​
Logical ​
AND, OR, NOT
Comparison ​
< , > , <= , >= , = , <> , !=
Arithmetical ​
- , - , * , / , - (unary)
Strings ​
s + t , n * s , s / t , s SUB i , LEN s
Conversions ​
STR value , VAL string
AdoScript Functions ​
Arithmetical ​
abs (x), max (x, y), min (x, y), pow (x, y), sqrt (x), exp (x), log (x), log10 (x)
Strings ​
|search (source,pattern,start) | |bsearch (source,pattern,start) | |copy (source,from,count) | |replall (source,pattern,new) | |lower (source) | |upper (source) |
Lists ​
|token (source,index[,separator]) | |tokcnt (source[,separator]) | |tokcat (source1,source2[,separator]) | |tokdiff (source1,source2[,separator]) | |tokisect (source1,source2[,separator]) | |tokunion (source1,source2[,separator]) |
AdoScript: Procedure Concept ​
| ProcedureDefinition: | PROCEDURE [global] ProcedureName[MainParameter] | ||{ FormalProcParameter } { StatementSequence } | | MainParameter : | TypeName: paramName | | FormalProcParameter : | paramName:TypeNameOrReference | | TypeNameOrReference : | TypeName | reference | | TypeName : | string | integer | real | measure | time | array | expression | undefined | | ProcedureName : | keyword | | ProcedureCall : | anyLeoElement |
Example ​
PROCEDURE MYPROC integer: n val: string result: reference
{
SET result: (val + STR n)
}
AdoScript: Functions concept ​
| FunctionDefinition : | FUNCTION functionName[:global] { FormalFuncParameter } return:expression | | FormalFuncParameter : | paramName:TypeName | | TypeName : | string | integer | real | measure | time | expression | undefined |
Example ​
FUNCTION fak n: integer
return: (cond (n <= 1, 1, n * fak (n -1)))
SET m: (fak (10))
Expressions in AdoScript ​
Expressions can be used direct as arguments in calls.
Use closures () in order to delineate arguments of an expression.
Examples : ​
SET n:(copy (vn, 0, 1) + ". " + nn)
IF ( cond( type( n ) = "integer", n = 1, 0 ) )
{ ... }
EXECUTE ("SET n:(" + n + ")")
Summary of AdoScript Language Elements ​
Command execution ​
EXECUTE SEND CC SYSTEM START CALL
Allocation elements ​
SET SETG SETL
Control elements ​
IF ELSIF ELSE WHILE FOR BREAK NEXT EXIT
Definition of Procedures/Functions ​
PROCEDURE FUNCTION
LEO (Return Format) Handling ​
LEO LEO parse
| StatementSeq : | { statement } | | Statement : | Execute | Send | CC | System | Start | Call | ||Set | SetL | SetG | Leo | IfStatement | ||WhileStatement | ||ForStatement | BreakStatement | ||ExitStatement | ||FunctionDefinition | ProcedureDefinition | ||ProcedureCall . | | Execute : | ExecuteFile | ExecuteEx . | | ExecuteEx : | EXECUTE scriptText [scope: ScopeSpec] . | | ScopeSpec : | separate | same | child.| | Send : | SEND msgText to: msgPortName [answer: varName] . | | CC : | CC msgPortName [debug] [raw] anyLeoElement . | | System : | SYSTEM strExpr [with-console-window] [hide] [result: varName] . | | Start : | START strExpr [cmdshow: CmdShow] . | | CmdShow : | showmaximized | showminimized | showminnoactive | shownormal. | | Call : | CALL dll: strExpr function: strExpr { InputParam } ||[result: varName] [freemem: strValue] . | | InputParam : | varName: anyExpr . | | Set : | SET { VarAssignment } . | | SetL : | SETL { VarAssignment } . | | SetG : | SETG { VarAssignment } . | | VarAssignment : : | varName: anyExpr . | | Leo : | LEO [parseCmd] { accessCmd } | | parseCmd : | parse: strinExpr | | accessCmd : | get-elem-count: varName | set-cur-elem-index: intExpr | ||get-keyword: varName | ||is-contained: varName [ : strExpr ] | ||get-str-value: varName [ : strExpr ] | ||get-int-value: varName [ : strExpr ] | ||get-real-value: varName [ : strExpr ] | ||get-tmm-value: varName [ : strExpr ] | ||get-time-value: varName [ : strExpr ] | ||get-modifier: varName : strExpr . | | IfStatement : | IF booleanExpr { StatementSequence } | ||{ ELSIF booleanExpr { StatementSequence } } | ||[ELSE** { StatementSequence }] . | | WhileStatement : | WHILE booleanExpr { StatementSequence }. | | ForStatement : | ForNumStatement | ForTokenStatement . | | ForNumStatement : | FOR varName from: numExpr to: numExpr | ||[by: numExpr] { StatementSequence }. | | ForTokenStatement : | FOR varName in: strExpr [sep: strExpr] | ||{** StatementSequence }. | | BreakStatement : | BREAK. | | NextStatement : | NEXT. | | ExitStatement : | EXIT. | | FunctionDefinition : | FUNCTION functionName [:global] { FormalFuncParameter } | ||return: expression . | | FormalFuncParameter : | [reference] paramName : TypeName . | | ProcedureDefinition : | PROCEDURE [global] ProcedureName | ||[MainParameter] { FormalProcParameter } | ||{ StatementSequence }. | | MainParameter : | TypeName : paramName . | | FormalProcParameter : | paramName : TypeNameOrReference . | | TypeNameOrReference : | TypeName | reference. | | TypeName : | string | integer | real | measure | ||time | array | undefined. | | ProcedureCall : | anyLeoElement . | | ProcedureName : | keyword . |
AdoScript Programming Guidelines ​
If your are programming AdoScript, please consider following rules:
- Files which contain AdoScript should be named file.asc .
- The returning result of a message port command should be copied and commented on the line below the command:
GET_CLASS_NAME classid: intValue
# RESULT ecode:intValue classname:strValue isrel:intValue
- Indent a block with two spaces.
- Don't use the tabulator to indent blocks.
- Decompose the complexity of the programm by using procedures and functions.