.head 0 + Application Description:
ScriptExecute (version 1.02)
----------------------------------------
Original function 'SalExecScript' from SALextension.apl
Author ???
----------------------------------------
Updated by Andrew, 31/07/2002
http://gupta.narod.ru/ctd
----------------------------------------
Description in functional class fcExecScript
.head 1 - Outline Version - 4.0.34
.head 1 + Design-time Settings
.data VIEWINFO
0000: 6F00000001000000 FFFF01000D004347 5458566965775374 6174650400010000
0020: 00000000000D0100 002C000000020000 0003000000FFFFFF FFFFFFFFFFFCFFFF
0040: FFE9FFFFFFFFFFFF FF000000007C0200 004D010000010000 0000000000010000
0060: 000F4170706C6963 6174696F6E497465 6D0400000007436C 61737365730B6345
0080: 7865635363726970 740946756E637469 6F6E731145786563 5363726970744465
00A0: 636C617265
.enddata
.head 2 - Outline Window State: Normal
.head 2 + Outline Window Location and Size
.data VIEWINFO
0000: 6600040003002D00 0000000000000000 0000B71E5D0E0500 1D00FFFF4D61696E
0020: 0000000000000000 0000000000000000 0000003B00010000 00000000000000E9
0040: 1E800A00008600FF FF496E7465726E61 6C2046756E637469 6F6E730000000000
0060: 0000000000000000 0000000000003200 0100000000000000 0000E91E800A0000
0080: DF00FFFF56617269 61626C6573000000 0000000000000000 0000000000000000
00A0: 3000010000000000 00000000F51E100D 0000F400FFFF436C 6173736573000000
00C0: 0000000000000000 0000000000000000
.enddata
.data VIEWSIZE
0000: D000
.enddata
.head 3 - Left: -0.013"
.head 3 - Top: 0.0"
.head 3 - Width: 8.013"
.head 3 - Height: 4.969"
.head 2 + Options Box Location
.data VIEWINFO
0000: D4180909B80B1A00
.enddata
.data VIEWSIZE
0000: 0800
.enddata
.head 3 - Visible? Yes
.head 3 - Left: 4.15"
.head 3 - Top: 1.885"
.head 3 - Width: 3.8"
.head 3 - Height: 2.073"
.head 2 + Class Editor Location
.head 3 - Visible? No
.head 3 - Left: 0.575"
.head 3 - Top: 0.094"
.head 3 - Width: 5.063"
.head 3 - Height: 2.719"
.head 2 + Tool Palette Location
.head 3 - Visible? No
.head 3 - Left: 6.388"
.head 3 - Top: 0.729"
.head 2 - Fully Qualified External References? Yes
.head 2 - Reject Multiple Window Instances? No
.head 2 - Enable Runtime Checks Of External References? Yes
.head 2 - Use Release 4.0 Scope Rules? No
.head 2 - Edit Fields Read Only On Disable? No
.head 1 + Libraries
.head 2 - ! File Include: vtstr.apl
.head 2 - ! File Include: vtarray.apl
.head 1 + Global Declarations
.head 2 + Window Defaults
.head 3 + Tool Bar
.head 4 - Display Style? Etched
.head 4 - Font Name: MS Sans Serif
.head 4 - Font Size: 8
.head 4 - Font Enhancement: System Default
.head 4 - Text Color: System Default
.head 4 - Background Color: System Default
.head 3 + Form Window
.head 4 - Display Style? Etched
.head 4 - Font Name: MS Sans Serif
.head 4 - Font Size: 8
.head 4 - Font Enhancement: System Default
.head 4 - Text Color: System Default
.head 4 - Background Color: System Default
.head 3 + Dialog Box
.head 4 - Display Style? Etched
.head 4 - Font Name: MS Sans Serif
.head 4 - Font Size: 8
.head 4 - Font Enhancement: System Default
.head 4 - Text Color: System Default
.head 4 - Background Color: System Default
.head 3 + Top Level Table Window
.head 4 - Font Name: MS Sans Serif
.head 4 - Font Size: 8
.head 4 - Font Enhancement: System Default
.head 4 - Text Color: System Default
.head 4 - Background Color: System Default
.head 3 + Data Field
.head 4 - Font Name: Use Parent
.head 4 - Font Size: Use Parent
.head 4 - Font Enhancement: Use Parent
.head 4 - Text Color: Use Parent
.head 4 - Background Color: Use Parent
.head 3 + Multiline Field
.head 4 - Font Name: Use Parent
.head 4 - Font Size: Use Parent
.head 4 - Font Enhancement: Use Parent
.head 4 - Text Color: Use Parent
.head 4 - Background Color: Use Parent
.head 3 + Spin Field
.head 4 - Font Name: Use Parent
.head 4 - Font Size: Use Parent
.head 4 - Font Enhancement: Use Parent
.head 4 - Text Color: Use Parent
.head 4 - Background Color: Use Parent
.head 3 + Background Text
.head 4 - Font Name: Use Parent
.head 4 - Font Size: Use Parent
.head 4 - Font Enhancement: Use Parent
.head 4 - Text Color: Use Parent
.head 4 - Background Color: Use Parent
.head 3 + Pushbutton
.head 4 - Font Name: Use Parent
.head 4 - Font Size: Use Parent
.head 4 - Font Enhancement: Use Parent
.head 3 + Radio Button
.head 4 - Font Name: Use Parent
.head 4 - Font Size: Use Parent
.head 4 - Font Enhancement: Use Parent
.head 4 - Text Color: Use Parent
.head 4 - Background Color: Use Parent
.head 3 + Check Box
.head 4 - Font Name: Use Parent
.head 4 - Font Size: Use Parent
.head 4 - Font Enhancement: Use Parent
.head 4 - Text Color: Use Parent
.head 4 - Background Color: Use Parent
.head 3 + Option Button
.head 4 - Font Name: Use Parent
.head 4 - Font Size: Use Parent
.head 4 - Font Enhancement: Use Parent
.head 3 + Group Box
.head 4 - Font Name: Use Parent
.head 4 - Font Size: Use Parent
.head 4 - Font Enhancement: Use Parent
.head 4 - Text Color: Use Parent
.head 4 - Background Color: Use Parent
.head 3 + Child Table Window
.head 4 - Font Name: Use Parent
.head 4 - Font Size: Use Parent
.head 4 - Font Enhancement: Use Parent
.head 4 - Text Color: Use Parent
.head 4 - Background Color: Use Parent
.head 3 + List Box
.head 4 - Font Name: Use Parent
.head 4 - Font Size: Use Parent
.head 4 - Font Enhancement: Use Parent
.head 4 - Text Color: Use Parent
.head 4 - Background Color: Use Parent
.head 3 + Combo Box
.head 4 - Font Name: Use Parent
.head 4 - Font Size: Use Parent
.head 4 - Font Enhancement: Use Parent
.head 4 - Text Color: Use Parent
.head 4 - Background Color: Use Parent
.head 3 + Line
.head 4 - Line Color: Use Parent
.head 3 + Frame
.head 4 - Border Color: Use Parent
.head 4 - Background Color: 3D Face Color
.head 3 + Picture
.head 4 - Border Color: Use Parent
.head 4 - Background Color: Use Parent
.head 2 + Formats
.head 3 - Number: 0'%'
.head 3 - Number: #0
.head 3 - Number: ###000
.head 3 - Number: ###000;'($'###000')'
.head 3 - Date/Time: hh:mm:ss AMPM
.head 3 - Date/Time: M/d/yy
.head 3 - Date/Time: MM-dd-yy
.head 3 - Date/Time: dd-MMM-yyyy
.head 3 - Date/Time: MMM d, yyyy
.head 3 - Date/Time: MMM d, yyyy hh:mm AMPM
.head 3 - Date/Time: MMMM d, yyyy hh:mm AMPM
.head 2 - External Functions
.head 2 + Constants
.data CCDATA
0000: 3000000000000000 0000000000000000 00000000
.enddata
.data CCSIZE
0000: 1400
.enddata
.head 3 - System
.head 3 + User
.head 4 - !
.head 4 - ! String: CRLF = '
'
.head 4 - Number: DT_WindowHandle = 0
.head 4 - Number: DT_FileHandle = 4
.head 4 - Number: DT_SqlHandle = 6
.head 4 - Number: DT_SessionHandle = 8
.head 4 - !
.head 4 - Number: TL_IF = 1
.head 4 - Number: TL_LOOP = 2
.head 4 - Number: TL_WHILE = 3
.head 4 - Number: TL_SELECT = 4
.head 4 - Number: TL_CASE = 5
.head 3 - Enumerations
.head 2 - Resources
.head 2 + Variables
.head 3 - Boolean: abTempVar[*]
.head 3 - Date/Time: adtTempVar[*]
.head 3 - File Handle: afTempVar[*]
.head 3 - Long String: alsTempVar[*]
.head 3 - Number: anTempVar[*]
.head 3 - Session Handle: aSesTempVar[*]
.head 3 - Sql Handle: aSqlTempVar[*]
.head 3 - String: asTempVar[*]
.head 3 - Window Handle: ahWndTempVar[*]
.head 3 - !
.head 3 - Boolean: abTempVarArr[*, 999 ]
.head 3 - Date/Time: adtTempVarArr[*, 999 ]
.head 3 - File Handle: afTempVarArr[*, 99 ]
.head 3 - Long String: alsTempVarArr[*, 999 ]
.head 3 - Number: anTempVarArr[*, 999 ]
.head 3 - Session Handle: aSesTempVarArr[*, 999 ]
.head 3 - Sql Handle: aSqlTempVarArr[*, 99 ]
.head 3 - String: asTempVarArr[*, 999 ]
.head 3 - Window Handle: ahWndTempVarArr[*, 99 ]
.head 3 - ! -------------------------------------------------------
.head 2 + Internal Functions
.head 3 + Function: SalExecScript
.head 4 - Description:
ScriptExecute (version 1.02)
----------------------------------------
Original function 'SalExecScript' from SALextension.apl
Author ???
----------------------------------------
Updated by Andrew, 31/07/2002
http://gupta.narod.ru/ctd
----------------------------------------
Description in functional class fcExecScript
.head 4 + Returns
.head 5 - Boolean:
.head 4 + Parameters
.head 5 - String: fpsFileName
.head 5 - String: strContext
.head 4 - Static Variables
.head 4 + Local variables
.head 5 - FunctionalVar: objExecScript
.head 6 - Class: cExecScript
.head 4 + Actions
.head 5 - Return objExecScript.ExecScript ( fpsFileName, strContext )
.head 3 + Function: SetNumber
.head 4 - Description:
.head 4 - Returns
.head 4 + Parameters
.head 5 - Receive Number: p
.head 5 - Number: p1
.head 4 - Static Variables
.head 4 - Local variables
.head 4 + Actions
.head 5 - Set p = p1
.head 3 + Function: SetString
.head 4 - Description:
.head 4 - Returns
.head 4 + Parameters
.head 5 - Receive String: p
.head 5 - String: p1
.head 4 - Static Variables
.head 4 - Local variables
.head 4 + Actions
.head 5 - Set p = p1
.head 3 + Function: SetBoolean
.head 4 - Description:
.head 4 - Returns
.head 4 + Parameters
.head 5 - Receive Boolean: p
.head 5 - Boolean: p1
.head 4 - Static Variables
.head 4 - Local variables
.head 4 + Actions
.head 5 - Set p = p1
.head 3 + Function: SetDateTime
.head 4 - Description:
.head 4 - Returns
.head 4 + Parameters
.head 5 - Receive Date/Time: p
.head 5 - Date/Time: p1
.head 4 - Static Variables
.head 4 - Local variables
.head 4 + Actions
.head 5 - Set p = p1
.head 3 + Function: SetFileHandle
.head 4 - Description:
.head 4 - Returns
.head 4 + Parameters
.head 5 - Receive File Handle: p
.head 5 - File Handle: p1
.head 4 - Static Variables
.head 4 - Local variables
.head 4 + Actions
.head 5 - Set p = p1
.head 3 + Function: SetLongString
.head 4 - Description:
.head 4 - Returns
.head 4 + Parameters
.head 5 - Receive Long String: p
.head 5 - Long String: p1
.head 4 - Static Variables
.head 4 - Local variables
.head 4 + Actions
.head 5 - Set p = p1
.head 3 + Function: SetSessionHandle
.head 4 - Description:
.head 4 - Returns
.head 4 + Parameters
.head 5 - Receive Session Handle: p
.head 5 - Session Handle: p1
.head 4 - Static Variables
.head 4 - Local variables
.head 4 + Actions
.head 5 - Set p = p1
.head 3 + Function: SetSqlHandle
.head 4 - Description:
.head 4 - Returns
.head 4 + Parameters
.head 5 - Receive Sql Handle: p
.head 5 - Sql Handle: p1
.head 4 - Static Variables
.head 4 - Local variables
.head 4 + Actions
.head 5 - Set p = p1
.head 3 + Function: SetWindowHandle
.head 4 - Description:
.head 4 - Returns
.head 4 + Parameters
.head 5 - Receive Window Handle: p
.head 5 - Window Handle: p1
.head 4 - Static Variables
.head 4 - Local variables
.head 4 + Actions
.head 5 - Set p = p1
.head 2 - Named Menus
.head 2 + Class Definitions
.data RESOURCE 0 0 1 2582542047
0000: 9100000065000000 0000000000000000 0200000100FFFF01 00160000436C6173
0020: 73566172004F7574 6C696E6552006567 496E666F1E003C00 000C660063457865
0040: 6353637200697074 5A00000003780000 0002200400000001 0000FFE080010000
0060: 009F0400C000010D 000000FF7F117000 00000100FFFF01
.enddata
.head 3 + Functional Class: cExecScript
.head 4 - Description:
version 1.02
---------------------------------------------------------------------------------
Original function 'ExecScript' from SALextension.apl
Author ???
---------------------------------------------------------------------------------
Updated by Andrew, 31/07/2002
http://gupta.narod.ru/ctd
v 1.02
- New operators added
Select Case
EndSelectCase
Case
EndCase
Default
Return
Else If
- Variables declaration added (one-dimensional arrays allowed)
ATTENTION: Any variable name must be UNIQUE!
I recommend use 2-3 underline in ALL variable names
Number
Boolean
Date/Time
String
Long String
Window Handle
Sql Handle
File Handle
- New section added
Variables
Actions
- Some constants added
DT_WindowHandle
DT_FileHandle
DT_SqlHandle
- SalExecScript routine moved to functional class fcExecScript
- Changed
SalAnsiToOem
SalOemToAnsi
v 1.01
- New operators added
Loop
EndLoop
Break
Else
While
EndWhile
Call
- Extended error message
- All variables was moved to global area
- You can set execution context now
- Comment line has an exclamation mark (!) at the beginning of the line
- New format:
Boolean ExecScript ( strScriptName, sContext )
- You can inverse quiet mode:
bQuietMode = ExecScript ( '', '' )
****************************************************************************
Runs a script. (Like the expressiondialog of CTD in debugmode)
- comments start with a semicolon ';' or '!'
- no 'Call' in front of function calls (like in the expressions dialog)
- as variables for each datatype there are 3 variables and one array predefined
(see down)
- you can also use normal variables which are accessible in the context
(when not, full qualification should help)
- 'While' and 'Loop' supported until now !!!
-an 'If' construct must end with an 'Endif'
sTemp1, sTemp2, sTemp3, asTemp[*]
strTemp1, strTemp2, strTemp3, astrTemp[*]
nTemp1, nTemp2, nTemp3, anTemp[*]
intTemp1, intTemp2, intTemp3, aintTemp[*]
dTemp1, dTemp2, dTemp3, adTemp[*]
dtTemp1, dtTemp2, dtTemp3, adtTemp[*]
hWndTemp1, hWndTemp2, hWndTemp3, ahWndTemp[*]
bTemp1, bTemp2, bTemp3, abTemp[*]
SqlTemp1, SqlTemp2, SqlTemp3, aSqlTemp[*]
lsTemp1, lsTemp2, lsTemp3, alsTemp[*]
fTemp1, fTemp2, fTemp3, afTemp[*]
Example: Test.sal
Set df1 = 'Test'
if strTemp1 = df1
Set df1 = 'GehtXX !!!'
endif
;Set df2 = df3
Set df1 = df1 || ' geht doch'
Set hWndTemp1 = df2
Set strTemp1 = 'Joh'
SalSetWindowText(hWndTemp1 ,strTemp1)
SalSetFocus(df1)
Set ahWndTemp[1] = df1
SalMessageBeep(-1)
SalSetFocus(df1)
; -------------Sql-Test-----------------
SqlConnect(SqlTemp1)
SqlPrepareAndExecute(SqlTemp1,"SELECT count(*) into :strTemp1 From mis.TB_objects where rownum < 20")
SqlFetchNext(SqlTemp1,nTemp1)
SalMessageBox(strTemp1,'Test',0)
SqlDisconnect(SqlTemp1)
Call ExecScript ( 'Test.sal', SalContextCurrent() )
.head 4 - Derived From
.head 4 + Class Variables
.head 5 - String: asVarToReal[*]
.head 5 - Boolean: bInit
.head 5 - Boolean: bQuietMode
.head 4 + Instance Variables
.head 5 - String: asVariables[*]
.head 5 - String: asVariablesReal[*]
.head 5 - Number: anVariables[8]
.head 5 - Number: anArrays[8]
.head 5 - Number: nMaxVariable
.head 5 - !
.head 5 - Boolean: bLevelExecute[*]
.head 5 - Number: nLevelType[*]
.head 5 - Number: nGotoLine[*]
.head 5 - Number: nLevel
.head 5 - !
.head 5 - Long String: alsLine [ * ]
.head 5 - Long String: lsLine
.head 5 - Number: nCurLine
.head 5 - !
.head 5 - Number: nError
.head 5 - Number: nErrorPos
.head 5 - !
.head 5 - String: sFileName
.head 5 - String: sContext
.head 4 + Functions
.head 5 + Function: ExecScript
.head 6 - Description:
.head 6 + Returns
.head 7 - Boolean:
.head 6 + Parameters
.head 7 - String: sFileNamePar
.head 7 - String: sContextPar
.head 6 - Static Variables
.head 6 + Local variables
.head 7 - Boolean: lbResult
.head 7 - File Handle: lfhScript
.head 7 - Number: nMaxLine
.head 7 - Number: nLoop
.head 6 + Actions
.head 7 - Set sFileName = sFileNamePar
.head 7 - Set sContext = sContextPar
.head 7 + If NOT bInit
.head 8 - Call ExecScriptInit ( )
.head 8 - Set bInit = TRUE
.head 7 + If sFileName = ''
.head 8 - Set bQuietMode = NOT bQuietMode
.head 8 - Return bQuietMode
.head 7 + Else
.head 8 - Set lbResult = FALSE
.head 8 - Set bLevelExecute[0] = TRUE
.head 8 - Set nGotoLine[0] = -1
.head 8 - !
.head 8 + If SalFileOpen(lfhScript, sFileName, OF_Read)
.head 9 - Call SalWaitCursor( TRUE )
.head 9 - Set lbResult = TRUE
.head 9 - ! read Script
.head 9 + While SalFileGetStr(lfhScript, lsLine, 4096)
.head 10 - ! when comment, or nothing -> ignore
.head 10 + If SalStrLeftX ( SalStrTrimX ( lsLine), 1 ) != ';'
and SalStrLeftX ( SalStrTrimX ( lsLine), 1 ) != '!'
and SalStrTrimX(lsLine) != ''
.head 11 - !
.head 11 - ! security Check
.head 11 + If SalStrScan(lsLine,'SqlPassword') > -1
.head 12 - Set lsLine = VisStrSubstitute(lsLine, 'SqlPassword', '')
.head 12 + If not bQuietMode
.head 13 - Call SalMessageBox("Script '" || sFileName || "' Security Alert !",
"Warning", MB_Ok | MB_IconExclamation)
.head 11 - !
.head 11 - ! ok Execute line
.head 11 + Else
.head 12 - Set nCurLine = nMaxLine
.head 12 - Set nMaxLine = nMaxLine + 1
.head 12 - Call ExecScriptReplaceVarReal ( lsLine )
.head 12 - Set alsLine [ nMaxLine ] = lsLine
.head 12 + Loop
.head 13 - Set nCurLine = nCurLine + 1
.head 13 + If nCurLine > nMaxLine
.head 14 - Break
.head 13 - Set lsLine = VisStrTrim( alsLine [ nCurLine ] )
.head 13 + If ExecScriptMain ( )
.head 14 - Break
.head 12 - !
.head 10 + If nError != 0
.head 11 - Break
.head 9 - !
.head 9 - Call SalWaitCursor( FALSE )
.head 9 - Call SalFileClose(lfhScript)
.head 8 + Else
.head 9 + If not bQuietMode
.head 10 - Call SalMessageBox("Script '" || sFileName || "' not found !",
"Error", MB_Ok | MB_IconExclamation)
.head 8 - Return lbResult
.head 5 + Function: ExecScriptAddVar
.head 6 - Description: Add new variable
.head 6 + Returns
.head 7 - Boolean:
.head 6 + Parameters
.head 7 - Number: nType
.head 7 - String: lsLine
.head 6 - Static Variables
.head 6 + Local variables
.head 7 - Number: nPos
.head 7 - Number: nIndex
.head 6 + Actions
.head 7 - Set nIndex = ExecScriptFindVar ( lsLine )
.head 7 + If nIndex >= 0
.head 8 - Return FALSE
.head 7 + Else
.head 8 - Set nPos = SalStrScan( lsLine, '[' )
.head 8 + If nPos >= 0
.head 9 - Set lsLine = VisStrTrim( SalStrLeftX( lsLine, nPos ) )
.head 9 - Set asVariablesReal [ nMaxVariable ] = asVarToReal [ nType ] || 'Arr[' ||
SalNumberToStrX( anArrays [ nType ], 0 ) || ']'
.head 9 - Set anArrays [ nType ] = anArrays [ nType ] + 1
.head 8 + Else
.head 9 - Set anVariables [ nType ] = anVariables [ nType ] + 1
.head 9 - Set asVariablesReal [ nMaxVariable ] = asVarToReal [ nType ] || '[' ||
SalNumberToStrX( anVariables [ nType ], 0 ) || ']'
.head 8 - !
.head 8 - Set asVariables [ nMaxVariable ] = lsLine
.head 8 - Set nMaxVariable = nMaxVariable + 1
.head 8 - !
.head 8 - Return TRUE
.head 5 + Function: ExecScriptReplaceVarReal
.head 6 - Description: Add new variable
.head 6 - Returns
.head 6 + Parameters
.head 7 - Receive String: lsLine
.head 6 - Static Variables
.head 6 + Local variables
.head 7 - Number: nCurVar
.head 6 + Actions
.head 7 - ! If SalStrScan( SalStrLowerX ( lsLine ), '\_\_' ) >= 0
.head 7 - Set nCurVar = 0
.head 7 + While nCurVar < nMaxVariable
.head 8 - Set lsLine = VisStrSubstitute( lsLine, asVariables [ nCurVar ], asVariablesReal [ nCurVar ] )
.head 8 - Set nCurVar = nCurVar + 1
.head 7 - Set lsLine = VisStrSubstitute( lsLine, '][', ',' )
.head 7 - Set lsLine = VisStrSubstitute( lsLine, '] [', ',' )
.head 5 + Function: ExecScriptFindVar
.head 6 - Description:
.head 6 + Returns
.head 7 - Number:
.head 6 + Parameters
.head 7 - Receive String: lsLine
.head 6 - Static Variables
.head 6 + Local variables
.head 7 - Number: nPos
.head 6 + Actions
.head 7 - Set nPos = SalStrScan( lsLine, '!' )
.head 7 + If nPos >= 0
.head 8 - Set lsLine = VisStrTrim( SalStrLeftX( lsLine, nPos ) )
.head 7 - Return VisArrayFindString ( asVariables, lsLine)
.head 5 + Function: ExecScriptInit
.head 6 - Description:
.head 6 - Returns
.head 6 - Parameters
.head 6 - Static Variables
.head 6 - Local variables
.head 6 + Actions
.head 7 - Set asVarToReal [ DT_Boolean ] = 'abTempVar'
.head 7 - Set asVarToReal [ DT_DateTime ] = 'adtTempVar'
.head 7 - Set asVarToReal [ DT_Number ] = 'anTempVar'
.head 7 - Set asVarToReal [ DT_String ] = 'asTempVar'
.head 7 - Set asVarToReal [ DT_LongString ] = 'alsTempVar'
.head 7 - Set asVarToReal [ DT_WindowHandle ] = 'ahWndTempVar'
.head 7 - Set asVarToReal [ DT_FileHandle ] = 'afTempVar'
.head 7 - Set asVarToReal [ DT_SqlHandle ] = 'aSqlTempVar'
.head 7 - Set asVarToReal [ DT_SessionHandle ] = 'aSesTempVar'
.head 5 + Function: ExecScriptMain
.head 6 - Description:
.head 6 + Returns
.head 7 - Boolean:
.head 6 - Parameters
.head 6 - Static Variables
.head 6 + Local variables
.head 7 - Number: nType
.head 7 - Number: nReturn
.head 7 - String: strReturn
.head 7 - Date/Time: dtReturn
.head 7 - Window Handle: hWndReturn
.head 7 - String: sWord
.head 7 - Number: nLevelBreak
.head 6 + Actions
.head 7 - Set sWord = ExecScriptGetWord ( )
.head 7 + If sWord = 'if'
.head 8 - Set nLevel = nLevel + 1
.head 8 - Set nLevelType[ nLevel ] = TL_IF
.head 8 - Set bLevelExecute[ nLevel ] = FALSE
.head 8 + If bLevelExecute[ nLevel - 1]
.head 9 - Set nType = SalCompileAndEvaluate(lsLine ,nError, nErrorPos, nReturn, strReturn, dtReturn, hWndReturn, bQuietMode, sContext )
.head 9 - ! when 'if' was true
.head 9 + If nReturn = 1
.head 10 - Set bLevelExecute[ nLevel ] = TRUE
.head 7 + Else If sWord = 'else'
.head 8 + If nLevelType[ nLevel ] = TL_IF
.head 9 + If bLevelExecute [ nLevel ]
.head 10 - Set bLevelExecute [ nLevel ] = FALSE
.head 9 + Else If bLevelExecute [ nLevel - 1 ]
.head 10 - Set bLevelExecute [ nLevel ] = TRUE
.head 10 + If SalStrLowerX ( SalStrLeftX( lsLine, 7 ) ) = 'else if'
.head 11 - Set lsLine = 'if ' || SalStrRightX( lsLine, SalStrLength( lsLine ) - 7 )
.head 11 - Set nType = SalCompileAndEvaluate(lsLine ,nError, nErrorPos, nReturn, strReturn, dtReturn, hWndReturn, bQuietMode, sContext )
.head 11 - ! when 'if' was false
.head 11 + If nReturn != 1
.head 12 - Set bLevelExecute [ nLevel ] = FALSE
.head 8 + Else
.head 9 - Set nError = -TL_IF
.head 7 + Else If sWord = 'endif'
.head 8 + If nLevelType[ nLevel ] = TL_IF
.head 9 - Set nLevel = nLevel - 1
.head 8 + Else
.head 9 - Set nError = -TL_IF
.head 7 + Else If sWord = 'loop'
.head 8 - Set nLevel = nLevel + 1
.head 8 - Set nGotoLine[ nLevel ] = nCurLine
.head 8 - Set nLevelType[ nLevel ] = TL_LOOP
.head 8 - Set bLevelExecute[ nLevel ] = bLevelExecute[ nLevel - 1 ]
.head 7 + Else If sWord = 'endloop'
.head 8 + If nLevelType[ nLevel ] = TL_LOOP
.head 9 + If bLevelExecute[ nLevel ]
.head 10 - Set nCurLine = nGotoLine[ nLevel ]
.head 9 + Else
.head 10 - Set nLevel = nLevel - 1
.head 8 + Else
.head 9 - Set nError = -TL_LOOP
.head 7 + Else If sWord = 'break'
.head 8 + If bLevelExecute [ nLevel ]
.head 9 - Set nLevelBreak = nLevel
.head 9 + While nLevelBreak > 0
.head 10 + If bLevelExecute[ nLevelBreak ]
AND nLevelType[ nLevelBreak ] = TL_CASE
.head 11 - Set bLevelExecute[ nLevelBreak - 1 ] = FALSE
.head 10 - Set bLevelExecute[ nLevelBreak ] = FALSE
.head 10 + If nLevelType[ nLevelBreak ] = TL_LOOP
OR nLevelType[ nLevelBreak ] = TL_WHILE
OR nLevelType[ nLevelBreak ] = TL_CASE
.head 11 - Break
.head 10 - Set nLevelBreak = nLevelBreak - 1
.head 9 + If nLevelType[ nLevelBreak ] != TL_LOOP
AND nLevelType[ nLevelBreak ] != TL_WHILE
AND nLevelType[ nLevelBreak ] != TL_CASE
.head 10 - Set nError = -TL_LOOP
.head 7 + Else If sWord = 'return'
.head 8 - Set nLevelBreak = nLevel
.head 8 + While nLevelBreak >= 0
.head 9 - Set bLevelExecute[ nLevelBreak ] = FALSE
.head 9 - Set nLevelBreak = nLevelBreak - 1
.head 7 + Else If sWord = 'while'
.head 8 - Set nLevel = nLevel + 1
.head 8 - Set bLevelExecute[ nLevel ] = FALSE
.head 8 - Set nLevelType[ nLevel ] = TL_WHILE
.head 8 - Set nGotoLine[ nLevel ] = nCurLine - 1
.head 8 + If bLevelExecute [ nLevel - 1 ]
.head 9 - Set lsLine = 'if ' || SalStrRightX( lsLine, SalStrLength( lsLine ) - 5 )
.head 9 - Set nType = SalCompileAndEvaluate(lsLine ,nError, nErrorPos, nReturn, strReturn, dtReturn, hWndReturn, bQuietMode, sContext )
.head 9 - ! when 'while' was true
.head 9 + If nReturn = 1
.head 10 - Set bLevelExecute[ nLevel ] = TRUE
.head 7 + Else If sWord = 'endwhile'
.head 8 + If nLevelType[ nLevel ] = TL_WHILE
.head 9 + If bLevelExecute[ nLevel ]
.head 10 - Set nCurLine = nGotoLine[ nLevel ]
.head 9 - Set nLevel = nLevel - 1
.head 8 + Else
.head 9 - Set nError = -TL_WHILE
.head 7 + Else If sWord = 'select'
AND SalStrLowerX ( SalStrLeftX( lsLine, 11 ) ) = 'select case'
.head 8 - Set nLevel = nLevel + 1
.head 8 - Set bLevelExecute[ nLevel ] = FALSE
.head 8 - Set nLevelType[ nLevel ] = TL_SELECT
.head 8 - Set nGotoLine[ nLevel ] = nCurLine
.head 8 + If bLevelExecute [ nLevel - 1 ]
.head 9 - Set alsLine [ nCurLine ] = SalStrRightX( lsLine, SalStrLength( lsLine ) - 11 )
.head 9 - Set bLevelExecute[ nLevel ] = TRUE
.head 9 + !
.head 10 + Select Case nVar
.head 11 + Case 1
.head 12 - ...
.head 12 - Break
.head 11 - EndCase
.head 11 + Default
.head 12 - ...
.head 10 - EndSelectCase
.head 7 + Else If sWord = 'case'
.head 8 + If nLevelType[ nLevel ] = TL_SELECT
.head 9 - Set nLevel = nLevel + 1
.head 9 - Set bLevelExecute[ nLevel ] = FALSE
.head 9 - Set nLevelType[ nLevel ] = TL_CASE
.head 9 + If bLevelExecute [ nLevel - 1 ]
.head 10 - Set lsLine = 'if ' || alsLine [ nGotoLine[ nLevel - 1 ] ] || '=' ||
SalStrRightX( lsLine, SalStrLength( lsLine ) - 5 )
.head 10 - Set nType = SalCompileAndEvaluate(lsLine ,nError, nErrorPos, nReturn, strReturn, dtReturn, hWndReturn, bQuietMode, sContext )
.head 10 + If nReturn = 1
.head 11 - Set bLevelExecute[ nLevel ] = TRUE
.head 8 + Else
.head 9 - Set nError = -TL_SELECT
.head 7 + Else If sWord = 'endcase'
.head 8 + If nLevelType[ nLevel ] = TL_CASE
.head 9 - Set nLevel = nLevel - 1
.head 8 + Else
.head 9 - Set nError = -TL_CASE
.head 7 + Else If sWord = 'endselectcase'
.head 8 + If nLevelType[ nLevel ] = TL_SELECT
.head 9 - Set nLevel = nLevel - 1
.head 8 + Else
.head 9 - Set nError = -TL_SELECT
.head 7 + Else If sWord = 'default'
.head 8 + If nLevelType[ nLevel ] != TL_SELECT
.head 9 - Set nError = -TL_SELECT
.head 7 + Else If sWord = 'call'
.head 8 + If bLevelExecute [ nLevel ]
.head 9 - Set lsLine = VisStrTrim( SalStrRightX( lsLine, SalStrLength( lsLine ) - 5 ) )
.head 9 - Set nType = SalCompileAndEvaluate(lsLine ,nError, nErrorPos, nReturn, strReturn, dtReturn, hWndReturn, bQuietMode, sContext )
.head 9 + If nError > 0
.head 10 - Set nErrorPos = nErrorPos + 5
.head 7 + Else If sWord = 'variables'
.head 8 - !
.head 7 + Else If sWord = 'actions'
.head 8 - !
.head 7 + ! Else If sWord = 'set'
.head 8 + If bLevelExecute [ nLevel ]
.head 9 - Set nType = SalCompileAndEvaluate(lsLine ,nError, nErrorPos, nReturn, strReturn, dtReturn, hWndReturn, bQuietMode, sContext )
.head 7 + Else If bLevelExecute [ nLevel ]
.head 8 + If nLevel != 0 OR NOT ExecScriptDeclare ( )
.head 9 - Set nType = SalCompileAndEvaluate(lsLine ,nError, nErrorPos, nReturn, strReturn, dtReturn, hWndReturn, bQuietMode, sContext )
.head 7 - !
.head 7 + If nError = 0
.head 8 - Return FALSE
.head 7 + Else
.head 8 - Return ExecScriptError ( )
.head 5 + Function: ExecScriptError
.head 6 - Description:
.head 6 + Returns
.head 7 - Boolean:
.head 6 - Parameters
.head 6 - Static Variables
.head 6 + Local variables
.head 7 - String: sCurLine
.head 7 - Number: nLen
.head 7 - String: sError
.head 6 + Actions
.head 7 - Set sCurLine = alsLine [ nCurLine ]
.head 7 + If nErrorPos > 0
.head 8 - Set nLen = SalStrLength( sCurLine )
.head 8 + If nErrorPos <= nLen
.head 9 - Set sCurLine = SalStrLeftX( sCurLine, nErrorPos ) || "***" ||
SalStrRightX( sCurLine, nLen - nErrorPos )
.head 8 + Else
.head 9 - Set sCurLine = sCurLine || "***"
.head 7 + If nError > 0
.head 8 - Set sError = "number: " || SalNumberToStrX( nError, 0 )
.head 7 + Else If nError < 0
.head 8 + Select Case -nError
.head 9 + Case TL_IF
.head 10 - Set sError = 'IF not found'
.head 10 - Break
.head 9 + Case TL_LOOP
.head 10 - Set sError = 'LOOP not found'
.head 10 - Break
.head 9 + Case TL_WHILE
.head 10 - Set sError = 'WHILE not found'
.head 10 - Break
.head 9 + Case TL_CASE
.head 10 - Set sError = 'CASE not found'
.head 10 - Break
.head 9 + Case TL_SELECT
.head 10 - Set sError = 'SELECT not found'
.head 10 - Break
.head 7 + If SalMessageBox(
"Script name: " || sFileName || '
' || "Line number: " || SalNumberToStrX( nCurLine, 0 ) || '
'
|| "Error " || sError || '
'
|| "Position: "
|| SalNumberToStrX( nErrorPos, 0 ) || ' (marked ***).
' || "String (ANSI): " || sCurLine || '
' || "String (OEM): " || SalFmtOemToAnsi ( sCurLine ) || '
' || "Continue?",
"Error",
MB_YesNo | MB_IconQuestion ) = IDNO
.head 8 - Return TRUE
.head 7 + Else
.head 8 - Return FALSE
.head 5 + Function: ExecScriptDeclare
.head 6 - Description:
.head 6 - Returns
.head 6 - Parameters
.head 6 - Static Variables
.head 6 + Local variables
.head 7 - Boolean: bDeclare
.head 7 - String: sWord
.head 6 + Actions
.head 7 - Set bDeclare = TRUE
.head 7 - Set sWord = ExecScriptGetWord ( )
.head 7 - !
.head 7 - ! 'Number' ??
.head 7 + If sWord = 'number:'
.head 8 - Set lsLine = VisStrTrim( SalStrRightX( lsLine, SalStrLength( lsLine ) - 7 ) )
.head 8 - Call ExecScriptAddVar ( DT_Number, lsLine )
.head 7 - !
.head 7 - ! 'Boolean' ??
.head 7 + Else If sWord = 'boolean:'
.head 8 - Set lsLine = VisStrTrim( SalStrRightX( lsLine, SalStrLength( lsLine ) - 8 ) )
.head 8 - Call ExecScriptAddVar ( DT_Boolean, lsLine )
.head 7 - !
.head 7 - ! 'String' ??
.head 7 + Else If sWord = 'string:'
.head 8 - Set lsLine = VisStrTrim( SalStrRightX( lsLine, SalStrLength( lsLine ) - 7 ) )
.head 8 - Call ExecScriptAddVar ( DT_String, lsLine )
.head 7 - !
.head 7 - ! 'DateTime' ??
.head 7 + Else If sWord = 'date/time:'
.head 8 - Set lsLine = VisStrTrim( SalStrRightX( lsLine, SalStrLength( lsLine ) - 10 ) )
.head 8 - Call ExecScriptAddVar ( DT_DateTime, lsLine )
.head 7 - !
.head 7 - ! 'LongString' ??
.head 7 + Else If sWord = 'longstring:'
.head 8 - Set lsLine = VisStrTrim( SalStrRightX( lsLine, SalStrLength( lsLine ) - 11 ) )
.head 8 - Call ExecScriptAddVar ( DT_LongString, lsLine )
.head 7 - !
.head 7 - ! 'WindowHandle' ??
.head 7 + Else If sWord = 'windowhandle:'
.head 8 - Set lsLine = VisStrTrim( SalStrRightX( lsLine, SalStrLength( lsLine ) - 13 ) )
.head 8 - Call ExecScriptAddVar ( DT_WindowHandle, lsLine )
.head 7 - !
.head 7 - ! 'FileHandle' ??
.head 7 + Else If sWord = 'filehandle:'
.head 8 - Set lsLine = VisStrTrim( SalStrRightX( lsLine, SalStrLength( lsLine ) - 11 ) )
.head 8 - Call ExecScriptAddVar ( DT_FileHandle, lsLine )
.head 7 - !
.head 7 - ! 'SqlHandle' ??
.head 7 + Else If sWord = 'sqlhandle:'
.head 8 - Set lsLine = VisStrTrim( SalStrRightX( lsLine, SalStrLength( lsLine ) - 11 ) )
.head 8 - Call ExecScriptAddVar ( DT_SqlHandle, lsLine )
.head 7 - !
.head 7 - ! 'SessionHandle' ??
.head 7 + Else If sWord = 'sessionhandle:'
.head 8 - Set lsLine = VisStrTrim( SalStrRightX( lsLine, SalStrLength( lsLine ) - 14 ) )
.head 8 - Call ExecScriptAddVar ( DT_SessionHandle, lsLine )
.head 7 - !
.head 7 + Else
.head 8 - Set bDeclare = FALSE
.head 7 - !
.head 7 - Return bDeclare
.head 5 + Function: ExecScriptGetWord
.head 6 - Description:
.head 6 + Returns
.head 7 - String:
.head 6 - Parameters
.head 6 - Static Variables
.head 6 + Local variables
.head 7 - String: sLine
.head 7 - Number: nPos
.head 6 + Actions
.head 7 - Set sLine = SalStrLowerX ( lsLine )
.head 7 - Set nPos = SalStrScan( sLine, ' ' )
.head 7 + If nPos < 0
.head 8 - Set nPos = SalStrScan( sLine, ' ' )
.head 7 + If nPos < 0
.head 8 - Return sLine
.head 7 + Else
.head 8 - Return SalStrLeftX( sLine, nPos )
.head 2 + Default Classes
.head 3 - MDI Window: cBaseMDI
.head 3 - Form Window:
.head 3 - Dialog Box:
.head 3 - Table Window:
.head 3 - Quest Window:
.head 3 - Data Field:
.head 3 - Spin Field:
.head 3 - Multiline Field:
.head 3 - Pushbutton:
.head 3 - Radio Button:
.head 3 - Option Button:
.head 3 - Check Box:
.head 3 - Child Table:
.head 3 - Quest Child Window: cQuickDatabase
.head 3 - List Box:
.head 3 - Combo Box:
.head 3 - Picture:
.head 3 - Vertical Scroll Bar:
.head 3 - Horizontal Scroll Bar:
.head 3 - Column:
.head 3 - Background Text:
.head 3 - Group Box:
.head 3 - Line:
.head 3 - Frame:
.head 3 - Custom Control:
.head 3 - ActiveX:
.head 2 - Application Actions
Return to http://gupta.narod.ru/