SRL Archive - General

[Release] SCAR Titan 4.00 Pre-Alpha


Freddy1990

2011-07-13 19:31:59

Hey guys,

Today I'm releasing the pre-alpha of SCAR Titan 4.00, the future of SCAR.

SCAR 4 will be about 50% rewritten from scratch, the main IDE will be rewritten and like half of the core. Backwards compatibility to SCAR Divi is not being maintained to get a fresh start where I can lay out everything nicely without any old compatibility that has to be maintained. It would be fairly impossible anyway because of the changes to the scripting and such.

Currently the application isn't much to look at yet, except for some basic functionality and some functions in the core, it doesn't do that much yet. But it's growing fast, as I go along I can merge in more stuff from Divi as well.

Includes are now divided up into namespaces, each represented by a unit, for more info about that, check out the release topic. The core is also divided up into namespaces.

To provide some measure of backwards compatibility, I've created the namespace Legacy, which contains the TLegacyPlugin class which can be used to load plugins written for SCAR Divi. The class lets you retrieve pointers to functions in the plugin. Types have to be declared in the script itself.

Some new features are classes, interfaces, operator overloading, pointers, overloading, … A more complete list can be found in the release topic as well.

I've also gone ahead and write a wrapper unit for SMART in case anyone would like to use it with SCAR 4. It contains all functions from SMART 6.6 and it automatically links SMART functions into the core.

The latter can be done by using the new core structure SCAR maintains. To make it easier to switch between in-/output methods, SCAR now has functions like Set_GetMousePos, which allows you to set a function which should be called by GetMousePos. That way one could for example easily switch between SMART or color based macroing without having to change large quantities of code.

SCAR Titan compiles scripts to native machine code rather than interpreting scripts like SCAR Divi, this results in the scripts themselves being about 100 times faster, almost as fast as native code in plugins. This will reduce a lot of the need for plugins in general.

The release topic: http://forums.scar-divi.com/thread-86.html
The svn: http://svn.scar-divi.com/titan/
The manual: http://wiki.scar-divi.com/titan/
The SMART wrapper: http://svn.scar-divi.com/titan_wrappers/SMART.scar

To use the SMART wrapper, put it in the Includes folder or the script's folder and include it by adding "uses SMART;" to the script. An example:
uses
SMART, Mouse, Time;
begin
SmartSetup('http://world1.runescape.com/',
'plugin.js?param=o0,a0,m1', 765, 503, 's');
Wait(5000);
repeat
SetMousePos(Random(765), Random(503));
Wait(100);
until False;
end.

The Embedded_SMART.dll should be placed in the same folder as SCAR, this will soon change to the Plugins folder.

I hope everyone will enjoy this new stage in SCAR's development.

~Freddy

Gu3st...

2011-07-13 19:36:55

Wooooah, Heavy stuff!

It's looking great so far Freddy!!!

TomTuff

2011-07-13 19:39:57

Nice job freddy!

pyroryan

2011-07-13 19:41:21

Great work Freddy!

Gu3st...

2011-07-13 19:46:45

It's so fast!!!

var
I, X : Integer;

{$IFDEF SIMBA}
T : Integer;
{$ENDIF}

begin
{$IFDEF SIMBA}
T := GetSystemTime;
{$ENDIF}
for I := 0 to $FFFFFF do
X := I * 1;
{$IFDEF SIMBA}
WriteLn(GetSystemTime-t);
{$ENDIF}
end.

SCAR: 72ms E2: Tested 10 times, average of 32ms
Simba: I have no idea. I let it run for 10 seconds and nothing happened. E: 34694ms


E3: I am confused and amazed at the same time.

How can this be???
var
I : Integer;
X : LongInt;

{$IFDEF SIMBA}
T : Integer;
{$ENDIF}

begin
{$IFDEF SIMBA}
T := GetSystemTime;
{$ENDIF}
for I := 0 to $FFFFFF do
X := I * $FFFFFF;
{$IFDEF SIMBA}
WriteLn(GetSystemTime-t);
{$ENDIF}
end.
SCAR: 0ms
Simba: 34242ms.

Freddy1990

2011-07-13 19:59:38

I actually forgot to mention something important… SCAR 4 supports c++ operators:
var
i: Integer = 0;
begin
i += 2;
Print(i++);
Print(++i);
end.

EDIT:
From: Zyt3x
I am confused and amazed at the same time.

How can this be???
var
I : Integer;
X : LongInt;

{$IFDEF SIMBA}
T : Integer;
{$ENDIF}

begin
{$IFDEF SIMBA}
T := GetSystemTime;
{$ENDIF}
for I := 0 to $FFFFFF do
X := I * $FFFFFF;
{$IFDEF SIMBA}
WriteLn(GetSystemTime-t);
{$ENDIF}
end.
SCAR: 0ms
Simba: 34242ms.

Well, you might get a more accurate reading with the Time.SysTime (GetSystemTime) function I just added, but yeah, it's possible because SCAR 4 compiles to native machine code, it runs the script directly on through the CPU instead of adding 500 layers of code that has to analyze every step of the process.

Brandon

2011-07-13 20:07:41

OMG!! The C++ Thing got me and the speed too!.. LOL I'm sold. Although I would have liked: http://villavu.com/forum/showthread.php?t=65300

It still got me.. Just because the operators are a hell of a lot easier for me. Hopefully it would let me write pro scripts much faster and easier.. Hmm Maybe a frost dragon one ;).

Freddy1990

2011-07-13 20:18:19

@Zyt3x: That last code you posted errors, though for some reason the error doesn't show, still working out some issues there… But anyway, this will give a more accurate measurement:
var
I : Integer;
X : LongInt;
T : Cardinal;

begin
{$IFDEF SIMBA}
T := GetSystemTime;
{$ELSE}
t := Time.SysTime;
{$ENDIF}
for I := 0 to $FFFFFF do
X := I * 1;
{$IFDEF SIMBA}
WriteLn(GetSystemTime-t);
{$ELSE}
Print(Time.SysTime-t);
{$ENDIF}
end.

noidea

2011-07-13 20:31:53

Exciting stuff mate. I trust this will be cross platform? You said it would be a while ago.

Freddy1990

2011-07-13 20:42:38

From: noidea
Exciting stuff mate. I trust this will be cross platform? You said it would be a while ago.


You may have misunderstood me then I suppose, I do intend to build a cross-platform version at some point, but it will probably be a separated product, closer to SCAR Divi than SCAR Titan. I'm currently still waiting for cross-platform support to be added to Delphi, but that shouldn't be too long anymore. I do feel that due to my experience with programming for Windows and the fact that the majority of the users uses Windows, it is a priority to keep putting effort into that platform.

On a side-note:

SCAR Titan will not replace SCAR Divi. It contains a lot of things that might make it more difficult to pick up scripting for it, hence I will keep releasing updates to SCAR Divi and fixing bugs during the development of SCAR 4 and even SCAR 5 so people can use it to train their scripting skills and/or perform tasks that might not require an environment as complex as SCAR Titan. An example of this is that SCAR 4 will no longer feature window selection in such a way that it will be up to the scripter to handle windows. This will expand the flexibility of the system greatly, but increase the complexity slightly. A lot of tools and such will of course be offered to the scripter to compensate. For example, the SelectWnd function in the namespace Windows: http://wiki.scar-divi.com/titan/index.php?title=Windows.SelectWnd

And finally:

SCAR 4 is obviously under construction and still has quite a way to go. However, if someone were to want to develop for it, I will gladly prioritize the development of certain functions/features to help out.

EDIT: When I'm not hibernating you can find me at irc.scar-divi.com #scar

Frement

2011-07-13 21:20:43

Love the c++ operators ;) Nice work!

Freddy1990

2011-07-14 03:53:31

Another feature I forgot to mention is unicode support:
begin
Print('ႤᆇᆺᇙፙጯᏬᓍᚙᠧᦹ');
end.

Echo_

2011-07-14 04:13:25

From: Freddy1990
I actually forgot to mention something important… SCAR 4 supports c++ operators


I just jizzed.

From: Freddy1990
Another feature I forgot to mention is unicode support:
begin
Print('ႤᆇᆺᇙፙጯᏬᓍᚙᠧᦹ');
end.


Also an outstanding feature, I remember running into some issues with this when I was trying to read characters unique to Portuguese with Simba.

KingKong

2011-07-14 07:23:19

Will this support SRL Includes?? And do you know why srl wont work with my scar3.22portable?(win7). It gives me an error all the time.

Dan Cardin

2011-07-14 10:04:29

The only really script changing changes that you have at the moment are the units. Everything else is really just adding cool new features as far as I can tell. And tbh the units is really the only thing that i don't like. It just seems like it takes up unecessary space and is meh.

Gu3st...

2011-07-14 10:08:25

From: Dan Cardin
The only really script changing changes that you have at the moment are the units. Everything else is really just adding cool new features as far as I can tell. And tbh the units is really the only thing that i don't like. It just seems like it takes up unecessary space and is meh.
So the major speed increase doesn't matter?

Home

2011-07-14 10:31:06

Yeah and all other cool stuff doesn't matter? From what I think they matter a lot!

~Home

Freddy1990

2011-07-14 10:38:17

From: KingKong
Will this support SRL Includes?? And do you know why srl wont work with my scar3.22portable?(win7). It gives me an error all the time.

SCAR 4 is not backwards compatible and I doubt the SRL devs will be moving to SCAR 4 rathern than Simba. However, you're running a bit behind there… Get SCAR 3.25: http://www.scar-divi.com/

From: Dan Cardin
The only really script changing changes that you have at the moment are the units. Everything else is really just adding cool new features as far as I can tell. And tbh the units is really the only thing that i don't like. It just seems like it takes up unecessary space and is meh.


Well, it's how a programming language works… SCAR 4 is a lot more advanced, there was simply no way to keep using the (very messy) include method… This also offers a whole world of possibilities as well… You actually have to define something in the interface section of a unit to make it accessibly to other units, this means you can hide the inner workings of a unit from others units that shouldn't be accessed. It's basically similar to c++. You have the header files and the cpp files. The header file is the interface section and the cpp file si the implementation section.

Aside from that, I don't really see how this is not a big change, the entire code is being rewritten, there's tons more OOP and functions becoming available… For example: http://wiki.scar-divi.com/titan/index.php?title=Inet.THTTP

masterBB

2011-07-14 10:42:36

Did that speedtest, guess zytex got a faster pc:

simba: 57398 <- av. of 3 tests
scar titan: 78 <- av. of 8 tests(no speed difference between them..)

Freddy1990

2011-07-14 10:44:57

From: masterBB
Did that speedtest, guess zytex got a faster pc:

simba: 57398 <- av. of 3 tests
scar titan: 78 <- av. of 8 tests(no speed difference between them..)


Since the scripts are compiled directly to machine code, the difference in cpu speed will be more obvious when comparing running SCAR 4 on different machines. However, if you compare it to SCAR Divi, the obvious conclusion is that it's always tons faster of course.

masterBB

2011-07-14 11:00:33

Did even more testing. It really is incredible fast.
var
I : Integer;
A : Array of Integer;
T : Cardinal;
begin
{$IFDEF SIMBA}
T := GetSystemTime;
{$ELSE}
t := Time.SysTime;
{$ENDIF}
setLength(A,$FFFFFF);
for I := 0 to $FFFFFE do
A[I] := Random($FFFFFE);
{$IFDEF SIMBA}
WriteLn(GetSystemTime-t);
{$ELSE}
Print(Time.SysTime-t);
{$ENDIF}
end.

327ms against 94131ms

Wooot, even the wait function is improved:
var
T : Cardinal;
begin
{$IFDEF SIMBA}
T := GetSystemTime;
Wait(100);
WriteLn(GetSystemTime-t);
{$ELSE}
t := Time.SysTime;
Time.Wait(100);
Print(Time.SysTime-t);
{$ENDIF}
end.

94ms versus 109ms

Freddy1990

2011-07-14 11:06:37

Actually, the wait function still has to be adapted, it currently just waits, which is obvious, but for example, if you tell it to wait 5000000 ms, you have to wait that long before the script can stop.

EDIT: That Random function will also be gone in the next build, it was predefined in the engine, took it out because Random is defined as Rnd in the namespace Math.

masterBB

2011-07-14 11:09:33

I wonder, if I use the MML from simba with scar titan, will I be able to run srl even when your function names and such are different?

Freddy1990

2011-07-14 11:21:03

Well, it's probably possible to port it I suppose…

Drakan

2011-07-14 11:38:18

This looks really good Freddy, not gonna lie. I love the more OOP feel to it, and from the looks of those benchmarks of others, seems fast. Keep up the good work man, I'm sure this has great great potential. Thanks for the release :)

Dan Cardin

2011-07-14 12:33:40

I didn't mean the other stuff wasn't big changes, I meant that they weren't really things that would hugely break backwards comaptibility or be hugely different in terms of how you script. Don't get me wrong I like the speed and c++ operators and such.

As for units, I wasn't talking about the header file/cpp file distinctions. I meant that the actual including seemed a bit clunky but after looking at it again the only thing I don't particularly like is having to do folder.include. It just seems odd. Oh well, no doubt you know better than I and I'll get used to it.

Edit: also is there any particular purpose that you are aiming to have Titan be leaning towards? I mean you split color into it's own unit, I would think that things that you expected to be used in every script to be built in. And if not color or types then….?

Drakan

2011-07-14 12:40:13

From: Dan Cardin
I didn't mean the other stuff wasn't big changes, I meant that they weren't really things that would hugely break backwards comaptibility or be hugely different in terms of how you script. Don't get me wrong I like the speed and c++ operators and such.

As for units, I wasn't talking about the header file/cpp file distinctions. I meant that the actual including seemed a bit clunky but after looking at it again the only thing I don't particularly like is having to do folder.include. It just seems odd. Oh well, no doubt you know better than I and I'll get used to it.

Edit: also is there any particular purpose that you are aiming to have Titan be leaning towards? I mean you split color into it's own unit, I would think that things that you expected to be used in every script to be built in. And if not color or types then….?


reflection :P

Freddy1990

2011-07-14 13:28:57

From: Dan Cardin
I didn't mean the other stuff wasn't big changes, I meant that they weren't really things that would hugely break backwards compatibility or be hugely different in terms of how you script. Don't get me wrong I like the speed and c++ operators and such.

As for units, I wasn't talking about the header file/cpp file distinctions. I meant that the actual including seemed a bit clunky but after looking at it again the only thing I don't particularly like is having to do folder.include. It just seems odd. Oh well, no doubt you know better than I and I'll get used to it.

Edit: also is there any particular purpose that you are aiming to have Titan be leaning towards? I mean you split color into it's own unit, I would think that things that you expected to be used in every script to be built in. And if not color or types then….?


Yeah, I get it… The using of Folders in the unit name was a design choice I took to avoid ambiguity and clashing unit names, I discussed it with kaitnieks and we both agreed it was the best choice. Of course we're used to Delphi which uses units and almost no include files.

I'm dividing everything up into namespaces to get a more tidy overview of things. Aside from color there will also be a namespace Bitmap, DTM and OCR.

Bebe

2011-07-14 13:37:00

Great work Freddy :)

Dan Cardin

2011-07-14 13:41:50

what happens if the included file and the unit name dont match

Freddy1990

2011-07-14 14:18:35

From: Dan Cardin
what happens if the included file and the unit name dont match


Compiling error

BraK

2011-07-14 14:36:23

Looks great Freddy. I might try coding on it just to get some C++ practice. :)

~BraK

Drakan

2011-07-14 14:40:43

How is crash handling? I currently have issues where if smart crashes with simba then everything just crashes and I'll never know what the error was.

Freddy1990

2011-07-14 14:46:40

Hmm, like every version of SCAR it comes with built-in error reporting

Drakan

2011-07-14 14:56:37

Also Freddy, is there a way to do inherited including of units? Like if i have a Reflection unit and it has
uses
SMART;
if I just include Reflection will SMART automatically be included as well?

Freddy1990

2011-07-14 15:07:42

No, if you want to use an include you have to include the unit.

Carlito

2011-07-14 15:30:22

wow great work Freddy, keep it up!

Drakan

2011-07-14 22:41:02

Works great so far! Porting some random stuff to play with it :D

Dgby714

2011-07-14 23:21:55

SCAR 3.25: 85223ms
Simba (PS): 113350ms

SCAR 4: 218ms
Simba (Lape): 3729ms

program new;
var
I: LongInt;
A: array[0..$FFFFFE] of LongInt;
T: LongInt;
begin
T := GetTickCount();
for I := 0 to $FFFFFE do
A[I] := Random($FFFFFF);
WriteLn(GetTickCount() - T);
end.

program new;
var
I: LongInt;
A: array[0..$FFFFFE] of LongInt;
T: LongInt;
begin
T := Time.SysTime();
for I := 0 to $FFFFFE do
A[I] := Math.Rnd($FFFFFF);
Print(Time.SysTime() - T);
end.

Nava2

2011-07-15 00:53:23

Freddy what are you using to compile this code? Have you moved away from an interpreter?

Freddy1990

2011-07-15 04:10:40

From: Nava2
Freddy what are you using to compile this code? Have you moved away from an interpreter?


http://paxcompiler.com/

The engine can do pretty much anything, even compile to exe and dll files. SCAR 5 should normally feature the multi language support, compiling to exe, threading and more as it will move to a project based system. However, I've decided to leave all of this out to keep down the development time and keep things somewhat familiar in SCAR 4.

In the future the engine should also support c++ scripting and inline assembler.

There's still a few issues with the engine that have to be addressed, but since it's a commercial product, it's fairly easy to get things fixed/added.

Dgby714

2011-07-15 04:21:56

From: Freddy1990
http://paxcompiler.com/

The engine can do pretty much anything, even compile to exe and dll files. SCAR 5 should normally feature the multi language support, compiling to exe, threading and more as it will move to a project based system. However, I've decided to leave all of this out to keep down the development time and keep things somewhat familiar in SCAR 4.

In the future the engine should also support c++ scripting and inline assembler.

There's still a few issues with the engine that have to be addressed, but since it's a commercial product, it's fairly easy to get things fixed/added.


=) I just had Drags see if it had inline awhile ago, was bumed to see it not there. nice that it will be tho

KingKong

2011-07-15 06:32:14

Freddy, does scar support mousekeys?

Gu3st...

2011-07-15 06:44:20

// Remember to choose the desktop as simba's active window.
{$IFDEF SIMBA}
{$ELSE}
uses
Windows, Color, Time;
{$ENDIF}

var
T, I : Integer;
{$IFDEF SIMBA}
{$ELSE}
H : HWND;
DC : HDC;
{$ENDIF}

begin
{$IFDEF SIMBA}

T := GetSystemTime;
for I := 0 to $FF do
CountColor(clBlack, 0, 0, 100, 100);
WriteLn(GetSystemTime - T);

{$ELSE}
H := GetDesktopWnd;
DC := GetDC(H);

T := SysTime;
for I := 0 to $FF do
CountColor(DC, 0, 0, 0, 100, 100);
Print(SysTime - T);

ReleaseDC(H, DC);
{$ENDIF}
end.

Freddy1990

2011-07-15 06:51:06

From: KingKong
Freddy, does scar support mousekeys?


Not yet, I'm hoping to get that done tonight. I just added FindColor and some tolerance support. Currently there's only support for tolerance algorithms 0 and 1 though, but the rest should follow soon. You'll also be able to use your own script-defined algorithms:

uses
Types, Tolerance;

function MyCompareColors(const c1, c2, Tol: Integer): Boolean;
begin
Print(ToStr(c1) + ', ' + ToStr(c2) + ', ' + ToStr(Tol));
Result := False;
end;

begin
Print(CompareColors(1, 2, 3));
Set_CompareColors(@MyCompareColors);
Print(CompareColors(1, 2, 3));
end.

Succesfully compiled (16ms)
true
1, 2, 3
false
Script finished (0ms)

And:

uses
Types, Tolerance;

function MyGetTol(const c1, c2: Integer): Integer;
begin
Result := 9001;
end;

begin
Print(GetTol(1, 2));
Set_GetTol(@MyGetTol);
if GetTol(1, 2) > 9000 then
Print('It''s over 9000!');
end.

Succesfully compiled (16ms)
1
It's over 9000!
Script finished (0ms)

(Note that SimilarColors will also be used internally for tolerance comparison in find functions)

Dgby714

2011-07-15 07:06:51

From: Zyt3x
// Remember to choose the desktop as simba's active window.
{$IFDEF SIMBA}
{$ELSE}
uses
Windows, Color, Time;
{$ENDIF}

var
T, I : Integer;
{$IFDEF SIMBA}
{$ELSE}
H : HWND;
DC : HDC;
{$ENDIF}

begin
{$IFDEF SIMBA}

T := GetSystemTime;
for I := 0 to $FF do
CountColor(clBlack, 0, 0, 100, 100);
WriteLn(GetSystemTime - T);

{$ELSE}
H := GetDesktopWnd;
DC := GetDC(H);

T := SysTime;
for I := 0 to $FF do
CountColor(DC, 0, 0, 0, 100, 100);
Print(SysTime - T);

ReleaseDC(H, DC);
{$ENDIF}
end.

You know there is {$IFNDEF Simba} right?

From: Freddy1990
Not yet, I'm hoping to get that done tonight. I just added FindColor and some tolerance support. Currently there's only support for tolerance algorithms 0 and 1 though, but the rest should follow soon. You'll also be able to use your own script-defined algorithms:

uses
Types, Tolerance;

function MyCompareColors(const c1, c2, Tol: Integer): Boolean;
begin
Print(ToStr(c1) + ', ' + ToStr(c2) + ', ' + ToStr(Tol));
Result := False;
end;

begin
Print(CompareColors(1, 2, 3));
Set_CompareColors(@MyCompareColors);
Print(CompareColors(1, 2, 3));
end.

Succesfully compiled (16ms)
true
1, 2, 3
false
Script finished (0ms)

And:

uses
Types, Tolerance;

function MyGetTol(const c1, c2: Integer): Integer;
begin
Result := 9001;
end;

begin
Print(GetTol(1, 2));
Set_GetTol(@MyGetTol);
if GetTol(1, 2) > 9000 then
Print('It''s over 9000!');
end.

Succesfully compiled (16ms)
1
It's over 9000!
Script finished (0ms)

(Note that SimilarColors will also be used internally for tolerance comparison in find functions)


Can't they just override the functions? There a reason there are Set_* procedures?

Gu3st...

2011-07-15 07:11:52

From: Dgby714
You know there is {$IFNDEF Simba} right?
Totally forgot about that one :D

Freddy1990

2011-07-15 07:18:14

From: Dgby714
Can't they just override the functions? There a reason there are Set_* procedures?


This allows you to set the algorithm globally, I'll probably also add a get method, however, with this the method the algorithm is also used internally by all tolerance functions. Imo it's the most flexible way to do it, and it's pretty clean too.

Coh3n

2011-07-15 08:41:53

I'm very impressed, you have a lot of really nice things planned. :) Good luck and I hope it turns out as nice as it sounds.

nielsie95

2011-07-15 09:06:47

PaxCompiler is awesome :)
Looking good, Freddy! Looks like Titan is getting some of the best components around.

footballjds

2011-07-15 13:45:57

kick ass!

Drakan

2011-07-15 15:22:04

Just did some benchmarks with reflection based stuff for kicks and giggles. I have to say I'm quite impressed. The script I ran was 1,000,000 calls to SmartGetFieldInt(0, 'jba.a');


MarkTime(T);

for I := 1 to 1000000 do
begin
LoginIndex := SmartGetFieldInt(0, 'jba.a');
end;

T := TimeFromMark(T);
Writeln('Total Time: '+ToStr(T));

T := Time.SysTime;

for I := 1 to 1000000 do
begin
LoginIndex := SmartGetFieldInt(0, 'jba.a');
end;

T := Time.SysTime - T;
Print('Total Time: '+Types.ToStr(T));

Results:

Starting Test.
Total Time: 9329
Successfully executed.
Starting test...
Total Time: 4836
Script finished (6848ms)

Freddy1990

2011-07-23 02:07:06

I've added implicit typecasting of TPoint to string now :p So aside from using ToStr you can also do this:

uses
Types;
var
s: string;
begin
s := Point(5, 5);
PrintLn(s);
end.

Succesfully compiled (15ms)
(5,5)
Script finished (0ms)

Nava2

2011-07-23 11:25:50

From: Freddy1990
I've added implicit typecasting of TPoint to string now :p So aside from using ToStr you can also do this:

uses
Types;
var
s: string;
begin
s := Point(5, 5);
PrintLn(s);
end.

Succesfully compiled (15ms)
(5,5)
Script finished (0ms)


That just seems a bit unclear. I feel like a better option would he having it work like the `print` function in python:
print "hi", "i'm", "a spaced out string.", 3

So having the unlimited accepted parameters then allow one to specify the separator between them. Just a thought :)

None of the ambiguity of the implicit casting.

Freddy1990

2011-07-23 14:27:35

You can still use ToStr…

Dgby714

2011-07-23 15:21:24

From: Nava2
So having the unlimited accepted parameters then allow one to specify the separator between them. Just a thought :)


This is a great idea, Freddy if you take a look at Lape you can see how niels did it.

Freddy1990

2011-07-24 04:57:50

Parsing the syntax isn't much of a problem, integrating it into the engine is…

EDIT: Explicit typecasting of TPoint to string now also works:

uses Types;
begin
PrintLn(string(Point(5, 5)));
end.

EDIT2: Now the asbtract, sealed, final and absolute keywords are also available check the release thread for examples.