program Hello;

{ Flash Pascal sample (c)2008 by Paul TOTH <tothpaul -at- free -dot- fr> }

{
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
}


// Frame size and rate
{$FRAME_WIDTH  320}
{$FRAME_HEIGHT 200}
{$FRAME_RATE    32}

// this first release support only "external class"
// basic types are String, Integer and Boolean

// todo: if/while/etc...
// todo: expression as parameter
// todo: user defined class
// todo: procedure, function
// todo: many things, this first release is only a Proof of Concept :D

type
// an "external class" let you define a Flash native class
// class name is case sensitive in this declaration (not in the code below)
 TextFormat=external class
 // the Constructor name can be anything, the compiler juste create a "new" class
  constructor Create(const FontName:string);
 // properties are case sensitives in this declaration
  property align:string;
  property color:integer;
  property size:integer;
  property bold:boolean;
 end;

 MovieClip=external class
 // the "as" keyword let you map the constructor to a class method
 // the first parameter of the constructor have to be a class type
 // this parameter is replaced by a variable name when the code is compiled
  constructor Create(Parent:MovieClip; Depth:integer) as Parent.createEmptyMovieClip;
  procedure beginFill(color:integer);
  procedure lineStyle(width,color:integer);
  procedure moveTo(x,y:integer);
  procedure lineTo(x,y:integer);
  property _x:integer;
  property _y:integer;
 end;

 TextField=external class
  constructor Create(Parent:MovieClip; depth,left,top,width,height:integer) as Parent.createTextField;
  procedure setTextFormat(Format:TextFormat);
  property text:string;
 end;

// Flash Pascal request typed declared variable like any Pascal language
var
 fmt    :TextFormat;
 button1:MovieClip;
 edit1  :TextField;

begin
// this release support only one constructor per class with a fixed number of parameters :(
 fmt:=TextFormat.Create('Tahoma');
 fmt.color:=$ff0000;
 fmt.align:='center';
 fmt.bold:=True;

// this syntaxe build a flash code like "_root.createEmptyMovieClip('button1',0)"
// when the parent class is nil, the compiler use "_root" instead
 button1:=MovieClip.Create(nil,0);
 button1.beginFill($c0c0c0);
 button1.lineStyle(1,$e0e0e0);
 button1.moveTo(  0, 20);
 button1.lineTo(  0,  0);
 button1.lineTo(120,  0);
 button1.lineStyle(1,$808080);
 button1.lineTo(120, 20);
 button1.lineTo(  0, 20);
 button1._x:=10;
 button1._y:=10;

// when the parent isn't nil/_root, a public variable is created also :
//  button1.createTextField('edit1',0,0,0,120,20)
//  edit1=button1.edit1;
 edit1:=TextField.Create(button1,0,0,0,120,20);
 edit1.text:='Hello World!';
 edit1.setTextFormat(fmt);
end.