Jump to content

This site uses cookies. By continuing to browse the site you are agreeing to our use of cookies. Find out more here. X
X

Most Liked Content


#956208 ISN AutoIt Studio

Posted by ISI360 on 21 January 2012 - 02:35 PM

Hi!



Today I want to show you my current AutoIt project: The ISN AutoIt Studio.



logo.jpg



The ISN AutoIt Studio is a complete IDE made with AutoIt, for AutoIt!
It includes a GUI designer, a code editor (with syntax highlighting, auto complete & intelisense), a file viewer, a backup system, trophies and a lot more features!!



Here are some screenshots:

phoca_thumb_l_1.jpg


phoca_thumb_l_formstudio.jpg

phoca_thumb_l_diverses1.jpg



Here some higlights:


-> easy to create/manage/public your AutoIt-projects!
->integrated GUI-Editor (ISN Form Studio 2)
->integrated - file & projectmanager
->auto backupfunction for your Projects
->extendable with plugins!
->available in several languages
->trophies
->Syntax highlighting /Autocomplete / Intelisense
->Dynamic Script
->detailed overview of the project (total working hours, total size...)
And much more!!!


-> -> Click here to download ISN AutoIt Studio <- <-




Here is the link to the german autoit forum where I posted ISN AutoIt Studio the first time: http://autoit.de/index.php?page=Thread&threadID=29742&pageNo=1

For more information visit my Homepage: http://www.isnetwork.at

So….have fun with ISN AutoIt Studio! :bye:



PS: Sorry for my bad English! ^^


  • willichan, Manadar, mLipok and 33 others like this


#1035224 Form Builder beta

Posted by BuckMaster on 01 December 2012 - 09:06 AM

Update v1.0.6

Major script overhaul, I literally started over from scratch only adding parts of code from the old script that were solid.
I don’t have a help file made as of now so I am going to explain all of the functionality in this post
- Form Builder is no longer bi-directional, you now toggle between script mode and GUI mode using a button in the top right or F4
- The script no longer recompiles on every change but instead inserts changes into the script
- Form Builder no longer cares about Event mode or GuiGetMsg mode
- No more .gui files, you now edit .au3 scripts directly
- Script edit is now a SciLexer control, includes syntax highlighting, folding, call tips, keywords, and inline error annotations.
- Script output console is now at the bottom in script mode
- Main GUI menu redone, most functions from SciTe have been added along with their hotkeys
- All restrictions to editing the script have been removed
- GDI+ and Graphic editors removed
- Cleanup of script, stability greatly increased
- Hotkeys no longer use _IsPressed they now use GUIAccelerator keys (with exception to a few)
- Multiple scripts can be open
- Form Builder buffers the open scripts and adds an asterisk * to scripts that have been modified
- Rich Edit, GUIScrollbars, Dummy, and Updown are disabled for now until I can add them
- GUI Menu controls cannot be created as of now but will be rendered in the editor
- Undo and Redo actions in script mode and GUI mode added, the GUI undo and redo buffer is cleared switching between modes
- The Undo and Redo buffers do not have a limit but are cleared when switching between modes or scripts
- Undo and Redo actions do not work for controls that have no control handle
- The Treeview now works as a Go to function for controls and functions in script mode
- Form Builder now tries to preserve as much of the original content as possible, it will save whitespace in-between parameters and comments on controls
- Treeview context menu reworked, much more responsive
- Unicode support added File -> Encoding -> UTF-8
- Language support added, I added a couple of language files and used Google translate just so I could size my GUI's for different languages, I do not support what those language files say ;)
- Selecting a GUI in the Treeview in GUI mode will allow you to change the GUI's Handle, Position, Background Color, State, Cursor, Font, Font Size and Font Attributes
- Auto Declare is no longer hiding in the settings, it is now on the top right and is a toggle between Off, Global and Local
- Help File Lookup added (Ctrl + H), allows you to search selected text in the help file,
  Any variable will be searched and the first result will be displayed, any string will be searched as a keyword in the index
- Added current script line, column, and selection length in the bottom left
- Standard undeclared style constants are checked before script execution and the script will prompt if an undefined style constant is found
- You can now toggle script whitespace, EOL characters, line numbers, margins and output in the View menu
- View -> Toggle All Folds works as it does in SciTe, only base level folds are changed and the first fold found determines whether to expand or contract
- Form Builder Settings redone
- Bugs with submitting data and control selection have been fixed
- Fixed problems with frequently called repetitive functions causing issues with large scripts
- Fixed bugs with B, I, U and S font attribute buttons getting stuck and called when enter was pressed

 

Update v1.0.7
- Help File Look-up hotkey changed to Ctrl+B
- Replace hotkey changed to Ctrl+H
- Changes to $SCN_MODIFIED so only text events are notified
- Bookmarks added, Ctrl+M to add or delete a Bookmark from the current line
- Edit -> Bookmarks -> Set Bookmark changes the currently selected Bookmark
- Edit -> Clear Current Bookmarks deletes only the currently selected Bookmark
- Allows you to change foreground and background colors of Bookmarks
- Added F2 hotkey for Next Bookmark
- Added Shift+F2 hotkey for Previous Bookmark
- Fixed a bug that made it so script annotation did not show up for some people
- Script errors and warnings now add a Bookmark on each line
- Ctrl+E hotkey added to clear all Bookmarks and Annotations
- Minor GUI tweaks
- Fixed a bug with the GUI Style undo action
- Undo and Redo actions for GUI windows will now update the window properties if the GUI is selected
- F4 Hotkey no longer switches modes, switching modes is now F10
- F4 is to toggle next error or warning message, works like it does in SciTe, bookmarks the line and highlights the error in the console
- Shift+F4 Hotkey added to toggle previous error or warning message
- Shift+F5 Hotkey added to clear script output
- Ctrl+F5 Hotkey added as SyntaxCheck Prod
- Form Builder now performs a SyntaxCheck before entering GUI Mode and prompts on Error or Warning
- Language Select Menu Added Settings -> Lanugage
- Icons added to main menu
- Languages added to all new menu items and msgbox's
- Language Files updated for new data
- Language Support added for Arabic, Chinese, Dutch, French, German, Hebrew, Japanese, Swedish, Thai, and Vietnamese [ Google Translate ]
- Fixed bug with updating a language that made it look like ANSI and UTF-8 were both selected
- Added redo button next to undo button
- Font attribute buttons Bold, Italic, Underline and Strike-Out changed to labels

 

Update v1.0.8

- Somehow a main function got deleted causing the script to crash on some changes

- Fixed some issues with updating Languages

 

 

 

FormBuilder_zps6f2ec692.png

Hotkeys
Ctrl + N              - New Blank Script
Ctrl + G              - New GUI Script
Ctrl + O              - Open Script
Ctrl + Shift + S   - Save As
Ctrl + S              - Save
Esc                    - Close Open Script
Alt + F4              - Exit
Ctrl + Z              - Undo
Ctrl + Y              - Redo
Ctrl + X              - Cut
Ctrl + C              - Copy
Ctrl + V              - Paste
Ctrl + A              - Select All
Ctrl + W             - Clear inline script annotation

Ctrl + E              - Clear inline script annotation and bookmarks
Ctrl + F              - Find
Ctrl + F3            - Find Next
Shift + F3           - Find Previous (doesn’t work yet)
Ctrl + B              - Help File Lookup
F5                      - Go
Alt + F5             - Beta Run
F7                     - Build
Ctrl + F7            - Compile
F11                    - Full screen
F8                     - Toggle Show/Hide Script Output
Ctrl + I               - Open Include
Ctrl + H             - Replace
F1                     - AutoIt Help File
Ctrl + D             - Duplicate Control
Delete               - Delete Control
Ctrl + Shift + 8   - Toggle Show/Hide Script Whitespace
Ctrl + Shift + 9   - Toggle Show/Hide Script EOL characters
Ctrl                    - GUI Mode multicontrol selection
F10                     - Switch Modes

F4                     - Next Message

Shift+F4            - Previous Message

Shift+F5            - Clear Output

Ctrl+M               - Add Bookmark

F2                     - Next Bookmark

Shift+F2            - Previous Bookmark

Basic GUI Mode How To

Create a Control
    - click a control on the left
    - click in the GUI you wish to add the control
      Left Click: Click and drag to auto resize the control
      Right Click: Creates the control at a standard size
Select a Control
    - click inside the control or select it in the treeview
Change a controls Data
    - First select the control
    - modify the controls data on the right, press enter to submit changes
      state, cursor, font and resizing update when you change the data
    - when modifying the data parameter the script recognizes if there is a variable in the data and will add quotes accordingly
      ex. data parameter = $data, End result in script: GUICtrlCreateButton($data, 50, 50, 100, 20)
      ex. data parameter = data, End result in script: GUICtrlCreateButton("data", 50, 50, 100, 20)
      ex. data parameter = "data"&$data, End result in script: GUICtrlCreateButton("data"&$data, 50, 50, 100, 20)
Applying an Image to a control
    - select a control
    - control styles must be applied to some controls before adding an image
    - click the ... button next to the Image input in the Control Properties area in the bottom right
    - select the image you want to display, allows jpg, bmp, gif, ico and dll files
    - selecting a dll will open another prompt to choose which resource to display
Control Grouping
    - multiple controls must be selected
    - press the group controls button
    - control grouping allows you to resize and move multiple controls at the same time, as of now groups are deleted when leaving GUI mode

 

I only have a couple odds and ends to finish up before everything should be complete,
I need to add Undo and Redo actions for copying and duplicating controls and a couple other minor things,
eventually I want to try to add all of the UDF controls as well.
If people are willing to translate the language file I would be very grateful, the ones I have right now are from Google translate, I only used them for testing and have no idea what they say.
I want to thank Kip, Prog@ndy, Isi360 and all of the other contributors on this forum, without you guys i don't think i could have written this script.

Please post any comments, problems or suggestions,
    BuckMaster


* I only used one "magic number" on my main close case statement, only for faster locating, and i don't care. ;)

Attached Files


  • mLipok, davidkim, James and 20 others like this


#1155801 Server Outage - 24th-26th Feb

Posted by Jon on 26 February 2014 - 12:03 PM

The dedicated server that runs the autoitscript.com / autoitconsulting.com site had a severe outage for the last couple of days.

 

The main problem was that one of the disk drives failed.

 

The server has two drives in RAID 1 so normally this isn't a problem, in fact there have been two disk outages over the past few years that many people won't have even noticed. Usually the server runs as normal with one drive down and there is only a brief 5 minute outage required when the disk is replaced and the server is rebooted. However in this case the server hard crashed and wouldn't boot into the OS on the remaining disk. I'm guessing that the drive was actually failing...working...failing and causing issues because it wouldn't just die.

 

I logged a support call and asked to get the disk replaced, but some of the communications were lost and it took 12 hours for them to acknowledge that the drive was dead and that they had the authorisation to go ahead and open the box and replace the drive (they only touch the hardware, I'm responsible for all the software/OS config). During this time the server was sitting in a recovery/linux boot disk mode used for troubleshooting. When the disk was finally replaced (8pm UK time 25th of Feb) the the technician only emailed my hostmaster / autoitscript email address to say that it was complete but I didn't receive it because of course that email address is hosted by the server...which is in recovery mode - they forgot to email the temporary gmail address I was using during the outage. So I only found out the work had actually been completed when I chased them up this morning on the phone.

 

I've started the RAID rebuild onto the new drive which will take a few hours to complete so the site may be sluggish until then. I also had to repair a few mysql tables that had crashed - but it didn't look to be a problem.


  • Blue_Drache, mLipok, toasterking and 18 others like this


#1075124 GDI+ animated loading screens build 2014-02-27 (30 examples)

Posted by UEZ on 03 May 2013 - 08:52 PM

mesale0077 asked me whether I could code some CSS loading animations from different web sites.

These are the results using GDI+ (AutoIt v3.3.10.0+ required!):

_GDIPlus_MonochromaticBlinker.au3 / _GDIPlus_RotatingBokeh.au3
_GDIPlus_MonochromaticBlinker.jpg _GDIPlus_RotatingBokeh.jpg


_GDIPlus_SpinningCandy.au3 / _GDIPlus_SteamPunkLoading.au3
_GDIPlus_SpinningCandy.jpg _GDIPlus_SteamPunkLoading.jpg


_GDIPlus_IncreasingBalls.au3 / _GDIPlus_PacmanProgressbar.au3
_GDIPlus_IncreasingBalls.jpg  _GDIPlus_PacmanProgressbar.jpg


_GDIPlus_StripProgressbar.au3 / _GDIPlus_RingProgressbar.au3
_GDIPlus_StripProgressbar.jpg  _GDIPlus_RingProgressbar.jpg


_GDIPlus_LineProgressbar.au3 / _GDIPlus_SimpleLoadingAnim.au3
_GDIPlus_LineProgressbar.jpg _GDIPlus_SimpleLoadingAnim.jpg
 
 
_GDIPlus_TextFillingWithWater.au3 / _GDIPlus_MultiColorLoader.au3
_GDIPlus_TextFillingWithWater.jpg  _GDIPlus_MultiColorLoader.jpg
 
 
_GDIPlus_LoadingSpinner.au3 / _GDIPlus_SpinningAndPulsing.au3
_GDIPlus_LoadingSpinner.jpg  _GDIPlus_SpinningAndPulsing.jpg
 
 
_GDIPlus_TogglingSphere.au3 / _GDIPlus_CloudySpiral.au3
_GDIPlus_TogglingSphere.jpg  _GDIPlus_CloudySpiral.jpg
 
 
_GDIPlus_GlowingText.au3 (thanks to Eukalyptus) / _GDIPlus_HypnoticLoader.au3
_GDIPlus_GlowingText.jpg _GDIPlus_HypnoticLoader.jpg
 
 
_GDIPlus_RotatingRectangles.au3 / _GDIPlus_TRONSpinner.au3
_GDIPlus_RotatingRectangles.jpg  _GDIPlus_TRONSpinner.jpg
 
 
_GDIPlus_RotatingBars.au3 / _GDIPlus_AnotherText.au3 (thanks to Eukalyptus) 
_GDIPlus_RotatingBars.jpg  _GDIPlus_AnotherText.jpg
 
 
_GDIPlus_CogWheels.au3 (thanks to Eukalyptus) / _GDIPlus_DrawingText.au3 (thanks to Eukalyptus) 
_GDIPlus_CogWheels.jpg _GDIPlus_DrawingText.jpg
 
 
_GDIPlus_GearsAnim.au3 / _GDIPlus_LEDAnim.au3
_GDIPlus_GearsAnim.jpg _GDIPlus_LEDAnim.jpg
 
 
_GDIPlus_LoadingTextAnim.au3 / _GDIPlus_MovingRectangles.au3
_GDIPlus_LoadingTextAnim.jpg  _GDIPlus_MovingRectangles.jpg
 
 
_GDIPlus_SpinningAndGlowing.au3 (thanks to Eukalyptus) _GDIPlus_YetAnotherLoadingAnim.au3
_GDIPlus_SpinningAndGlowing.jpg  _GDIPlus_YetAnotherLoadingAnim.jpg
 
 
 
Each animation with an example.


AiO download: Attached File  GDI+ Animated Waiting-Loading Screens.7z   52.21KB   385 downloads  (previous downloads: 1136)
 
 
Big thanks to Eukalyptus for providing several examples.  :thumbsup:
 
 
Maybe useful for some of you ;)


Br,
UEZ
 
PS: I don't understand CSS - everything is made out of my mind, so it might be different from original CSS examples
  • mLipok, BinaryBrother, wakillon and 16 others like this


#709878 WinAPIEx UDF

Posted by Yashied on 21 July 2009 - 10:15 PM

LAST VERSION - 3.8
03-Jul-12


MSDN_logo_new.png



This library contains the WinAPI functions are not included for unknown reasons to the native AutoIt WinAPI library. I use this UDF in nearly all of my programs, and decided to share it with the AutoIt community. I agree that over time some of these functions will be part of the native AutoIt library, but still... The library includes some undocumented, but useful functions (eg _WinAPI_GetFontResourceInfo()). The library also contains all the necessary constants to work with the appropriate functions. Most functions from this UDF intended for experienced users, but beginners will find the same lot of useful information for yourself. I will be to periodically add new functions to the library.

The archive contains WinAPIEx library, and as usual an excellent examples from me. Some examples I took from this forum and to simplify them for better understanding. For those who use SciTE (full version) I have prepared the au3.userudfs.properties and au3.user.calltips.api files to highlight functions from this UDF in your scripts. Just copy this files to ...SciTE\Properties and ...SciTE\API, respectively. I hope this UDF will be useful for many as for me. I look forward to any feedback and suggestions. Maybe somebody wants to add new WinAPI functions?

Credits

Spoiler


Available functions

Spoiler


Files to download

WinAPIEx UDF v3.8 for AutoIt 3.3.6.1
Previous downloads: 27953

Spoiler


WinAPIEx UDF v3.8 for AutoIt 3.3.8.x
Previous downloads: 14850

Spoiler



#1081817 mus++

Posted by czardas on 26 May 2013 - 03:41 PM

mus++ is a new scripting language written in ASCII which can be typed on most computer keyboards. The whole concept is based on the rules and syntax of written music, so the code can be directly transfered to a standard score without having to calculate the milisecond duration of some complicated binary variant, or having to deal with any other non-musical code elements.

 

The language itself is much better than the interpreter, but that's hopefully going to change in the future. There are some problems which I have not yet managed to solve. Even so, this current interpreter is just about good enough for my own purposes. The deficiencies in the interpreter have no bearing whatsoever on the dynamic flexibility of mus++.

AutoIt         
#include-once #include <Array.au3> ; Example 1 - Happy Birthday Local $source = "<pno> ;=125 (G -G) Q | ;A G 1, C' | +'B' :| 2, D' | +C DC | Q ;G' E C | 'B' A (F' -F) | ;E C D | +C " _MusPlusPlus($source) Sleep(600) ; Example 2 - Mozart $source =  @CRLF & "<fl>   ;=146 3/4 |: G   | C' E C   |  G B   G  | +.C''             | +B'     ;G   |  G  -G  G  ;G   |" $source &= @CRLF & "<fl>   ;=146 3/4 |: ;   | E +G     | ;B D' 'B' | -C' 'B' C' D E F# | ;G  'G'  B   |  C' -C 'B' ;C'' |" $source &= @CRLF & "<cl>   ;=146 3/4 |: ;   | +.       | +G     ;  | +.                | +.           | ;E' -E  D  ;E   |" $source &= @CRLF & "<tpt>  ;=146 3/4 |: 'G  | 'C' E  C | ;'G ; 'G' | C    ;       C'   | 'G'  +       | ;G  -G  G  ;G   |" $source &= @CRLF & "<timp> ;=146 3/4 |: ''G | +'C   ;C | +''G   ;G | A    A       A    |  G  -G G G G | +.G             |" $source &= @CRLF ; Line Breaks are represented by empty lines $source &= @CRLF & " ;G -G G ;G |  G  A  B | C'' ; fin :|  D' | +'B' ;C' | -D G F# G F G | +'B' ;C' |  D   ;  DC " $source &= @CRLF & "  D -D C ;D | 'B' C' D | C ;   fin :| 'B' | +G   ;A  |  +.           | +G   ;A  |  B   ;  DC " $source &= @CRLF & "  F -F E ;F | 'G' A B  | G  ;  fin :|  ;  | +.G'     | _;G  +        | +.G'     | _;G 'G' DC " $source &= @CRLF & " ;G -G G ;G | 'G  G G  |'C' ;  fin :|  ;  | 'G G G   | +.'G'         | ;'G G G  |  G   ;  DC " $source &= @CRLF & "  G         | ;G  G G  | +''C  fin :|  ;  | +.''G    | ;G   G    G   |  +.G     | ;G   G  DC " _MusPlusPlus($source) Func _MusPlusPlus($sSource) ; Parse mus++     $sSource = _InitialTidySource($sSource)     If @error Then Return SetError(1, 0, 0)     Local $iParts = 8, $aSystems = StringSplit($sSource, @LF & @LF, 1)     Local $aVoices[$iParts] = ["","","","","","","",""], $aStaves     For $i = 1 To $aSystems[0]         $aStaves = StringSplit($aSystems[$i], @LF)         If $i = 1 And $aStaves[0] <= 8 Then             $iParts = $aStaves[0]             ReDim $aVoices [$iParts]         ElseIf $iParts <> $aStaves[0] Then             Return SetError (2, 0, 0) ; Inconsistant number of voices         EndIf         For $j = 0 To $iParts -1             $aVoices[$j] &= " " & $aStaves[$j +1]         Next     Next     Local $aTimeLine, $aRepeat[1][11], $iInstance, $vCurrInstrument, $vCurrKey, $sCurrNote, $iCurrOctave, $sLookFor, $sSegnoInstrument, _     $sSegnoKey, $iSegnoOctave, $sSegnoNote, $iLatestInstrument, $iLatestKey, $iCurrRepeat, $iEndings, $iSegno, $iDalSegno, $iDaCapo, _     $aAccidentals[7], $sSegnoAccidentals, $sAtTempo, $vCurrTempo, $aNotePart, $sSkipIndex, $sWarnings = "", $sErrors = "", $iTuplet, _     $bTie, $bRest, $iPitch, $iBound =1, $aInstrument[$iParts], $iHangCheck, $iRepeats, $iCurrTime, $aMessage[$iParts][1][2] ;==> voice|instance|params=time/msg     Local Enum $iEntry = 0, $iEntryInstrument, $iEntryKey, $iEntryOctave, $iEntryNote, $iFirstExit, $iFirstExitOctave, _     $iFirstExitNote, $iFinalExit, $iFinalExitInstrument, $iFinalExitKey     For $i = 0 To $iParts -1         $aInstrument[$i] = 0xC0     Next     ; Parsing begins here     For $i = 0 To $iParts -1         _ClearAccidentals($aAccidentals)         $aVoices[$i] = StringStripWS($aVoices[$i], 3)         StringReplace($aVoices[$i], "|:", "") ; Get loop entry points         If @extended Then ReDim $aRepeat[@extended +1][11]         $iInstance = 0 ; bar repeat sections encountered         $vCurrInstrument = "<pno>" ; piano         $vCurrKey = "0#" ; C major / A minor         $sCurrNote = ";" ; quarter note         $iCurrOctave = 4         $sLookFor = "" ; Look for Q or fin within a DC or DS section repeat         ; Bar repeat data         $aRepeat[$iInstance][$iEntry] = $iInstance         $aRepeat[$iInstance][$iEntryInstrument] = $vCurrInstrument         $aRepeat[$iInstance][$iEntryKey] = $vCurrKey         $aRepeat[$iInstance][$iEntryOctave] = $iCurrOctave         $aRepeat[$iInstance][$iEntryNote] = $sCurrNote         $aRepeat[$iInstance][$iFirstExit] = $iInstance         $aRepeat[$iInstance][$iFirstExitOctave] = $iCurrOctave         $aRepeat[$iInstance][$iFirstExitNote] = $sCurrNote         $aRepeat[$iInstance][$iFinalExit] = ""         $aRepeat[$iInstance][$iFinalExitInstrument] = $vCurrInstrument         $aRepeat[$iInstance][$iFinalExitKey] = $vCurrKey         $iCurrRepeat = 1 ; First iteration of a bar repeat sequence         $iEndings = 1 ; no separate bar repeat endings encountered yet         $aTimeLine = StringRegExp($aVoices[$i], "[^\h]+", 3)         $aVoices[$i] = ""         $sSegnoInstrument = $vCurrInstrument ; Section repeat data         $sSegnoKey = $vCurrKey ; Section repeat data =>         $iSegnoOctave = $iCurrOctave         $sSegnoNote = $sCurrNote         $sSegnoAccidentals = ",,,,,," ; array is needed when $ occurs after an accidental         $iLatestInstrument = 0 ; position in timeline         $iLatestKey = 0 ; position in timeline         $iSegno = -1 ; position of $         $iDalSegno = -1 ; position of DS         $iDaCapo = -1 ; position of DC         $sAtTempo = -1         $vCurrTempo = ";=100"         $sSkipIndex = "|"         For $j = 0 To UBound($aTimeLine) -1             If StringInStr($sSkipIndex, "|" & $j & "|") Then ContinueLoop             $iHangCheck = $j -1             Select                 Case _IsInstrument($aTimeLine[$j])                     If $j > $iLatestInstrument Then $iLatestInstrument = $j                     _UpdateCurrentAttrib($vCurrInstrument, $aVoices, $aTimeLine[$j], $i)                     $aRepeat[$iInstance][$iEntryInstrument] = $vCurrInstrument ; Temporary Patch                 Case _IsKeySig($aTimeLine[$j])                     If $j > $iLatestKey Then $iLatestKey = $j                     _UpdateCurrentAttrib($vCurrKey, $aVoices, $aTimeLine[$j], $i)                 Case _IsTempoMark($aTimeLine[$j])                     If Not StringRegExp($aVoices[$i], "[A-Go\+;\-~\\\?]") Then                         $sAtTempo = $aTimeLine[$j]                     EndIf                     _UpdateCurrentAttrib($vCurrTempo, $aVoices, $aTimeLine[$j], $i)                 Case _IsAtTempo($aTimeLine[$j])                     _UpdateCurrentAttrib($vCurrTempo, $aVoices, $sAtTempo, $i)                 Case _IsSegno($aTimeLine[$j])                     $sSegnoKey = $vCurrKey                     $sSegnoInstrument = $vCurrInstrument                     $iSegnoOctave = $iCurrOctave                     $sSegnoNote = $sCurrNote                     $iSegno = $j                     $sSegnoAccidentals = ""                     For $k = 0 To 5                         $sSegnoAccidentals &= $aAccidentals[$k] & ","                     Next                     $sSegnoAccidentals &= $aAccidentals[6]                 Case _IsBarLine($aTimeLine[$j])                     _ClearAccidentals($aAccidentals)                 Case _IsStartRepeat($aTimeLine[$j])                     _ClearAccidentals($aAccidentals)                     $iInstance += 1                     If $j > $iDaCapo And $j > $iDalSegno Then                         $aRepeat[$iInstance][$iEntry] = $j                         $aRepeat[$iInstance][$iEntryInstrument] = $vCurrInstrument                         $aRepeat[$iInstance][$iEntryKey] = $vCurrKey                         $aRepeat[$iInstance][$iEntryOctave] = $iCurrOctave                         $aRepeat[$iInstance][$iEntryNote] = $sCurrNote                         $iCurrRepeat = 1                         $iEndings = 1                     EndIf                 Case _Is2ndTimeRound($aTimeLine[$j])                     If $j > $iDaCapo And $j > $iDalSegno Then                         If $aRepeat[$iInstance][$iFinalExit] = "" Then                             $aRepeat[$iInstance][$iFirstExit] = $j                             $aRepeat[$iInstance][$iFirstExitOctave] = $iCurrOctave                             $aRepeat[$iInstance][$iFirstExitNote] = $sCurrNote                         EndIf                         $iRepeats = StringTrimRight($aTimeLine[$j], 1) ; string to number                         If $iEndings < $iRepeats Then $iEndings = $iRepeats                         If $iCurrRepeat > $iRepeats Then                             If $vCurrKey <> $aTimeLine[$iLatestKey] Then                                 If _IsKeySig($aTimeLine[$iLatestKey]) Then                                     $vCurrKey = $aTimeLine[$iLatestKey]                                     $aVoices[$i] &= $vCurrKey & " "                                 EndIf                             EndIf                             _UpdateCurrentAttrib($vCurrInstrument, $aVoices, $aTimeLine[$iLatestInstrument], $i)                             _ClearAccidentals($aAccidentals)                             $j = $aRepeat[$iInstance][$iFinalExit] ; Go to the next end repeat mark                         EndIf                     Else                         $j = $aRepeat[$iInstance][$iFinalExit] ; Go directly to the last end section                         _ClearAccidentals($aAccidentals)                         _UpdateCurrentAttrib($vCurrKey, $aVoices, $aRepeat[$iInstance][$iFinalExitKey], $i)                         _UpdateCurrentAttrib($vCurrInstrument, $aVoices, $aRepeat[$iInstance][$iFinalExitInstrument], $i)                     EndIf                 Case _IsTie($aTimeLine[$j]) Or _IsStartTuplet($aTimeLine[$j]) Or _IsEndTuplet($aTimeLine[$j])                     $aVoices[$i] &= $aTimeLine[$j] & " "                 Case _IsNote($aTimeLine[$j])                     $aNotePart = _NoteSplit($aTimeLine[$j])                     If $aNotePart[0] <> "" Then                         $sCurrNote = _GetCurrNote($aNotePart[0])                     EndIf                     If $aNotePart[1] <> "" Then                         If StringInStr($aNotePart[1], "'") Then                             $iCurrOctave = _GetOctave($aNotePart[1])                         EndIf                         If StringRegExp($aNotePart[1], "[#bxz]") Then                             _UpdateAccidentals($aAccidentals, $aNotePart[1])                         Else                             _GetAccidental($aAccidentals, $aNotePart[1])                         EndIf                     EndIf                     $aVoices[$i] &= $aNotePart[0] & $aNotePart[1] & " "                     If $sAtTempo = -1 Then $sAtTempo = $vCurrTempo                 Case _IsEndRepeat($aTimeLine[$j])                     If $j > $iDaCapo And $j > $iDalSegno Then                         _ClearAccidentals($aAccidentals)                         If $iCurrRepeat = $iEndings Then                             $aRepeat[$iInstance][$iFinalExit] = $j                             $aRepeat[$iInstance][$iFinalExitInstrument] = $vCurrInstrument                             $aRepeat[$iInstance][$iFinalExitKey] = $vCurrKey                         EndIf                         If $iCurrRepeat <= $iEndings Then ; Go back to the start of the loop                             $j = $aRepeat[$iInstance][$iEntry] ; $j will be incremented on the next pass ^^                             $iCurrRepeat += 1                             _UpdateCurrentAttrib($vCurrKey, $aVoices, $aRepeat[$iInstance][$iEntryKey], $i)                             _UpdateCurrentAttrib($vCurrInstrument, $aVoices, $aRepeat[$iInstance][$iEntryInstrument], $i)                             _UpdateCurrentAttrib($iCurrOctave, $aVoices, $aRepeat[$iInstance][$iEntryOctave], $i, "{", "} ")                             _UpdateCurrentAttrib($sCurrNote, $aVoices, $aRepeat[$iInstance][$iEntryNote], $i, "{", "} ")                         EndIf                     EndIf                 Case _IsDalSegno($aTimeLine[$j])                     If $iDalSegno < $j Then                         If $iSegno = -1 Then                             $sWarnings &= "Voice " & $i +1 & " Warning => Expected $ sign before DS " & @CRLF                             ConsoleWrite($sWarnings) ; deal with this later                             ExitLoop ; further parsing of this voice is meaningless                         EndIf                         $iDalSegno = $j                         $j = $iSegno                         $sLookFor = "DS"                         _UpdateCurrentAttrib($vCurrKey, $aVoices, $sSegnoKey, $i)                         _UpdateCurrentAttrib($vCurrInstrument, $aVoices, $sSegnoInstrument, $i)                         _UpdateCurrentAttrib($iCurrOctave, $aVoices, $iSegnoOctave, $i, "{", "} ")                         _UpdateCurrentAttrib($sCurrNote, $aVoices, $sSegnoNote, $i, "{", "} ")                         $aAccidentals = StringSplit($sSegnoAccidentals, ",", 2)                         For $iInstance = $iInstance To 0 Step -1                             If $iSegno > $aRepeat[$iInstance][$iEntry] Then ExitLoop                         Next                     EndIf                 Case _IsDaCapo($aTimeLine[$j])                     If $iDaCapo < $j Then                         _ClearAccidentals($aAccidentals)                         $iDaCapo = $j                         $j = -1                         $sLookFor = "DC"                         $iInstance = 0                         _UpdateCurrentAttrib($vCurrKey, $aVoices, $aRepeat[$iInstance][$iEntryKey], $i)                         _UpdateCurrentAttrib($vCurrInstrument, $aVoices, $aRepeat[$iInstance][$iEntryInstrument], $i)                         _UpdateCurrentAttrib($iCurrOctave, $aVoices, $aRepeat[$iInstance][$iEntryOctave], $i, "{", "} ")                         _UpdateCurrentAttrib($sCurrNote, $aVoices, $aRepeat[$iInstance][$iEntryNote], $i, "{", "} ")                     EndIf                 Case _IsCoda($aTimeLine[$j])                     If ($sLookFor = "DS" And $j < $iDalSegno) Or ($sLookFor = "DC" And $j < $iDaCapo) Then                         If $iDalSegno > $iDaCapo Then                             $j = $iDalSegno                         Else                             $j = $iDaCapo                         EndIf                         _UpdateCurrentAttrib($vCurrKey, $aVoices, $aTimeLine[$iLatestKey], $i)                         _UpdateCurrentAttrib($vCurrInstrument, $aVoices, $aTimeLine[$iLatestInstrument], $i)                     EndIf                 Case _IsFin($aTimeLine[$j])                     If ($sLookFor = "DS" And $j < $iDalSegno) Or ($sLookFor = "DC" And $j < $iDaCapo) Then ExitLoop                 Case Else                     If _IsTimeSig($aTimeLine[$j]) Or _IsTechnique($aTimeLine[$j]) Or _IsBarRepeat($aTimeLine[$j]) Or _IsAccel($aTimeLine[$j]) Or _IsDynamicMark($aTimeLine[$j]) Then                         ContinueLoop ; Currently unsupported performance instructions or features                     Else                         $sErrors &= "Voice " & $i +1 & " Syntax Error => " & $aTimeLine[$j] & @CRLF                         $sSkipIndex &= $j & "|"                         ConsoleWrite("Voice " & $i +1 & " Syntax Error => " & $aTimeLine[$j] & @LF)                     EndIf             EndSelect             If $j = $iHangCheck Then $j += 1 ; Recursion correction         Next         ;ConsoleWrite($aVoices[$i] & @LF)         $aTimeLine = StringRegExp($aVoices[$i], "[^\h]+", 3)         $iInstance = UBound($aTimeLine)*2 ; upper limit... variable re-usage         If $iInstance > UBound($aMessage, 2) Then ReDim $aMessage [$iParts][$iInstance][2]         $vCurrInstrument = 0         $iLatestInstrument = 0         $vCurrKey = 0 ; C major / A minor         $iLatestKey = 0 ; C major / A minor         $vCurrTempo = 100         $iCurrOctave = 4         $sCurrNote = ";"         $sLookFor = -1 ; variable re-usage         $bTie = False ; variable re-usage         $bRest = True         $iInstance = 0 ; message count         $iCurrTime = 0         $iTuplet = 1         Local $iDuration         For $j = 0 To UBound($aTimeLine) -1             Select                 Case _IsInstrument($aTimeLine[$j])                     $aTimeLine[$j] = StringRegExpReplace($aTimeLine[$j], "(_)(pno|box|org|acc|gtr|bass|tpt|sax|hn|drum|bl)", " " & "$2")                     $iLatestInstrument = _GetInstrument($aTimeLine[$j])                     If @error And Not StringInStr($sErrors, $aTimeLine[$j]) Then                         $sErrors &= "Voice " & $i +1 & " Instrument not recognized => " & $aTimeLine[$j] & @CRLF                         ConsoleWrite("Voice " & $i +1 & " Instrument not recognized => " & $aTimeLine[$j] & @LF)                     ElseIf $vCurrInstrument <> $iLatestInstrument Then                         $vCurrInstrument = $iLatestInstrument                         $aMessage[$i][$iInstance][0] = $iCurrTime                         $aMessage[$i][$iInstance][1] = $vCurrInstrument*256 + 0xC0                         $iInstance += 1                     EndIf                     $aInstrument[$i] = $vCurrInstrument*256 + 0xC0                 Case _IsKeySig($aTimeLine[$j])                     $vCurrKey = _GetKey($aTimeLine[$j])                 Case _IsTempoMark($aTimeLine[$j])                     $vCurrTempo = _GetQuartNoteBPM($aTimeLine[$j])                 Case _IsTie($aTimeLine[$j])                     $bTie = True                 Case _IsStartTuplet($aTimeLine[$j])                     $iTuplet = StringReplace($aTimeLine[$j], "(", "")                     If $iTuplet = "" Then $iTuplet = 3                 Case _IsOctave($aTimeLine[$j])                     $iCurrOctave = StringRegExpReplace($aTimeLine[$j], "[\{\}]", "")                 Case _IsCurrentNote($aTimeLine[$j])                     $sCurrNote = StringRegExpReplace($aTimeLine[$j], "[\{\}]", "")                 Case _IsNote($aTimeLine[$j])                     $aNotePart = _NoteSplit($aTimeLine[$j])                     If $aNotePart[0] <> "" Then                         $sCurrNote = _GetCurrNote($aNotePart[0])                     Else                         $aNotePart[0] = $sCurrNote                     EndIf                     $iDuration = _GetDuration($aNotePart[0], $vCurrTempo, $iTuplet)                     If $aNotePart[1] <> "" Then                         If StringInStr($aNotePart[1], "'") Then                             $iCurrOctave = _GetOctave($aNotePart[1])                         EndIf                         If Not $bTie Then                             $aMessage[$i][$iInstance][0] = $iCurrTime                             $iPitch = _GetPitch($aNotePart[1], $vCurrKey, $iCurrOctave)                             $aMessage[$i][$iInstance][1] = BitOr(($iPitch+0x15)*256, 0x90, 0x400000) ; Midi note on                             $iInstance += 1                         Else                             If Not $bRest And $sLookFor > -1 Then                                 $aMessage[$i][$sLookFor][0] += $iDuration                             EndIf                         EndIf                         $bRest = False                     Else                         $bRest = True                     EndIf                     $iCurrTime += $iDuration                     If Not $bRest And Not $bTie Then ; Now turn note off                         $aMessage[$i][$iInstance][0] = $iCurrTime                         $aMessage[$i][$iInstance][1] = BitXOR($aMessage[$i][$iInstance -1][1], 0x400000) ; Midi note off                         $sLookFor = $iInstance                         $iInstance += 1                     EndIf                     $bTie = False                 Case _IsEndTuplet($aTimeLine[$j])                     $iTuplet = 1             EndSelect         Next         If $iInstance > $iBound Then $iBound = $iInstance     Next     ReDim $aMessage[$iParts][$iBound][2]     ;_WalkThrough3D($aMessage) ; Debugging - Requires arratf.au3     $sLookFor = ""     For $i = 0 To $iParts -1         For $j = 0 To UBound($aMessage, 2) -1             If $aMessage[$i][$j][0] == "" Then ExitLoop             If Not StringInStr($sLookFor, "," & $aMessage[$i][$j][0] & ",") Then                 $sLookFor &= $aMessage[$i][$j][0] & ","             EndIf         Next     Next     $aTimeLine = StringSplit(StringTrimRight($sLookFor, 1), ",", 2)     _ArraySortByNumber($aTimeLine)     If $aTimeLine[1] = 0 Then _ArrayDelete($aTimeLine, 0)     Local $aGrid[UBound($aTimeLine)][$iParts*8 +3]     For $i = 0 To UBound($aTimeLine) -1         $aGrid[$i][0] = 1         $aGrid[$i][1] = $aTimeLine[$i]     Next     For $i = $iParts -1 To 0 Step -1         $iInstance = 0         For $j = 0 To UBound($aMessage, 2) -1             If $aMessage[$i][$j][0] == "" Then ExitLoop             If $aMessage[$i][$j][0] == $aTimeLine[$iInstance] Then                 If BitAND($aMessage[$i][$j][1], 0x400000) = 0x400000 Then                     If $aGrid[$iInstance][$aGrid[$iInstance][0]] <> $aInstrument[$i] Then                         $aGrid[$iInstance][0] += 1                         $aGrid[$iInstance][$aGrid[$iInstance][0]] = $aInstrument[$i]                     EndIf                 EndIf                 $aGrid[$iInstance][0] += 1                 $aGrid[$iInstance][$aGrid[$iInstance][0]] = $aMessage[$i][$j][1]             ElseIf $aMessage[$i][$j][0] > $aTimeLine[$iInstance] Then                 $iInstance += 1                 If $iInstance > UBound($aTimeLine) -1 Then ExitLoop                 $j -= 1             EndIf         Next     Next     ;_ArrayDisplay($aGrid)     Local $iTimer, $dOpen = _MidiOutOpen()     $iInstance = 0     $iTimer = TimerInit()     While 1         If TimerDiff($iTimer) >= $aGrid[$iInstance][1] Then             For $i = 2 To $aGrid[$iInstance][0]                 _MidiOutShortMsg($dOpen, $aGrid[$iInstance][$i])             Next             $iInstance += 1         Else             Sleep(10)         EndIf         If $iInstance > UBound($aTimeLine) -1 Then ExitLoop     WEnd     Sleep(600)     _MidiOutClose($dOpen) EndFunc ;==> _MusPlusPlus #region ; conditionals Func _IsInstrument($sInstruction)     Return StringRegExp($sInstruction, "(?i)(\A<[a-z \-_0-9]+>\z)") EndFunc ;==> _IsInstrument Func _IsKeySig($sInstruction)     Return StringRegExp($sInstruction, "(\A[0-7][#b]\z)") EndFunc ;==> _IsKeySig Func _IsTimeSig($sInstruction) ; Requires accentuation / dynamics     Return StringRegExp($sInstruction, "(\A\d+/(1|2|4|8|16|32|64)\z)") EndFunc ;==> _IsTimeSig Func _IsTempoMark($sInstruction)     Return StringRegExp($sInstruction, "(\A[o\+;\-~\\\?]\.?=\d*\.?\d+\z)") EndFunc ;==> _IsTempoMark Func _IsAtTempo($sInstruction)     Return $sInstruction = "@Tempo" ; not case sensitive EndFunc ;==> _IsAtTempo Func _IsSegno($sInstruction)     Return $sInstruction = "$" EndFunc ;==> _IsSegno Func _IsBarLine($sInstruction)     Return $sInstruction = "|" EndFunc ;==> _IsBarLine Func _IsStartRepeat($sInstruction)     Return $sInstruction = "|:" EndFunc ;==> _IsStartRepeat Func _Is2ndTimeRound($sInstruction)     Return StringRegExp($sInstruction, "(\A\d+,\z)") EndFunc ;==> _Is2ndTimeRound Func _IsTie($sInstruction)     Return $sInstruction = "_" EndFunc ;==> _IsTie Func _IsStartTuplet($sInstruction)     Return StringRegExp($sInstruction, "(\A\d*\(\z)") EndFunc ;==> _IsStartTuplet Func _IsNote($sNote)     If StringRegExp($sNote, "(\A'*[A-G](#|b|bb|x|z)?'*\z)") Then Return 1     Return StringRegExp($sNote, "(\A[o\+;\-~\\\?\.]+('*[A-G](#|b|bb|x|z)?'*)?\z)") EndFunc ;==> _IsNote Func _IsEndTuplet($sInstruction)     Return $sInstruction == ")" EndFunc ;==> _IsEndTuplet Func _IsEndRepeat($sInstruction)     Return $sInstruction = ":|" EndFunc ;==> _IsEndRepeat Func _IsCoda($sInstruction)     Return $sInstruction == "Q" EndFunc ;==> _IsCoda Func _IsDalSegno($sInstruction)     Return $sInstruction == "DS" EndFunc ;==> _IsDalSegno Func _IsDaCapo($sInstruction)     Return $sInstruction == "DC" EndFunc ;==> _IsDaCapo Func _IsFin($sInstruction)     Return $sInstruction == "fin" EndFunc ;==> _IsFin Func _IsOctave($sInstruction)     Return StringRegExp($sInstruction, "\A\{[0-8]\}\z") EndFunc ;==> _IsOctave Func _IsCurrentNote($sInstruction)     Return StringRegExp($sInstruction, "\A\{[o+;=~\?]\.*\}\z") EndFunc ;==> _IsCurrentNote #endregion ;==> conditionals #region ; currently unsupported features Func _IsTechnique($sInstruction) ; Returns an integer - gliss is currently not supported     Return StringInStr(" gliss pizz ", " " & $sInstruction & " ", 1) EndFunc ;==> _IsTechnique Func _IsBarRepeat($sInstruction) ; currently unsupported     Return StringRegExp($sInstruction, "(\A%\d*\z)") EndFunc ;==> _IsBarRepeat Func _IsAccel($sInstruction) ; currently unsupported     Return  StringInStr(" accel rit ", " " & $sInstruction & " ", 1) EndFunc ;==> _IsAccel Func _IsDynamicMark($sInstruction) ; Returns an integer - currently unsupported     Return StringInStr(" cres dim ppp pp /p mp mf /f ff fff ", " " & $sInstruction & " ", 1) EndFunc ;==> _IsDynamicMark #endregion ;==> currently unsupported features #region ; data requests Func _GetAccidental($aAccidentals, ByRef $sNote)     Local $sAlpha = StringReplace($sNote, "'", "")     $sNote = StringReplace($sNote, $sAlpha, $sAlpha & $aAccidentals[Asc($sAlpha) - 65], 0, 1) EndFunc ;==> _GetAccidental Func _GetKey($sKey)     Local $iSign = 1     If StringInStr($sKey, "b", 1) Then $iSign = -1     Return StringRegExpReplace($sKey, "[#b]", "")*$iSign EndFunc ;==> _GetKey Func _GetQuartNoteBPM($sTempo)     Local $aTempo = StringSplit($sTempo, "=", 2)     Local $iNote = StringInStr("?\~-;+o", $aTempo[0]) -5     Return $aTempo[1]*2^$iNote EndFunc ;==> _GetQuartNoteBPM Func _GetCurrNote($sNote)     Local $sCurrChr, $sRhythm = ""     For $i = StringLen($sNote) To 1 Step -1         $sCurrChr = StringMid($sNote, $i, 1)         $sRhythm = $sCurrChr & $sRhythm         If StringInStr("o+;-~\?", $sCurrChr, 1) Then ExitLoop     Next     Return $sRhythm EndFunc ;==> _GetCurrNote Func _GetOctave($sNote)     Local $iPos, $iOctave = 4     For $i = 65 To 71         $iPos = StringInStr($sNote, Chr($i), 1)         If $iPos Then             ExitLoop         EndIf     Next     For $i = 1 To $iPos -1         If StringMid($sNote, $i, 1) = "'" Then $iOctave -= 1     Next     For $i = $iPos +1 To StringLen($sNote)         If StringMid($sNote, $i, 1) = "'" Then $iOctave += 1     Next     Return $iOctave EndFunc ;==> _GetOctave Func _GetPitch($sName, $iKey = 0, $iOctave = 4)     Local $iPitch, $sAlpha     Select         Case StringInStr($sName, "C", 1)             $sAlpha = "C"             $iPitch = 39         Case StringInStr($sName, "D", 1)             $sAlpha = "D"             $iPitch = 41         Case StringInStr($sName, "E", 1)             $sAlpha = "E"             $iPitch = 43         Case StringInStr($sName, "F", 1)             $sAlpha = "F"             $iPitch = 44         Case StringInStr($sName, "G", 1)             $sAlpha = "G"             $iPitch = 46         Case StringInStr($sName, "A", 1)             $sAlpha = "A"             $iPitch = 48         Case StringInStr($sName, "B", 1)             $sAlpha = "B"             $iPitch = 50     EndSelect     Select         Case StringInStr($sName, "bb", 1)             $iPitch -= 2         Case StringInStr($sName, "b", 1)             $iPitch -= 1         Case StringInStr($sName, "z", 1)             $iPitch += 0         Case StringInStr($sName, "#", 1)             $iPitch += 1         Case StringInStr($sName, "x", 1)             $iPitch += 2         Case $iKey             If $iKey > 0 Then                 If StringInStr(StringLeft("FCGDAEB", $iKey), $sAlpha) Then $iPitch += 1             Else                 If StringInStr(StringRight("FCGDAEB", -$iKey), $sAlpha) Then $iPitch -= 1             EndIf     EndSelect     $iOctave -= 4     $iPitch += $iOctave*12     If $iPitch < 0 Or $iPitch > 87 Then Return SetError (2, 0, "") ; Out of range pitch     Return $iPitch ; values range from 0 to 87 EndFunc ;==> _GetPitch Func _GetDuration($sNote, $iTempo = 100, $iTuplet = 1)     Local $sLen = StringLen($sNote)     If Not $sLen Then Return Default     If StringLeft($sNote, 1) = "." Then Return SetError(1, 0, 0) ; Syntax error - Dot not preceeded by a note value     Local $iDuration = 0, $iDots = 0, $sCurrChr = "", $iID, $iNote = 0     For $i = 1 To $sLen         $sCurrChr = StringMid($sNote, $i, 1)         $iID = StringInStr("?\~-;+o.", $sCurrChr) -1         Switch $iID             Case 0 To 6                 $iDuration += $iNote                 $iNote = 6930 * 2^$iID             Case 7                 While $sCurrChr = "."                     $iDots += 1                     $i += 1                     $sCurrChr = StringMid($sNote, $i, 1)                 WEnd                 $iNote *= (2^($iDots +1) -1)/2^$iDots                 $i -= 1                 $iDots = 0         EndSwitch     Next     $iDuration += $iNote     If $iTuplet > 1 Then         Switch $iTuplet             Case 2, 4, 8, 16, 32, 64 ; In mus - only 2 and 4 appear, and then only in compound time                 $iDuration *= 3/2 ; it's the same result in all cases             Case 3 ; triplets are the most common tuplet division                 $iDuration *= 2/3             Case 5 To 7                 $iDuration *= 4/$iTuplet             Case 9 To 15 ; In mus - tuplets greater than 12 almost never appear                 $iDuration *= 8/$iTuplet             Case 17 To 31                 $iDuration *= 16/$iTuplet             Case 33 To 63                 $iDuration *= 32/$iTuplet             Case 65 To 127                 $iDuration *= 64/$iTuplet             Case Else                 Return SetError (2, 0, 0) ; Unsupported out of range tuplet value         EndSwitch     EndIf     Return $iDuration*125/(231*$iTempo) EndFunc ;==> _GetDuration Func _GetInstrument($vInstrument)     $vInstrument = StringRegExpReplace($vInstrument, "[<>]", "")     Local $aMIDIInst[72][4] _ ; A selection of available MIDI imstruments     = _ ; Name    , ##,Mn,Mx     [["pno"     ,  0, 0,87], _ ; Acoustic Grand Piano ... KEYBOARDS     ["br pno"   ,  1, 0,87], _ ; Bright Piano     ["e pno"    ,  2, 0,87], _ ; Electric Grand Piano     ["h-t pno"  ,  3, 0,87], _ ; Honky-tonk piano     ["hpsd"     ,  6, 0,87], _ ; Harpsichord     ["clav"     ,  7, 0,87], _ ; Clavichord     ["cel"      ,  8, 0,87], _ ; Celesta     ["glock"    ,  9, 0,87], _ ; Glockenspiel ... PITCHED PERCUSSION     ["mus box"  , 10, 0,87], _ ; Music Box     ["vib"      , 11, 0,87], _ ; Vibraphone     ["marim"    , 12, 0,87], _ ; Marimba     ["xyl"      , 13, 0,87], _ ; Xylophone     ["chimes"   , 14, 0,87], _ ; Tubular Bells     ["dulc"     , 15, 0,87], _ ; Dulcimer     ["ham org"  , 16, 0,87], _ ; Drawbar Organ ... ORGAN     ["perc org" , 17, 0,87], _ ; Percussive Organ     ["org"      , 19, 0,87], _ ; Church Organ     ["harm"     , 20, 0,87], _ ; Harmonium Reed Organ     ["accord"   , 21, 0,87], _ ; Accordion     ["mouth org", 22, 0,87], _ ; Harmonica     ["tango acc", 23, 0,87], _ ; Bandoneon     ["gtr"      , 24, 0,87], _ ; Classical Guitar ... GUITAR     ["a gtr"    , 25, 0,87], _ ; Accoustic Guitar     ["jazz gtr" , 26, 0,87], _ ; Jazz Guitar     ["e gtr"    , 27, 0,87], _ ; Electric Guitar     ["mut gtr"  , 28, 0,87], _ ; Muted Electric Guitar     ["fuzz gtr" , 30, 0,87], _ ; Distortion Guitar     ["a bass"   , 32, 0,87], _ ; Acoustic Bass ... BASS     ["e bass"   , 33, 0,87], _ ; Electric Bass     ["bass"     , 34, 0,87], _ ; Upright Bass     ["f bass"   , 35, 0,87], _ ; Fretless Bass     ["sl bass"  , 36, 0,87], _ ; Slap Bass     ["vln"      , 40, 0,87], _ ; Violin ... STRINGS     ["vla"      , 41, 0,87], _ ; Viola     ["vc"       , 42, 0,87], _ ; Cello     ["db"       , 43, 0,87], _ ; Double Bass     ["hp"       , 46, 0,87], _ ; Harp     ["timp"     , 47, 0,87], _ ; Timpani (perc)     ["tpt"      , 56, 0,87], _ ; Trumpet ... BRASS     ["tbn"      , 57, 0,87], _ ; Trombone     ["tba"      , 58, 0,87], _ ; Tuba     ["mut tpt"  , 59, 0,87], _ ; Muted Trumpet     ["hn"       , 60, 0,87], _ ; French Horn     ["s sax"    , 64, 0,87], _ ; Soprano Sax ... REED     ["a sax"    , 65, 0,87], _ ; Alto Sax     ["sax"      , 66, 0,87], _ ; Tenor Sax     ["b sax"    , 67, 0,87], _ ; Baritone Sax     ["ob"       , 68, 0,87], _ ; Oboe     ["eng hn"   , 69, 0,87], _ ; English Horn     ["bsn"      , 70, 0,87], _ ; Bassoon     ["cl"       , 71, 0,87], _ ; Clarinet     ["picc"     , 72, 0,87], _ ; Piccolo ... PIPE     ["fl"       , 73, 0,87], _ ; Flute     ["rec"      , 74, 0,87], _ ; Recorder     ["pan"      , 75, 0,87], _ ; Panpipes     ["bottle"   , 76, 0,87], _ ; Bottle     ["shaku"    , 77, 0,87], _ ; Shakuhachi     ["whistle"  , 78, 0,87], _ ; Whistle     ["oc"       , 79, 0,87], _ ; Ocarina     ["sitar"    ,104, 0,87], _ ; Sitar ... OTHER     ["banjo"    ,105, 0,87], _ ; Banjo     ["shamisen" ,106, 0,87], _ ; Shamisen     ["koto"     ,107, 0,87], _ ; Koto     ["kalimba"  ,108, 0,87], _ ; Kalimba (perc)     ["bagp"     ,109, 0,87], _ ; Bagpipe     ["fiddle"   ,110, 0,87], _ ; Fiddle     ["shanai"   ,111, 0,87], _ ; Shanai (woodwind)     ["bell"     ,112, 0,87], _ ; Tinkle Bell     ["st drum"  ,114, 0,87], _ ; Steel Drums     ["w bl"     ,115, 0,87], _ ; Woodblock     ["taiko"    ,116, 0,87], _ ; Taiko Drum     ["tom-t"    ,117, 0,87]]   ; Tom-tom     For $i = 0 To 71         If $aMIDIInst[$i][0] = $vInstrument Then             $vInstrument = $aMIDIInst[$i][1]             ExitLoop         EndIf     Next     $vInstrument = StringRegExpReplace($vInstrument, "[<>]", "")     If StringRegExp($vInstrument, "[^\d]") Or $vInstrument < 0 Or $vInstrument > 127 Then Return SetError(1, 0, 0) ; returns Grand Piano     Return $vInstrument ; values range from 0 to 117 EndFunc ;==> _GetInstrument #endregion ;==> data requests #region ; miscellaneous functions Func _InitialTidySource($sSource)     If _IllegalDotCheck($sSource) Then Return SetError(1, 0, 0)     $sSource = StringReplace($sSource, '"', "''") ; Helmholtz-Wilkinson octaves     $sSource = StringReplace($sSource, '(', "( ") ; Add spaces after (     $sSource = StringReplace($sSource, ')', " ) ") ; Add spaces before and after )     $sSource = StringRegExpReplace($sSource, "(<\h+)", " <") ; Remove spaces after <     $sSource = StringRegExpReplace($sSource, "(\h+>)", "> ") ; Remove spaces before >     $sSource = StringReplace($sSource, '_', " _ ") ; Add spaces before and after underscore     $sSource = StringReplace($sSource, '|:', "|: ") ; Add spaces after start repeats     $sSource = StringReplace($sSource, ':|', " :|") ; Add spaces before end repeats     $sSource = StringReplace($sSource, ':|:', ":||:") ; Convert double repeat marks _     $sSource = StringReplace($sSource, '|', " | ") ; Add spaces before and after bar lines     $sSource = StringReplace($sSource, '| :', "|:") ; Restore start repeat marks     $sSource = StringReplace($sSource, ': |', ":|") ; Restore end repeat marks     $sSource = StringReplace($sSource, ' |  | ', " || ") ; Restore double bar lines     $sSource = StringRegExpReplace($sSource, "(<[\-\w]+)(\h+)(pno|box|org|acc|gtr|bass|tpt|sax|hn|drum|bl)", "$1" & "_" & "$3")     $sSource = StringReplace(StringReplace($sSource, @CRLF, @LF), @CR, @LF) ; Replace all breaks with @LF     $sSource = StringRegExpReplace($sSource, "(\n\h*)", @LF) ; Remove spaces after breaks     $sSource = StringRegExpReplace($sSource, "[\n]{2,}", @LF & @LF) ; Remove duplicate empty lines     $sSource = StringRegExpReplace($sSource, "(\A\n*)", "") ; Remove Preceeding breaks     $sSource = StringRegExpReplace($sSource, "(\n*\z)", "") ; Remove Trailing breaks     Return $sSource EndFunc ;==> _InitialTidySource Func _UpdateCurrentAttrib(ByRef $vCurrAttrib, ByRef $aVoices, $vNewAttrib, $iIndex, $sPadLeft = "", $sPadRight = " ")     If $vCurrAttrib <> $vNewAttrib Then         $vCurrAttrib = $vNewAttrib         $aVoices[$iIndex] &= $sPadLeft & $vCurrAttrib & $sPadRight     EndIf EndFunc ;==> _UpdateCurrentAttrib Func _ClearAccidentals(ByRef $aAccidentals)     For $i = 0 To 6         $aAccidentals[$i] = ""     Next EndFunc ;==> _ClearAccidentals Func _UpdateAccidentals(ByRef $aAccidentals, $sNote)     $sNote = StringReplace($sNote, "'", "")     Local $sAlpha = StringLeft($sNote, 1)     $aAccidentals[Asc($sAlpha) - 65] = StringTrimLeft($sNote, 1) EndFunc ;==> _UpdateAccidentals Func _NoteSplit($sNote)     Local $aNotePart[2] = ["", ""]     $aNotePart[1] = StringRegExpReplace($sNote, "[o\+;\-~\\\?\.]+", "") ; Remove rhthmic values     $aNotePart[0] = StringLeft($sNote, StringLen($sNote) - StringLen($aNotePart[1]))     Return $aNotePart EndFunc ;==> _NoteSplit Func _IllegalDotCheck($sVoo)     Return StringRegExp($sVoo, "(o\.{7}|\+\.{6}|;\.{5}|\-\.{4}|~\.{3}|\\\.\.|\?\.)")         ; Warning - detected an unsupported number of dots after a note EndFunc ;==> _IllegalDotCheck #endregion ;==>  miscellaneous functions #region ; MIDI functions ;======================================================= ;Retrieves a MIDI handle and Opens the Device ;Parameters(Optional) - Device ID, Window Callback, ; instance, flags ;Author : Eynstyne ;Library : Microsoft winmm.dll ;======================================================= Func _MidiOutOpen($devid = 0, $callback = 0, $instance = 0, $flags = 0)    Local $ret = DllCall("winmm.dll", "long", "midiOutOpen", "handle*", 0, "int", $devid, "dword_ptr", $callback, "dword_ptr", $instance, "long", $flags)    If @error Then Return SetError(@error,0,0)    If $ret[0] Then Return SetError(-1,$ret[0],0)    Return $ret[1] EndFunc   ;==>_MidiOutOpen ;======================================================= ;Closes Midi Output/Input devices ;Parameters - MidiHandle ;Author : Eynstyne ;Library : Microsoft winmm.dll ;======================================================= Func _MidiOutClose ($hmidiout)    Local $ret = DllCall("winmm.dll", "long", "midiOutClose", "handle", $hmidiout)    If @error Then Return SetError(@error,0,0)    If $ret[0] Then Return SetError(-1,$ret[0],0)    Return $ret[0] EndFunc   ;==> _MidiOutClose ;======================================================= ;Gets the Mixer Volume for MIDI ;Parameters - None ;Author : Eynstyne ;Library : Microsoft winmm.dll ;======================================================= Func _MidiOutGetVolume ($devid = 0)    Local $ret = DllCall("winmm.dll", "long", "midiOutGetVolume", "handle", $devid, "dword*",0)    If @error Then Return SetError(@error,0,0)    If $ret[0] Then Return SetError(-1,$ret[0],0)    Return $ret[2] EndFunc   ;==> _MidiOutGetVolume ;======================================================= ;Sets the Mixer Volume for MIDI ;Parameters - Volume (0 - 65535) ;Author : Eynstyne ;Library : Microsoft winmm.dll ;======================================================= Func _MidiOutSetVolume($iVolume = 65535, $devid = 0)     Local $iMixVolume=BitAND($iVolume,0xFFFF)+BitShift(BitAND($iVolume,0xFFFF),-16) ; From Ascend4nt     Local $ret = DllCall("winmm.dll", "long", "midiOutSetVolume", "handle", $devid, "int", $iMixVolume)     If @error Then Return SetError(@error,0,0)     If $ret[0] Then Return SetError(-1,$ret[0],0)     Return $ret[0] EndFunc ;==> _MidiOutSetVolume ;======================================================= ;MIDI Message Send Function ;Parameters - Message as Hexcode or Constant ;Author : Eynstyne ;Library : Microsoft winmm.dll ;======================================================= Func _MidiOutShortMsg($hmidiout, $msg)    Local $ret = DllCall("winmm.dll", "long", "midiOutShortMsg", "handle", $hmidiout, "long", $msg)    If @error Then Return SetError(@error,0,0)    If $ret[0] Then Return SetError(-1,$ret[0],0)    Return $ret[0] EndFunc ;==> _MidiOutShortMsg #endregion ;==> MIDI functions #region ; functions ripped from arrayf.au3 and stringf.au3 ; #FUNCTION# ==================================================================================================================== ; Name...........: _ArraySortByNumber ; Description ...: Sorts a 1D array numerically ascending. ; Syntax.........: _ArraySortByNumber(ByRef $avArray [, $bVulgarFrac = False]) ; Parameters ....: $avArray     - [ByRef] The array to sort ;                  $bVulgarFrac - [Optional] If set to True, vulgar fractions will be also be sorted numerically ; Return values .: Success   - Returns 1 ;                  Failure   - Returns zero and sets @error to the following values: ;                  |@error = 1 : $avArray is not a one dimensional array ; Author ........: czardas ; Modified.......: ; Remarks .......: The array is sorted first by numbers and then by strings. ; Related .......: _ArraySort, _ArraySortByLen ; Link ..........: ; Example .......: ; =============================================================================================================================== Func _ArraySortByNumber(ByRef $avArray, $bVulgarFrac = False)     If Not IsArray($avArray) Or UBound($avArray, 0) > 1 Then Return SetError(1, 0, 0)     Local $iBound = UBound($avArray) -1     Local $aTemp[$iBound +1][2]     For $i = 0 To $iBound         $aTemp[$i][0] = $avArray[$i]         If _StringIsNumber($avArray[$i], $bVulgarFrac) Then             $aTemp[$i][1] = Execute($avArray[$i])         Else             $aTemp[$i][1] = "z" & $avArray[$i]         EndIf     Next     _ArraySort($aTemp, 0, 0, 0, 1)     For $i = 0 To $iBound         $avArray[$i] = $aTemp[$i][0]     Next     Return 1 EndFunc ;==> _ArraySortByNumber ; #FUNCTION# ==================================================================================================================== ; Name...........: _StringIsNumber ; Description ...: Checks whether a string is a number as recognised by the AutoIt interpreter ; Syntax.........: _StringIsNumber($sString [, $bVulgarFrac]) ; Parameters ....: $sString     - The string to test ;                  $bVulgarFrac - [Optional] if set to True, vulgar fractions will also return True ; Return values .: True or False ; Author ........: czardas ; Remarks .......: Returns True for integers, floats, hexadecimal and scientific notation. ; Related .......: StringIsDigit, StringIsFloat, StringIsInt, StringIsXDigit ; Link ..........: ; Example .......: MsgBox(0, "1.2e-300 is a number", _StringIsNumber("1.2e-300")) ; =============================================================================================================================== Func _StringIsNumber($sString, $bVulgarFrac = False)     Local $bReturn = False     If StringIsInt($sString) Or StringIsFloat($sString) Then         $bReturn = True ; string is integer or float     ElseIf StringRegExp($sString, "(?i)(\A[\+\-]?0x[A-F\d]+\z)") Then         $bReturn = True ; string is hexadecimal integer     ElseIf StringRegExp($sString, "(?i)(\A[\+\-]?\d*\.?\d+e[\+\-]?\d+\z)") Then         $bReturn = True ; exponential (or scientific notation)     ElseIf $bVulgarFrac And StringRegExp($sString, "(\A[\+\-]?\d+/\d+\z)") Then         $bReturn = True ; string is a vulgar fraction     EndIf     Return $bReturn EndFunc ; _StringIsNumber #endregion ;==> functions ripped from arrayf.au3 and stringf.au3 #cs ; incomplete and unorganized comments   note attributes ==> all new notes inherit attributes from the previous note played with the exception of repeats   staff attributes ==> affecting all subsequent new notes (mus) ... key, instrument, time signature   performance attributes ==> affecting all subsequent notes played including repeats (mus) tempo settings   short lived attributes ==> affecting remaining notes within the bar ... accidentals   section repeats ==> DC and DS   multiple bar repeats ==> |: and :|   o  ==> Lower case o ..... Whole note ......... open note   +  ==> Plus symbol ...... Half note .......... open note with a stem   ;  ==> Apostrophe ....... Quarter note ....... closed note with a stem   -  ==> Minus sign ....... Eighth note ........ single flag   ~  ==> Tilde ............ Sixteenth note ····· double flag   \  ==> Back slash ....... Thirty-second note . tripple flag   ?  ==> Question mark .... Sixty-fourth note .. quadruple flag (very rare)   '   ==> 1 octave (above or below)   "   ==> 2 octaves (above or below)   "'  ==> 3 octaves (above or below)   ""  ==> 4 octaves (above or below)   Accidentals   # ==> sharp   b ==> flat   x ==> double sharp   bb ==> double flat   z ==> natural   Other symbols   _   ==> tie   .   ==> dot   (   ==> start triplet   5(  ==> start quintuplet   )   ==> end tuplet   |   ==> bar line   |:  ==> start repeat   :|  ==> end repeat   1,  ==> first time round   2,  ==> second time round   DC ==> da capo   $ ==> segno   DS ==> dal segno   fin ==> fine   Q ==> coda   @Tempo ==> a tempo   <instrument name> ==> instrument   time signatutes n/2^n   2/4, 3/4, 6/8 etc...   tempo markings   ;=100  ==> 100 quarter note beats ber minute   Key Signatures with sharps   0# ==> C major ==> C  D  E  F  G  A  B  C   1# ==> G major ==> G  A  B  C  D  E  F# G   2# ==> D major ==> D  E  F# G  A  B  C# D   3# ==> A major ==> A  B  C# D  E  F# G# A   4# ==> E major ==> E  F# G# A  B  C# D# E   5# ==> B major ==> B  C# D# E  F# G# A# B   6# ==> F# major ==> F# G# A# B  C# D# E# F#   7# ==> C# major ==> C# D# E# F# G# A# B# C#   Key Signatures with flats   0b ··· C major ···· C  D  E  F  G  A  B  C   1b ··· F major ···· F  G  A  Bb C  D  E  F   2b ··· Bb major ··· Bb C  D  Eb F  G  A  Bb   3b ··· Eb major ··· Eb F  G  Ab Bb C  D  Eb   4b ··· Ab major ··· Ab Bb C  Db Eb F  G  Ab   5b ··· Db major ··· Db Eb F  Gb Ab Bb C  Db   6b ··· Gb major ··· Gb Ab Bb C  Db Eb Fb G   7b ··· Cb major ··· Cb Db Eb Fb Gb Ab Bb Cb   Supported tuplet divisions   Note    Divisions ·····································           3       5to7    9to15  17to31   33to63  65to127   \       ?   ~       \       ?   -       ~       \       ?   ;       -       ~       \       ?   +       ;       -       ~       \       ?   o       +       ;       -       ~       \       ?   Supported tuplets for compound time   Note    Divisions ································           2       4       8       16      32      64   \.      ?   ~.      \       ?   -.      ~       \       ?   ;.      -       ~       \       ?   +.      ;       -       ~       \       ?   o.      +       ;       -       ~       \       ?   Dotted notes   o. == o+ , o.. == o+;   +. == +; , +.. == +;-   ;. == ;- , ;.. == ;-~   -. == -~ , -.. == -~\   ~. == ~\ , ~.. == ~\?   \. == \?   o...... == o+;-~\?   Illegal sequences   o.......   +......   ;.....   -....   ~...   \..   ?.   ""C  ==>  4th 8va below = sub-contra octave   "'C  ==>  3rd 8va below   "C   ==>  2nd 8va below   'C   ==>  1st 8va below   'C'  ==>  Middle C   C'   ==>  1st 8va above   C"   ==>  2nd 8va above   C"'  ==>  3rd 8va above   C""  ==>  4th 8va above   Full Range = ""A to C""   After DC and DS all repeat marks are ignored on second run.   With separate endings the final section is entered immediately.   Q or $ do not belong in a separate ending section.   Coda occurs in a section which is skipped   |: 1, Q :|2, [incorrect] => will miss the coda altogether   The continuation from segno is unclear   |: 1, $ :|2, [incorrect] => allow rhythmic corruption   The following is fine   |: $ 1, :|2, Q :| DS |Q   Coda should not be placed before segno   | Q | $ | DS | Q [incorrect]   When entering the coda section repeat marks are reinstated   Before DC or DS ignore $, Q and fin   After DC go to the start and continue from there   After DS look behind for $ and continue from there   After DC or DS stop when you see fin or go to final section when you see Q   Search for final section Q after DC or DS (whichever is greater)   In the final section Q ignore DC DS Q $ - they do not belong in the coda   After DC also look for DS and after DS also look for DC   After DC or DS repeat marks are ignored within the repeated sequence   With repeats that have separate endings, the final ending is entered immediately   All other endings are skipped   Repeat marks are reinstated after DC (or DS depending which was last encountered)   DC DS $ fin may only be used once   Q if used must appear twice   Illegal characters   {}[]&¬` #ce ;==> incomplete and unorganized comments

The interpreter contains some unused code sections, some of which may be used in the future. Here's the mus++ source for the second example:

<fl>   ;=146 3/4 |: G   | C' E C   |  G B   G  | +.C''             | +B'     ;G   |  G  -G  G  ;G   | <fl>   ;=146 3/4 |: ;   | E +G     | ;B D' 'B' | -C' 'B' C' D E F# | ;G  'G'  B   |  C' -C 'B' ;C'' | <cl>   ;=146 3/4 |: ;   | +.       | +G     ;  | +.                | +.           | ;E' -E  D  ;E   | <tpt>  ;=146 3/4 |: 'G  | 'C' E  C | ;'G ; 'G' | C    ;       C'   | 'G'  +       | ;G  -G  G  ;G   | <timp> ;=146 3/4 |: ''G | +'C   ;C | +''G   ;G | A    A       A    |  G  -G G G G | +.G             | ;G -G G ;G |  G  A  B | C'' ; fin :|  D' | +'B' ;C' | -D G F# G F G | +'B' ;C' |  D   ;  DC  D -D C ;D | 'B' C' D | C ;   fin :| 'B' | +G   ;A  |  +.           | +G   ;A  |  B   ;  DC  F -F E ;F | 'G' A B  | G  ;  fin :|  ;  | +.G'     | _;G  +        | +.G'     | _;G 'G' DC ;G -G G ;G | 'G  G G  |'C' ;  fin :|  ;  | 'G G G   | +.'G'         | ;'G G G  |  G   ;  DC  G         | ;G  G G  | +''C  fin :|  ;  | +.''G    | ;G   G    G   |  +.G     | ;G   G  DC

All the features of mus++ will be documented in due course. For now just feed it anything you like and if it doesn't produce any sound it's an error. Other kinds of errors also need work - you'll just have to trust your ear. Multiple voices can sometimes interfere with each other, which is one of the problems with the interpreter I mentioned earlier. I know why this happens.


  • TheSaint, mLipok, James and 14 others like this


#1085906 New MVPs

Posted by Melba23 on 10 June 2013 - 08:49 AM

In case anyone had not noticed, I am happy to announce that we have three new MVPs: PhoenixXL, FireFox and kylomas.

I am sure you will all join in with my hearty congratulations to them all. :)

M23
  • TheSaint, czardas, DW1 and 11 others like this


#1138537 AutoIt v3.3.10.0 Released

Posted by Jon on 23 December 2013 - 11:49 AM

AutoIt v3.3.10.0 has been released.

 

Big thanks to everyone involved in this release, including past and present contributors, beta testers, moderators and MVPs. It really is a massive group effort!

 

There's still a lot to do in future releases, but at least we have got a stable release out there that we can build on :)

 

There are too many changes and fixes to list here, but some highlights include:

  • 90+ bugs fixes and additions to the main AutoIt executables.
  • 90+ bug fixes and additions to the user defined functions (UDFs).
  • Much improved Unicode support within the regular expression engine for non-English character sets.
  • Extensive AutoItX changes, including an easy to use .NET Assembly interface and a set of PowerShell CmdLets.

 

Download it here.

Complete list of changes: History


  • techbard, mLipok, czardas and 9 others like this


#882654 AutoCamo - 81.12 b - 82.14 b

Posted by Mobius on 02 April 2011 - 07:39 AM

Last updated 9/2/14

main.png
Other images
Spoiler


Current main download
Attached File  AutoCamo_81.12b.7z   439.09KB   377 downloads

Essential bug fix updates
This needs to be extracted to the folder of the main download above.

Attached File  A3C_CP_82.14.b.7z   243.7KB   212 downloads

Features
  • Simple Integrated countermeasures against static analysis based decompilers.
  • Add basic types of resources into the interpreter or other types as raw data.
  • Define multiple programs to execute pre and post build.
  • Create and include pe version information.
  • User defined patches that can be implemented globally on the interpreter and compiler or selectively.
  • Handles its own basic macro's as well as environment variables in most fields for easier path finding.
  • Drag and drop configs (script bound or separate) to the input edit box or to the icon to load them.
  • Configuration settings can be copied to the clipboard or saved as config files or Au3 scripts.
  • Settings can now be saved directly to an AutoIt3 script.
  • Subsystem independant, can act as a gui or console tool.
  • And much more.
See next post for update information.
  • FireFox, mesale0077, michaelslamet and 7 others like this


#574345 String Regular Expression Tester V2

Posted by Szhlopp on 03 September 2008 - 08:27 PM

Since there are WAY to many posts on how to SRE something I thought I would create a nice little tester. ;)

This thing does SRE and SRER.
Loads files to test.
Gets internet content to test.
And more!

Here it is:
Attached File  SRETesterV2.1.au3   11.41KB   2009 downloads
Prev DL - 211

Enjoy!
  • wilburnwlssh, arnulfojynsh, martywvn and 7 others like this


#1150084 the creation of the AutoIt-Logo ;)

Posted by eukalyptus on 03 February 2014 - 08:44 PM

requires AutoIt 3.3.10.0+

AutoIt         
#include <GDIPlus.au3> Opt("MustDeclareVars", 1) _GDIPlus_Startup() Global $hBitmap = _CreateAutoItLogo(1920, 1200);Set resolution _GDIPlus_ImageSaveToFile($hBitmap, @ScriptDir & "\Logo.bmp") _GDIPlus_Shutdown() ShellExecute(@ScriptDir & "\Logo.bmp") Func _Draw_Inner($hContext, $hPath)     Local $aBounds = _GDIPlus_PathGetWorldBounds($hPath)     Local $hBrush = _GDIPlus_PathBrushCreateFromPath($hPath)     _GDIPlus_PathBrushSetCenterPoint($hBrush, $aBounds[0] + $aBounds[2] * 0.5, $aBounds[1] + $aBounds[3] * 0.4)     _GDIPlus_PathBrushSetFocusScales($hBrush, 0.5, 0.5)     Local $aPBlend[4][2] = [[3]]     $aPBlend[1][0] = 0xFF181F39     $aPBlend[1][1] = 0     $aPBlend[2][0] = 0xFF394D82     $aPBlend[2][1] = 0.3     $aPBlend[3][0] = 0xFF607CD0     $aPBlend[3][1] = 1     _GDIPlus_PathBrushSetPresetBlend($hBrush, $aPBlend)     _GDIPlus_PathBrushSetGammaCorrection($hBrush, True)     _GDIPlus_GraphicsFillPath($hContext, $hPath, $hBrush)     _GDIPlus_BrushDispose($hBrush)     Local $hPath_Clone = _GDIPlus_PathClone($hPath)     Local $hMatrix = _GDIPlus_MatrixCreate()     _GDIPlus_MatrixTranslate($hMatrix, -($aBounds[0] + $aBounds[2] * 0.5), -$aBounds[1])     _GDIPlus_MatrixScale($hMatrix, 0.85, 0.6, True)     _GDIPlus_MatrixTranslate($hMatrix, $aBounds[0] + $aBounds[2] * 0.5, $aBounds[1], True)     _GDIPlus_PathTransform($hPath_Clone, $hMatrix)     $hBrush = _GDIPlus_PathBrushCreateFromPath($hPath_Clone)     _GDIPlus_PathBrushSetCenterPoint($hBrush, $aBounds[0] + $aBounds[2] * 0.45, $aBounds[1] + $aBounds[3] * 0.1)     _GDIPlus_PathBrushSetCenterColor($hBrush, 0xFFFFFFFF)     _GDIPlus_PathBrushSetSurroundColor($hBrush, 0)     _GDIPlus_PathBrushSetSigmaBlend($hBrush, 1, 0.9)     _GDIPlus_GraphicsFillPath($hContext, $hPath_Clone, $hBrush)     _GDIPlus_BrushDispose($hBrush)     _GDIPlus_PathDispose($hPath_Clone)     $hPath_Clone = _GDIPlus_PathClone($hPath)     _GDIPlus_MatrixSetElements($hMatrix)     _GDIPlus_MatrixTranslate($hMatrix, -($aBounds[0] + $aBounds[2] * 0.5), -($aBounds[1] + $aBounds[3]))     _GDIPlus_MatrixScale($hMatrix, 0.95, 0.8, True)     _GDIPlus_MatrixTranslate($hMatrix, $aBounds[0] + $aBounds[2] * 0.5, $aBounds[1] + $aBounds[3], True)     _GDIPlus_PathTransform($hPath_Clone, $hMatrix)     $hBrush = _GDIPlus_PathBrushCreateFromPath($hPath_Clone)     _GDIPlus_PathBrushSetCenterPoint($hBrush, $aBounds[0] + $aBounds[2] * 0.65, $aBounds[1] + $aBounds[3] * 0.70)     _GDIPlus_PathBrushSetCenterColor($hBrush, 0xFFDDEEFF)     _GDIPlus_PathBrushSetSurroundColor($hBrush, 0)     _GDIPlus_PathBrushSetSigmaBlend($hBrush, 1, 0.7)     _GDIPlus_PathBrushSetFocusScales($hBrush, 0.3, 0.2)     _GDIPlus_PathBrushSetGammaCorrection($hBrush, True)     _GDIPlus_GraphicsSetCompositingQuality($hContext, 3)     _GDIPlus_GraphicsFillPath($hContext, $hPath_Clone, $hBrush)     _GDIPlus_GraphicsSetCompositingQuality($hContext, 1)     _GDIPlus_BrushDispose($hBrush)     _GDIPlus_PathDispose($hPath_Clone)     _GDIPlus_MatrixDispose($hMatrix) EndFunc   ;==>_Draw_Inner Func _Draw_A($hContext, $hPath, $hBrush_Alu)     Local $hPath_Clone = _GDIPlus_PathClone($hPath)     Local $aBounds = _GDIPlus_PathGetWorldBounds($hPath_Clone)     Local $hMatrix = _GDIPlus_MatrixCreate()     _GDIPlus_MatrixTranslate($hMatrix, -($aBounds[0] + $aBounds[2] * 0.5), -($aBounds[1] + $aBounds[3] * 0.4))     _GDIPlus_MatrixScale($hMatrix, 1.01, 1.02, True)     _GDIPlus_MatrixTranslate($hMatrix, $aBounds[0] + $aBounds[2] * 0.5, $aBounds[1] + $aBounds[3] * 0.43, True)     _GDIPlus_PathTransform($hPath_Clone, $hMatrix)     Local $hBrush = _GDIPlus_PathBrushCreateFromPath($hPath_Clone)     _GDIPlus_PathBrushSetCenterColor($hBrush, 0xFF000000)     _GDIPlus_PathBrushSetSurroundColor($hBrush, 0)     _GDIPlus_PathBrushSetFocusScales($hBrush, 0.91, 0.91)     _GDIPlus_GraphicsFillPath($hContext, $hPath_Clone, $hBrush)     _GDIPlus_BrushDispose($hBrush)     _GDIPlus_PathDispose($hPath_Clone)     $hPath_Clone = _GDIPlus_PathClone($hPath)     Local $hPen = _GDIPlus_PenCreate(0xDD000000, 2)     _GDIPlus_PenSetLineJoin($hPen, 1)     _GDIPlus_GraphicsDrawPath($hContext, $hPath, $hPen)     _GDIPlus_PenDispose($hPen)     Local $hBmp = _GDIPlus_BitmapCreateFromScan0($aBounds[2], $aBounds[3])     Local $hGfx = _GDIPlus_ImageGetGraphicsContext($hBmp)     _GDIPlus_GraphicsFillRect($hGfx, 0, 0, $aBounds[2], $aBounds[3], $hBrush_Alu)     _GDIPlus_GraphicsSetClipPath($hContext, $hPath)     Local $hImgAttrib = _GDIPlus_ImageAttributesCreate()     Local $tColorMatrix = _GDIPlus_ColorMatrixCreateScale(0.8, 0.9, 1.1)     _GDIPlus_ImageAttributesSetColorMatrix($hImgAttrib, 1, 1, DllStructGetPtr($tColorMatrix))     _GDIPlus_GraphicsDrawImageRectRect($hContext, $hBmp, 0, 0, $aBounds[2], $aBounds[3], $aBounds[0], $aBounds[1], $aBounds[2], $aBounds[3], $hImgAttrib)     _GDIPlus_ImageAttributesDispose($hImgAttrib)     _GDIPlus_GraphicsResetClip($hContext)     _GDIPlus_GraphicsDispose($hGfx)     _GDIPlus_BitmapDispose($hBmp)     $hBrush = _GDIPlus_PathBrushCreateFromPath($hPath_Clone)     _GDIPlus_PathBrushSetCenterPoint($hBrush, $aBounds[0] + $aBounds[2] * 0.5, $aBounds[1] + $aBounds[3] * 1.2)     _GDIPlus_PathBrushSetCenterColor($hBrush, 0)     _GDIPlus_PathBrushSetSurroundColor($hBrush, 0xFFFFFFFF)     _GDIPlus_PathBrushSetFocusScales($hBrush, 0.96, 0.96)     _GDIPlus_PathBrushSetSigmaBlend($hBrush, 1, 1)     _GDIPlus_GraphicsFillPath($hContext, $hPath_Clone, $hBrush)     _GDIPlus_BrushDispose($hBrush)     $hBrush = _GDIPlus_PathBrushCreateFromPath($hPath_Clone)     _GDIPlus_PathBrushSetCenterPoint($hBrush, $aBounds[0] + $aBounds[2] * 0.5, $aBounds[1] + $aBounds[3] * 0.1)     _GDIPlus_PathBrushSetCenterColor($hBrush, 0)     _GDIPlus_PathBrushSetSurroundColor($hBrush, 0xFF000000)     _GDIPlus_PathBrushSetFocusScales($hBrush, 0.96, 0.96)     _GDIPlus_GraphicsFillPath($hContext, $hPath_Clone, $hBrush)     _GDIPlus_BrushDispose($hBrush)     Local $aData = _GDIPlus_PathGetData($hPath)     Local $aPnt[6][2] = [[5]]     $aPnt[1][0] = $aData[1][0]     $aPnt[1][1] = $aData[1][1]     $aPnt[2][0] = $aData[2][0]     $aPnt[2][1] = $aData[2][1]     $aPnt[3][0] = $aData[3][0]     $aPnt[3][1] = $aData[3][1]     $aPnt[4][0] = $aData[3][0] + ($aData[11][0] - $aData[3][0]) * 0.2     $aPnt[4][1] = $aData[12][1]     $aPnt[5][0] = $aData[12][0]     $aPnt[5][1] = $aData[12][1]     _GDIPlus_PathReset($hPath_Clone)     _GDIPlus_PathAddPolygon($hPath_Clone, $aPnt)     $hBrush = _GDIPlus_PathBrushCreateFromPath($hPath_Clone)     _GDIPlus_PathBrushSetCenterPoint($hBrush, $aData[12][0] + ($aData[11][0] - $aData[12][0]) * 1.2, $aData[12][1])     _GDIPlus_PathBrushSetCenterColor($hBrush, 0)     _GDIPlus_PathBrushSetSurroundColor($hBrush, 0xFFFFFFFF)     _GDIPlus_PathBrushSetFocusScales($hBrush, 0.985, 0.91)     _GDIPlus_GraphicsFillPath($hContext, $hPath_Clone, $hBrush)     _GDIPlus_BrushDispose($hBrush)     _GDIPlus_PathDispose($hPath_Clone)     $aData[0][0] = 5     $aData[5][2] = 129     $hPath_Clone = _GDIPlus_PathCreate2($aData)     _GDIPlus_MatrixSetElements($hMatrix)     _GDIPlus_MatrixTranslate($hMatrix, -$aData[4][0], -$aData[2][1])     _GDIPlus_MatrixScale($hMatrix, 1.12, 1.12, True)     _GDIPlus_MatrixTranslate($hMatrix, $aData[4][0], $aData[2][1], True)     _GDIPlus_PathTransform($hPath_Clone, $hMatrix)     $hBrush = _GDIPlus_PathBrushCreateFromPath($hPath_Clone)     _GDIPlus_PathBrushSetCenterPoint($hBrush, $aData[4][0], $aData[2][1])     Local $aPBlend[4][2] = [[3]]     $aPBlend[1][0] = 0x00000000     $aPBlend[1][1] = 0     $aPBlend[2][0] = 0xAF000000     $aPBlend[2][1] = 0.1     $aPBlend[3][0] = 0     $aPBlend[3][1] = 1     _GDIPlus_PathBrushSetPresetBlend($hBrush, $aPBlend)     _GDIPlus_GraphicsSetClipPath($hContext, $hPath_Clone)     _GDIPlus_GraphicsFillPath($hContext, $hPath, $hBrush)     _GDIPlus_GraphicsResetClip($hContext)     _GDIPlus_BrushDispose($hBrush)     _GDIPlus_PathDispose($hPath_Clone)     _GDIPlus_MatrixDispose($hMatrix) EndFunc   ;==>_Draw_A Func _Draw_Outer($hContext, $hPath_O, $hPath_I, $hBrush_Alu)     Local $aBounds = _GDIPlus_PathGetWorldBounds($hPath_I)     Local $hPath = _GDIPlus_PathClone($hPath_O)     Local $hMatrix = _GDIPlus_MatrixCreate()     _GDIPlus_MatrixTranslate($hMatrix, $aBounds[2] * 0.05, $aBounds[3] * 0.05)     _GDIPlus_PathTransform($hPath, $hMatrix)     Local $hBrush = _GDIPlus_PathBrushCreateFromPath($hPath)     _GDIPlus_PathBrushSetCenterPoint($hBrush, $aBounds[0] + $aBounds[2] * 0.1, $aBounds[1] + $aBounds[2] * 0.1)     _GDIPlus_PathBrushSetCenterColor($hBrush, 0xFF000000)     _GDIPlus_PathBrushSetSurroundColor($hBrush, 0)     _GDIPlus_PathBrushSetFocusScales($hBrush, 0.84, 0.92)     _GDIPlus_GraphicsFillPath($hContext, $hPath, $hBrush)     _GDIPlus_BrushDispose($hBrush)     _GDIPlus_PathDispose($hPath)     $hPath = _GDIPlus_PathClone($hPath_O)     _GDIPlus_MatrixSetElements($hMatrix)     _GDIPlus_MatrixTranslate($hMatrix, -($aBounds[0] + $aBounds[2] * 0.7), -($aBounds[1] + $aBounds[3] * 0.9))     _GDIPlus_MatrixScale($hMatrix, 1.07, 1.06, True)     _GDIPlus_MatrixTranslate($hMatrix, $aBounds[0] + $aBounds[2] * 0.69, $aBounds[1] + $aBounds[3] * 0.895, True)     _GDIPlus_PathTransform($hPath, $hMatrix)     $hBrush = _GDIPlus_PathBrushCreateFromPath($hPath)     _GDIPlus_PathBrushSetCenterColor($hBrush, 0xFFFFFFFF)     _GDIPlus_PathBrushSetSurroundColor($hBrush, 0)     _GDIPlus_PathBrushSetSigmaBlend($hBrush, 1, 1)     _GDIPlus_PathBrushSetFocusScales($hBrush, 0.4, 0.3)     _GDIPlus_GraphicsFillPath($hContext, $hPath, $hBrush)     _GDIPlus_BrushDispose($hBrush)     _GDIPlus_PathDispose($hPath)     $hPath = _GDIPlus_PathClone($hPath_O)     _GDIPlus_PathAddPath($hPath, $hPath_I)     _GDIPlus_GraphicsSetClipPath($hContext, $hPath)     _GDIPlus_GraphicsFillPath($hContext, $hPath, $hBrush_Alu)     _GDIPlus_GraphicsResetClip($hContext)     _GDIPlus_PathDispose($hPath)     $hBrush = _GDIPlus_PathBrushCreateFromPath($hPath_O)     _GDIPlus_PathBrushSetCenterPoint($hBrush, $aBounds[0] + $aBounds[2] * 0.8, $aBounds[1] + $aBounds[3] * 0.8)     _GDIPlus_PathBrushSetCenterColor($hBrush, 0)     _GDIPlus_PathBrushSetFocusScales($hBrush, 0.98, 0.98)     _GDIPlus_GraphicsFillPath($hContext, $hPath_O, $hBrush)     _GDIPlus_PathBrushSetCenterPoint($hBrush, $aBounds[0] + $aBounds[2] * 0.2, $aBounds[1] + $aBounds[3] * 0.8)     _GDIPlus_GraphicsFillPath($hContext, $hPath_O, $hBrush)     _GDIPlus_PathBrushSetCenterPoint($hBrush, $aBounds[0] + $aBounds[2] * 0.4, $aBounds[1])     _GDIPlus_PathBrushSetSurroundColor($hBrush, 0xFF000000)     _GDIPlus_PathBrushSetFocusScales($hBrush, 0.98, 0.98)     _GDIPlus_GraphicsFillPath($hContext, $hPath_O, $hBrush)     _GDIPlus_BrushDispose($hBrush)     Local $hPath_Clone = _GDIPlus_PathClone($hPath_I)     _GDIPlus_MatrixSetElements($hMatrix)     _GDIPlus_MatrixTranslate($hMatrix, -($aBounds[0] + $aBounds[2] * 0.5), -($aBounds[1] + $aBounds[3] * 0.5))     _GDIPlus_MatrixScale($hMatrix, 1.02, 1.02, True)     _GDIPlus_MatrixTranslate($hMatrix, $aBounds[0] + $aBounds[2] * 0.5, $aBounds[1] + $aBounds[3] * 0.51, True)     _GDIPlus_PathTransform($hPath_Clone, $hMatrix)     $hBrush = _GDIPlus_PathBrushCreateFromPath($hPath_Clone)     _GDIPlus_PathBrushSetCenterColor($hBrush, 0xFFFFFFFF)     _GDIPlus_PathBrushSetSurroundColor($hBrush, 0)     _GDIPlus_PathBrushSetFocusScales($hBrush, 0.98, 0.98)     _GDIPlus_GraphicsFillPath($hContext, $hPath_Clone, $hBrush)     _GDIPlus_BrushDispose($hBrush)     _GDIPlus_PathDispose($hPath_Clone)     $hPath_Clone = _GDIPlus_PathClone($hPath_I)     _GDIPlus_MatrixSetElements($hMatrix)     _GDIPlus_MatrixTranslate($hMatrix, -($aBounds[0] + $aBounds[2] * 0.5), -($aBounds[1] + $aBounds[3] * 0.5))     _GDIPlus_MatrixScale($hMatrix, 1.02, 1.02, True)     _GDIPlus_MatrixTranslate($hMatrix, $aBounds[0] + $aBounds[2] * 0.5, $aBounds[1] + $aBounds[3] * 0.49, True)     _GDIPlus_PathTransform($hPath_Clone, $hMatrix)     $hBrush = _GDIPlus_PathBrushCreateFromPath($hPath_Clone)     _GDIPlus_PathBrushSetCenterColor($hBrush, 0xFF000000)     _GDIPlus_PathBrushSetSurroundColor($hBrush, 0)     _GDIPlus_PathBrushSetFocusScales($hBrush, 0.96, 0.96)     _GDIPlus_GraphicsFillPath($hContext, $hPath_Clone, $hBrush)     _GDIPlus_BrushDispose($hBrush)     _GDIPlus_PathDispose($hPath_Clone)     Local $hPen = _GDIPlus_PenCreate(0xFF000000, 2)     _GDIPlus_GraphicsDrawPath($hContext, $hPath_I, $hPen)     _GDIPlus_GraphicsDrawPath($hContext, $hPath_O, $hPen)     _GDIPlus_PenDispose($hPen)     _GDIPlus_MatrixDispose($hMatrix)     _GDIPlus_GraphicsResetClip($hContext) EndFunc   ;==>_Draw_Outer Func _Draw_Light($hContext, $hPath_O, $hPath_I, $hPath_A)     Local $hPath = _GDIPlus_PathClone($hPath_O)     _GDIPlus_PathAddPath($hPath, $hPath_I)     _GDIPlus_PathAddPath($hPath, $hPath_A)     Local $aBounds = _GDIPlus_PathGetWorldBounds($hPath)     Local $hBrush = _GDIPlus_LineBrushCreate($aBounds[0] + $aBounds[2], $aBounds[1], $aBounds[0] + $aBounds[2] * 0.8, $aBounds[1] + $aBounds[3], 0, 0xDDFFFFFF, 3)     _GDIPlus_PathBrushSetSigmaBlend($hBrush, 1)     Local $aBlend[8][2] = [[7]]     $aBlend[1][0] = 0.4     $aBlend[1][1] = 0     $aBlend[2][0] = 0.8     $aBlend[2][1] = 0.1     $aBlend[3][0] = 0.3     $aBlend[3][1] = 0.3     $aBlend[4][0] = 0.7     $aBlend[4][1] = 0.4     $aBlend[5][0] = 0.3     $aBlend[5][1] = 0.7     $aBlend[6][0] = 0     $aBlend[6][1] = 0.8     $aBlend[7][0] = 0.2     $aBlend[7][1] = 1     _GDIPlus_LineBrushSetBlend($hBrush, $aBlend)     _GDIPlus_GraphicsFillPath($hContext, $hPath, $hBrush)     _GDIPlus_BrushDispose($hBrush)     _GDIPlus_PathDispose($hPath) EndFunc   ;==>_Draw_Light Func _Draw_3($hContext, $hPath, $hBrush_Alu)     Local $aBounds = _GDIPlus_PathGetWorldBounds($hPath)     Local $hBmp = _GDIPlus_BitmapCreateFromScan0($aBounds[2] + 1, $aBounds[3] + 1)     Local $hGfx = _GDIPlus_ImageGetGraphicsContext($hBmp)     _GDIPlus_GraphicsFillRect($hGfx, 0, 0, $aBounds[2] + 1, $aBounds[3] + 1, $hBrush_Alu)     Local $tColorMatrix = _GDIPlus_ColorMatrixCreateScale(1.3, 1.4, 2)     Local $hImgAttrib = _GDIPlus_ImageAttributesCreate()     _GDIPlus_ImageAttributesSetColorMatrix($hImgAttrib, 1, 1, DllStructGetPtr($tColorMatrix))     _GDIPlus_GraphicsSetClipPath($hContext, $hPath)     _GDIPlus_GraphicsDrawImageRectRect($hContext, $hBmp, 0, 0, $aBounds[2], $aBounds[3], $aBounds[0], $aBounds[1], $aBounds[2], $aBounds[3], $hImgAttrib)     _GDIPlus_GraphicsResetClip($hContext)     _GDIPlus_GraphicsDispose($hGfx)     _GDIPlus_BitmapDispose($hBmp)     _GDIPlus_ImageAttributesDispose($hImgAttrib)     Local $aBounds = _GDIPlus_PathGetWorldBounds($hPath)     Local $hBrush = _GDIPlus_PathBrushCreateFromPath($hPath)     _GDIPlus_PathBrushSetCenterPoint($hBrush, $aBounds[0] + $aBounds[2] * 0.22, $aBounds[1] + $aBounds[3] * 0.5)     _GDIPlus_PathBrushSetCenterColor($hBrush, 0x5FFFFFFF)     _GDIPlus_PathBrushSetSurroundColor($hBrush, 0xFF6080FF)     _GDIPlus_PathBrushSetFocusScales($hBrush, 0.8, 0.4)     _GDIPlus_PathBrushSetSigmaBlend($hBrush, 1)     Local $aPBlend[5][2] = [[4]]     $aPBlend[1][0] = 0xFF8090FF     $aPBlend[1][1] = 0     $aPBlend[2][0] = 0x208090FF     $aPBlend[2][1] = 0.2     $aPBlend[3][0] = 0x00000000     $aPBlend[3][1] = 0.25     $aPBlend[4][0] = 0xFFFFFFFF     $aPBlend[4][1] = 1     _GDIPlus_PathBrushSetPresetBlend($hBrush, $aPBlend)     _GDIPlus_GraphicsFillPath($hContext, $hPath, $hBrush)     _GDIPlus_BrushDispose($hBrush) EndFunc   ;==>_Draw_3 Func _Draw_BG($hContext, $iWidth, $iHeight, $iColor1, $iColor2)     _GDIPlus_GraphicsClear($hContext, $iColor1)     Local $hPath = _GDIPlus_PathCreate()     _GDIPlus_PathAddEllipse($hPath, 0, 0, $iWidth, $iHeight)     Local $hBrush = _GDIPlus_PathBrushCreateFromPath($hPath)     _GDIPlus_PathBrushSetCenterColor($hBrush, $iColor2)     _GDIPlus_PathBrushSetSurroundColor($hBrush, $iColor1)     _GDIPlus_PathBrushSetSigmaBlend($hBrush, 1)     _GDIPlus_GraphicsFillRect($hContext, 0, 0, $iWidth, $iHeight, $hBrush)     _GDIPlus_BrushDispose($hBrush)     _GDIPlus_PathDispose($hPath) EndFunc   ;==>_Draw_BG Func _CreateAutoItLogo($iWidth, $iHeight)     Global $aLogo[79][3] = [[78, 0, 0],[192.180, 15.750, 0],[226.790, 15.730, 3],[259.230, 24.910, 3],[287.250, 40.920, 3],[294.600, 17.470, 3],[316.500, 0.470, 3],[342.350, 0.470, 3],[374.280, 0.470, 3],[400.130, 26.320, 3], _             [400.130, 58.250, 3],[400.130, 84.250, 3],[382.940, 106.240, 3],[359.350, 113.490, 3],[374.980, 141.270, 3],[383.930, 173.290, 3],[383.930, 207.430, 3],[383.930, 313.340, 3],[298.080, 399.190, 3],[192.180, 399.190, 3], _             [86.320, 399.190, 3],[0.470, 313.340, 3],[0.470, 207.430, 3],[0.470, 101.570, 3],[86.320, 15.730, 3],[192.180, 15.750, 131],[192.180, 359.650, 0],[275.760, 359.210, 3],[343.950, 291.020, 3],[343.950, 207.430, 3], _             [343.950, 123.850, 3],[275.760, 55.710, 3],[192.180, 55.710, 3],[108.590, 55.710, 3],[40.450, 123.850, 3],[40.450, 207.430, 3],[40.450, 291.020, 3],[108.590, 359.210, 3],[192.180, 359.650, 131],[142.450, 263.800, 0], _             [170.520, 225.280, 1],[234.980, 225.280, 1],[192.790, 164.960, 1],[122.250, 263.470, 1],[67.250, 263.470, 1],[163.590, 129.220, 1],[179.650, 107.080, 3],[207.390, 106.380, 3],[223.300, 129.220, 3],[317.200, 263.470, 1], _             [142.450, 263.800, 1],[355.481, 44.846, 0],[362.130, 44.845, 3],[361.952, 52.088, 3],[355.481, 52.088, 3],[325.026, 52.089, 1],[333.159, 63.310, 1],[355.719, 63.310, 1],[361.715, 63.427, 3],[361.595, 70.254, 3], _             [355.719, 70.254, 3],[313.153, 70.256, 1],[323.245, 83.970, 1],[355.006, 83.970, 1],[366.167, 83.908, 3],[371.688, 80.524, 3],[374.122, 74.588, 3],[376.674, 68.354, 3],[374.359, 61.052, 3],[368.066, 58.381, 3], _             [378.040, 54.937, 3],[376.437, 43.954, 3],[375.072, 40.511, 3],[372.223, 33.447, 3],[364.208, 31.250, 3],[355.362, 31.250, 3],[310.660, 31.252, 1],[320.692, 44.846, 1],[355.481, 44.846, 129]]     Local $hPath_Logo = _GDIPlus_PathCreate2($aLogo)     Local $hIter = _GDIPlus_PathIterCreate($hPath_Logo)     Local $iIterCnt = _GDIPlus_PathIterGetSubpathCount($hIter)     Local $aPath_Logo[$iIterCnt + 1] = [$iIterCnt]     For $i = 1 To $iIterCnt         $aPath_Logo[$i] = _GDIPlus_PathCreate()         _GDIPlus_PathIterNextSubpathPath($hIter, $aPath_Logo[$i])     Next     _GDIPlus_PathIterDispose($hIter)     Local $aBounds = _GDIPlus_PathGetWorldBounds($aPath_Logo[2])     Local $fScale = ($iHeight * 0.5) / $aBounds[3]     Local $hMatrix = _GDIPlus_MatrixCreate()     _GDIPlus_MatrixTranslate($hMatrix, -($aBounds[0] + $aBounds[2] * 0.5), -($aBounds[1] + $aBounds[3] * 0.5))     _GDIPlus_MatrixScale($hMatrix, $fScale, $fScale, True)     _GDIPlus_MatrixTranslate($hMatrix, $iWidth * 0.5, $iHeight * 0.5, True)     For $i = 1 To $aPath_Logo[0]         _GDIPlus_PathTransform($aPath_Logo[$i], $hMatrix)     Next     _GDIPlus_MatrixDispose($hMatrix)     Local $hBrush_Alu = _CreateAluTexture(400, 400)     Local $hBitmap = _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight)     Local $hContext = _GDIPlus_ImageGetGraphicsContext($hBitmap)     _GDIPlus_GraphicsSetSmoothingMode($hContext, 2)     _Draw_BG($hContext, $iWidth, $iHeight, 0xFF1E375A, 0xFF325A88)     _Draw_Outer($hContext, $aPath_Logo[1], $aPath_Logo[2], $hBrush_Alu)     _Draw_Inner($hContext, $aPath_Logo[2])     _Draw_A($hContext, $aPath_Logo[3], $hBrush_Alu)     _Draw_3($hContext, $aPath_Logo[4], $hBrush_Alu)     _Draw_Light($hContext, $aPath_Logo[1], $aPath_Logo[2], $aPath_Logo[3])     _GDIPlus_BrushDispose($hBrush_Alu)     _GDIPlus_PathDispose($hPath_Logo)     For $i = 1 To $aPath_Logo[0]         _GDIPlus_PathDispose($aPath_Logo[$i])     Next     _GDIPlus_GraphicsDispose($hContext)     Return $hBitmap EndFunc   ;==>_CreateAutoItLogo Func _CreateAluTexture($iW, $iH, $iBlurDist = 14, $fBlurTrans = 0.6)     $iBlurDist = Ceiling($iBlurDist)     $iBlurDist += 1 - Mod($iBlurDist, 2)     Local $iOverSize = 0     For $i = 1 To $iBlurDist Step 2         $iOverSize += $i + $i + 1     Next     Local $iWO = $iW + $iOverSize     Local $iNoiseSize = 40     Local $hBmp_Noise = _GDIPlus_BitmapCreateFromScan0($iNoiseSize, $iNoiseSize)     Local $hGfx_Noise = _GDIPlus_ImageGetGraphicsContext($hBmp_Noise)     Local $tData = _GDIPlus_BitmapLockBits($hBmp_Noise, 0, 0, $iNoiseSize, $iNoiseSize, BitOR($GDIP_ILMREAD, $GDIP_ILMWRITE), $GDIP_PXF32ARGB)     Local $iStride = DllStructGetData($tData, "Stride")     Local $iWidth = DllStructGetData($tData, "Width")     Local $iHeight = DllStructGetData($tData, "Height")     Local $pScan0 = DllStructGetData($tData, "Scan0")     Local $tPixel = DllStructCreate("dword[" & $iWidth * $iHeight & "];", $pScan0)     Local $iAmp     For $row = 0 To $iHeight - 1         For $col = 0 To $iWidth - 1             $iAmp = Random(0x4F, 0xFF, 1)             DllStructSetData($tPixel, 1, BitOR(0xFF000000, BitShift($iAmp, -16), BitShift($iAmp, -8), $iAmp), $row * $iWidth + $col + 1)         Next     Next     _GDIPlus_BitmapUnlockBits($hBmp_Noise, $tData)     Local $hBmp_Full = _GDIPlus_BitmapCreateFromScan0($iWO, $iH)     Local $hGfx_Full = _GDIPlus_ImageGetGraphicsContext($hBmp_Full)     _GDIPlus_GraphicsSetSmoothingMode($hGfx_Full, 2)     _GDIPlus_GraphicsSetInterpolationMode($hGfx_Full, 7)     Local $iXOff, $iYOff, $iSizeX, $iSizeY     For $y = 0 To $iH Step $iNoiseSize / 2         For $x = 0 To $iWO Step $iNoiseSize / 2             $iXOff = Random(0, $iNoiseSize / 2, 1)             $iYOff = Random(0, $iNoiseSize / 2, 1)             $iSizeX = $iNoiseSize - $iXOff             $iSizeY = $iNoiseSize - $iYOff             _GDIPlus_GraphicsDrawImageRectRect($hGfx_Full, $hBmp_Noise, $iXOff, $iYOff, $iSizeX, $iSizeY, $x, $y, $iSizeX, $iSizeY)         Next     Next     _GDIPlus_GraphicsDispose($hGfx_Noise)     _GDIPlus_BitmapDispose($hBmp_Noise)     Local $hBmp_Full2 = _GDIPlus_BitmapCreateFromScan0($iWO, $iH)     Local $hGfx_Full2 = _GDIPlus_ImageGetGraphicsContext($hBmp_Full2)     _GDIPlus_GraphicsSetSmoothingMode($hGfx_Full2, 2)     _GDIPlus_GraphicsSetInterpolationMode($hGfx_Full2, 7)     Local $tColorMatrix = _GDIPlus_ColorMatrixCreateScale(1, 1, 1, $fBlurTrans)     Local $hImgAttrib = _GDIPlus_ImageAttributesCreate()     _GDIPlus_ImageAttributesSetColorMatrix($hImgAttrib, 1, 1, DllStructGetPtr($tColorMatrix), 0, 0)     For $i = 1 To $iBlurDist Step 2         _GDIPlus_GraphicsDrawImageRectRect($hGfx_Full2, $hBmp_Full, 0, 0, $iWO, $iH, $i, 0, $iWO, $iH, $hImgAttrib)         _GDIPlus_GraphicsDrawImageRectRect($hGfx_Full, $hBmp_Full2, 0, 0, $iWO, $iH, $i + 1, 0, $iWO, $iH, $hImgAttrib)     Next     _GDIPlus_ImageAttributesDispose($hImgAttrib)     _GDIPlus_GraphicsDispose($hGfx_Full2)     _GDIPlus_BitmapDispose($hBmp_Full2)     _GDIPlus_GraphicsDispose($hGfx_Full)     Local $hTXT_Alu = _GDIPlus_TextureCreate2($hBmp_Full, $iOverSize, 0, $iW, $iH, 3)     _GDIPlus_BitmapDispose($hBmp_Full)     Return $hTXT_Alu EndFunc   ;==>_CreateAluTexture

enjoy
E

 


  • mLipok, BinaryBrother, UEZ and 7 others like this


#970643 how can i get program make from autoit and open edit the code?

Posted by thenextstep on 13 March 2012 - 01:34 PM

fuck you if i see you i will fuck you fuck off WTF
  • Manadar, Paulie, James and 6 others like this


#749748 Active Directory UDF

Posted by water on 01 December 2009 - 08:30 AM

I have converted and extended the adfunctions.au3 written by Jonathan Clelland to a full AutoIt UDF including help file, examples, ScITE integration etc.
The example scripts should run fine without changes.

2014-02-17: Version: 1.4.1.0 (bug fixes)
As always: Please test before using in production!
Needs to be run with AutoIt 3.3.10.2 or later!
 
KNOWN BUGS: (Last changed: 2014-03-12)

  • Functions _AD_HasxxxxRights always return the wrong result. Workaround is to change all occurrences of line
    _AD_HasRequiredRights($sObject, $ADS_xxxx, $sUser = @UserName)
    to
    _AD_HasRequiredRights($sObject, $ADS_xxxx, $sUser)
    Thanks to user denisaurus for pointing me to this bug!
     
  • Funktion _AD_IsMemberOf doesn't check the PrimaryGroup for nested groups when $bIncludePrimaryGroup = True and $bRecursive = True. Replace
    If _AD_IsMemberOf($oMember.distinguishedName, $sObject, False, True, $iDepth - 1) Then Return 1
    with
    If _AD_IsMemberOf($oMember.distinguishedName, $sObject, $bIncludePrimaryGroup, True, $iDepth - 1) Then Return 1
    Thanks to user Mahagon from the german forum for pointing me to this bug!

Spoiler

 

Attached File  AD 1.4.1.0.zip   297.12KB   1042 downloads For AutoIt >= 3.3.10.2
Attached File  AD 1.4.0.0.zip   296.84KB   1158 downloads For AutoIt <= 3.3.8.1
Attached File  History.txt   51.95KB   177 downloads


  • UEZ, crumpuppet, JoseArmendariz and 6 others like this


#1163644 Announcement

Posted by trancexx on 01 April 2014 - 08:49 PM

I've just received confirmation mail from the site owner about a proposal I made to him few weeks ago. I'll be very short now because I have plenty of work to do to put things in place.
So, the short version is that I'm new site owner. This includes AutoIt licence in full. As far as this site is concerned there will be some changes, mostly in team members. I think also that MVP section of the forum will be opened for reading for all members and status of some blue members will be revised. Trolls will be remlved from the board.
For the most important part of this change (language development) I'm happy to say that development will continue, only now in full speed and strength.

I will open new parts of the source, and completely the sources of most of AutoIt tools. I already have a team of developers working actively since Jon gave green light few days ago. I will also contact few more people tomorrow to include them in the new dev team, so do read your mails.

Expect plenty of changes, and wish me/us luck. God speed.

(I will move this to announcements section of the forum as soon as I get administrator credentials)
  • czardas, wakillon, KaFu and 6 others like this


#1087294 Autoit SysInfo Clock v0.9.9.6 build 2013-07-11 beta

Posted by UEZ on 14 June 2013 - 09:46 PM

SysInfo Clock is a small tool in widget style to show the clock, current CPU usage, CPU speed, memory usage and network activity (tcp, ip and udp). Additionally you can use it as an alarm clock. To stop alarm clock tone press the left LED (mail) or wait 60 seconds.
 
The current CPU usage code is beta and might be not working for some CPUs!

Main window:
SysInfo Clock wm 8bit.png
Move mouse to area below seconds and press rmb to select different color scheme.

Alarm Clock window:
SysInfo Clock alarm menu wm.jpg

Tray menu:
SysInfo Clock tray menu wm.jpg


 
Credits: see scroller (select About).
 
Special thanks to trancexx for helping me to read out current CPU speed using the WinAPI stuff, AndyG for troubleshooting performance counter issue, czardas for composing "Für Elise" and Ascend4nt for the support!   :huggles:
 
 
Download source code: Attached File  Autoit SysInfo Clock v0.9.9.6 build 2013-07-11 beta.7z   1.25MB   363 downloads (previous downloads: 883)
(Please don't use any download manager!)
 
Coded on Win7 x64 using Aero and AutoIt v3.3.8.1.
 
 
Br,
UEZ
 
History:
v0.9.5.0 build 2013-06-14: initial release
v0.9.6.0 build 2013-06-15: added _WinAPI_CreateRoundRectRgn() to fix transparency issue on non Aero desktops, small internal modifications and added check for whether performance counters are enabled
v0.9.6.5 build 2013-06-15: fixed a bug when "Reset Windows Position" was selected twice and color of scroller will fit to clock color schema
v0.9.8.0 build 2013-06-20: added little music to About part -> many thanks to czardas for mus++ and arranging "Für Elise", added date to clock, replaced CPU usage code -> thanks Ascend4nt
v0.9.9.0 build 2013-06-21: added 2 more color schemas (mint and purple), added network traffic LED, compiled exe now included in archive
v0.9.9.0 build 2013-06-22: forgot to increase a variable in ini section
v0.9.9.0 build 2013-06-24: found also missing modification in context menue after adding two more color schemas
v0.9.9.0 build 2013-06-26: Ops, forgot to change also radio item proper check in clock color schema sub menu
v0.9.9.1 build 2013-06-27: added option to select whether SysInfo Clock should start at windows startup
v0.9.9.2 build 2013-07-01: added yellow-red mark to the small info indicators and additional info when hovering about the small indicators, small internal changes
v0.9.9.5 build 2013-07-05: added features: singleton, update check, visit web site, bring GUI to front and fixed some smaller bugs + some internal changes
v0.9.9.6 build 2013-07-11: added alarm clock feature

  • czardas, GerrOrneq, trancexx and 6 others like this


#1014874 Update the Excel UDF that comes with AutoIt

Posted by water on 08 September 2012 - 05:35 PM

New versions of Microsoft Office have been released since the last changes were made to the Excel UDF. The new extensions (e.g. xlsx) are not (fully) supported, new functions are missing etc.
 
The rewrite of the Excel UDF delivers changes in the following areas:

  • Works with as many instances of Excel as you like - not just one
  • Works with any Workbook - not just the active one
  • Works with any Worksheet - not just the active one
  • Only does what you tell it to do - no implicit "actions"
  • Only one function to read from a cell or a range
  • Only one function to write a string, an 1D or 2D array to a cell or a range
  • Support for every file format Excel supports
  • Speed enhancements when transferring data from/to an Excel sheet (20 - 100 times faster)

2014-03-22 - Beta 5
 
Known bugs

  • None

Spoiler

 

The example scripts have been tested with Excel 2010 and AutoIt 3.3.10.2 on Windows 7.
You need to run the scripts with the latest AutoIt production version (3.3.10.x)!
 
Please test with Excel 2003 and Excel 2007 and post changes you need/want to see in the next beta version!
 
Attached File  Excel Rewrite Beta 5.zip   530.79KB   284 downloads

Attached File  History.txt   14.84KB   68 downloads


  • adolfito121, dmob, jaberwacky and 6 others like this


#1118784 Pic2Vector 1.0.1.1 Convert bitmap to vector graphics

Posted by wakillon on 24 September 2013 - 05:05 PM

May be some of you know the shareware VectorMagic who permit to easily convert bitmap Images to clean Vector Art !

 

Pic2Vector 1.0.1.1 is free, and can give similar effects ! 

 

20130921113341.jpg

 

 

I was  interested by some effects added to a photo.

I'm not using gdi for the vectorization, but 2 command line tools :

 

Autotrace 0.27 with ILDA file support for converting bitmap to vector graphics

Custom Version at : http://www.raycomposer.de/en/ressources/autotrace/

More general infos : http://autotrace.sourceforge.net/

 

GPL Ghostscript 9.07

use here for converting vector graphics to Jpeg.

More infos : http://www.ghostscript.com/doc/9.07/Use.htm#

 

 

example 1

 

Spoiler

 

example 2

 

Spoiler

 

example 3

 

Spoiler

 

Free to you to play with settings for see changes.(Infos with tooltip added to each type of setting)

 

Some external files (command line tools and their files) are downloaded at first execution, (because of their size i can't include them in script ~10MB),

and so in compiled version use right click, execute as Admin.

 

Click on vectorized Pic for display it in fullscreen with Windows picture Viewer.

You can save result to jpg, png, bmp or gif format.

 

source  : Attached File  Pic2Vector 1.0.1.1.au3   81.86KB   344 downloads

 

executable : Attached File  Pic2Vector.exe.html   149bytes   199 downloads

 

(Once this html file downloaded, double click on it for start the download)

 

 

Hope you like it !  ;)


  • mLipok, UEZ, Andreik and 5 others like this


#1107265 AutoIt v3.3.9.17 Beta

Posted by Jon on 15 August 2013 - 09:58 AM

File Name: AutoIt v3.3.9.17 Beta

File Submitter: Jon

File Submitted: 15 Aug 2013

File Category: Beta


3.3.9.17 (15th August, 2013) (Beta)
AutoIt:
- Added: StringReverse() - a UTF16 compatible string reversal function.
- Added: FileReadToArray() - native version of _FileReadToArray().

- Changed: Some misc internal rewrites in array assignment mean that some large internal array assignments (StringRegExp() for example) may be slightly quicker. Maybe.

- Fixed #2366: For loop not working as expected.

UDFs:

Others:
- Added: Sublime Text AutoIt.tmLanguage file to the editors folder. This contains a list of up to date functions.

- Fixed: StringRegExpGUI missing from the help file index menu.



Plus, lots of helpfile changes.


Click here to download this file


  • James, Digisoul, funkey and 5 others like this


#1099132 Simple 3D Graphics with GDI+

Posted by Starg on 25 July 2013 - 04:46 PM

S3d.au3
 
This UDF enables you to draw simple 3D graphics.
 
Features:
  • Simple and easy to use
  • Doesn't require external libraries. You don't need OpenGL or DirectX.
S3d_ex3.jpg S3d_ex8.jpg
S3d_ex4.jpg S3d_ex5.jpg
 
Available Functions:
AutoIt         
_S3d_SelectGraphic($hGraphic, $iWidth, $iHeight, $iSmooth = 2) _S3d_SelectPen($hPen) _S3d_SelectBrush($hBrush) _S3d_SelectFont($hFont) _S3d_SelectFormat($hFormat) _S3d_Dist($nPos1X = 0, $nPos1Y = 0, $nPos1Z = 0, $nPos2X = 0, $nPos2Y = 0, $nPos2Z = 0) _S3d_DistFromCamera($nPosX = 0, $nPosY = 0, $nPosZ = 0) _S3d_SetCamera($nCameraX, $nCameraY, $nCameraZ, $nTargetX, $nTargetY, $nTargetZ, $nVAngle = 0, $nFAngle = 0.8, $nFScale = 1000) _S3d_SetCameraEx($nCameraX, $nCameraY, $nCameraZ, $nXYAngle = 0, $nXZAngle = 0, $nVAngle = 0, $nFAngle = 0.8, $nFScale = 1000) _S3d_SetLocalMatrix($n00 = 1, $n01 = 0, $n02 = 0, $n03 = 0, $n10 = 0, $n11 = 1, $n12 = 0, $n13 = 0, $n20 = 0, $n21 = 0, $n22 = 1, $n23 = 0, $n30 = 0, $n31 = 0, $n32 = 0, $n33 = 1) _S3d_MultiplyLocalMatrix($n00 = 1, $n01 = 0, $n02 = 0, $n03 = 0, $n10 = 0, $n11 = 1, $n12 = 0, $n13 = 0, $n20 = 0, $n21 = 0, $n22 = 1, $n23 = 0, $n30 = 0, $n31 = 0, $n32 = 0, $n33 = 1, $fRefresh = True) _S3d_LocalTranslate($nX, $nY, $nZ, $fRefresh = True) _S3d_LocalScale($nX, $nY, $nZ, $fRefresh = True) _S3d_LocalRotateX($nAngle, $fDeg = False, $fRefresh = True) _S3d_LocalRotateY($nAngle, $fDeg = False, $fRefresh = True) _S3d_LocalRotateZ($nAngle, $fDeg = False, $fRefresh = True) _S3d_GetLocalMatrix() _S3d_SetLocalMatrixEx(ByRef $aMatrix) _S3d_GetPos($nX, $nY, $nZ) _S3d_InitCurrentPos() _S3d_MoveTo($nX, $nY, $nZ = Default) _S3d_Clear($nColor = 0xFF000000) _S3d_Line($nX1, $nY1, $nZ1, $nX2, $nY2, $nZ2) _S3d_LineTo($nX, $nY, $nZ) _S3d_Box($nX1, $nY1, $nZ1, $nX2, $nY2, $nZ2) _S3d_Arrow($nX1, $nY1, $nZ1, $nX2, $nY2, $nZ2, $nLen = 30, $nAngle = 0.6) _S3d_Circle($nX, $nY, $nZ, $nRad, $fFill = False) _S3d_Polygon($aPoints, $fFill = False) _S3d_RegPolygon($nX, $nY, $nZ, $nRad, $iNum, $fFill = True) _S3d_Star($nX, $nY, $nZ, $nRad1, $nRad2, $iNum, $fFill = True) _S3d_Square($nX1, $nY1, $nZ1, $nX2, $nY2, $nZ2, $nX3, $nY3, $nZ3, $nX4, $nY4, $nZ4, $fFill = True) _S3d_MoveTo2($nXL, $nYL, $nZL, $nXR, $nYR, $nZR) _S3d_RibbonTo($nXL, $nYL, $nZL, $nXR, $nYR, $nZR) _S3d_String($sString, $nX, $nY, $nZ)
New version!
Attached File  S3d.zip   32.62KB   352 downloads
v1.3.0 (05/SEP/2013)

* Old version is still available.
Attached File  S3d.zip   29.4KB   183 downloads
v1.2.3 (16/AUG/2013)

Enjoy!
  • mLipok, UEZ, jaberwacky and 5 others like this


#1088957 super easy noob question *pls* help

Posted by JohnQSmith on 21 June 2013 - 05:39 PM

Whenever someone says "pls" because it's shorter than "please", I say "no" because it's shorter than "yes".


  • water, mLipok, Realm and 5 others like this