#include Global $toolname = "ODX for VAG" Global $workfolder = @WorkingDir Global $logfile Global $loghandle Global $batchmode = False Global $ShowWindows = False ; GUI variables Global $gui_line_height = 20 Global $gui_line_space = 10 Global $gui_text_height = 12 Global $gui_col_width = 120 Global $gui_col_space = 10 Global $gui_max_line_no = 18 Global $gui_max_col_no = 6 ; common array size for number of files Global $arrsiz = 50 Global $checksilent = False ; used for CheckFile() - silent mode needed in GUI ; ; bird call ; Global $birdjavaheap = "-Xmx512m" Global $birdjavaexe = "" Global $birdrootfolder = "" Global $birddotversion = False Global $birdtoolfolder = "" Global $birdjar = "bin\bird.jar" Global $birdargs Global $odxdirectarguments[2*$arrsiz] $odxdirectarguments[0] = 0 Global $custrootfolder = "" ; ; bird libraries for ODX ; Global $odxjarfolder = "" Global $odxjars Global $odxjar_cnt = 0 Global $conffolder = "" ; ; bird libraries for index generation ; Global $indexlib = "" Global $DeliverCheck = False ; ; customer folder ; Global $custfolder = $workfolder & "\CustomerSupplied" Global $xvfolder Global $xvpattern = "XV_*.odx" Global $xvfile = "" Global $pdxfolder Global $pdxpattern = "*.pdx" Global $pdxfile = "" ; ; admin folder ; Global $adminfolder = "" ; ; checker version ; Global $checkrootfolder, $checkversions[$arrsiz], $checkversion_cnt, $checkversionIDs[$arrsiz], $RunChecker[$arrsiz] Global $templatefile = "" Global $a2lfile = "" Global $ccefile = "" Global $dcmfile = "" Global $adminfile = "" Global $birdversion = "" Global $errlogfile = "" If $CmdLine[0] = 0 Then $batchmode = False CheckInstallation() CheckEnvironment() $infolder = $workfolder $outfolder = $workfolder If Not FileExists($custfolder) Then Message("ERROR", "customer folder does not exist:" & @LF & $custfolder & @LF & "please create or select" & @LF & "default set to working directory:" & $workfolder) $custfolder = $workfolder Else $xvfolder = $custfolder & "\xv" $xvfile = FindLastFile($xvfolder, $xvpattern) $pdxfolder = $custfolder & "\pdx" $pdxfile = FindLastFile($pdxfolder, $pdxpattern) EndIf If Not FileExists($adminfolder) Then Message("WARNING", "standard admin folder does not exist:" & @LF & $adminfolder & @LF & "please create or select" & @LF & "default set to working directory:" & $workfolder) $adminfolder = $workfolder EndIf ; ; progress must be specified here to be used in ViewProgrss function ; GUICreate($toolname & "", gui_width(), gui_height(),-1,-1,$WS_OVERLAPPEDWINDOW);BitOr($GUI_SS_DEFAULT_GUI,$WS_OVERLAPPEDWINDOW,$WS_MAXIMIZE)) $progressID = GUICtrlCreateProgress (gui_col(3), gui_line($gui_max_line_no), gui_col_width(2), $gui_line_height, $PBS_SMOOTH) GUICtrlSetState($progressID, $GUI_DISABLE) $progresslabelID = GUICtrlCreateLabel ("", gui_col(3), gui_line($gui_max_line_no)-$gui_line_height, gui_col_width(2), $gui_line_height) GUICtrlSetState($progresslabelID, $GUI_DISABLE) RunGui() Exit 0 ElseIf $CmdLine[0] = 1 Then $argfile = $CmdLine[1] If $argfile = "?" Then Message("USAGE", "Create ODX delivery container for AUDI project" & @LF & "Arguments: ? for help or argument file" & @LF & @LF & "Argument file structure:" & @LF & "each line contains exactly one argument" & @LF & "-... : BIRD arguments which are passed directly to BIRD" & @LF & "/= : ODX4VAG arguments (no spaces allowed before = !)" & @LF & "/template= (optional: newest one will be selected by default)" & @LF & "/coreconfig=" & @LF & "/a2l=" & @LF & "/dcm=" & @LF & "/xv=" & @LF & "/pdx=" & @LF & "/out= (will be created if not exists)" & @LF & "/admin=" & @LF & "/birdversion= (always "".-separated"", e.g. 1.3.1)" & @LF & "/checkversion= (e.g. v18b14, may be multiply specifed)" & @LF & "/delivercheck=[true|false] (if true all (!) checker results are zipped into final pdx container)" & @LF & "/show=[true|false] (show execution windows or run in background)") Exit 0 EndIf $batchmode = True SetPrio() CheckInstallation() CheckEnvironment() If Not FileExists($argfile) Then Message("USAGE", "Argument file not found:" & @LF & $argfile) Exit 1 EndIf $arghandle = FileOpen($argfile, 0) If $arghandle < 0 Then Message("USAGE", "Argument file not readable" & @LF & $argfile) Exit 1 EndIf While 1 $line = FileReadLine($arghandle) If @error Then ExitLoop If StringLeft($line,1) = "-" Then ; direct ODX argument AddArg($line) ElseIf StringLeft($line,1) = "/" Then $parts = StringSplit($line,"=") If Not ($parts[0] = 2) Then Message("USAGE", "Improper format (number of ""="" must be 1) of argument - argument will be ignored" & @LF & $line) Else $keyword = $parts[1] Select Case $keyword = "/template" $templatefile = $parts[2] Case $keyword = "/coreconfig" $ccefile = $parts[2] Case $keyword = "/a2l" $a2lfile = $parts[2] Case $keyword = "/dcm" $dcmfile = $parts[2] Case $keyword = "/xv" $xvfile = $parts[2] Case $keyword = "/pdx" $pdxfile = $parts[2] Case $keyword = "/out" $outfolder = $parts[2] If Not FileExists($outfolder) Then If DirCreate($outfolder) = 0 Then Message("ERROR", "Abortion: output folder cannet be created") Exit 1 EndIf EndIf $logfile = $outfolder & "\odx4vag.log" $loghandle = FileOpen($logfile, 2) If $loghandle < 0 Then Message("ERROR", "Abortion: no write access to output folder:" & @LF & $outfolder) Exit 1 Else FileClose($loghandle) ; to ensure that the file is empty EndIf Case $keyword = "/show" If $parts[2] = "true" Then $ShowWindows = True ElseIf $parts[2] = "false" $ShowWindows = False Else Message("USAGE", "Improper value """ & $parts[2] & """ for keyword """ & $keyword & """ - argument will be ignored" & @LF & $line) EndIf Case $keyword = "/admin" $adminfile = $parts[2] Case $keyword = "/birdversion" $birdversion = $parts[2] Case $keyword = "/checkversion" RunChecker($parts[2]) Case $keyword = "/delivercheck" If $parts[2] = "true" Then $DeliverCheck = True ElseIf $parts[2] = "false" $DeliverCheck = False Else Message("USAGE", "Improper value """ & $parts[2] & """ for keyword """ & $keyword & """ - argument will be ignored" & @LF & $line) EndIf Case Else Message("USAGE", "Improper keyword """ & $keyword & """ (must be ""true"" or ""false"") in argument - argument will be ignored" & @LF & $line) EndSelect EndIf Else Message("USAGE", "Improper format (start character must be ""/"" or ""-"") of argument - argument will be ignored" & @LF & $line) EndIf Wend $birdargs = BirdArgs($birdversion) $checksilent = false If Not CheckFile($outfolder, "Output folder") Then Message("ERROR", "Abortion due to missing input files") Exit 1 EndIf If Not CheckInFiles() Then Message("ERROR", "Abortion due to missing input files") Exit 1 EndIf $rc = ExecuteGeneration() Exit $rc Else Message("ERROR", "Improper usage - specify none or 1 argument(s) (? for help)") Exit 1 EndIf ;Func OnAutoItExit ( ) ; FileClose($loghandle) ;EndFunc Func Message ($class, $text) If $batchmode Then BatchMessage($class, $text) Else MsgBox(0, $toolname & " - " & $class, $text) EndIf Return EndFunc Func BatchMessage($class, $text) $newline = @CRLF & " " FileWriteLine($logfile, $toolname & " - " & $class & ": " & $newline & StringReplace($text, @LF, $newline)) Return EndFunc Func ViewProgress($percent, $text="") If $text = "" Then BatchMessage("PROGRESS", $percent) Else BatchMessage("PROGRESS", $percent & "% - " & $text) EndIf If Not $batchmode Then GUICtrlSetData ($progressID, $percent) GUICtrlSetData ($progresslabelID, $text) EndIf Return EndFunc Func CheckInFiles () If CheckFile($a2lfile, "A2L file") AND CheckFile($ccefile, "Core configuration export file") AND CheckFile($dcmfile, "DCM (calibration data) file") AND CheckFile($xvfile, "XV file (AUDI supplied)")AND CheckFile($pdxfile, "PDX file (AUDI supplied)") AND CheckFile($adminfile, "Admin data file") Then Return true Else Return false EndIf EndFunc Func CheckFile($file, $desc, $act = "") $result = FileExists($file) If ($checksilent = False) And ($result = 0) Then $text = $desc & " does not exist:" & @LF & $file If Not ($act = "") Then $text = $text & @LF & $act EndIf Message("ERROR", $text) EndIf Return $result EndFunc Func gui_text_line($gui_line_no) Return (($gui_line_height + $gui_line_space) * ($gui_line_no - 1)) + $gui_line_space + ($gui_line_height - $gui_text_height)/2 EndFunc Func gui_line($gui_line_no) Return (($gui_line_height + $gui_line_space) * ($gui_line_no - 1)) + $gui_line_space EndFunc Func gui_col($gui_col_no) Return (($gui_col_width + $gui_col_space) * ($gui_col_no - 1)) + $gui_col_space EndFunc Func gui_col_width($gui_col_no) Return (($gui_col_width + $gui_col_space) * ($gui_col_no - 1)) + $gui_col_width EndFunc Func gui_height() Return ($gui_line_height + $gui_line_space) * $gui_max_line_no + $gui_line_space EndFunc Func gui_width() Return ($gui_col_width + $gui_col_space) * $gui_max_col_no + $gui_col_space EndFunc Func RunGui() ; ; selection of project specific files ; $inID = GUICtrlCreateButton ("Project folder", gui_col(2), gui_line(1), gui_col_width(1), $gui_line_height);, -1, $WS_EX_ACCEPTFILES) $intextID = GUICtrlCreateInput ($infolder, gui_col(3), gui_line(1), gui_col_width($gui_max_col_no-2), $gui_line_height, BitOr($ES_OEMCONVERT,$ES_AUTOHSCROLL,$ES_READONLY)) $a2lID = GUICtrlCreateButton ("A2L File", gui_col(1), gui_line(2), gui_col_width(1), $gui_line_height);, -1, $WS_EX_ACCEPTFILES) $a2ltextID = GUICtrlCreateInput ("", gui_col(2), gui_line(2), gui_col_width($gui_max_col_no-1), $gui_line_height, BitOr($ES_OEMCONVERT,$ES_AUTOHSCROLL,$ES_READONLY)) $a2lfile = "" $cceID = GUICtrlCreateButton ("Core Export File", gui_col(1), gui_line(3), gui_col_width(1), $gui_line_height);, -1, $WS_EX_ACCEPTFILES) $ccetextID = GUICtrlCreateInput ("", gui_col(2), gui_line(3), gui_col_width($gui_max_col_no-1), $gui_line_height, BitOr($ES_OEMCONVERT,$ES_AUTOHSCROLL,$ES_READONLY)) $ccefile = "" $dcmID = GUICtrlCreateButton ("Calibration Data File", gui_col(1), gui_line(4), gui_col_width(1), $gui_line_height);, -1, $WS_EX_ACCEPTFILES) $dcmtextID = GUICtrlCreateInput ("", gui_col(2), gui_line(4), gui_col_width($gui_max_col_no-1), $gui_line_height, BitOr($ES_OEMCONVERT,$ES_AUTOHSCROLL,$ES_READONLY)) $dcmfile = "" ; ; select and edit admin ; $adminID = GUICtrlCreateButton ("Admin Data File", gui_col(1), gui_line(6), gui_col_width(1), $gui_line_height);, -1, $WS_EX_ACCEPTFILES) $admintextID = GUICtrlCreateInput ("", gui_col(2), gui_line(6), gui_col_width($gui_max_col_no-1), $gui_line_height, BitOr($ES_OEMCONVERT,$ES_AUTOHSCROLL,$ES_READONLY)) $adminfile = "" $adminhelp = "Adapt at least the contents of following XML element specified below:" & @LF & @LF & "" & @LF & " " & @LF & " " & @LF & " " & @LF & " " & @LF & " " & @LF & " " & @LF & @LF & " : Attribute ID-REF shall refer to your person" & @LF & " (check if available in )" & @LF & " : must equal calibrated value of BasSvrAppl_EepODXFileVer_C" & @LF & " : shall be current date in format ""yyyy-mm-ddThh:mm:ss""" ; ; selection of customer supplied files ; ;$custID = GUICtrlCreateButton ("Customer folder", gui_col(2), gui_line(6), gui_col_width(1), $gui_line_height);, -1, $WS_EX_ACCEPTFILES) ;$custtextID = GUICtrlCreateInput ($custfolder, gui_col(3), gui_line(6), gui_col_width($gui_max_col_no-2), $gui_line_height, BitOr($ES_OEMCONVERT,$ES_AUTOHSCROLL,$ES_READONLY)) $custID = GUICtrlCreateButton ("Customer folder", gui_col(2), gui_line(8), gui_col_width(1), $gui_line_height);, -1, $WS_EX_ACCEPTFILES) $custtextID = GUICtrlCreateInput ($custfolder, gui_col(3), gui_line(8), gui_col_width($gui_max_col_no-2), $gui_line_height, BitOr($ES_OEMCONVERT,$ES_AUTOHSCROLL,$ES_READONLY)) $xvID = GUICtrlCreateButton ("XV Variant", gui_col(1), gui_line(9), gui_col_width(1), $gui_line_height);, -1, $WS_EX_ACCEPTFILES) $xvtextID = GUICtrlCreateInput ($xvfile, gui_col(2), gui_line(9), gui_col_width($gui_max_col_no-1), $gui_line_height, BitOr($ES_OEMCONVERT,$ES_AUTOHSCROLL,$ES_READONLY)) $pdxID = GUICtrlCreateButton ("PDX File", gui_col(1), gui_line(10), gui_col_width(1), $gui_line_height);, -1, $WS_EX_ACCEPTFILES) $pdxtextID = GUICtrlCreateInput ($pdxfile, gui_col(2), gui_line(10), gui_col_width($gui_max_col_no-1), $gui_line_height, BitOr($ES_OEMCONVERT,$ES_AUTOHSCROLL,$ES_READONLY)) GUICtrlCreateLabel ("VAX-Checker version", gui_col(1), gui_text_line(11), gui_col_width(1), $gui_text_height);, BitOr($GUI_SS_DEFAULT_LABEL,$SS_CENTER)) For $cnt = 1 To $checkversion_cnt ;GUICtrlCreateLabel ($checkversions[$cnt], gui_col(2+$cnt), gui_line(9), gui_col_width(0.5), $gui_line_height) $checkversionIDs[$cnt] = GUICtrlCreateCheckbox($checkversions[$cnt], gui_col(1+$cnt), gui_line(11), gui_col_width(1), $gui_line_height);, BitOR($BS_AUTOCHECKBOX,$BS_RIGHTBUTTON)) NEXT GUICtrlCreateLabel ("Deliver Checker Result", gui_col(1), gui_text_line(12), gui_col_width(1), $gui_text_height);, BitOr($GUI_SS_DEFAULT_LABEL,$SS_CENTER)) $DeliverCheckID = GUICtrlCreateCheckbox ( "", gui_col(2), gui_line(12), gui_col_width(1), $gui_line_height);, BitOR($BS_AUTOCHECKBOX,$BS_RIGHTBUTTON)) $DeliverCheck = False ; default ; ; output folder ; $outID = GUICtrlCreateButton ("Output folder", gui_col(2), gui_line(14), gui_col_width(1), $gui_line_height);, -1, $WS_EX_ACCEPTFILES) $outtextID = GUICtrlCreateInput ($outfolder, gui_col(3), gui_line(14), gui_col_width($gui_max_col_no-2), $gui_line_height, BitOr($ES_OEMCONVERT,$ES_AUTOHSCROLL,$ES_READONLY)) ; ; bird version ; Local $birdversionlabel = "BIRD version" If Not $birddotversion Then $search = FileFindFirstFile($birdrootfolder&"\?v*") Else $search = FileFindFirstFile($birdrootfolder&"\?.*") Endif If $search = -1 Then Message("ERROR", "No BIRD installation found at:" & @LF & $birdrootfolder) Exit 1 EndIf Local $birdversion_cnt = 0 Local $file, $version, $versionstr, $lastversion $versionstr = "" While Not @error $file = FileFindNextFile($search) If @error Then ExitLoop $version = GetVersion($file) $versionstr = $versionstr & "|" & $version $lastversion = $version $birdversion_cnt = $birdversion_cnt + 1 WEnd FileClose($search) GUICtrlCreateLabel ($birdversionlabel, gui_col(1), gui_line(14), gui_col_width(1), $gui_line_height, BitOr($GUI_SS_DEFAULT_LABEL,$SS_CENTER)) $BirdID = GUICtrlCreateList ( "", gui_col(1), gui_line(14)+$gui_text_height, gui_col_width(1), $gui_text_height * ($birdversion_cnt+1)) GUICtrlSetData($BirdID, $versionstr, $lastversion) GUICtrlSetState($BirdID, $GUI_ENABLE) ; ; last line: start button, progress, exit button ; $OkID = GUICtrlCreateButton ("Start", gui_col(1), gui_line($gui_max_line_no), gui_col_width(1), $gui_line_height) GUICtrlSetState($OkID,$GUI_DISABLE) $CancelID = GUICtrlCreateButton ("Exit", gui_col($gui_max_col_no), gui_line($gui_max_line_no), gui_col_width(1), $gui_line_height) GUISetState() ; display the GUI Do $msg = GUIGetMsg() Select Case $msg = $inID $infolder_new = FileSelectFolder("project input folder", "", 1+2+7, $infolder) If Not ($infolder_new = $infolder) Then $infolder = $infolder_new GUICtrlSetData ( $intextID, $infolder ) $a2lfile = "" GUICtrlSetData ( $a2ltextID, $a2lfile ) $ccefile = "" GUICtrlSetData ( $ccetextID, $ccefile ) $dcmfile = "" GUICtrlSetData ( $dcmtextID, $dcmfile ) $outfolder = $infolder GUICtrlSetData ( $outtextID, $outfolder ) EndIf Case $msg = $intextID Case $msg = $custID $custfolder_new = FileSelectFolder("customer folder", "", 1+2+7, $custfolder) If Not ($custfolder_new = $custfolder) Then $custfolder = $custfolder_new GUICtrlSetData ( $custtextID, $custfolder ) $xvfolder = $custfolder & "\xv" $xvfile = FindLastFile($xvfolder, $xvpattern) GUICtrlSetData ( $xvtextID, $xvfile ) $pdxfolder = $custfolder & "\pdx" $pdxfile = FindLastFile($pdxfolder, $pdxpattern) GUICtrlSetData ( $pdxtextID, $pdxfile ) EndIF Case $msg = $custtextID Case $msg = $outID $outfolder = FileSelectFolder("output folder", "", 1+2+7, $outfolder) GUICtrlSetData ( $outtextID, $outfolder ) Case $msg = $outtextID Case $msg= $OkID GUICtrlSetState($OkID,$GUI_DISABLE) GUICtrlSetState($progressID, $GUI_ENABLE) GUICtrlSetState($progresslabelID, $GUI_ENABLE) If Not (ExecuteGeneration() = 0) Then If FileExists($errlogfile) Then ShellExecuteWait("notepad", $errlogfile, $outfolder) EndIf EndIf GUICtrlSetState($progressID, $GUI_DISABLE) GUICtrlSetState($progresslabelID, $GUI_DISABLE) GUICtrlSetState($OkID,$GUI_ENABLE) Case $msg= $adminID $adminfile = FileOpenDialog("admin file", $adminfolder, "admin files (Admin_*_Data.odx)", 1+2) If FileExists($adminfile) Then ToolTip($adminhelp, 0, 0, $toolname & " - INFO", 1) ShellExecuteWait("notepad", $adminfile, $adminfolder) ToolTip("") Else MsgBox(0, $toolname & " - FATAL ERROR", "admin file for odx file generation not found: " & $adminfile) $adminfile = "" EndIf GUICtrlSetData ( $admintextID, $adminfile ) Case $msg= $admintextID Case $msg= $CancelID Case $msg= $GUI_EVENT_CLOSE Case $msg= $a2lID $a2lfile = FileOpenDialog("a2l file", $infolder, "a2l files (*.a2l)", 1+2) GUICtrlSetData ( $a2ltextID, $a2lfile ) Case $msg= $a2ltextID Case $msg= $cceID $ccefile = FileOpenDialog("core config export file", $infolder, "cce files (*merged*export*.xml)", 1+2) GUICtrlSetData ( $ccetextID, $ccefile ) Case $msg= $ccetextID Case $msg= $dcmID $dcmfile = FileOpenDialog("calibration data file", $infolder, "dcm files (*.dcm;*.kon)", 1+2) GUICtrlSetData ( $dcmtextID, $dcmfile ) Case $msg= $dcmtextID Case $msg= $xvID $xvfile = FileOpenDialog("xv variant", $custfolder & "\xv", "xv files (XV_*.odx)", 1+2) GUICtrlSetData ( $xvtextID, $xvfile ) Case $msg= $xvtextID Case $msg= $pdxID $pdxfile = FileOpenDialog("pdx file", $custfolder & "\pdx", "pdx files (*.pdx)", 1+2) GUICtrlSetData ( $pdxtextID, $pdxfile ) Case $msg= $pdxtextID Case $msg= $BirdID Case $msg = $DeliverCheckID If GUICtrlRead ($DeliverCheckID) = $GUI_CHECKED Then $DeliverCheck = True Else $DeliverCheck = False EndIf Case Else For $cnt = 1 To $checkversion_cnt If $msg = $checkversionIDs[$cnt] Then If GUICtrlRead ($checkversionIDs[$cnt]) = $GUI_CHECKED Then $RunChecker[$cnt] = true Else $RunChecker[$cnt] = false EndIf EndIf Next EndSelect $birdversion = GUICtrlRead($BirdID) $birdargs = BirdArgs($birdversion) $checksilent = True If CheckFile($outfolder, "Output folder") And CheckInFiles () Then GUICtrlSetState ($OkID, $GUI_ENABLE) Else GUICtrlSetState ($OkID, $GUI_DISABLE) EndIf $checksilent = False Until ($msg = $GUI_EVENT_CLOSE) OR ($msg = $CancelID) Return EndFunc Func ExecuteGeneration() ; return 0 on success, other values indicate error $errlogfile = "" Local $cnt, $rc, $res, $show If $ShowWindows = true Then $show = @SW_SHOWDEFAULT ;@SW_MAXIMIZE Else $show = @SW_HIDE EndIf $res = FileCopy($conffolder & "\odx*.xsd", $outfolder & "\", 1) If NOT($res = 1) Then Message("ERROR", "odx schema files " & $conffolder & "\odx*.xsd not copied to " & $outfolder & "\") Return 1 EndIf ; ; copy pdx file to output folder and unzip odx files ; ViewProgress(0, "prepare input files") Local $pdxdest = $outfolder & "\odx4vag_odxoutputfile.pdx" $res = FileCopy($pdxfile, $pdxdest, 1) If NOT($res = 1) Then Message("ERROR", "pdx file " & $pdxfile & " not copied to " & $pdxdest) Return 1 EndIf ViewProgress(2) Local $pdxfolder = $outfolder&"\pdx" DirCreate ($pdxfolder) If NOT(FileExists($pdxfolder) = 1) Then Message("ERROR", "temp ouput folder could not be created: " & $pdxfolder) Return 1 EndIf $rc = ShellExecuteWait("c:\program files\winzip\wzunzip", $pdxdest & " " & $pdxfolder & " *.odx -o -yO", $workfolder, "open", $show) If NOT($rc = 0) Then Message("ERROR", "odx files not extracted from " & $pdxdest & " to " & $pdxfolder) Return 1 EndIf ViewProgress(4) $rc = ShellExecuteWait("c:\program files\winzip\wzunzip", $pdxdest & " " & $pdxfolder & " index.xml -o -yO", $workfolder, "open", $show) If NOT($rc = 0) Then Message("ERROR", "index.xml not extracted from " & $pdxdest & " to " & $pdxfolder) Return 1 EndIf ; ; start ODX and index file generation ; ViewProgress(6, "odx file generation (10')" ) Local $outfile, $birdlogfile, $cfgfile If Not FileExists($templatefile) Then $templatefile = FindLastFile($conffolder & "\template", "Template_*.odx") EndIf $outfile = $outfolder & "\odx4vag_odxoutputfile.odx" $birdlogfile = $outfolder & "\odx4vag_odxoutputfile.log" $cfgfile = $outfolder & "\odx4vag_odxoutputfile.cfg" $cfghandle = FileOpen($cfgfile, 2) If $cfghandle < 0 Then Message("ERROR", "bird argument file could not be created: " & @LF & $cfgfile) Return 1 EndIf For $cnt = 1 To $odxdirectarguments[0] FileWriteLine($cfghandle, $odxdirectarguments[$cnt]) Next FileWriteLine($cfghandle, "--template " & $templatefile) FileWriteLine($cfghandle, "--data merged_corecfg_export,XML," & $ccefile) FileWriteLine($cfghandle, "--data dcm,DCM20," & $dcmfile) FileWriteLine($cfghandle, "--data a2l,ASAP2-MC," & $a2lfile) FileWriteLine($cfghandle, "--data project_template,XML," & $adminfile) FileWriteLine($cfghandle, "--data cust_xv,XML," & $xvfile) Local $line Local $custodxfiles = FindFiles($pdxfolder, "*.odx") For $cnt = 1 To $custodxfiles[0] $line = CreateBirdDataArgument($pdxfolder, $custodxfiles[$cnt], "cust_") If Not($line = "") Then FileWriteLine($cfghandle, $line) EndIf Next WriteDataFileArgs($cfghandle, $conffolder & "\correction", "*.xml") WriteDataFileArgs($cfghandle, $conffolder & "\correction", "*.odx") WriteDataFileArgs($cfghandle, $conffolder & "\mapping", "*.xml") FileWriteLine($cfghandle, "--suppress_input_validation") For $cnt = 1 To $odxjar_cnt FileWriteLine($cfghandle, "--library " & $odxjarfolder & "\" & $odxjars[$cnt]) Next FileWriteLine($cfghandle, "--out " & $outfile) ; FileWriteLine($cfghandle, "--suppress_output_validation") ; to be deleted ; FileWriteLine($cfghandle, "--max_output_validation_errors 0") ; to be inserted FileWriteLine($cfghandle, "-l " & $birdlogfile) FileWriteLine($cfghandle, "-q") FileClose($cfghandle) FileDelete($outfile) $rc = ShellExecuteWait($birdjavaexe , BirdArgs($birdversion) & " -a """ & $cfgfile & """", $workfolder, "open", $show) If NOT ($rc = 0) Then If FileExists($birdlogfile) Then $errlogfile = $birdlogfile EndIf Message("ERROR", "odx file generation failed, error level: " & $rc & @LF & "please see end of log file for details") Return $rc ElseIf Not FileExists($outfile) Then If FileExists($birdlogfile) Then $errlogfile = $birdlogfile EndIf Message("ERROR", "odx file not generated: " & $outfile) Return 1 EndIf ViewProgress(56, "index file generation (1')" ) Local $indextemplatefile $indextemplatefile = $conffolder & "\template\Template_index.xml" $outfile = $outfolder & "\index.xml" $birdlogfile = $outfolder & "\index.log" $cfgfile = $outfolder & "\index.cfg" $cfghandle = FileOpen($cfgfile, 2) If $cfghandle < 0 Then Message("ERROR", "bird argument file could not be created: " & @LF & $cfgfile) Return 1 EndIf FileWriteLine($cfghandle, "--template " & $indextemplatefile) FileWriteLine($cfghandle, "--data dcm,DCM20," & $dcmfile) FileWriteLine($cfghandle, "--data index,XML," & $outfolder & "\pdx\index.xml") FileWriteLine($cfghandle, "--suppress_input_validation") FileWriteLine($cfghandle, "--library " & $indexlib) FileWriteLine($cfghandle, "--out " & $outfile) ; FileWriteLine($cfghandle, "--suppress_output_validation") FileWriteLine($cfghandle, "-l " & $birdlogfile) FileWriteLine($cfghandle, "-q") FileClose($cfghandle) FileDelete($outfile) $rc = ShellExecuteWait($birdjavaexe, BirdArgs($birdversion) & " -a """ & $cfgfile & """", $workfolder, "open", $show) If NOT ($rc = 0) Then If FileExists($birdlogfile) Then $errlogfile = $birdlogfile EndIf Message("ERROR", "index file generation failed, error level: " & $rc & @LF & "please see end of log file for details") Return $rc ElseIf Not FileExists($outfile) Then If FileExists($birdlogfile) Then $errlogfile = $birdlogfile EndIf Message("ERROR", "index file not generated: " & $outfile) Return 1 EndIf ViewProgress(66, "renaming files" ) DirRemove ( $outfolder & "\pdx", 1 ) ; remove odx schema Files FileDelete($outfolder & "\odx*.xsd") ; ; parse generated index file for EV file name -> $evFile ; $ifile = $outfolder & "\index.xml" $ihandle = FileOpen($ifile,0) If $ihandle = -1 Then Message("ERROR", "index file " & $ifile & " not found") Return 1 Else $found = 0 $iline = FileReadLine($ihandle) While (NOT @error) AND ($found = 0) $posStart = StringInStr($iline,">EV_",1) $posEnd = StringInStr($iline,".odx",1) If ($posStart > 0) AND ($posEnd > 0) Then $evFile = StringMid($iline,$posStart+1,($posEnd-$posStart-1)) $found = 1 Else $iline = FileReadLine($ihandle) EndIf Wend If @error Then Message("ERROR", "EV name not found in index file " & $ifile & @LF & "implementation error: check index file generation and analysis for consistency") Return 1 EndIf EndIf ViewProgress(68) ; ; rename files to final names ; $odxfinal = $outfolder & "\" & $evFile & ".odx" $logfinal = $outfolder & "\" & $evFile & ".log" $cfgfinal = $outfolder & "\" & $evFile & ".cfg" $pdxfinal = $outfolder & "\" & $evFile & ".pdx" $res1 = FileMove($outfolder & "\odx4vag_odxoutputfile.odx", $odxfinal, 1) $res2 = FileMove($outfolder & "\odx4vag_odxoutputfile.log", $logfinal, 1) $res3 = FileMove($outfolder & "\odx4vag_odxoutputfile.cfg", $cfgfinal, 1) $res4 = FileMove($outfolder & "\odx4vag_odxoutputfile.pdx", $pdxfinal, 1) If (NOT($res1 = 1)) OR (NOT($res2 = 1)) OR (NOT($res3 = 1)) OR (NOT($res4 = 1)) Then Message("ERROR", "output file(s) " & $outfolder & "\odx4vag_odxoutputfile.*" & " not renamed to " & $evFile) Return 1 EndIf ViewProgress(72, "check odx file (2')") ; ; update pdx file for checker ; $rc = ShellExecuteWait("c:\program files\winzip\wzzip", $pdxfinal & " " & $odxfinal & " -u", $workfolder, "open", $show) If NOT($rc = 0) Then Message("ERROR", $odxfinal & " not zipped into " & $pdxfinal) Return $rc EndIf ViewProgress(74) $rc = ShellExecuteWait("c:\program files\winzip\wzzip", $pdxfinal & " " & $ifile & " -u", $workfolder, "open", $show) If NOT($rc = 0) Then Message("ERROR", $ifile & " not zipped into " & $pdxfinal) Return $rc EndIf ViewProgress(76) $actProgress = 76 ; ; call checker and add result to pdx ; $rc_final = 0 $runcnt = 0 For $cnt = 1 To $checkversion_cnt If $RunChecker[$cnt] = true Then $runcnt = $runcnt + 1 EndIf Next If $runcnt > 0 Then Local $jarfiles Local $checkopts Local $jcnt $progress_step = (100 - $actProgress) / $runcnt For $cnt = 1 To $checkversion_cnt If $RunChecker[$cnt] = True Then $checkversion = $checkversions[$cnt] ViewProgress($actProgress,"VAX-Checker " & $checkversion) $checkfinal = $outfolder & "\" & $evFile & "_check_" & $checkversion & ".html" $checkfolder = $checkrootfolder & "\" & $checkversion $checkopts = "-cp vaxtoolbox.jar" $jarfiles = FindFiles($checkfolder & "\lib\endorsed", "*.jar") For $jcnt = 1 To $jarfiles[0] $checkopts = $checkopts & ";lib\endorsed\" & $jarfiles[$jcnt] Next $jarfiles = FindFiles($checkfolder & "\lib", "*.jar") For $jcnt = 1 To $jarfiles[0] $checkopts = $checkopts & ";lib\" & $jarfiles[$jcnt] Next $checkopts = $checkopts & " com.tsystems.checker.Checker -pdx " & $pdxfinal & " -odx "& $evFile & ".odx -result " & $checkfinal & " -de -html" ;Message("TEST", $checkopts & @LF & "-cp vaxtoolbox.jar;lib\endorsed\xalan.jar;lib\endorsed\xercesImpl.jar;lib\endorsed\xml-apis.jar;lib\endorsed\serializer.jar;lib\avalon-framework.jar;lib\batik.jar;lib\checkResult.jar;lib\diffResult.jar;lib\diffResultObj.jar;lib\dom4j-1.5.jar;lib\fop.jar;lib\jakarta-oro-2.0.6.jar;lib\jaxen-1.1-beta-2.jar;lib\jdom.jar;lib\jh.jar;lib\jlicman.jar;lib\jsr173_1.0_api.jar;lib\log4j-1.2.8.jar;lib\odx201.jar;lib\poi-2.5.1-final-20040804.jar;lib\projectData.jar;lib\ruleList.jar;lib\saxon8.jar;lib\xbean.jar;lib\xbean_xpath.jar;lib\xslbin_tx.jar;lib\xslbin_vax.jar com.tsystems.checker.Checker -pdx " & $pdxfinal & " -odx "& $evFile & ".odx -result " & $checkfinal & " -de -html") ;$rc = ShellExecuteWait("java", "-cp vaxtoolbox.jar;lib\endorsed\xalan.jar;lib\endorsed\xercesImpl.jar;lib\endorsed\xml-apis.jar;lib\endorsed\serializer.jar;lib\avalon-framework.jar;lib\batik.jar;lib\checkResult.jar;lib\diffResult.jar;lib\diffResultObj.jar;lib\dom4j-1.5.jar;lib\fop.jar;lib\jakarta-oro-2.0.6.jar;lib\jaxen-1.1-beta-2.jar;lib\jdom.jar;lib\jh.jar;lib\jlicman.jar;lib\jsr173_1.0_api.jar;lib\log4j-1.2.8.jar;lib\odx201.jar;lib\poi-2.5.1-final-20040804.jar;lib\projectData.jar;lib\ruleList.jar;lib\saxon8.jar;lib\xbean.jar;lib\xbean_xpath.jar;lib\xslbin_tx.jar;lib\xslbin_vax.jar com.tsystems.checker.Checker -pdx " & $pdxfinal & " -odx "& $evFile & ".odx -result " & $checkfinal & " -de -html", $checkfolder, "open", $show) $rc = ShellExecuteWait("java", $checkopts, $checkfolder, "open", $show) If NOT($rc = 0) Then Message("ERROR", "VAX checker " & $checkversion & " not run properly") $rc_final = $rc EndIf If $DeliverCheck Then $rc = ShellExecuteWait("c:\program files\winzip\wzzip",$pdxfinal & " " & $checkfinal & " -u", $workfolder, "open", $show ) If NOT($rc = 0) Then Message("ERROR", $checkfinal & " not zipped into " & $pdxfinal) $rc_final = $rc EndIf EndIf $actProgress = $actProgress + $progress_step EndIf Next EndIf ViewProgress(100, "finished") Message("FINISH", "result files available in " & @LF & $outfolder & @LF & "and packed into PDX file" & @LF & $pdxfinal) Return $rc_final EndFunc Func FindLastFile($folder, $pattern) Local $allfiles = FindFiles($folder, $pattern) Local $retfile = "" Local $lasttime = "0" Local $cnt Local $time Local $file For $cnt = 1 To $allfiles[0] $file = $folder & "\" & $allfiles[$cnt] $time = FileGetTime($file, 0, 1) If $time > $lasttime Then $retfile = $file $lasttime = $time EndIf Next Return $retfile EndFunc Func FindFiles($folder, $pattern) Local $filearray[$arrsiz], $cnt, $file, $search $cnt = 0 $filearray[0] = 0 If Not FileExists($folder) Then Message("ERROR", "folder does not exist:" & @LF & $folder) Return $filearray EndIf $search = FileFindFirstFile($folder & "\" & $pattern) If $search = -1 Then Message("ERROR", "No " & $pattern & " files found in folder:" & @LF & $folder) Return $filearray EndIf While Not @error $cnt = $cnt + 1 If $cnt >= $arrsiz Then Message("ERROR", "More than " & $arrsiz & " " & $pattern & " files found in folder:" & @LF & $folder & @LF & "increase internal array size!") Exit 1 EndIf $file = FileFindNextFile($search) If @error Then ExitLoop $filearray[$cnt] = $file WEnd $filearray[0] = $cnt-1 FileClose($search) return $filearray EndFunc Func CreateBirdDataArgument ($folder, $file, $prefix) Local $parts, $ext, $split, $odxtype, $symbolic, $argument $argument = "" ; shall be ignored if not changed $parts = StringSplit($file,".") If $parts[0] < 2 Then Message("WARNING", "Improper file name " & $file & " detected: no extension found" & @LF & "file will be ignored:" & @LF & $folder & "\" & $file) Else $ext = $parts[$parts[0]] ; If $ext = "odx" Then If $prefix = "" Then $symbolic = StringLower($prefix & $parts[1]) ; up to the 1st "." for RB xml and odx files (file name = symbolic name) Else $split = StringSplit($parts[1],"_") $symbolic = StringLower($prefix & $split[1]) EndIf ; $odxtype = $split[1] ; If $odxtype = "BV" Then ; $symbolic = "odx_bv" ; ElseIf $odxtype = "ES" Then ; $symbolic = "odx_es" ; ElseIf $odxtype = "PR" Then ; $symbolic = "odx_pr" ; ElseIf $odxtype = "XV" Then ; $symbolic = "xv" ; ElseIf $odxtype = "DiagCanComparamSpec" Then ; $symbolic = "comparam_ref" ; ElseIf $odxtype = "VI" Then ; $symbolic = "" ; AUDI vehicle interface shall be ignored ; ElseIf $odxtype = "FG" Then ; $symbolic = "" ; AUDI functional group shall be ignored ; Else ; $symbolic = $parts[1] ; up to the 1st "." for RB ODX files (file name = symbolic name) ; EndIf ; ElseIf $ext = "xml" Then ; $symbolic = StringLower($prefix & $parts[1]) ; up to the 1st "." for RB xml files (file name = symbolic name) ; Else ; $symbolic = "" ; shall be ignored ; EndIf ; If Not($symbolic = "") Then $argument = "--data " & $symbolic & ",XML," & $folder & "\" & $file ; EndIf EndIf Return $argument EndFunc ; ; bird arguments from command line ; Func AddArg($arg) If $odxdirectarguments[0] >= (2*$arrsiz)-1 Then Message("ERROR", "argument array overflow" & @LF & "increase array size of odx argument array") Exit 1 EndIf $odxdirectarguments[0] = $odxdirectarguments[0] + 1 $odxdirectarguments[$odxdirectarguments[0]] = $line Return EndFunc Func BirdArgs($version) Local $args If Not $birddotversion Then $version = GetNVersion($version) EndIF Local $birdversfolder = $birdrootfolder & "\" & $version If Not FileExists($birdversfolder) Then Message("ERROR", "bird installation not found:" & @LF & $birdversfolder) Exit 1 EndIf $args = $birdjavaheap & " -jar """ & $birdversfolder & "\" & $birdjar & """" Return $args EndFunc Func GetNVersion($version) Return StringReplace(StringReplace($version, ".", "v", 1), ".", "_") EndFunc Func GetVersion($nversion) Return StringReplace(StringReplace($nversion, "v", ".", 1), "_", ".") EndFunc FUNC RunChecker($version) Local $cnt For $cnt = 1 To $checkversion_cnt If $version = $checkversions[$cnt] Then $RunChecker[$cnt] = True EndIf Next Return EndFunc Func CheckEnvironment() If Not FileExists($birdjavaexe) Then Message("ERROR", "java executable for bird not found:" & @LF & $birdjavaexe) Exit 1 EndIf If Not FileExists($birdrootfolder) Then Message("ERROR", "bird installation root not found:" & @LF & $birdrootfolder) Exit 1 EndIf If $odxjar_cnt = 0 Then Message("ERROR", "jar libraries for ODX generation not found in folder:" & @LF & $odxjarfolder) Exit 1 EndIf If Not FileExists($indexlib) Then Message("ERROR", "jar library for index generation not found:" & @LF & $indexlib) Exit 1 EndIf Return EndFunc Func CheckInstallation() $custrootfolder = "\\Si7274\k3pr_sgsw\003\Tools\ODX\Diagnose" If Not FileExists($custrootfolder) Then $custrootfolder = $workfolder EndIf CheckBirdInstallation() CheckBirdConfiguration() CheckCustomerFolder() CheckAdminFolder() Return EndFunc Func CheckAdminFolder() $adminfolder = $workfolder & "\ProjectAdmin" If Not FileExists($adminfolder) Then $adminfolder = $custrootfolder & "\ProjectAdmin" EndIf Return EndFunc Func CheckCustomerFolder() ; $custfolder = $workfolder & "\CustomerSupplied" If Not FileExists($custfolder) Then $custfolder = $custrootfolder & "\CustomerSupplied" EndIf $checkrootfolder = $custfolder & "\VAX-Toolbox" $checkversions = FindFiles($checkrootfolder, "v*") $checkversion_cnt = $checkversions[0] $checkversionIDs[0] = $checkversion_cnt $RunChecker[0] = $checkversion_cnt For $cnt = 1 To $checkversion_cnt $RunChecker[$cnt] = False Next Return EndFunc Func CheckBirdInstallation() ; 1st look for local installation, then for I, then for toolbase $birdtoolfolder = $workfolder & "\BIRD\Bird" $birdjavaexe = $birdtoolfolder & "\Java\1.5.0_07\bin\java.exe" If FileExists($birdjavaexe) Then $birdrootfolder = $birdtoolfolder $birddotversion = False Else $birdtoolfolder = "\\si6245\k3_pc\Programme\K3Util\Freigabe\Tools\Bird" ; "\\bosch.com\dfsrb\DfsDE\LOC\Si\GS\SDE\Mx17\tme17_appl\Programme\Tools\Bird" $birdjavaexe = $birdtoolfolder & "\Java\1.5.0_07\bin\java.exe" If FileExists($birdjavaexe) Then $birdrootfolder = $birdtoolfolder $birddotversion = False Else $birdtoolfolder = "C:\toolbase\bird" $birdjavaexe = $birdtoolfolder & "\..\java\1.5.0_07\bin\java.exe" If FileExists($birdjavaexe) Then $birdrootfolder = $birdtoolfolder $birddotversion = True Else Message("ERROR", "No BIRD installation found") Exit(1) EndIf EndIf EndIf Return EndFunc Func CheckBirdConfiguration() Local $birdcustfolder = $workfolder & "\BIRD" If Not FileExists($birdcustfolder) Then $birdcustfolder = $custrootfolder & "\BIRD" EndIf $odxjarfolder = $birdcustfolder & "\_bin" If Not FileExists($odxjarfolder) Then Message("ERROR", "BIRD _bin folder does not exist:" & @LF & $odxjarfolder) EndIf $odxjars = FindFiles($odxjarfolder, "*.jar") $odxjar_cnt = $odxjars[0] $indexlib = $odxjarfolder & "\" & "Admin.jar" $conffolder = $birdcustfolder & "\_conf" If Not FileExists($conffolder) Then Message("ERROR", "BIRD _conf folder does not exist:" & @LF & $conffolder) EndIf Return EndFunc Func SetPrio() ; set process priority to "BELOW_NORMAL" Local $_procname = StringLeft(@ScriptName, 15) Local $_proclist = ProcessList($_procname) Local $_proccnt For $_proccnt = 1 To $_proclist[0][0] ; change process priority for all processes ... ProcessSetPriority($_proclist[$_proccnt][1], 1) Next Return EndFunc Func WriteDataFileArgs($filehandle, $rbdatafolder, $pattern) Local $rbdatafiles $rbdatafiles = FindFiles($rbdatafolder, $pattern) For $cnt = 1 To $rbdatafiles[0] $line = CreateBirdDataArgument ($rbdatafolder, $rbdatafiles[$cnt], "") If Not($line = "") Then FileWriteLine($filehandle, $line) EndIf Next Return EndFunc