Celeri Posted October 25, 2005 Share Posted October 25, 2005 (edited) ### EDIT: November 7, 2005 ###Mostly works But it's a bit slow and there might be a problem with the expression "(Not IsBinaryString($s_Source))". So rem it out (if needed) while I streamline both To and From functions.### EDIT: November 4, 2005 ###Whoohoo! Beta 86 now handles binary strings ... sorta. I'll have both functions working by the end of this week-end promised P.S.: If anyone has any idea how I could speed this up, it would be great. Some magic math trick perhaps?### EDIT: October 28, 2005 ###Confirmed: _ToBase64() will not work on binary files until such time as AutoIT3 is capable of handling binary strings *properly*. For now I would need to convert everything to hex and this function would take a serious performance hit (can you say S-L-O-W ?). I might do it for the kick of it but don't expect anything until next week.BTW, since _FromBase64() does not handle binary input, it should work fine.### EDIT: October 25, 2005 ###Updated both _ToBase64() and _FromBase64()Respectively, version 1.05 and 1.06- Can now set line length by calling _ToBase64($Source,$LineLength).- Default line length = 76 (as per RFC 3548). Different lengths might be less compatible- New error value for _ToBase64() : @error = 4 - Line size invalid- _ToBase64() is now completely loop-based. - More comments to help people understand how this works- Dumb error: now strips before doing a regular expression search in _FromBase64()I'm working on an email UDF and I want to integrate attachments. Since the only Base64 solutions I found were external, I decided to roll my own UDF instead. It was actually quite a bit harder than I taught and it took me way too much time to do but now I am satisfied with the results.So here's my two latest babies, _ToBase64() and _FromBase64(). Mind you I haven't tested them completely yet so please come back to me if anything doesn't work.I'm also open to your suggestions if you find that something should be added/modified. Although I really can't see what could be.Attachements at the end of the file, with documentation and example.expandcollapse popup;=============================================================================== ; ; Function Name: _ToBase64($s_Source, [$i_LineSize]) ; Version: 1.05 ; Description: Create a base 64 string ; Parameter(s): $s_Source - Source string ; $i_LineSize - Number of characters before a @CRLF ; Requirement(s): Requires AutoIT 3.1.1.77 minimum ; Return Value(s): On Success - Returns converted string ; On Failure - Returns "" and sets the @error flag in the following fashion: ; @error = 1 - Source string empty ; @error = 2 - Invalid source type (not string) ; @error = 3 - Wrong version of AutoIT, 3.1.1.77 minimum ; @error = 4 - Line size invalid ; Remarks: RFC 3548 requires a line size of 76 characters (default). ; Using different line sizes may not be compatible with certain mail readers. ; Related: _FromBase64() ; Author(s): Louis Horvath (celeri@videotron.ca) ; ;=============================================================================== Func _ToBase64($s_Source, $i_LineSize = 76) Local $a_Base64[65], $i_Loop1, $i_Loop2, $a_Mask6[4], $a_Shift6[4], $a_Shift8[4] Local $i_SourceLen, $i_Pad, $s_SrcChr, $i_Convert, $i_Assembly, $s_Result Local $i_LineSizeCounter ; Sanity checks If $s_Source = "" Then SetError(1); Source string empty Return EndIf If Not IsString($s_Source) Then SetError(2); Invalid source type (not string) Return EndIf If Not StringLen(Chr(0)) Then SetError(3); Cannot detect character "0" then wrong version of AutoIT ... Return EndIf If (Not IsInt($i_LineSize)) Or $i_LineSize < 2 Or $i_LineSize > 250 Then SetError(4); Line Size is invalid Return; Actual size suggested by RFC 3548: 76. 64 tolerated. EndIf ; Create Base64 matrix For $i_Loop1 = 65 To 90; Capital letters $a_Base64[$i_Loop1 - 65] = Chr($i_Loop1) Next For $i_Loop1 = 97 To 122; Small caps $a_Base64[$i_Loop1 - 71] = Chr($i_Loop1) Next For $i_Loop1 = 48 To 57; Numbers $a_Base64[$i_Loop1 + 4] = Chr($i_Loop1) Next $a_Base64[62] = '+' $a_Base64[63] = '/' $a_Base64[64] = '='; Padding ; Create 6-bit Mask $a_Mask6[0] = 0xFC0000 $a_Mask6[1] = 0x3F000 $a_Mask6[2] = 0xFC0 $a_Mask6[3] = 0x3F ; Create 6-bit shifting table $a_Shift6[0] = 18 $a_Shift6[1] = 12 $a_Shift6[2] = 6 $a_Shift6[3] = 0 ; Create 8-bit shifting table $a_Shift8[0] = -16 $a_Shift8[1] = -8 $a_Shift8[2] = 0 $i_SourceLen = StringLen($s_Source); Length of input string For $i_Loop1 = 1 To $i_SourceLen Step 3 ; Start by assembling a 3-byte integer (24 bits) $i_Assembly = ""; Flush beforehand For $i_Loop2 = 0 To 2; go though all 3 bytes If $i_Loop1 + $i_Loop2 > $i_SourceLen Then $i_Pad = $i_Loop2; Stop if end of string is reached, take note where it happens ExitLoop EndIf $s_SrcChr = StringMid($s_Source, $i_Loop1 + $i_Loop2, 1); Get original character from source $i_Convert = BitShift(Asc($s_SrcChr), $a_Shift8[$i_Loop2]); Shift it! $i_Assembly += $i_Convert; Set as first value Next ; Now set Base64 values! For $i_Loop2 = 0 To 3; Set Base64 values If $i_Loop2 = 2 And $i_Pad = 1 Then; Special case #1 $s_Result &= $a_Base64[64]; Insert padding ContinueLoop ElseIf $i_Loop2 = 3 And $i_Pad > 0 Then; Special case #2 $s_Result &= $a_Base64[64]; Insert padding ContinueLoop EndIf $i_Convert = BitShift(BitAND($i_Assembly, $a_Mask6[$i_Loop2]), $a_Shift6[$i_Loop2]); Extract first value, shift it to size $s_Result &= $a_Base64[$i_Convert] $i_LineSizeCounter += 1; Increment counter If $i_LineSizeCounter = $i_LineSize Then; Time to change lines $s_Result &= @CR; Add CR $i_LineSizeCounter = 0; Reset counter EndIf Next Next If $i_LineSizeCounter Then; One for the road (don't if the counter just reset) $s_Result &= @CR; Add CR EndIf Return $s_Result EndFunc ;==>_ToBase64expandcollapse popup;=============================================================================== ; ; Function Name: _FromBase64($s_Source) ; Version: 1.06 ; Description: Restores a string encoded in base 64 ; Parameter(s): $s_Source - Source string ; Requirement(s): Requires AutoIT 3.1.1.77 minimum ; Return Value(s): On Success - Returns restored string ; On Failure - Returns "" and sets the @error flag in the following fashion: ; @error = 1 - Source string empty ; @error = 2 - Invalid source type (not string) ; @error = 3 - Not a Base64 source ; @error = 4 - Wrong version of AutoIT, 3.1.1.77 minimum ; Remarks: None ; Related: _ToBase64() ; Author(s): Louis Horvath (celeri@videotron.ca) ; ;=============================================================================== Func _FromBase64($s_Source) Local $s_Result, $a_Conv[4][3], $a_Base64[123], $i_SourceLen, $a_Mask8[3] Local $i_Loop1, $i_Loop2, $i_Loop3, $i_Final, $i_Read, $a_Shift6[4], $a_Shift8[3] ; Sanity checks If $s_Source = "" Then SetError(1); Source string empty Return EndIf If Not IsString($s_Source) Then SetError(2); Invalid source type (not string) Return EndIf If Not StringLen(Chr(0)) Then SetError(4); Cannot detect character "0" then wrong version of AutoIT ... Return EndIf $s_Source = StringStripWS($s_Source, 15); Just strip EVERYTHING;) If StringRegExp($s_Source, "[^a-zA-Z0-9+//=]") Then; Contains characters not in the base64 subset. SetError(3); Not a Base64 source Return EndIf ; Create Base64 restore matrix For $i_Loop1 = 65 To 90; Capital letters $a_Base64[$i_Loop1] = $i_Loop1 - 65 Next For $i_Loop1 = 97 To 122; Small caps $a_Base64[$i_Loop1] = $i_Loop1 - 71 Next For $i_Loop1 = 48 To 57; Numbers $a_Base64[$i_Loop1] = $i_Loop1 + 4 Next $a_Base64[43] = 62; '+' $a_Base64[47] = 63; '/' $a_Base64[0] = 64; Padding ; Create 8-bit Mask $a_Mask8[0] = 0xFF0000; Mask first pair $a_Mask8[1] = 0x00FF00; Mask second pair $a_Mask8[2] = 0x0000FF; And the last ... ; Predetermine shift values, 6-bit $a_Shift6[0] = -18 $a_Shift6[1] = -12 $a_Shift6[2] = -6 $a_Shift6[3] = 0 ; Predetermine shift values, 8-bit $a_Shift8[0] = 16 $a_Shift8[1] = 8 $a_Shift8[2] = 0 $i_SourceLen = StringLen($s_Source); Get source string length For $i_Loop1 = 1 To $i_SourceLen Step 4 For $i_Loop2 = 0 To 3 If $i_Loop1 + $i_Loop2 > $i_SourceLen Then ExitLoop; Out of bounds $a_Conv[$i_Loop2][0] = Asc(StringMid($s_Source, $i_Loop1 + $i_Loop2, 1)); Find original string and it's numerical value $a_Conv[$i_Loop2][1] = $a_Base64[$a_Conv[$i_Loop2][0]]; What's it's value according to the table? $a_Conv[$i_Loop2][2] = BitShift($a_Conv[$i_Loop2][1], $a_Shift6[$i_Loop2]); Put it in place bit-wise Next $i_Final = BitOR($a_Conv[0][2], $a_Conv[1][2], $a_Conv[2][2], $a_Conv[3][2]); Combine it all For $i_Loop3 = 0 To 2; Now read bytes individually ... $i_Read = BitShift(BitAND($i_Final, $a_Mask8[$i_Loop3]), $a_Shift8[$i_Loop3]); mask and move If $i_Read Then $s_Result &= Chr($i_Read); Append to the complete string, skip chr(0) EndIf Next Next Return $s_Result; Return the converted string EndFunc ;==>_FromBase64And here's the attachements for those who have problems copying and pasting by way of Internet Explorer ..._ToBase64__.zip_FromBase64__.zip Edited November 7, 2005 by Celeri I am endeavoring, ma'am, to construct a mnemonic circuit using stone knives and bearskins.SpockMy UDFs:Deleted - they were old and I'm lazy ... :)My utilities:Comment stripperPolicy lister 1.07AutoIT Speed Tester (new!) Link to comment Share on other sites More sharing options...
flyingboz Posted October 25, 2005 Share Posted October 25, 2005 (edited) Glad to see someone looking at this, I've been using an external file implementation for a while. I haven't looked at your technical implementation, but any formal UDF implemenation for en/decoding operations should be in a single Function, i.e. _Base64($string_or_file,$encode_flag) I just went back and looked at the change logs referencing 3.1.77 and binary support - didn't realize we had jumped that hurdle yet. Kudos to the programmers who went through all the headaches of making that happen! Edited October 25, 2005 by flyingboz Reading the help file before you post... Not only will it make you look smarter, it will make you smarter. Link to comment Share on other sites More sharing options...
Celeri Posted October 25, 2005 Author Share Posted October 25, 2005 @flyingboz Yup that would be a good idea I'll see what I can do but for now I would like to iron out the bugs and make sure my process is failsafe. So if anyone can send out some attachments and see if they come back that would be great! Ok so it's not "over and done with" after all In fact there IS something important I didn't integrate in this fuction... Can you say "split line every 'n' characters"? Also it would be equally smart to strip @CRLFs before reading ... I should be able to integrate that before tomorrow. For those who can't wait, try using my _StringInsert() function. It's in my signature. Example: For $i_interval = 1 to StringLen($Base64) step 80 _StringInsert($Base64,@CRLF,$i_interval) Next $Base64 &= @CRLF ; Puts @CRLF every 80 characters and at the end of the base 64 file. P.S.: '&=' only works on beta. P.S.: Hope I didn't miss anything I'm falling asleep here I am endeavoring, ma'am, to construct a mnemonic circuit using stone knives and bearskins.SpockMy UDFs:Deleted - they were old and I'm lazy ... :)My utilities:Comment stripperPolicy lister 1.07AutoIT Speed Tester (new!) Link to comment Share on other sites More sharing options...
Celeri Posted October 25, 2005 Author Share Posted October 25, 2005 I haven't looked at your technical implementation, but any formal UDF implemenation for en/decoding operations should be in a single Function, i.e. _Base64($string_or_file,$encode_flag)Well after thinking about it I'm not convinced I should merge both options into a single operation (note: I didn't say no).Why? Check out these function couples:_StringToHex & _HexToString _TicksToTime & _TimeToTicks ControlEnable & ControlDisable_Degrees & _Radiansetc. etc. etc. I think users expect a different function to come and go from a specific state.And I think seperating them respects more the spirit of AutoIT3.Furthermore, I find both _ToBase64() and _FromBase64 are sufficiently different that no real economy is made by merging them. (on a technical side, most arrays and sequences are really different, and I fear putting all this together will make these functions very hard to read, which is maybe not what you want if these functions are to have a didactic value)But then, I might be wrong.Worse case scenario (I know this s!!ks but ...) a little line of code like this could do the same:Func Base64($s_String, $i_Switch = 0) If $i_Switch Then _ToBase64($s_String) Else _FromBase64($s_String) Endif EndFuncNot my idea of an elegant solution but an alternative nevertheless. I am endeavoring, ma'am, to construct a mnemonic circuit using stone knives and bearskins.SpockMy UDFs:Deleted - they were old and I'm lazy ... :)My utilities:Comment stripperPolicy lister 1.07AutoIT Speed Tester (new!) Link to comment Share on other sites More sharing options...
erifash Posted October 26, 2005 Share Posted October 26, 2005 ... _Degrees & _Radians ...Haha! Those are mine. Nice functions btw, I can't find anything wrong with them. I did base64 image encoding a while ago for Firefox. Check it out here: http://www.autoitscript.com/forum/index.php?showtopic=15640 My UDFs:_FilePrint() | _ProcessGetName() | _Degree() and _Radian()My Scripts:Drive Lock - Computer Lock Using a Flash DriveAU3Chat - Simple Multiuser TCP ChatroomStringChunk - Split a String Into Equal PartsAutoProxy - Custom Webserver Link to comment Share on other sites More sharing options...
Celeri Posted October 26, 2005 Author Share Posted October 26, 2005 Haha! Those are mine. Nice functions btw, I can't find anything wrong with them. I did base64 image encoding a while ago for Firefox. Check it out here: http://www.autoitscript.com/forum/index.php?showtopic=15640Yup saw those Glad to see you know your maths - it's not really my forte eheheheAnd thanks for the contribution!As for base64 image encoding, I'll check that out today or tomorrow I always wondered why no one ever integrated actual data as part of a html file ... Can be useful sometimes...BTW there's one last thing I have to do with _ToBase64() and _FromBase64() - check if the padding ('=' char) actually makes a difference / is accepted by Outlook Express/Outlook. So far however all the decoding programs that I've tried have no problems with it but weird things happen when I take them away ... I am endeavoring, ma'am, to construct a mnemonic circuit using stone knives and bearskins.SpockMy UDFs:Deleted - they were old and I'm lazy ... :)My utilities:Comment stripperPolicy lister 1.07AutoIT Speed Tester (new!) Link to comment Share on other sites More sharing options...
Celeri Posted October 26, 2005 Author Share Posted October 26, 2005 (edited) ### EDIT: November 7th 2005 ### Now works with Beta 3.1.1.86. Check out first post ... Well just hit a (temporary) wall. Seems even with the latest beta, StringMid() cannot handle binary data. So _ToBase64() cannot handle binary data for the moment. Well it's possible to retool _ToBase64() to accept hex input (you have to use String($BinaryString)). It won't be fun I tell ya. P.S.: However _FromBase64() is fine - StringMid() is used on non-binary data. Edited November 7, 2005 by Celeri I am endeavoring, ma'am, to construct a mnemonic circuit using stone knives and bearskins.SpockMy UDFs:Deleted - they were old and I'm lazy ... :)My utilities:Comment stripperPolicy lister 1.07AutoIT Speed Tester (new!) Link to comment Share on other sites More sharing options...
blindwig Posted March 8, 2006 Share Posted March 8, 2006 Sorry to be grave-digging, but for anyone who is looking for a base64 UDF, try this one:http://www.autoitscript.com/forum/index.php?showtopic=21399It's faster than any other I've seen on this board. My UDF Threads:Pseudo-Hash: Binary Trees, Flat TablesFiles: Filter by Attribute, Tree List, Recursive Find, Recursive Folders Size, exported to XMLArrays: Nested, Pull Common Elements, Display 2dSystem: Expand Environment Strings, List Drives, List USB DrivesMisc: Multi-Layer Progress Bars, Binary FlagsStrings: Find Char(s) in String, Find String in SetOther UDF Threads I Participated:Base64 Conversions Link to comment Share on other sites More sharing options...
Raik Posted May 30, 2007 Share Posted May 30, 2007 but does not work. this one in this tread works for me :-) AutoIt-Syntaxsheme for Proton & Phase5 * Firefox Addons by me (resizable Textarea 0.1d) (docked JS-Console 0.1.1) Link to comment Share on other sites More sharing options...
Raik Posted June 5, 2007 Share Posted June 5, 2007 expandcollapse popup;=============================================================================== ; ; Function Name: _ToBase64($s_Source, [$i_LineSize]) ; Version: 1.05 ; Description: Create a base 64 string ; Parameter(s): $s_Source - Source string ; $i_LineSize - Number of characters before a @CRLF ; Requirement(s): Requires AutoIT 3.1.1.77 minimum ; Return Value(s): On Success - Returns converted string ; On Failure - Returns "" and sets the @error flag in the following fashion: ; @error = 1 - Source string empty ; @error = 2 - Invalid source type (not string) ; @error = 3 - Wrong version of AutoIT, 3.1.1.77 minimum ; @error = 4 - Line size invalid ; Remarks: RFC 3548 requires a line size of 76 characters (default). ; Using different line sizes may not be compatible with certain mail readers. ; Related: _FromBase64() ; Author(s): Louis Horvath (celeri@videotron.ca) ; ;=============================================================================== Func _ToBase64($s_Source, $i_LineSize = 76) Local $a_Base64[65], $i_Loop1, $i_Loop2, $a_Mask6[4], $a_Shift6[4], $a_Shift8[4] Local $i_SourceLen, $i_Pad, $s_SrcChr, $i_Convert, $i_Assembly, $s_Result Local $i_LineSizeCounter ; Sanity checks If $s_Source = "" Then SetError(1); Source string empty Return EndIf If Not IsString($s_Source) Then SetError(2); Invalid source type (not string) Return EndIf If Not StringLen(Chr(0)) Then SetError(3); Cannot detect character "0" then wrong version of AutoIT ... Return EndIf If (Not IsInt($i_LineSize)) Or $i_LineSize < 2 Or $i_LineSize > 250 Then SetError(4); Line Size is invalid Return; Actual size suggested by RFC 3548: 76. 64 tolerated. EndIf ; Create Base64 matrix For $i_Loop1 = 65 To 90; Capital letters $a_Base64[$i_Loop1 - 65] = Chr($i_Loop1) Next For $i_Loop1 = 97 To 122; Small caps $a_Base64[$i_Loop1 - 71] = Chr($i_Loop1) Next For $i_Loop1 = 48 To 57; Numbers $a_Base64[$i_Loop1 + 4] = Chr($i_Loop1) Next $a_Base64[62] = '+' $a_Base64[63] = '/' $a_Base64[64] = '='; Padding ; Create 6-bit Mask $a_Mask6[0] = 0xFC0000 $a_Mask6[1] = 0x3F000 $a_Mask6[2] = 0xFC0 $a_Mask6[3] = 0x3F ; Create 6-bit shifting table $a_Shift6[0] = 18 $a_Shift6[1] = 12 $a_Shift6[2] = 6 $a_Shift6[3] = 0 ; Create 8-bit shifting table $a_Shift8[0] = -16 $a_Shift8[1] = -8 $a_Shift8[2] = 0 $i_SourceLen = StringLen($s_Source); Length of input string For $i_Loop1 = 1 To $i_SourceLen Step 3 ; Start by assembling a 3-byte integer (24 bits) $i_Assembly = ""; Flush beforehand For $i_Loop2 = 0 To 2; go though all 3 bytes If $i_Loop1 + $i_Loop2 > $i_SourceLen Then $i_Pad = $i_Loop2; Stop if end of string is reached, take note where it happens ExitLoop EndIf $s_SrcChr = StringMid($s_Source, $i_Loop1 + $i_Loop2, 1); Get original character from source $i_Convert = BitShift(Asc($s_SrcChr), $a_Shift8[$i_Loop2]); Shift it! $i_Assembly += $i_Convert; Set as first value Next ; Now set Base64 values! For $i_Loop2 = 0 To 3; Set Base64 values If $i_Loop2 = 2 And $i_Pad = 1 Then; Special case #1 $s_Result &= $a_Base64[64]; Insert padding ContinueLoop ElseIf $i_Loop2 = 3 And $i_Pad > 0 Then; Special case #2 $s_Result &= $a_Base64[64]; Insert padding ContinueLoop EndIf $i_Convert = BitShift(BitAND($i_Assembly, $a_Mask6[$i_Loop2]), $a_Shift6[$i_Loop2]); Extract first value, shift it to size $s_Result &= $a_Base64[$i_Convert] $i_LineSizeCounter += 1; Increment counter If $i_LineSizeCounter = $i_LineSize Then; Time to change lines $s_Result &= @CR; Add CR $i_LineSizeCounter = 0; Reset counter EndIf Next Next If $i_LineSizeCounter Then; One for the road (don't if the counter just reset) $s_Result &= @CR; Add CR EndIf Return $s_Result EndFunc ;==>_ToBase64oÝ÷ Ù«¢+Øìôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô(ì(ìչѥ½¸9µè}ɽµ ÍØÐ ÀÌØíÍ}M½Õɤ(ìYÉÍ¥½¸èĸÀØ(ìÍÉ¥ÁÑ¥½¸èIÍѽÉÌÍÑÉ¥¹¹½¥¸ÍØÐ(ìAɵÑȡ̤èÀÌØíÍ}M½ÕÉ´M½ÕÉÍÑÉ¥¹(ìIÅեɵ¹Ð¡Ì¤èIÅÕ¥ÉÌÕѽ%P̸ĸĸÜܵ¥¹¥µÕ´(ìIÑÕɸY±Õ¡Ì¤è=¸MÕÍÌ´IÑÕɹÌÉÍѽÉÍÑÉ¥¹(ì=¸¥±ÕÉ´IÑÕɹÌÅÕ½ÐìÅÕ½Ðì¹ÍÑÌÑ¡Éɽȱ¥¸Ñ¡½±±½Ý¥¹Í¡¥½¸è(ìÉɽÈôÄ´M½ÕÉÍÑÉ¥¹µÁÑä(ìÉɽÈôÈ´%¹Ù±¥Í½ÕÉÑåÁ¡¹½ÐÍÑÉ¥¹¤(ìÉɽÈôÌ´9½Ð ÍØÐͽÕÉ(ìÉɽÈôд]ɽ¹ÙÉÍ¥½¸½Õѽ%P°Ì¸Ä¸Ä¸Üܵ¥¹¥µÕ´(ìIµÉÌè9½¹(ìI±Ñè}Q½ ÍØÐ ¤(ìÕÑ¡½È¡Ì¤è1½Õ¥Ì!½ÉÙÑ ¡±É¥Ù¥½Ñɽ¸¹¤(ì(ìôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô)Õ¹}ɽµ ÍØÐ ÀÌØíÍ}M½Õɤ(1½°ÀÌØíÍ}IÍձаÀÌØí} ½¹ÙlÑulÍt°ÀÌØí} ÍØÑlÄÈÍt°ÀÌØí¥}M½ÕÉ1¸°ÀÌØí}5ͬálÍt(1½°ÀÌØí¥}1½½ÀÄ°ÀÌØí¥}1½½ÀÈ°ÀÌØí¥}1½½ÀÌ°ÀÌØí¥}¥¹°°ÀÌØí¥}I°ÀÌØí}M¡¥ÐÙlÑt°ÀÌØí}M¡¥ÐálÍt((ìM¹¥Ñä¡Ì(%ÀÌØíÍ}M½ÕÉôÅÕ½ÐìÅÕ½ÐìQ¡¸(MÑÉÉ½È Ä¤ìM½ÕÉÍÑÉ¥¹µÁÑä(IÑÕɸ(¹%(%9½Ð%ÍMÑÉ¥¹ ÀÌØíÍ}M½ÕɤQ¡¸(MÑÉÉ½È È¤ì%¹Ù±¥Í½ÕÉÑåÁ¡¹½ÐÍÑÉ¥¹¤(IÑÕɸ(¹%(%9½ÐMÑÉ¥¹1¸¡ ¡È À¤¤Q¡¸(MÑÉÉ½È Ð¤ì ¹¹½ÐÑСÉÑÈÅÕ½ÐìÀÅÕ½ÐìÑ¡¸Ýɽ¹ÙÉÍ¥½¸½Õѽ%P¸¸¸(IÑÕɸ(¹%(ÀÌØíÍ}M½ÕÉôMÑÉ¥¹MÑÉ¥Á]L ÀÌØíÍ}M½ÕÉ°ÄÔ¤ì)ÕÍÐÍÑÉ¥ÀYIeQ!%9ì¤(%MÑÉ¥¹IáÀ ÀÌØíÍ}M½ÕÉ°ÅÕ½ÐímyµéµhÀ´ä¬¼¼õtÅÕ½Ðì¤Q¡¸ì ½¹Ñ¥¹Ì¡ÉÑÉ̹½Ð¥¸Ñ¡ÍØÐÍÕÍи(MÑÉÉ½È Ì¤ì9½Ð ÍØÐͽÕÉ(IÑÕɸ(¹%(((ì ÉÑ ÍØÐÉÍѽɵÑÉ¥à(½ÈÀÌØí¥}1½½ÀÄôØÔQ¼äÀì Á¥Ñ°±ÑÑÉÌ(ÀÌØí} ÍØÑlÀÌØí¥}1½½ÀÅtôÀÌØí¥}1½½ÀÄ´ØÔ(9áÐ(½ÈÀÌØí¥}1½½ÀÄôäÜQ¼ÄÈÈìMµ±°ÁÌ(ÀÌØí} ÍØÑlÀÌØí¥}1½½ÀÅtôÀÌØí¥}1½½ÀÄ´ÜÄ(9áÐ(½ÈÀÌØí¥}1½½ÀÄôÐàQ¼ÔÜì9ÕµÉÌ(ÀÌØí} ÍØÑlÀÌØí¥}1½½ÀÅtôÀÌØí¥}1½½ÀĬÐ(9áÐ(ÀÌØí} ÍØÑlÐÍtôØÈìÌäì¬Ìäì(ÀÌØí} ÍØÑlÐÝtôØÌìÌäì¼Ìäì(ÀÌØí} ÍØÑlÁtôØÐìA¥¹(ì ÉÑ൥Ð5ͬ(ÀÌØí}5ͬálÁtôÁáÀÀÀÀì5ͬ¥ÉÍÐÁ¥È(ÀÌØí}5ͬálÅtôÁàÀÁÀÀì5ͬͽ¹Á¥È(ÀÌØí}5ͬálÉtôÁàÀÀÀÁì¹Ñ¡±Íи¸¸(ìAÉÑɵ¥¹Í¡¥ÐÙ±Õ̰ص¥Ð(ÀÌØí}M¡¥ÐÙlÁtô´Äà(ÀÌØí}M¡¥ÐÙlÅtô´ÄÈ(ÀÌØí}M¡¥ÐÙlÉtô´Ø(ÀÌØí}M¡¥ÐÙlÍtôÀ(ìAÉÑɵ¥¹Í¡¥ÐÙ±Õ̰൥Ð(ÀÌØí}M¡¥ÐálÁtôÄØ(ÀÌØí}M¡¥ÐálÅtôà(ÀÌØí}M¡¥ÐálÉtôÀ((ÀÌØí¥}M½ÕÉ1¸ôMÑÉ¥¹1¸ ÀÌØíÍ}M½ÕɤìÐͽÕÉÍÑÉ¥¹±¹Ñ ((½ÈÀÌØí¥}1½½ÀÄôÄQ¼ÀÌØí¥}M½ÕÉ1¸MÑÀÐ(½ÈÀÌØí¥}1½½ÀÈôÀQ¼Ì(%ÀÌØí¥}1½½ÀĬÀÌØí¥}1½½ÀÈÐìÀÌØí¥}M½ÕÉ1¸Q¡¸á¥Ñ1½½Àì=Õн½Õ¹Ì(ÀÌØí} ½¹ÙlÀÌØí¥}1½½ÀÉulÁtôÍ¡MÑÉ¥¹5¥ ÀÌØíÍ}M½ÕÉ°ÀÌØí¥}1½½ÀĬÀÌØí¥}1½½ÀȰĤ¤ì¥¹½É¥¥¹°ÍÑÉ¥¹¹¥ÐÌäí̹յɥ°Ù±Õ(ÀÌØí} ½¹ÙlÀÌØí¥}1½½ÀÉulÅtôÀÌØí} ÍØÑlÀÌØí} ½¹ÙlÀÌØí¥}1½½ÀÉulÁutì]¡ÐÌäíÌ¥ÐÌäíÌٱսɥ¹Ñ¼Ñ¡Ñ±ü(ÀÌØí} ½¹ÙlÀÌØí¥}1½½ÀÉulÉtô ¥ÑM¡¥Ð ÀÌØí} ½¹ÙlÀÌØí¥}1½½ÀÉulÅt°ÀÌØí}M¡¥ÐÙlÀÌØí¥}1½½ÀÉt¤ìAÕХХ¸Á±¥ÐµÝ¥Í(9áÐ(ÀÌØí¥}¥¹°ô ¥Ñ=H ÀÌØí} ½¹ÙlÁulÉt°ÀÌØí} ½¹ÙlÅulÉt°ÀÌØí} ½¹ÙlÉulÉt°ÀÌØí} ½¹ÙlÍulÉt¤ì ½µ¥¹¥Ð±°(½ÈÀÌØí¥}1½½ÀÌôÀQ¼Èì9½ÜÉåÑÌ¥¹¥Ù¥Õ±±ä¸¸¸(ÀÌØí¥}Iô ¥ÑM¡¥Ð¡ ¥Ñ9 ÀÌØí¥}¥¹°°ÀÌØí}5ͬálÀÌØí¥}1½½ÀÍt¤°ÀÌØí}M¡¥ÐálÀÌØí¥}1½½ÀÍt¤ìµÍ¬¹µ½Ù(%ÀÌØí¥}IQ¡¸(ÀÌØíÍ}IÍձеÀìô ¡È ÀÌØí¥}I¤ìÁÁ¹Ñ¼Ñ¡½µÁ±ÑÍÑÉ¥¹°Í¥À¡È À¤(¹%(9áÐ(9áÐ(IÑÕɸÀÌØíÍ}IÍÕ±ÐìIÑÕɸѡ½¹ÙÉÑÍÑÉ¥¹)¹Õ¹ìôôÐí}ɽµ ÍØÐ AutoIt-Syntaxsheme for Proton & Phase5 * Firefox Addons by me (resizable Textarea 0.1d) (docked JS-Console 0.1.1) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now