From 865779c59a4bcf047d24011f9ec0c1187d69b884 Mon Sep 17 00:00:00 2001 From: Raymond Date: Sun, 7 Mar 2010 15:57:10 +0000 Subject: [PATCH] So yeah.. Some user information is now actually printed to Simba (like Your bitmap has not been freed etc). Windows users now have the option to use a console or not (it's the little CMD-image-button). Non-important information will still be written to the console (so you must open it if you want some lil extra information). Now default compiles *without* the -WG switch, otherwise you LCL will raise exceptions when the Console is closed Added some exceptions to the Files unit, rather than returning -1. Use mDebug to write something to the terminal (it's inside the MufasaBase unit). git-svn-id: http://www.villavu.com/repositories/merlijn/mufasa@581 3f818213-9676-44b0-a9b4-5e4c4e03d09d --- trunk/Images/license.txt | 2 +- trunk/Images/terminal.png | Bin 0 -> 529 bytes trunk/Projects/SAMufasaGUI/colourhistory.lfm | 22 +- trunk/Projects/SAMufasaGUI/colourhistory.lrs | 24 +- trunk/Projects/SAMufasaGUI/colourhistory.pas | 18 +- .../SAMufasaGUI/framefunctionlist.pas | 12 +- trunk/Projects/SAMufasaGUI/framescript.pas | 8 +- trunk/Projects/SAMufasaGUI/project1.lpi | 14 +- trunk/Projects/SAMufasaGUI/project1.lpr | 2 +- trunk/Projects/SAMufasaGUI/simbasettings.lfm | 2 +- trunk/Projects/SAMufasaGUI/simbasettings.lrs | 2 +- trunk/Projects/SAMufasaGUI/simbasettings.pas | 4 +- trunk/Projects/SAMufasaGUI/simpleanalyzer.pas | 8 +- trunk/Projects/SAMufasaGUI/testunit.lfm | 51 +- trunk/Projects/SAMufasaGUI/testunit.lrs | 920 +++++++++--------- trunk/Projects/SAMufasaGUI/testunit.pas | 203 ++-- trunk/Projects/SAMufasaGUI/updateform.pas | 12 +- trunk/Units/MMLAddon/PSInc/Wrappers/ocr.inc | 1 - trunk/Units/MMLAddon/PSInc/Wrappers/other.inc | 4 +- trunk/Units/MMLAddon/internets.pas | 18 +- trunk/Units/MMLAddon/mmlpsthread.pas | 10 +- trunk/Units/MMLAddon/settings.pas | 20 +- trunk/Units/MMLAddon/updater.pas | 12 +- trunk/Units/MMLAddon/windowselector.pas | 6 +- trunk/Units/MMLCore/bitmaps.pas | 16 +- trunk/Units/MMLCore/client.pas | 37 +- trunk/Units/MMLCore/dtm.pas | 10 +- trunk/Units/MMLCore/dtmutil.pas | 8 +- trunk/Units/MMLCore/files.pas | 104 +- trunk/Units/MMLCore/finder.pas | 8 +- trunk/Units/MMLCore/fontloader.pas | 19 +- trunk/Units/MMLCore/libloader.pas | 8 +- trunk/Units/MMLCore/mufasabase.pas | 50 + trunk/Units/MMLCore/mufasatypes.pas | 1 + trunk/Units/MMLCore/ocr.pas | 21 +- trunk/Units/MMLCore/os_linux.pas | 20 +- trunk/Units/MMLCore/os_windows.pas | 7 +- trunk/Units/MMLCore/tpa.pas | 1 - 38 files changed, 933 insertions(+), 752 deletions(-) create mode 100644 trunk/Images/terminal.png create mode 100644 trunk/Units/MMLCore/mufasabase.pas diff --git a/trunk/Images/license.txt b/trunk/Images/license.txt index 4462ae5..3cd35c5 100644 --- a/trunk/Images/license.txt +++ b/trunk/Images/license.txt @@ -1,6 +1,6 @@ pause,stop: From Lazarus (http://lazarus.freepascal.org) exit,cut,page_new,new,open,paste,redo,run,save,undo,help,bug,arrow_refresh,html: Mark James http://www.famfamfam.com/lab/icons/silk/ -closetab,closetabs,addtab,eraser,terminate: Yusuke Kamiyamane http://www.pinvoke.com/ +closetab,closetabs,addtab,eraser,terminate,terminal: Yusuke Kamiyamane http://www.pinvoke.com/ pickcolor: From the Crystal Clear Project (http://www.everaldo.com/crystal/) licensed under LGPL crosshair: http://led24.de/iconset/ or http://led24.de/ would be appreciated. Follow us on twitter http://twitter.com/gasyoun or email leds24@gmail.com 512 icons 20/05/2009 diff --git a/trunk/Images/terminal.png b/trunk/Images/terminal.png new file mode 100644 index 0000000000000000000000000000000000000000..de569e17a7deed87631453947c21d55227cbf9cf GIT binary patch literal 529 zcmV+s0`C2ZP)>1!z)0n~I2rCbxhS(B=RU9Yq={6a@=p@Q2Kdu~8H$Qj(RPW-ae~^Y-no zI3ADipP@UQ&JEUEMEFZ?jCj#`p5OKR{fAbo73FybS(YPGNK=|;P!t7}CKU*w8CqLd zuh*~7&rgpU7hG+(+i1C5@?rvtGJcvPqUm&csf{tkU@(AYv&p_Fld|ivo)gkEg(NwE zl;l9OOU?jo3L+1OLzvI!uv)FyIuR;tHZfucjYi1!3A^2f1tcz()M-2(L%ZDu%mOY3^9sHr$n}Qkp9Z91aKNc^>$_&z5P=Bv=#*JGm37BvN=% zl7PgjY5_? -1 then CHImages.Delete(ColourTree.Selected.ImageIndex); @@ -284,7 +284,7 @@ begin C := 0; - writeln(Colourtree.Items.TopLvlCount); + mDebugLn(inttostr(Colourtree.Items.TopLvlCount)); for i := 0 to Colourtree.Items.TopLvlCount -1 do begin WriteXMLData(ColourTree.Items.TopLvlItems[i], RootNode, XMLDoc, XMLChild, C); @@ -343,7 +343,7 @@ begin Node := ColourTree.GetNodeAt(X, Y); if not assigned(ColourTree.Selected) then begin - writeln('No valid node is currently selected'); + mDebugLn('No valid node is currently selected'); exit; end; @@ -355,8 +355,8 @@ begin end; ColourTree.Selected.MoveTo(Node, naAddChild); TreeChanged:=True; - writeln('Dragging from: ' + ColourTree.Selected.Text); - writeln('Dragging to: ' + Node.Text); + mDebugLn('Dragging from: ' + ColourTree.Selected.Text); + mDebugLn('Dragging to: ' + Node.Text); end; procedure TColourHistoryForm.ColourTreeDragOver(Sender, Source: TObject; X, @@ -370,7 +370,7 @@ procedure TColourHistoryForm.ChangeName(Sender: TObject); begin if not Assigned(ColourTree.Selected) then begin - WriteLn('We double clicked but have nothing Selected?'); + mDebugLn('We double clicked but have nothing Selected?'); exit; end; ColourTree.Selected.Text := SelectionName.Text; @@ -406,7 +406,7 @@ var exit; TreeNode := ColourTree.Items.AddChild(TreeNode, 'ERROR'); - writeln(Node.NodeName); + mDebugLn(Node.NodeName); cNode := Node.FindNode('Data'); if Assigned(cNode) then begin diff --git a/trunk/Projects/SAMufasaGUI/framefunctionlist.pas b/trunk/Projects/SAMufasaGUI/framefunctionlist.pas index f11d68b..371a4a3 100644 --- a/trunk/Projects/SAMufasaGUI/framefunctionlist.pas +++ b/trunk/Projects/SAMufasaGUI/framefunctionlist.pas @@ -5,7 +5,7 @@ unit framefunctionlist; interface uses - Classes, SysUtils, FileUtil, LResources, Forms, ComCtrls, StdCtrls, Controls, + Classes, SysUtils, FileUtil, LResources, MufasaBase,Forms, ComCtrls, StdCtrls, Controls, ExtCtrls, Buttons; type @@ -137,7 +137,7 @@ var begin if InCodeCompletion then begin; - Writeln('Not yet implemented'); + mDebugLn('Not yet implemented'); exit; end; if not (Sender is TTreeView) then @@ -191,7 +191,7 @@ begin if ScriptNode = nil then exit; if FilterTree.Visible then - Writeln('Might get some acces violations now..'); + mDebugLn('Might get some acces violations now..'); ScriptNode.DeleteChildren; Analyzer := TScriptAnalyzer.create; Analyzer.ScriptToAnalyze:= Script; @@ -241,7 +241,7 @@ begin begin; if FilterTree.Visible = false then begin; - Writeln('ERROR: You cannot search next, since the Tree isnt generated yet'); + mDebugLn('ERROR: You cannot search next, since the Tree isnt generated yet'); Find(false); exit; end; @@ -313,7 +313,7 @@ begin FilterTreeVis(True); FilterTree.FullExpand; FilterTree.Items[1].Selected:= True; - Writeln(FunctionList.Items[Index].Text); + mDebugLn(FunctionList.Items[Index].Text); FunctionList.FullCollapse; FunctionList.Items[Index].Selected := true; FunctionList.Items[index].ExpandParents; @@ -365,7 +365,7 @@ begin exit; if InCodeCompletion then begin; - Writeln('Not yet implemented'); + mDebugLn('Not yet implemented'); exit; end; if not (Sender is TTreeView) then diff --git a/trunk/Projects/SAMufasaGUI/framescript.pas b/trunk/Projects/SAMufasaGUI/framescript.pas index 222a00a..3575569 100644 --- a/trunk/Projects/SAMufasaGUI/framescript.pas +++ b/trunk/Projects/SAMufasaGUI/framescript.pas @@ -28,7 +28,7 @@ interface uses Classes, SysUtils, FileUtil, LResources, Forms, SynHighlighterPas, SynEdit, SynEditMarkupHighAll, - mmlpsthread,ComCtrls, SynEditKeyCmds, LCLType, SynEditMarkupSpecialLine, Graphics, Controls; + mmlpsthread,ComCtrls, SynEditKeyCmds, LCLType,MufasaBase, SynEditMarkupSpecialLine, Graphics, Controls; const ecCodeCompletion = ecUserFirst; type @@ -178,8 +178,8 @@ begin Insert('%s',CompletionLine,i+1); CompletionCaret := Point(endi,Caret.y); StartWordCompletion:= Point(i+1,caret.y); - Writeln(CompletionLine); - Writeln(CompletionStart); + mDebugLn(CompletionLine); + mDebugLn(CompletionStart); InCodeCompletion := true; editSearchList.Text:= SearchText; editSearchList.SelStart:= Length(searchText); @@ -247,7 +247,7 @@ begin if ErrorData.Module <> '' then begin; if not FileExists(ErrorData.Module) then - Writeln(Format('ERROR comes from a non-existing file (%s)',[ErrorData.Module])) + formWriteln(Format('ERROR comes from a non-existing file (%s)',[ErrorData.Module])) else begin ErrorData.Module:= SetDirSeparators(ErrorData.Module);// Set it right ;-) diff --git a/trunk/Projects/SAMufasaGUI/project1.lpi b/trunk/Projects/SAMufasaGUI/project1.lpi index c52f3ac..f1cea6a 100644 --- a/trunk/Projects/SAMufasaGUI/project1.lpi +++ b/trunk/Projects/SAMufasaGUI/project1.lpi @@ -14,9 +14,9 @@ - + @@ -39,7 +39,7 @@ - + @@ -228,6 +228,11 @@ + + + + + @@ -250,6 +255,11 @@ + + + + + '#202#242'?L'#215#255#216#188#154#255#246#234#225#255 - ,#187#146'Z'#191#148'b'#24';'#145'a'#26#1#255#255#255#0#255#255#255#0#255#255 + ,#185#215''#202#242'?L'#215#255#216#188#154#255#246#234#225#255 + +#187#146'Z'#191#148'b'#24';'#145'a'#26#1#255#255#255#0#255#255#255#0#255#255 +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#29'('#169#156';F'#204#255#8 +#18#144':'#7#17#144'S;H'#212#255#219#189#156#255#238#204#166#255'@L'#222#255 +':C'#209#255#15#25#152'i'#255#255#255#0#255#255#255#0#255#255#255#0#255#255 @@ -1536,8 +1537,8 @@ LazarusResources.Add('TForm1','FORMDATA',[ +#153'nL'#255#0#0#0#0#0#0#0#0#0#0#0#0#153'nL'#0#153'nL'#0#153'nL'#0#162'f7' +#255#220#191#164#255#223#198#175#255#162'f7'#255#153'nL'#0#153'nL'#0#162'f7' +#255#220#191#164#255#223#198#175#255#162'f7'#255#0#0#0#0#0#0#0#0#0#0#0#0#164 - +'e4'#0#164'e4'#0#164'e4'#0#164'e4'#255#221#188#157#255#231#209#188#255#164'e' - ,'4'#255#164'e4'#0#164'e4'#0#164'e4'#255#221#188#157#255#231#209#188#255#164 + ,'e4'#0#164'e4'#0#164'e4'#0#164'e4'#255#221#188#157#255#231#209#188#255#164'e' + +'4'#255#164'e4'#0#164'e4'#0#164'e4'#255#221#188#157#255#231#209#188#255#164 +'e4'#255#0#0#0#0#0#0#0#0#0#0#0#0#164'e4'#0#164'e4'#0#164'e4'#0#164'e4'#255 +#219#182#148#255#231#209#187#255#164'e4'#255#164'e4'#0#164'e4'#0#164'e4'#255 +#219#182#148#255#231#209#187#255#164'e4'#255#0#0#0#0#0#0#0#0#0#0#0#0#164'e4' @@ -1600,8 +1601,8 @@ LazarusResources.Add('TForm1','FORMDATA',[ +'Z'#194#141#255#19'vC'#255#158#167#163#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#9'w?'#255#131#219#174#255#31#198'q'#255'r'#222 +#167#255'K'#178#127#255#23'tE'#255#168#173#170#255#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#4's:'#255#130#216#172#255'v' - ,#214#166#255'<'#157'j'#255'''tL'#255#172#174#173#255#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#4's:'#255#130#216#172#255'v' + +#214#166#255'<'#157'j'#255'''tL'#255#172#174#173#255#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#4's:'#255'z'#207#164 +#255','#140'Z'#255'=vY'#255#174#174#174#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#4's:'#255'!'#130'O' @@ -1664,8 +1665,8 @@ LazarusResources.Add('TForm1','FORMDATA',[ +#171#254#1''''#145#255#7#30'j'#171#0#0#0#0#3#27'm'#0#0#0#0#0#0#0#0#0#127'rf' +#0#0#0#0#0#0#9#154#1#3'2'#172#226#15':'#133#241#11'v'#234#255#11'~'#240#255 +#18'\'#171#255#9'q'#229#255#3'('#148#255#0','#162#254#0#25'm'#255#5#27'k'#221 - +#19'&f"'#0#0#0#0#0#0#0#0'sf['#6'uli'#29'gkz!'#8'A'#183#239#19'~'#236#255#12 - ,#137#255#254#23'p'#207#255'*x'#200#255#10'{'#243#255#5'K'#186#255#0'+'#160 + ,#19'&f"'#0#0#0#0#0#0#0#0'sf['#6'uli'#29'gkz!'#8'A'#183#239#19'~'#236#255#12 + +#137#255#254#23'p'#207#255'*x'#200#255#10'{'#243#255#5'K'#186#255#0'+'#160 +#255#4'*'#131#255#0#25'm'#254#2#23'f'#255#17#29'_$tz'#137#6'pjd*xdW(Td'#130 +'c!'#128#229#255#22'\'#179#255#25'a'#187#255'3'#149#249#255#9'y'#243#255#5'y' +#248#255#3'y'#252#255#4'3'#158#255#5')'#146#255#2'!v'#255#0#20'b'#255#3#20'_' @@ -1728,8 +1729,8 @@ LazarusResources.Add('TForm1','FORMDATA',[ +#206#255#252#226#204#255#251#224#201#255#251#225#200#255#253#250#247#255#193 +'v;'#247#255#255#255#0#255#255#255#0#196'|@'#247#247#240#230#255#248#180'U' +#255#247#180'V'#255#247#181'T'#255#248#180'S'#255#248#178'S'#255#247#179'R' - +#255#247#179'R'#255#247#178'Q'#255#247#178'O'#255#247#178'O'#255#252#249#245 - ,#255#191'o6'#247#255#255#255#0#255#255#255#0#193'x<'#247#247#237#227#255#253 + ,#255#247#179'R'#255#247#178'Q'#255#247#178'O'#255#247#178'O'#255#252#249#245 + +#255#191'o6'#247#255#255#255#0#255#255#255#0#193'x<'#247#247#237#227#255#253 +#194'n'#255#255#216#160#255#255#215#158#255#255#214#155#255#255#215#152#255 +#255#214#150#255#255#214#149#255#255#213#148#255#255#212#147#255#251#190'e' +#255#251#247#244#255#187'g1'#247#255#255#255#0#255#255#255#0#191'q8'#245#245 @@ -1792,8 +1793,8 @@ LazarusResources.Add('TForm1','FORMDATA',[ +#243#255't'#213#243#255'p'#211#242#255#194#234#248#255'5'#148#218#255#255#255 +#255#0#255#255#255#0','#134#216#209'-'#136#216#247'-'#135#216#247'-'#136#216 +#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136#216 - +#247'-'#136#216#247'-'#136#216#247'-'#135#216#247'-'#136#216#247','#134#216 - ,#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0' c'#152'* c'#152 + ,#247'-'#136#216#247'-'#136#216#247'-'#135#216#247'-'#136#216#247','#134#216 + +#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0' c'#152'* c'#152 +#255' c'#152#255' c'#152#255' c'#152#255' c'#152#255' c'#152#240#255#255#255 +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 +#255#255#0' c'#152'2 c'#152#178' c'#152#255'7u'#164#255#182#239#254#255#128 @@ -1856,8 +1857,8 @@ LazarusResources.Add('TForm1','FORMDATA',[ +#246#255'6'#217#236#255#22#205#227#255')'#219#241#255'/'#224#245#255')'#219 +#241#255'2'#226#247#255'/'#224#246#255#173#243#251#255#0#160#196#255#5'y}'#10 +#255#255#255#0#5'y}'#10#22#161#189#202'@'#205#225#255'6'#217#236#255#29#210 - +#232#255#29#210#232#255#29#210#232#255')'#219#241#255'/'#224#245#255'2'#226 - ,#247#255'2'#226#247#255'2'#226#248#255'/'#224#246#255#173#243#251#255#0#160 + ,#232#255#29#210#232#255#29#210#232#255')'#219#241#255'/'#224#245#255'2'#226 + +#247#255'2'#226#247#255'2'#226#248#255'/'#224#246#255#173#243#251#255#0#160 +#196#255#255#255#255#0#21#160#188#203#27#171#197#248'j'#229#243#255#11#200 +#223#255#29#210#232#255#29#210#232#255#29#210#232#255#4#192#214#255#4#192#214 +#255#4#192#214#255','#223#244#255'2'#226#248#255'y'#237#251#255#0#160#196#255 @@ -1920,8 +1921,8 @@ LazarusResources.Add('TForm1','FORMDATA',[ +#0#0#0#0#0#0#0#188'k6q'#188'k6'#144#188'k6'#204#188'k6'#238#188'k6'#250#187 +'k6'#254#187'k6'#255#187'j6'#255#187'j6'#255#188'l9'#255#189'n;'#255#187'm:' +#255#187'k8'#239#187'p>'#203#182'i5T'#255#255#255#0#188'k6'#155#246#224#209 - +#255#247#224#209#255#254#251#248#255#254#251#247#255#253#249#246#255#252#245 - ,#240#255#250#240#234#255#251#242#237#255#253#249#246#255#253#250#247#255#251 + ,#255#247#224#209#255#254#251#248#255#254#251#247#255#253#249#246#255#252#245 + +#240#255#250#240#234#255#251#242#237#255#253#249#246#255#253#250#247#255#251 +#241#235#255#248#233#223#254#236#208#189#251#201#137'^'#236#181'i5c'#188'k6' +#216#246#223#209#255#233#170#128#255#254#250#246#255#253#250#246#255#200#140 +'d'#255#251#243#238#255#251#241#234#255#252#246#242#255#254#251#248#255#252 @@ -1984,8 +1985,8 @@ LazarusResources.Add('TForm1','FORMDATA',[ +#252#252#255#252#252#252#255#252#252#252#255#252#252#252#255#252#252#252#255 +#252#252#252#255#252#252#252#255#252#252#252#255#252#252#252#255#252#252#252 +#255#253#253#253#255'QQQhMMMj'#250#250#250#255#248#248#248#255#248#248#248 - +#255#248#248#248#255#248#248#248#255#248#248#248#255#248#248#248#255#248#248 - ,#248#255#248#248#248#255#248#248#248#255#248#248#248#255#248#248#248#255#248 + ,#255#248#248#248#255#248#248#248#255#248#248#248#255#248#248#248#255#248#248 + +#248#255#248#248#248#255#248#248#248#255#248#248#248#255#248#248#248#255#248 +#248#248#255#250#250#250#255'MMMjIIIl'#247#247#247#255#244#244#244#255#244 +#244#244#255#244#244#244#255#244#244#244#255#244#244#244#255#244#244#244#255 +#244#244#244#255#244#244#244#255#244#244#244#255#244#244#244#255#244#244#244 @@ -2048,8 +2049,8 @@ LazarusResources.Add('TForm1','FORMDATA',[ +#255'--'#179#255'--'#179#255'--'#179#255'--'#179#255'//'#181#255#17#17#129 +#200'''''''{'#235#235#235#255#231#231#231#255#231#231#231#255#231#231#231#255 +#231#231#231#255#231#231#231#255#231#231#231#255#231#231#231#255'//'#167#255 - +'^^'#247#255'^^'#247#255'^^'#247#255'^^'#247#255'^^'#247#255#5#5#139#229#13 - ,#13#13'g'#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133#16 + ,'^^'#247#255'^^'#247#255'^^'#247#255'^^'#247#255'^^'#247#255#5#5#139#229#13 + +#13#13'g'#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133#16 +#16#16#133#16#16#16#133#16#16#16#133#4#4'['#207#2#2's'#231#2#2's'#231#2#2's' +#231#2#2's'#231#2#2's'#231#2#2'X'#176#0#0#0#9#0#0#0#22#0#0#0#26#0#0#0#26#0#0 +#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26 @@ -2112,8 +2113,8 @@ LazarusResources.Add('TForm1','FORMDATA',[ +#255#4#192#214#255#4#192#214#255#29#210#232#255#29#210#232#255#29#210#232#255 +#11#200#223#255'j'#229#243#255#27#171#197#248#21#160#188#203#0#0#0#0#0#0#0#0 +#5'y}'#17#0#160#196#255'v'#237#251#255#4#195#218#255'v'#237#251#255'i'#234 - +#249#255'i'#234#249#255'i'#234#249#255'i'#234#249#255#5#221#247#255#10#200 - ,#223#255#7#194#216#255'o'#220#235#255#27#163#191#244#0#0#0#0#0#0#0#0#0#0#0#0 + ,#249#255'i'#234#249#255'i'#234#249#255'i'#234#249#255#5#221#247#255#10#200 + +#223#255#7#194#216#255'o'#220#235#255#27#163#191#244#0#0#0#0#0#0#0#0#0#0#0#0 +#5'y}'#17#0#160#196#255'v'#237#251#255'v'#237#251#255#0#160#196#255#0#160#196 +#255#0#160#196#255#0#160#196#255#1#169#196#255'n'#225#238#255#15#201#223#255 +'i'#228#242#255#26#164#192#248#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#5'y}'#17#0#160 @@ -2176,8 +2177,8 @@ LazarusResources.Add('TForm1','FORMDATA',[ +#0'RRR'#0'RRR['#198#198#198#212#219#219#219#255#214#214#214#255#209#209#209 +#255#203#204#204#255#199#199#199#255#198#196#196#255#200#197#197#255#206#198 +#198#255#212#201#201#255#196#183#183#212'RRR[UUU'#0'TTT'#0'PPP'#0'PPPi'#187 - +#187#187#255#185#185#185#255#182#182#182#255#180#180#180#255#176#176#176#255 - ,#173#173#173#255#169#169#169#255#166#166#166#255#162#162#162#255#160#160#160 + ,#187#187#255#185#185#185#255#182#182#182#255#180#180#180#255#176#176#176#255 + +#173#173#173#255#169#169#169#255#166#166#166#255#162#162#162#255#160#160#160 +#255#157#157#157#255#3#3#3'fUUU'#0'UUU'#0'UUU'#0'TTTg'#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 @@ -2240,8 +2241,8 @@ LazarusResources.Add('TForm1','FORMDATA',[ +#255#255#255#255#0#255#255#255#0#196#129'T'#201#234#182#151#201#206#152's' +#248#234#190#161#248#199#134'['#255#239#192#158#255#255#255#255#255#204#147 +'n'#255#255#255#255#255#255#255#255#255#255#251#247#255#255#248#241#255#228 - +#175#140#255#199#138'a'#255#255#255#255#0#255#255#255#0#195#127'Q'#201#239 - ,#182#154#201#204#150'o'#248#214#182#145#248#200#136']'#255#239#191#161#255 + ,#175#140#255#199#138'a'#255#255#255#255#0#255#255#255#0#195#127'Q'#201#239 + +#182#154#201#204#150'o'#248#214#182#145#248#200#136']'#255#239#191#161#255 +#253#252#250#255#254#252#251#255#254#253#253#255#254#253#252#255#253#251#250 +#255#253#252#251#255#221#168#133#255#193#127'S'#255#255#255#255#0#255#255#255 +#0#198#131'U'#201#239#206#186#201#199#142'f'#248#224#188#156#248#202#141'e' @@ -2304,8 +2305,8 @@ LazarusResources.Add('TForm1','FORMDATA',[ +#199'yJ'#185#200'yK'#206#200'uE'#221#199'uE'#212#200'uE'#212#199'uE'#212#202 +#132'R'#255#255#247#241#255#255#233#217#255#255#234#219#255#255#233#217#255 +#255#231#215#255#255#229#210#255#255#226#203#255#255#247#241#255#203#133'U' - +#254#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 - ,#255#255#255#0#204#131'R'#251#251#245#238#255#255#233#217#255#255#234#219#255 + ,#254#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#204#131'R'#251#251#245#238#255#255#233#217#255#255#234#219#255 +#255#233#217#255#255#231#215#255#255#229#210#255#255#226#203#255#251#246#239 +#255#204#131'U'#254#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 +#255#255#255#0#255#255#255#0#207#130'S'#255#239#241#231#255#255#233#217#255 @@ -2368,8 +2369,8 @@ LazarusResources.Add('TForm1','FORMDATA',[ +#246#244#255#246#246#244#255#246#246#244#255#246#246#244#255#246#246#244#255 +#246#246#244#255#246#246#244#255#244#244#241#255#191#191#185#255'ZZP'#204'bb' +'X'#255#230#230#224#255#227#227#218#255#225#225#216#255#225#225#216#255#221 - +#221#212#255#221#221#212#255#225#225#216#255#225#225#216#255#221#221#212#255 - ,#221#221#212#255#225#225#216#255#225#225#216#255#227#227#218#255#231#231#225 + ,#221#212#255#221#221#212#255#225#225#216#255#225#225#216#255#221#221#212#255 + +#221#221#212#255#225#225#216#255#225#225#216#255#227#227#218#255#231#231#225 +#255'ddZ'#255'hh^'#255#218#218#208#255#217#217#207#255#217#217#207#255#213 +#213#203#255'}}u'#255#132#132'|'#255#213#213#205#255#213#213#205#255#132#132 +'|'#255'}}u'#255#213#213#203#255#217#217#207#255#217#217#207#255#218#218#208 @@ -2432,8 +2433,8 @@ LazarusResources.Add('TForm1','FORMDATA',[ +#237#255'K'#136#179#255'4s'#171#234'>'#139'F'#255#143#206#153#255'}'#198#135 +#255'x'#195#129#255's'#192'|'#255't'#192'|'#255'y'#194#129#255'I'#144'O'#255 +'T'#127'W'#255'T'#137#191#255#148#191#221#255'u'#173#212#255'c'#184#225#255 - +'K'#212#255#255'B'#139#184#255',n'#166#234';'#135'B'#255#137#203#146#255#132 - ,#200#141#255#128#198#136#255'{'#195#131#255'w'#193#127#255'G'#143'M'#255';t?' + ,'K'#212#255#255'B'#139#184#255',n'#166#234';'#135'B'#255#137#203#146#255#132 + +#200#141#255#128#198#136#255'{'#195#131#255'w'#193#127#255'G'#143'M'#255';t?' +#255#161#161#161#255'L'#132#186#255#141#187#219#255'n'#168#209#255'f'#166#209 +#255'_'#180#223#255'G'#133#177#255'%i'#161#234'7'#130'>'#255'4~;'#255'1y7' +#255'.u4'#255'I'#145'P'#255'F'#143'L'#255'9s='#255#161#161#161#255#162#162 @@ -2494,59 +2495,94 @@ LazarusResources.Add('TForm1','FORMDATA',[ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1'0'#2 +#2#2#239#21#21#21#255':::'#255'```'#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1' '#2#2#2#207 - +#20#20#20#255'999'#207#0#0#9'TTrayIcon'#9'MTrayIcon'#9'PopUpMenu'#7#9'TrayPo' - +'pup'#9'Icon.Data'#10'j'#10#0#0'f'#10#0#0#0#0#1#0#1#0#25#25#0#0#1#0' '#0'P' - +#10#0#0#22#0#0#0'('#0#0#0#25#0#0#0'2'#0#0#0#1#0' '#0#0#0#0#0#196#9#0#0'd'#0#0 - ,#0'd'#0#0#0#0#0#0#0#0#0#0#0#7#22#149#254#5#19#142#255#8#21#141#255#4#15#133 - +#255#4#15#130#255#5#13'~'#255#7#13'|'#255#6#12'~'#255#3#10#130#255#1#8#128 - +#255#12#23#147#255#9#21#148#255#7#22#149#255#5#24#148#255#5#25#152#254#21#28 - +#157#255'(+~'#224'qs'#144'-'#0#0#0#0#0#0#0#0#0#0#0#0#250#205#157#14#0#0#0#0#0 - +#0#0#0#0#0#0#0#6#21#148#255#6#21#148#255#5#20#145#255#6#20#138#255#4#18#130 - +#255#2#14'}'#255#4#11#128#255#6#10#127#255#7#12#129#255#2#7'~'#255#12#21#142 - +#255#12#22#146#255#10#22#147#255#7#23#144#255#10#27#149#254#20#27'~'#255'WW' - +#132'q'#0#0#0#0#0#0#0#0#252#208#162#0#246#200#149#0#0#0#0#0#249#204#156#0#0#0 - +#0#0#0#0#0#0#7#22#149#255#6#21#152#255#4#21#150#255#5#22#140#255#5#23#132#255 - +#5#18#130#255#3#12#131#255#5#10#128#255#10#13#128#255#7#12#128#255#9#16#135 - +#255#13#23#144#255#11#21#146#255#11#23#144#255#15#28#141#255'%.r'#210#255#255 - +#255#0#0#0#0#0#182#182#207#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#247#197 - +#144#0#6#21#148#255#7#22#149#255#6#22#149#255#7#21#147#255#6#20#144#255#4#17 - +#141#255#0#14#136#255#4#10#131#255#11#12#128#255#10#13#129#255#5#14#130#255#9 - +#23#140#255#7#26#142#255#4#22#134#255#16'!y'#255',0Zy'#0#0#0#0#183#185#193#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#247#197#144#0#247#197#144#0#0#0#0#0#7#21#148 - +#255#6#22#146#255#7#22#147#255#7#19#152#255#5#16#153#255#3#16#150#255#5#20 - +#146#255#12#21#143#255#14#16#135#255#8#13#129#255#7#17#129#255#9#25#132#255#2 - +#22'~'#255#1#22'x'#255#20#31'g'#255'PFae'#0#0#0#0#0#0#0#0#0#0#0#0#253#210#166 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#247#197#144#0#7#22#148#255#7#22#146#255#6 - +#22#147#255#7#19#152#255#6#18#154#255#6#19#151#255#7#22#148#255#6#22#143#255 - +#8#23#142#255#8#23#135#255#4#18'{'#255#7#20'u'#255#7#19'n'#255#9#19'g'#255#30 - +#28'['#255'bNkl'#0#0#0#0#239#204#192#0#0#0#0#0#0#0#0#0#253#210#166#0#254#211 - +#167#0#252#212#151#0#0#0#0#0#0#0#0#0#5#20#147#255#6#21#146#255#7#22#147#255#6 - +#19#151#255#6#18#154#255#6#18#151#255#3#18#144#255#2#22#141#255#1#23#135#255 - +#0#17'|'#255#8#24'y'#255#3#15'f'#255#9#17'a'#255#15#21']'#255#27#28'T'#255'^' - +'Qh'#170#0#0#0#0#0#0#0#0#188#173#160#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#252 - +#212#151#2#251#211#150#0#6#21#148#255#5#21#145#255#5#21#146#255#6#18#151#255 - +#5#17#152#255#4#17#150#255#5#20#145#255#4#26#138#255#14'+'#142#255#2#25'w' - +#255#1#20'k'#255#2#17'a'#255#8#18'\'#255#14#23']'#255#21'!_'#255'33Q'#230#255 - +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#8 - +#23#150#255#4#19#143#255#1#16#142#255#5#18#151#255#6#18#153#255#5#17#150#255 - +#5#20#145#255#2#23#130#255#12')}'#255#18'-'#127#255#12'"r'#255#7#25'f'#255#8 - +#22'a'#255#12#21']'#255#16#23'_'#255#17#27'R'#255'`bz'#175#143#155#176'^Ii' - +#143'R^}'#168#128'q'#132#175#161#143#151#177#142#178#164#163'/'#0#0#0#0#0#0#0 - +#0#5#16#145#255#2#12#140#255#4#17#141#255#8#17#145#255#10#20#155#255#2#19#151 - +#255#3#22#142#255#8#27'}'#255#6#30'm'#255#20'.|'#255#17',}'#255#18'-'#128#255 - +#15'(|'#255#15'%u'#255#16'(n'#255#23':w'#254'+R'#132#255'4e'#154#255':w'#189 - +#255'>'#129#207#255'B'#136#222#255'O'#134#220#255'a'#142#202#249'x'#156#186 - +#153#187#183#173#18#9#18#149#255#6#21#146#255#9#30#146#255#5#18#136#255#5#19 - +#148#255#0#20#153#255#3#22#141#255#13' '#129#255#13'*{'#255#9'-'#129#255#13 - +'<'#148#255#11'@'#155#255#10'?'#156#255#10'@'#154#255#10'D'#144#255#23'U'#155 - +#255'-q'#180#255'6|'#195#255'?'#132#213#255'A'#136#221#255'@'#136#231#255'C' - +#133#234#254'9'#136#232#255'\'#144#209#255#164#167#179'3'#11#19#150#255#21'.' - +#162#255'#N'#177#255#2#31#134#255#0#21#139#255#0#22#150#255#5#21#142#255#4#21 - +#129#255#18'6'#148#255#12'C'#160#255#11'U'#178#255#6'Z'#185#255#3'Z'#186#255 - +#5'Y'#187#255#9'Y'#186#255#15'^'#185#255'2'#129#214#255':'#134#219#255'>'#136 - +#224#255'?'#138#230#255'9'#137#230#255'A'#137#227#254'4'#137#232#255'Z'#144 - +#207#189#143#156#182#12#10#22#151#255#14'+'#154#255'%U'#179#255#13';'#150#255 - +#0#26#134#255#4#22#148#255#8#20#146#255#7#20#137#255#3#26#135#255' X'#193#255 + +#20#20#20#255'999'#207#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'UUU"UUUYUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUU' + +'fUUUYUUU"RRR['#198#198#198#212#220#220#220#255#216#217#217#255#213#213#213 + +#255#208#209#209#255#204#204#204#255#200#200#200#255#198#198#198#255#198#197 + +#197#255#201#197#197#255#205#198#198#255#209#199#199#255#215#203#203#255#196 + +#184#184#212'RRR[PPPi'#187#187#187#255#186#186#186#255#184#184#184#255#182 + +#182#182#255#179#179#179#255#176#176#176#255#174#174#174#255#171#171#171#255 + +#168#168#168#255#166#166#166#255#163#163#163#255#160#160#160#255#158#158#158 + +#255#156#156#156#255#3#3#3'fUUUg888'#255'MMM'#255'MMM'#255'LLL'#255'JJJ'#255 + +'III'#255'HHH'#255'FFF'#255'DDD'#255'???'#255'977'#255'=99'#255'A=='#255'<99' + +#255#3#3#3'fQQQhMMM'#255#203#203#203#255#139#139#139#255'rrr'#255'nnn'#255'i' + +'ii'#255'ddd'#255'___'#255'RQQ'#255'HCC'#255'LFF'#255'RJJ'#255'XNN'#255'JDD' + +#255#3#3#3'fMMMjLLL'#255'[[['#255#197#197#197#255#136#136#136#255'fff'#255'a' + +'aa'#255'\\\'#255'PNN'#255'JDD'#255'PHH'#255'VMM'#255'\QQ'#255'aVV'#255'PII' + +#255#3#3#3'fIIIlJJJ'#255#191#191#191#255'www'#255'___'#255#191#191#191#255 + +#140#140#140#255'QOO'#255'MGG'#255'SKK'#255'YOO'#255'_TT'#255'eXX'#255'j\\' + +#255'UNN'#255#3#3#3'fDDDnGGG'#255'TTT'#255'```'#255'[[['#255'LLL'#255'MMM' + +#255'QJJ'#255'WNN'#255']RR'#255'bVV'#255'h[['#255'm__'#255'qbb'#255'ZRR'#255 + +#3#3#3'f>>>qEEE'#255']]]'#255'XXX'#255'SSS'#255'OOO'#255'RMM'#255'ZPP'#255'`' + +'UU'#255'fYY'#255'k]]'#255'oaa'#255'tcc'#255'vff'#255']TT'#255#3#3#3'f888sBB' + +'B'#255'UUU'#255'QQQ'#255'LLL'#255'LKK'#255']SS'#255'cWW'#255'i[['#255'n__' + +#255'rbb'#255'vee'#255'wff'#255'wff'#255'^UU'#255#3#3#3'f222v@@@'#255'NNN' + +#255'JJJ'#255'GGG'#255'SMM'#255'gZZ'#255'l^^'#255'paa'#255'tdd'#255'wff'#255 + +'wff'#255'wff'#255'wff'#255'^UU'#255#3#3#3'f''''''{888'#255'???'#255'>>>'#255 + +'>>>'#255'LGG'#255'TMM'#255'XPP'#255'[RR'#255'\TT'#255']UU'#255'^UU'#255'^UU' + +#255'^UU'#255'QMM'#255#18#18#18'r'#13#13#13'g'#16#16#16#133#16#16#16#133#16 + +#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133 + +#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16 + +#133#13#13#13'g'#0#0#0#9#0#0#0#22#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0 + +#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#22#0 + +#0#0#9#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#0#0#9'TTrayIcon'#9'MTrayIcon'#9'PopUpMenu'#7#9'TrayPopup'#9'Icon.Data' + +#10'j'#10#0#0'f'#10#0#0#0#0#1#0#1#0#25#25#0#0#1#0' '#0'P'#10#0#0#22#0#0#0'(' + +#0#0#0#25#0#0#0'2'#0#0#0#1#0' '#0#0#0#0#0#196#9#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0 + +#0#0#0#0#7#22#149#254#5#19#142#255#8#21#141#255#4#15#133#255#4#15#130#255#5 + +#13'~'#255#7#13'|'#255#6#12'~'#255#3#10#130#255#1#8#128#255#12#23#147#255#9 + +#21#148#255#7#22#149#255#5#24#148#255#5#25#152#254#21#28#157#255'(+~'#224'qs' + +#144'-'#0#0#0#0#0#0#0#0#0#0#0#0#250#205#157#14#0#0#0#0#0#0#0#0#0#0#0#0#6#21 + +#148#255#6#21#148#255#5#20#145#255#6#20#138#255#4#18#130#255#2#14'}'#255#4#11 + +#128#255#6#10#127#255#7#12#129#255#2#7'~'#255#12#21#142#255#12#22#146#255#10 + +#22#147#255#7#23#144#255#10#27#149#254#20#27'~'#255'WW'#132'q'#0#0#0#0#0#0#0 + +#0#252#208#162#0#246#200#149#0#0#0#0#0#249#204#156#0#0#0#0#0#0#0#0#0#7#22#149 + +#255#6#21#152#255#4#21#150#255#5#22#140#255#5#23#132#255#5#18#130#255#3#12 + +#131#255#5#10#128#255#10#13#128#255#7#12#128#255#9#16#135#255#13#23#144#255 + +#11#21#146#255#11#23#144#255#15#28#141#255'%.r'#210#255#255#255#0#0#0#0#0#182 + +#182#207#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#247#197#144#0#6#21#148#255 + +#7#22#149#255#6#22#149#255#7#21#147#255#6#20#144#255#4#17#141#255#0#14#136 + +#255#4#10#131#255#11#12#128#255#10#13#129#255#5#14#130#255#9#23#140#255#7#26 + +#142#255#4#22#134#255#16'!y'#255',0Zy'#0#0#0#0#183#185#193#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#247#197#144#0#247#197#144#0#0#0#0#0#7#21#148#255#6#22#146 + +#255#7#22#147#255#7#19#152#255#5#16#153#255#3#16#150#255#5#20#146#255#12#21 + +#143#255#14#16#135#255#8#13#129#255#7#17#129#255#9#25#132#255#2#22'~'#255#1 + +#22'x'#255#20#31'g'#255'PFae'#0#0#0#0#0#0#0#0#0#0#0#0#253#210#166#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#247#197#144#0#7#22#148#255#7#22#146#255#6#22#147#255#7 + +#19#152#255#6#18#154#255#6#19#151#255#7#22#148#255#6#22#143#255#8#23#142#255 + +#8#23#135#255#4#18'{'#255#7#20'u'#255#7#19'n'#255#9#19'g'#255#30#28'['#255'b' + +'Nkl'#0#0#0#0#239#204#192#0#0#0#0#0#0#0#0#0#253#210#166#0#254#211#167#0#252 + +#212#151#0#0#0#0#0#0#0#0#0#5#20#147#255#6#21#146#255#7#22#147#255#6#19#151 + +#255#6#18#154#255#6#18#151#255#3#18#144#255#2#22#141#255#1#23#135#255#0#17'|' + +#255#8#24'y'#255#3#15'f'#255#9#17'a'#255#15#21']'#255#27#28'T'#255'^Qh'#170#0 + +#0#0#0#0#0#0#0#188#173#160#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#252#212#151#2 + +#251#211#150#0#6#21#148#255#5#21#145#255#5#21#146#255#6#18#151#255#5#17#152 + ,#255#4#17#150#255#5#20#145#255#4#26#138#255#14'+'#142#255#2#25'w'#255#1#20'k' + +#255#2#17'a'#255#8#18'\'#255#14#23']'#255#21'!_'#255'33Q'#230#255#255#255#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#8#23#150#255#4 + +#19#143#255#1#16#142#255#5#18#151#255#6#18#153#255#5#17#150#255#5#20#145#255 + +#2#23#130#255#12')}'#255#18'-'#127#255#12'"r'#255#7#25'f'#255#8#22'a'#255#12 + +#21']'#255#16#23'_'#255#17#27'R'#255'`bz'#175#143#155#176'^Ii'#143'R^}'#168 + +#128'q'#132#175#161#143#151#177#142#178#164#163'/'#0#0#0#0#0#0#0#0#5#16#145 + +#255#2#12#140#255#4#17#141#255#8#17#145#255#10#20#155#255#2#19#151#255#3#22 + +#142#255#8#27'}'#255#6#30'm'#255#20'.|'#255#17',}'#255#18'-'#128#255#15'(|' + +#255#15'%u'#255#16'(n'#255#23':w'#254'+R'#132#255'4e'#154#255':w'#189#255'>' + +#129#207#255'B'#136#222#255'O'#134#220#255'a'#142#202#249'x'#156#186#153#187 + +#183#173#18#9#18#149#255#6#21#146#255#9#30#146#255#5#18#136#255#5#19#148#255 + +#0#20#153#255#3#22#141#255#13' '#129#255#13'*{'#255#9'-'#129#255#13'<'#148 + +#255#11'@'#155#255#10'?'#156#255#10'@'#154#255#10'D'#144#255#23'U'#155#255'-' + +'q'#180#255'6|'#195#255'?'#132#213#255'A'#136#221#255'@'#136#231#255'C'#133 + +#234#254'9'#136#232#255'\'#144#209#255#164#167#179'3'#11#19#150#255#21'.'#162 + +#255'#N'#177#255#2#31#134#255#0#21#139#255#0#22#150#255#5#21#142#255#4#21#129 + +#255#18'6'#148#255#12'C'#160#255#11'U'#178#255#6'Z'#185#255#3'Z'#186#255#5'Y' + +#187#255#9'Y'#186#255#15'^'#185#255'2'#129#214#255':'#134#219#255'>'#136#224 + +#255'?'#138#230#255'9'#137#230#255'A'#137#227#254'4'#137#232#255'Z'#144#207 + +#189#143#156#182#12#10#22#151#255#14'+'#154#255'%U'#179#255#13';'#150#255#0 + +#26#134#255#4#22#148#255#8#20#146#255#7#20#137#255#3#26#135#255' X'#193#255 +#13'a'#198#255#4'f'#201#255#0'f'#200#255#5'f'#199#255#10'd'#199#255#12'b'#195 +#255'1'#129#222#255';'#132#222#255' \'#179#255'8'#129#215#255'>'#142#230#255 +'C'#135#227#255'@'#137#228#237'Z'#146#194'7'#0#0#0#0#9#21#153#255#3#25#146 @@ -2561,7 +2597,7 @@ LazarusResources.Add('TForm1','FORMDATA',[ +#132#162#178#176#173#165','#0#0#0#0#246#203#150#11#15#20#149#255#12#18#143 +#255#6#22#146#255#4#24#140#255#7#22#141#255#11#20#146#255#11#23#148#255#6#24 +#151#255#1#22#148#255#9'<'#172#255#10'i'#204#255#4'h'#198#255#11'i'#199#255 - ,#12'g'#198#255#13'j'#196#255#11'i'#201#255'5'#136#238#255'6'#139#238#255'7' + +#12'g'#198#255#13'j'#196#255#11'i'#201#255'5'#136#238#255'6'#139#238#255'7' +#137#232#255'>'#138#231#254'-'#134#231#255'I'#143#228#255'o'#134#173':'#0#0#0 +#0#231#205#152#1#21#28#145#255#9#22#138#255#6#18#142#255#9#15#143#255#10#14 +#144#255#12#21#149#255#9#23#150#255#3#21#147#255#1#20#142#255#10'4'#160#255 @@ -2589,7 +2625,7 @@ LazarusResources.Add('TForm1','FORMDATA',[ +#233#168'L'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#158'ma'#0#0#0#255#0#0#0 +#0#0'?!S#-!o}''&s'#190'/''{'#221'2'#31'z'#231'/$t'#210'<6c'#141'{jW'#25#0#0#0 +#0'jM_'#0#0#0#0#0#243#174'Q'#0#0#0#0#0#0#0#0#0#241#173'Q'#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#132'Za'#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#132'Za'#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#187'tV'#14#145'\Z'#29#255#243'L'#6#0#0#0#0#0#0#0#0#146'xp'#0#243 +#174'R'#0#243#174'R'#0#0#0#0#0#0#0#0#0#0#0#0#0#242#174'R'#0#0#0#0#0#241#173 +'Q'#0#242#174'R'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 @@ -2625,7 +2661,7 @@ LazarusResources.Add('TForm1','FORMDATA',[ +'A'#128#174#255#19'\'#148#234#255#255#255#0#255#255#255#0'```'#255#160#160 +#160#255'=vA'#255'6q9'#255#162#162#162#255#162#162#162#255#163#163#163#255'=' +'y'#176#255#130#179#215#255'b'#159#204#255'Z'#154#201#255'^'#155#202#255'C' - ,#129#175#255#25'`'#152#234'7'#130'>'#255'4~;'#255'1y7'#255'.u4'#255'I'#145'P' + +#129#175#255#25'`'#152#234'7'#130'>'#255'4~;'#255'1y7'#255'.u4'#255'I'#145'P' +#255'F'#143'L'#255'9s='#255#161#161#161#255#162#162#162#255'E~'#180#255#136 +#183#217#255'g'#163#207#255'a'#158#204#255'c'#159#204#255'E'#131#177#255#31 +'d'#156#234';'#135'B'#255#137#203#146#255#132#200#141#255#128#198#136#255'{' @@ -2653,7 +2689,7 @@ LazarusResources.Add('TForm1','FORMDATA',[ +#234#255#255#255#0#255#255#255#0#128#128#128#255'~~~'#255'|||'#255'zzz'#255 +'www'#255'uuu'#255'rrr'#255'q'#158#212#255'o'#158#214#255#135#178#220#255#171 +#211#232#255#169#208#230#255'X'#144#184#255'Y'#142#198#234#255#255#255#0#255 - +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'p'#158#214#219 +'m'#156#212#255#133#177#218#255'Z'#145#185#255'`'#147#203#234#255#255#255#0 +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 @@ -2689,7 +2725,7 @@ LazarusResources.Add('TForm1','FORMDATA',[ +#244#244#244#255#244#244#244#255#244#244#244#255#244#244#244#255#244#244#244 +#255#244#244#244#255#244#244#244#255#244#244#244#255#244#244#244#255#244#244 +#244#255#247#247#247#255'IIIlMMMj'#250#250#250#255#248#248#248#255#248#248 - ,#248#255#248#248#248#255#248#248#248#255#248#248#248#255#248#248#248#255#248 + +#248#255#248#248#248#255#248#248#248#255#248#248#248#255#248#248#248#255#248 +#248#248#255#248#248#248#255#248#248#248#255#248#248#248#255#248#248#248#255 +#248#248#248#255#250#250#250#255'MMMjQQQh'#253#253#253#255#252#252#252#255 +#252#252#252#255#252#252#252#255#252#252#252#255#252#252#252#255#252#252#252 @@ -2717,7 +2753,7 @@ LazarusResources.Add('TForm1','FORMDATA',[ +#255#0#0#0#0#9#0#0#0#22#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26 +#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#22#0#0#0#9#13#13 +#13'g'#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133#16#16 - +#16#133#16#16#16#133#16#16#16#133#4#4'['#207#2#2's'#231#2#2's'#231#2#2's'#231 + ,#16#133#16#16#16#133#16#16#16#133#4#4'['#207#2#2's'#231#2#2's'#231#2#2's'#231 +#2#2's'#231#2#2's'#231#2#2'X'#176'''''''{'#235#235#235#255#231#231#231#255 +#231#231#231#255#231#231#231#255#231#231#231#255#231#231#231#255#231#231#231 +#255#231#231#231#255'//'#167#255'^^'#247#255'^^'#247#255'^^'#247#255'^^'#247 @@ -2753,7 +2789,7 @@ LazarusResources.Add('TForm1','FORMDATA',[ +#255#208#209#209#255#204#204#204#255#200#200#200#255#198#198#198#255#198#197 +#197#255#201#197#197#255#205#198#198#255#209#199#199#255#215#203#203#255#196 +#184#184#212'RRR[UUU"UUUYUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUU' - ,'YUUU"'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'YUUU"'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +#255#0#10'ImageIndex'#2#16#7'OnClick'#7#21'MenuItemTabCloseClick'#0#0#9'TMen' @@ -2781,7 +2817,7 @@ LazarusResources.Add('TForm1','FORMDATA',[ +'ActionSaveAll'#7'Caption'#6#8'Save All'#10'ImageIndex'#2#21#9'OnExecute'#7 +#20'ActionSaveAllExecute'#8'ShortCut'#3'S`'#0#0#7'TAction'#16'ActionClearDeb' +'ug'#7'Caption'#6#5'Clear'#10'ImageIndex'#2#4#9'OnExecute'#7#23'ActionClearD' - +'ebugExecute'#0#0#7'TAction'#15'ActionFindStart'#7'Caption'#6#9'&Find ...'#10 + ,'ebugExecute'#0#0#7'TAction'#15'ActionFindStart'#7'Caption'#6#9'&Find ...'#10 +'ImageIndex'#2#26#9'OnExecute'#7#22'ActionFindstartExecute'#8'ShortCut'#3'F@' +#0#0#7'TAction'#9'ActionCut'#7'Caption'#6#4'Cu&t'#10'ImageIndex'#2#3#9'OnExe' +'cute'#7#16'ActionCutExecute'#0#0#7'TAction'#10'ActionCopy'#7'Caption'#6#5'&' @@ -2802,304 +2838,306 @@ LazarusResources.Add('TForm1','FORMDATA',[ +'nCompileScript'#7'Caption'#6#19'ActionCompileScript'#9'OnExecute'#7#26'Acti' +'onCompileScriptExecute'#8'ShortCut'#3'x@'#0#0#7'TAction'#16'ActionNormalSiz' +'e'#7'Caption'#6#16'ActionNormalSize'#9'OnExecute'#7#23'ActionNormalSizeExec' - +'ute'#8'ShortCut'#3'B@'#0#0#0#6'TTimer'#10'DebugTimer'#7'OnTimer'#7#18'Proce' - +'ssDebugStream'#4'left'#3'8'#2#3'top'#2'h'#0#0#10'TPopupMenu'#11'ScriptPopup' - +#6'Images'#7#17'Mufasa_Image_List'#7'OnPopup'#7#16'ScriptPopupPopup'#4'left' - +#3'8'#2#3'top'#3#144#0#0#9'TMenuItem'#13'PopupItemUndo'#6'Action'#7#10'Actio' - +'nUndo'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0 - +#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0 + +'ute'#8'ShortCut'#3'B@'#0#0#7'TAction'#13'ActionConsole'#7'Caption'#6#13'Act' + +'ionConsole'#10'ImageIndex'#2#27#9'OnExecute'#7#20'ActionConsoleExecute'#0#0 + +#0#6'TTimer'#10'DebugTimer'#7'OnTimer'#7#18'ProcessDebugStream'#4'left'#3'8' + +#2#3'top'#2'h'#0#0#10'TPopupMenu'#11'ScriptPopup'#6'Images'#7#17'Mufasa_Imag' + +'e_List'#7'OnPopup'#7#16'ScriptPopupPopup'#4'left'#3'8'#2#3'top'#3#144#0#0#9 + +'TMenuItem'#13'PopupItemUndo'#6'Action'#7#10'ActionUndo'#11'Bitmap.Data'#10 + +':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0 + +' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#24#166#195 + +'i'#26#167#196'i'#0#160#196#24#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#160#196']f'#219 + +#234#178#17#166#194#174#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#160#196'"C'#196#219#252 + +'C'#197#216#254'#'#166#192#127#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#160#196#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#14#170#203 + +#254']'#218#233#254'#'#166#192#239#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#160#196#255#0#160#196#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#158#193 + +#26#2#172#200#255#136#231#242#254#17#162#194#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#5'y}'#17#0#160#196#255'v'#237#251#255#0#160#196#255#0#0#0#0#0#0#0#0#0 + +#160#196'0'#0#153#185'P'#0#160#196#201'm'#230#245#255'v'#226#239#255#25#163 + +#193#255#0#0#0#0#0#0#0#0#0#0#0#0#5'y}'#17#0#160#196#255'v'#237#251#255'v'#237 + +#251#255#0#160#196#255#0#160#196#255#0#160#196#255#0#160#196#255#1#169#196 + +#255'n'#225#238#255#15#201#223#255'i'#228#242#255#26#164#192#248#0#0#0#0#0#0 + +#0#0#5'y}'#17#0#160#196#255'v'#237#251#255#4#195#218#255'v'#237#251#255'i' + +#234#249#255'i'#234#249#255'i'#234#249#255'i'#234#249#255#5#221#247#255#10 + +#200#223#255#7#194#216#255'o'#220#235#255#27#163#191#244#0#0#0#0#5'y~'#17#0 + +#160#196#255'y'#237#251#255'2'#226#248#255','#223#244#255#4#192#214#255#4#192 + +#214#255#4#192#214#255#29#210#232#255#29#210#232#255#29#210#232#255#11#200 + +#223#255'j'#229#243#255#27#171#197#248#21#160#188#203#0#0#0#0#0#160#196#255 + +#173#243#251#255'/'#224#246#255'2'#226#248#255'2'#226#247#255'2'#226#247#255 + +'/'#224#245#255')'#219#241#255#29#210#232#255#29#210#232#255#29#210#232#255 + +'6'#217#236#255'@'#205#225#255#22#161#189#202#5'y}'#10#0#0#0#0#5'y}'#10#0#160 + +#196#255#173#243#251#255'/'#224#246#255'2'#226#247#255')'#219#241#255'/'#224 + +#245#255')'#219#241#255#22#205#227#255'6'#217#236#255'i'#231#246#255'A'#206 + +#227#254#19#163#193#228#5'y}2'#0#0#0#0#0#0#0#0#0#0#0#0#5'y}'#17#0#160#196#255 + +#173#243#251#255'1'#225#246#255' '#227#250#255's'#236#250#255'o'#235#250#255 + +'n'#232#247#255'l'#232#247#248#20#161#188#212#20#163#193#213#5'y}'#28#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#5'y}'#17#0#160#196#255#173#243#251#255'%' + +#228#251#255#0#160#196#255#0#160#196#255#19#161#190#231#21#159#187#207#27#161 + +#187#164#6'z|'#11#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#5 + +'y}'#17#0#160#196#255#173#243#251#255#0#160#196#255#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#24#166#195'i'#26#167#196'i'#0#160#196#24#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#160#196']f'#219#234#178#17#166#194#174#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#160#196'"C'#196#219#252'C'#197#216#254'#'#166#192#127#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#160#196#255#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#14#170#203#254']'#218#233#254'#'#166#192#239#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#160#196#255#0#160#196#255#0#0#0#0#0#0#0#0#0 - ,#0#0#0#0#0#0#0#0#158#193#26#2#172#200#255#136#231#242#254#17#162#194#255#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#5'y}'#17#0#160#196#255'v'#237#251#255#0#160#196 - +#255#0#0#0#0#0#0#0#0#0#160#196'0'#0#153#185'P'#0#160#196#201'm'#230#245#255 - +'v'#226#239#255#25#163#193#255#0#0#0#0#0#0#0#0#0#0#0#0#5'y}'#17#0#160#196#255 - +'v'#237#251#255'v'#237#251#255#0#160#196#255#0#160#196#255#0#160#196#255#0 - +#160#196#255#1#169#196#255'n'#225#238#255#15#201#223#255'i'#228#242#255#26 - +#164#192#248#0#0#0#0#0#0#0#0#5'y}'#17#0#160#196#255'v'#237#251#255#4#195#218 - +#255'v'#237#251#255'i'#234#249#255'i'#234#249#255'i'#234#249#255'i'#234#249 - +#255#5#221#247#255#10#200#223#255#7#194#216#255'o'#220#235#255#27#163#191#244 - +#0#0#0#0#5'y~'#17#0#160#196#255'y'#237#251#255'2'#226#248#255','#223#244#255 - +#4#192#214#255#4#192#214#255#4#192#214#255#29#210#232#255#29#210#232#255#29 - +#210#232#255#11#200#223#255'j'#229#243#255#27#171#197#248#21#160#188#203#0#0 - +#0#0#0#160#196#255#173#243#251#255'/'#224#246#255'2'#226#248#255'2'#226#247 - +#255'2'#226#247#255'/'#224#245#255')'#219#241#255#29#210#232#255#29#210#232 - +#255#29#210#232#255'6'#217#236#255'@'#205#225#255#22#161#189#202#5'y}'#10#0#0 - +#0#0#5'y}'#10#0#160#196#255#173#243#251#255'/'#224#246#255'2'#226#247#255')' - +#219#241#255'/'#224#245#255')'#219#241#255#22#205#227#255'6'#217#236#255'i' - +#231#246#255'A'#206#227#254#19#163#193#228#5'y}2'#0#0#0#0#0#0#0#0#0#0#0#0#5 - +'y}'#17#0#160#196#255#173#243#251#255'1'#225#246#255' '#227#250#255's'#236 - +#250#255'o'#235#250#255'n'#232#247#255'l'#232#247#248#20#161#188#212#20#163 - +#193#213#5'y}'#28#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#5'y}'#17#0#160#196 - +#255#173#243#251#255'%'#228#251#255#0#160#196#255#0#160#196#255#19#161#190 - +#231#21#159#187#207#27#161#187#164#6'z|'#11#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#5'y}'#17#0#160#196#255#173#243#251#255#0#160#196#255#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#157#191#20#0#160#196#255#0#160#196#255#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#160#196#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#7'OnClick'#7#17'ActionUndoExecu' - +'te'#0#0#9'TMenuItem'#13'PopupItemRedo'#6'Action'#7#10'ActionRedo'#11'Bitmap' - +'.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16 - +#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255 - +#0#0#0#0#0#0#160#196#24#26#167#196'i'#24#166#195'i'#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0 - +#0#0#0#0#17#166#194#174'f'#219#234#178#0#160#196']'#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0 - +'#'#166#192#127'C'#197#216#254'C'#196#219#252#0#160#196'"'#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255 - +#255#255#0'#'#166#192#239']'#218#233#254#14#170#203#254#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#160#196#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#255#255#255#0#17#162#194#255#136#231#242#254#2#172#200#255#0#158#193#26 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#160#196#255#0#160#196#255#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#25#163#193#255'v'#226#239#255'm'#230 - +#245#255#0#160#196#201#0#153#185'P'#0#160#196'0'#0#0#0#0#0#0#0#0#0#160#196 - +#255'v'#237#251#255#0#160#196#255#5'y}'#17#0#0#0#0#0#0#0#0#0#0#0#0#255#255 - +#255#0#26#164#192#248'i'#228#242#255#15#201#223#255'n'#225#238#255#1#169#196 - +#255#0#160#196#255#0#160#196#255#0#160#196#255#0#160#196#255'v'#237#251#255 - +'v'#237#251#255#0#160#196#255#5'y}'#17#0#0#0#0#0#0#0#0#255#255#255#0#27#163 - +#191#244'o'#220#235#255#7#194#216#255#10#200#223#255#5#221#247#255'i'#234#249 - +#255'i'#234#249#255'i'#234#249#255'i'#234#249#255'v'#237#251#255#4#195#218 - +#255'v'#237#251#255#0#160#196#255#5'y}'#17#0#0#0#0#255#255#255#0#21#160#188 - +#203#27#171#197#248'j'#229#243#255#11#200#223#255#29#210#232#255#29#210#232 - +#255#29#210#232#255#4#192#214#255#4#192#214#255#4#192#214#255','#223#244#255 - +'2'#226#248#255'y'#237#251#255#0#160#196#255#5'y~'#17#255#255#255#0#5'y}'#10 - +#22#161#189#202'@'#205#225#255'6'#217#236#255#29#210#232#255#29#210#232#255 - +#29#210#232#255')'#219#241#255'/'#224#245#255'2'#226#247#255'2'#226#247#255 - +'2'#226#248#255'/'#224#246#255#173#243#251#255#0#160#196#255#255#255#255#0#0 - +#0#0#0#5'y}2'#19#163#193#228'A'#206#227#254'i'#231#246#255'6'#217#236#255#22 - +#205#227#255')'#219#241#255'/'#224#245#255')'#219#241#255'2'#226#247#255'/' - +#224#246#255#173#243#251#255#0#160#196#255#5'y}'#10#255#255#255#0#0#0#0#0#0#0 - +#0#0#5'y}'#28#20#163#193#213#20#161#188#212'l'#232#247#248'n'#232#247#255'o' - +#235#250#255's'#236#250#255' '#227#250#255'1'#225#246#255#173#243#251#255#0 - +#160#196#255#5'y}'#17#0#0#0#0#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#6'z|'#11 - +#27#161#187#164#21#159#187#207#19#161#190#231#0#160#196#255#0#160#196#255'%' - ,#228#251#255#173#243#251#255#0#160#196#255#5'y}'#17#0#0#0#0#0#0#0#0#255#255 - +#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#160 - +#196#255#173#243#251#255#0#160#196#255#5'y}'#17#0#0#0#0#0#0#0#0#0#0#0#0#255 - +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#160#196#255#0#160#196#255#0#157#191#20#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255 - +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#160#196#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#7'OnClick'#7#17 - +'ActionRedoExecute'#0#0#9'TMenuItem'#17'PopupItemDivider1'#7'Caption'#6#1'-' - +#0#0#9'TMenuItem'#12'PopupItemCut'#6'Action'#7#9'ActionCut'#11'Bitmap.Data' - +#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0 - +#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255 - +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 - +#255#0#2#13#140#10#28''''#166#159'5?'#201#247'"-'#175#185#3#13#140#28#255#255 - +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 - +#255#255#255#0#5#15#141#31#6#16#142'&'#1#11#138#3#255#255#255#0#18#28#155'p@' - +'K'#217#255',5'#191#221'=G'#209#255#29''''#169#164#255#255#255#0#255#255#255 - +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#15#25#151'c2='#199 - +#248'7A'#207#255#31')'#171#176#0#10#134#24'#-'#180#175'5@'#204#253#0#9#133#24 - +#28''''#168#149'4>'#197#248#4#14#140#20#255#255#255#0#255#255#255#0#255#255 - +#255#0#255#255#255#0#255#255#255#0'/:'#189#222'5?'#201#229'%0'#179#194'?J' - +#221#255#31'*'#172#194'$0'#178#203'2<'#198#242#0#10#134#3#17#27#157'w7A'#200 - +#255#8#18#142' '#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 - +#255#255#0'2<'#195#236'#.'#173#175#255#255#255#0#26'%'#168#153'BP'#210#255 - +#203#163'u'#254'AO'#214#255#22'!'#163#157'/9'#192#212'.8'#190#223#2#13#139#10 - +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#29'(' - +#169#156';F'#204#255#8#18#144':'#7#17#144'S;H'#212#255#219#189#156#255#238 - +#204#166#255'@L'#222#255':C'#209#255#15#25#152'i'#255#255#255#0#255#255#255#0 - +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#3#13#140#31',5'#185 - +#215''#202#242'?L'#215#255#216#188#154#255#246#234#225#255#187 - +#146'Z'#191#148'b'#24';'#145'a'#26#1#255#255#255#0#255#255#255#0#255#255#255 - +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#3#13#140#31#27'&' - +#167#153'*4'#186#204#17#28#157#137#187#152'i'#204#240#224#208#255#183#145'_' - +#197#143']'#20#11#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 - +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 - +#255#0#0#11#136#2#255#255#255#0#180#142'Z'#144#246#234#221#255#225#205#180 - +#255#177#141']'#191#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#0#0#157#191#20#0#160#196#255#0#160#196#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#160#196#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#7'OnClick'#7#17'ActionUndoExecute'#0#0#9'TMenuItem'#13 + +'PopupItemRedo'#6'Action'#7#10'ActionRedo'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0 + +#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0 + +#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#0#0#0#0#0#160#196#24 + +#26#167#196'i'#24#166#195'i'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#0#0#0#0#17#166#194#174 + +'f'#219#234#178#0#160#196']'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0'#'#166#192#127'C'#197 + +#216#254'C'#196#219#252#0#160#196'"'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0'#'#166#192#239 + +']'#218#233#254#14#170#203#254#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#160 + +#196#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#17#162 + +#194#255#136#231#242#254#2#172#200#255#0#158#193#26#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#160#196#255#0#160#196#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#255#255#255#0#25#163#193#255'v'#226#239#255'm'#230#245#255#0#160#196#201#0 + +#153#185'P'#0#160#196'0'#0#0#0#0#0#0#0#0#0#160#196#255'v'#237#251#255#0#160 + +#196#255#5'y}'#17#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#26#164#192#248'i'#228 + +#242#255#15#201#223#255'n'#225#238#255#1#169#196#255#0#160#196#255#0#160#196 + +#255#0#160#196#255#0#160#196#255'v'#237#251#255'v'#237#251#255#0#160#196#255 + +#5'y}'#17#0#0#0#0#0#0#0#0#255#255#255#0#27#163#191#244'o'#220#235#255#7#194 + +#216#255#10#200#223#255#5#221#247#255'i'#234#249#255'i'#234#249#255'i'#234 + +#249#255'i'#234#249#255'v'#237#251#255#4#195#218#255'v'#237#251#255#0#160#196 + +#255#5'y}'#17#0#0#0#0#255#255#255#0#21#160#188#203#27#171#197#248'j'#229#243 + +#255#11#200#223#255#29#210#232#255#29#210#232#255#29#210#232#255#4#192#214 + +#255#4#192#214#255#4#192#214#255','#223#244#255'2'#226#248#255'y'#237#251#255 + +#0#160#196#255#5'y~'#17#255#255#255#0#5'y}'#10#22#161#189#202'@'#205#225#255 + +'6'#217#236#255#29#210#232#255#29#210#232#255#29#210#232#255')'#219#241#255 + +'/'#224#245#255'2'#226#247#255'2'#226#247#255'2'#226#248#255'/'#224#246#255 + +#173#243#251#255#0#160#196#255#255#255#255#0#0#0#0#0#5'y}2'#19#163#193#228'A' + +#206#227#254'i'#231#246#255'6'#217#236#255#22#205#227#255')'#219#241#255'/' + +#224#245#255')'#219#241#255'2'#226#247#255'/'#224#246#255#173#243#251#255#0 + +#160#196#255#5'y}'#10#255#255#255#0#0#0#0#0#0#0#0#0#5'y}'#28#20#163#193#213 + +#20#161#188#212'l'#232#247#248'n'#232#247#255'o'#235#250#255's'#236#250#255 + +' '#227#250#255'1'#225#246#255#173#243#251#255#0#160#196#255#5'y}'#17#0#0#0#0 + +#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#6'z|'#11#27#161#187#164#21#159#187#207 + +#19#161#190#231#0#160#196#255#0#160#196#255'%'#228#251#255#173#243#251#255#0 + +#160#196#255#5'y}'#17#0#0#0#0#0#0#0#0#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#160#196#255#173#243#251#255#0#160 + +#196#255#5'y}'#17#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#160#196#255#0#160#196#255#0#157 + +#191#20#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#160#196#255#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#7'OnClick'#7#17'ActionRedoExecute'#0#0#9'TMenuIte' + +'m'#17'PopupItemDivider1'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#12'PopupItemCut' + +#6'Action'#7#9'ActionCut'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0 + +#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd' + +#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#2#13#140#10#28''''#166#159'5?' + +#201#247'"-'#175#185#3#13#140#28#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#5#15#141#31#6#16#142 + +'&'#1#11#138#3#255#255#255#0#18#28#155'p@K'#217#255',5'#191#221'=G'#209#255 + +#29''''#169#164#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#15#25#151'c2='#199#248'7A'#207#255#31')'#171#176#0 + +#10#134#24'#-'#180#175'5@'#204#253#0#9#133#24#28''''#168#149'4>'#197#248#4#14 + +#140#20#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'/:'#189#222'5?'#201#229'%0'#179#194'?J'#221#255#31'*'#172#194'$0'#178#203'2' + +'<'#198#242#0#10#134#3#17#27#157'w7A'#200#255#8#18#142' '#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'2<'#195#236'#.'#173#175 + +#255#255#255#0#26'%'#168#153'BP'#210#255#203#163'u'#254'AO'#214#255#22'!'#163 + +#157'/9'#192#212'.8'#190#223#2#13#139#10#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#29'('#169#156';F'#204#255#8#18#144':'#7#17 + +#144'S;H'#212#255#219#189#156#255#238#204#166#255'@L'#222#255':C'#209#255#15 + ,#25#152'i'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#3#13#140#31',5'#185#215''#202#242'?L'#215 + +#255#216#188#154#255#246#234#225#255#187#146'Z'#191#148'b'#24';'#145'a'#26#1 +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 - +#255#255#0#255#255#255#0#255#255#255#0#179#140'W'#137#241#226#212#255#206#178 - +#142#244#245#235#224#255#166#127'J'#157#255#255#255#0#255#255#255#0#255#255 - +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 - +#255#255#255#0#255#255#255#0#255#255#255#0#177#137'S'#132#238#223#206#255#151 - +'f e'#194#163'|'#218#233#216#197#253#169#130'N{'#255#255#255#0#255#255#255#0 - +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 - +#255#255#0#255#255#255#0#255#255#255#0#175#135'P|'#231#213#193#255#149'e'#31 - +'+'#143'\'#18#27#197#167#131#231#213#188#157#225#181#147'db'#255#255#255#0 - +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 - +#255#255#0#255#255#255#0#255#255#255#0#172#131'Ku'#222#201#175#255#149'd'#29 - +#31#255#255#255#0#146'`'#23'&'#195#164'|'#235#181#144'c'#203#255#255#255#0 - +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 - +#255#255#0#255#255#255#0#255#255#255#0#170#129'Go'#214#189#159#247#147'a'#25 - +#16#255#255#255#0#255#255#255#0#150'f ,'#169#128'K'#203#255#255#255#0#255#255 - +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 - +#255#255#255#0#255#255#255#0#168'}Bi'#204#176#139#224#145']'#20#9#255#255#255 - +#0#255#255#255#0#255#255#255#0#146'`'#23#6#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#3#13#140#31#27'&'#167#153'*4'#186#204#17#28#157#137 + +#187#152'i'#204#240#224#208#255#183#145'_'#197#143']'#20#11#255#255#255#0#255 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 - +#255#0#255#255#255#0#154'k''1'#170'~C'#161#146'`'#24#5#255#255#255#0#255#255 - +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#7'OnClick'#7 - +#16'ActionCutExecute'#0#0#9'TMenuItem'#13'PopupItemCopy'#6'Action'#7#10'Acti' - +'onCopy'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'(' - +#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0 - +#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 - +#255#255#255#0#197'sB'#193#198'uE'#230#200'uE'#254#199'uE'#243#200'uE'#243 - +#199'uE'#243#199'uE'#243#200'uF'#244#197'tD'#232#202#127'S'#241#255#255#255#0 - +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#199'y' - ,'I'#237#252#243#236#255#250#241#232#255#250#240#231#255#251#241#233#255#251 - +#242#234#255#251#242#234#255#251#242#235#255#253#244#238#255#202#128'T'#249 - +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 - +#255#255#0#207#130'S'#255#239#241#231#255#255#233#217#255#255#234#219#255#255 - +#233#217#255#255#231#215#255#255#229#210#255#255#226#203#255#239#242#232#255 - +#206#129'V'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 - +#255#255#0#255#255#255#0#204#131'R'#251#251#245#238#255#255#233#217#255#255 - +#234#219#255#255#233#217#255#255#231#215#255#255#229#210#255#255#226#203#255 - +#251#246#239#255#204#131'U'#254#199'yJ'#185#200'yK'#206#200'uE'#221#199'uE' - +#212#200'uE'#212#199'uE'#212#202#132'R'#255#255#247#241#255#255#233#217#255 - +#255#234#219#255#255#233#217#255#255#231#215#255#255#229#210#255#255#226#203 - +#255#255#247#241#255#203#133'U'#254#200'|N'#211#252#243#236#222#250#241#232 - +#222#250#240#231#222#251#241#233#222#251#242#234#222#228#186#145#255#255#247 - +#240#255#255#231#213#255#253#231#214#255#253#230#212#255#252#228#208#255#251 - +#227#203#255#250#220#194#255#254#243#232#255#204#134'V'#254#207#130'S'#222 - +#239#241#231#222#255#233#217#222#255#234#219#222#255#233#217#222#255#231#215 - +#222#228#187#145#255#255#247#242#255#254#231#213#255#254#231#213#255#253#229 - +#209#255#250#224#202#255#249#222#196#255#247#217#188#255#253#242#231#255#204 - +#135'W'#254#204#131'R'#219#251#245#238#222#255#233#217#222#255#234#219#222 - +#255#233#217#222#255#231#215#222#228#187#146#255#254#247#241#255#252#229#210 - +#255#252#228#209#255#251#226#204#255#249#221#196#255#246#215#187#255#243#209 - +#175#255#250#239#228#255#204#135'X'#254#202#132'R'#219#255#247#241#222#255 - +#233#217#222#255#234#219#222#255#233#217#222#255#231#215#222#228#187#146#255 - +#254#246#240#255#252#226#205#255#252#227#205#255#250#223#200#255#247#217#188 - +#255#245#233#221#255#250#243#235#255#251#248#243#255#202#131'S'#254#203#133 - +'S'#219#255#247#240#222#255#231#213#222#253#231#214#222#253#230#212#222#252 - +#228#208#222#228#187#147#255#254#245#237#255#252#222#197#255#251#224#199#255 - +#249#220#194#255#245#211#180#255#254#249#243#255#250#226#196#255#236#193#147 - +#255#195'}H'#147#203#134'T'#219#255#247#242#222#254#231#213#222#254#231#213 - +#222#253#229#209#222#250#224#202#222#229#190#150#255#255#255#254#255#253#243 - +#233#255#253#243#234#255#252#242#232#255#250#239#227#255#250#242#231#255#234 - +#187#136#255#207#133'U'#179#180'i='#12#203#134'U'#219#254#247#241#222#252#229 - +#210#222#252#228#209#222#251#226#204#222#249#221#196#222#234#195#157#255#230 - +#191#150#255#228#187#146#255#228#187#146#255#209#160'l'#245#208#158'm'#246 - +#204#150'_'#218#196'yB~'#178'g<'#9#255#255#255#0#203#134'U'#219#254#246#240 - +#222#252#226#205#222#252#227#205#222#250#223#200#222#247#217#188#222#245#233 - +#221#222#250#243#235#222#251#248#243#222#205#149'e'#220#255#255#255#0#255#255 - +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#203#134'V'#218 - +#254#245#237#222#252#222#197#222#251#224#199#222#249#220#194#222#245#211#180 - +#222#254#249#243#222#250#226#196#222#236#193#147#222#195'}H'#128#255#255#255 - +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#202 - +#133'T'#208#255#255#255#219#253#243#233#222#253#243#234#222#252#242#232#222 - +#250#239#227#222#250#242#231#222#234#187#136#222#207#133'U'#156#180'i='#10 - +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 - +#255#255#0#199'yG'#170#204#134'U'#206#204#136'W'#222#203#136'V'#219#204#136 - +'V'#219#203#135'W'#219#202#131'P'#208#196'yBn'#178'g<'#8#255#255#255#0#255 - +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 - +#255#0#7'OnClick'#7#17'ActionCopyExecute'#0#0#9'TMenuItem'#14'PopupItemPaste' - +#6'Action'#7#11'ActionPaste'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0 - +#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0 - +#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 - +#255#0#255#255#255#0'^^^'#2'[[[wXXX'#138'UUU'#138'RRR'#138'OOO'#138'LLL'#138 - +'JJJ'#138'HHH'#138'FFF'#138'DDDf c'#152'J c'#152#207' c'#152#255' c'#152#255 - +' c'#152#255'$c'#149#255'Xs'#136#255#247#247#247#255#240#240#240#255#240#240 - +#240#255#240#240#240#255#240#240#240#255#240#240#240#255#240#240#240#255#243 - +#243#243#250'FFF'#132' c'#152#194'b'#165#215#255'e'#168#218#255'd'#166#217 - +#255'b'#164#216#255'b'#159#209#255'u'#142#164#255#239#239#239#255#231#231#231 - +#255#231#231#231#255#231#231#231#255#231#231#231#255#230#230#230#255#230#230 - +#230#255#236#236#236#250'III'#132' c'#152#255'h'#171#220#255'H'#142#207#255 - +'F'#139#206#255'C'#135#205#255'D'#132#198#255'h'#133#161#255#240#240#240#255 - +#180#180#180#255#180#180#180#255#180#180#180#255#180#180#180#255#180#180#180 - +#255#179#179#179#255#237#237#237#250'LLL'#132' c'#152#255'i'#174#220#255'J' - +#147#209#255'H'#143#208#255'F'#139#206#255'G'#136#199#255'l'#136#163#255#240 - +#240#240#255#232#232#232#255#232#232#232#255#231#231#231#255#231#231#231#255 - ,#231#231#231#255#231#231#231#255#237#237#237#250'OOO'#132' c'#152#255'k'#177 - +#222#255'M'#151#211#255'K'#147#210#255'H'#143#208#255'J'#140#201#255'o'#139 - +#165#255#241#241#241#255#182#182#182#255#181#181#181#255#181#181#181#255#180 - +#180#180#255#180#180#180#255#180#180#180#255#237#237#237#250'SSS'#132' c'#152 - +#255'm'#179#223#255'P'#156#213#255'N'#152#211#255'K'#148#209#255'L'#145#203 - +#255'p'#142#167#255#241#241#241#255#233#233#233#255#233#233#233#255#232#232 - +#232#255#232#232#232#255#232#232#232#255#231#231#231#255#237#237#237#250'VVV' - +#132' c'#152#255'p'#181#224#255'R'#159#215#255'P'#156#214#255'N'#152#212#255 - +'O'#149#205#255's'#145#170#255#241#241#241#255#183#183#183#255#182#182#182 - +#255#182#182#182#255#182#182#182#255#181#181#181#255#181#181#181#255#238#238 - +#238#250'ZZZ'#132' c'#152#255's'#183#225#255'W'#163#215#255'S'#160#215#255'P' - +#157#213#255'R'#153#207#255'u'#148#172#255#248#248#248#255#242#242#242#255 - +#242#242#242#255#242#242#242#255#242#242#242#255#242#242#242#255#241#241#241 - +#255#244#244#244#250'^^^'#132' c'#152#255'v'#185#226#255'\'#167#217#255'X' - +#164#216#255'S'#160#215#255'S'#158#213#255'a'#139#169#255'd'#136#161#255'd' - +#135#161#255'c'#134#160#255'i'#135#159#255'Jh'#129#255'jjj'#138'hhh'#138'eee' - +#138'bbbc c'#152#255'z'#187#227#255'a'#170#219#255'Z'#165#217#255'S'#160#215 - +#255'R'#159#215#255'R'#159#215#255'R'#159#215#255'R'#159#215#255'R'#159#215 - +#255'b'#163#216#255' c'#152#255#255#255#255#0#255#255#255#0#255#255#255#0#255 - +#255#255#0' c'#152#255'|'#189#228#255'e'#174#221#255'b'#171#220#255'^'#168 - +#218#255'\'#167#217#255'\'#167#217#255'\'#167#217#255'\'#167#217#255'R'#159 - +#215#255'b'#163#216#255' c'#152#255#255#255#255#0#255#255#255#0#255#255#255#0 - +#255#255#255#0' c'#152#255#127#191#228#255'i'#178#222#255'J'#155#218#255'D' - +#151#220#255'C'#150#220#255'B'#150#220#255'B'#149#220#255'A'#149#219#255'Q' - +#158#214#255'l'#178#222#255' c'#152#255#255#255#255#0#255#255#255#0#255#255 - +#255#0#255#255#255#0' c'#152#224'q'#179#219#254'~'#191#228#255'N'#157#223#255 - +#181#238#253#255'u'#212#240#255'u'#212#240#255#181#238#253#255'K'#155#222#255 - +'n'#180#224#255'm'#179#223#249' c'#152#243#255#255#255#0#255#255#255#0#255 - +#255#255#0#255#255#255#0' c'#152'2 c'#152#178' c'#152#255'7u'#164#255#182#239 - +#254#255#128#219#243#255#128#219#243#255#182#239#254#255'.n'#161#255' c'#152 - +#255' c'#152#165' c'#152'S'#255#255#255#0#255#255#255#0#255#255#255#0#255#255 - +#255#0#255#255#255#0#255#255#255#0' c'#152'* c'#152#255' c'#152#255' c'#152 - +#255' c'#152#255' c'#152#255' c'#152#240#255#255#255#0#255#255#255#0#255#255 - +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#7'OnClick'#7 - +#18'ActionPasteExecute'#0#0#9'TMenuItem'#15'PopupItemDelete'#6'Action'#7#12 - +'ActionDelete'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0 - +#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0 - +#0#0#0#0#0#0#255#255#255#0#255#255#255#0#0#0#0#6#0#0#0#14#0#0#0#22#0#0#0#30#0 - +#0#0'%'#0#0#0'*'#0#0#0'+'#0#0#0')'#0#0#0'$'#0#0#0#29#0#0#0#21#0#0#0#13#0#0#0 - +#4#255#255#255#0#255#255#255#0#255#255#255#0#0#0#255#1#0#0#211'F'#255#255#255 - +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 - +#255#255#0#255#255#255#0#0#0#211'F'#0#0#255#1#255#255#255#0#255#255#255#0#255 - +#255#255#0#0#0#255#1#0#0#206#150#0#0#206#255#0#0#206'x'#255#255#255#0#255#255 - +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#0#0#206'x'#0#0 - +#207#255#0#0#207#150#0#0#255#1#255#255#255#0#255#255#255#0#0#0#200'F'#0#0#200 - +#255#0#0#200#255#0#0#201#255#0#0#202'x'#255#255#255#0#255#255#255#0#255#255 - +#255#0#255#255#255#0#0#0#202'x'#0#0#201#255#0#0#201#255#0#0#201#255#0#0#200 - +'F'#255#255#255#0#255#255#255#0#255#255#255#0#0#0#193'x'#0#0#195#255#0#0#195 - +#255#0#0#195#255#0#0#196'x'#255#255#255#0#255#255#255#0#0#0#196'x'#0#0#195 - +#255#0#0#195#255#0#0#195#255#0#0#196'x'#255#255#255#0#255#255#255#0#255#255 - +#255#0#255#255#255#0#255#255#255#0#0#0#189'x'#0#0#189#255#0#0#189#255#0#0#189 - +#255#0#0#189'x'#0#0#189'x'#0#0#189#255#0#0#189#255#0#0#189#255#0#0#189'x'#255 - +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 - +#255#0#255#255#255#0#0#0#183'x'#0#0#183#255#0#0#183#255#0#0#183#255#0#0#183 - +#255#0#0#183#255#0#0#183#255#0#0#183'x'#255#255#255#0#255#255#255#0#255#255 - +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 - +#255#255#255#0#0#0#176'x'#0#0#177#255#0#0#177#255#0#0#177#255#0#0#177#255#0#0 - +#179'x'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 - +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#0#0 - +#170'x'#0#0#171#255#0#0#171#255#0#0#171#255#0#0#172#255#0#0#172'x'#255#255 - +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 - +#255#255#255#0#255#255#255#0#255#255#255#0#0#0#166'x'#0#0#165#255#0#0#165#255 - +#0#0#165#255#0#0#166#255#0#0#166#255#0#0#166#255#0#0#166'x'#255#255#255#0#255 - +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 - ,#255#0#0#0#159'x'#0#0#159#255#0#0#159#255#0#0#159#255#0#0#159'x'#0#0#159'x'#0 - +#0#160#255#0#0#160#255#0#0#160#255#0#0#159'x'#255#255#255#0#255#255#255#0#255 - +#255#255#0#255#255#255#0#255#255#255#0#0#0#153'x'#0#0#153#255#0#0#153#255#0#0 - +#153#255#0#0#153'x'#255#255#255#0#255#255#255#0#0#0#153'x'#0#0#154#255#0#0 - +#154#255#0#0#154#255#0#0#153'x'#255#255#255#0#255#255#255#0#255#255#255#0#0#0 - +#146'F'#0#0#147#255#0#0#147#255#0#0#147#255#0#0#149'x'#255#255#255#0#255#255 - +#255#0#255#255#255#0#255#255#255#0#0#0#149'x'#0#0#148#255#0#0#148#255#0#0#148 - +#255#0#0#149'F'#255#255#255#0#255#255#255#0#0#0#255#1#0#0#141#150#0#0#141#255 - +#0#0#142'x'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 - +#255#0#255#255#255#0#0#0#142'x'#0#0#142#255#0#0#143#150#0#0#255#1#255#255#255 - +#0#255#255#255#0#255#255#255#0#0#0#255#1#0#0#135'F'#255#255#255#0#255#255#255 - +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 - +#255#255#0#0#0#135'F'#0#0#255#1#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#0#11#136#2#255#255#255#0#180 + +#142'Z'#144#246#234#221#255#225#205#180#255#177#141']'#191#255#255#255#0#255 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 - +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#7'OnClick'#7#19'Act' - +'ionDeleteExecute'#0#0#9'TMenuItem'#17'PopupItemDivider2'#7'Caption'#6#1'-'#0 - +#0#9'TMenuItem'#18'PopupItemSelectAll'#6'Action'#7#15'ActionSelectAll'#7'OnC' - +'lick'#7#22'ActionSelectAllExecute'#0#0#9'TMenuItem'#17'PopupItemDivider3'#7 - +'Caption'#6#1'-'#0#0#9'TMenuItem'#13'PopupItemFind'#6'Action'#7#14'ActionFin' - +'dNext'#7'OnClick'#7#21'ActionFindNextExecute'#0#0#9'TMenuItem'#16'PopupItem' - +'Replace'#6'Action'#7#13'ActionReplace'#7'Caption'#6#7'Replace'#7'OnClick'#7 - +#20'ActionReplaceExecute'#0#0#0#14'TReplaceDialog'#10'dlgReplace'#7'Options' - +#11#6'frDown'#10'frFindNext'#12'frHideUpDown'#0#6'OnFind'#7#14'dlgReplaceFin' - +'d'#9'OnReplace'#7#17'dlgReplaceReplace'#4'left'#3'`'#2#3'top'#2'h'#0#0#6'TT' - +'imer'#11'UpdateTimer'#8'Interval'#3#16''''#4'left'#3'`'#2#3'top'#3#144#0#0#0 - +#6'TTimer'#10'MouseTimer'#8'Interval'#2'd'#7'OnTimer'#7#17'ChangeMouseStatus' - +#4'left'#3#192#1#3'top'#3#200#0#0#0#6'TTimer'#9'NewsTimer'#8'Interval'#3#244 - +#1#7'OnTimer'#7#14'NewsTimerTimer'#4'left'#3#232#1#3'top'#3#200#0#0#0#0 + +#179#140'W'#137#241#226#212#255#206#178#142#244#245#235#224#255#166#127'J' + +#157#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#177#137'S'#132#238#223#206#255#151'f e'#194#163'|'#218#233#216#197 + +#253#169#130'N{'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#175#135'P|'#231#213#193#255#149'e'#31'+'#143'\'#18#27#197#167#131#231 + +#213#188#157#225#181#147'db'#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#172#131'Ku'#222#201#175#255#149'd'#29#31#255#255#255#0#146'`'#23'&' + +#195#164'|'#235#181#144'c'#203#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#170#129'Go'#214#189#159#247#147'a'#25#16#255#255#255#0#255#255#255#0 + +#150'f ,'#169#128'K'#203#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#168'}Bi'#204#176#139#224#145']'#20#9#255#255#255#0#255#255#255#0#255#255#255 + +#0#146'`'#23#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#154'k''1' + +#170'~C'#161#146'`'#24#5#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#7'OnClick'#7#16'ActionCutExecute'#0#0#9'T' + +'MenuItem'#13'PopupItemCopy'#6'Action'#7#10'ActionCopy'#11'Bitmap.Data'#10':' + +#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' ' + +#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#197'sB'#193 + +#198'uE'#230#200'uE'#254#199'uE'#243#200'uE'#243#199'uE'#243#199'uE'#243#200 + +'uF'#244#197'tD'#232#202#127'S'#241#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#199'yI'#237#252#243#236#255#250 + +#241#232#255#250#240#231#255#251#241#233#255#251#242#234#255#251#242#234#255 + +#251#242#235#255#253#244#238#255#202#128'T'#249#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#207#130'S'#255#239 + +#241#231#255#255#233#217#255#255#234#219#255#255#233#217#255#255#231#215#255 + +#255#229#210#255#255#226#203#255#239#242#232#255#206#129'V'#255#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#204 + +#131'R'#251#251#245#238#255#255#233#217#255#255#234#219#255#255#233#217#255 + +#255#231#215#255#255#229#210#255#255#226#203#255#251#246#239#255#204#131'U' + +#254#199'yJ'#185#200'yK'#206#200'uE'#221#199'uE'#212#200'uE'#212#199'uE'#212 + +#202#132'R'#255#255#247#241#255#255#233#217#255#255#234#219#255#255#233#217 + +#255#255#231#215#255#255#229#210#255#255#226#203#255#255#247#241#255#203#133 + +'U'#254#200'|N'#211#252#243#236#222#250#241#232#222#250#240#231#222#251#241 + +#233#222#251#242#234#222#228#186#145#255#255#247#240#255#255#231#213#255#253 + +#231#214#255#253#230#212#255#252#228#208#255#251#227#203#255#250#220#194#255 + +#254#243#232#255#204#134'V'#254#207#130'S'#222#239#241#231#222#255#233#217 + +#222#255#234#219#222#255#233#217#222#255#231#215#222#228#187#145#255#255#247 + +#242#255#254#231#213#255#254#231#213#255#253#229#209#255#250#224#202#255#249 + +#222#196#255#247#217#188#255#253#242#231#255#204#135'W'#254#204#131'R'#219 + +#251#245#238#222#255#233#217#222#255#234#219#222#255#233#217#222#255#231#215 + +#222#228#187#146#255#254#247#241#255#252#229#210#255#252#228#209#255#251#226 + +#204#255#249#221#196#255#246#215#187#255#243#209#175#255#250#239#228#255#204 + +#135'X'#254#202#132'R'#219#255#247#241#222#255#233#217#222#255#234#219#222 + +#255#233#217#222#255#231#215#222#228#187#146#255#254#246#240#255#252#226#205 + +#255#252#227#205#255#250#223#200#255#247#217#188#255#245#233#221#255#250#243 + +#235#255#251#248#243#255#202#131'S'#254#203#133'S'#219#255#247#240#222#255 + +#231#213#222#253#231#214#222#253#230#212#222#252#228#208#222#228#187#147#255 + ,#254#245#237#255#252#222#197#255#251#224#199#255#249#220#194#255#245#211#180 + +#255#254#249#243#255#250#226#196#255#236#193#147#255#195'}H'#147#203#134'T' + +#219#255#247#242#222#254#231#213#222#254#231#213#222#253#229#209#222#250#224 + +#202#222#229#190#150#255#255#255#254#255#253#243#233#255#253#243#234#255#252 + +#242#232#255#250#239#227#255#250#242#231#255#234#187#136#255#207#133'U'#179 + +#180'i='#12#203#134'U'#219#254#247#241#222#252#229#210#222#252#228#209#222 + +#251#226#204#222#249#221#196#222#234#195#157#255#230#191#150#255#228#187#146 + +#255#228#187#146#255#209#160'l'#245#208#158'm'#246#204#150'_'#218#196'yB~' + +#178'g<'#9#255#255#255#0#203#134'U'#219#254#246#240#222#252#226#205#222#252 + +#227#205#222#250#223#200#222#247#217#188#222#245#233#221#222#250#243#235#222 + +#251#248#243#222#205#149'e'#220#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#203#134'V'#218#254#245#237#222#252#222 + +#197#222#251#224#199#222#249#220#194#222#245#211#180#222#254#249#243#222#250 + +#226#196#222#236#193#147#222#195'}H'#128#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#202#133'T'#208#255#255#255 + +#219#253#243#233#222#253#243#234#222#252#242#232#222#250#239#227#222#250#242 + +#231#222#234#187#136#222#207#133'U'#156#180'i='#10#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#199'yG'#170#204 + +#134'U'#206#204#136'W'#222#203#136'V'#219#204#136'V'#219#203#135'W'#219#202 + +#131'P'#208#196'yBn'#178'g<'#8#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#7'OnClick'#7#17'ActionC' + +'opyExecute'#0#0#9'TMenuItem'#14'PopupItemPaste'#6'Action'#7#11'ActionPaste' + +#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16 + +#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'^^^'#2 + +'[[[wXXX'#138'UUU'#138'RRR'#138'OOO'#138'LLL'#138'JJJ'#138'HHH'#138'FFF'#138 + +'DDDf c'#152'J c'#152#207' c'#152#255' c'#152#255' c'#152#255'$c'#149#255'Xs' + +#136#255#247#247#247#255#240#240#240#255#240#240#240#255#240#240#240#255#240 + +#240#240#255#240#240#240#255#240#240#240#255#243#243#243#250'FFF'#132' c'#152 + +#194'b'#165#215#255'e'#168#218#255'd'#166#217#255'b'#164#216#255'b'#159#209 + +#255'u'#142#164#255#239#239#239#255#231#231#231#255#231#231#231#255#231#231 + +#231#255#231#231#231#255#230#230#230#255#230#230#230#255#236#236#236#250'III' + +#132' c'#152#255'h'#171#220#255'H'#142#207#255'F'#139#206#255'C'#135#205#255 + +'D'#132#198#255'h'#133#161#255#240#240#240#255#180#180#180#255#180#180#180 + +#255#180#180#180#255#180#180#180#255#180#180#180#255#179#179#179#255#237#237 + +#237#250'LLL'#132' c'#152#255'i'#174#220#255'J'#147#209#255'H'#143#208#255'F' + +#139#206#255'G'#136#199#255'l'#136#163#255#240#240#240#255#232#232#232#255 + +#232#232#232#255#231#231#231#255#231#231#231#255#231#231#231#255#231#231#231 + +#255#237#237#237#250'OOO'#132' c'#152#255'k'#177#222#255'M'#151#211#255'K' + +#147#210#255'H'#143#208#255'J'#140#201#255'o'#139#165#255#241#241#241#255#182 + +#182#182#255#181#181#181#255#181#181#181#255#180#180#180#255#180#180#180#255 + +#180#180#180#255#237#237#237#250'SSS'#132' c'#152#255'm'#179#223#255'P'#156 + +#213#255'N'#152#211#255'K'#148#209#255'L'#145#203#255'p'#142#167#255#241#241 + +#241#255#233#233#233#255#233#233#233#255#232#232#232#255#232#232#232#255#232 + +#232#232#255#231#231#231#255#237#237#237#250'VVV'#132' c'#152#255'p'#181#224 + +#255'R'#159#215#255'P'#156#214#255'N'#152#212#255'O'#149#205#255's'#145#170 + +#255#241#241#241#255#183#183#183#255#182#182#182#255#182#182#182#255#182#182 + +#182#255#181#181#181#255#181#181#181#255#238#238#238#250'ZZZ'#132' c'#152#255 + +'s'#183#225#255'W'#163#215#255'S'#160#215#255'P'#157#213#255'R'#153#207#255 + +'u'#148#172#255#248#248#248#255#242#242#242#255#242#242#242#255#242#242#242 + +#255#242#242#242#255#242#242#242#255#241#241#241#255#244#244#244#250'^^^'#132 + +' c'#152#255'v'#185#226#255'\'#167#217#255'X'#164#216#255'S'#160#215#255'S' + +#158#213#255'a'#139#169#255'd'#136#161#255'd'#135#161#255'c'#134#160#255'i' + +#135#159#255'Jh'#129#255'jjj'#138'hhh'#138'eee'#138'bbbc c'#152#255'z'#187 + +#227#255'a'#170#219#255'Z'#165#217#255'S'#160#215#255'R'#159#215#255'R'#159 + +#215#255'R'#159#215#255'R'#159#215#255'R'#159#215#255'b'#163#216#255' c'#152 + +#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0' c'#152#255'|' + +#189#228#255'e'#174#221#255'b'#171#220#255'^'#168#218#255'\'#167#217#255'\' + +#167#217#255'\'#167#217#255'\'#167#217#255'R'#159#215#255'b'#163#216#255' c' + +#152#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0' c'#152#255 + +#127#191#228#255'i'#178#222#255'J'#155#218#255'D'#151#220#255'C'#150#220#255 + +'B'#150#220#255'B'#149#220#255'A'#149#219#255'Q'#158#214#255'l'#178#222#255 + +' c'#152#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0' c'#152 + +#224'q'#179#219#254'~'#191#228#255'N'#157#223#255#181#238#253#255'u'#212#240 + ,#255'u'#212#240#255#181#238#253#255'K'#155#222#255'n'#180#224#255'm'#179#223 + +#249' c'#152#243#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0' c' + +#152'2 c'#152#178' c'#152#255'7u'#164#255#182#239#254#255#128#219#243#255#128 + +#219#243#255#182#239#254#255'.n'#161#255' c'#152#255' c'#152#165' c'#152'S' + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0' c'#152'* c'#152#255' c'#152#255' c'#152#255' c'#152#255' c'#152 + +#255' c'#152#240#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#7'OnClick'#7#18'ActionPasteExecute'#0 + +#0#9'TMenuItem'#15'PopupItemDelete'#6'Action'#7#12'ActionDelete'#11'Bitmap.D' + +'ata'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0 + +#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0 + +#255#255#255#0#0#0#0#6#0#0#0#14#0#0#0#22#0#0#0#30#0#0#0'%'#0#0#0'*'#0#0#0'+' + +#0#0#0')'#0#0#0'$'#0#0#0#29#0#0#0#21#0#0#0#13#0#0#0#4#255#255#255#0#255#255 + +#255#0#255#255#255#0#0#0#255#1#0#0#211'F'#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#0#0#211'F'#0#0#255#1#255#255#255#0#255#255#255#0#255#255#255#0#0#0#255#1#0#0 + +#206#150#0#0#206#255#0#0#206'x'#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#0#0#206'x'#0#0#207#255#0#0#207#150#0#0 + +#255#1#255#255#255#0#255#255#255#0#0#0#200'F'#0#0#200#255#0#0#200#255#0#0#201 + +#255#0#0#202'x'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#0#0 + +#202'x'#0#0#201#255#0#0#201#255#0#0#201#255#0#0#200'F'#255#255#255#0#255#255 + +#255#0#255#255#255#0#0#0#193'x'#0#0#195#255#0#0#195#255#0#0#195#255#0#0#196 + +'x'#255#255#255#0#255#255#255#0#0#0#196'x'#0#0#195#255#0#0#195#255#0#0#195 + +#255#0#0#196'x'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#0#0#189'x'#0#0#189#255#0#0#189#255#0#0#189#255#0#0#189'x'#0#0#189 + +'x'#0#0#189#255#0#0#189#255#0#0#189#255#0#0#189'x'#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#0#0 + +#183'x'#0#0#183#255#0#0#183#255#0#0#183#255#0#0#183#255#0#0#183#255#0#0#183 + +#255#0#0#183'x'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#0#0#176'x' + +#0#0#177#255#0#0#177#255#0#0#177#255#0#0#177#255#0#0#179'x'#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#0#0#170'x'#0#0#171#255#0#0 + +#171#255#0#0#171#255#0#0#172#255#0#0#172'x'#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#0#0#166'x'#0#0#165#255#0#0#165#255#0#0#165#255#0#0#166 + +#255#0#0#166#255#0#0#166#255#0#0#166'x'#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#0#0#159'x'#0#0 + +#159#255#0#0#159#255#0#0#159#255#0#0#159'x'#0#0#159'x'#0#0#160#255#0#0#160 + +#255#0#0#160#255#0#0#159'x'#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#0#0#153'x'#0#0#153#255#0#0#153#255#0#0#153#255#0#0#153 + +'x'#255#255#255#0#255#255#255#0#0#0#153'x'#0#0#154#255#0#0#154#255#0#0#154 + +#255#0#0#153'x'#255#255#255#0#255#255#255#0#255#255#255#0#0#0#146'F'#0#0#147 + +#255#0#0#147#255#0#0#147#255#0#0#149'x'#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#0#0#149'x'#0#0#148#255#0#0#148#255#0#0#148#255#0#0#149 + +'F'#255#255#255#0#255#255#255#0#0#0#255#1#0#0#141#150#0#0#141#255#0#0#142'x' + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#0#0#142'x'#0#0#142#255#0#0#143#150#0#0#255#1#255#255#255#0#255#255 + +#255#0#255#255#255#0#0#0#255#1#0#0#135'F'#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#0#0#135'F'#0#0#255#1#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#7'OnClick'#7#19'ActionDelet' + +'eExecute'#0#0#9'TMenuItem'#17'PopupItemDivider2'#7'Caption'#6#1'-'#0#0#9'TM' + +'enuItem'#18'PopupItemSelectAll'#6'Action'#7#15'ActionSelectAll'#7'OnClick'#7 + +#22'ActionSelectAllExecute'#0#0#9'TMenuItem'#17'PopupItemDivider3'#7'Caption' + +#6#1'-'#0#0#9'TMenuItem'#13'PopupItemFind'#6'Action'#7#14'ActionFindNext'#7 + +'OnClick'#7#21'ActionFindNextExecute'#0#0#9'TMenuItem'#16'PopupItemReplace'#6 + +'Action'#7#13'ActionReplace'#7'Caption'#6#7'Replace'#7'OnClick'#7#20'ActionR' + +'eplaceExecute'#0#0#0#14'TReplaceDialog'#10'dlgReplace'#7'Options'#11#6'frDo' + +'wn'#10'frFindNext'#12'frHideUpDown'#0#6'OnFind'#7#14'dlgReplaceFind'#9'OnRe' + +'place'#7#17'dlgReplaceReplace'#4'left'#3'`'#2#3'top'#2'h'#0#0#6'TTimer'#11 + +'UpdateTimer'#8'Interval'#3#16''''#4'left'#3'`'#2#3'top'#3#144#0#0#0#6'TTime' + ,'r'#10'MouseTimer'#8'Interval'#2'd'#7'OnTimer'#7#17'ChangeMouseStatus'#4'lef' + +'t'#3#192#1#3'top'#3#200#0#0#0#6'TTimer'#9'NewsTimer'#8'Interval'#3#244#1#7 + +'OnTimer'#7#14'NewsTimerTimer'#4'left'#3#232#1#3'top'#3#200#0#0#0#0 ]); diff --git a/trunk/Projects/SAMufasaGUI/testunit.pas b/trunk/Projects/SAMufasaGUI/testunit.pas index d6a7b80..6716275 100644 --- a/trunk/Projects/SAMufasaGUI/testunit.pas +++ b/trunk/Projects/SAMufasaGUI/testunit.pas @@ -40,11 +40,11 @@ uses colourpicker, framescript, windowselector, lcltype, ActnList, SynExportHTML, SynEditKeyCmds, SynEditHighlighter, SynEditMarkupHighAll, LMessages, Buttons, - stringutil,mufasatypesutil, + stringutil,mufasatypesutil,mufasabase, about, framefunctionlist, ocr, updateform, simbasettings; const - SimbaVersion = 579; + SimbaVersion = 581; type @@ -65,6 +65,7 @@ type { TForm1 } TForm1 = class(TForm) + ActionConsole: TAction; ActionNormalSize: TAction; ActionCompileScript: TAction; ActionExit: TAction; @@ -112,6 +113,7 @@ type MenuItemDivider9: TMenuItem; MouseTimer: TTimer; NewsTimer: TTimer; + TT_Console: TToolButton; TT_Cut: TToolButton; TT_Copy: TToolButton; TT_Paste: TToolButton; @@ -214,6 +216,7 @@ type procedure ActionClearDebugExecute(Sender: TObject); procedure ActionCloseTabExecute(Sender: TObject); procedure ActionCompileScriptExecute(Sender: TObject); + procedure ActionConsoleExecute(Sender: TObject); procedure ActionCopyExecute(Sender: TObject); procedure ActionCutExecute(Sender: TObject); procedure ActionDeleteExecute(Sender: TObject); @@ -330,6 +333,10 @@ type OCR_Fonts: TMOCR; Picker: TMColorPicker; Selector: TMWindowSelector; + {$ifdef mswindows} + ConsoleVisible : boolean; + procedure ShowConsole( ShowIt : boolean); + {$endif} procedure FunctionListShown( ShowIt : boolean); property ScriptState : TScriptState read GetScriptState write SetScriptState; procedure SafeCallThread; @@ -357,10 +364,12 @@ type procedure AddRecentFile(filename : string); procedure InitalizeTMThread(var Thread : TMThread); procedure HandleParameters; + procedure OnSaveScript(const Filename : string); end; procedure ClearDebug; procedure formWriteln( S : String); + procedure formWritelnEx( S : String); function GetMethodName( Decl : string; PlusNextChar : boolean) : string; const @@ -388,7 +397,13 @@ uses colourhistory, math; -//{$ifdef mswindows} +{$ifdef mswindows} +function ConsoleHandler( eventType : DWord) : WINBOOL;stdcall; +begin + TThread.Synchronize(nil,@Form1.Close); + Result := true; +end; +{$endif} var DebugCriticalSection: syncobjs.TCriticalSection; @@ -506,18 +521,24 @@ procedure TForm1.UpdateTimerCheck(Sender: TObject); var chk: String; time:integer; + LatestVersion : integer; begin chk := LoadSettingDef('Settings/Updater/CheckForUpdates','True'); if chk <> 'True' then Exit; - if SimbaUpdateForm.CanUpdate then + LatestVersion:= SimbaUpdateForm.GetLatestSimbaVersion; + if LatestVersion > SimbaVersion then begin; TT_Update.Visible:=True; - formWriteln('A new update of Simba is available!'); + formWritelnEx('A new update of Simba is available!'); + formWritelnEx(format('Current version is %d. Latest version is %d',[SimbaVersion,LatestVersion])); + end else + begin + mDebugLn(format('Current Simba version: %d',[SimbaVersion])); + mDebugLn('Latest Simba Version: ' + IntToStr(LatestVersion)); end; - time := StrToIntDef(LoadSettingDef('Settings/Updater/CheckEveryXMinutes','30'),30); UpdateTimer.Interval:= time {mins} * 60 {secs} * 1000 {ms};//Every half hour end; @@ -537,7 +558,7 @@ end; procedure formWriteln( S : String); begin - writeln('formWriteln: ' + s); + mDebugLn('formWriteln: ' + s); {$ifdef MSWindows} //Ha, we cán acces the debugmemo Form1.Memo1.Lines.Add(s); @@ -566,7 +587,7 @@ begin end else if ScriptState <> ss_None then begin; - Writeln('The script hasn''t stopped yet, so we cannot start a new one.'); + FormWritelnEx('The script hasn''t stopped yet, so we cannot start a new one.'); exit; end; InitalizeTMThread(scriptthread); @@ -589,7 +610,7 @@ begin ScriptThread.Suspended:= True; ScriptState:= ss_Paused; {$else} - Writeln('Linux users are screwed, no pause button for u!'); + mDebugLn('Linux users are screwed, no pause button for u!'); {$endif} end else if ScriptState = ss_Paused then begin; @@ -606,8 +627,8 @@ begin case ScriptState of ss_Stopping: begin //Terminate the thread the tough way. - writeln('Terminating the Scriptthread'); - Writeln('Exit code terminate: ' +inttostr(KillThread(ScriptThread.Handle))); + mDebugLn('Terminating the Scriptthread'); + mDebugLn('Exit code terminate: ' +inttostr(KillThread(ScriptThread.Handle))); WaitForThreadTerminate(ScriptThread.Handle, 0); ScriptThread.Free; ScriptState := ss_None; @@ -771,7 +792,7 @@ begin end else begin - Writeln('Searching: ' + SearchString); + mDebugLn('Searching: ' + SearchString); if next then CurrPos := CurrScript.SynEdit.LogicalCaretXY else @@ -782,7 +803,7 @@ begin res := CurrScript.SynEdit.SearchReplaceEx(SearchString,'',SearchOptions,Classes.Point(0,0)); if res > 0 then begin; - Writeln('End of document reached'); + mDebugLn('End of document reached'); SearchStart.x := 0; SearchStart.Y := CurrScript.SynEdit.LogicalCaretXY.y; end; @@ -818,7 +839,7 @@ var begin if tabs.Count < 1 then begin; - Writeln('Cannot refresh tab, since there are no tabs.'); + mDebugLn('Cannot refresh tab, since there are no tabs.'); exit; end; NewTab := PageControl1.TabIndex; @@ -840,7 +861,8 @@ begin SetScriptState(Tab.ScriptFrame.FScriptState);//To set the buttons right if Self.Showing then if Tab.TabSheet.TabIndex = Self.PageControl1.TabIndex then - CurrScript.SynEdit.SetFocus; + if CurrScript.SynEdit.CanFocus then + CurrScript.SynEdit.SetFocus; StopCodeCompletion;//To set the highlighting back to normal; frmFunctionList.LoadScriptTree(CurrScript.SynEdit.Text); with CurrScript.SynEdit do @@ -913,6 +935,10 @@ begin PluginsPath := CreateSetting('Settings/Plugins/Path', ExpandFileName(MainDir+ DS+ 'Plugins' + DS)); CreateSetting('LastConfig/MainForm/Position',''); CreateSetting('LastConfig/MainForm/State','Normal'); + {$ifdef MSWindows} + CreateSetting('LastConfig/Console/Visible','True'); + ShowConsole(True); + {$endif} if not DirectoryExists(IncludePath) then CreateDir(IncludePath); if not DirectoryExists(FontPath) then @@ -960,6 +986,13 @@ begin FunctionListShown(True) else FunctionListShown(false); + {$ifdef MSWindows} + str := LowerCase(LoadSettingDef('LastConfig/Console/Visible','True')); + if str = 'true' then + ShowConsole(True) + else + ShowConsole(false); + {$endif} end; procedure TForm1.SaveFormSettings; @@ -988,6 +1021,12 @@ begin SetKeyValue('LastConfig/MainForm/FunctionListShown','True') else SetKeyValue('LastConfig/MainForm/FunctionListShown','False'); + {$ifdef MSWindows} + if ConsoleVisible then + SetKeyValue('LastConfig/Console/Visible','True') + else + SetKeyValue('LastConfig/Console/Visible','false'); + {$endif} SaveToXML(SimbaSettingsFile); end; end; @@ -1040,7 +1079,7 @@ begin else Thread := TPSThread.Create(True,@CurrentSyncInfo,PluginsPath); except - writeln('Failed to initialise the library!'); + mDebugLn('Failed to initialise the library!'); Exit; end; {$IFNDEF TERMINALWRITELN} @@ -1065,10 +1104,10 @@ begin PluginsGlob.AddPath(PluginsPath); if not DirectoryExists(IncludePath) then if FirstRun then - Writeln('Warning: The include directory specified in the Settings isn''t valid.'); + FormWritelnEx('Warning: The include directory specified in the Settings isn''t valid.'); if not DirectoryExists(fontPath) then if FirstRun then - Writeln('Warning: The font directory specified in the Settings isn''t valid. Can''t load fonts now'); + FormWritelnEx('Warning: The font directory specified in the Settings isn''t valid. Can''t load fonts now'); Thread.SetPaths(ScriptPath,AppPath,Includepath,PluginsPath,fontPath); if selector.haspicked then Thread.Client.IOManager.SetTarget(Selector.LastPick); @@ -1101,7 +1140,7 @@ begin begin; ErrorMsg:=Application.CheckOptions('ro:','run open:'); if ErrorMsg <> '' then - writeln(ErrorMSG) + mDebugLn(ErrorMSG) else begin if Application.HasOption('o','open') then @@ -1115,6 +1154,25 @@ begin Self.RunScript; end; +procedure TForm1.OnSaveScript(const Filename: string); +begin + with CurrScript do + begin + ScriptFile:= Filename; + ScriptName:= ExtractFileNameOnly(Filename); + mDebugLn('Script name will be: ' + ScriptName); + FormWritelnEx('Succesfully saved: ' + Filename); + StartText:= SynEdit.Lines.Text; + ScriptChanged := false; + SynEdit.MarkTextAsSaved; + Self.Caption:= Format(WindowTitle,[ScriptName]); + CurrTab.TabSheet.Caption:= ScriptName; + Self.AddRecentFile(FileName); + StatusBar.Panels[Panel_ScriptName].Text:= ScriptName; + StatusBar.Panels[Panel_ScriptPath].text:= ScriptFile; + end; +end; + procedure TForm1.ActionTabLastExecute(Sender: TObject); var @@ -1145,6 +1203,13 @@ begin TempThread.Resume; end; +procedure TForm1.ActionConsoleExecute(Sender: TObject); +begin + {$ifdef mswindows} + ShowConsole(not ConsoleVisible); + {$endif} +end; + procedure TForm1.ActionCopyExecute(Sender: TObject); begin if CurrScript.SynEdit.Focused or ScriptPopup.HandleAllocated then @@ -1339,7 +1404,7 @@ begin Self.Manager.GetMousePos(x, y); if self.Manager.ReceivedError() then begin - formWriteln('Our window no longer exists -> Resetting to desktop'); + FormWritelnEx('Our window no longer exists -> Resetting to desktop'); self.Manager.SetDesktop; self.Manager.ResetError; end; @@ -1373,7 +1438,7 @@ begin editSearchList.Color:= clWhite; if FilterTree.Focused then begin; - Writeln('This is currently not supported'); + mDebugLn('This is currently not supported'); SynEdit.Lines[CompletionCaret.y - 1] := CompletionStart; SynEdit.LogicalCaretXY:= Classes.point(CompletionCaret.x,CompletionCaret.y); SynEdit.SelEnd:= SynEdit.SelStart; @@ -1578,6 +1643,12 @@ begin MainDir:= ExtractFileDir(Application.ExeName); RecentFiles := TStringList.Create; SimbaSettingsFile := MainDir + DS + 'settings.xml'; + {$ifdef MSWindows} + ConsoleVisible := False; + {$else} + TT_Console.Visible:= false; + InitmDebug; + {$endif} if FileExists(SimbaSettingsFile) then begin Application.CreateForm(TSettingsForm,SettingsForm); @@ -1606,13 +1677,15 @@ begin {$ifdef mswindows} if FileExists(Application.ExeName+'_old_') then begin - Writeln('We still have an out-dated exe file in the dir, lets remove!'); - Writeln(format('Sucesfully deleted the file? %s',[BoolToStr(DeleteFile(PChar(Application.ExeName + '_old_')),true)])); + mDebugLn('We still have an out-dated exe file in the dir, lets remove!'); + mDebugLn(format('Sucesfully deleted the file? %s',[BoolToStr(DeleteFile(PChar(Application.ExeName + '_old_')),true)])); end; + SetConsoleCtrlHandler(@ConsoleHandler,true); {$endif} frmFunctionList.OnEndDock:= @frmFunctionList.FrameEndDock; FirstRun := true;//Our next run is the first run. HandleParameters; + TT_Update.Visible:= false; end; procedure TForm1.FormDestroy(Sender: TObject); @@ -1734,6 +1807,11 @@ begin; end; end; +procedure formWritelnEx(S: String); +begin + Form1.Memo1.Lines.Add(s); +end; + function GetMethodName( Decl : string; PlusNextChar : boolean) : string; var I : integer; @@ -1876,6 +1954,7 @@ begin News := TStringList.Create; News.Text:= s; Memo1.Lines.AddStrings(News); + Memo1.Lines.add(''); News.free; end; @@ -1902,7 +1981,7 @@ begin ColourHistoryForm.AddColObj(cobj, true); ColourHistoryForm.Show; end; - formWriteln('Picked colour: ' + inttostr(c) + ' at (' + inttostr(x) + ', ' + inttostr(y) + ')'); + FormWritelnEx('Picked colour: ' + inttostr(c) + ' at (' + inttostr(x) + ', ' + inttostr(y) + ')'); end; @@ -1910,7 +1989,7 @@ procedure TForm1.ButtonSelectorDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Manager.SetTarget(Selector.Drag); - writeln('New window: ' + IntToStr(Selector.LastPick)); + FormWritelnEx('New window: ' + IntToStr(Selector.LastPick)); end; procedure TForm1.NoTray(Sender: TObject); @@ -1943,7 +2022,7 @@ begin PopupTab := PageControl1.TabIndexAtClientPos(MousePos); if PopupTab = -1 then begin - Writeln('We couldn''t find which tab you clicked on, closing the popup'); + mDebugLn('We couldn''t find which tab you clicked on, closing the popup'); Handled := true; end; end; @@ -2042,6 +2121,24 @@ begin result := SettingsForm.Settings.GetSetDefaultKeyValue(Key,value); end; +{$ifdef mswindows} +procedure TForm1.ShowConsole(ShowIt: boolean); +begin + if ShowIt = ConsoleVisible then + Exit; + if showit then //Console is hidden, get it back! + begin + AllocConsole; + InitmDebug;//Make sure mDebugLn works correctly! + end else + begin + FreeConsole; + FreemDebug; + end; + ConsoleVisible:= ShowIt; +end; +{$endif} + procedure TForm1.FunctionListShown(ShowIt: boolean); begin with MenuItemFunctionList, frmFunctionList do @@ -2078,7 +2175,7 @@ procedure TForm1.SafeCallThread; var thread: TMThread; begin - Writeln('Executing : ' + CurrentSyncInfo.MethodName); + mDebugLn('Executing : ' + CurrentSyncInfo.MethodName); thread:= TMThread(CurrentSyncInfo.OldThread); mmlpsthread.CurrThread:= thread; try @@ -2138,7 +2235,7 @@ begin SynEdit.Lines.LoadFromFile(FileName); StartText := SynEdit.Lines.text; ScriptName:= ExtractFileNameOnly(filename); - WriteLn('Script name will be: ' + ScriptName); + mDebugLn('Script name will be: ' + ScriptName); ScriptFile:= FileName; ScriptChanged := false; AddRecentFile(filename); @@ -2155,50 +2252,34 @@ begin Result := (ScriptFile <> ''); if Result then begin; - ScriptChanged := false; SynEdit.Lines.SaveToFile(ScriptFile); - StartText:= SynEdit.Lines.Text; - SynEdit.MarkTextAsSaved; - Self.Caption:= Format(WindowTitle,[ScriptName]); + OnSaveScript(scriptfile); end else result := SaveCurrentScriptAs; end; - RefreshTab; end; function TForm1.SaveCurrentScriptAs: boolean; +var + ScriptFile : string; begin - with CurrScript do - begin; - Result := false; - with TSaveDialog.Create(nil) do - try - Filter:= 'Simba files|*.simb;*.cogat;*.mufa;*.pas;*.txt|Any Files|*.*'; - if Execute then - begin; - if ExtractFileExt(FileName) = '' then - begin; - ScriptFile := FileName + '.simb'; - end else - ScriptFile := FileName; - SynEdit.Lines.SaveToFile(ScriptFile); - ScriptName:= ExtractFileNameOnly(ScriptFile); - Writeln('Saving to: ' + FileName); - WriteLn('Script name will be: ' + ScriptName); - RefreshTab(); - Result := True; - end; - finally - Free; - end; - if result then + Result := false; + with TSaveDialog.Create(nil) do + try + Filter:= 'Simba files|*.simb;*.cogat;*.mufa;*.pas;*.txt|Any Files|*.*'; + if Execute then begin; - Writeln('Succesfully saved: ' + ScriptFile); - StartText:= SynEdit.Lines.Text; - SynEdit.MarkTextAsSaved; - ScriptChanged := false; + if ExtractFileExt(FileName) = '' then + begin; + ScriptFile := FileName + '.simb'; + end else + ScriptFile := FileName; + CurrScript.SynEdit.Lines.SaveToFile(ScriptFile); + OnSaveScript(scriptfile); end; + finally + free; end; end; diff --git a/trunk/Projects/SAMufasaGUI/updateform.pas b/trunk/Projects/SAMufasaGUI/updateform.pas index fe2d195..004ecb4 100644 --- a/trunk/Projects/SAMufasaGUI/updateform.pas +++ b/trunk/Projects/SAMufasaGUI/updateform.pas @@ -5,7 +5,7 @@ unit updateform; interface uses - Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + Classes, SysUtils, FileUtil, LResources, Forms,MufasaBase, Controls, Graphics, Dialogs, ComCtrls, StdCtrls, updater; type @@ -31,8 +31,6 @@ type procedure CleanUpdateForm(Sender: TObject); procedure FormCreate(Sender: TObject); procedure UpdateButtonClick(Sender: TObject); - function CanUpdate: Boolean; - private { private declarations } @@ -47,9 +45,9 @@ type SimbaVersionThread : TSimbaVersionThread; private function OnUpdateBeat: Boolean; - function GetLatestSimbaVersion: Integer; public - { public declarations } + function CanUpdate: Boolean; + function GetLatestSimbaVersion: Integer; procedure PerformUpdate; protected FCancelled: Boolean; @@ -86,8 +84,8 @@ const function TSimbaUpdateForm.CanUpdate: Boolean; begin GetLatestSimbaVersion; - Writeln(format('Current Simba version: %d',[TestUnit.SimbaVersion])); - Writeln('Latest Simba Version: ' + IntToStr(FSimbaVersion)); + mDebugLn(format('Current Simba version: %d',[TestUnit.SimbaVersion])); + mDebugLn('Latest Simba Version: ' + IntToStr(FSimbaVersion)); Exit(testunit.SimbaVersion < FSimbaVersion); end; diff --git a/trunk/Units/MMLAddon/PSInc/Wrappers/ocr.inc b/trunk/Units/MMLAddon/PSInc/Wrappers/ocr.inc index a93deea..af136df 100644 --- a/trunk/Units/MMLAddon/PSInc/Wrappers/ocr.inc +++ b/trunk/Units/MMLAddon/PSInc/Wrappers/ocr.inc @@ -12,7 +12,6 @@ function BitmapFromText(text, font: String): integer; extdecl; var bmp: TMufasaBitmap; begin - writeln('BitmapFromText: ' + text + ' ' + font); bmp := CurrThread.Client.MOCR.TextToFontBitmap(text, font); Result := CurrThread.Client.MBitmaps.AddBMP(bmp); end; diff --git a/trunk/Units/MMLAddon/PSInc/Wrappers/other.inc b/trunk/Units/MMLAddon/PSInc/Wrappers/other.inc index 54ee392..ff767a2 100644 --- a/trunk/Units/MMLAddon/PSInc/Wrappers/other.inc +++ b/trunk/Units/MMLAddon/PSInc/Wrappers/other.inc @@ -47,7 +47,7 @@ begin {$ifdef MSWINDOWS} sndPlaySound(PChar(sound),SND_ASYNC or SND_NODEFAULT); {$else} - Writeln(Format('Playing sound %s (not supported yet on Linux)',[sound])); + psWriteln(Format('Playing sound %s (not supported yet on Linux)',[sound])); {$endif} end; @@ -56,7 +56,7 @@ begin {$ifdef MSWINDOWS} sndPlaySoundW(nil,0); {$else} - Writeln('Stopping sound is not supported yet on Linux'); + psWriteln('Stopping sound is not supported yet on Linux'); {$endif} end; diff --git a/trunk/Units/MMLAddon/internets.pas b/trunk/Units/MMLAddon/internets.pas index 485c2f3..f4e19ae 100644 --- a/trunk/Units/MMLAddon/internets.pas +++ b/trunk/Units/MMLAddon/internets.pas @@ -18,6 +18,7 @@ type HTTPSend : THTTPSend; fHandleCookies : boolean; PostVariables : TStringList; + Client : TObject; public procedure SetHTTPUserAgent(agent : string); function GetHTTPPage(url : string ) : string; @@ -26,7 +27,7 @@ type function GetRawHeaders: string; procedure ClearPostData; procedure AddPostVariable(VarName, VarValue: string); - constructor Create(HandleCookies : boolean = true); + constructor Create(Owner : TObject; HandleCookies : boolean = true); destructor Destroy;override; end; { TMInternet } @@ -45,6 +46,8 @@ type implementation +uses + Client; { OTHER } function GetPage(URL: String): String; var @@ -67,7 +70,7 @@ end; function TMInternet.CreateHTTPClient(HandleCookies: boolean = true): integer; begin; - Result := HTTPClients.Add(THTTPClient.Create(HandleCookies)); + Result := HTTPClients.Add(THTTPClient.Create(Client,HandleCookies)); end; function TMInternet.GetHTTPClient(Index: integer): THTTPClient; @@ -105,13 +108,13 @@ begin if Connections[i] <> nil then begin TObject(Connections[i]).Free; - Writeln(Format('Connection[%d] has not been freed in the script, freeing it now.',[i])); + TClient(Client).Writeln(Format('Connection[%d] has not been freed in the script, freeing it now.',[i])); end; for i := HTTPClients.Count -1 downto 0 do if HTTPClients[i] <> nil then begin THTTPClient(HTTPClients[i]).Free; - Writeln(Format('HTTPClient[%d] has not been freed in the script, freeing it now.',[i])); + TClient(Client).Writeln(Format('HTTPClient[%d] has not been freed in the script, freeing it now.',[i])); end; Connections.Free; HTTPClients.Free; @@ -139,7 +142,7 @@ begin result := ''; except on e : exception do - Writeln('THTTPClient error: ' + e.message); + TClient(Client).Writeln('THTTPClient error: ' + e.message); end; end; @@ -157,7 +160,7 @@ begin result := ''; except on e : exception do - Writeln('THTTPClient error: ' + e.message); + TClient(Client).Writeln('THTTPClient error: ' + e.message); end; end; @@ -189,9 +192,10 @@ begin PostVariables.Add(Varname + '=' + VarValue); end; -constructor THTTPClient.Create(HandleCookies : boolean = true); +constructor THTTPClient.Create(Owner : TObject; HandleCookies : boolean = true); begin inherited Create; + Client := Owner; HTTPSend := THTTPSend.Create; fHandleCookies:= HandleCookies; PostVariables := TStringList.Create; diff --git a/trunk/Units/MMLAddon/mmlpsthread.pas b/trunk/Units/MMLAddon/mmlpsthread.pas index 9305fc9..cdef7a1 100644 --- a/trunk/Units/MMLAddon/mmlpsthread.pas +++ b/trunk/Units/MMLAddon/mmlpsthread.pas @@ -31,7 +31,7 @@ interface uses Classes, SysUtils, client, uPSComponent,uPSCompiler, - uPSRuntime,stdCtrls, uPSPreProcessor,MufasaTypes, web, + uPSRuntime,stdCtrls, uPSPreProcessor,MufasaTypes,MufasaBase, web, bitmaps, plugins, libloader, dynlibs,internets; @@ -45,7 +45,6 @@ type OldThread : TThread; end; - TWritelnProc = procedure(s: string); TClearDebugProc = procedure; TDbgImgInfo = record DispSize : ^TPoint; @@ -213,7 +212,7 @@ begin if Assigned(CurrThread.DebugTo) then CurrThread.DebugTo(str) else - writeln(str); + mDebugLn(str); end; function MakeString(data : TPSVariantIFC) : string; @@ -397,6 +396,7 @@ end; procedure TMThread.SetDebug(writelnProc: TWritelnProc); begin DebugTo := writelnProc; + Client.WritelnProc:= writelnProc; end; procedure TMThread.SetDebugClear(clearProc: TClearDebugProc); @@ -530,7 +530,7 @@ end; function TPSThread.PSScriptFindUnknownFile(Sender: TObject; const OrginFileName: string; var FileName, Output: string): Boolean; begin - Writeln(OrginFileName + '-' + Output + '-' + FileName); + mDebugLn(OrginFileName + '-' + Output + '-' + FileName); Result := false; end; @@ -736,7 +736,7 @@ begin end; except on E : Exception do - psWriteln('ERROR IN PSSCRIPT: ' + e.message); + psWriteln('Exception in Script: ' + e.message); end; end; diff --git a/trunk/Units/MMLAddon/settings.pas b/trunk/Units/MMLAddon/settings.pas index 5d02818..6326ae5 100644 --- a/trunk/Units/MMLAddon/settings.pas +++ b/trunk/Units/MMLAddon/settings.pas @@ -28,7 +28,7 @@ unit settings; interface uses - Classes, SysUtils, ComCtrls, xmlread, xmlwrite, DOM,mufasatypes; + Classes, SysUtils, ComCtrls, xmlread, xmlwrite, DOM,mufasatypes,MufasaBase; @@ -411,7 +411,7 @@ begin if length(path) < 2 then begin - writeln('Path too short!'); + mDebugLn('CreateKey - Path too short!'); exit(false); end; nParent := WalkToNode(path[0]); @@ -426,7 +426,7 @@ begin begin if Path[i] = '' then begin - writeln('Invalid Key Path / Name'); + mDebugLn('CreateKey - Invalid Key Path / Name'); exit(false); end; NewPath := NewPath + Path[i] + '/'; @@ -441,7 +441,7 @@ begin newN.Text := Path[i]; if (nParent = nil) then begin - writeln('This shouldn''t happen...'); + mDebugLn('CreateKey - This shouldn''t happen...'); newN.MoveTo(Nodes.GetFirstNode, naAddChild); nParent := newN; end @@ -474,12 +474,12 @@ var begin if not KeyExists(KeyName) then begin - writeln('SetKeyValue - Key does not exist'); + mDebugLn('SetKeyValue - Key does not exist'); Exit; end; if not IsKey(KeyName) then begin - writeln('SetKeyValue - IsKey returned false'); + mDebugLn('SetKeyValue - IsKey returned false'); Exit; end; N := WalkToNode(KeyName); @@ -499,7 +499,7 @@ begin TSettingData(N.Data).Free; N.Data := TSettingData.Create; TSettingData(N.Data).Val := KeyValue; - writeln('Setting ' + KeyName + ' to ' + KeyValue); + mDebugLn('Setting ' + KeyName + ' to ' + KeyValue); N := N.GetNextSibling; end; end; @@ -513,7 +513,7 @@ begin Nodes.Clear; if not fileExists(fileName) then begin - writeln('SettingsFile hasn''t been created yet.'); + mDebugLn('SettingsFile hasn''t been created yet.'); // create file. SaveToXML(fileName); end; @@ -527,7 +527,7 @@ procedure TMMLSettings.WriteXMLData(n: TTreeNode; var XMLChild: TDOMNode; var C: Integer); begin if assigned(n.data) and (n.HasChildren) then - writeln('Has data and children! Please close simba and remove settings.xml. if problem persists, please report your settings.xml'); + mDebugLn('WriteXMLData - Has data and children! Please close simba and remove settings.xml. if problem persists, please report your settings.xml'); if assigned(n.Data) then begin XMLChild := XMLDoc.CreateTextNode(TSettingData(N.Data).Val); @@ -588,7 +588,7 @@ begin try WriteXMLFile(XMLDoc, fileName); except - Writeln('Failed to write ' + fileName); + mDebugLn('Failed to write ' + fileName); end; XMLDoc.Free; end; diff --git a/trunk/Units/MMLAddon/updater.pas b/trunk/Units/MMLAddon/updater.pas index 8baecd9..cfd8f4f 100644 --- a/trunk/Units/MMLAddon/updater.pas +++ b/trunk/Units/MMLAddon/updater.pas @@ -5,7 +5,7 @@ unit updater; interface uses - Classes, SysUtils, httpsend,blcksock + Classes, SysUtils, httpsend,MufasaBase,blcksock {$IFDEF LINUX} ,BaseUnix {$ENDIF}; @@ -175,7 +175,7 @@ begin end; FDownloaded := True; except - writeln('DownloadAndSave: Exception Occured'); + mDebugLn('DownloadAndSave: Exception Occured'); Result := False; end; HTTPSend.Free; @@ -189,25 +189,25 @@ begin { Change to messages + Exit(False) instead of exceptions? } if not Downloaded then begin - writeln('Nothing downloaded'); + mDebugLn('Nothing downloaded'); exit(False); // raise Exception.Create('Nothing downloaded'); end; if FReplacementFile = '' then begin - writeln('ReplacementFile not se'); + mDebugLn('ReplacementFile not se'); exit(False); //raise Exception.Create('ReplacementFile not set'); end; if not FileExists(FBasePath + FReplacementFile) then begin - writeln('ReplacementFile not found'); + mDebugLn('ReplacementFile not found'); exit(False); //raise Exception.Create('ReplacementFile not found'); end; if not FileExists(FBasePath + FReplacementFile+ '_') then begin - writeln('ReplacementFile + _ not found'); + mDebugLn('ReplacementFile + _ not found'); exit(False); //raise Exception.Create('ReplacementFile + _ not found'); end; diff --git a/trunk/Units/MMLAddon/windowselector.pas b/trunk/Units/MMLAddon/windowselector.pas index d1ac5aa..fcf979c 100644 --- a/trunk/Units/MMLAddon/windowselector.pas +++ b/trunk/Units/MMLAddon/windowselector.pas @@ -119,13 +119,13 @@ begin if Result <> Tempwindow then begin - writeln('Making ' + inttostr(tempwindow) + ' transparent'); + mDebugLn('Making ' + inttostr(tempwindow) + ' transparent'); XChangeProperty(manager.display, tempwindow, window_opacity, XA_CARDINAL, 32, PropModeReplace, @opacity_75, 1); - writeln('Resetting ' + inttostr(Result)); + mDebugLn('Resetting ' + inttostr(Result)); if result <> 0 then XChangeProperty(manager.display, Result, window_opacity, XA_CARDINAL, 32, PropModeReplace, @opacity_100, 1); - WriteLn('Changing Window from: ' + Inttostr(result) +' to: ' + IntToStr(Tempwindow)); + mDebugLn('Changing Window from: ' + Inttostr(result) +' to: ' + IntToStr(Tempwindow)); // XChangeProperty(Window.XDisplay, tempwindow, window_opacity, XA_CARDINAL, 32, PropModeReplace, @opacity_50, 1); Result := Tempwindow; diff --git a/trunk/Units/MMLCore/bitmaps.pas b/trunk/Units/MMLCore/bitmaps.pas index ea682bd..c63431c 100644 --- a/trunk/Units/MMLCore/bitmaps.pas +++ b/trunk/Units/MMLCore/bitmaps.pas @@ -27,7 +27,7 @@ unit bitmaps; interface uses - Classes, SysUtils, FPImage,IntfGraphics,graphtype,MufasaTypes,graphics; + Classes, SysUtils, FPImage,IntfGraphics,graphtype,MufasaTypes,MufasaBase,graphics; type @@ -119,7 +119,7 @@ type implementation uses - paszlib,DCPbase64,math, + paszlib,DCPbase64,math, client, colour_conv,IOManager,mufasatypesutil; // Needs more fixing. We need to either copy the memory ourself, or somehow @@ -392,9 +392,9 @@ begin end; //Just for testing purposes if ToDestroy.BmpName = '' then - Writeln(Format('BMP[%d] has been freed.',[number])) + TClient(Self.Client).Writeln(Format('BMP[%d] has been freed.',[number])) else - Writeln(Format('BMP[%s] has been freed.',[ToDestroy.BmpName])); + TClient(Self.Client).Writeln(Format('BMP[%s] has been freed.',[ToDestroy.BmpName])); ToDestroy.Free; BmpArray[number] := nil; end; @@ -838,10 +838,10 @@ begin if NewCorners[i].y < MinY then MinY := NewCorners[i].y; end; - Writeln(Format('Min: (%d,%d) Max : (%d,%d)',[MinX,MinY,MaxX,MaxY])); + mDebugLn(Format('Min: (%d,%d) Max : (%d,%d)',[MinX,MinY,MaxX,MaxY])); NewW := MaxX - MinX+1; NewH := MaxY - MinY+1; - Writeln(format('New bounds: %d,%d',[NewW,NewH])); + mDebugLn(format('New bounds: %d,%d',[NewW,NewH])); TargetBitmap.SetSize(NewW,NewH); for y := NewH - 1 downto 0 do for x := NewW - 1 downto 0 do @@ -1126,9 +1126,9 @@ begin if BmpArray[i] <> nil then begin; if BmpArray[i].BmpName = '' then - Writeln(Format('BMP[%d] has not been freed in the script, freeing it now.',[i])) + TClient(Client).Writeln(Format('BMP[%d] has not been freed in the script, freeing it now.',[i])) else - Writeln(Format('BMP[%s] has not been freed in the script, freeing it now.',[BmpArray[i].BmpName])); + TClient(Client).Writeln(Format('BMP[%s] has not been freed in the script, freeing it now.',[BmpArray[i].BmpName])); FreeAndNil(BmpArray[i]); end; SetLength(BmpArray,0); diff --git a/trunk/Units/MMLCore/client.pas b/trunk/Units/MMLCore/client.pas index 8ed4fc3..6c48434 100644 --- a/trunk/Units/MMLCore/client.pas +++ b/trunk/Units/MMLCore/client.pas @@ -29,7 +29,7 @@ unit Client; interface uses - Classes, SysUtils, MufasaTypes, + Classes, SysUtils, MufasaTypes,MufasaBase, IOManager, Files, Finder, Bitmaps, dtm, ocr, {$IFDEF MSWINDOWS} os_windows {$ENDIF} {$IFDEF LINUX} os_linux {$ENDIF}; @@ -41,27 +41,38 @@ It binds all the components together. type TClient = class(TObject) - constructor Create(plugin_dir: string); - destructor Destroy; override; - - public - IOManager: TIOManager; - MFiles: TMFiles; - MFinder: TMFinder; - MBitmaps : TMBitmaps; - MDTM: TMDTM; - MOCR: TMOCR; + public + IOManager: TIOManager; + MFiles: TMFiles; + MFinder: TMFinder; + MBitmaps : TMBitmaps; + MDTM: TMDTM; + MOCR: TMOCR; + WritelnProc : TWritelnProc; + procedure WriteLn(s : string); + constructor Create(plugin_dir: string); + destructor Destroy; override; end; implementation + + +procedure TClient.WriteLn(s: string); +begin + if Assigned(WritelnProc) then + WritelnProc(s) + else + mDebugLn(s); +end; + // Possibly pass arguments to a default window. constructor TClient.Create(plugin_dir: string); begin inherited Create; - + WritelnProc:= nil; IOManager:= TIOManager.Create(plugin_dir); - MFiles := TMFiles.Create; + MFiles := TMFiles.Create(self); MFinder := TMFinder.Create(Self); MBitmaps := TMBitmaps.Create(self); MDTM := TMDTM.Create(self); diff --git a/trunk/Units/MMLCore/dtm.pas b/trunk/Units/MMLCore/dtm.pas index fda71a6..7630a8a 100644 --- a/trunk/Units/MMLCore/dtm.pas +++ b/trunk/Units/MMLCore/dtm.pas @@ -77,6 +77,7 @@ type implementation uses dtmutil, paszlib, + client, graphics, // for TColor math // for max ; @@ -112,9 +113,9 @@ begin if not b then begin; if DTMList[i].n <> '' then - Writeln(Format('DTM[%s] has not been freed in the script, freeing it now.',[DTMList[i].n])) + TClient(Client).Writeln(Format('DTM[%s] has not been freed in the script, freeing it now.',[DTMList[i].n])) else - writeln(Format('DTM[%d] has not been freed in the script, freeing it now.',[i])); + TClient(Client).Writeln(Format('DTM[%d] has not been freed in the script, freeing it now.',[i])); FreeDTM(i); end; end; @@ -167,10 +168,7 @@ begin if uncompress(Bufferstring,Destlen,pchar(Source), ii) = Z_OK then begin; if (Destlen mod 36) > 0 then - begin; - Writeln('Invalid DTM'); - Exit; - end; + raise Exception.CreateFmt('Invalid DTM passed to StringToDTM: %s',[s]); DestLen := DestLen div 36; SetLength(Result.p,DestLen); SetLength(Result.c,DestLen); diff --git a/trunk/Units/MMLCore/dtmutil.pas b/trunk/Units/MMLCore/dtmutil.pas index 42c2bd4..11cb4e4 100644 --- a/trunk/Units/MMLCore/dtmutil.pas +++ b/trunk/Units/MMLCore/dtmutil.pas @@ -52,7 +52,7 @@ const dtm_Triangle = 4; implementation -uses math; +uses math,MufasaBase; procedure RotatePoints_(Var P: TPointArray; A, cx, cy: Extended); @@ -105,10 +105,10 @@ var begin; i := 0; if adtm.n <> '' then - writeln('Name: ' + aDTM.n); - WriteLn('MainPoint ' + inttostr(aDTM.p[i].x) + ', ' + inttostr(aDTM.p[i].y) + ' col: ' + inttostr(aDTM.c[i]) + ', tol: ' + inttostr(aDTM.t[i]) + '; ashape ' + inttostr(aDTM.ash[i]) + ' asize ' + inttostr(aDTM.asz[i])+ ', Bad Point: ' + BoolToStr(aDTM.bp[i])); + mDebugLn('Name: ' + aDTM.n); + mDebugLn('MainPoint ' + inttostr(aDTM.p[i].x) + ', ' + inttostr(aDTM.p[i].y) + ' col: ' + inttostr(aDTM.c[i]) + ', tol: ' + inttostr(aDTM.t[i]) + '; ashape ' + inttostr(aDTM.ash[i]) + ' asize ' + inttostr(aDTM.asz[i])+ ', Bad Point: ' + BoolToStr(aDTM.bp[i])); for I := 1 to High(aDTM.p) do - WriteLn('SubPoint['+IntToStr(I) + '] ' + inttostr(aDTM.p[i].x) + ', ' + inttostr(aDTM.p[i].y) + ' col: ' + inttostr(aDTM.c[i]) + ', tol: ' + inttostr(aDTM.t[i]) + '; ashape ' + inttostr(aDTM.ash[i]) + ' asize ' + inttostr(aDTM.asz[i]) + ', Bad Point: ' + BoolToStr(aDTM.bp[i])); + mDebugLn('SubPoint['+IntToStr(I) + '] ' + inttostr(aDTM.p[i].x) + ', ' + inttostr(aDTM.p[i].y) + ' col: ' + inttostr(aDTM.c[i]) + ', tol: ' + inttostr(aDTM.t[i]) + '; ashape ' + inttostr(aDTM.ash[i]) + ' asize ' + inttostr(aDTM.asz[i]) + ', Bad Point: ' + BoolToStr(aDTM.bp[i])); end; Function pDTMToTDTM(Const DTM: pDTM): TDTM; diff --git a/trunk/Units/MMLCore/files.pas b/trunk/Units/MMLCore/files.pas index 4ad825c..9d4f7a9 100644 --- a/trunk/Units/MMLCore/files.pas +++ b/trunk/Units/MMLCore/files.pas @@ -40,7 +40,7 @@ type TMufasaFilesArray = Array Of TMufasaFile; TMFiles = class(TObject) - constructor Create; + constructor Create(Owner : TObject); destructor Destroy; override; public function CreateFile(Path: string): Integer; @@ -56,6 +56,7 @@ type protected MFiles: TMufasaFilesArray; FreeSpots: Array Of Integer; + Client : TObject; private procedure FreeFileList; function AddFileToManagedList(Path: string; FS: TFileStream; Mode: Integer): Integer; @@ -68,7 +69,7 @@ type implementation uses - {$IFDEF MSWINDOWS}Windows,{$ENDIF} IniFiles; + {$IFDEF MSWINDOWS}Windows,{$ENDIF} IniFiles,Client; { GetFiles in independant of the TMFiles class } @@ -108,9 +109,10 @@ begin end; end; -constructor TMFiles.Create; +constructor TMFiles.Create(Owner : TObject); begin inherited Create; + self.Client := Owner; SetLength(Self.MFiles, 0); SetLength(Self.FreeSpots, 0); end; @@ -122,11 +124,11 @@ begin; For I := 0 To High(MFiles) Do If MFiles[i].FS <> nil Then Begin - Writeln(Format('File[%s] has not been freed in the script, freeing it now.',[MFiles[i].Path])); + TClient(Client).Writeln(Format('File[%s] has not been freed in the script, freeing it now.',[MFiles[i].Path])); Try MFiles[I].FS.Free; Except - WriteLn('FreeFileList - Exception when freeing'); + TClient(Client).Writeln('FreeFileList - Exception when freeing FileStream'); End; End; SetLength(MFiles, 0); @@ -168,11 +170,7 @@ End; Function TMFiles.SetFileCharPointer(FileNum, cChars, Origin: Integer): Integer; Begin If(FileNum < 0) or (FileNum >= Length(MFiles)) Then - Begin - WriteLn('Invalid File Num'); - Result := -1; - Exit; - End; + raise Exception.CreateFmt('Invalid FileNum passed: %d',[FileNum]); {If Files[FileNum].Handle = -1 Then Begin @@ -183,33 +181,22 @@ Begin case Origin of fsFromBeginning: - If(cChars < 0) Then - Begin - Writeln('fsFromBeginning takes no negative cChars.'); - Result := -1; - Exit; - End; + If(cChars < 0) Then + raise Exception.CreateFmt('fsFromBeginning takes no negative cChars. (%d)',[cChars]); fsFromCurrent: ; fsFromEnd: If(cChars > 0) Then - Begin - Writeln('fsFromEnd takes no positive cChars.'); - Result := -1; - Exit; - End; + raise Exception.CreateFmt('fsFromEnd takes no positive cChars. (%d)',[cChars]); else - Begin - WriteLn('Invalid Origin: ' + IntToStr(Origin)); - Result := -1; - Exit; - End; - End; + raise Exception.CreateFmt('Invalid Origin: %d',[Origin]); + end; Try - Result := MFiles[FileNum].FS.Seek(cChars, Origin); + Result := MFiles[FileNum].FS.Seek(cChars, Origin); Except - WriteLn('SetFileCharPointer - Exception Occured.'); + TClient(Client).Writeln('SetFileCharPointer - Exception Occured.'); + Result := -1; End; //Result := FileSeek(Files[FileNum].Handle, cChars, Origin); End; @@ -230,7 +217,7 @@ begin FS := TFileStream.Create(Path, fmCreate); Except Result := -1; - WriteLn('CreateFile - Exception. Could not create file. Returning -1'); + TClient(Client).Writeln(Format('CreateFile - Exception. Could not create file: %s',[path])); Exit; End; @@ -259,7 +246,7 @@ begin FS := TFileStream.Create(Path, fMode) Except Result := -1; - WriteLn('OpenFile - Exception. Could not create file. Returning -1'); + TClient(Client).Writeln(Format('OpenFile - Exception. Could not open file: %s',[path])); Exit; End; @@ -299,7 +286,7 @@ begin FS := TFileStream.Create(Path, fMode); Except Result := -1; - WriteLn('ReWriteFile - Exception. Could not create file. Returning -1'); + TClient(Client).Writeln(Format('ReWriteFile - Exception. Could not create file: %s',[path])); Exit; End; @@ -324,17 +311,13 @@ end; procedure TMFiles.CloseFile(FileNum: Integer); begin - //Writeln('Length of Files: ' + IntToStr(Length(Files))); If (FileNum >= Length(MFiles)) or (FileNum < 0) Then - Begin - WriteLn('CloseFile. Invalid FileNum: ' + IntToStr(FileNum)); - Exit; - End; + raise Exception.CreateFmt('Invalid FileNum passed: %d',[FileNum]); Try MFiles[FileNum].FS.Free; Except - WriteLn('CloseFile, exception when freeing the file...'); + TClient(Client).Writeln(Format('CloseFile, exception when freeing the file: %d',[filenum])); Exit; End; @@ -359,14 +342,10 @@ end; function TMFiles.EndOfFile(FileNum: Integer): Boolean; begin If(FileNum < 0) or (FileNum >= Length(MFiles)) Then - Begin - WriteLn('Invalid File Num'); - Result := True; - Exit; - End; + raise Exception.CreateFmt('Invalid FileNum passed: %d',[FileNum]); If MFiles[FileNum].FS = nil Then Begin - WriteLn('EndOfFile: Invalid Internal Handle'); + TClient(Client).Writeln(format('EndOfFile: Invalid Internal Handle of File: %d',[filenum])); Result := True; Exit; End; @@ -380,17 +359,12 @@ end; function TMFiles.FileSizeMuf(FileNum: Integer): LongInt; begin - If(FileNum < 0) or (FileNum >= Length(MFiles)) Then - Begin - WriteLn('Invalid File Num'); - Result := -1; - Exit; - End; + raise Exception.CreateFmt('Invalid FileNum passed: %d',[FileNum]); If MFiles[FileNum].FS = nil Then Begin - WriteLn('FileSize: Invalid Internal Handle'); + TClient(Client).Writeln(format('FileSize: Invalid Internal Handle of File: %d',[filenum])); Result := -1; Exit; End; @@ -417,14 +391,10 @@ end; function TMFiles.FilePointerPos(FileNum: Integer): Integer; begin If(FileNum < 0) or (FileNum >= Length(MFiles)) Then - Begin - WriteLn('Invalid File Num'); - Result := -1; - Exit; - End; + raise Exception.CreateFmt('Invalid FileNum passed: %d',[FileNum]); If MFiles[FileNum].FS = nil Then Begin - WriteLn('FileSize: Invalid Internal Handle'); + TClient(Client).Writeln(format('FilePointerPos: Invalid Internal Handle of File: %d',[filenum])); Result := -1; Exit; End; @@ -432,7 +402,7 @@ begin try Result := MFiles[FileNum].FS.Seek(0, fsFromCurrent); Except - WriteLn('Exception in FilePointerPos'); + TClient(Client).Writeln('Exception in FilePointerPos'); End; //Result := FileSeek(Files[FileNum].FS, 0, fsFromCurrent); end; @@ -445,14 +415,10 @@ function TMFiles.ReadFileString(FileNum: Integer; out s: string; x: Integer): Bo begin If(FileNum < 0) or (FileNum >= Length(MFiles)) Then - Begin - WriteLn('Invalid File Num'); - Result := False; - Exit; - End; + raise Exception.CreateFmt('Invalid FileNum passed: %d',[FileNum]); If MFiles[FileNum].FS = nil Then Begin - WriteLn('ReadFileString: Invalid Internal Handle'); + TClient(Client).Writeln(format('ReadFileString: Invalid Internal Handle of File: %d',[filenum])); Exit; End; @@ -472,14 +438,10 @@ end; function TMFiles.WriteFileString(FileNum: Integer; s: string): Boolean; begin If(FileNum < 0) or (FileNum >= Length(MFiles)) Then - Begin - WriteLn('Invalid File Num'); - Result := False; - Exit; - End; + raise Exception.CreateFmt('Invalid FileNum passed: %d',[FileNum]); If(MFiles[FileNum].FS = nil) Then Begin - WriteLn('WriteFileString: Invalid Internal Handle'); + TClient(Client).Writeln(format('WriteFileString: Invalid Internal Handle of File: %d',[filenum])); Result := False; Exit; End; @@ -493,7 +455,7 @@ begin try Result := MFiles[FileNum].FS.Write(S[1], Length(S)) <> 1; except - WriteLn('Exception - WriteFileString.'); + TClient(Client).Writeln('Exception - WriteFileString.'); Result := False; end; diff --git a/trunk/Units/MMLCore/finder.pas b/trunk/Units/MMLCore/finder.pas index 98ad98b..31ecc33 100644 --- a/trunk/Units/MMLCore/finder.pas +++ b/trunk/Units/MMLCore/finder.pas @@ -30,7 +30,7 @@ interface {$define CheckAllBackground}//Undefine this to only check the first white point against the background (in masks). uses - Classes, SysUtils,bitmaps, MufasaTypes; // Types + Classes, SysUtils,bitmaps,MufasaBase, MufasaTypes; // Types { TMFinder Class } @@ -1515,7 +1515,7 @@ begin //We wont want HSL comparison with BMPs, right? Not for now atleast. if CCTS > 1 then begin - Writeln('CTS > 1, putting it temporary back to 1. For this (bitmap)search'); + mDebugLn('CTS > 1, putting it temporary back to 1. For this (bitmap)search'); CCTS := 1; end; //Get the "skip coords". @@ -1652,7 +1652,7 @@ begin CCTS := Self.CTS; if CCTS > 1 then begin - Writeln('CTS > 1, putting it temporary back to 1. For this (bitmap)search'); + mDebugLn('CTS > 1, putting it temporary back to 1. For this (bitmap)search'); CCTS := 1; end; //Get the "skip coords". @@ -1727,7 +1727,7 @@ begin CCTS := Self.CTS; if CCTS > 1 then begin - Writeln('CTS > 1, putting it temporary back to 1. For this (bitmap)search'); + mDebugLn('CTS > 1, putting it temporary back to 1. For this (bitmap)search'); CCTS := 1; end; FoundC := 0; diff --git a/trunk/Units/MMLCore/fontloader.pas b/trunk/Units/MMLCore/fontloader.pas index e370f5b..2e8cb1c 100644 --- a/trunk/Units/MMLCore/fontloader.pas +++ b/trunk/Units/MMLCore/fontloader.pas @@ -56,10 +56,11 @@ type function GetFontIndex(Name: String): Integer; function GetFontByIndex(Index : integer): TMfont; private - Fonts: TList; - Path: String; + Fonts: TList; + Path: String; + Client : TObject; public - constructor Create; + constructor Create(Owner : TObject); destructor Destroy; override; function GetFont(Name: String): TOcrData; @@ -75,7 +76,7 @@ type implementation uses - MufasaTypes; + MufasaTypes,Client; constructor TMFont.Create; @@ -139,12 +140,12 @@ begin result := TMfont(Fonts.Items[index]); end; -constructor TMFonts.Create; +constructor TMFonts.Create(Owner : TObject); begin - inherited; - + inherited Create; Fonts := TList.Create; + Client := Owner; end; destructor TMFonts.Destroy; @@ -223,7 +224,7 @@ begin f.Data := ocrdata; Fonts.Add(f); {$IFDEF FONTDEBUG} - writeln('Loaded Font ' + f.Name); + TClient(Client).Writeln('Loaded Font ' + f.Name); {$ENDIF} end; @@ -232,7 +233,7 @@ function TMFonts.Copy: TMFonts; var i:integer; begin - Result := TMFonts.Create; + Result := TMFonts.Create(Client); Result.Path := Self.GetPath(); for i := 0 to Self.Fonts.Count -1 do Result.Fonts.Add(TMFont(Self.Fonts.Items[i]).Copy()); diff --git a/trunk/Units/MMLCore/libloader.pas b/trunk/Units/MMLCore/libloader.pas index 5892c4e..e8e15e3 100644 --- a/trunk/Units/MMLCore/libloader.pas +++ b/trunk/Units/MMLCore/libloader.pas @@ -36,7 +36,7 @@ interface implementation uses - MufasaTypes,FileUtil; + MufasaTypes,MufasaBase,FileUtil; procedure TGenericLoader.AddPath(path: string); var @@ -47,7 +47,7 @@ implementation //IDK who changed this to loading a dir, but DON'T if not PluginDirs.Find(verified,idx) then begin - writeln('Adding Plugin Path: ' + verified); + mDebugLn('Adding Plugin Path: ' + verified); PluginDirs.Add(verified); end; end; @@ -60,7 +60,7 @@ implementation begin; if (Loaded[i].handle > 0) then try - Writeln(inttostr(I)); + mDebugLn('Freeing plugin[%d]',[i]); FreeLibrary(Loaded[i].handle); except end; @@ -136,7 +136,7 @@ implementation if Loaded[i].filename = (PluginDirs.Strings[ii] + PluginName + PlugExt) then Exit(i); SetLength(Loaded,PluginLen + 1); - Writeln(Format('Loading plugin %s at %s',[PluginName,PluginDirs.Strings[ii]])); + mDebugLn(Format('Loading plugin %s at %s',[PluginName,PluginDirs.Strings[ii]])); Loaded[PluginLen].filename:= PluginDirs.Strings[ii] + Pluginname + PlugExt; Loaded[PluginLen].handle:= LoadLibrary(Loaded[PluginLen].filename); if Loaded[PluginLen].handle = 0 then diff --git a/trunk/Units/MMLCore/mufasabase.pas b/trunk/Units/MMLCore/mufasabase.pas new file mode 100644 index 0000000..670ff85 --- /dev/null +++ b/trunk/Units/MMLCore/mufasabase.pas @@ -0,0 +1,50 @@ +unit mufasabase; + +{$mode objfpc} + +interface + +uses + files, Classes, SysUtils{$ifdef MSWindows},windows{$endif}; + +procedure mDebugLn( s : string);overload; +procedure mDebugLn( s : string; f : array of const);overload; +procedure InitmDebug; +procedure FreemDebug; +implementation + +uses + TestUnit; +var + CanDebug : boolean = false; + +procedure mDebugLn(s: string); +begin + if CanDebug then + Writeln(s); +end; + +procedure mDebugLn(s: string; f: array of const); overload; +begin + mDebugLn(format(s,f)); +end; + +procedure InitmDebug; +begin + CanDebug := true; + {$ifdef MSWindows} + IsConsole:= True; + SysInitStdIO; + {$endif} +end; + +procedure FreemDebug; +begin + CanDebug := false; + {$ifdef MSWindows} + IsConsole := false; + {$endif} +end; + +end. + diff --git a/trunk/Units/MMLCore/mufasatypes.pas b/trunk/Units/MMLCore/mufasatypes.pas index 43721a9..baab09d 100644 --- a/trunk/Units/MMLCore/mufasatypes.pas +++ b/trunk/Units/MMLCore/mufasatypes.pas @@ -121,6 +121,7 @@ type SubPoints: TDTMPointDefArray; end; + TWritelnProc = procedure(s: string); type VirtualKeyInfo = record Str : string; diff --git a/trunk/Units/MMLCore/ocr.pas b/trunk/Units/MMLCore/ocr.pas index f064fce..5f17117 100644 --- a/trunk/Units/MMLCore/ocr.pas +++ b/trunk/Units/MMLCore/ocr.pas @@ -28,7 +28,7 @@ unit ocr; interface uses - Classes, SysUtils, MufasaTypes, bitmaps, math, ocrutil, fontloader, + Classes, SysUtils, MufasaTypes,MufasaBase, bitmaps, math, ocrutil, fontloader, {Begin To-Remove units. Replace ReadBmp with TMufasaBitmap stuff later.} graphtype, intfgraphics,graphics; {End To-Remove unit} @@ -121,7 +121,7 @@ constructor TMOCR.Create(Owner: TObject); begin inherited Create; Self.Client := Owner; - Self.Fonts := TMFonts.Create; + Self.Fonts := TMFonts.Create(Owner); end; { Destructor } @@ -150,9 +150,6 @@ begin begin if Fonts.LoadFont(dirs[i], false) then result := true; - {$IFDEF FONTDEBUG} - writeln('Loading ' + dirs[i]); - {$ENDIF} end; If DirectoryExists(path + 'UpChars') then Fonts.LoadFont('UpChars', true); // shadow @@ -564,9 +561,9 @@ begin begin // more than one char {$IFDEF OCRDEBUG} if length(chars_2d[y]) > 70 then - writeln('more than one char at y: ' + inttostr(y)); + mDebugLn('more than one char at y: ' + inttostr(y)); if (bb.x2 - bb.x1 > 10) then - writeln('too wide at y: ' + inttostr(y)); + mDebugLn('too wide at y: ' + inttostr(y)); {$ENDIF} helpershadow:=getshadows(shadowsbmp,chars_2d[y]); chars_2d_b := splittpaex(helpershadow,2,shadowsbmp.height); @@ -649,17 +646,11 @@ begin begin font := Fonts.GetFont('UpChars_s'); thachars := shadows; - {$IFDEF OCRDEBUG} - writeln('using shadows'); - {$ENDIF} end else begin font := Fonts.GetFont('UpChars'); thachars := chars; - {$IFDEF OCRDEBUG} - writeln('not using shadows'); - {$ENDIF} end; lbset:=false; @@ -841,11 +832,10 @@ begin for i := 1 to length(text) do begin - writeln(text[i]); an := Ord(text[i]); if not InRange(an, 0, 255) then begin - writeln('WARNING: Invalid character passed to TextToFontTPA'); + mDebugLn('WARNING: Invalid character passed to TextToFontTPA'); continue; end; d := fontD.ascii[an]; @@ -879,7 +869,6 @@ var begin TPA := TextToFontTPA(text, font, w, h); bmp := TMufasaBitmap.Create; - writeln(format('b: %d, %d', [w, h])); bmp.SetSize(w, h); bmp.DrawTPA(TPA, clWhite); result := bmp; diff --git a/trunk/Units/MMLCore/os_linux.pas b/trunk/Units/MMLCore/os_linux.pas index aca1d8e..2d41fe0 100644 --- a/trunk/Units/MMLCore/os_linux.pas +++ b/trunk/Units/MMLCore/os_linux.pas @@ -148,14 +148,14 @@ implementation xerror := 'UNKNOWN'; end; result := 0; - Writeln('X Error: '); - writeln('Error code: ' + inttostr(para2^.error_code)); - writeln('Display: ' + inttostr(LongWord(para2^.display))); - writeln('Minor code: ' + inttostr(para2^.minor_code)); - writeln('Request code: ' + inttostr(para2^.request_code)); - writeln('Resource ID: ' + inttostr(para2^.resourceid)); - writeln('Serial: ' + inttostr(para2^.serial)); - writeln('Type: ' + inttostr(para2^._type)); + mDebugLn('X Error: '); + mDebugLn('Error code: ' + inttostr(para2^.error_code)); + mDebugLn('Display: ' + inttostr(LongWord(para2^.display))); + mDebugLn('Minor code: ' + inttostr(para2^.minor_code)); + mDebugLn('Request code: ' + inttostr(para2^.request_code)); + mDebugLn('Resource ID: ' + inttostr(para2^.resourceid)); + mDebugLn('Serial: ' + inttostr(para2^.serial)); + mDebugLn('Type: ' + inttostr(para2^._type)); end; function TWindow.GetError: String; @@ -271,8 +271,8 @@ implementation buffer := XGetImage(display, window, xs, ys, width, height, AllPlanes, ZPixmap); if buffer = nil then begin - Writeln('ReturnData: XGetImage Error. Dumping data now:'); - Writeln('xs, ys, width, height: ' + inttostr(xs) + ', ' + inttostr(ys) + + mDebugLn('ReturnData: XGetImage Error. Dumping data now:'); + mDebugLn('xs, ys, width, height: ' + inttostr(xs) + ', ' + inttostr(ys) + ', ' + inttostr(width) + ', ' + inttostr(height)); Result.Ptr := nil; Result.IncPtrWith := 0; diff --git a/trunk/Units/MMLCore/os_windows.pas b/trunk/Units/MMLCore/os_windows.pas index 98a2459..48a3c64 100644 --- a/trunk/Units/MMLCore/os_windows.pas +++ b/trunk/Units/MMLCore/os_windows.pas @@ -181,7 +181,7 @@ implementation destructor TWindow.Destroy; begin - ReleaseDC(handle,dc); + ReleaseDC(handle,dc);//Dogdy as one might have used .create and not set a handle.. buffer.Free; keyinput.Free; inherited Destroy; @@ -283,8 +283,8 @@ implementation Rect := WindowRect; x := x + rect.left; y := y + rect.top; - if (x<0) or (y<0) then - writeln('Negative coords, what now?'); +{ if (x<0) or (y<0) then + writeln('Negative coords, what now?');} Windows.SetCursorPos(x, y); end; procedure TWindow.HoldMouse(x,y: integer; button: TClickType); @@ -416,7 +416,6 @@ begin inherited Create; self.dc := GetDC(DesktopHandle); self.handle:= DesktopHandle; - Writeln('Created a desktop window'); end; diff --git a/trunk/Units/MMLCore/tpa.pas b/trunk/Units/MMLCore/tpa.pas index ef7bc28..7339d3e 100644 --- a/trunk/Units/MMLCore/tpa.pas +++ b/trunk/Units/MMLCore/tpa.pas @@ -696,7 +696,6 @@ var SizeArr: TIntegerArray; begin l := High(a); - Writeln(inttostr(l)); if (l < 0) then Exit; SetLength(SizeArr, l + 1); for i := 0 to l do