Ticket #163: AutoTestManager.au3

File AutoTestManager.au3, 35.4 KB (added by bowmore, 16 years ago)

Script causing problem with Obsfuscator.exe

Line 
1#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
2#AutoIt3Wrapper_Icon=Boss1.ICO
3#AutoIt3Wrapper_Outfile=AutoTestManager.exe
4#AutoIt3Wrapper_Compression=4
5#AutoIt3Wrapper_Res_Comment=This tool is used to sequence multiple test jobs.
6#AutoIt3Wrapper_Res_Description=AutoIt Test Manager
7#AutoIt3Wrapper_Res_Fileversion=0.8.2990.1
8#AutoIt3Wrapper_Res_FileVersion_AutoIncrement=p
9#AutoIt3Wrapper_Res_LegalCopyright=Roy Kirby 2008
10#AutoIt3Wrapper_Res_SaveSource=y
11#AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%
12#AutoIt3Wrapper_Res_Field=Author|Roy B Kirby
13#AutoIt3Wrapper_Res_Field=Email|roykirby@lineone.net
14#AutoIt3Wrapper_Res_Field=Product Name|Auto Test Runner
15#AutoIt3Wrapper_Res_Field=Product Version|0.8
16#AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%
17#AutoIt3Wrapper_Res_Field=Compile Date|%date% %time%
18#AutoIt3Wrapper_Au3Check_Stop_OnWarning=Y
19#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
20#AutoIt3Wrapper_Run_Before=MKDIR "%scriptdir%\Release"
21#AutoIt3Wrapper_Run_After=copy "%out%" "%scriptdir%\Release\%scriptfile%.%fileversion%.exe"
22#AutoIt3Wrapper_Run_After=copy "%in%" "%scriptdir%\Release\%scriptfile%.%fileversion%.au3"
23#AutoIt3Wrapper_Run_After=copy "%out%" "%scriptdir%\Release
24#AutoIt3Wrapper_Run_Tidy=y
25#Tidy_Parameters=/tc 0 /gd /sci 0 /sdp"'\WinMerge\WinMerge.exe' '%new%' '%old%'"
26#AutoIt3Wrapper_Run_Obfuscator=y
27#Obfuscator_Parameters=/striponly
28#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
29#AutoIt3Wrapper_Run_Debug_Mode=N
30
31;#AutoIt3Wrapper_PlugIn_Funcs=
32#cs Introduction
33        Script Name:AutoTestManager
34        Purpose:This tool is used to sequence multiple automated tesing jobs.
35        Similar to Rational Test Manager.
36#ce
37#Region ### Set Options
38Opt("WinWaitDelay", 100)
39Opt("WinTitleMatchMode", 4)
40Opt("WinDetectHiddenText", 1)
41Opt("MouseCoordMode", 2)
42Opt("MustDeclareVars", 1)
43#EndRegion ### Set Options
44#Region Declare
45Global Const $AT_ROOT_DIR = "H:\AtuoItTestControl"
46Global $g_nMsg = 0
47Global $g_fDEBUG = False
48Global $g_fRun = False
49Global $g_fAllJobsDone = False
50Global $g_fProcessing = False
51Global $g_sTaskType = ''
52Global $g_sJobControlFolder = ''
53Global $g_sStartDateTime = ''
54Global $g_sStopDateTime = ''
55Global $g_sTestRunID = ''
56Global $sTitle = StringLeft(@ScriptName, StringInStr(@ScriptName, ".") - 1)
57Global $GUI_frmMainCaption = $sTitle & " - Ver " & FileGetVersion(@ScriptFullPath)
58Global $g_aStatusBarParts[2] = [350, -1]
59Global $g_aStatusBarPartsText[2] = ["Ready", ""]
60Global $hWndStartDate = 0
61Global $hWndStopDate = 0
62Global $g_iSleep = 10
63Global $g_Computers_Status[250][5]
64Global $g_hDB = 0
65Global $g_aStatusBarParts[3] = [150, 440, -1]
66Global $g_aStatusBarPartsText[3] = ["Ready", "", "000:00:00"]
67Global $g_aComputers = 0
68Global $g_sRunStartTime = ''
69Global $g_iPercentDone = 0
70Global $g_iStatus, $g_aResult, $g_iRows, $g_iColumns
71#EndRegion Declare
72
73#Region Includes
74#include <_os_File.au3>
75#include <_os_TileUtilities.au3>
76#include <ButtonConstants.au3>
77#include <Date.au3>
78#include <SQLite.au3>
79#include <SQLite.dll.au3>
80#include <WindowsConstants.au3>
81#include <GUIConstantsEx.au3>
82#include <GuiListView.au3>
83#include <GuiStatusBar.au3>
84#include <ProgressConstants.au3>
85#EndRegion Includes
86
87#Region ### START Koda GUI section ### Form=X:\AutoIt3Data\Scripts\AutoTest\AutoTestManager\Gui_frmMain.kxf
88Global $Gui_frmMain = GUICreate($GUI_frmMainCaption, 495, 468, 451, 151)
89Global $Gui_tab = GUICtrlCreateTab(5, 5, 486, 437)
90Global $Gui_tab0 = GUICtrlCreateTabItem("Topo93 Comp")
91Global $Gui_tab0_lblJob = GUICtrlCreateLabel("Test Job", 10, 40, 100, 17)
92Global $Gui_tab0_edtTestJob = GUICtrlCreateInput("", 110, 38, 350, 21)
93Global $Gui_tab0_lblDataRootV1 = GUICtrlCreateLabel("V1 Data Root Dir", 10, 65, 100, 17)
94Global $Gui_tab0_edtDataRootV1 = GUICtrlCreateInput("", 110, 63, 350, 21)
95Global $Gui_tab0_btnBrowseV1 = GUICtrlCreateButton("...", 463, 63, 21, 21, BitOR($BS_CENTER, $BS_VCENTER, $BS_FLAT))
96Global $Gui_tab0_lblDataRootV2 = GUICtrlCreateLabel("V2 Data Root Dir", 10, 90, 100, 17)
97Global $Gui_tab0_edtDataRootV2 = GUICtrlCreateInput("", 110, 88, 350, 21)
98Global $Gui_tab0_btnBrowseV2 = GUICtrlCreateButton("...", 463, 88, 21, 21, BitOR($BS_CENTER, $BS_VCENTER, $BS_FLAT))
99Global $Gui_tab0_lblStrumapPrm = GUICtrlCreateLabel("PRM config File", 10, 115, 100, 17)
100Global $Gui_tab0_edtStrumapPrm = GUICtrlCreateInput("", 110, 113, 350, 21)
101Global $Gui_tab0_btnBrowsePrm = GUICtrlCreateButton("...", 463, 113, 21, 21, BitOR($BS_CENTER, $BS_VCENTER, $BS_FLAT))
102Global $Gui_tab0_lblStrumapVer = GUICtrlCreateLabel("Strumap Ver", 200, 140, 80, 17)
103Global $Gui_tab0_cboStrumapVer = GUICtrlCreateCombo("", 260, 138, 85, 25)
104Global $Gui_tab0_lblTopo96Ext = GUICtrlCreateLabel("Topo96 Ext", 10, 140, 100, 17)
105Global $Gui_tab0_cboTopo96Ext = GUICtrlCreateCombo("", 110, 138, 65, 25)
106Global $Gui_tab0_lblTopo93V1Ext = GUICtrlCreateLabel("Topo93 V1 Ext", 10, 165, 100, 17)
107Global $Gui_tab0_cboTopo93V1Ext = GUICtrlCreateCombo("", 110, 163, 65, 25)
108Global $Gui_tab0_lblTopo93V2Ext = GUICtrlCreateLabel("Topo93 V2 Ext", 10, 190, 100, 17)
109Global $Gui_tab0_cboTopo93V2Ext = GUICtrlCreateCombo("", 110, 188, 65, 25)
110Global $Gui_tab0_chkCreatePhseudo = GUICtrlCreateCheckbox("Create Pseudo", 370, 140, 100, 17)
111Global $Gui_tab0_chkUseGeoComp = GUICtrlCreateCheckbox("Use GeoComp", 370, 157, 100, 17)
112Global $Gui_tab0_chkSaveSbz = GUICtrlCreateCheckbox("Save SBZ Files", 370, 174, 100, 17)
113Global $Gui_tab0_chkClassifyErr = GUICtrlCreateCheckbox("Classify Errors", 370, 191, 100, 17)
114Global $Gui_tab0_btnStopPCs = GUICtrlCreateButton("Stop Selected PCs", 380, 405, 100, 30, $BS_FLAT)
115Global $Gui_tab0_btnRun = GUICtrlCreateButton("Run", 10, 405, 100, 30, $BS_FLAT)
116Global $Gui_tab0_btnClose = GUICtrlCreateButton("Close", 134, 405, 100, 30, $BS_FLAT)
117Global $Gui_tab0_MyButton3 = GUICtrlCreateButton("MyButton3", 258, 405, 100, 30, $BS_FLAT)
118Global $Gui_tab0_lsvComputers = GUICtrlCreateListView("", 10, 220, 475, 178, BitOR($GUI_SS_DEFAULT_LISTVIEW, $LVS_SORTASCENDING), BitOR($WS_EX_CLIENTEDGE, $LVS_EX_CHECKBOXES, $LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
119Global $Gui_tab0_hListView = ControlGetHandle($GUI_frmMainCaption, "", $Gui_tab0_lsvComputers)
120_GUICtrlListView_AddColumn($Gui_tab0_hListView, "Computers", 100)
121_GUICtrlListView_AddColumn($Gui_tab0_hListView, "Job", 100)
122_GUICtrlListView_AddColumn($Gui_tab0_hListView, "Status", 95)
123_GUICtrlListView_AddColumn($Gui_tab0_hListView, "Started", 115)
124_GUICtrlListView_AddColumn($Gui_tab0_hListView, "Time", 60)
125GUICtrlCreateTabItem("")
126Global $Gui_tab1 = GUICtrlCreateTabItem("MasterMap Comp")
127GUICtrlCreateTabItem("")
128Global $Gui_tab2 = GUICtrlCreateTabItem("ITN Validate")
129GUICtrlCreateTabItem("")
130Global $GUI_stbStatusBar = _GUICtrlStatusBar_Create($Gui_frmMain, $g_aStatusBarParts, $g_aStatusBarPartsText)
131Global $Gui_pgbProgress = GUICtrlCreateProgress(0, 0, -1, -1, $PBS_SMOOTH)
132Global $g_hProgress = GUICtrlGetHandle($Gui_pgbProgress)
133_GUICtrlStatusBar_SetMinHeight($GUI_stbStatusBar, 20)
134_GUICtrlStatusBar_EmbedControl($GUI_stbStatusBar, 1, $g_hProgress)
135
136_Settings_Read()
137GUISetState(@SW_SHOW)
138#EndRegion ### START Koda GUI section ### Form=X:\AutoIt3Data\Scripts\AutoTest\AutoTestManager\Gui_frmMain.kxf
139Global $tLastChecked = TimerInit()
140Global $iLastDBCheck = TimerInit()
141While 1
142        $g_nMsg = GUIGetMsg()
143        Switch $g_nMsg
144                Case $GUI_EVENT_CLOSE
145                        _Settings_Save()
146                        Exit
147                Case $Gui_tab0_btnClose
148                        _Settings_Save()
149                        Exit
150                Case $Gui_tab0_btnRun
151                        $g_fRun = False
152                        If Not (_Initialise() = 1) Then ContinueLoop
153                        If Not (_Database_Start() = 1) Then ContinueLoop
154                        If Not (_Database_Initialise() = 1) Then ContinueLoop
155                        If Not (_Computers_Clean() = 1) Then ContinueLoop
156                        $g_sRunStartTime = _NowCalc()
157                        $g_fRun = True
158                Case $Gui_tab0_MyButton3
159                        $g_iStatus = _SQLite_GetTable2d($g_hDB, "SELECT * FROM JOB_CONTROL ORDER BY FILE_SIZE DESC;", $g_aResult, $g_iRows, $g_iColumns)
160                        If $g_iStatus = $SQLITE_OK Then
161                                _ArrayDisplay($g_aResult, "Results")
162                                $g_iStatus = 1
163                        EndIf
164        EndSwitch
165       
166        If $g_fRun And TimerDiff($tLastChecked) > 2500 Then
167                $g_aComputers = _ScanFor_ComputersOnline($g_sJobControlFolder)
168                _Process_ComputersOnline($g_aComputers)
169                $g_aComputers = _ScanFor_ComputersOffline($g_sJobControlFolder)
170                _Process_ComputersOffline($g_aComputers)
171                $g_aComputers = _ScanFor_JobsAborted($g_sJobControlFolder)
172                _Process_JobsAborted($g_aComputers)
173                $g_aComputers = _ScanFor_JobsCompleted($g_sJobControlFolder)
174                _Process_JobsCompleted($g_aComputers)
175                $g_aComputers = _ScanFor_JobRequests($g_sJobControlFolder)
176                _Process_JobRequests($g_aComputers)
177                $g_aComputers = _ScanFor_JobsRunning($g_sJobControlFolder)
178                _Process_JobsRunning($g_aComputers)
179                If $g_fAllJobsDone Then
180                        _Process_Results($g_sJobControlFolder, $g_Computers_Status)
181                        $g_fRun = False
182                EndIf
183                _GUICtrlStatusBar_SetText($GUI_stbStatusBar, _RuninngTime($g_sRunStartTime), 2)
184                If TimerDiff($iLastDBCheck) > 120000 Then
185                        $g_iPercentDone = _PercentDone()
186                        $iLastDBCheck = TimerInit()
187                EndIf
188                _GUICtrlStatusBar_SetText($GUI_stbStatusBar, "Percentage Done " & $g_iPercentDone)
189                $tLastChecked = TimerInit()
190        EndIf
191WEnd
192
193
194Func _Computers_Clean()
195        Local $sFolder = $g_sJobControlFolder & "\Computers"
196        Local $asFileList[1] = [0]
197        Local $sFilePattern
198        Local $iState = 1
199        For $i = 1 To 7
200                Switch $i
201                        Case 1
202                                $sFilePattern = "_RunningJob.atj"
203                        Case 2
204                                $sFilePattern = "_CompletedJob.atj"
205                        Case 3
206                                $sFilePattern = "_NextJob.atj"
207                        Case 4
208                                $sFilePattern = "_NoMoreJobs.atj"
209                        Case 6
210                                $sFilePattern = "_Stop.atj"
211                        Case 6
212                                $sFilePattern = "_Aborted.atj"
213                        Case Else
214                                $sFilePattern = "_RequestJob.atj"
215                EndSwitch
216                ReDim $asFileList[1]
217                $asFileList[0] = 0
218                $asFileList = _os_FilesListInTree($sFolder, $asFileList, 0, $sFilePattern)
219                For $iFile = 1 To $asFileList[0]
220                        FileDelete($asFileList[$iFile])
221                Next
222        Next
223        Return $iState
224EndFunc   ;==>_Computers_Clean
225Func _Database_Initialise()
226        Local $sIniFile = $g_sJobControlFolder & "\config.ini"
227        Local $iStatus = 1
228        Local $aResult = 0
229        Local $iRows = 0
230        Local $iColumns = 0
231        Local $sTile = ''
232        Local $sSQL = ''
233;~      Local $sTable = "JOB_CONTROL"
234        Local $aRow
235        Local $iJobCount = 0
236        Local $iJobCompletedCount = 0
237        Local $iMsgBoxAnswer
238        Local $fFullRun = True
239        Local $iFileSize = 0
240        Local $sJobList[1] = [0]
241        Local $sMsg = ''
242       
243        _GUICtrlStatusBar_SetText($GUI_stbStatusBar, "Checking database")
244        $sSQL = "SELECT Count(FILE) FROM JOB_CONTROL"
245        _SQLite_QuerySingleRow($g_hDB, $sSQL, $aRow) ; Select single row and single field !
246        If $iStatus = $SQLITE_OK Then
247                If IsArray($aRow) Then $iJobCount = $aRow[0]
248                If $iJobCount > 0 Then
249                        $sSQL = "SELECT Count(END_TIME) FROM JOB_CONTROL WHERE END_TIME = NULL"
250                        _SQLite_QuerySingleRow($g_hDB, $sSQL, $aRow) ; Select single row and single field !
251                        If $iStatus <> $SQLITE_OK Then
252                                Return SetError(@error, 0, 0)
253                        EndIf
254                        If IsArray($aRow) Then $iJobCompletedCount = $aRow[0]
255                        If $iJobCount > $iJobCompletedCount Then
256                                $sMsg = "This Job has previously been Run and " & $iJobCompletedCount & " out of " & $iJobCount & " Tests completed." & @CRLF & "Click Yes - to complete previous run" & @CRLF & "Click No - to deltete previous run and run all tests again." & @CRLF & "Click Cancel - to exit without any changes."
257
258;~                              $sMsg = "This Job has previously been Run and " _
259;~                                               & $iJobCompletedCount & " out of " & $iJobCount & " Tests completed." & @CRLF _
260;~                                               & "Click Yes - to complete previous run" & @CRLF _
261;~                                               & "Click No - to deltete previous run and run all tests again." & @CRLF _
262;~                                               & "Click Cancel - to exit without any changes."
263                                #Region --- CodeWizard generated code Start ---
264                                ;MsgBox features: Title=Yes, Text=Yes, Buttons=Yes, No, and Cancel, Default Button=Third, Icon=Question, Modality=System Modal, Miscellaneous=Top-most attribute
265                                $iMsgBoxAnswer = MsgBox(266787, "AutoTestManager - Info", $sMsg)
266                                Select
267                                        Case $iMsgBoxAnswer = 6 ;Yes
268                                                $fFullRun = False
269                                        Case $iMsgBoxAnswer = 7 ;No
270                                                $fFullRun = True
271                                        Case $iMsgBoxAnswer = 2 ;Cancel
272                                                Return 10
273                                EndSelect
274                                #EndRegion --- CodeWizard generated code Start ---
275                        ElseIf $iJobCount > 0 Then
276                                $sMsg = "This Job has previously been Run and completed" & @CRLF & "Do you want to overwrite the previous run and run the tests again?"
277                                #Region --- CodeWizard generated code Start ---
278                                ;MsgBox features: Title=Yes, Text=Yes, Buttons=Yes and No, Default Button=Second, Icon=Question, Modality=System Modal, Miscellaneous=Top-most attribute
279                                $iMsgBoxAnswer = MsgBox(266532, "AutoTestManager - Info", "")
280                                Select
281                                        Case $iMsgBoxAnswer = 6 ;Yes
282                                                $fFullRun = True
283                                        Case $iMsgBoxAnswer = 7 ;No
284                                                Return 10
285                                EndSelect
286                                #EndRegion --- CodeWizard generated code Start ---
287                        EndIf
288                EndIf
289        EndIf
290
291        If $fFullRun Then
292                Local $sDataDir = IniRead($sIniFile, "SETTINGS", "V1CITFDataRootDir", "")
293                If $sDataDir = '' Then
294                        #Region --- CodeWizard generated code Start ---
295                        ;MsgBox features: Title=Yes, Text=Yes, Buttons=OK, Icon=Critical, Modality=System Modal, Miscellaneous=Top-most attribute
296                        MsgBox(266256, "AutoTestManager - Error", "V1CITFDataRootDir path has not been set. ")
297                        #EndRegion --- CodeWizard generated code Start ---
298                        Return 10
299                EndIf
300                Local $sDataExt = IniRead($sIniFile, "SETTINGS", "V0FileExtention", "citf")
301                $sDataDir = _os_PathNormalise($sDataDir)
302                Local $sFilePattern = ''
303                If StringLeft($sDataExt, 1) <> "." Then
304                        $sFilePattern = "*." & $sDataExt
305                Else
306                        $sFilePattern = "*" & $sDataExt
307                EndIf
308               
309                _GUICtrlStatusBar_SetText($GUI_stbStatusBar, "Searching for files")
310                $sJobList = _ScanFor_JobsToDo($sDataDir, $sFilePattern)
311                _GUICtrlStatusBar_SetText($GUI_stbStatusBar, "Loading database")
312
313                $sSQL = "DROP TABLE IF EXISTS JOB_CONTROL"
314                $iStatus = _SQLite_Exec($g_hDB, $sSQL)
315                $sSQL = "CREATE TABLE IF NOT EXISTS JOB_CONTROL ( FILE TEXT UNIQUE, FILE_SIZE INTEGER, TILE TEXT, COMPUTER TEXT, START_TIME TEXT, END_TIME TEXT, TIME_TAKEN TEXT, SYNTAX_CITF TEXT, SYNTAX_NTF TEXT, Q1_CREATED TEXT, SYNTAX_Q1 TEXT, SYNTAX_Q2 TEXT, NO_FEATURES INTEGER, NO_DIFF INTEGER, RESULT TEXT, ERROR TEXT )"
316
317
318;~              $sSQL = "CREATE TABLE IF NOT EXISTS JOB_CONTROL" & _
319;~                              " (" & _
320;~                              " FILE TEXT UNIQUE," & _
321;~                              " FILE_SIZE INTEGER," & _
322;~                              " TILE TEXT," & _
323;~                              " COMPUTER TEXT," & _
324;~                              " START_TIME TEXT," & _
325;~                              " END_TIME TEXT," & _
326;~                              " TIME_TAKEN TEXT," & _
327;~                              " SYNTAX_CITF TEXT," & _
328;~                              " SYNTAX_NTF TEXT," & _
329;~                              " Q1_CREATED TEXT," & _
330;~                              " SYNTAX_Q1 TEXT," & _
331;~                              " SYNTAX_Q2 TEXT," & _
332;~                              " NO_FEATURES INTEGER," & _
333;~                              " NO_DIFF INTEGER," & _
334;~                              " RESULT TEXT," & _
335;~                              " ERROR TEXT )"
336                $iStatus = _SQLite_Exec($g_hDB, $sSQL)
337                If $iStatus <> $SQLITE_OK Then
338                        Return SetError(@error, 0, 0)
339                EndIf
340                $sSQL = "BEGIN TRANSACTION"
341                $iStatus = _SQLite_Exec($g_hDB, $sSQL)
342                For $i = 1 To $sJobList[0]
343                        $sTile = _os_otu_GetTileRefFromFileName($sJobList[$i])
344                        $iFileSize = FileGetSize($sJobList[$i])
345                        $sSQL = "INSERT OR REPLACE INTO JOB_CONTROL (FILE,FILE_SIZE,TILE) VALUES('" & $sJobList[$i] & "','" & $iFileSize & "','" & $sTile & "')"
346                        $iStatus = _SQLite_Exec($g_hDB, $sSQL)
347                Next
348                $sSQL = "END TRANSACTION"
349                $iStatus = _SQLite_Exec($g_hDB, $sSQL)
350                $sSQL = "CREATE INDEX IF NOT EXISTS IDX_FILE_SIZE ON JOB_CONTROL ( FILE_SIZE DESC )"
351                $iStatus = _SQLite_Exec($g_hDB, $sSQL)
352                $sSQL = "CREATE INDEX IF NOT EXISTS IDX_COMPUTER ON JOB_CONTROL ( COMPUTER )"
353                $iStatus = _SQLite_Exec($g_hDB, $sSQL)
354                $sSQL = "CREATE INDEX IF NOT EXISTS IDX_END_TIME ON JOB_CONTROL ( END_TIME ASC )"
355                $iStatus = _SQLite_Exec($g_hDB, $sSQL)
356        Else
357                $sSQL = "UPDATE JOB_CONTROL SET " & _
358                                " COMPUTER = NULL," & _
359                                " START_TIME = NULL," & _
360                                " END_TIME = NULL," & _
361                                " TIME_TAKEN = NULL," & _
362                                " SYNTAX_CITF = NULL," & _
363                                " SYNTAX_NTF = NULL," & _
364                                " Q1_CREATED = NULL," & _
365                                " SYNTAX_Q1 = NULL," & _
366                                " SYNTAX_Q2 = NULL," & _
367                                " NO_FEATURES = NULL," & _
368                                " NO_DIFF = NULL," & _
369                                " RESULT = NULL," & _
370                                " ERROR = NULL )" & _
371                                " WHERE COMPUTER NOT NULL AND END_TIME = NULL"
372                $iStatus = _SQLite_Exec($g_hDB, $sSQL)
373        EndIf
374
375        $sSQL = "SELECT * FROM JOB_CONTROL ORDER BY FILE_SIZE DESC;"
376        $iStatus = _SQLite_GetTable2d($g_hDB, $sSQL, $aResult, $iRows, $iColumns)
377        If $iStatus = $SQLITE_OK Then
378                $iStatus = 1
379        EndIf
380        _GUICtrlStatusBar_SetText($GUI_stbStatusBar, "Database ready")
381        Return $iStatus
382EndFunc   ;==>_Database_Initialise
383
384Func _Database_Start()
385        Local $iStatus = 1
386        Local $sDatabase = $g_sJobControlFolder & "\AutoTestControl.db"
387       
388        _GUICtrlStatusBar_SetText($GUI_stbStatusBar, "Starting SQLite")
389       
390        _SQLite_Startup()
391        If @error > 0 Then
392                MsgBox(16, "SQLite Error", "SQLite.dll Can't be Loaded!")
393                $iStatus = 0
394        EndIf
395        $g_hDB = _SQLite_Open($sDatabase)
396        If @error > 0 Then
397                MsgBox(16, "SQLite Error", "Can't Load Database!")
398                $iStatus = 0
399        EndIf
400        Return $iStatus
401EndFunc   ;==>_Database_Start
402
403Func _Database_Stop()
404        _SQLite_Close($g_hDB)
405        _SQLite_Shutdown()
406EndFunc   ;==>_Database_Stop
407
408Func _Initialise()
409        Local $aSettings[13][2]
410        Local $sIniFile = ''
411        Local $iStatus = 1
412
413        _GUICtrlStatusBar_SetText($GUI_stbStatusBar, "Initialising")
414
415        $g_sJobControlFolder = _os_PathNormalise($AT_ROOT_DIR) & GUICtrlRead($Gui_tab0_edtTestJob)
416        $aSettings[0][0] = 12
417        $aSettings[1][0] = "createPSEUDO"
418        $aSettings[1][1] = "N"
419        If BitAND(GUICtrlRead($Gui_tab0_chkCreatePhseudo), $GUI_CHECKED) Then $aSettings[1][1] = "Y"
420        $aSettings[2][0] = "createSbz"
421        $aSettings[2][1] = "N"
422        If BitAND(GUICtrlRead($Gui_tab0_chkSaveSbz), $GUI_CHECKED) Then $aSettings[2][1] = "Y"
423        $aSettings[3][0] = "parameterfile"
424        $aSettings[3][1] = "C:\OsStrumap\CFG\PHOENIXCITF\phoenixCITF.prm"
425        If GUICtrlRead($Gui_tab0_edtStrumapPrm) <> '' Then $aSettings[3][1] = GUICtrlRead($Gui_tab0_edtStrumapPrm)
426        $aSettings[4][0] = "useGEOCOMP"
427        $aSettings[4][1] = "Y"
428        If BitAND(GUICtrlRead($Gui_tab0_chkUseGeoComp), $GUI_CHECKED) Then $aSettings[4][1] = "Y"
429        $aSettings[5][0] = "useStrumapVersion"
430        $aSettings[5][1] = "2.0.2977.0"
431        If GUICtrlRead($Gui_tab0_cboStrumapVer) <> '' Then $aSettings[5][1] = GUICtrlRead($Gui_tab0_cboStrumapVer)
432        $aSettings[6][0] = "V0FileExtention"
433        $aSettings[6][1] = "citf"
434        If GUICtrlRead($Gui_tab0_cboTopo96Ext) <> '' Then $aSettings[6][1] = GUICtrlRead($Gui_tab0_cboTopo96Ext)
435        $aSettings[7][0] = "V1CITFDataRootDir"
436        $aSettings[7][1] = ""
437        If GUICtrlRead($Gui_tab0_edtDataRootV1) <> '' Then $aSettings[7][1] = GUICtrlRead($Gui_tab0_edtDataRootV1)
438        $aSettings[8][0] = "V1FileExtention"
439        $aSettings[8][1] = "q1"
440        If GUICtrlRead($Gui_tab0_cboTopo93V1Ext) <> '' Then $aSettings[8][1] = GUICtrlRead($Gui_tab0_cboTopo93V1Ext)
441        $aSettings[9][0] = "V1ResultsRootDir"
442        $aSettings[9][1] = _os_FileGetFolder($aSettings[7][1]) & "\Result\V1"
443        $aSettings[10][0] = "V2CITFDataRootDir"
444        $aSettings[10][1] = ""
445        If GUICtrlRead($Gui_tab0_edtDataRootV2) <> '' Then $aSettings[10][1] = GUICtrlRead($Gui_tab0_edtDataRootV2)
446        $aSettings[11][0] = "V2FileExtention"
447        $aSettings[11][1] = "q2"
448        If GUICtrlRead($Gui_tab0_cboTopo93V2Ext) <> '' Then $aSettings[11][1] = GUICtrlRead($Gui_tab0_cboTopo93V2Ext)
449        $aSettings[12][0] = "V2ResultsRootDir"
450        $aSettings[12][1] = _os_FileGetFolder($aSettings[7][1]) & "\Result\V2"
451
452        $sIniFile = $g_sJobControlFolder & "\config.ini"
453        If Not DirCreate($g_sJobControlFolder) Then $iStatus = 0
454        If Not DirCreate($g_sJobControlFolder & "\Computers") Then $iStatus = 0
455        If Not DirCreate($g_sJobControlFolder & "\Logs") Then $iStatus = 0
456        If Not DirCreate($aSettings[9][1]) Then $iStatus = 0
457        If Not DirCreate($aSettings[12][1]) Then $iStatus = 0
458        If Not IniWriteSection($sIniFile, "SETTINGS", $aSettings, 1) Then $iStatus = 0
459        Return $iStatus
460EndFunc   ;==>_Initialise
461
462Func _PercentDone()
463        Local $iRval, $aResult, $iRows, $iColumns
464        Local $iToDo, $iDone
465        Local $sSQLAll = "SELECT Count(*) FROM JOB_CONTROL"
466        Local $sSQLDone = "SELECT Count(*) FROM JOB_CONTROL WHERE END_TIME NOT NULL"
467        $iRval = _SQLite_GetTable2d($g_hDB, $sSQLAll, $aResult, $iRows, $iColumns)
468        If $iRval <> $SQLITE_OK Then $iToDo = 0
469        If $iRows Then
470                $iToDo = $aResult[$iRows][$iColumns - 1]
471        EndIf
472        $iRval = _SQLite_GetTable2d($g_hDB, $sSQLDone, $aResult, $iRows, $iColumns)
473        If $iRval <> $SQLITE_OK Then $iDone = 0
474        If $iRows Then
475                $iDone = $aResult[$iRows][$iColumns - 1]
476        EndIf
477        If $iToDo > 0 Then
478                Return StringFormat("%0.2f%%", (($iDone / $iToDo) * 100))
479        Else
480                Return StringFormat("%0.2f%%", 100)
481        EndIf
482EndFunc   ;==>_PercentDone
483
484Func _Process_ComputersOnline(ByRef $aComputers)
485        Local $iItem = -1
486        Local $hWnd = $Gui_tab0_hListView
487        Local $sItemText = ''
488        Local $fFound = False
489        Local $iItemCount = 0
490        For $iPC = 1 To $aComputers[0]
491                $iItem = _GUICtrlListView_FindText($hWnd, $aComputers[$iPC], -1, False, True)
492                ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $iItem = ' & $iItem & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
493                If $iItem < 0 Then
494                        $iItem = _GUICtrlListView_AddItem($hWnd, $aComputers[$iPC])
495                        _GUICtrlListView_AddSubItem($hWnd, $iItem, "", 1) ; Job / Tile
496                        _GUICtrlListView_AddSubItem($hWnd, $iItem, "Unknown", 2) ; Status
497                        _GUICtrlListView_AddSubItem($hWnd, $iItem, "00:00:00", 3) ; Elapsed Time
498                        _GUICtrlListView_AddSubItem($hWnd, $iItem, "00:00:00", 4) ; Elapsed Time
499                EndIf
500        Next
501       
502        $iItemCount = _GUICtrlListView_GetItemCount($hWnd)
503        ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $iItemCount = ' & $iItemCount & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
504        $iItem = $iItemCount - 1
505        ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $iItem = ' & $iItem & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
506        While $iItem >= 0
507                $sItemText = _GUICtrlListView_GetItemText($hWnd, $iItem)
508                ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $iItem = ' & $iItem & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
509                ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sItemText = ' & $sItemText & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
510                $fFound = False
511                For $i = 1 To $aComputers[0]
512                        If $sItemText = $aComputers[$i] Then
513                                ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sItemText = ' & $sItemText & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
514                                ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $aComputers[$i] = ' & $aComputers[$i] & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
515                                $fFound = True
516                                ExitLoop
517                        EndIf
518                Next
519                If Not $fFound Then
520                        If _GUICtrlListView_DeleteItem($hWnd, $iItem) Then
521                                $iItem -= 1
522                        EndIf
523                EndIf
524                $iItem -= 1
525        WEnd
526       
527EndFunc   ;==>_Process_ComputersOnline
528
529Func _Process_ComputersOffline(ByRef $aComputers)
530        Local $iItem = -1
531        Local $hWnd = $Gui_tab0_hListView
532;~      Local $sItemText = ''
533;~      Local $fFound = False
534        For $iPC = 1 To $aComputers[0]
535                $iItem = _GUICtrlListView_FindText($hWnd, $aComputers[$iPC], -1, False, True)
536                If $iItem >= 0 Then
537                        _GUICtrlListView_SetItem($hWnd, "", $iItem, 1); Job / Tile
538                        _GUICtrlListView_SetItem($hWnd, "Off Line", $iItem, 2) ; Status
539                        _GUICtrlListView_SetItem($hWnd, "00:00:00", $iItem, 3) ; Elapsed Time
540                        _GUICtrlListView_SetItem($hWnd, "00:00:00", $iItem, 3) ; Elapsed Time
541                EndIf
542        Next
543EndFunc   ;==>_Process_ComputersOffline
544
545Func _Process_JobRequests(ByRef $aComputers)
546;~      Local $sJobFile = ''
547;~      Local $aRow = 0
548        Local $sSQL = "SELECT FILE, TILE, FILE_SIZE, START_TIME FROM JOB_CONTROL WHERE START_TIME IS NULL ORDER BY FILE_SIZE DESC LIMIT "
549        Local $sSQL_REQ = ''
550        Local $sSQL_CMD = ''
551        Local $sFile = ''
552        Local $hFile = 0
553;~      Local $hQuery = 0
554        Local $aResult, $iRows, $iColumns, $iRval
555        Local $iItem = -1
556        Local $hWnd = $Gui_tab0_hListView
557;~      Local $sItemText = ''
558;~      Local $fFound = False
559
560        ;Update Display
561        For $iPC = 1 To $aComputers[0]
562                $iItem = _GUICtrlListView_FindText($hWnd, $aComputers[$iPC], -1, False, True)
563                If $iItem >= 0 Then
564                        _GUICtrlListView_SetItem($hWnd, "", $iItem, 1) ; tile
565                        _GUICtrlListView_SetItem($hWnd, "Job Requested", $iItem, 2) ; Status
566                        _GUICtrlListView_SetItem($hWnd, "00:00:00", $iItem, 3) ; Start Time
567                        _GUICtrlListView_SetItem($hWnd, "00:00:00", $iItem, 4) ; Elapsed Time
568                EndIf
569        Next
570
571        $sSQL_REQ = $sSQL & $aComputers[0] + 10 & ";"
572        $iRval = _SQLite_GetTable2d($g_hDB, $sSQL_REQ, $aResult, $iRows, $iColumns)
573;~      _ArrayDisplay($aResult)
574        For $i = 1 To $aComputers[0]
575                If $iRval = $SQLITE_OK And IsArray($aResult) Then
576                        If $aResult[$i][1] <> '' Then
577                                $sFile = $g_sJobControlFolder & "\Computers\" & $aComputers[$i] & "\_NextJob.atj"
578                                $hFile = FileOpen($sFile, 2)
579                                FileWriteLine($hFile, $aResult[$i][0])
580                                FileWriteLine($hFile, $aResult[$i][1])
581                                FileClose($hFile)
582                                $sSQL_CMD = "UPDATE JOB_CONTROL SET COMPUTER =  '" & $aComputers[$i] & "',START_TIME = '" & _NowCalc() & "' WHERE TILE = '" & $aResult[$i][1] & "';"
583                                _SQLite_Exec($g_hDB, $sSQL_CMD)
584                                $sFile = $g_sJobControlFolder & "\Computers\" & $aComputers[$i] & "\_RequestJob.atj"
585                                FileDelete($sFile)
586                                $iItem = _GUICtrlListView_FindText($hWnd, $aComputers[$i], -1, False, True)
587                                If $iItem >= 0 Then
588                                        _GUICtrlListView_SetItem($hWnd, $aResult[$i][1], $iItem, 1) ; tile
589                                        _GUICtrlListView_SetItem($hWnd, "Job Allocated", $iItem, 2) ; Status
590                                        _GUICtrlListView_SetItem($hWnd, _NowCalc(), $iItem, 3) ; Start Time
591                                        _GUICtrlListView_SetItem($hWnd, "00:00:00", $iItem, 4) ; Elapsed Time
592                                EndIf
593                        Else
594                                $sFile = $g_sJobControlFolder & "\Computers\" & $aComputers[$i] & "\_NoMoreJobs.atj"
595                                _FileCreate($sFile)
596                                $sFile = $g_sJobControlFolder & "\Computers\" & $aComputers[$i] & "\_RequestJob.atj"
597                                FileDelete($sFile)
598                        EndIf
599                Else ;No more jobs
600                        $sFile = $g_sJobControlFolder & "\Computers\" & $aComputers[$i] & "\_NoMoreJobs.atj"
601                        _FileCreate($sFile)
602                        $sFile = $g_sJobControlFolder & "\Computers\" & $aComputers[$i] & "\_RequestJob.atj"
603                        FileDelete($sFile)
604                EndIf
605        Next
606EndFunc   ;==>_Process_JobRequests
607
608Func _Process_JobsAborted(ByRef $aComputers)
609        Local $iItem = -1
610        Local $hWnd = $Gui_tab0_hListView
611;~      Local $sItemText = ''
612;~      Local $fFound = False
613;~      Local $sFile = ''
614       
615        For $iPC = 1 To $aComputers[0]
616                $iItem = _GUICtrlListView_FindText($hWnd, $aComputers[$iPC], -1, False, True)
617                If $iItem >= 0 Then
618                        _GUICtrlListView_SetItem($hWnd, "Job Aborted", $iItem, 2) ; Status
619                        _GUICtrlListView_SetItem($hWnd, "00:00:00", $iItem, 3) ; Elapsed Time
620                        _GUICtrlListView_SetItem($hWnd, "00:00:00", $iItem, 4) ; Elapsed Time
621                EndIf
622        Next
623EndFunc   ;==>_Process_JobsAborted
624
625Func _Process_JobsCompleted(ByRef $aComputers)
626        Local $iItem = -1
627        Local $hWnd = $Gui_tab0_hListView
628;~      Local $sItemText = ''
629;~      Local $fFound = False
630        Local $aResults
631        Local $aParts
632        Local $sSQL = "UPDATE JOB_CONTROL SET "
633        Local $sWhere = ''
634        Local $sDateTime = ''
635        Local $sFile = ''
636        Local $iStatus = 0
637
638        For $iPC = 1 To $aComputers[0]
639                $iItem = _GUICtrlListView_FindText($hWnd, $aComputers[$iPC], -1, False, True)
640                If $iItem >= 0 Then
641                        $sDateTime = _GUICtrlListView_GetItemText($hWnd, $iItem, 4)
642                        _GUICtrlListView_SetItem($hWnd, "Completed", $iItem, 2) ; Status
643                        _GUICtrlListView_SetItem($hWnd, "00:00:00", $iItem, 3) ; Elapsed Time
644                        _GUICtrlListView_SetItem($hWnd, "00:00:00", $iItem, 4) ; Elapsed Time
645                EndIf
646                $sFile = $g_sJobControlFolder & "\Computers\" & $aComputers[$iPC] & "\_CompletedJob.atj"
647                _FileReadToArray($sFile, $aResults)
648                If IsArray($aResults) Then
649                        For $i = 1 To $aResults[0]
650                                $aParts = StringSplit($aResults[$i], "|")
651                                If IsArray($aParts) Then
652                                        Switch $aParts[1]
653                                                Case 'COMPUTER'
654                                                        If $sWhere = '' Then
655                                                                $sWhere = ' WHERE COMPUTER = "' & $aParts[2] & '"'
656                                                        Else
657                                                                $sWhere &= ' AND COMPUTER = "' & $aParts[2] & '"'
658                                                        EndIf
659                                                Case 'TILE'
660                                                        If $sWhere = '' Then
661                                                                $sWhere = ' WHERE TILE = "' & $aParts[2] & '"'
662                                                        Else
663                                                                $sWhere &= ' AND TILE = "' & $aParts[2] & '"'
664                                                        EndIf
665                                                Case 'SYNTAX_CITF'
666                                                        $sSQL &= 'SYNTAX_CITF = "' & $aParts[2] & '",'
667                                                Case 'SYNTAX_NTF'
668                                                        $sSQL &= 'SYNTAX_NTF = "' & $aParts[2] & '",'
669                                                Case 'Q1_CREATED'
670                                                        $sSQL &= 'Q1_CREATED = "' & $aParts[2] & '",'
671                                                Case 'SYNTAX_Q1'
672                                                        $sSQL &= 'SYNTAX_Q1 = "' & $aParts[2] & '",'
673                                                Case 'SYNTAX_Q2'
674                                                        $sSQL &= 'SYNTAX_Q2 = "' & $aParts[2] & '",'
675                                                Case 'NO_FEATURES'
676                                                        $sSQL &= 'NO_FEATURES = ' & $aParts[2] & ','
677                                                Case 'NO_DIFF'
678                                                        $sSQL &= 'NO_DIFF = ' & $aParts[2] & ','
679                                                Case 'RESULT'
680                                                        $sSQL &= 'RESULT = "' & $aParts[2] & '",'
681                                                Case 'MESSAGE'
682                                                        $sSQL &= 'ERROR = "' & $aParts[2] & '",'
683                                        EndSwitch
684                                EndIf
685                        Next
686                        $sSQL &= ' END_TIME = "' & _NowCalc() & '",'
687                        $sSQL &= ' TIME_TAKEN = "' & $sDateTime & '"'
688                        $sSQL &= $sWhere
689                        $iStatus = _SQLite_Exec($g_hDB, $sSQL)
690                        If $iStatus Then
691                                ; TODO:
692                        EndIf
693                        FileDelete($sFile)
694                Else
695;~                      'MESSAGE = No Results were returned from test runner'
696                        FileDelete($sFile)
697                EndIf
698        Next
699EndFunc   ;==>_Process_JobsCompleted
700
701Func _Process_JobsRunning(ByRef $aComputers)
702        Local $iItem = -1
703        Local $hWnd = $Gui_tab0_hListView
704;~      Local $sItemText = ''
705;~      Local $fFound = False
706        Local $sDateTime = ''
707       
708        For $iPC = 1 To $aComputers[0]
709                $iItem = _GUICtrlListView_FindText($hWnd, $aComputers[$iPC], -1, False, True)
710                If $iItem >= 0 Then
711                        _GUICtrlListView_SetItem($hWnd, "Job Running", $iItem, 2) ; Status
712                        $sDateTime = _GUICtrlListView_GetItemText($hWnd, $iItem, 3)
713                        _GUICtrlListView_SetItem($hWnd, _RuninngTime($sDateTime), $iItem, 4) ; Elapsed Time
714                EndIf
715        Next
716EndFunc   ;==>_Process_JobsRunning
717
718Func _Process_Results(ByRef $sJobFolder, ByRef $aComputers)
719        ;TODO:
720        If IsArray($aComputers) Then
721                Return ($sJobFolder <> '')
722        Else
723                Return -1
724        EndIf
725EndFunc   ;==>_Process_Results
726
727Func _RuninngTime($sDateTime)
728        Local $iSeconds
729        Local $iH, $iM, $iS
730       
731        $iSeconds = _DateDiff("s", $sDateTime, _NowCalc())
732        $iH = Int($iSeconds / 3600)
733        $iSeconds -= ($iH * 3600)
734        $iM = Int($iSeconds / 60)
735        $iSeconds -= ($iM * 60)
736        $iS = Int($iSeconds)
737        Return StringFormat("%0i:%02i:%02i", $iH, $iM, $iS)
738EndFunc   ;==>_RuninngTime
739
740Func _ScanFor_ComputersOnline(ByRef $sJobFolder)
741        Local $asFileList[1] = [0]
742;~      Local $aComputer = ''
743        Local $aTemp
744
745        _GUICtrlStatusBar_SetText($GUI_stbStatusBar, "Cheking for PCs")
746       
747        $asFileList = _os_FoldersListInTree($sJobFolder & "\Computers", $asFileList, 0, "*")
748        For $i = 1 To $asFileList[0]
749                $aTemp = StringSplit($asFileList[$i], '\')
750                If IsArray($aTemp) Then $asFileList[$i] = $aTemp[$aTemp[0]]
751        Next
752        Return $asFileList
753EndFunc   ;==>_ScanFor_ComputersOnline
754
755Func _ScanFor_ComputersOffline(ByRef $sJobFolder)
756        Local $asFileList[1] = [0]
757;~      Local $aComputer = ''
758        Local $aTemp
759
760        _GUICtrlStatusBar_SetText($GUI_stbStatusBar, "Cheking for PCs")
761
762        $asFileList = _os_FilesListInTree($sJobFolder & "\Computers", $asFileList, 0, "_Offline.atj")
763        For $i = 1 To $asFileList[0]
764                $aTemp = StringSplit($asFileList[$i], '\')
765                If IsArray($aTemp) Then $asFileList[$i] = $aTemp[$aTemp[0] - 1]
766        Next
767        Return $asFileList
768EndFunc   ;==>_ScanFor_ComputersOffline
769
770Func _ScanFor_JobRequests(ByRef $sJobFolder)
771        Local $asFileList[1] = [0]
772;~      Local $aComputer = ''
773        Local $aTemp
774       
775        _GUICtrlStatusBar_SetText($GUI_stbStatusBar, "Cheking for Job Requests")
776
777        $asFileList = _os_FilesListInTree($sJobFolder & "\Computers", $asFileList, 0, "_RequestJob.atj")
778        For $i = 1 To $asFileList[0]
779                $aTemp = StringSplit($asFileList[$i], '\')
780                If IsArray($aTemp) Then $asFileList[$i] = $aTemp[$aTemp[0] - 1]
781        Next
782        Return $asFileList
783EndFunc   ;==>_ScanFor_JobRequests
784
785Func _ScanFor_JobsAborted(ByRef $sJobFolder)
786        Local $asFileList[1] = [0]
787;~      Local $aComputer = ''
788        Local $aTemp
789       
790        _GUICtrlStatusBar_SetText($GUI_stbStatusBar, "Cheking for Aborted Jobs")
791       
792        $asFileList = _os_FilesListInTree($sJobFolder & "\Computers", $asFileList, 0, "_Aborted.atj")
793        For $i = 1 To $asFileList[0]
794                $aTemp = StringSplit($asFileList[$i], '\')
795                If IsArray($aTemp) Then $asFileList[$i] = $aTemp[$aTemp[0] - 1]
796        Next
797        Return $asFileList
798EndFunc   ;==>_ScanFor_JobsAborted
799
800Func _ScanFor_JobsCompleted(ByRef $sJobFolder)
801        Local $asFileList[1] = [0]
802;~      Local $aComputer = ''
803        Local $aTemp
804
805        _GUICtrlStatusBar_SetText($GUI_stbStatusBar, "Cheking for Completed Jobs")
806       
807        $asFileList = _os_FilesListInTree($sJobFolder & "\Computers", $asFileList, 0, "_CompletedJob.atj")
808;~      _ArrayDisplay($asFileList,"JobsCompleted")
809        For $i = 1 To $asFileList[0]
810                $aTemp = StringSplit($asFileList[$i], '\')
811                If IsArray($aTemp) Then $asFileList[$i] = $aTemp[$aTemp[0] - 1]
812        Next
813        Return $asFileList
814EndFunc   ;==>_ScanFor_JobsCompleted
815
816Func _ScanFor_JobsRunning(ByRef $sJobFolder)
817        Local $asFileList[1] = [0]
818;~      Local $aComputer = ''
819        Local $aTemp
820
821        _GUICtrlStatusBar_SetText($GUI_stbStatusBar, "Cheking for Running Jobs")
822       
823        $asFileList = _os_FilesListInTree($sJobFolder & "\Computers", $asFileList, 0, "_RunningJob.atj")
824        For $i = 1 To $asFileList[0]
825                $aTemp = StringSplit($asFileList[$i], '\')
826                If IsArray($aTemp) Then $asFileList[$i] = $aTemp[$aTemp[0] - 1]
827        Next
828        Return $asFileList
829EndFunc   ;==>_ScanFor_JobsRunning
830
831Func _ScanFor_JobsToDo($sJobFolder_In, $sFilePattern_In)
832        Local $asFileList[1] = [0]
833
834        $asFileList = _os_FilesListInTree($sJobFolder_In, $asFileList, 0, $sFilePattern_In)
835       
836        Return $asFileList
837EndFunc   ;==>_ScanFor_JobsToDo
838
839Func _Settings_Read()
840        Local $sValue = ''
841        GUICtrlSetData($Gui_tab0_edtTestJob, IniRead(@ScriptDir & "\" & $sTitle & ".ini", "LAST_JOB", "TestJob", ""))
842        GUICtrlSetData($Gui_tab0_edtDataRootV1, IniRead(@ScriptDir & "\" & $sTitle & ".ini", "LAST_JOB", "DataRootV1", ""))
843        GUICtrlSetData($Gui_tab0_edtDataRootV2, IniRead(@ScriptDir & "\" & $sTitle & ".ini", "LAST_JOB", "DataRootV2", ""))
844        GUICtrlSetData($Gui_tab0_edtStrumapPrm, IniRead(@ScriptDir & "\" & $sTitle & ".ini", "LAST_JOB", "StrumapPrm", ""))
845        $sValue = IniRead(@ScriptDir & "\" & $sTitle & ".ini", "LAST_JOB", "Topo96Ext", "")
846        GUICtrlSetData($Gui_tab0_cboTopo96Ext, "citf|ctf", $sValue)
847        $sValue = IniRead(@ScriptDir & "\" & $sTitle & ".ini", "LAST_JOB", "Topo93V1Ext", "")
848        GUICtrlSetData($Gui_tab0_cboTopo93V1Ext, "q1|v1", $sValue)
849        $sValue = IniRead(@ScriptDir & "\" & $sTitle & ".ini", "LAST_JOB", "Topo93V2Ext", "")
850        GUICtrlSetData($Gui_tab0_cboTopo93V2Ext, "q2|v2", $sValue)
851        $sValue = IniRead(@ScriptDir & "\" & $sTitle & ".ini", "LAST_JOB", "StrumapVer", "")
852        GUICtrlSetData($Gui_tab0_cboStrumapVer, "2.0.2981.1", $sValue)
853EndFunc   ;==>_Settings_Read
854
855Func _Settings_Save()
856        IniWrite(@ScriptDir & "\" & $sTitle & ".ini", "LAST_JOB", "TestJob", GUICtrlRead($Gui_tab0_edtTestJob))
857        IniWrite(@ScriptDir & "\" & $sTitle & ".ini", "LAST_JOB", "DataRootV1", GUICtrlRead($Gui_tab0_edtDataRootV1))
858        IniWrite(@ScriptDir & "\" & $sTitle & ".ini", "LAST_JOB", "DataRootV2", GUICtrlRead($Gui_tab0_edtDataRootV2))
859        IniWrite(@ScriptDir & "\" & $sTitle & ".ini", "LAST_JOB", "StrumapPrm", GUICtrlRead($Gui_tab0_edtStrumapPrm))
860        IniWrite(@ScriptDir & "\" & $sTitle & ".ini", "LAST_JOB", "Topo96Ext", GUICtrlRead($Gui_tab0_cboTopo96Ext))
861        IniWrite(@ScriptDir & "\" & $sTitle & ".ini", "LAST_JOB", "Topo93V1Ext", GUICtrlRead($Gui_tab0_cboTopo93V1Ext))
862        IniWrite(@ScriptDir & "\" & $sTitle & ".ini", "LAST_JOB", "Topo93V2Ext", GUICtrlRead($Gui_tab0_cboTopo93V2Ext))
863        IniWrite(@ScriptDir & "\" & $sTitle & ".ini", "LAST_JOB", "StrumapVer", GUICtrlRead($Gui_tab0_cboStrumapVer))
864EndFunc   ;==>_Settings_Save
865
866Func _Status_Update($hWnd, ByRef $aComputers)
867        If $hWnd > 0 Then Return 1
868        If Not IsArray($aComputers) Then Return 1
869EndFunc   ;==>_Status_Update