Something to do with crlf..
This commit is contained in:
parent
11406043f1
commit
419e801b8a
|
@ -1,357 +1,357 @@
|
||||||
{
|
{
|
||||||
This file is part of the Mufasa Macro Library (MML)
|
This file is part of the Mufasa Macro Library (MML)
|
||||||
Copyright (c) 2009 by Raymond van Venetië and Merlijn Wajer
|
Copyright (c) 2009 by Raymond van Venetië and Merlijn Wajer
|
||||||
|
|
||||||
MML is free software: you can redistribute it and/or modify
|
MML is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
MML is distributed in the hope that it will be useful,
|
MML is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with MML. If not, see <http://www.gnu.org/licenses/>.
|
along with MML. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
See the file COPYING, included in this distribution,
|
See the file COPYING, included in this distribution,
|
||||||
for details about the copyright.
|
for details about the copyright.
|
||||||
|
|
||||||
framescript for the Mufasa Macro Library
|
framescript for the Mufasa Macro Library
|
||||||
}
|
}
|
||||||
unit framescript;
|
unit framescript;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, FileUtil, LResources, Forms, SynHighlighterPas, SynEdit, SynEditMarkupHighAll,
|
Classes, SysUtils, FileUtil, LResources, Forms, SynHighlighterPas, SynEdit, SynEditMarkupHighAll,
|
||||||
mmlpsthread,ComCtrls, SynEditKeyCmds, LCLType,MufasaBase, SynEditMarkupSpecialLine, Graphics, Controls;
|
mmlpsthread,ComCtrls, SynEditKeyCmds, LCLType,MufasaBase, SynEditMarkupSpecialLine, Graphics, Controls;
|
||||||
const
|
const
|
||||||
ecCodeCompletion = ecUserFirst;
|
ecCodeCompletion = ecUserFirst;
|
||||||
type
|
type
|
||||||
TScriptState = (ss_None,ss_Running,ss_Paused,ss_Stopping);
|
TScriptState = (ss_None,ss_Running,ss_Paused,ss_Stopping);
|
||||||
{
|
{
|
||||||
ss_None: Means the script either hasn't been run yet, or it has ended (Succesfully or terminated)
|
ss_None: Means the script either hasn't been run yet, or it has ended (Succesfully or terminated)
|
||||||
ss_Running: Means the script is running as we speak :-)
|
ss_Running: Means the script is running as we speak :-)
|
||||||
ss_Paused: Means the script is currently in pause modus.
|
ss_Paused: Means the script is currently in pause modus.
|
||||||
ss_Stopping: Means we've asked PS-Script politely to stop the script (next time we press the stop button we won't be that nice).
|
ss_Stopping: Means we've asked PS-Script politely to stop the script (next time we press the stop button we won't be that nice).
|
||||||
}
|
}
|
||||||
|
|
||||||
{ TScriptFrame }
|
{ TScriptFrame }
|
||||||
|
|
||||||
TScriptFrame = class(TFrame)
|
TScriptFrame = class(TFrame)
|
||||||
SynEdit: TSynEdit;
|
SynEdit: TSynEdit;
|
||||||
SynFreePascalSyn1: TSynFreePascalSyn;
|
SynFreePascalSyn1: TSynFreePascalSyn;
|
||||||
procedure SynEditChange(Sender: TObject);
|
procedure SynEditChange(Sender: TObject);
|
||||||
procedure SynEditDragDrop(Sender, Source: TObject; X, Y: Integer);
|
procedure SynEditDragDrop(Sender, Source: TObject; X, Y: Integer);
|
||||||
procedure SynEditDragOver(Sender, Source: TObject; X, Y: Integer;
|
procedure SynEditDragOver(Sender, Source: TObject; X, Y: Integer;
|
||||||
State: TDragState; var Accept: Boolean);
|
State: TDragState; var Accept: Boolean);
|
||||||
procedure SynEditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
|
procedure SynEditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
|
||||||
);
|
);
|
||||||
procedure SynEditProcessCommand(Sender: TObject;
|
procedure SynEditProcessCommand(Sender: TObject;
|
||||||
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer);
|
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer);
|
||||||
procedure SynEditProcessUserCommand(Sender: TObject;
|
procedure SynEditProcessUserCommand(Sender: TObject;
|
||||||
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer);
|
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer);
|
||||||
procedure SynEditSpecialLineColors(Sender: TObject; Line: integer;
|
procedure SynEditSpecialLineColors(Sender: TObject; Line: integer;
|
||||||
var Special: boolean; var FG, BG: TColor);
|
var Special: boolean; var FG, BG: TColor);
|
||||||
procedure SynEditStatusChange(Sender: TObject; Changes: TSynStatusChanges);
|
procedure SynEditStatusChange(Sender: TObject; Changes: TSynStatusChanges);
|
||||||
private
|
private
|
||||||
OwnerPage : TPageControl;
|
OwnerPage : TPageControl;
|
||||||
OwnerSheet : TTabSheet;//The owner TTabsheet -> For title setting
|
OwnerSheet : TTabSheet;//The owner TTabsheet -> For title setting
|
||||||
public
|
public
|
||||||
ErrorData : TErrorData; //For threadsafestuff
|
ErrorData : TErrorData; //For threadsafestuff
|
||||||
ScriptErrorLine : integer; //Highlight the error line!
|
ScriptErrorLine : integer; //Highlight the error line!
|
||||||
ScriptFile : string;//The path to the saved/opened file currently in the SynEdit
|
ScriptFile : string;//The path to the saved/opened file currently in the SynEdit
|
||||||
StartText : string;//The text synedit holds upon start/open/save
|
StartText : string;//The text synedit holds upon start/open/save
|
||||||
ScriptName : string;//The name of the currently opened/saved file.
|
ScriptName : string;//The name of the currently opened/saved file.
|
||||||
ScriptDefault : string;//The default script e.g. program new; begin end.
|
ScriptDefault : string;//The default script e.g. program new; begin end.
|
||||||
ScriptChanged : boolean;//We need this for that little * (edited star).
|
ScriptChanged : boolean;//We need this for that little * (edited star).
|
||||||
ScriptThread : TMThread;//Just one thread for now..
|
ScriptThread : TMThread;//Just one thread for now..
|
||||||
FScriptState : TScriptState;//Stores the ScriptState, if you want the Run/Pause/Start buttons to change accordingly, acces through Form1
|
FScriptState : TScriptState;//Stores the ScriptState, if you want the Run/Pause/Start buttons to change accordingly, acces through Form1
|
||||||
procedure undo;
|
procedure undo;
|
||||||
procedure redo;
|
procedure redo;
|
||||||
procedure HandleErrorData;
|
procedure HandleErrorData;
|
||||||
procedure MakeActiveScriptFrame;
|
procedure MakeActiveScriptFrame;
|
||||||
procedure ScriptThreadTerminate(Sender: TObject);
|
procedure ScriptThreadTerminate(Sender: TObject);
|
||||||
constructor Create(TheOwner: TComponent); override;
|
constructor Create(TheOwner: TComponent); override;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
{ public declarations }
|
{ public declarations }
|
||||||
end;
|
end;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
uses
|
uses
|
||||||
TestUnit, SynEditTypes, LCLIntF, StrUtils,framefunctionlist;
|
TestUnit, SynEditTypes, LCLIntF, StrUtils,framefunctionlist;
|
||||||
|
|
||||||
{ TScriptFrame }
|
{ TScriptFrame }
|
||||||
|
|
||||||
procedure TScriptFrame.SynEditChange(Sender: TObject);
|
procedure TScriptFrame.SynEditChange(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
ScriptErrorLine:= -1;
|
ScriptErrorLine:= -1;
|
||||||
if not ScriptChanged then
|
if not ScriptChanged then
|
||||||
begin;
|
begin;
|
||||||
ScriptChanged:= True;
|
ScriptChanged:= True;
|
||||||
Form1.Caption:= Format(WindowTitle,[ScriptName + '*']);
|
Form1.Caption:= Format(WindowTitle,[ScriptName + '*']);
|
||||||
OwnerSheet.Caption:=ScriptName + '*';
|
OwnerSheet.Caption:=ScriptName + '*';
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TScriptFrame.SynEditDragDrop(Sender, Source: TObject; X, Y: Integer);
|
procedure TScriptFrame.SynEditDragDrop(Sender, Source: TObject; X, Y: Integer);
|
||||||
begin
|
begin
|
||||||
if Source is TFunctionListFrame then
|
if Source is TFunctionListFrame then
|
||||||
if TFunctionListFrame(Source).DraggingNode.Data <> nil then
|
if TFunctionListFrame(Source).DraggingNode.Data <> nil then
|
||||||
SynEdit.InsertTextAtCaret( GetMethodName(PMethodInfo(TFunctionListFrame(Source).DraggingNode.Data)^.MethodStr,true));
|
SynEdit.InsertTextAtCaret( GetMethodName(PMethodInfo(TFunctionListFrame(Source).DraggingNode.Data)^.MethodStr,true));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TScriptFrame.SynEditDragOver(Sender, Source: TObject; X, Y: Integer;
|
procedure TScriptFrame.SynEditDragOver(Sender, Source: TObject; X, Y: Integer;
|
||||||
State: TDragState; var Accept: Boolean);
|
State: TDragState; var Accept: Boolean);
|
||||||
begin
|
begin
|
||||||
Accept := Source = Form1.frmFunctionList;
|
Accept := Source = Form1.frmFunctionList;
|
||||||
if(Accept)then
|
if(Accept)then
|
||||||
begin
|
begin
|
||||||
SynEdit.CaretXY := SynEdit.PixelsToLogicalPos(point(x, y));
|
SynEdit.CaretXY := SynEdit.PixelsToLogicalPos(point(x, y));
|
||||||
if(not(Form1.Active))then Form1.BringToFront;
|
if(not(Form1.Active))then Form1.BringToFront;
|
||||||
if(Form1.ActiveControl <> SynEdit)then Form1.ActiveControl := SynEdit;
|
if(Form1.ActiveControl <> SynEdit)then Form1.ActiveControl := SynEdit;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TScriptFrame.SynEditKeyDown(Sender: TObject; var Key: Word;
|
procedure TScriptFrame.SynEditKeyDown(Sender: TObject; var Key: Word;
|
||||||
Shift: TShiftState);
|
Shift: TShiftState);
|
||||||
begin
|
begin
|
||||||
if key = VK_F3 then
|
if key = VK_F3 then
|
||||||
begin;
|
begin;
|
||||||
Form1.ActionFindNextExecute(Sender);
|
Form1.ActionFindNextExecute(Sender);
|
||||||
key := 0;
|
key := 0;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TScriptFrame.SynEditProcessCommand(Sender: TObject;
|
procedure TScriptFrame.SynEditProcessCommand(Sender: TObject;
|
||||||
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer);
|
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer);
|
||||||
begin
|
begin
|
||||||
case Command of
|
case Command of
|
||||||
ecUndo : begin
|
ecUndo : begin
|
||||||
Command:= ecNone;
|
Command:= ecNone;
|
||||||
Self.Undo;
|
Self.Undo;
|
||||||
end;
|
end;
|
||||||
ecRedo : begin
|
ecRedo : begin
|
||||||
Command := ecNone;
|
Command := ecNone;
|
||||||
self.Redo;
|
self.Redo;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TScriptFrame.SynEditProcessUserCommand(Sender: TObject;
|
procedure TScriptFrame.SynEditProcessUserCommand(Sender: TObject;
|
||||||
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer);
|
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer);
|
||||||
var
|
var
|
||||||
LineText,SearchText : string;
|
LineText,SearchText : string;
|
||||||
Caret : TPoint;
|
Caret : TPoint;
|
||||||
i,endI : integer;
|
i,endI : integer;
|
||||||
begin
|
begin
|
||||||
if Command = ecCodeCompletion then
|
if Command = ecCodeCompletion then
|
||||||
begin
|
begin
|
||||||
form1.FunctionListShown(True);
|
form1.FunctionListShown(True);
|
||||||
with form1.frmFunctionList do
|
with form1.frmFunctionList do
|
||||||
if editSearchList.CanFocus then
|
if editSearchList.CanFocus then
|
||||||
begin;
|
begin;
|
||||||
editSearchList.SetFocus;
|
editSearchList.SetFocus;
|
||||||
LineText := SynEdit.LineText;
|
LineText := SynEdit.LineText;
|
||||||
Caret:=SynEdit.LogicalCaretXY;
|
Caret:=SynEdit.LogicalCaretXY;
|
||||||
i := Caret.X - 1;
|
i := Caret.X - 1;
|
||||||
endi := caret.x;
|
endi := caret.x;
|
||||||
if (i > length(LineText)) or ((i = 0) and (length(lineText) = 0)) then
|
if (i > length(LineText)) or ((i = 0) and (length(lineText) = 0)) then
|
||||||
begin
|
begin
|
||||||
SearchText:= '';
|
SearchText:= '';
|
||||||
CompletionLine := PadRight(linetext,caret.x);
|
CompletionLine := PadRight(linetext,caret.x);
|
||||||
end
|
end
|
||||||
else begin
|
else begin
|
||||||
while (i > 0) and (LineText[i] in ['a'..'z','A'..'Z','0'..'9','_']) do
|
while (i > 0) and (LineText[i] in ['a'..'z','A'..'Z','0'..'9','_']) do
|
||||||
dec(i);
|
dec(i);
|
||||||
while LineText[endi] in ['a'..'z','A'..'Z','0'..'9','_'] do
|
while LineText[endi] in ['a'..'z','A'..'Z','0'..'9','_'] do
|
||||||
inc(endi);
|
inc(endi);
|
||||||
SearchText := Trim(copy(LineText, i + 1, Caret.X - i - 1));
|
SearchText := Trim(copy(LineText, i + 1, Caret.X - i - 1));
|
||||||
CompletionLine := LineText;
|
CompletionLine := LineText;
|
||||||
end;
|
end;
|
||||||
CompletionStart:= LineText;
|
CompletionStart:= LineText;
|
||||||
Delete(CompletionLine,i+1,endi - i - 1);
|
Delete(CompletionLine,i+1,endi - i - 1);
|
||||||
Insert('%s',CompletionLine,i+1);
|
Insert('%s',CompletionLine,i+1);
|
||||||
CompletionCaret := Point(endi,Caret.y);
|
CompletionCaret := Point(endi,Caret.y);
|
||||||
StartWordCompletion:= Point(i+1,caret.y);
|
StartWordCompletion:= Point(i+1,caret.y);
|
||||||
mDebugLn(CompletionLine);
|
mDebugLn(CompletionLine);
|
||||||
mDebugLn(CompletionStart);
|
mDebugLn(CompletionStart);
|
||||||
InCodeCompletion := true;
|
InCodeCompletion := true;
|
||||||
editSearchList.Text:= SearchText;
|
editSearchList.Text:= SearchText;
|
||||||
editSearchList.SelStart:= Length(searchText);
|
editSearchList.SelStart:= Length(searchText);
|
||||||
SynEdit.SelectedColor.Style:= [fsUnderline];
|
SynEdit.SelectedColor.Style:= [fsUnderline];
|
||||||
SynEdit.SelectedColor.Foreground:= clBlack;
|
SynEdit.SelectedColor.Foreground:= clBlack;
|
||||||
SynEdit.SelectedColor.Background:= clWhite;
|
SynEdit.SelectedColor.Background:= clWhite;
|
||||||
Synedit.MarkupByClass[TSynEditMarkupHighlightAllCaret].TempDisable;
|
Synedit.MarkupByClass[TSynEditMarkupHighlightAllCaret].TempDisable;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TScriptFrame.SynEditSpecialLineColors(Sender: TObject;
|
procedure TScriptFrame.SynEditSpecialLineColors(Sender: TObject;
|
||||||
Line: integer; var Special: boolean; var FG, BG: TColor);
|
Line: integer; var Special: boolean; var FG, BG: TColor);
|
||||||
begin
|
begin
|
||||||
if line = ScriptErrorLine then
|
if line = ScriptErrorLine then
|
||||||
begin;
|
begin;
|
||||||
Special := true;
|
Special := true;
|
||||||
BG := $50a0ff;
|
BG := $50a0ff;
|
||||||
FG := 0;
|
FG := 0;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TScriptFrame.SynEditStatusChange(Sender: TObject;
|
procedure TScriptFrame.SynEditStatusChange(Sender: TObject;
|
||||||
Changes: TSynStatusChanges);
|
Changes: TSynStatusChanges);
|
||||||
begin
|
begin
|
||||||
{$IFDEF UpdateEditButtons}
|
{$IFDEF UpdateEditButtons}
|
||||||
if scSelection in changes then
|
if scSelection in changes then
|
||||||
begin;
|
begin;
|
||||||
Form1.TT_Cut.Enabled := SynEdit.SelAvail;
|
Form1.TT_Cut.Enabled := SynEdit.SelAvail;
|
||||||
form1.TT_Copy.Enabled:= Form1.TT_Cut.Enabled;
|
form1.TT_Copy.Enabled:= Form1.TT_Cut.Enabled;
|
||||||
form1.TT_Paste.Enabled:= SynEdit.CanPaste;
|
form1.TT_Paste.Enabled:= SynEdit.CanPaste;
|
||||||
end;
|
end;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TScriptFrame.undo;
|
procedure TScriptFrame.undo;
|
||||||
begin
|
begin
|
||||||
SynEdit.Undo;
|
SynEdit.Undo;
|
||||||
if ScriptChanged then
|
if ScriptChanged then
|
||||||
if SynEdit.Lines.Text = StartText then
|
if SynEdit.Lines.Text = StartText then
|
||||||
begin;
|
begin;
|
||||||
Form1.Caption:= format(WindowTitle,[ScriptName]);
|
Form1.Caption:= format(WindowTitle,[ScriptName]);
|
||||||
OwnerSheet.Caption:= ScriptName;
|
OwnerSheet.Caption:= ScriptName;
|
||||||
ScriptChanged := false;
|
ScriptChanged := false;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TScriptFrame.redo;
|
procedure TScriptFrame.redo;
|
||||||
begin
|
begin
|
||||||
SynEdit.Redo;
|
SynEdit.Redo;
|
||||||
if ScriptChanged then
|
if ScriptChanged then
|
||||||
if SynEdit.Lines.Text = StartText then
|
if SynEdit.Lines.Text = StartText then
|
||||||
begin;
|
begin;
|
||||||
Form1.Caption:= format(WindowTitle,[ScriptName]);
|
Form1.Caption:= format(WindowTitle,[ScriptName]);
|
||||||
OwnerSheet.Caption := ScriptName;
|
OwnerSheet.Caption := ScriptName;
|
||||||
ScriptChanged := false;
|
ScriptChanged := false;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TScriptFrame.HandleErrorData;
|
procedure TScriptFrame.HandleErrorData;
|
||||||
var
|
var
|
||||||
i : integer;
|
i : integer;
|
||||||
begin
|
begin
|
||||||
if ErrorData.Module <> '' then
|
if ErrorData.Module <> '' then
|
||||||
begin;
|
begin;
|
||||||
if not FileExists(ErrorData.Module) then
|
if not FileExists(ErrorData.Module) then
|
||||||
formWriteln(Format('ERROR comes from a non-existing file (%s)',[ErrorData.Module]))
|
formWriteln(Format('ERROR comes from a non-existing file (%s)',[ErrorData.Module]))
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
ErrorData.Module:= SetDirSeparators(ErrorData.Module);// Set it right ;-)
|
ErrorData.Module:= SetDirSeparators(ErrorData.Module);// Set it right ;-)
|
||||||
for i := 0 to Form1.Tabs.Count - 1 do
|
for i := 0 to Form1.Tabs.Count - 1 do
|
||||||
if lowercase(TMufasaTab(Form1.Tabs[i]).ScriptFrame.ScriptFile) = lowercase(ErrorData.Module) then
|
if lowercase(TMufasaTab(Form1.Tabs[i]).ScriptFrame.ScriptFile) = lowercase(ErrorData.Module) then
|
||||||
begin;
|
begin;
|
||||||
ErrorData.Module:= '';
|
ErrorData.Module:= '';
|
||||||
TMufasaTab(Form1.Tabs[i]).ScriptFrame.ErrorData := Self.ErrorData;
|
TMufasaTab(Form1.Tabs[i]).ScriptFrame.ErrorData := Self.ErrorData;
|
||||||
TMufasaTab(Form1.Tabs[i]).ScriptFrame.HandleErrorData;
|
TMufasaTab(Form1.Tabs[i]).ScriptFrame.HandleErrorData;
|
||||||
Exit;
|
Exit;
|
||||||
end;
|
end;
|
||||||
Form1.LoadScriptFile(ErrorData.Module,true);
|
Form1.LoadScriptFile(ErrorData.Module,true);
|
||||||
ErrorData.Module:= '';
|
ErrorData.Module:= '';
|
||||||
Form1.CurrScript.ErrorData := Self.ErrorData;
|
Form1.CurrScript.ErrorData := Self.ErrorData;
|
||||||
Form1.CurrScript.HandleErrorData;
|
Form1.CurrScript.HandleErrorData;
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
MakeActiveScriptFrame;
|
MakeActiveScriptFrame;
|
||||||
ScriptErrorLine:= ErrorData.Row;
|
ScriptErrorLine:= ErrorData.Row;
|
||||||
SynEdit.Invalidate;
|
SynEdit.Invalidate;
|
||||||
if ErrorData.Col = -1 then
|
if ErrorData.Col = -1 then
|
||||||
SynEdit.SelStart:= ErrorData.Position
|
SynEdit.SelStart:= ErrorData.Position
|
||||||
else
|
else
|
||||||
SynEdit.LogicalCaretXY := Point(ErrorData.Col,ErrorData.Row);
|
SynEdit.LogicalCaretXY := Point(ErrorData.Col,ErrorData.Row);
|
||||||
if pos('error',lowercase(ErrorData.Error)) > 0 then
|
if pos('error',lowercase(ErrorData.Error)) > 0 then
|
||||||
formWriteln(Format('%s at line %d',[ErrorData.Error,ErrorData.Row]))
|
formWriteln(Format('%s at line %d',[ErrorData.Error,ErrorData.Row]))
|
||||||
else
|
else
|
||||||
formWriteln(Format('Error: %s at line %d',[ErrorData.Error,ErrorData.Row]));
|
formWriteln(Format('Error: %s at line %d',[ErrorData.Error,ErrorData.Row]));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TScriptFrame.MakeActiveScriptFrame;
|
procedure TScriptFrame.MakeActiveScriptFrame;
|
||||||
var
|
var
|
||||||
i : integer;
|
i : integer;
|
||||||
begin
|
begin
|
||||||
if Form1.Visible then
|
if Form1.Visible then
|
||||||
for i := 0 to OwnerPage.PageCount - 1 do
|
for i := 0 to OwnerPage.PageCount - 1 do
|
||||||
if OwnerPage.Pages[i] = OwnerSheet then
|
if OwnerPage.Pages[i] = OwnerSheet then
|
||||||
begin;
|
begin;
|
||||||
OwnerPage.TabIndex := i;
|
OwnerPage.TabIndex := i;
|
||||||
if OwnerSheet.CanFocus then
|
if OwnerSheet.CanFocus then
|
||||||
OwnerSheet.SetFocus;
|
OwnerSheet.SetFocus;
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TScriptFrame.ScriptThreadTerminate(Sender: TObject);
|
procedure TScriptFrame.ScriptThreadTerminate(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
FScriptState:= ss_None;
|
FScriptState:= ss_None;
|
||||||
Form1.RefreshTab;
|
Form1.RefreshTab;
|
||||||
end;
|
end;
|
||||||
procedure AddKey(const SynEdit : TSynEdit; const ACmd: TSynEditorCommand; const AKey: word;const AShift: TShiftState);
|
procedure AddKey(const SynEdit : TSynEdit; const ACmd: TSynEditorCommand; const AKey: word;const AShift: TShiftState);
|
||||||
begin
|
begin
|
||||||
with SynEdit.KeyStrokes.Add do
|
with SynEdit.KeyStrokes.Add do
|
||||||
begin
|
begin
|
||||||
Key := AKey;
|
Key := AKey;
|
||||||
Shift := AShift;
|
Shift := AShift;
|
||||||
Command := ACmd;
|
Command := ACmd;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
constructor TScriptFrame.Create(TheOwner: TComponent);
|
constructor TScriptFrame.Create(TheOwner: TComponent);
|
||||||
var
|
var
|
||||||
MarkCaret : TSynEditMarkupHighlightAllCaret;
|
MarkCaret : TSynEditMarkupHighlightAllCaret;
|
||||||
begin
|
begin
|
||||||
inherited Create(TheOwner);
|
inherited Create(TheOwner);
|
||||||
OwnerSheet := TTabSheet(TheOwner);
|
OwnerSheet := TTabSheet(TheOwner);
|
||||||
OwnerPage := TPageControl(OwnerSheet.Owner);
|
OwnerPage := TPageControl(OwnerSheet.Owner);
|
||||||
StartText:= SynEdit.Lines.text;
|
StartText:= SynEdit.Lines.text;
|
||||||
ScriptDefault:= StartText;
|
ScriptDefault:= StartText;
|
||||||
ScriptName:= 'Untitled';
|
ScriptName:= 'Untitled';
|
||||||
ScriptChanged := false;
|
ScriptChanged := false;
|
||||||
FScriptState:= ss_None;
|
FScriptState:= ss_None;
|
||||||
ScriptErrorLine:= -1;
|
ScriptErrorLine:= -1;
|
||||||
OwnerSheet.Caption:= ScriptName;
|
OwnerSheet.Caption:= ScriptName;
|
||||||
SynEdit.Options:= SynEdit.Options- [eoGroupUndo];
|
SynEdit.Options:= SynEdit.Options- [eoGroupUndo];
|
||||||
SynEdit.Options:= SynEdit.Options+ [eoGroupUndo,eoPersistentCaret];
|
SynEdit.Options:= SynEdit.Options+ [eoGroupUndo,eoPersistentCaret];
|
||||||
SynEdit.IncrementColor.Background := $30D070;
|
SynEdit.IncrementColor.Background := $30D070;
|
||||||
SynEdit.HighlightAllColor.Background:= clYellow;
|
SynEdit.HighlightAllColor.Background:= clYellow;
|
||||||
SynEdit.HighlightAllColor.Foreground:= clDefault;
|
SynEdit.HighlightAllColor.Foreground:= clDefault;
|
||||||
MarkCaret := TSynEditMarkupHighlightAllCaret(SynEdit.MarkupByClass[TSynEditMarkupHighlightAllCaret]);
|
MarkCaret := TSynEditMarkupHighlightAllCaret(SynEdit.MarkupByClass[TSynEditMarkupHighlightAllCaret]);
|
||||||
if assigned(MarkCaret) then
|
if assigned(MarkCaret) then
|
||||||
begin
|
begin
|
||||||
with MarkCaret.MarkupInfo do
|
with MarkCaret.MarkupInfo do
|
||||||
begin;
|
begin;
|
||||||
Background :=$E6E6E6;
|
Background :=$E6E6E6;
|
||||||
FrameColor := clGray;
|
FrameColor := clGray;
|
||||||
end;
|
end;
|
||||||
MarkCaret.Enabled := True;
|
MarkCaret.Enabled := True;
|
||||||
MarkCaret.FullWord:= True;
|
MarkCaret.FullWord:= True;
|
||||||
MarkCaret.FullWordMaxLen:= 3;
|
MarkCaret.FullWordMaxLen:= 3;
|
||||||
MarkCaret.WaitTime := 1500;
|
MarkCaret.WaitTime := 1500;
|
||||||
MarkCaret.IgnoreKeywords := true;
|
MarkCaret.IgnoreKeywords := true;
|
||||||
end;
|
end;
|
||||||
AddKey(SynEdit,ecCodeCompletion,VK_SPACE,[ssCtrl]);
|
AddKey(SynEdit,ecCodeCompletion,VK_SPACE,[ssCtrl]);
|
||||||
// TSynPasSyn(SynEdit.Highlighter).NestedComments:= false; Does not work :(
|
// TSynPasSyn(SynEdit.Highlighter).NestedComments:= false; Does not work :(
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TScriptFrame.Destroy;
|
destructor TScriptFrame.Destroy;
|
||||||
begin
|
begin
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
{$I framescript.lrs}
|
{$I framescript.lrs}
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
|
@ -1,381 +1,381 @@
|
||||||
unit simpleanalyzer;
|
unit simpleanalyzer;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
|
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
|
||||||
StdCtrls, SynEdit, SynHighlighterPas,MufasaBase, Clipbrd;
|
StdCtrls, SynEdit, SynHighlighterPas,MufasaBase, Clipbrd;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
TScriptVar = record
|
TScriptVar = record
|
||||||
VarName, VarType : string;
|
VarName, VarType : string;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TScriptMethod }
|
{ TScriptMethod }
|
||||||
|
|
||||||
TScriptMethod = class(TObject)
|
TScriptMethod = class(TObject)
|
||||||
BeginPos, EndPos : integer;
|
BeginPos, EndPos : integer;
|
||||||
isFunction : Boolean;
|
isFunction : Boolean;
|
||||||
Name : string;
|
Name : string;
|
||||||
Parameters,Vars : array of TScriptVar;
|
Parameters,Vars : array of TScriptVar;
|
||||||
ParameterLen,VarLen : integer;
|
ParameterLen,VarLen : integer;
|
||||||
Returns : String;
|
Returns : String;
|
||||||
Methods : Array of TScriptMethod;
|
Methods : Array of TScriptMethod;
|
||||||
MethodLen : Integer;
|
MethodLen : Integer;
|
||||||
function AddMethod( iszehfunction : boolean; TheName : string): TScriptMethod;
|
function AddMethod( iszehfunction : boolean; TheName : string): TScriptMethod;
|
||||||
procedure AddVar( TheName, TheType : string);
|
procedure AddVar( TheName, TheType : string);
|
||||||
procedure AddParam( TheName : string);
|
procedure AddParam( TheName : string);
|
||||||
constructor create( iszehfunction : Boolean; TheName : string);
|
constructor create( iszehfunction : Boolean; TheName : string);
|
||||||
function CreateMethodStr : string;
|
function CreateMethodStr : string;
|
||||||
Destructor Destroy; override;
|
Destructor Destroy; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TScriptAnalyzer }
|
{ TScriptAnalyzer }
|
||||||
|
|
||||||
TScriptAnalyzer = class(TObject)
|
TScriptAnalyzer = class(TObject)
|
||||||
ScriptToAnalyze : string;
|
ScriptToAnalyze : string;
|
||||||
ScriptName : string;
|
ScriptName : string;
|
||||||
Methods : Array of TScriptMethod;
|
Methods : Array of TScriptMethod;
|
||||||
MethodLen : Integer;
|
MethodLen : Integer;
|
||||||
Main : TScriptMethod;
|
Main : TScriptMethod;
|
||||||
HasMain : boolean;
|
HasMain : boolean;
|
||||||
Vars : Array of TScriptVar;
|
Vars : Array of TScriptVar;
|
||||||
VarLen : integer;
|
VarLen : integer;
|
||||||
Function AddMethod( iszehfunction : boolean; Name : string): TScriptMethod;
|
Function AddMethod( iszehfunction : boolean; Name : string): TScriptMethod;
|
||||||
procedure AddVar( TheName, TheType : string);
|
procedure AddVar( TheName, TheType : string);
|
||||||
procedure analyze;
|
procedure analyze;
|
||||||
constructor create;
|
constructor create;
|
||||||
Destructor Destroy; override;
|
Destructor Destroy; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
uses
|
uses
|
||||||
mPasLex,strutils;
|
mPasLex,strutils;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
destructor TScriptAnalyzer.Destroy;
|
destructor TScriptAnalyzer.Destroy;
|
||||||
var
|
var
|
||||||
i : integer;
|
i : integer;
|
||||||
begin;
|
begin;
|
||||||
for i := 0 to MethodLen - 1 do
|
for i := 0 to MethodLen - 1 do
|
||||||
Self.Methods[i].Free;
|
Self.Methods[i].Free;
|
||||||
Main.Free;
|
Main.Free;
|
||||||
inherited;
|
inherited;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TScriptMethod.Destroy;
|
destructor TScriptMethod.Destroy;
|
||||||
var
|
var
|
||||||
i : integer;
|
i : integer;
|
||||||
begin;
|
begin;
|
||||||
for i := 0 to MethodLen - 1 do
|
for i := 0 to MethodLen - 1 do
|
||||||
Self.Methods[i].Free;
|
Self.Methods[i].Free;
|
||||||
inherited;
|
inherited;
|
||||||
end;
|
end;
|
||||||
constructor TScriptMethod.create( iszehfunction : Boolean; TheName : string);
|
constructor TScriptMethod.create( iszehfunction : Boolean; TheName : string);
|
||||||
begin;
|
begin;
|
||||||
inherited Create;
|
inherited Create;
|
||||||
Self.isFunction := iszehfunction;
|
Self.isFunction := iszehfunction;
|
||||||
Self.Name := TheName;
|
Self.Name := TheName;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TScriptMethod.CreateMethodStr: string;
|
function TScriptMethod.CreateMethodStr: string;
|
||||||
var
|
var
|
||||||
i : integer;
|
i : integer;
|
||||||
LastType : string;
|
LastType : string;
|
||||||
begin
|
begin
|
||||||
if isFunction then
|
if isFunction then
|
||||||
result := 'function ' + Name
|
result := 'function ' + Name
|
||||||
else
|
else
|
||||||
result := 'procedure '+ name;
|
result := 'procedure '+ name;
|
||||||
if ParameterLen > 0 then
|
if ParameterLen > 0 then
|
||||||
begin;
|
begin;
|
||||||
result := result + '(';
|
result := result + '(';
|
||||||
LastType := '';
|
LastType := '';
|
||||||
for i := 0 to ParameterLen - 1 do
|
for i := 0 to ParameterLen - 1 do
|
||||||
begin;
|
begin;
|
||||||
if lasttype <> '' then
|
if lasttype <> '' then
|
||||||
if lowercase(lasttype) <> lowercase(Parameters[i].VarType) then
|
if lowercase(lasttype) <> lowercase(Parameters[i].VarType) then
|
||||||
result := result + ' : ' + LastType + '; '
|
result := result + ' : ' + LastType + '; '
|
||||||
else
|
else
|
||||||
result := result + ', ';
|
result := result + ', ';
|
||||||
result := result + Parameters[i].VarName;
|
result := result + Parameters[i].VarName;
|
||||||
lasttype := Parameters[i].VarType;
|
lasttype := Parameters[i].VarType;
|
||||||
end;
|
end;
|
||||||
Result := result + ' : ' + Parameters[ParameterLen - 1].VarType + ')';
|
Result := result + ' : ' + Parameters[ParameterLen - 1].VarType + ')';
|
||||||
end;
|
end;
|
||||||
if isFunction then
|
if isFunction then
|
||||||
result := result + ' : ' + Returns
|
result := result + ' : ' + Returns
|
||||||
else
|
else
|
||||||
result := result + ';';
|
result := result + ';';
|
||||||
end;
|
end;
|
||||||
|
|
||||||
constructor TScriptAnalyzer.create;
|
constructor TScriptAnalyzer.create;
|
||||||
begin;
|
begin;
|
||||||
inherited create;
|
inherited create;
|
||||||
ScriptName := 'Default';
|
ScriptName := 'Default';
|
||||||
Main := TScriptMethod.create(false,'!main');
|
Main := TScriptMethod.create(false,'!main');
|
||||||
end;
|
end;
|
||||||
procedure TScriptMethod.addVar( TheName, TheType : string);
|
procedure TScriptMethod.addVar( TheName, TheType : string);
|
||||||
begin;
|
begin;
|
||||||
inc(Self.VarLen);
|
inc(Self.VarLen);
|
||||||
SetLength(Self.Vars, self.varlen);
|
SetLength(Self.Vars, self.varlen);
|
||||||
Self.Vars[Self.VarLen - 1].VarName := TheName;
|
Self.Vars[Self.VarLen - 1].VarName := TheName;
|
||||||
Self.Vars[Self.VarLen - 1].VarType := TheType;
|
Self.Vars[Self.VarLen - 1].VarType := TheType;
|
||||||
end;
|
end;
|
||||||
procedure TScriptAnalyzer.AddVar( TheName, TheType : string);
|
procedure TScriptAnalyzer.AddVar( TheName, TheType : string);
|
||||||
begin;
|
begin;
|
||||||
inc(Self.VarLen);
|
inc(Self.VarLen);
|
||||||
SetLength(Self.Vars, self.VarLen);
|
SetLength(Self.Vars, self.VarLen);
|
||||||
Self.Vars[Self.VarLen - 1].VarName := TheName;
|
Self.Vars[Self.VarLen - 1].VarName := TheName;
|
||||||
Self.Vars[Self.VarLen - 1].VarType := TheType;
|
Self.Vars[Self.VarLen - 1].VarType := TheType;
|
||||||
end;
|
end;
|
||||||
function TScriptMethod.AddMethod( iszehfunction : boolean; TheName : string) : TScriptMethod;
|
function TScriptMethod.AddMethod( iszehfunction : boolean; TheName : string) : TScriptMethod;
|
||||||
begin;
|
begin;
|
||||||
inc(Self.MethodLen);
|
inc(Self.MethodLen);
|
||||||
SetLength(Self.Methods, Self.MethodLen);
|
SetLength(Self.Methods, Self.MethodLen);
|
||||||
Self.Methods[Self.Methodlen - 1] := TScriptMethod.create(iszehfunction,TheName);
|
Self.Methods[Self.Methodlen - 1] := TScriptMethod.create(iszehfunction,TheName);
|
||||||
Result :=Self.Methods[Self.Methodlen - 1];
|
Result :=Self.Methods[Self.Methodlen - 1];
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function TScriptAnalyzer.AddMethod( iszehfunction : boolean; Name : string) : TScriptMethod;
|
function TScriptAnalyzer.AddMethod( iszehfunction : boolean; Name : string) : TScriptMethod;
|
||||||
begin;
|
begin;
|
||||||
inc(Self.MethodLen);
|
inc(Self.MethodLen);
|
||||||
SetLength(Self.Methods, Self.MethodLen);
|
SetLength(Self.Methods, Self.MethodLen);
|
||||||
Self.Methods[Self.Methodlen - 1] := TScriptMethod.create(iszehfunction,Name);
|
Self.Methods[Self.Methodlen - 1] := TScriptMethod.create(iszehfunction,Name);
|
||||||
Result :=Self.Methods[Self.Methodlen - 1];
|
Result :=Self.Methods[Self.Methodlen - 1];
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TScriptMethod.AddParam(TheName: string);
|
procedure TScriptMethod.AddParam(TheName: string);
|
||||||
begin;
|
begin;
|
||||||
inc(Self.ParameterLen);
|
inc(Self.ParameterLen);
|
||||||
SetLength(Self.Parameters, self.ParameterLen);
|
SetLength(Self.Parameters, self.ParameterLen);
|
||||||
Self.Parameters[Self.ParameterLen - 1].VarName := TheName;
|
Self.Parameters[Self.ParameterLen - 1].VarName := TheName;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TScriptAnalyzer.analyze;
|
procedure TScriptAnalyzer.analyze;
|
||||||
var
|
var
|
||||||
LastTk : TTokenKind;
|
LastTk : TTokenKind;
|
||||||
StartPos,LastPos: integer;
|
StartPos,LastPos: integer;
|
||||||
|
|
||||||
LastTkString : string;
|
LastTkString : string;
|
||||||
I : integer;
|
I : integer;
|
||||||
TempInt : integer;
|
TempInt : integer;
|
||||||
InMethod : Boolean;
|
InMethod : Boolean;
|
||||||
ExpectingType : boolean; //Params and result
|
ExpectingType : boolean; //Params and result
|
||||||
WaitingForResult : boolean;
|
WaitingForResult : boolean;
|
||||||
StartParam : integer;
|
StartParam : integer;
|
||||||
StartVar : integer;
|
StartVar : integer;
|
||||||
Method : TScriptMethod;
|
Method : TScriptMethod;
|
||||||
InTypes : Boolean;
|
InTypes : Boolean;
|
||||||
TempName : string;
|
TempName : string;
|
||||||
BeginCount : integer;
|
BeginCount : integer;
|
||||||
InGlobal : boolean;
|
InGlobal : boolean;
|
||||||
InParams : boolean;
|
InParams : boolean;
|
||||||
InVarSection : Boolean;
|
InVarSection : Boolean;
|
||||||
Lex : TmwPasLex;
|
Lex : TmwPasLex;
|
||||||
begin
|
begin
|
||||||
Lex := TmwPasLex.Create;
|
Lex := TmwPasLex.Create;
|
||||||
Lex.Origin := PChar(Self.ScriptToAnalyze);
|
Lex.Origin := PChar(Self.ScriptToAnalyze);
|
||||||
InTypes := False;
|
InTypes := False;
|
||||||
InMethod := False;
|
InMethod := False;
|
||||||
InParams := False;
|
InParams := False;
|
||||||
Method := nil;
|
Method := nil;
|
||||||
BeginCount := 0;
|
BeginCount := 0;
|
||||||
ExpectingType := False;
|
ExpectingType := False;
|
||||||
WaitingForResult := False;
|
WaitingForResult := False;
|
||||||
StartParam := 0;
|
StartParam := 0;
|
||||||
InVarSection := False;
|
InVarSection := False;
|
||||||
while (Lex.TokenID <> tkNull) do
|
while (Lex.TokenID <> tkNull) do
|
||||||
begin;
|
begin;
|
||||||
LastTk := Lex.TokenID;
|
LastTk := Lex.TokenID;
|
||||||
LastPos := Lex.RunPos;
|
LastPos := Lex.RunPos;
|
||||||
Lex.NextNoJunk;
|
Lex.NextNoJunk;
|
||||||
case LastTk of
|
case LastTk of
|
||||||
// tkInclude : ShowMessage(Lex.Token);
|
// tkInclude : ShowMessage(Lex.Token);
|
||||||
// if (FParser.Token[Length(FParser.Token)] = '}') then
|
// if (FParser.Token[Length(FParser.Token)] = '}') then
|
||||||
// FIncludes.Add(StringReplace(LowerCase(Trim(Copy(FParser.Token, 11, Length(FParser.Token) - 11))), '/', '\', [rfReplaceAll]));
|
// FIncludes.Add(StringReplace(LowerCase(Trim(Copy(FParser.Token, 11, Length(FParser.Token) - 11))), '/', '\', [rfReplaceAll]));
|
||||||
tkProgram : if Lex.TokenID = tkIdentifier then
|
tkProgram : if Lex.TokenID = tkIdentifier then
|
||||||
Self.ScriptName := Lex.Token;
|
Self.ScriptName := Lex.Token;
|
||||||
tkRoundOpen: begin;
|
tkRoundOpen: begin;
|
||||||
LastTkString := Lex.Token;
|
LastTkString := Lex.Token;
|
||||||
if InMethod and InParams then
|
if InMethod and InParams then
|
||||||
StartParam := 0;
|
StartParam := 0;
|
||||||
end;
|
end;
|
||||||
tkType : InVarSection := False;
|
tkType : InVarSection := False;
|
||||||
tkBegin : begin;
|
tkBegin : begin;
|
||||||
|
|
||||||
InVarSection := False;
|
InVarSection := False;
|
||||||
if InMethod then
|
if InMethod then
|
||||||
inc(BeginCount)
|
inc(BeginCount)
|
||||||
else if BeginCount = 0 then
|
else if BeginCount = 0 then
|
||||||
begin;
|
begin;
|
||||||
InVarSection := false;
|
InVarSection := false;
|
||||||
InMethod := true;
|
InMethod := true;
|
||||||
HasMain := True;
|
HasMain := True;
|
||||||
Method := Main;
|
Method := Main;
|
||||||
Main.BeginPos := LastPos - 4;
|
Main.BeginPos := LastPos - 4;
|
||||||
Inc(BeginCount);
|
Inc(BeginCount);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
tkCase : begin;
|
tkCase : begin;
|
||||||
if InMethod then
|
if InMethod then
|
||||||
inc(BeginCount);
|
inc(BeginCount);
|
||||||
end;
|
end;
|
||||||
tkEnd : if InMethod then
|
tkEnd : if InMethod then
|
||||||
begin;
|
begin;
|
||||||
Dec(BeginCount);
|
Dec(BeginCount);
|
||||||
if BeginCount = 0 then
|
if BeginCount = 0 then
|
||||||
begin;
|
begin;
|
||||||
Method.EndPos := LastPos;
|
Method.EndPos := LastPos;
|
||||||
InMethod := False;
|
InMethod := False;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
tkIdentifier: begin;
|
tkIdentifier: begin;
|
||||||
if (InMethod and InParams) or (InVarSection) then
|
if (InMethod and InParams) or (InVarSection) then
|
||||||
begin;
|
begin;
|
||||||
|
|
||||||
{ if ExpectingType then
|
{ if ExpectingType then
|
||||||
begin;
|
begin;
|
||||||
FormAnalyzer.SynEdit1.Lines.add(copy( FormAnalyzer.SynEdit1.Lines.Text,StartPos, LastPos - StartPos));
|
FormAnalyzer.SynEdit1.Lines.add(copy( FormAnalyzer.SynEdit1.Lines.Text,StartPos, LastPos - StartPos));
|
||||||
LastTKString := copy( FormAnalyzer.SynEdit1.Lines.GetText,StartPos, Lex.TokenPos - StartPos);
|
LastTKString := copy( FormAnalyzer.SynEdit1.Lines.GetText,StartPos, Lex.TokenPos - StartPos);
|
||||||
for i := StartParam to Method.ParameterLen - 1 do
|
for i := StartParam to Method.ParameterLen - 1 do
|
||||||
Method.Parameters[i].VarType := LastTkString;
|
Method.Parameters[i].VarType := LastTkString;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
Method.AddParam(LastTkString); }
|
Method.AddParam(LastTkString); }
|
||||||
if not ExpectingType and InVarSection then
|
if not ExpectingType and InVarSection then
|
||||||
Method.AddVar(LastTKString,'') else
|
Method.AddVar(LastTKString,'') else
|
||||||
if not ExpectingType then
|
if not ExpectingType then
|
||||||
Method.AddParam(LastTKString);
|
Method.AddParam(LastTKString);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
tkVar : begin;
|
tkVar : begin;
|
||||||
if InMethod and Not InParams then
|
if InMethod and Not InParams then
|
||||||
InVarSection := True;
|
InVarSection := True;
|
||||||
if not InMethod then
|
if not InMethod then
|
||||||
begin;
|
begin;
|
||||||
Method := Main;
|
Method := Main;
|
||||||
InGlobal := True;
|
InGlobal := True;
|
||||||
InVarSection := True;
|
InVarSection := True;
|
||||||
|
|
||||||
end;
|
end;
|
||||||
if InVarSection then
|
if InVarSection then
|
||||||
StartVar := Method.VarLen;
|
StartVar := Method.VarLen;
|
||||||
LastTKString := Lex.Token;
|
LastTKString := Lex.Token;
|
||||||
end;
|
end;
|
||||||
tkConst : begin;
|
tkConst : begin;
|
||||||
if not InMethod then
|
if not InMethod then
|
||||||
InVarSection := false;
|
InVarSection := false;
|
||||||
LastTKString := Lex.token;
|
LastTKString := Lex.token;
|
||||||
end;
|
end;
|
||||||
tkComma : begin;
|
tkComma : begin;
|
||||||
LastTKString := Lex.Token;
|
LastTKString := Lex.Token;
|
||||||
end;
|
end;
|
||||||
tkColon : begin;
|
tkColon : begin;
|
||||||
LastTkString := Lex.Token;
|
LastTkString := Lex.Token;
|
||||||
if (InMethod and InParams) or InVarSection then
|
if (InMethod and InParams) or InVarSection then
|
||||||
begin;
|
begin;
|
||||||
ExpectingType := True;
|
ExpectingType := True;
|
||||||
StartPos := LastPos;
|
StartPos := LastPos;
|
||||||
end
|
end
|
||||||
else if InMethod and WaitingForresult then
|
else if InMethod and WaitingForresult then
|
||||||
begin;
|
begin;
|
||||||
Method.Returns := Lex.Token;
|
Method.Returns := Lex.Token;
|
||||||
WaitingForResult := False;
|
WaitingForResult := False;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
tkSemiColon : begin;
|
tkSemiColon : begin;
|
||||||
if (InMethod and InParams) or (InVarSection) then
|
if (InMethod and InParams) or (InVarSection) then
|
||||||
begin;
|
begin;
|
||||||
if ExpectingType then
|
if ExpectingType then
|
||||||
begin;
|
begin;
|
||||||
LastTKString := Trim(copy( ScriptToAnalyze,StartPos + 1, LastPos - StartPos - 1));
|
LastTKString := Trim(copy( ScriptToAnalyze,StartPos + 1, LastPos - StartPos - 1));
|
||||||
if (InParams and InMethod) then
|
if (InParams and InMethod) then
|
||||||
for i := StartParam to Method.ParameterLen - 1 do
|
for i := StartParam to Method.ParameterLen - 1 do
|
||||||
Method.Parameters[i].VarType := LastTkString
|
Method.Parameters[i].VarType := LastTkString
|
||||||
else
|
else
|
||||||
for i := StartVar to Method.VarLen - 1 do
|
for i := StartVar to Method.VarLen - 1 do
|
||||||
Method.Vars[i].VarType := LastTKString;
|
Method.Vars[i].VarType := LastTKString;
|
||||||
ExpectingType := False;
|
ExpectingType := False;
|
||||||
end;
|
end;
|
||||||
LastTkString := Lex.Token;
|
LastTkString := Lex.Token;
|
||||||
StartParam := Method.ParameterLen;
|
StartParam := Method.ParameterLen;
|
||||||
StartVar := Method.VarLen;
|
StartVar := Method.VarLen;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
tkRoundClose: if InMethod and InParams then
|
tkRoundClose: if InMethod and InParams then
|
||||||
begin;
|
begin;
|
||||||
if ExpectingType then
|
if ExpectingType then
|
||||||
begin;
|
begin;
|
||||||
LastTKString := Trim(copy(ScriptToAnalyze,StartPos + 2, LastPos - StartPos - 2));
|
LastTKString := Trim(copy(ScriptToAnalyze,StartPos + 2, LastPos - StartPos - 2));
|
||||||
for i := StartParam to Method.ParameterLen - 1 do
|
for i := StartParam to Method.ParameterLen - 1 do
|
||||||
Method.Parameters[i].VarType := LastTkString;
|
Method.Parameters[i].VarType := LastTkString;
|
||||||
ExpectingType := False;
|
ExpectingType := False;
|
||||||
end;
|
end;
|
||||||
InParams := False;
|
InParams := False;
|
||||||
end;
|
end;
|
||||||
tkProcedure,
|
tkProcedure,
|
||||||
tkFunction : begin;
|
tkFunction : begin;
|
||||||
if (InVarSection or (InMethod and InParams)) and ExpectingType then
|
if (InVarSection or (InMethod and InParams)) and ExpectingType then
|
||||||
begin;
|
begin;
|
||||||
//Do nothing since the this procedure/function is a var ;-)
|
//Do nothing since the this procedure/function is a var ;-)
|
||||||
end else
|
end else
|
||||||
begin;
|
begin;
|
||||||
if not InMethod then
|
if not InMethod then
|
||||||
InVarSection := False;
|
InVarSection := False;
|
||||||
if (not InTypes) and (not InVarSection) then
|
if (not InTypes) and (not InVarSection) then
|
||||||
begin;
|
begin;
|
||||||
WaitingForResult := LastTK = tkFunction;
|
WaitingForResult := LastTK = tkFunction;
|
||||||
if Lex.TokenID <> tkIdentifier then
|
if Lex.TokenID <> tkIdentifier then
|
||||||
begin;
|
begin;
|
||||||
mDebugLn('Analyzer: No method name -> exiting');
|
mDebugLn('Analyzer: No method name -> exiting');
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
TempName := Lex.Token;
|
TempName := Lex.Token;
|
||||||
TempInt := Lex.TokenPos;
|
TempInt := Lex.TokenPos;
|
||||||
Lex.NextNoJunk;
|
Lex.NextNoJunk;
|
||||||
if Lex.TokenID = tkRoundOpen then
|
if Lex.TokenID = tkRoundOpen then
|
||||||
InParams := True
|
InParams := True
|
||||||
else if Lex.TokenID = tkPoint then
|
else if Lex.TokenID = tkPoint then
|
||||||
begin;
|
begin;
|
||||||
mDebugLn('Analyzer: In class definition?');
|
mDebugLn('Analyzer: In class definition?');
|
||||||
// FormAnalyzer.SynEdit2.Lines.add('In class definition *cough*');
|
// FormAnalyzer.SynEdit2.Lines.add('In class definition *cough*');
|
||||||
Lex.NextNoJunk;
|
Lex.NextNoJunk;
|
||||||
TempName := Lex.Token;
|
TempName := Lex.Token;
|
||||||
end else if ((Lex.TokenID = tkSemicolon) xor WaitingForResult) or ((Lex.TokenID = tkColon) xor WaitingForResult) then
|
end else if ((Lex.TokenID = tkSemicolon) xor WaitingForResult) or ((Lex.TokenID = tkColon) xor WaitingForResult) then
|
||||||
begin;
|
begin;
|
||||||
InParams := False;
|
InParams := False;
|
||||||
end else
|
end else
|
||||||
begin;
|
begin;
|
||||||
mDebugLn('Analyzer: You''re missing some stuff in the procedure declaration');
|
mDebugLn('Analyzer: You''re missing some stuff in the procedure declaration');
|
||||||
Exit;
|
Exit;
|
||||||
end;
|
end;
|
||||||
if InMethod then
|
if InMethod then
|
||||||
Method := Method.AddMethod(WaitingForResult,TempName)
|
Method := Method.AddMethod(WaitingForResult,TempName)
|
||||||
else
|
else
|
||||||
Method := Self.AddMethod(WaitingForResult,TempName);
|
Method := Self.AddMethod(WaitingForResult,TempName);
|
||||||
InMethod := true;
|
InMethod := true;
|
||||||
Method.Beginpos := TempInt;
|
Method.Beginpos := TempInt;
|
||||||
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end;
|
end;
|
||||||
// SynEdit2.Lines.Add(TokeToString(Lex.TokenID) + '-' + Lex.Token);
|
// SynEdit2.Lines.Add(TokeToString(Lex.TokenID) + '-' + Lex.Token);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,22 +1,22 @@
|
||||||
{ This is an automatically generated lazarus resource file }
|
{ This is an automatically generated lazarus resource file }
|
||||||
|
|
||||||
LazarusResources.Add('TSimbaUpdateForm','FORMDATA',[
|
LazarusResources.Add('TSimbaUpdateForm','FORMDATA',[
|
||||||
'TPF0'#16'TSimbaUpdateForm'#15'SimbaUpdateForm'#4'Left'#3#6#1#6'Height'#3'K'#1
|
'TPF0'#16'TSimbaUpdateForm'#15'SimbaUpdateForm'#4'Left'#3#6#1#6'Height'#3'K'#1
|
||||||
+#3'Top'#3#219#0#5'Width'#3#217#1#13'ActiveControl'#7#12'UpdateButton'#11'Bor'
|
+#3'Top'#3#219#0#5'Width'#3#217#1#13'ActiveControl'#7#12'UpdateButton'#11'Bor'
|
||||||
+'derIcons'#11#12'biSystemMenu'#10'biMinimize'#0#7'Caption'#6#12'Update Simba'
|
+'derIcons'#11#12'biSystemMenu'#10'biMinimize'#0#7'Caption'#6#12'Update Simba'
|
||||||
+#12'ClientHeight'#3'K'#1#11'ClientWidth'#3#217#1#8'OnCreate'#7#10'FormCreate'
|
+#12'ClientHeight'#3'K'#1#11'ClientWidth'#3#217#1#8'OnCreate'#7#10'FormCreate'
|
||||||
+#6'OnShow'#7#15'CleanUpdateForm'#10'LCLVersion'#6#6'0.9.29'#0#12'TProgressBa'
|
+#6'OnShow'#7#15'CleanUpdateForm'#10'LCLVersion'#6#6'0.9.29'#0#12'TProgressBa'
|
||||||
+'r'#16'DownloadProgress'#4'Left'#2#8#6'Height'#2#29#3'Top'#3#12#1#5'Width'#3
|
+'r'#16'DownloadProgress'#4'Left'#2#8#6'Height'#2#29#3'Top'#3#12#1#5'Width'#3
|
||||||
+#198#1#7'Anchors'#11#6'akLeft'#7'akRight'#8'akBottom'#0#6'Smooth'#9#8'TabOrd'
|
+#198#1#7'Anchors'#11#6'akLeft'#7'akRight'#8'akBottom'#0#6'Smooth'#9#8'TabOrd'
|
||||||
+'er'#2#0#0#0#7'TButton'#12'UpdateButton'#4'Left'#3#131#1#6'Height'#2#25#3'To'
|
+'er'#2#0#0#0#7'TButton'#12'UpdateButton'#4'Left'#3#131#1#6'Height'#2#25#3'To'
|
||||||
+'p'#3','#1#5'Width'#2'K'#7'Anchors'#11#7'akRight'#8'akBottom'#0#7'Caption'#6
|
+'p'#3','#1#5'Width'#2'K'#7'Anchors'#11#7'akRight'#8'akBottom'#0#7'Caption'#6
|
||||||
+#7'Update!'#7'OnClick'#7#17'UpdateButtonClick'#8'TabOrder'#2#1#0#0#7'TButton'
|
+#7'Update!'#7'OnClick'#7#17'UpdateButtonClick'#8'TabOrder'#2#1#0#0#7'TButton'
|
||||||
+#11'CloseButton'#4'Left'#2#8#6'Height'#2#25#3'Top'#3','#1#5'Width'#2'K'#7'An'
|
+#11'CloseButton'#4'Left'#2#8#6'Height'#2#25#3'Top'#3','#1#5'Width'#2'K'#7'An'
|
||||||
+'chors'#11#6'akLeft'#8'akBottom'#0#7'Caption'#6#5'Close'#7'OnClick'#7#16'Clo'
|
+'chors'#11#6'akLeft'#8'akBottom'#0#7'Caption'#6#5'Close'#7'OnClick'#7#16'Clo'
|
||||||
+'seButtonClick'#8'TabOrder'#2#2#0#0#5'TMemo'#9'UpdateLog'#4'Left'#2#8#6'Heig'
|
+'seButtonClick'#8'TabOrder'#2#2#0#0#5'TMemo'#9'UpdateLog'#4'Left'#2#8#6'Heig'
|
||||||
+'ht'#3#253#0#3'Top'#2#8#5'Width'#3#198#1#7'Anchors'#11#5'akTop'#6'akLeft'#7
|
+'ht'#3#253#0#3'Top'#2#8#5'Width'#3#198#1#7'Anchors'#11#5'akTop'#6'akLeft'#7
|
||||||
+'akRight'#8'akBottom'#0#8'TabOrder'#2#3#0#0#6'TLabel'#13'DownloadSpeed'#4'Le'
|
+'akRight'#8'akBottom'#0#8'TabOrder'#2#3#0#0#6'TLabel'#13'DownloadSpeed'#4'Le'
|
||||||
+'ft'#2'`'#6'Height'#2#14#3'Top'#3'2'#1#5'Width'#2'N'#7'Anchors'#11#6'akLeft'
|
+'ft'#2'`'#6'Height'#2#14#3'Top'#3'2'#1#5'Width'#2'N'#7'Anchors'#11#6'akLeft'
|
||||||
+#8'akBottom'#0#7'Caption'#6#13'DownloadSpeed'#11'ParentColor'#8#7'Visible'#8
|
+#8'akBottom'#0#7'Caption'#6#13'DownloadSpeed'#11'ParentColor'#8#7'Visible'#8
|
||||||
+#0#0#0
|
+#0#0#0
|
||||||
]);
|
]);
|
||||||
|
|
|
@ -1,64 +1,64 @@
|
||||||
program new;
|
program new;
|
||||||
{$LoadDLL libsmart}
|
{$LoadDLL libsmart}
|
||||||
function IsKeyDown(C:Char): Boolean;
|
function IsKeyDown(C:Char): Boolean;
|
||||||
begin
|
begin
|
||||||
Result := SmartIsKeyDown(ord(c));
|
Result := SmartIsKeyDown(ord(c));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure MoveMouse(x, y: Integer);
|
procedure MoveMouse(x, y: Integer);
|
||||||
begin
|
begin
|
||||||
SmartMoveMouse(x, y);
|
SmartMoveMouse(x, y);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure HoldMouse(x, y: Integer; left: Boolean);
|
procedure HoldMouse(x, y: Integer; left: Boolean);
|
||||||
begin
|
begin
|
||||||
SmartHoldMouse(x, y, left);
|
SmartHoldMouse(x, y, left);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure ReleaseMouse(x, y: Integer; left: Boolean);
|
procedure ReleaseMouse(x, y: Integer; left: Boolean);
|
||||||
begin
|
begin
|
||||||
SmartReleaseMouse(x, y, left);
|
SmartReleaseMouse(x, y, left);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure KeyUp(key: byte);
|
procedure KeyUp(key: byte);
|
||||||
begin
|
begin
|
||||||
If Key = 13 Then
|
If Key = 13 Then
|
||||||
Key := 10;
|
Key := 10;
|
||||||
SmartReleaseKey(key);
|
SmartReleaseKey(key);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure KeyDown(key: byte);
|
procedure KeyDown(key: byte);
|
||||||
begin
|
begin
|
||||||
If Key = 13 Then
|
If Key = 13 Then
|
||||||
Key := 10;
|
Key := 10;
|
||||||
SmartHoldKey(key);
|
SmartHoldKey(key);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure SendKeys(S: String);
|
procedure SendKeys(S: String);
|
||||||
begin
|
begin
|
||||||
SmartSendKeys(S);
|
SmartSendKeys(S);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure GetMousePos(var x, y: Integer);
|
procedure GetMousePos(var x, y: Integer);
|
||||||
begin
|
begin
|
||||||
SmartGetMousePos(x, y);
|
SmartGetMousePos(x, y);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function GetColor(x, y: Integer): Integer;
|
function GetColor(x, y: Integer): Integer;
|
||||||
begin
|
begin
|
||||||
result:= SmartGetColor(x, y);
|
result:= SmartGetColor(x, y);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
var
|
var
|
||||||
w,h:integer;
|
w,h:integer;
|
||||||
begin
|
begin
|
||||||
SmartSetup('http://world19.runescape.com/', 'plugin.js?param=o0,a1,m0', 765, 503);
|
SmartSetup('http://world19.runescape.com/', 'plugin.js?param=o0,a1,m0', 765, 503);
|
||||||
SetTargetArray(SmartImageArray(), 765,503);
|
SetTargetArray(SmartImageArray(), 765,503);
|
||||||
getclientdimensions(w,h);
|
getclientdimensions(w,h);
|
||||||
writeln(inttostr(w) + ' , ' + inttostr(h));
|
writeln(inttostr(w) + ' , ' + inttostr(h));
|
||||||
if findcolortolerance(w,h,00000,0,0,764,502,300) then
|
if findcolortolerance(w,h,00000,0,0,764,502,300) then
|
||||||
smartmovemouse(w,h);
|
smartmovemouse(w,h);
|
||||||
savescreenshot('/tmp/smart.bmp');
|
savescreenshot('/tmp/smart.bmp');
|
||||||
//Wait(5000);
|
//Wait(5000);
|
||||||
end.
|
end.
|
||||||
|
|
|
@ -1,142 +1,142 @@
|
||||||
program new;
|
program new;
|
||||||
var
|
var
|
||||||
Bmpz : integer;
|
Bmpz : integer;
|
||||||
w,h : integer;
|
w,h : integer;
|
||||||
begin
|
begin
|
||||||
Bmpz := BitmapFromString(166, 73, 'beNq9Xf2PVeURtv+Jv' +
|
Bmpz := BitmapFromString(166, 73, 'beNq9Xf2PVeURtv+Jv' +
|
||||||
'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' +
|
||||||
'5/Z+PrrG///381vvrl1/vypI0cOOKn31PqQqvGr/+Kma0y1P/SKtF' +
|
'5/Z+PrrG///381vvrl1/vypI0cOOKn31PqQqvGr/+Kma0y1P/SKtF' +
|
||||||
'SDVbQaN0AaS+m8J3RHcSA9JHhqgqH8IuwTrvuvvc3SKzmOS3aIN25' +
|
'SDVbQaN0AaS+m8J3RHcSA9JHhqgqH8IuwTrvuvvc3SKzmOS3aIN25' +
|
||||||
'cNaA2jMy++OITG8ZbbALvvXfppZeec2JDo6yN9MAv2dG+XWt77o4l' +
|
'cNaA2jMy++OITG8ZbbALvvXfppZeec2JDo6yN9MAv2dG+XWt77o4l' +
|
||||||
'94eOoGMP8bA7OBSyZDlun7UNrW8m6JW2bBhfXbmLbEy1xJEe4mjPC' +
|
'94eOoGMP8bA7OBSyZDlun7UNrW8m6JW2bBhfXbmLbEy1xJEe4mjPC' +
|
||||||
'h3lAunGwTYrBIXINoifffafTz99+/r1d+2DDZvAzZsf4Bxee/WVo0' +
|
'h3lAunGwTYrBIXINoifffafTz99+/r1d+2DDZvAzZsf4Bxee/WVo0' +
|
||||||
'cPuTwNPKZKqdJe5WSYA/oYLFbaPdTYyX2UOvfmgI4ycbylaSvoCtG' +
|
'cPuTwNPKZKqdJe5WSYA/oYLFbaPdTYyX2UOvfmgI4ycbylaSvoCtG' +
|
||||||
'I8bmhI64R47jViPRwfgZEA2fj2rUrNj766N+ffPyW/+JzsAn4HOxK' +
|
'I8bmhI64R47jViPRwfgZEA2fj2rUrNj766N+ffPyW/+JzsAn4HOxK' +
|
||||||
'IzanNxLHhE3yppJvFsXWfNBRSJHninQGPBQdCL5FoJPrQP0D8TWsM' +
|
'IzanNxLHhE3yppJvFsXWfNBRSJHninQGPBQdCL5FoJPrQP0D8TWsM' +
|
||||||
'BJqC6499VeoDwcXHhANhA37YMO4x/vvv2HDtAWfQMzBJuBzOHv2Zb' +
|
'BJqC6499VeoDwcXHhANhA37YMO4x/vvv2HDtAWfQMzBJuBzOHv2Zb' +
|
||||||
'cXnLfn7q8NXk2uP7xsKdDJzEdHRzdpCZJqscS1q+O0Kyy+IIDl7nx' +
|
'cXnLfn7q8NXk2uP7xsKdDJzEdHRzdpCZJqscS1q+O0Kyy+IIDl7nx' +
|
||||||
'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' +
|
||||||
'cAdgJ6i25n8ENAb9XeI8WV1IyF/KeUeaHGrq6xL7MQSaa601eFZ1Y' +
|
'cAdgJ6i25n8ENAb9XeI8WV1IyF/KeUeaHGrq6xL7MQSaa601eFZ1Y' +
|
||||||
'O23D4wtOGVzbL0ne+Z7BeqxVK6kWhRDKGbCiswGriULjSNw4Up7lo' +
|
'O23D4wtOGVzbL0ne+Z7BeqxVK6kWhRDKGbCiswGriULjSNw4Up7lo' +
|
||||||
'5viB0xDJ+Jsc+7bkT4RLX3o1miBMt2I2ky7I605qItBB1QeiNMiKK' +
|
'5viB0xDJ+Jsc+7bkT4RLX3o1miBMt2I2ky7I605qItBB1QeiNMiKK' +
|
||||||
'yqVVUYtAx0hoO72qiowv3oWm6rmU1sLQwhfvA6MZsFVlBCV0zd0Lh' +
|
'yqVVUYtAx0hoO72qiowv3oWm6rmU1sLQwhfvA6MZsFVlBCV0zd0Lh' +
|
||||||
'bIKVYVo1J7E8Z+vC02Fa1xa9YKYyHdyTWa+HjhVonvF7jRiNV8nlr' +
|
'bIKVYVo1J7E8Z+vC02Fa1xa9YKYyHdyTWa+HjhVonvF7jRiNV8nlr' +
|
||||||
'RYhmIZ8T7T9P0vc3RiqXKoFG5Dc0N6mxV6zx4FE+9mgoowN5QC4zN' +
|
'RYhmIZ8T7T9P0vc3RiqXKoFG5Dc0N6mxV6zx4FE+9mgoowN5QC4zN' +
|
||||||
'BD7iaAtEI2aTJCTP1QtHsxKpUaqIbxlbxo6ag9O+FUlUjpmmQyNJV' +
|
'BD7iaAtEI2aTJCTP1QtHsxKpUaqIbxlbxo6ag9O+FUlUjpmmQyNJV' +
|
||||||
'l4vY9ExdaG43KNgY6bkeQ1JEo04ZWUR/6A0JUq0O31yjpN7uRlLle' +
|
'l4vY9ExdaG43KNgY6bkeQ1JEo04ZWUR/6A0JUq0O31yjpN7uRlLle' +
|
||||||
'NP7NOnh6TvsNP11KvR2Sc7UKjNtKzHr2isjSys+MAhLMfGwi2+nr2' +
|
'NP7NOnh6TvsNP11KvR2Sc7UKjNtKzHr2isjSys+MAhLMfGwi2+nr2' +
|
||||||
'/pk1Ohk/tOMz/7hGW12r3RiSUqpjVhjN615P/VupUgRX29whhex1l' +
|
'/pk1Ohk/tOMz/7hGW12r3RiSUqpjVhjN615P/VupUgRX29whhex1l' +
|
||||||
'B71n/m7YG1d4jlftxahcafCYx9mpXKfulwlobOuXL+WfNuW0jXfM0' +
|
'B71n/m7YG1d4jlftxahcafCYx9mpXKfulwlobOuXL+WfNuW0jXfM0' +
|
||||||
'MPtd22/qi+bbZeZpvZKmK5BKk0qQIBgV2VXWgdKb/kvvTbmobqkTv' +
|
'MPtd22/qi+bbZeZpvZKmK5BKk0qQIBgV2VXWgdKb/kvvTbmobqkTv' +
|
||||||
'/6L3ihtw9SzFOOb7tYt5Q2Dp7rzrubFc+yzj3imf527htpMSNWOcL' +
|
'/6L3ihtw9SzFOOb7tYt5Q2Dp7rzrubFc+yzj3imf527htpMSNWOcL' +
|
||||||
'ejGx51C0lFuRbU42O1pCs6sYQzp9FGoErtbltqVfEIdqEhaev8AbO' +
|
'ejGx51C0lFuRbU42O1pCs6sYQzp9FGoErtbltqVfEIdqEhaev8AbO' +
|
||||||
'R22+lRJUS0U32hStvSAPbmuGDo+rwOnIDxRW625Xm2lWyLSMmurRJ' +
|
'R22+lRJUS0U32hStvSAPbmuGDo+rwOnIDxRW625Xm2lWyLSMmurRJ' +
|
||||||
'U4LIc4voSVrUGRjfPBRb1VjY7gwba2hrDnrlaFqzlpYcTrTNaa4un' +
|
'U4LIc4voSVrUGRjfPBRb1VjY7gwba2hrDnrlaFqzlpYcTrTNaa4un' +
|
||||||
'rOdgbznbsxWavQ/ieNJF2DxC0pn/7xJYw+OpoqhqTWnU7Pi1UEUOl' +
|
'rOdgbznbsxWavQ/ieNJF2DxC0pn/7xJYw+OpoqhqTWnU7Pi1UEUOl' +
|
||||||
'gIHX+Nr7duoP7h1DRsgsNPqrLaZU5zk+IlZZqSN5YCh9QUjWhpN6l' +
|
'gIHX+Nr7duoP7h1DRsgsNPqrLaZU5zk+IlZZqSN5YCh9QUjWhpN6l' +
|
||||||
'm9FFyQuWIWhU84FUOdspksM4okml9bq4J+EmnE61lUI0J69vEdNUq' +
|
'm9FFyQuWIWhU84FUOdspksM4okml9bq4J+EmnE61lUI0J69vEdNUq' +
|
||||||
'Q4lZpZG+tLhS++s2ClLUXE21Aqzg7ia7J6X1renO0Bmvuv8lGs5W3' +
|
'Q4lZpZG+tLhS++s2ClLUXE21Aqzg7ia7J6X1renO0Bmvuv8lGs5W3' +
|
||||||
'xXcE6wyaNQKRduHgE6sW/fWSSLdbfWcTFXPsNJ5LO9wTAveUxcxvf' +
|
'xXcE6wyaNQKRduHgE6sW/fWSSLdbfWcTFXPsNJ5LO9wTAveUxcxvf' +
|
||||||
'WV6psUv423Syd8dbLrO/HqwPu2RiQSilKMegawti01UJtJ3w4iIe2' +
|
'WV6psUv423Syd8dbLrO/HqwPu2RiQSilKMegawti01UJtJ3w4iIe2' +
|
||||||
'ry1KUA7kh/QmPgetGv8Ew37Q1Qa9uRUUfsEZibUP/SZ1saRd9dbv1' +
|
'ry1KUA7kh/QmPgetGv8Ew37Q1Qa9uRUUfsEZibUP/SZ1saRd9dbv1' +
|
||||||
'gZVSTtuVpMt0PkzqE5VETZWA9ORAYtxORWo4HJuqd6EyhpGdBsanM' +
|
'gZVSTtuVpMt0PkzqE5VETZWA9ORAYtxORWo4HJuqd6EyhpGdBsanM' +
|
||||||
'pM+fH7qXVRxSZ6WbsS9QJMebtBVLH1PqzZk07pdJOxutBsNn0huof' +
|
'pM+fH7qXVRxSZ6WbsS9QJMebtBVLH1PqzZk07pdJOxutBsNn0huof' +
|
||||||
'6H6avb2+2V0KYgqUdS1VFABNOoOkm3FI98BHDT0ADJgrLZi5G3j3a' +
|
'6H6avb2+2V0KYgqUdS1VFABNOoOkm3FI98BHDT0ADJgrLZi5G3j3a' +
|
||||||
'Po+8BCV1cWQ==');
|
'Po+8BCV1cWQ==');
|
||||||
GetBitmapSize(bmpz,w,h);
|
GetBitmapSize(bmpz,w,h);
|
||||||
Writeln(inttostr(w) + '-' + inttostr(h));
|
Writeln(inttostr(w) + '-' + inttostr(h));
|
||||||
SetBitmapSize(Bmpz,w div 2, h div 2);
|
SetBitmapSize(Bmpz,w div 2, h div 2);
|
||||||
SaveBitmap(Bmpz,'/tmp/test.bmp');
|
SaveBitmap(Bmpz,'/tmp/test.bmp');
|
||||||
//FreeBitmap(Bmpz);
|
//FreeBitmap(Bmpz);
|
||||||
Bmpz := LoadBitmap('/tmp/test.bmp');
|
Bmpz := LoadBitmap('/tmp/test.bmp');
|
||||||
SetBitmapSize(bmpz,w,h);
|
SetBitmapSize(bmpz,w,h);
|
||||||
SaveBitmap(Bmpz,'/tmp/test2.bmp');
|
SaveBitmap(Bmpz,'/tmp/test2.bmp');
|
||||||
end.
|
end.
|
||||||
|
|
Loading…
Reference in New Issue