started project inspector

git-svn-id: trunk@2601 -
This commit is contained in:
mattias 2002-08-17 23:41:30 +00:00
parent a38e185a19
commit 9cfc5551f4
5 changed files with 580 additions and 0 deletions

3
.gitattributes vendored
View File

@ -207,6 +207,7 @@ ide/outputfilter.pas svneol=native#text/pascal
ide/patheditordlg.pas svneol=native#text/pascal
ide/project.pp svneol=native#text/pascal
ide/projectdefs.pas svneol=native#text/pascal
ide/projectinspector.pas svneol=native#text/pascal
ide/projectopts.lrs svneol=native#text/pascal
ide/projectopts.pp svneol=native#text/pascal
ide/runparamsopts.pas svneol=native#text/pascal
@ -402,6 +403,7 @@ images/menu/menu_new.xpm -text svneol=native#image/x-xpixmap
images/menu/menu_open.xpm -text svneol=native#image/x-xpixmap
images/menu/menu_openproject.xpm -text svneol=native#image/x-xpixmap
images/menu/menu_paste.xpm -text svneol=native#image/x-xpixmap
images/menu/menu_projectinspector.xpm -text svneol=native#image/x-xpixmap
images/menu/menu_projectoptions.xpm -text svneol=native#image/x-xpixmap
images/menu/menu_redo.xpm -text svneol=native#image/x-xpixmap
images/menu/menu_save.xpm -text svneol=native#image/x-xpixmap
@ -424,6 +426,7 @@ images/pkg_package.xpm -text svneol=native#image/x-xpixmap
images/pkg_package_circle.xpm -text svneol=native#image/x-xpixmap
images/pkg_package_installed.xpm -text svneol=native#image/x-xpixmap
images/pkg_package_uninstall.xpm -text svneol=native#image/x-xpixmap
images/pkg_packagegraph.xpm -text svneol=native#image/x-xpixmap
images/pkg_project.xpm -text svneol=native#image/x-xpixmap
images/pkg_registerunit.xpm -text svneol=native#image/x-xpixmap
images/pkg_removedfiles.xpm -text svneol=native#image/x-xpixmap

342
ide/projectinspector.pas Normal file
View File

@ -0,0 +1,342 @@
{ $Id$ }
{
/***************************************************************************
projectinspector.pas
--------------------
***************************************************************************/
***************************************************************************
* *
* This source 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 code 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. *
* *
* A copy of the GNU General Public License is available on the World *
* Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also *
* obtain it by writing to the Free Software Foundation, *
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
* *
***************************************************************************
Author: Mattias Gaertner
Abstract:
TProjectInspectorForm is the form of the project inspector.
}
unit ProjectInspector;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LCLProc, LResources, Forms, Controls, Buttons, ComCtrls,
StdCtrls, ExtCtrls, Menus, Dialogs, Graphics, FileCtrl,
LazarusIDEStrConsts, IDEProcs, IDEOptionDefs, EnvironmentOpts,
Project;
type
TProjectInspectorForm = class(TForm)
OpenBitBtn: TBitBtn;
AddBitBtn: TBitBtn;
RemoveBitBtn: TBitBtn;
OptionsBitBtn: TBitBtn;
ItemsTreeView: TTreeView;
ImageList: TImageList;
procedure AddBitBtnClick(Sender: TObject);
procedure ItemsTreeViewDblClick(Sender: TObject);
procedure ItemsTreeViewSelectionChanged(Sender: TObject);
procedure OpenBitBtnClick(Sender: TObject);
procedure OptionsBitBtnClick(Sender: TObject);
procedure ProjectInspectorFormResize(Sender: TObject);
procedure ProjectInspectorFormShow(Sender: TObject);
procedure RemoveBitBtnClick(Sender: TObject);
private
FUpdateLock: integer;
FLazProject: TProject;
FilesNode: TTreeNode;
DependenciesNode: TTreeNode;
ImageIndexFiles: integer;
ImageIndexRequired: integer;
ImageIndexRemovedRequired: integer;
ImageIndexUnit: integer;
ImageIndexRegisterUnit: integer;
ImageIndexText: integer;
ImageIndexBinary: integer;
procedure SetLazProject(const AValue: TProject);
procedure SetupComponents;
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
procedure BeginUpdate;
procedure EndUpdate;
function IsUpdating: boolean;
procedure UpdateAll;
procedure UpdateTitle;
procedure UpdateButtons;
procedure UpdateItems;
public
property LazProject: TProject read FLazProject write SetLazProject;
end;
var
ProjInspector: TProjectInspectorForm;
implementation
{ TProjectInspectorForm }
procedure TProjectInspectorForm.ProjectInspectorFormResize(Sender: TObject);
var
x: Integer;
y: Integer;
w: Integer;
h: Integer;
begin
x:=0;
y:=0;
w:=(ClientWidth div 4);
h:=25;
with OptionsBitBtn do
SetBounds(x,y,w,h);
inc(x,w);
with OpenBitBtn do
SetBounds(x,y,w,h);
inc(x,w);
with AddBitBtn do
SetBounds(x,y,w,h);
inc(x,w);
w:=ClientWidth-x;
with RemoveBitBtn do
SetBounds(x,y,w,h);
inc(x,w);
x:=0;
inc(y,h);
with ItemsTreeView do
SetBounds(x,y,Parent.ClientWidth,Parent.ClientHeight-y);
end;
procedure TProjectInspectorForm.ItemsTreeViewDblClick(Sender: TObject);
begin
end;
procedure TProjectInspectorForm.ItemsTreeViewSelectionChanged(Sender: TObject);
begin
end;
procedure TProjectInspectorForm.AddBitBtnClick(Sender: TObject);
begin
end;
procedure TProjectInspectorForm.OpenBitBtnClick(Sender: TObject);
begin
end;
procedure TProjectInspectorForm.OptionsBitBtnClick(Sender: TObject);
begin
end;
procedure TProjectInspectorForm.ProjectInspectorFormShow(Sender: TObject);
begin
UpdateAll;
end;
procedure TProjectInspectorForm.RemoveBitBtnClick(Sender: TObject);
begin
end;
procedure TProjectInspectorForm.SetLazProject(const AValue: TProject);
begin
if FLazProject=AValue then exit;
FLazProject:=AValue;
UpdateAll;
end;
procedure TProjectInspectorForm.SetupComponents;
procedure AddResImg(const ResName: string);
var Pixmap: TPixmap;
begin
Pixmap:=TPixmap.Create;
Pixmap.TransparentColor:=clWhite;
Pixmap.LoadFromLazarusResource(ResName);
ImageList.Add(Pixmap,nil)
end;
begin
ImageList:=TImageList.Create(Self);
with ImageList do begin
Width:=17;
Height:=17;
Name:='ImageList';
ImageIndexFiles:=Count;
AddResImg('pkg_files');
ImageIndexRequired:=Count;
AddResImg('pkg_required');
ImageIndexRemovedRequired:=Count;
AddResImg('pkg_removedrequired');
ImageIndexUnit:=Count;
AddResImg('pkg_unit');
ImageIndexRegisterUnit:=Count;
AddResImg('pkg_registerunit');
ImageIndexText:=Count;
AddResImg('pkg_text');
ImageIndexBinary:=Count;
AddResImg('pkg_binary');
end;
OpenBitBtn:=TBitBtn.Create(Self);
with OpenBitBtn do begin
Name:='OpenBitBtn';
Parent:=Self;
Caption:='Open';
OnClick:=@OpenBitBtnClick;
end;
AddBitBtn:=TBitBtn.Create(Self);
with AddBitBtn do begin
Name:='AddBitBtn';
Parent:=Self;
Caption:='Add';
OnClick:=@AddBitBtnClick;
end;
OptionsBitBtn:=TBitBtn.Create(Self);
with OptionsBitBtn do begin
Name:='OptionsBitBtn';
Parent:=Self;
Caption:='Options';
OnClick:=@OptionsBitBtnClick;
end;
RemoveBitBtn:=TBitBtn.Create(Self);
with RemoveBitBtn do begin
Name:='RemoveBitBtn';
Parent:=Self;
Caption:='Remove';
OnClick:=@RemoveBitBtnClick;
end;
ItemsTreeView:=TTreeView.Create(Self);
with ItemsTreeView do begin
Name:='ItemsTreeView';
Parent:=Self;
Images:=ImageList;
Options:=Options+[tvoRightClickSelect];
OnSelectionChanged:=@ItemsTreeViewSelectionChanged;
OnDblClick:=@ItemsTreeViewDblClick;
FilesNode:=Items.Add(nil,'Files');
FilesNode.ImageIndex:=ImageIndexFiles;
FilesNode.SelectedIndex:=FilesNode.ImageIndex;
DependenciesNode:=Items.Add(nil,'Required Packages');
DependenciesNode.ImageIndex:=ImageIndexRequired;
DependenciesNode.SelectedIndex:=DependenciesNode.ImageIndex;
end;
end;
constructor TProjectInspectorForm.Create(TheOwner: TComponent);
var
ALayout: TIDEWindowLayout;
begin
inherited Create(TheOwner);
Name:=NonModalIDEWindowNames[nmiwProjectInspector];
Caption:='Project Inspector';
ALayout:=EnvironmentOptions.IDEWindowLayoutList.ItemByFormID(Name);
ALayout.Form:=TForm(Self);
ALayout.Apply;
SetupComponents;
OnResize:=@ProjectInspectorFormResize;
OnResize(Self);
OnShow:=@ProjectInspectorFormShow;
end;
destructor TProjectInspectorForm.Destroy;
begin
inherited Destroy;
end;
procedure TProjectInspectorForm.BeginUpdate;
begin
inc(FUpdateLock);
end;
procedure TProjectInspectorForm.EndUpdate;
begin
if FUpdateLock=0 then RaiseException('TProjectInspectorForm.EndUpdate');
dec(FUpdateLock);
if FUpdateLock=0 then begin
end;
end;
function TProjectInspectorForm.IsUpdating: boolean;
begin
Result:=FUpdateLock>0;
end;
procedure TProjectInspectorForm.UpdateAll;
begin
UpdateTitle;
UpdateButtons;
UpdateItems;
end;
procedure TProjectInspectorForm.UpdateTitle;
var
NewCaption: String;
begin
if LazProject=nil then
Caption:='Project Inspector'
else begin
NewCaption:=LazProject.Title;
if NewCaption='' then
NewCaption:=ExtractFilenameOnly(LazProject.ProjectInfoFile);
Caption:=NewCaption;
end;
end;
procedure TProjectInspectorForm.UpdateButtons;
begin
AddBitBtn.Enabled:=true;
RemoveBitBtn.Enabled:=true;
OpenBitBtn.Enabled:=true;
OptionsBitBtn.Enabled:=true;
end;
procedure TProjectInspectorForm.UpdateItems;
begin
// update project files
// update required packages
// update removed required packages
end;
initialization
ProjInspector:=nil;
end.

View File

@ -578,6 +578,20 @@ LazarusResources.Add('pkg_package_circle','XPM',[
+'pqr ",'#10'" '''' ''sft'' ",'#10'" ur''vdwxyz ",'#10'" iA'
+'''''B'' "};'#10
]);
LazarusResources.Add('pkg_packagegraph','XPM',[
'/* XPM */'#10'static char * pkg_packagegraph_xpm[] = {'#10'"16 16 17 1",'#10
+'" '#9'c None",'#10'".'#9'c #3A3A3A",'#10'"+'#9'c #87BD88",'#10'"@'#9'c #8BB'
+'E8B",'#10'"#'#9'c #81BA81",'#10'"$'#9'c #6DAF6D",'#10'"%'#9'c #87BD87",'#10
+'"&'#9'c #FCFDFC",'#10'"*'#9'c #AED0AE",'#10'"='#9'c #4E9C4C",'#10'"-'#9'c #'
+'91BD91",'#10'";'#9'c #72B172",'#10'">'#9'c #448643",'#10'",'#9'c #686868",'
+#10'"'''#9'c #519F50",'#10'")'#9'c #499247",'#10'"!'#9'c #356A35",'#10'" . '
+' ",'#10'" . ",'#10'" . +@#$ ",'#10'" . %&*'
+'= ",'#10'" .. #-;> ,, ,,,",'#10'" . $'')! ",'#10'" . '
+' ",'#10'" . ",'#10'" . ",'#10'" . +@#$ '
+' ",'#10'" . %&*= ",'#10'" .. #-;> ,, ,,,",'#10'" $'')! '
+' ",'#10'" ",'#10'" ",'#10'" "'
+'};'#10
]);
LazarusResources.Add('pkg_package_installed','XPM',[
'/* XPM */'#10'static char * pkg_package_installed_xpm[] = {'#10'"16 17 135 2'
+'",'#10'" '#9'c None",'#10'". '#9'c #494214",'#10'"+ '#9'c #C0BDA2",'#10'"@'
@ -1360,6 +1374,54 @@ LazarusResources.Add('menu_pause','XPM',[
+'".+@# .+@#",'#10'".+@# .+@#",'#10'".+@# .+@#",'#10'".+@# .+@#",'#10'".+'
+'@# .+@#",'#10'".+@# .+@#",'#10'"#### ####"};'#10
]);
LazarusResources.Add('menu_projectinspector','XPM',[
'/* XPM */'#10'static char * menu_projectinspector_xpm[] = {'#10'"16 16 118 2'
+'",'#10'" '#9'c None",'#10'". '#9'c #6C7E95",'#10'"+ '#9'c #92A0AD",'#10'"@'
+' '#9'c #EBF2F8",'#10'"# '#9'c #3C5571",'#10'"$ '#9'c #516882",'#10'"% '#9'c'
+' #4B627C",'#10'"& '#9'c #CED7DF",'#10'"* '#9'c #FFFFFF",'#10'"= '#9'c #D2D9'
+'E3",'#10'"- '#9'c #A8B3BF",'#10'"; '#9'c #C7CFD8",'#10'"> '#9'c #BDC6D0",'
+#10'", '#9'c #939FAC",'#10'"'' '#9'c #CBD4DC",'#10'") '#9'c #C2CBD5",'#10'"!'
+' '#9'c #BBC4CE",'#10'"~ '#9'c #AFB8C4",'#10'"{ '#9'c #A7B1BC",'#10'"] '#9'c'
+' #798B9C",'#10'"^ '#9'c #BFC7D2",'#10'"/ '#9'c #B9C3CC",'#10'"( '#9'c #B3BE'
+'C8",'#10'"_ '#9'c #A1AAB4",'#10'": '#9'c #62768D",'#10'"< '#9'c #C1CCD6",'
+#10'"[ '#9'c #BAC4CD",'#10'"} '#9'c #B1BBC6",'#10'"| '#9'c #A3AEBA",'#10'"1 '
+#9'c #9CA7B3",'#10'"2 '#9'c #96A1AD",'#10'"3 '#9'c #8C9BA9",'#10'"4 '#9'c #7'
+'F8FA0",'#10'"5 '#9'c #5B728C",'#10'"6 '#9'c #2D4968",'#10'"7 '#9'c #D6DEE7"'
+','#10'"8 '#9'c #97A2AE",'#10'"9 '#9'c #AEB7C3",'#10'"0 '#9'c #A4AEBB",'#10
+'"a '#9'c #98A5B1",'#10'"b '#9'c #919FAC",'#10'"c '#9'c #8B97A6",'#10'"d '#9
+'c #71849A",'#10'"e '#9'c #687E95",'#10'"f '#9'c #64778F",'#10'"g '#9'c #576'
+'D88",'#10'"h '#9'c #4B637E",'#10'"i '#9'c #91AA91",'#10'"j '#9'c #AFC8AF",'
+#10'"k '#9'c #AAC3AA",'#10'"l '#9'c #7A937A",'#10'"m '#9'c #819A81",'#10'"n '
+#9'c #90A790",'#10'"o '#9'c #7F987F",'#10'"p '#9'c #688568",'#10'"q '#9'c #6'
+'58265",'#10'"r '#9'c #6D8C6D",'#10'"s '#9'c #5E7E5E",'#10'"t '#9'c #4A6B4A"'
+','#10'"u '#9'c #8AA38A",'#10'"v '#9'c #ABC4AB",'#10'"w '#9'c #A2BBA2",'#10
+'"x '#9'c #789178",'#10'"y '#9'c #F7F9F7",'#10'"z '#9'c #98AD98",'#10'"A '#9
+'c #FFFF00",'#10'"B '#9'c #476847",'#10'"C '#9'c #658465",'#10'"D '#9'c #577'
+'757",'#10'"E '#9'c #3E5F3E",'#10'"F '#9'c #859E85",'#10'"G '#9'c #A4BDA4",'
+#10'"H '#9'c #9CB59C",'#10'"I '#9'c #E1E1E1",'#10'"J '#9'c #94AA94",'#10'"K '
+#9'c #759275",'#10'"L '#9'c #C4C42B",'#10'"M '#9'c #5E7D5E",'#10'"N '#9'c #5'
+'27252",'#10'"O '#9'c #375937",'#10'"P '#9'c #809980",'#10'"Q '#9'c #9EB79E"'
+','#10'"R '#9'c #95AE95",'#10'"S '#9'c #6C8B6C",'#10'"T '#9'c #CACACA",'#10
+'"U '#9'c #8EA58E",'#10'"V '#9'c #6E8D6E",'#10'"W '#9'c #617E61",'#10'"X '#9
+'c #577657",'#10'"Y '#9'c #567556",'#10'"Z '#9'c #4E6E4E",'#10'"` '#9'c #2E5'
+'22E",'#10'" .'#9'c #799279",'#10'"..'#9'c #96AF96",'#10'"+.'#9'c #90A990",'
+#10'"@.'#9'c #668566",'#10'"#.'#9'c #AFAFAF",'#10'"$.'#9'c #849D84",'#10'"%.'
+#9'c #597859",'#10'"&.'#9'c #537353",'#10'"*.'#9'c #486948",'#10'"=.'#9'c #2'
+'64C26",'#10'"-.'#9'c #00B200",'#10'";.'#9'c #00FF00",'#10'">.'#9'c #969696"'
+','#10'",.'#9'c #799379",'#10'"''.'#9'c #597759",'#10'").'#9'c #537253",'#10
+'"!.'#9'c #04F704",'#10'"~.'#9'c #007400",'#10'"{.'#9'c #216B21",'#10'"].'#9
+'c #006600",'#10'"^.'#9'c #8D8D8D",'#10'"/.'#9'c #5E7C5E",'#10'"(.'#9'c #076'
+'707",'#10'"_.'#9'c #008700",'#10'":.'#9'c #008C00",'#10'"<.'#9'c #009D00",'
+#10'" . . ",'#10'" + @ # $ '
+' ",'#10'" % & + * = - # $ ",'#10'" % & + * & ; > , # $ '
+' ",'#10'" % + * '' ) ! ~ { ] # $ ",'#10'" + * ; ^ / ( - _ '
+', : # $ ",'#10'" + * < [ } - | 1 2 3 4 5 6 $ ",'#10'"+ 7 8 9 0 a b c'
+' 4 d e f g h # $ ",'#10'" i j k l m n o p q r s t ",'#10'" u v w '
+'x y z l A B C D E ",'#10'" F G H x I J K L B M N O ",'#10'" P'
+' Q R S T U V W X Y Z ` ",'#10'" ...+.@.#.$.C W %.&.*.=. ",'#10'"'
+' x -.;.q >.,.''.).!.~.-.{. ",'#10'" -.].].B ^./.(.-._.:.<.-. ",'
+#10'" "};'#10
]);
LazarusResources.Add('menu_projectoptions','XPM',[
'/* XPM */'#10'static char * projectSettings32_xpm[] = {'#10'"16 16 9 1",'#10
+'" '#9'c None",'#10'".'#9'c #CCCC66",'#10'"+'#9'c #666633",'#10'"@'#9'c #FFF'

View File

@ -0,0 +1,137 @@
/* XPM */
static char * menu_projectinspector_xpm[] = {
"16 16 118 2",
" c None",
". c #6C7E95",
"+ c #92A0AD",
"@ c #EBF2F8",
"# c #3C5571",
"$ c #516882",
"% c #4B627C",
"& c #CED7DF",
"* c #FFFFFF",
"= c #D2D9E3",
"- c #A8B3BF",
"; c #C7CFD8",
"> c #BDC6D0",
", c #939FAC",
"' c #CBD4DC",
") c #C2CBD5",
"! c #BBC4CE",
"~ c #AFB8C4",
"{ c #A7B1BC",
"] c #798B9C",
"^ c #BFC7D2",
"/ c #B9C3CC",
"( c #B3BEC8",
"_ c #A1AAB4",
": c #62768D",
"< c #C1CCD6",
"[ c #BAC4CD",
"} c #B1BBC6",
"| c #A3AEBA",
"1 c #9CA7B3",
"2 c #96A1AD",
"3 c #8C9BA9",
"4 c #7F8FA0",
"5 c #5B728C",
"6 c #2D4968",
"7 c #D6DEE7",
"8 c #97A2AE",
"9 c #AEB7C3",
"0 c #A4AEBB",
"a c #98A5B1",
"b c #919FAC",
"c c #8B97A6",
"d c #71849A",
"e c #687E95",
"f c #64778F",
"g c #576D88",
"h c #4B637E",
"i c #91AA91",
"j c #AFC8AF",
"k c #AAC3AA",
"l c #7A937A",
"m c #819A81",
"n c #90A790",
"o c #7F987F",
"p c #688568",
"q c #658265",
"r c #6D8C6D",
"s c #5E7E5E",
"t c #4A6B4A",
"u c #8AA38A",
"v c #ABC4AB",
"w c #A2BBA2",
"x c #789178",
"y c #F7F9F7",
"z c #98AD98",
"A c #FFFF00",
"B c #476847",
"C c #658465",
"D c #577757",
"E c #3E5F3E",
"F c #859E85",
"G c #A4BDA4",
"H c #9CB59C",
"I c #E1E1E1",
"J c #94AA94",
"K c #759275",
"L c #C4C42B",
"M c #5E7D5E",
"N c #527252",
"O c #375937",
"P c #809980",
"Q c #9EB79E",
"R c #95AE95",
"S c #6C8B6C",
"T c #CACACA",
"U c #8EA58E",
"V c #6E8D6E",
"W c #617E61",
"X c #577657",
"Y c #567556",
"Z c #4E6E4E",
"` c #2E522E",
" . c #799279",
".. c #96AF96",
"+. c #90A990",
"@. c #668566",
"#. c #AFAFAF",
"$. c #849D84",
"%. c #597859",
"&. c #537353",
"*. c #486948",
"=. c #264C26",
"-. c #00B200",
";. c #00FF00",
">. c #969696",
",. c #799379",
"'. c #597759",
"). c #537253",
"!. c #04F704",
"~. c #007400",
"{. c #216B21",
"]. c #006600",
"^. c #8D8D8D",
"/. c #5E7C5E",
"(. c #076707",
"_. c #008700",
":. c #008C00",
"<. c #009D00",
" . . ",
" + @ # $ ",
" % & + * = - # $ ",
" % & + * & ; > , # $ ",
" % + * ' ) ! ~ { ] # $ ",
" + * ; ^ / ( - _ , : # $ ",
" + * < [ } - | 1 2 3 4 5 6 $ ",
"+ 7 8 9 0 a b c 4 d e f g h # $ ",
" i j k l m n o p q r s t ",
" u v w x y z l A B C D E ",
" F G H x I J K L B M N O ",
" P Q R S T U V W X Y Z ` ",
" ...+.@.#.$.C W %.&.*.=. ",
" x -.;.q >.,.'.).!.~.-.{. ",
" -.].].B ^./.(.-._.:.<.-. ",
" "};

View File

@ -0,0 +1,36 @@
/* XPM */
static char * pkg_packagegraph_xpm[] = {
"16 16 17 1",
" c None",
". c #3A3A3A",
"+ c #87BD88",
"@ c #8BBE8B",
"# c #81BA81",
"$ c #6DAF6D",
"% c #87BD87",
"& c #FCFDFC",
"* c #AED0AE",
"= c #4E9C4C",
"- c #91BD91",
"; c #72B172",
"> c #448643",
", c #686868",
"' c #519F50",
") c #499247",
"! c #356A35",
" . ",
" . ",
" . +@#$ ",
" . %&*= ",
" .. #-;> ,, ,,,",
" . $')! ",
" . ",
" . ",
" . ",
" . +@#$ ",
" . %&*= ",
" .. #-;> ,, ,,,",
" $')! ",
" ",
" ",
" "};