Sign in to follow this  
Followers 0
UEZ

ISO Creator v1.16 build 2012-09-11 beta

74 posts in this topic

#1 ·  Posted (edited)

Hi,

here a little tool to create ISO files from default ISO 9660 (2048 bytes/sector) CD or DVD format (no audio cd and BD support yet!)

post-29844-0-49311600-1313787409_thumb.j

Source is too huge for code box :alien: -> Look here to have a look to the source code

Additional credits to:

Ward for MD5 checksum / MemoryDLL routines

Harald Vistnes for cd2iso used in v1 and v2

Yashied for WinAPIEx.au3

wolf9228 to play wave from memory

AutoItObject Team

Download (purely written with AutoIt): ISO Creator v1.16 build 2012-09-11 beta.7z (367 downloads previously)

Thanks to smashly for pointing me to right direction :huh2:

The development of v1 and v2 is discontinued!

Download v1: ISO Creator v1.0.0 build 2011-08-03 beta v1.7z (195 downloads previously)

Download v2 (everything is called directly from memory): ISO Creator v1.0.0 build 2011-08-03 beta v2.7z (117 downloads previously)

Thanks to smartee for the DLL version (experimental) of cd2iso!

v1 is using cd2iso.exe to create the ISO

v2 is using cd2iso.dll which was created by smartee.

For compiled v1, v2 and pure AutoIt versions only (x86) visit (ISO Creator Exe only): 4shared.com or MediaFire

You can call ISO Creator.exe also with command line parameters: ISO Creator.exe -s [source cd/dvd drive] -d [filename] (-md5) (-aem) (-exit)

-s and -d are mendatory if called from command line!

Tested on Win7 x64.

If you find any bug please report here!

Many thanks to smartee and smashly for their efforts on this project!

Br,

UEZ :ph34r:

Change Log:

2011-06-17: added better check whether any media is inserted/mounted on the listed drives

2011-06-17: added option to create MD5 checksum of created ISOs + background texture of input box

2011-06-18: added v2 which is completely called from memory! Thanks for smartee for converting the exe into a DLL ;)

2011-06-18: disabled cursor blinking in input box

2011-06-19: added command line parameter support -> ISO Creator.exe -s [source cd/dvd drive] -d [filename]

2011-06-20: added mor information about the media in combo box (thanks to smartee for the idea)

2011-06-20: some small bugs fixed

2011-06-21: added some small feature like eject disk and added v3 which is written in pure AutoIt (thanks to smashly for pointing me to right direction)

2011-06-22: added CD001 check also for EL TORITO SPECIFICATION section and some bugs fixed

2011-06-25: added command line parameter -exit to exit program when finished + feature to change background image + small bug fixes

2011-08-03: modified some look'n'feel settings

2011-08-19: added disc image to view how sectors are read + some internal changes. The development of v1 and v2 is discontinued!

2011-08-23: some internal changes regareding GDI+ drawing and change info in disc image to x/ disc size mb

2011-08-29: removed one check in function ISO9660_Check() otherwise UDF discs will not be copied and enabled drawing of the sectors onto the disc image.

2011-08-30: found bug in display of MB copied on disc image and added MD5 creation from menu -> you can create now MD5 files from ISOs directly

2011-09-11: added play short sound when finished or aborted + update function

2011-09-24: changed ISO check function and some small code modifications

2011-10-06: made some small changes to the MD5 checksum function

2011-12-28: fixed a bug in combo resizing code and added check when no drive is available

2012-03-06: added $iShare parameter in _WinAPICreateFile() (ISO check function) line because otherwise an error may return when creating an ISO image

2012-09-10: fixed a bug in sector view and update check function, added taskbar progress bar and added feature to eject media when task is finsihed

2012-09-11: fixed a bug on app crashing when an external CD/DVD was plugged in and combo selection was not working properly, added DVD+RW DL and DVD+R DL media type into the list

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites



Very cool! A couple of interesting things to be learnt with your Script UEZ.


_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 04/09/2015

Share this post


Link to post
Share on other sites

Just out of interest, what is the source for the actual ISO creator itself?

(ofc you are not obliged to answer that)

Share this post


Link to post
Share on other sites

I used cd2iso 1.0 which is a command line tool made by Harald Vistnes.

Br,

UEZ


Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites

Added option to create MD5 checksum of created ISOs.

Br,

UEZ


Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites

Very nice UEZ, Load_BMP_From_Mem() is awesome. :huh2:

Share this post


Link to post
Share on other sites

#8 ·  Posted (edited)

Thanks for your comments! :huh2:

I updated the code again. Now you can see a texture in the input box.

Source code is now too big to post it into code box. ;) Sorry.

Anybody got any issue, problem or bug?

Br,

UEZ

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites

Hi UEZ,

Here's an idea ;) , I've taken a look at the source for cd2iso, it should be fairly straightforward to turn it into a dll, with some callback functions, then load that into memory and use it. Have you considered doing this?

Going this route should be easier than loading the exe from memory.

Also, wasn't the code displaying fine a few mins ago? :huh2:

-smartee

Share this post


Link to post
Share on other sites

@smartee: I'm unfortunately a noob regarding C++. I wanted to ask the coder whether he can provide a DLL version of it. I'm not able to this. :huh2:

A DLL can be loaded directly from mem using Ward's code.

After I added the code for the texture in the input box I cannot post the code into the code box anymore.

Br,

UEZ


Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites

Great job, UEZ :huh2:

Noob question: Can I create ISO from bootable CD, then recreate bootable CD from ISO?

Share this post


Link to post
Share on other sites

Great job, UEZ :huh2:

Noob question: Can I create ISO from bootable CD, then recreate bootable CD from ISO?

To be honest I didn't try it but it should work.

Br,

UEZ


Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites

#13 ·  Posted (edited)

I'm no expert at C++ either but I always play around with new languages in case one day my life depends on one :huh2:

Here's a rough port, all the functions with as little modification as possible, as a proof of concept; if you are interested, I can try to make it better.

Download Link

Careful though, it can be tricky to exit while control is in the dll's hands. PS: right now the callback function gets called alot

Regards,

-smartee

Edited by smartee

Share this post


Link to post
Share on other sites

#14 ·  Posted (edited)

@smartee: thank you very much! I will try to integrate it to the actual code.

Without the possibility to abort iso creation it will a pain in the ass.

Br,

UEZ

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites

hi

thank you very much :huh2:

Share this post


Link to post
Share on other sites

@smartee: thank you very much! I will try to integrate it to the actual code.

Without the possibility to abort iso creation it will a pain in the ass.

My pleasure.

Totally. Working on a exit strategy :huh2:

Share this post


Link to post
Share on other sites

#17 ·  Posted (edited)

In an attempt to return control to AutoIt, I'm splitting up the dll functions then calling them, it looks more elegant too. I'm going take a break so I packaged what I have so far for you to test; I have done no error checking whatsoever :huh2:

Download Link

Edited by smartee

Share this post


Link to post
Share on other sites

you can make the loop like this it will show percent :huh2:

;copy all sectors
For $i = 17 To $aResult[0]
    $m=GUIGetMsg()
    DllCall($sDllPath, "int:cdecl", "CopySector")
    WinSetTitle($Form1,"",($i/$aResult[0])*100&"% complete")
    GUICtrlSetData($Progress1,($i/$aResult[0])*100)
    If $m=-3 or $m=$Button1 Then ExitLoop
Next

Share this post


Link to post
Share on other sites

Ok, thank you very MUCH. I will try to embedd it and will come back when it is finished. :huh2:

Br,

UEZ


Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites

Very nice program, UEZ. I'm still trying to figure out how it works. You said you used cd2iso 1.0 which is command line. Your script runs for me without any other files. Therefore, I assume you ported part of their C++ code to AutoIt. Would that be the bunch of hex values for the variable $ISOCreator? Is that just header information and the files are simply packed after the header?

Again, this is some really nice work. I'm gonna keep studying it and maybe I'll learn a few tricks.


#include <ByteMe.au3>

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Similar Content

    • c.haslam
      By c.haslam
      The cDebug script includes 3 debugging UDFs: _MsgDebug(), _ConsDebug() and _ClipDebug(). They all dump the values of scalars, vectors, constants and 2-D arrays, and report variables that are Objects and DLLStructs. As indicated by their names, they dump to a message box, to the SciTE console, and to the Clipboard respectively.
      The UDFs are also able to dump portions of vectors and rectangular portions of arrays.
      The format for calling the UDFs has been designed to make coding a call as convenient as possible, minimizing coding effort and the chances of errors: the $name argument is often the same as the variables arguments, enclosed in quote marks.
      #include-once #include <GuiConstants.au3> #include <GuiListView.au3> #include <StringConstants.au3> #include <WindowsConstants.au3> Opt("MustDeclareVars",1) ; Documentation: _cDebug.pdf ; Version 1.0.0 ; #FUNCTION# ==================================================================================================================== ; Name ..........: _ConsDebug ; Description ...: Dumps the value of variables and expressions to the Console ; Syntax ........: _ConsDebug($location, $names,$val1[[[[[[[[[[[[[[[[[, $val2 = Default], $val3 = Default], _ ; $val4 = Default], $val5 = Default], $val6 = Default], $val7 = Default], $val8 = Default], _ ; $val9 = Default], $val10 = Default], $val11 = Default], $val12 = Default] _ ; [, $val13 = Default], $val14 = Default], $val15 = Default], $val16 = Default], _ ; $val17 = Default], $val18 = Default], $val19 = Default]) ; Parameters ....: $location - a string: title ; If ^ is in the string, the dump is also sent to the Clipboard ; $names - comma-separted names to be shown in the dump, one per value ; If | is the first character, dumped strings start and end with ; Char(166), a broken bar ; '[controls][<title>:]name1,name2, ...' ; $val1 - a variant value. ; $val2 thru $val19 - [optional] a variant value. Default is not used ; Return values .: None ; Author ........: c.haslam at ieee dot org ; Modified ......: ; Remarks .......See _cDebug.pdf for details of functionality ; Related .......: _MsgDebug,_ClipDebug ; Link ..........: ; Example .......: _ConsDebug('Line '&@ScriptLineNumber','$bInt,$ar,StringInStr($str,":")',$bInt,$ar,StringInStr($str,':')) ; =============================================================================================================================== Func _ConsDebug($location,$names,$val1,$val2=Default,$val3=Default,$val4=Default,$val5=Default,$val6=Default,$val7=Default,$val8=Default _ ,$val9=Default,$val10=Default,$val11=Default,$val12=Default,$val13=Default,$val14=Default,$val15=Default,$val16=Default,$val17=Default, _ $val18=Default,$val19=Default) Local $bToClipboard = StringInStr($location,'^')<>'' If $bToClipboard Then $location = StringReplace($location,'^','') ; all EndIf Local $t = '***'&$location&'-------------------------'&@CRLF& _ _FormatValsForDebug($location,$names,$val1,$val2,$val3,$val4,$val5,$val6,$val7,$val8, _ $val9,$val10,$val11,$val12,$val13,$val14,$val15,$val16,$val17,$val18,$val19) ConsoleWrite($t) If $bToClipboard Then _UpdateClipboard($t) EndIf EndFunc ; #FUNCTION# ==================================================================================================================== ; Name ..........: _ClipDebug ; Description ...: Dumps the value of variables and expressions to the Clipboard ; Syntax ........: _ClipDebug($location, $names,$val1[[[[[[[[[[[[[[[[[, $val2 = Default], $val3 = Default], _ ; $val4 = Default], $val5 = Default], $val6 = Default], $val7 = Default], $val8 = Default], _ ; $val9 = Default], $val10 = Default], $val11 = Default], $val12 = Default] _ ; [, $val13 = Default], $val14 = Default], $val15 = Default], $val16 = Default], _ ; $val17 = Default], $val18 = Default], $val19 = Default]) ; Parameters ....: $location - a string: title ; If ^ is in the string, it is ignored ; $names - comma-separted names to be shown in the dump, one per value ; If | is the first character, dumped strings start and end with ; Char(166), a broken bar ; '[controls][<title>:]name1,name2, ...' ; $val1 - a variant value. ; $val2 thru $val19 - [optional] a variant value. Default is not used ; Return values .: None ; Author ........: c.haslam at ieee dot org ; Modified ......: ; Remarks .......: See _ConsDebug() ; Related .......: _MsgDebug,_ConsDebug ; Link ..........: ; Example .......: _ClipDebug('Line '&@ScriptLineNumber&','$bInt,$ar,StringLen($str)',$bInt,$ar,StringILen($str)) ; =============================================================================================================================== Func _ClipDebug($location,$names,$val1,$val2=Default,$val3=Default,$val4=Default,$val5=Default,$val6=Default,$val7=Default,$val8=Default _ ,$val9=Default,$val10=Default,$val11=Default,$val12=Default,$val13=Default,$val14=Default,$val15=Default,$val16=Default,$val17=Default, _ $val18=Default,$val19=Default) $location = StringReplace($location,'^','') ; all Local $t = '***'&$location&'-------------------------'&@CRLF& _ _FormatValsForDebug($location,$names,$val1,$val2,$val3,$val4,$val5,$val6,$val7,$val8, _ $val9,$val10,$val11,$val12,$val13,$val14,$val15,$val16,$val17,$val18,$val19) _UpdateClipboard($t) EndFunc ; #FUNCTION# ==================================================================================================================== ; Name ..........: _MsgDebug ; Description ...: Dumps the value of variables and expressions to the Console ; Syntax ........: _MsgDebug($location, $names,$val1[[[[[[[[[[[[[[[[[, $val2 = Default], $val3 = Default], _ ; $val4 = Default], $val5 = Default], $val6 = Default], $val7 = Default], $val8 = Default], _ ; $val9 = Default], $val10 = Default], $val11 = Default], $val12 = Default] _ ; [, $val13 = Default], $val14 = Default], $val15 = Default], $val16 = Default], _ ; $val17 = Default], $val18 = Default], $val19 = Default]) ; Parameters ....: $location - a string: title ; If ^ is in the string, the dump is also sent to the Clipboard ; $names - comma-separted names to be shown in the dump, one per value ; If | is the first character, dumped strings start and end with ; Char(166), a broken bar ; '[controls][<title>:]name1,name2, ...' ; $val1 - a variant value. ; $val2 thru $val19 - [optional] a variant value. Default is not used ; Return values .: None ; Author ........: c.haslam at ieee dot org ; Modified ......: See _ConsDebug() ; Remarks .......: See _ConsDebug() ; Related .......: _MsgDebug, _ClipDebug ; Link ..........: ; Example .......: _MsgDebug('Line '&@ScriptLineNumber&':'$bInt,$ar,StringLen($str)',$bInt,$ar,StringLen($str)) ; =============================================================================================================================== Func _MsgDebug($location,$names,$val1,$val2=Default,$val3=Default,$val4=Default,$val5=Default,$val6=Default,$val7=Default,$val8=Default _ ,$val9=Default,$val10=Default,$val11=Default,$val12=Default,$val13=Default,$val14=Default,$val15=Default,$val16=Default,$val17=Default, _ $val18=Default,$val19=Default) Local $bToClipboard = StringInStr($location,'^')<>'' If $bToClipboard Then $location = StringReplace($location,'^','') ; all EndIf Local $t = _FormatValsForDebug($location,$names,$val1,$val2,$val3,$val4,$val5,$val6,$val7,$val8, _ $val9,$val10,$val11,$val12,$val13,$val14,$val15,$val16,$val17,$val18,$val19) MsgBox($MB_SETFOREGROUND,$location,$t) If $bToClipboard Then _UpdateClipboard('***'&$location&'-------------------------'&@CRLF&$t) EndIf EndFunc Func _FormatValsForDebug($location,$names,$val1,$val2=Default,$val3=Default,$val4=Default,$val5=Default,$val6=Default,$val7=Default,$val8=Default _ ,$val9=Default,$val10=Default,$val11=Default,$val12=Default,$val13=Default,$val14=Default,$val15=Default,$val16=Default,$val17=Default, _ $val18=Default,$val19=Default) Local $idents = $location&':'&$names Local $stringDelim = '"' Local $indent = ' ' If StringLeft($names,1)='|' Then $stringDelim = Chr(166) ; broken bar $names = StringMid($names,2) $indent = '| ' EndIf Local $buf="",$ar,$i,$j,$k,$n,$p,$s Local $nParLvl=0,$bInBrs=False For $i = 1 to StringLen($names) Switch StringMid($names,$i,1) Case '(' $nParlvl += 1 Case ')' $nParLvl -= 1 Case '[' If $bInBrs Then MsgBox($MB_ICONERROR,'cDebug','Level of square bracketing is limited to one' _ &@CRLF&@CRLF&'Identifiers: '&$idents) Exit EndIf $bInBrs = True Case ']' If Not $bInBrs Then MsgBox($MB_ICONERROR,'cDebug','] encountered but there is no square bracked to close' _ &@CRLF&@CRLF&'Identifiers: '&$idents) Exit EndIf $bInBrs = False Case ',' If $nParLvl>0 Or $bInBrs Then $names = StringLeft($names,$i-1)&Chr(164)&StringMid($names,$i+1) EndIf EndSwitch Next If $nParLvl>0 Then MsgBox($MB_ICONERROR,'cDebug','Extra left parenthesis or missing right parenthesis' _ &@CRLF&@CRLF&'Identifiers: '&$idents) Exit ElseIf $nParlvl<0 Then MsgBox($MB_ICONERROR,'cDebug','Extra right parenthesis or missing left parenthesis' _ &@CRLF&@CRLF&'Identifiers: '&$idents) Exit EndIf If $bInBrs Then MsgBox($MB_ICONERROR,'cDebug','Extra left square bracket or missing right square bracket' _ &@CRLF&@CRLF&'Identifiers: '&$idents) Exit EndIf If StringLeft($names,1)=',' Then $names = StringMid($names,2) ; tolerate leading comma If $names="" Then MsgBox($MB_ICONERROR,'cDebug','Variable names are missing' _ &@CRLF&@CRLF&'Identifiers: '&$idents) Exit EndIf Local $namesVec = StringSplit($names, ",") ; 1-based For $i = 1 to $namesVec[0] $namesVec[$i] = StringReplace($namesVec[$i],Chr(164),',') Next Local $valsVec[@NumParams+2] Local $t,$s $i = 1 While True $valsVec[$i] = Eval('val'&$i) If $valsVec[$i]=Default Then ExitLoop $i += 1 If $i>@NumParams Then ExitLoop WEnd ReDim $valsVec[$i] ; ref 1 If UBound($valsVec)<>UBound($namesVec) Then $s = StringReplace($names,Chr(164),',') If UBound($valsVec)>UBound($namesVec) Then $t = 'There are more value arguments than identifiers, so values of some identifiers will not be reported' $t &= @CRLF&@CRLF&'Identifiers: '&$s MsgBox($MB_ICONWARNING,'cDebug()',$t) ElseIf UBound($valsVec)<UBound($namesVec) Then $t = 'There are more identifiers than value arguments' $t &= @CRLF&@CRLF&'Identifiers: '&$s MsgBox($MB_ICONERROR,'cDebug()',$t) Exit EndIf EndIf For $i = 1 To $namesVec[0] $ar = $valsVec[$i] If IsArray($ar) Then Switch UBound($ar,0) Case 2 Local $brsVec = StringSplit($namesVec[$i],'[]',0+2) ; char,0-based Local $qRows = UBound($ar, 1) Local $qCols = UBound($ar, 2) If UBound($brsVec)=1 Then ; if no [] Local $wid = StringLen('['&($qRows-1)&']['&($qCols-1)&']') ; 2015-06-11 $buf &= $namesVec[$i]&' Array: Ubounds '&$qRows&','&$qCols&@CRLF For $j = 0 To $qRows-1 For $k = 0 To $qCols-1 If IsArray( $ar[$j][$k]) Then $buf &= "["&$j&"]["&$k&"]"&@CRLF&_FormatValsForDebug($location,$indent,$ar[$j][$k]) Else $n = $ar[$j][$k] If IsString($n) Then $n = $stringDelim&$n&$stringDelim $buf &= $namesVec[$i] & StringFormat('%-'&$wid&'s', "["&$j&"]["&$k&"]")&" "&$n & @CRLF EndIf Next Next Else If UBound($ar,1)=0 Or UBound($ar,2)=0 Then $buf &= $brsVec[0]&' Array: Ubounds '&UBound($ar,1)&','&UBound($ar,2)&@CRLF ContinueLoop EndIf Local $qRows = UBound($ar,1)-1 Local $qCols = UBound($ar,2)-1 Local $rowIxsVec[0],$evaledRowIxsVec[0] _DoIndicesDebug($idents,$brsVec[1],$qRows,'row',$namesVec[$i],$namesVec,$valsVec, $rowIxsVec, _ $evaledRowIxsVec) Local $colIxsVec[0],$evaledcolIxsVec[0] _DoIndicesDebug($idents,$brsVec[3],$qCols,'column',$namesVec[$i],$namesVec,$valsVec, $colIxsVec, _ $evaledcolIxsVec) $buf &= $namesVec[$i]&' Array: Ubounds '&($qRows+1)&','&($qCols+1)&@CRLF Local $rowWid,$colWid If $brsVec[1]='..' Then $rowWid = StringLen($qRows) Else $rowWid = 0 For $j = 0 To UBound($rowIxsVec)-1 $n = StringLen($rowIxsVec[$j]) If $n>$rowWid Then $rowWid = $n $n = StringLen($evaledrowIxsVec[$j]) If $n>$rowWid Then $rowWid = $n Next EndIf If $brsVec[3]='..' Then $colWid = StringLen($qcols) Else $colWid = 0 For $j = 0 To UBound($colIxsVec)-1 $n = StringLen($colIxsVec[$j]) If $n>$colWid Then $colWid = $n $n = StringLen($evaledcolIxsVec[$j]) If $n>$colWid Then $colWid = $n Next EndIf Local $wid = $rowWid+$colWid+StringLen('[][]') Local $nRow,$sRow,$nCol,$sCol For $j = 0 To UBound($evaledRowIxsVec)-1 $nRow = $evaledRowIxsVec[$j] $sRow = $rowIxsVec[$j] For $k = 0 To UBound($evaledcolIxsVec)-1 $nCol = $evaledColIxsVec[$k] $sCol = $colIxsVec[$k] If IsArray($ar[$nRow][$nCol]) Then $buf &= "["&$sRow&"]["&$sCol&"]"&@CRLF& _ _FormatValsForDebug($location,$indent,$ar[$nRow][$nCol]) Else $n = $ar[$nRow][$nCol] If IsString($n) Then $n = $stringDelim&$n&$stringDelim $buf &= $brsVec[0] & _ StringFormat('%-'&$wid&'s', "["&$sRow&"]["&$sCol&"]")&" "&$n & @CRLF EndIf Next Next EndIf Case 1 If UBound($ar)=0 Then $buf &= $namesVec[$i]&' Ubound 0'&@CRLF ContinueLoop EndIf Local $brsVec = StringSplit($namesVec[$i],'[]',0+2) ; char,0-based Local $qEls = UBound($ar) Local $ixsVec[0],$evaledixsVec[0] If UBound($brsVec)=1 Then ; no [] Local $wid = StringLen('['&($qEls-1)&']') $buf &= $namesVec[$i]&' Vector: Ubound '&$qEls&@CRLF For $j = 0 To $qEls-1 If IsArray( $ar[$j]) Then $buf &= "["&$j&"]"&@CRLF&_FormatValsForDebug($location,$indent,$ar[$j])&@CRLF Else $n = $ar[$j] If IsString($n) Then $n = $stringDelim&$n&$stringDelim $buf &= $namesVec[$i] & StringFormat('%-'&$wid&'s', "["&$j&"]")&" "&$n & @CRLF EndIf Next Else _DoIndicesDebug($idents,$brsVec[1],$qEls,'element',$namesVec[$i],$namesVec,$valsVec, $ixsVec, _ $evaledIxsVec) EndIf Local $wid = 0 For $j = 0 To UBound($ixsVec)-1 $n = StringLen($ixsVec[$j]) If $n>$wid Then $wid = $n $n = StringLen($evaledIxsVec[$j]) If $n>$wid Then $wid = $n Next $wid += StringLen('[]') For $j In $ixsVec If IsArray($ar[$j]) Then $buf &= $namesVec[$i]&"["&$j&"]"&_FormatValsForDebug($location,$indent,$ar[$j]) Else If IsString($ar[$j]) Then $ar[$j] = $stringDelim&$ar[$j]&$stringDelim $buf &= $brsVec[0] & StringFormat('%-'&$wid&'s', "["&$j&"]")&" " & $ar[$j] & @CRLF EndIf Next EndSwitch ElseIf IsObj($valsVec[$i]) Then $buf &= $namesVec[$i] & ' <Object>' & @CRLF ElseIf IsDllStruct($valsVec[$i]) Then $buf &= $namesVec[$i] & ' <DLLStruct>' & @CRLF Else $s = $valsVec[$i] If IsString($s) Then $buf &= $namesVec[$i] & ' '&$stringDelim & $s & $stringDelim&@CRLF Else $buf &= $namesVec[$i] & " " & $s & @CRLF EndIf EndIf Next Return $buf EndFunc Func _DoIndicesDebug($idents,$expr,$qRorC,$rOrC,$arName,$namesVec,$valsVec, ByRef $allIxsVec, ByRef $evaledAllIxsVec) Local $ixsVec[0],$evaledixsVec[0] If $expr='' Then $expr = '..' EndIf Local $vec = StringSplit($expr,',',0+2) ; char,0-based For $i = 0 To UBound($vec)-1 Local $subExpr = $vec[$i] If $subExpr='..' Then _DoRangeAllDebug($qRorC, $ixsVec, $evaledIxsVec) ElseIf StringRegExp($subExpr,'^(\$[a-zA-Z0-9_]+|\d+)\.\.$') Then _DoNumRangeFromDebug($idents,$subExpr,$qRorC,$rOrC,$arName,$namesVec,$valsVec, $ixsVec, $evaledIxsVec) ElseIf StringRegExp($subExpr,'^\.\.(\$[a-zA-Z0-9_]+|\d+)$') Then _DoNumRangeToDebug($idents,$subExpr,$qRorC,$rOrC,$arName,$namesVec,$valsVec, $ixsVec, $evaledIxsVec) ElseIf StringRegExp($subExpr,'^(\$[a-zA-Z0-9_]+|\d+)\.\.(\$[a-zA-Z0-9_]+|\d+)$') Then _DoNumRangeFromToDebug($idents,$subExpr,$qRorC,$rOrC,$arName,$namesVec,$valsVec, $ixsVec, $evaledIxsVec) ; List of mixed AutoIt variables and positive integers ElseIf StringRegExp($subExpr,'^(\$[a-zA-Z0-9_])+|\d+(,\$[a-zA-Z0-9_]+|\d+)*$') Then _DoVarOrNumListDebug($idents,$subExpr,$qRorC,$rOrC,$arName,$namesVec,$valsVec, $ixsVec, $evaledIxsVec) Else MsgBox($MB_ICONERROR,'cDebug()','Invalid '&$rOrC&' expression '&$subExpr&' in '&$arName _ &@CRLF&@CRLF&'Identifiers: '&$idents) Exit EndIf ; append Local $ubOld = UBound($allIxsVec) Local $ubNew = $ubOld + UBound($ixsVec) ReDim $allIxsVec[$ubNew] For $j = $ubOld To $ubNew-1 $allIxsVec[$j] = $ixsVec[$j-$ubOld] Next ReDim $evaledAllIxsVec[$ubNew] For $j = $ubOld To $ubNew-1 $evaledAllIxsVec[$j] = $evaledixsVec[$j-$ubold] Next Next EndFunc Func _DoRangeAllDebug($qRorC, ByRef $ixsVec, ByRef $evaledIxsVec) ReDim $ixsVec[$qRorC+1] For $j = 0 To $qRorC $ixsVec[$j] = $j Next $evaledixsVec = $ixsVec EndFunc Func _DoNumRangeFromDebug($idents,$expr,$qRorC,$rOrC,$arName,$namesVec,$valsVec, ByRef $strsVec, ByRef $nbrsVec) Local $t Local $vec = StringSplit($expr,'..',1+2) ; str,0-based Local $nst If StringLeft($vec[0],1)='$' Then $nSt = _GetEvaledIxDebug($idents,$namesVec,$vec[0],$valsVec,$arName) Else $nst = $vec[0] EndIf If $nst<=$qRorC Then ReDim $nbrsVec[$qRorC+1-$nst] For $j = 0 To $qRorC-$nSt $nbrsVec[$j] = $j+$nst Next $strsVec = $nbrsVec If $nst<>$vec[0] Then $strsVec[0] = $vec[0] EndIf Else $t = $nst<>$vec[0] ? ' ('&$nst&')' : '' MsgBox($MB_ICONERROR,'cDebug()', _ $vec[0]&$t&' exceeds the maximum '&$rOrC&' number in '&$arName&', which is '&$qRorC _ &@CRLF&@CRLF&'Identifiers: '&$idents) Exit EndIf EndFunc Func _DoNumRangeToDebug($idents,$expr,$qRorC,$rOrC,$arName,$namesVec,$valsVec, ByRef $strsVec, ByRef $nbrsVec) Local $t Local $vec = StringSplit($expr,'..',1+2) ; str,0-based Local $nEnd If StringLeft($vec[0],1)='$' Then $nEnd = _GetEvaledIxDebug($idents,$namesVec,$vec[1],$valsVec,$arName) Else $nEnd = $vec[1] EndIf If $nEnd<=$qRorC Then ReDim $nbrsVec[$nEnd+1] For $j = 0 To $nEnd $nbrsVec[$j] = $j Next $strsVec = $nbrsVec If $nEnd<>$vec[0] Then $strsVec[$qRorC] = $vec[0] EndIf Else $t = $nEnd<>$vec[0] ? ' ('&$nEnd&')' : '' MsgBox($MB_ICONERROR,'cDebug()', _ $vec[0]&$t&' exceeds the maximum '&$rOrC&' number in '&$arName&', which is '&$qRorC _ &@CRLF&@CRLF&'Identifiers: '&$idents) Exit EndIf EndFunc Func _DoNumRangeFromToDebug($idents,$expr,$qRorC,$rOrC,$arName,$namesVec,$valsVec, ByRef $strsVec, ByRef $nbrsVec) Local $t,$s Local $svec = StringSplit($expr,'..',1+2) ; str,0-based Local $nvec[2] For $i = 0 To 1 $nVec[$i] = _GetEvaledIxDebug($idents,$namesVec,$sVec[$i],$valsVec,$arName) Next If $nVec[0]<=$qRorC And $nVec[1]<=$qRorC And $nVec[1]>=$nVec[0] Then ReDim $nbrsVec[$nVec[1]-$nVec[0]+1] For $j = $nVec[0] To $nVec[1] $nbrsVec[$j-$nvec[0]] = $j Next $strsVec = $nbrsVec If StringLeft($sVec[0],1)='$' Then $strsVec[0] = $svec[0] EndIf If StringLeft($svec[1],1)='$' Then $strsVec[UBound($strsVec)-1] = $svec[1] EndIf Else For $i = 0 To 1 If $nVec>$qRorC Then $t = $svec[$i]<>$nvec[$i] ? ' ('&$nVec[$i]&')' : '' MsgBox($MB_ICONERROR,'cDebug()', _ $sVec[$i]&$t&' exceeds the maximum row number in '&$arName&', which is '&$qRorC _ &@CRLF&@CRLF&'Identifiers: '&$idents) Exit EndIf Next If $nvec[1]<$nvec[0] Then $t = $svec[1]<>$nvec[1] ? ' ('&$nVec[1]&')' : '' $s = $svec[0]<>$nvec[0] ? ' ('&$nVec[0]&')' : '' MsgBox($MB_ICONERROR,'cDebug()',$sVec[1]&$t&' is less than '&$sVec[0]&$s&'in '&$arName _ &@CRLF&@CRLF&'Identifiers: '&$idents) Exit EndIf EndIf EndFunc Func _DoVarOrNumListDebug($idents,$expr,$qRorC,$rOrC,$arName,$namesVec,$valsVec, ByRef $strsVec, ByRef $nbrsVec) Local $t $strsVec = StringSplit($expr,',',0+2) ReDim $nbrsVec[UBound($strsVec)] For $i = 0 To UBound($strsVec)-1 $nbrsVec[$i] = _GetEvaledIxDebug($idents,$namesVec,$strsVec[$i],$valsVec,$arName) If $nbrsVec[$i]>$qRorC Then $t = $strsVec[$i]<>$nbrsVec[$i] ? ' ('&$nbrsVec[$i]&')' : '' MsgBox($MB_ICONERROR,'cDebug()', _ $strsVec[$i]&$t&' exceeds the maximum '&$rOrC&' number in '&$arName&', which is '&$qRorC _ &@CRLF&@CRLF&'Identifiers: '&$idents) Exit EndIf Next EndFunc Func _GetEvaledIxDebug($idents,$namesVec,$strIx,$valsVec,$arName) Local $ret,$t,$n If StringRegExp($strIx,'^\d+$',0) Then ; >=1 digits $ret = $strIx ElseIf StringRegExp($strIx,'^\$[A-Za-z0-9_]+$') Then ; an AutoIt variable name $t = _EvaluateDebug($strIx) If @error Then ; a local variable $n=-1 For $j = 1 To UBound($namesVec)-1 If $namesVec[$j]=$strIx Then $n = $j ExitLoop EndIf Next If $n>=0 Then $ret = $valsVec[$n] Else MsgBox($MB_ICONERROR,'cDebug()',$strIx&' occuring in '&$arName&' is not defined' _ &@CRLF&@CRLF&'Identifiers: '&$idents) Exit EndIf ElseIf Not StringRegExp($t,'^\d+$') Then MsgBox($MB_ICONERROR,'cDebug()', _ $strIx&' in '&$arName&' neither is, nor evaluates to, zero or a positive integer' _ &@CRLF&@CRLF&'Identifiers: '&$idents) Exit Else $ret = $t EndIf Else MsgBox($MB_ICONERROR,'cDebug()',$strIx&' in '&$arName&' is illegal' _ &@CRLF&@CRLF&'Identifiers: '&$idents) Exit EndIf Return $ret EndFunc Func _EvaluateDebug($__paramDebug) If StringLeft($__paramDebug,1)='$' Then $__paramDebug = StringTrimLeft($__paramDebug,1) EndIf $__paramDebug = Eval($__paramDebug) Return SetError(@error,0,$__paramDebug) EndFunc Func _UpdateClipboard($t) Static Local $bInited If (Not $bInited) And ClipGet()<>'' Then Local $ans = MsgBox(35+$MB_SETFOREGROUND,"cDebug","Clear the Clipboard initially?") ; yes,no,cancel Switch $ans Case 6 ;Yes ClipPut('') Case 7 ;No ; do nothing Case 2 ;Cancel Exit EndSwitch $bInited = True EndIf ClipPut(ClipGet()&$t) EndFunc The documentation is attached.
      These UDFs have been in regular use for some years.
       
      cDebug.pdf
    • ADMPV
      By ADMPV
      https://sourceforge.net/projects/rhash/
      librhash.dll - supports CRC32, MD4, MD5, SHA1, SHA256, SHA512, SHA3, Tiger, TTH, Torrent BTIH, AICH, ED2K, GOST R 34.11-94, RIPEMD-160, HAS-160, EDON-R 256/512, WHIRLPOOL and SNEFRU hash sums.
      faster than _Crypt_HashFile about 2 times
      librhash.au3, librhash.dll in archive
      Changelog:
              2017-07-11 Added: rhash_timer_start, rhash_timer_stop
                         Changed: DLL - rhash_run_benchmark_mod - passing file as HANDLE
              2017-07-07 Changed: rhash_ex()
                         Added: DLL - rhash_run_benchmark_mod
              2017-07-04 Changed rhash_ex()
       
      librhash_134.zip
    • Jefrey
      By Jefrey
      Non-important short long story: I was facing several troubles when working with a webservice made in PHP and an AutoIt client. The AutoIt client had to send some data to the PHP webservice, then it would get back part of the data (with additional data) back to AutoIt, then send through Json to another webservice and end up in a TV system (huff). As I was using mostly Inet* functions, working with charsets became complicated, as it had to encode, decode, encode... and the mess is done. On the other end I was receiving a completely buggy string with several problems in accentuated characters (note that I live in Brazil, we speak portuguese that contains a lot of accented chars - Ááãç...). I tried and tried mixing utf_encodes and decodes everywhere, in PHP and Javascript. Wouldn't it be easier if I could just force the string to be UTF-8 and screw everything else? So I found toUTF8() PHP function.
      I've ported toUTF8() function (truly, the whole Encoding class) by Sebastián Grignoli to AutoIt. It offers useful functions to force a string to be in a specified charset in a really easy way.
      From the readme file:
      Usage
      $utf8_string = toUTF8($utf8_or_latin1_or_mixed_string) $latin1_string = toLatin1($utf8_or_latin1_or_mixed_string) Also:
      $utf8_string = fixUTF8($garbled_utf8_string) fixUTF8() converts the string to UTF-8 repeatedly until make sure it has only UTF-8 valid chars (it's really UTF-8).
      Example:
      #include 'forceutf8.au3' MsgBox(0, '', fixUTF8( 'ãé' ) ) Will output:
      ãé Note that it's just a port. If you look at both the source codes together (PHP and AutoIt), you'll see that they're exactly the same thing, but in different approaches (PHP arrays converted to Scripting.Dictionary objects, function renames, syntax porting, a few functions completely rewritten due to differences between PHP and AutoIt). Therefore, all credits goes to Sebastián Grignol.
      It seems that it works only with latin/roman alphabet (used by English).
      Downloads
      Download ZIP from Github
      Wanna help?
      Fork me on Github
    • Vivi
      By Vivi
      Hey dear community,
      i write alot of programs that i sell.
      i coded a sucessfull license system but sadly i have no protection against memory dumps.
       
      i already tried playing with "memory.au3" but failed at it.

       
      anyone has a idea how i can call use page guard ?
       
      Thanks
    • TheSaint
      By TheSaint
      Over the last few years I have been doing a lot of Audio (CD & DVD) research, trying many open source and freeware programs.
      That includes WAV, AC3, DTS, FLAC, APE etc Stereo and Surround Sound files. It also includes video from JPG, BMP, PNG etc sources.
      I talk a little about LOSSY and LOSSLESS files in Post #3.
      Some of you may have read my posts (kind of blog) in Chat about my large project, Audio DVD Producer, and thus seen the many screenshots and know somewhat of my trials and tribulations.
      While doing testing of course, I tried a lot of programs, and some I even made tools of via my own Frontends. I still use and update some of them, as many are very useful in their own right, and allow me to do a number of things in stages, in a much more controlled manner compared to my larger project. So because of that, I thought I would share them here. Some have been mentioned in that Chat topic.
      Recommended Programs:
      I use foobar2000 (with DTS Decoder plugin) to play DTS WAV files and DTS-CD. It also has a simulated multichannel plugin for headphones.
      For checking M2V files and finished DVD etc, I use Media Player Classic and if necessary VLC Media Player (and others).
      Required 3rd Party Programs:
      ArcSoft DTS Decoder (DLL's) (ArcSoft TotalMedia Theatre) (eac3to use) (mentioned here)  --> (DTS-to-WAV)
      eac3to.exe (eac3to)  --> (DTS-to-WAV)
      ffdcaenc.exe (Ffdcaenc) or here
      flac.exe (FLAC)  --> (SoXcutterFE) (DTS-to-WAV v2.3)
      gain.exe (Ac3Filter Tools)  --> (SoXcutterFE)
      spdifer.exe (Ac3Filter Tools)  --> (DTS-to-WAV)
      valdec.exe (Ac3Filter Tools)  --> (DTS-to-WAV)  (SoXcutterFE)
      joinwav.exe (Joinwav)  -->  (JPG-to-M2V)
      MediaInfo.exe (MediaInfo)  --> (DTS-to-WAV)
      PgcDemux.exe (PgcDemux)  --> (DTS-to-WAV)
      sox.exe (SoX)  --> (SoXcutterFE)  I have had trouble with some versions of SoX, with 14.4.1 being the one I use. 14.4.2 crashes for me.
      ssrc_hp.exe  or  ssrc.exe (Shibatch)  -->  (DTS-to-WAV v2.3)
      tranzcode.exe (Tranzcode) Some info here
      AUDIO CD & DVD TOOLBOX
      (source scripts were developed in AutoIt v3.3.0.0 so may need modifying to compile with latest AutoIt)
      SoXcutterFE
       SoXcutterFE v1.2.zip
       SoXcutterFE v1.2 (source).zip
      BAT Examples.zip
      I made this one over the last week, and it is part of an unfinished DTS CD ripping, burning & editing guide, that you can read here.
      DTS-to-WAV
      Program to convert WAV, DTS, AC3, FLAC & VOB (IFO required) to suitable audio files for DTS CD or DVD.
      Screenshots and information about update can be found at Post #14.
      DTS-to-WAV v2.0.zip
       DTS-to-WAV v2.0 (source).zip
       DTS-to-WAV v2.3.zip
       DTS-to-WAV v2.3 (source).zip
      NOTE - While this is a stand-alone program, it does create right-click registry entries for DTS, WAV, FLAC, AC3, IFO files. A shortcut with a parameter of /unreg will remove the registry entries, though they will get created again every time the program runs. To stop them being created, you can (after using the unregister shortcut), add the value of '1' back into the 'Settings.ini' file as 'registry=1' in the [Context Entry] section. To use the program in that scenario, you would need to drag a WAV file etc onto the program EXE or a shortcut for that (or create a BAT file for it, etc). The installer I normally use for my programs, creates all the necessary shortcuts, which was overlooked when I created this zip version for others. All that said, the best way to use the program is by right-clicking on your WAV etc file.
      (source script was developed in AutoIt v3.3.0.0 so may need modifying to compile with latest AutoIt)
      I made this one early on in my research, but gave it a good update in the last week, with many improvements. This one does require you to have, at the very least, a Trial version of an ArcSoft program, for its DTS dlls for DTS decoding. In my Audio DVD Producer program, I currently use the free Tranzcoder program to do much the same thing, but it does fail on occasion with some HD DTS WAV files, that require something like the ArcSoft decoder. This tool is good for turning a 5.1 DTS or AC3 DVD track into a DTS-CD.
      JPG-to-M2V
      Program to convert JPG, BMP, PNG files to a M2V video file, suitable for DVD, MKV or M2TS/TS file, when muxed with audio. 
      Screenshots and Update information (required 3rd party programs) can be seen at Post #10. Post #15. Post #19. Post #20. Post #21. Post #26.
      Read other posts for related info.
       JPG-to-M2V v1.5.zip
       JPG-to-M2V v1.5 (sources).zip
        JPG-to-M2V v1.8.zip   (both re-upped again due to an introduced bug) (3)
        JPG-to-M2V v1.8 (source).zip
       JPG-to-M2V v1.9.zip
       JPG-to-M2V v1.9 (source).zip
      This was also made early on, and I am in the midst of giving it a very big update, to work with multiple image files (something that Audio DVD Producer does not yet do to this degree).
       
      **** more to come ****