Changeset 51
- Timestamp:
- Dec 20, 2021, 6:45:12 PM (3 years ago)
- Location:
- trunk
- Files:
-
- 14 added
- 5 deleted
- 28 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Forms/UFormNewGame.pas
r47 r51 288 288 procedure TFormNewGame.FormCreate(Sender: TObject); 289 289 begin 290 Core. CoolTranslator1.TranslateComponentRecursive(Self);290 Core.Translator1.TranslateComponentRecursive(Self); 291 291 Players := TPlayers.Create; 292 292 end; -
trunk/Forms/UMainForm.lfm
r47 r51 1 1 object MainForm: TMainForm 2 Left = 4863 Height = 5154 Top = 2585 Width = 6422 Left = 692 3 Height = 618 4 Top = 479 5 Width = 770 6 6 Caption = 'Tunneler' 7 ClientHeight = 4908 ClientWidth = 6429 DesignTimePPI = 1 207 ClientHeight = 584 8 ClientWidth = 770 9 DesignTimePPI = 144 10 10 Menu = MainMenu1 11 11 OnClose = FormClose … … 16 16 OnKeyUp = FormKeyUp 17 17 OnShow = FormShow 18 LCLVersion = '2.0. 2.0'18 LCLVersion = '2.0.12.0' 19 19 object StatusBar1: TStatusBar 20 20 Left = 0 21 Height = 2 822 Top = 46223 Width = 64221 Height = 27 22 Top = 557 23 Width = 770 24 24 Panels = < 25 25 item 26 Width = 6226 Width = 74 27 27 end 28 28 item 29 Width = 6229 Width = 74 30 30 end 31 31 item 32 Width = 6232 Width = 74 33 33 end 34 34 item 35 Width = 6235 Width = 74 36 36 end 37 37 item 38 Width = 6238 Width = 74 39 39 end 40 40 item 41 Width = 6241 Width = 74 42 42 end 43 43 item 44 Width = 6244 Width = 74 45 45 end> 46 46 ParentFont = False … … 49 49 object Image1: TImage 50 50 Left = 0 51 Height = 46251 Height = 557 52 52 Top = 0 53 Width = 64253 Width = 770 54 54 Align = alClient 55 55 OnMouseLeave = Image1MouseLeave … … 59 59 Interval = 50 60 60 OnTimer = TimerDrawTimer 61 left = 12462 top = 6361 Left = 149 62 Top = 76 63 63 end 64 64 object MainMenu1: TMainMenu 65 left = 23066 top = 2065 Left = 276 66 Top = 24 67 67 object MenuItem1: TMenuItem 68 68 Caption = 'Game' … … 93 93 Interval = 20 94 94 OnTimer = TimerEngineTickTimer 95 left = 12096 top = 13095 Left = 144 96 Top = 156 97 97 end 98 98 object ActionList1: TActionList 99 left = 360100 top = 4099 Left = 432 100 Top = 48 101 101 object AFullScreen: TAction 102 102 Caption = 'Fullscreen mode' … … 132 132 RootName = 'CONFIG' 133 133 ReadOnly = False 134 left = 124 135 top = 300 134 Left = 149 135 Top = 360 136 end 137 object AboutDialog1: TAboutDialog 138 CoolTranslator = Core.Translator1 139 ThemeManager = Core.ThemeManager1 140 ApplicationInfo = Core.ApplicationInfo 141 Left = 308 142 Top = 181 136 143 end 137 144 end -
trunk/Forms/UMainForm.pas
r47 r51 8 8 XMLConf, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, 9 9 Dialogs, ExtCtrls, ComCtrls, Menus, ActnList, UEngine, UPlatform, Math, 10 DateUtils, GraphType, UPersistentForm, UApplicationInfo, U CoolTranslator,11 LCLType, URegistry ;10 DateUtils, GraphType, UPersistentForm, UApplicationInfo, UTranslator, 11 LCLType, URegistry, UAboutDialog; 12 12 13 13 type … … 17 17 TMainForm = class(TForm) 18 18 AAbout: TAction; 19 AboutDialog1: TAboutDialog; 19 20 AShowRawImageDesc: TAction; 20 21 AShowMap: TAction; … … 143 144 Engine := TEngine.Create; 144 145 Engine.Bitmap := Image1.Picture.Bitmap; 145 Core. CoolTranslator1.Language := Core.CoolTranslator1.Languages.SearchByCode('cs');146 Core.Translator1.Language := Core.Translator1.Languages.SearchByCode('cs'); 146 147 LoadConfig; 147 148 Engine.NewGame; … … 221 222 procedure TMainForm.AAboutExecute(Sender: TObject); 222 223 begin 223 FormAbout := TFormAbout.Create(nil); 224 FormAbout.ShowModal; 225 FreeAndNil(FormAbout); 224 AboutDialog1.Show; 226 225 end; 227 226 -
trunk/Languages/Tunneler.cs.po
r47 r51 16 16 msgid "Debug" 17 17 msgstr "LadÄnÃ" 18 19 #: tformabout.buttonclose.caption20 msgid "Close"21 msgstr "ZavÅÃt"22 23 #: tformabout.buttonhomepage.caption24 msgid "Home page"25 msgstr "Domovská stránka"26 27 #: tformabout.caption28 msgctxt "tformabout.caption"29 msgid "About"30 msgstr "O aplikaci"31 32 #: tformabout.labelappname.caption33 msgctxt "tformabout.labelappname.caption"34 msgid "Tunneler"35 msgstr "Tunneler"36 37 #: tformabout.labelcontent.caption38 msgid " "39 msgstr " "40 41 #: tformabout.labeldescription.caption42 msgid "Real-time digging tank battle game. This is recreation of legend MS-DOS game written in Pascal."43 msgstr "Kopacà tanková bojová ha v reálném Äase. Jedná se o znovu vytvoÅenà legendárnà MS-DOS hry napsané v Pascale."44 18 45 19 #: tformnewgame.buttoncancel.caption … … 174 148 msgstr "Mapa" 175 149 176 #: ucore.splayer177 msgctxt "ucore.splayer"178 msgid "Player"179 msgstr "HráÄ"180 181 150 #: uengine.splayer 182 151 msgctxt "uengine.splayer" … … 184 153 msgstr "HráÄ" 185 154 186 #: uformabout.slicense187 msgid "License"188 msgstr "Licence"189 190 #: uformabout.sreleasedate191 msgid "Release date"192 msgstr "Datum uvolnÄnÃ"193 194 #: uformabout.sversion195 msgid "Version"196 msgstr "Verze"197 198 155 #: umainform.sround 199 156 msgid "%0:s of %1:s" 200 157 msgstr "%0:s z %1:s" 158 -
trunk/Languages/Tunneler.po
r47 r51 4 4 #: tdebugform.caption 5 5 msgid "Debug" 6 msgstr ""7 8 #: tformabout.buttonclose.caption9 msgid "Close"10 msgstr ""11 12 #: tformabout.buttonhomepage.caption13 msgid "Home page"14 msgstr ""15 16 #: tformabout.caption17 msgctxt "tformabout.caption"18 msgid "About"19 msgstr ""20 21 #: tformabout.labelappname.caption22 msgctxt "tformabout.labelappname.caption"23 msgid "Tunneler"24 msgstr ""25 26 #: tformabout.labelcontent.caption27 msgid " "28 msgstr ""29 30 #: tformabout.labeldescription.caption31 msgid "Real-time digging tank battle game. This is recreation of legend MS-DOS game written in Pascal."32 6 msgstr "" 33 7 … … 163 137 msgstr "" 164 138 165 #: ucore.splayer166 msgctxt "ucore.splayer"167 msgid "Player"168 msgstr ""169 170 139 #: uengine.splayer 171 140 msgctxt "uengine.splayer" 172 141 msgid "Player" 173 msgstr ""174 175 #: uformabout.slicense176 msgid "License"177 msgstr ""178 179 #: uformabout.sreleasedate180 msgid "Release date"181 msgstr ""182 183 #: uformabout.sversion184 msgid "Version"185 142 msgstr "" 186 143 -
trunk/Packages/Common/Common.lpk
r38 r51 37 37 </Other> 38 38 </CompilerOptions> 39 <Description Value="Various libraries"/> 40 <License Value="GNU/GPL"/> 41 <Version Minor="7"/> 42 <Files Count="22"> 39 <Description Value="Common package with various useful units. 40 41 Source: https://svn.zdechov.net/PascalClassLibrary/Common/"/> 42 <License Value="Copy left."/> 43 <Version Minor="8"/> 44 <Files Count="29"> 43 45 <Item1> 44 46 <Filename Value="StopWatch.pas"/> … … 139 141 <UnitName Value="UStringTable"/> 140 142 </Item22> 143 <Item23> 144 <Filename Value="UMetaCanvas.pas"/> 145 <UnitName Value="UMetaCanvas"/> 146 </Item23> 147 <Item24> 148 <Filename Value="UGeometric.pas"/> 149 <UnitName Value="UGeometric"/> 150 </Item24> 151 <Item25> 152 <Filename Value="UTranslator.pas"/> 153 <HasRegisterProc Value="True"/> 154 <UnitName Value="UTranslator"/> 155 </Item25> 156 <Item26> 157 <Filename Value="ULanguages.pas"/> 158 <UnitName Value="ULanguages"/> 159 </Item26> 160 <Item27> 161 <Filename Value="UFormAbout.pas"/> 162 <UnitName Value="UFormAbout"/> 163 </Item27> 164 <Item28> 165 <Filename Value="UAboutDialog.pas"/> 166 <HasRegisterProc Value="True"/> 167 <UnitName Value="UAboutDialog"/> 168 </Item28> 169 <Item29> 170 <Filename Value="UPixelPointer.pas"/> 171 <UnitName Value="UPixelPointer"/> 172 </Item29> 141 173 </Files> 142 174 <i18n> -
trunk/Packages/Common/Common.pas
r38 r51 12 12 UMemory, UResetableThread, UPool, ULastOpenedList, URegistry, 13 13 UJobProgressView, UXMLUtils, UApplicationInfo, USyncCounter, UListViewSort, 14 UPersistentForm, UFindFile, UScaleDPI, UTheme, UStringTable, 15 LazarusPackageIntf; 14 UPersistentForm, UFindFile, UScaleDPI, UTheme, UStringTable, UMetaCanvas, 15 UGeometric, UTranslator, ULanguages, UFormAbout, UAboutDialog, 16 UPixelPointer, LazarusPackageIntf; 16 17 17 18 implementation … … 29 30 RegisterUnit('UScaleDPI', @UScaleDPI.Register); 30 31 RegisterUnit('UTheme', @UTheme.Register); 32 RegisterUnit('UTranslator', @UTranslator.Register); 33 RegisterUnit('UAboutDialog', @UAboutDialog.Register); 31 34 end; 32 35 -
trunk/Packages/Common/Languages/UJobProgressView.cs.po
r38 r51 24 24 msgstr "DokonÄené" 25 25 26 #: ujobprogressview.soperations27 #, fuzzy28 #| msgid "Operations"29 msgid "Operations:"30 msgstr "Operace"31 32 26 #: ujobprogressview.spleasewait 33 27 msgid "Please wait..." -
trunk/Packages/Common/Languages/UJobProgressView.po
r38 r51 14 14 msgstr "" 15 15 16 #: ujobprogressview.soperations17 msgid "Operations:"18 msgstr ""19 20 16 #: ujobprogressview.spleasewait 21 17 msgid "Please wait..." -
trunk/Packages/Common/UApplicationInfo.pas
r38 r51 6 6 7 7 uses 8 SysUtils, Classes, Forms, URegistry, Controls ;8 SysUtils, Classes, Forms, URegistry, Controls, Graphics, LCLType; 9 9 10 10 type … … 14 14 TApplicationInfo = class(TComponent) 15 15 private 16 FDescription: TCaption; 16 FDescription: TTranslateString; 17 FIcon: TBitmap; 17 18 FIdentification: Byte; 18 19 FLicense: string; … … 33 34 public 34 35 constructor Create(AOwner: TComponent); override; 36 destructor Destroy; override; 35 37 property Version: string read GetVersion; 36 38 function GetRegistryContext: TRegistryContext; … … 47 49 property EmailContact: string read FEmailContact write FEmailContact; 48 50 property AppName: string read FAppName write FAppName; 49 property Description: string read FDescription write FDescription;51 property Description: TTranslateString read FDescription write FDescription; 50 52 property ReleaseDate: TDateTime read FReleaseDate write FReleaseDate; 51 53 property RegistryKey: string read FRegistryKey write FRegistryKey; 52 54 property RegistryRoot: TRegistryRoot read FRegistryRoot write FRegistryRoot; 53 55 property License: string read FLicense write FLicense; 56 property Icon: TBitmap read FIcon write FIcon; 54 57 end; 55 58 … … 74 77 constructor TApplicationInfo.Create(AOwner: TComponent); 75 78 begin 76 inherited Create(AOwner);79 inherited; 77 80 FVersionMajor := 1; 78 81 FIdentification := 1; … … 80 83 FRegistryKey := '\Software\' + FAppName; 81 84 FRegistryRoot := rrKeyCurrentUser; 85 FIcon := TBitmap.Create; 86 end; 87 88 destructor TApplicationInfo.Destroy; 89 begin 90 FreeAndNil(FIcon); 91 inherited; 82 92 end; 83 93 -
trunk/Packages/Common/UCommon.pas
r38 r51 40 40 {$ENDIF} 41 41 42 function IntToBin(Data: Int64; Count: Byte): string;42 function AddLeadingZeroes(const aNumber, Length : integer) : string; 43 43 function BinToInt(BinStr: string): Int64; 44 function TryHexToInt(Data: string; var Value: Integer): Boolean;45 function TryBinToInt(Data: string; var Value: Integer): Boolean;46 44 function BinToHexString(Source: AnsiString): string; 47 45 //function DelTree(DirName : string): Boolean; … … 49 47 function BCDToInt(Value: Byte): Byte; 50 48 function CompareByteArray(Data1, Data2: TArrayOfByte): Boolean; 49 procedure CopyStringArray(Dest: TStringArray; Source: array of string); 50 function CombinePaths(Path1, Path2: string): string; 51 function ComputerName: string; 52 procedure DeleteFiles(APath, AFileSpec: string); 53 procedure ExecuteProgram(Executable: string; Parameters: array of string); 54 procedure FileDialogUpdateFilterFileType(FileDialog: TOpenDialog); 55 procedure FreeThenNil(var Obj); 56 function GetDirCount(Dir: string): Integer; 51 57 function GetUserName: string; 52 function LoggedOnUserNameEx(Format: TUserNameFormat): string;53 function SplitString(var Text: string; Count: Word): string;54 58 function GetBitCount(Variable: QWord; MaxIndex: Integer): Integer; 55 59 function GetBit(Variable: QWord; Index: Byte): Boolean; 60 function GetStringPart(var Text: string; Separator: string): string; 61 function GenerateNewName(OldName: string): string; 62 function GetFileFilterItemExt(Filter: string; Index: Integer): string; 63 function IntToBin(Data: Int64; Count: Byte): string; 64 function LastPos(const SubStr: String; const S: String): Integer; 65 function LoadFileToStr(const FileName: TFileName): AnsiString; 66 function LoggedOnUserNameEx(Format: TUserNameFormat): string; 67 function MergeArray(A, B: array of string): TArrayOfString; 68 function OccurenceOfChar(What: Char; Where: string): Integer; 69 procedure OpenWebPage(URL: string); 70 procedure OpenFileInShell(FileName: string); 71 function PosFromIndex(SubStr: string; Text: string; 72 StartIndex: Integer): Integer; 73 function PosFromIndexReverse(SubStr: string; Text: string; 74 StartIndex: Integer): Integer; 75 function RemoveQuotes(Text: string): string; 76 procedure SaveStringToFile(S, FileName: string); 56 77 procedure SetBit(var Variable: Int64; Index: Byte; State: Boolean); overload; 57 78 procedure SetBit(var Variable: QWord; Index: Byte; State: Boolean); overload; 58 79 procedure SetBit(var Variable: Cardinal; Index: Byte; State: Boolean); overload; 59 80 procedure SetBit(var Variable: Word; Index: Byte; State: Boolean); overload; 60 function AddLeadingZeroes(const aNumber, Length : integer) : string;61 function LastPos(const SubStr: String; const S: String): Integer;62 function GenerateNewName(OldName: string): string;63 function GetFileFilterItemExt(Filter: string; Index: Integer): string;64 procedure FileDialogUpdateFilterFileType(FileDialog: TOpenDialog);65 procedure DeleteFiles(APath, AFileSpec: string);66 procedure OpenWebPage(URL: string);67 procedure OpenFileInShell(FileName: string);68 procedure ExecuteProgram(Executable: string; Parameters: array of string);69 procedure FreeThenNil(var Obj);70 function RemoveQuotes(Text: string): string;71 function ComputerName: string;72 function OccurenceOfChar(What: Char; Where: string): Integer;73 function GetDirCount(Dir: string): Integer;74 function MergeArray(A, B: array of string): TArrayOfString;75 function LoadFileToStr(const FileName: TFileName): AnsiString;76 procedure SaveStringToFile(S, FileName: string);77 81 procedure SearchFiles(AList: TStrings; Dir: string; 78 82 FilterMethod: TFilterMethod = nil; FileNameMethod: TFileNameMethod = nil); 79 function GetStringPart(var Text: string; Separator: string): string;83 function SplitString(var Text: string; Count: Word): string; 80 84 function StripTags(const S: string): string; 81 function PosFromIndex(SubStr: string; Text: string; 82 StartIndex: Integer): Integer; 83 function PosFromIndexReverse(SubStr: string; Text: string; 84 StartIndex: Integer): Integer; 85 procedure CopyStringArray(Dest: TStringArray; Source: array of string); 85 function TryHexToInt(Data: string; var Value: Integer): Boolean; 86 function TryBinToInt(Data: string; var Value: Integer): Boolean; 87 procedure SortStrings(Strings: TStrings); 86 88 87 89 … … 669 671 end; 670 672 673 function CombinePaths(Path1, Path2: string): string; 674 begin 675 Result := Path1; 676 if Result <> '' then Result := Result + DirectorySeparator + Path2 677 else Result := Path2; 678 end; 679 680 procedure SortStrings(Strings: TStrings); 681 var 682 Tmp: TStringList; 683 begin 684 Strings.BeginUpdate; 685 try 686 if Strings is TStringList then begin 687 TStringList(Strings).Sort; 688 end else begin 689 Tmp := TStringList.Create; 690 try 691 Tmp.Assign(Strings); 692 Tmp.Sort; 693 Strings.Assign(Tmp); 694 finally 695 Tmp.Free; 696 end; 697 end; 698 finally 699 Strings.EndUpdate; 700 end; 701 end; 702 671 703 672 704 initialization -
trunk/Packages/Common/UJobProgressView.lfm
r38 r51 15 15 OnShow = FormShow 16 16 Position = poScreenCenter 17 LCLVersion = ' 1.8.2.0'17 LCLVersion = '2.0.2.0' 18 18 object PanelOperationsTitle: TPanel 19 19 Left = 0 … … 241 241 Interval = 100 242 242 OnTimer = TimerUpdateTimer 243 left = 264243 left = 320 244 244 top = 8 245 245 end -
trunk/Packages/Common/UJobProgressView.pas
r38 r51 175 175 STotalEstimatedTime = 'Total estimated time: %s'; 176 176 SFinished = 'Finished'; 177 SOperations = 'Operations:';178 177 179 178 procedure Register; -
trunk/Packages/Common/UListViewSort.pas
r38 r51 1 1 unit UListViewSort; 2 2 3 // Date: 201 0-11-033 // Date: 2019-05-17 4 4 5 5 {$mode delphi} … … 8 8 9 9 uses 10 {$IFDEF Windows}Windows, CommCtrl, {$ENDIF}Classes, Graphics, ComCtrls, SysUtils,10 {$IFDEF Windows}Windows, CommCtrl, LMessages, {$ENDIF}Classes, Graphics, ComCtrls, SysUtils, 11 11 Controls, DateUtils, Dialogs, fgl, Forms, Grids, StdCtrls, ExtCtrls, 12 LclIntf, L Messages, LclType, LResources;12 LclIntf, LclType, LResources; 13 13 14 14 type … … 81 81 FOnChange: TNotifyEvent; 82 82 FStringGrid1: TStringGrid; 83 procedure DoOnChange; 83 84 procedure GridDoOnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); 84 85 procedure GridDoOnResize(Sender: TObject); … … 90 91 function TextEnteredColumn(Index: Integer): Boolean; 91 92 function GetColValue(Index: Integer): string; 93 procedure Reset; 92 94 property StringGrid: TStringGrid read FStringGrid1 write FStringGrid1; 93 95 published … … 152 154 { TListViewFilter } 153 155 156 procedure TListViewFilter.DoOnChange; 157 begin 158 if Assigned(FOnChange) then FOnChange(Self); 159 end; 160 154 161 procedure TListViewFilter.GridDoOnKeyUp(Sender: TObject; var Key: Word; 155 162 Shift: TShiftState); 156 163 begin 157 if Assigned(FOnChange) then 158 FOnChange(Self); 164 DoOnChange; 159 165 end; 160 166 … … 227 233 Result := StringGrid.Cells[Index, 0] 228 234 else Result := ''; 235 end; 236 237 procedure TListViewFilter.Reset; 238 var 239 I: Integer; 240 begin 241 with StringGrid do 242 for I := 0 to ColCount - 1 do 243 Cells[I, 0] := ''; 244 DoOnChange; 229 245 end; 230 246 -
trunk/Packages/Common/UMemory.pas
r31 r51 112 112 procedure TMemory.WriteMemory(Position: Integer; Memory: TMemory); 113 113 begin 114 Move(Memory.FData, PByte( @FData+ Position)^, Memory.Size);114 Move(Memory.FData, PByte(PByte(@FData) + Position)^, Memory.Size); 115 115 end; 116 116 117 117 procedure TMemory.ReadMemory(Position: Integer; Memory: TMemory); 118 118 begin 119 Move(PByte( @FData+ Position)^, Memory.FData, Memory.Size);119 Move(PByte(PByte(@FData) + Position)^, Memory.FData, Memory.Size); 120 120 end; 121 121 -
trunk/Packages/Common/UPersistentForm.pas
r38 r51 3 3 {$mode delphi} 4 4 5 // Date: 20 15-04-185 // Date: 2020-11-26 6 6 7 7 interface … … 9 9 uses 10 10 Classes, SysUtils, Forms, URegistry, LCLIntf, Registry, Controls, ComCtrls, 11 ExtCtrls ;11 ExtCtrls, LCLType; 12 12 13 13 type … … 26 26 FormRestoredSize: TRect; 27 27 FormWindowState: TWindowState; 28 FormFullScreen: Boolean; 28 29 Form: TForm; 29 30 procedure LoadFromRegistry(RegistryContext: TRegistryContext); … … 31 32 function CheckEntireVisible(Rect: TRect): TRect; 32 33 function CheckPartVisible(Rect: TRect; Part: Integer): TRect; 33 procedure Load(Form: TForm; DefaultMaximized: Boolean = False); 34 procedure Load(Form: TForm; DefaultMaximized: Boolean = False; 35 DefaultFullScreen: Boolean = False); 34 36 procedure Save(Form: TForm); 35 37 constructor Create(AOwner: TComponent); override; 38 procedure SetFullScreen(State: Boolean); 36 39 property RegistryContext: TRegistryContext read FRegistryContext 37 40 write FRegistryContext; … … 43 46 procedure Register; 44 47 48 45 49 implementation 46 47 50 48 51 procedure Register; … … 169 172 + FormRestoredSize.Top; 170 173 // Other state 171 FormWindowState := TWindowState(ReadIntegerWithDefault('WindowState', Integer(wsNormal))); 174 FormWindowState := TWindowState(ReadIntegerWithDefault('WindowState', Integer(FormWindowState))); 175 FormFullScreen := ReadBoolWithDefault('FullScreen', FormFullScreen); 172 176 finally 173 177 Free; … … 193 197 // Other state 194 198 WriteInteger('WindowState', Integer(FormWindowState)); 199 WriteBool('FullScreen', FormFullScreen); 195 200 finally 196 201 Free; … … 250 255 end; 251 256 252 procedure TPersistentForm.Load(Form: TForm; DefaultMaximized: Boolean = False); 257 procedure TPersistentForm.Load(Form: TForm; DefaultMaximized: Boolean = False; 258 DefaultFullScreen: Boolean = False); 253 259 begin 254 260 Self.Form := Form; … … 258 264 FormRestoredSize := Bounds((Screen.Width - Form.Width) div 2, 259 265 (Screen.Height - Form.Height) div 2, Form.Width, Form.Height); 266 FormWindowState := Form.WindowState; 267 FormFullScreen := DefaultFullScreen; 260 268 261 269 LoadFromRegistry(RegistryContext); … … 277 285 Form.BoundsRect := FormNormalSize; 278 286 end; 287 if FormFullScreen then SetFullScreen(True); 279 288 LoadControl(Form); 280 289 end; … … 284 293 Self.Form := Form; 285 294 FormNormalSize := Bounds(Form.Left, Form.Top, Form.Width, Form.Height); 286 FormRestoredSize := Bounds(Form.RestoredLeft, Form.RestoredTop, Form.RestoredWidth, 287 Form.RestoredHeight); 295 if not FormFullScreen then 296 FormRestoredSize := Bounds(Form.RestoredLeft, Form.RestoredTop, Form.RestoredWidth, 297 Form.RestoredHeight); 288 298 FormWindowState := Form.WindowState; 289 299 SaveToRegistry(RegistryContext); … … 300 310 end; 301 311 312 procedure TPersistentForm.SetFullScreen(State: Boolean); 313 begin 314 if State then begin 315 FormFullScreen := True; 316 FormNormalSize := Form.BoundsRect; 317 FormRestoredSize := Bounds(Form.RestoredLeft, Form.RestoredTop, Form.RestoredWidth, 318 Form.RestoredHeight); 319 FormWindowState := Form.WindowState; 320 ShowWindow(Form.Handle, SW_SHOWFULLSCREEN); 321 {$IFDEF WINDOWS} 322 Form.BorderStyle := bsNone; 323 {$ENDIF} 324 end else begin 325 FormFullScreen := False; 326 {$IFDEF WINDOWS} 327 Form.BorderStyle := bsSizeable; 328 {$ENDIF} 329 ShowWindow(Form.Handle, SW_SHOWNORMAL); 330 if FormWindowState = wsNormal then begin 331 Form.BoundsRect := FormNormalSize; 332 end else 333 if FormWindowState = wsMaximized then begin 334 Form.BoundsRect := FormRestoredSize; 335 Form.WindowState := wsMaximized; 336 end; 337 end; 338 end; 339 302 340 end. 303 341 -
trunk/Packages/Common/UScaleDPI.pas
r38 r51 227 227 Temp[I] := TBitmap.Create; 228 228 Temp[I].SetSize(NewWidth, NewHeight); 229 {$IFDEF Linux} 230 Temp[I].PixelFormat := pf24bit; 231 {$ELSE} 229 232 Temp[I].PixelFormat := pf32bit; 233 {$ENDIF} 230 234 Temp[I].TransparentColor := TempBmp.TransparentColor; 231 235 //Temp[I].TransparentMode := TempBmp.TransparentMode; -
trunk/Packages/Common/UTheme.pas
r38 r51 5 5 uses 6 6 Classes, SysUtils, Graphics, ComCtrls, Controls, ExtCtrls, Menus, StdCtrls, 7 Spin, Forms, Contnrs, Grids;7 Spin, Forms, fgl, Grids; 8 8 9 9 type … … 19 19 { TThemes } 20 20 21 TThemes = class(T ObjectList)21 TThemes = class(TFPGObjectList<TTheme>) 22 22 function AddNew(Name: string): TTheme; 23 23 function FindByName(Name: string): TTheme; … … 74 74 procedure TThemes.LoadToStrings(Strings: TStrings); 75 75 var 76 Theme: TTheme;76 I: Integer; 77 77 begin 78 Strings.Clear; 79 for Theme in Self do 80 Strings.AddObject(Theme.Name, Theme); 78 Strings.BeginUpdate; 79 try 80 while Strings.Count < Count do Strings.Add(''); 81 while Strings.Count > Count do Strings.Delete(Strings.Count - 1); 82 for I := 0 to Count - 1 do begin 83 Strings[I] := Items[I].Name; 84 Strings.Objects[I] := Items[I]; 85 end; 86 finally 87 Strings.EndUpdate; 88 end; 81 89 end; 82 90 … … 123 131 destructor TThemeManager.Destroy; 124 132 begin 125 Themes.Free;126 inherited Destroy;133 FreeAndNil(Themes); 134 inherited; 127 135 end; 128 136 -
trunk/Packages/Common/UThreading.pas
r38 r51 6 6 7 7 uses 8 Classes, SysUtils, Forms, Contnrs, SyncObjs;8 Classes, SysUtils, Forms, fgl, SyncObjs; 9 9 10 10 type … … 22 22 function GetSuspended: Boolean; virtual; abstract; 23 23 function GetTerminated: Boolean; virtual; abstract; 24 function GetThreadId: Integer; virtual; abstract;24 function GetThreadId: TThreadID; virtual; abstract; 25 25 procedure SetFreeOnTerminate(const AValue: Boolean); virtual; abstract; 26 26 procedure SetPriority(const AValue: TThreadPriority); virtual; abstract; … … 42 42 property Terminated: Boolean read GetTerminated write SetTerminated; 43 43 property Finished: Boolean read GetFinished; 44 property ThreadId: Integerread GetThreadId;44 property ThreadId: TThreadID read GetThreadId; 45 45 end; 46 46 … … 68 68 function GetSuspended: Boolean; override; 69 69 function GetTerminated: Boolean; override; 70 function GetThreadId: Integer; override;70 function GetThreadId: TThreadID; override; 71 71 procedure SetFreeOnTerminate(const AValue: Boolean); override; 72 72 procedure SetPriority(const AValue: TThreadPriority); override; … … 102 102 { TThreadList } 103 103 104 TThreadList = class(T ObjectList)105 function FindById(Id: Integer): TVirtualThread;104 TThreadList = class(TFPGObjectList<TVirtualThread>) 105 function FindById(Id: TThreadID): TVirtualThread; 106 106 constructor Create; virtual; 107 107 end; … … 164 164 if MainThreadID = ThreadID then Method 165 165 else begin 166 Thread := ThreadList.FindById(ThreadID); 166 try 167 ThreadListLock.Acquire; 168 Thread := ThreadList.FindById(ThreadID); 169 finally 170 ThreadListLock.Release; 171 end; 167 172 if Assigned(Thread) then begin 168 173 Thread.Synchronize(Method); … … 173 178 { TThreadList } 174 179 175 function TThreadList.FindById(Id: Integer): TVirtualThread;180 function TThreadList.FindById(Id: TThreadID): TVirtualThread; 176 181 var 177 182 I: Integer; 178 183 begin 179 184 I := 0; 180 while (I < ThreadList.Count) and (T VirtualThread(ThreadList[I]).ThreadID <> Id) do185 while (I < ThreadList.Count) and (ThreadList[I].ThreadID <> Id) do 181 186 Inc(I); 182 if I < ThreadList.Count then Result := T VirtualThread(ThreadList[I])187 if I < ThreadList.Count then Result := ThreadList[I] 183 188 else Result := nil; 184 189 end; … … 233 238 end; 234 239 235 function TListedThread.GetThreadId: Integer;240 function TListedThread.GetThreadId: TThreadID; 236 241 begin 237 242 Result := FThread.ThreadID; … … 356 361 ThreadListLock := TCriticalSection.Create; 357 362 ThreadList := TThreadList.Create; 358 ThreadList. OwnsObjects := False;363 ThreadList.FreeObjects := False; 359 364 360 365 finalization -
trunk/Packages/CoolAudio/UCoolAudioConfig.inc
r32 r51 1 1 {$IFDEF Linux} 2 2 {$DEFINE AudioSystemDSP} 3 {$DEFINE AudioSystemMAD}3 // {$DEFINE AudioSystemMAD} 4 4 {$ENDIF} 5 5 {$IFDEF i386} -
trunk/Packages/CoolAudio/UPlaylist.pas
r32 r51 26 26 procedure PlayNext; 27 27 procedure PlayPrevious; 28 constructor Create(AOwner: TComponent); 28 constructor Create(AOwner: TComponent); override; 29 29 destructor Destroy; override; 30 30 published -
trunk/Packages/TemplateGenerics/Generic/GenericMatrix.inc
r34 r51 30 30 procedure PutItem(Index: TGMatrixIndex; const AValue: TGMatrixItem); virtual; 31 31 procedure SetCount(const AValue: TGMatrixIndex); 32 procedure CheckRange(X: TGMatrixIndexX; Y: TGMatrixIndexY); inline; 32 33 public 34 constructor Create; virtual; 33 35 function Add(Item: TGMatrixItem): TGMatrixIndex; 34 36 procedure AddMatrix(Values: array of TGMatrixRow); … … 140 142 begin 141 143 if (Capacity.X <> AValue.X) and (Capacity.Y <> AValue.Y) then begin 142 (*SetLength(FItems, AValue.Y);144 SetLength(FItems, AValue.Y); 143 145 Y := 0; 144 146 while Y < Length(FItems) do begin … … 146 148 Y := Y + 1; 147 149 end; 148 end; 149 *) 150 SetLength(FItems, AValue.Y, AValue.X); 150 151 { SetLength(FItems, AValue.Y, AValue.X);} 151 152 end; 152 153 end; 153 154 154 155 function TGMatrix.GetItemXY(X: TGMatrixIndexX; Y: TGMatrixIndexY): TGMatrixItem; 156 begin 157 CheckRange(X, Y); 158 Result := FItems[Y, X]; 159 end; 160 161 function TGMatrix.GetItem(Index: TGMatrixIndex): TGMatrixItem; 162 begin 163 CheckRange(Index.X, Index.Y); 164 Result := FItems[Index.Y, Index.X]; 165 end; 166 167 procedure TGMatrix.PutItemXY(X: TGMatrixIndexX; Y: TGMatrixIndexY; const AValue: TGMatrixItem); 168 begin 169 CheckRange(X, Y); 170 FItems[Y, X] := AValue; 171 end; 172 173 procedure TGMatrix.PutItem(Index: TGMatrixIndex; const AValue: TGMatrixItem); 174 begin 175 CheckRange(Index.X, Index.Y); 176 FItems[Index.Y, Index.X] := AValue; 177 end; 178 179 procedure TGMatrix.SetCount(const AValue: TGMatrixIndex); 180 begin 181 Capacity := AValue; 182 FCount := AValue; 183 end; 184 185 procedure TGMatrix.CheckRange(X: TGMatrixIndexX; Y: TGMatrixIndexY); 155 186 begin 156 187 if (X < 0) or (X >= Count.X) or 157 188 (Y < 0) or (Y >= Count.Y) then 158 189 raise EListError.CreateFmt(SMatrixIndexError, [X, Y]); 159 Result := FItems[Y, X];160 end;161 162 function TGMatrix.GetItem(Index: TGMatrixIndex): TGMatrixItem;163 begin164 if (Index.X < 0) or (Index.X >= Count.X) or165 (Index.Y < 0) or (Index.Y >= Count.Y) then166 raise EListError.CreateFmt(SMatrixIndexError, [Index.X, Index.Y]);167 Result := FItems[Index.Y, Index.X];168 end;169 170 procedure TGMatrix.PutItemXY(X: TGMatrixIndexX; Y: TGMatrixIndexY; const AValue: TGMatrixItem);171 begin172 if (X < 0) or (X >= Count.X) or173 (Y < 0) or (Y >= Count.Y) then174 raise EListError.CreateFmt(SMatrixIndexError, [X, Y]);175 FItems[Y, X] := AValue;176 end;177 178 procedure TGMatrix.PutItem(Index: TGMatrixIndex; const AValue: TGMatrixItem);179 begin180 if (Index.X < 0) or (Index.X >= Count.X) or181 (Index.Y < 0) or (Index.Y >= Count.Y) then182 raise EListError.CreateFmt(SMatrixIndexError, [Index.X, Index.Y]);183 FItems[Index.Y, Index.X] := AValue;184 end;185 186 procedure TGMatrix.SetCount(const AValue: TGMatrixIndex);187 begin188 Capacity := AValue;189 FCount := AValue;190 190 end; 191 191 … … 555 555 end; 556 556 557 constructor TGMatrix.Create; 558 begin 559 SetLength(FItems, 0, 0); 560 FCount := CreateIndex(0, 0); 561 end; 562 557 563 procedure TGMatrix.Clear; 558 564 begin -
trunk/Read me.txt
r50 r51 1 Developed using Lazarus 2.0.1 0(http://www.lazarus-ide.org/)1 Developed using Lazarus 2.0.12 (http://www.lazarus-ide.org/) -
trunk/UCore.lfm
r44 r51 1 1 object Core: TCore 2 2 OldCreateOrder = False 3 Height = 5194 HorizontalOffset = 7355 VerticalOffset = 4566 Width = 6967 PPI = 963 Height = 779 4 HorizontalOffset = 1103 5 VerticalOffset = 603 6 Width = 1044 7 PPI = 144 8 8 object ThemeManager1: TThemeManager 9 left = 17210 top = 1779 Left = 258 10 Top = 266 11 11 end 12 12 object ApplicationInfo: TApplicationInfo … … 21 21 EmailContact = 'robie@centrum.cz' 22 22 AppName = 'Tunneler' 23 ReleaseDate = 4 357323 ReleaseDate = 44550 24 24 RegistryKey = '\Software\Chronosoft\Tunneler' 25 25 RegistryRoot = rrKeyCurrentUser 26 26 License = 'CC0' 27 left = 176 28 top = 288 27 Icon.Data = { 28 36400000424D3640000000000000360000002800000040000000400000000100 29 2000000000000040000064000000640000000000000000000000000000000000 30 0000000000000000000000000000000000000000000000000000000000000000 31 0000000000000000000000000000000000000000000000000000000000000000 32 0000000000000000000000000000000000000000000000000000000000000000 33 0000000000000000000000000000000000000000000000000000000000000000 34 0000000000000000000000000000000000000000000000000000000000000000 35 0000000000000000000000000000000000000000000000000000000000000000 36 0000000000000000000000000000000000000000000000000000000000000000 37 0000000000000000000000000000000000000000000000000000000000000000 38 0000000000000000000000000000000000000000000000000000000000000000 39 0000000000000000000000000000000000000000000000000000000000000000 40 0000000000000000000000000000000000000000000000000000000000000000 41 0000000000000000000000000000000000000000000000000000000000000000 42 0000000000000000000000000000000000000000000000000000000000000000 43 0000000000000000000000000000000000000000000000000000000000000000 44 0000000000000000000000000000000000000000000000000000000000000000 45 0000000000000000000000000000000000000000000000000000000000000000 46 0000000000000000000000000000000000000000000000000000000000000000 47 0000000000000000000000000000000000000000000000000000000000000000 48 0000000000000000000000000000000000000000000000000000000000000000 49 0000000000000000000000000000000000000000000000000000000000000000 50 0000000000000000000000000000000000000000000000000000000000000000 51 0000000000000000000000000000000000000000000000000000000000000000 52 0000000000000000000000000000000000000000000000000000000000000000 53 0000000000000000000000000000000000000000000000000000000000000000 54 0000000000000000000000000000000000000000000000000000000000000000 55 0000000000000000000000000000000000000000000000000000000000000000 56 0000000000000000000000000000000000000000000000000000000000000000 57 0000000000000000000000000000000000000000000000000000000000000000 58 0000000000000000000000000000000000000000000000000000000000000000 59 0000000000000000000000000000000000000000000000000000000000000000 60 0000000000000000000000000000000000000000000000000000000000000000 61 0000000000000000000000000000000000000000000000000000000000000000 62 0000000000000000000000000000000000000000000000000000000000000000 63 0000000000000000000000000000000000000000000000000000000000000000 64 0000000000000000000000000000000000000000000000000000000000000000 65 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 66 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 67 0000000000000000000000000000000000000000000000000000000000000000 68 0000000000000000000000000000000000000000000000000000000000000000 69 0000000000000000000000000000000000000000000000000000000000000000 70 0000000000000000000000000000000000000000000000000000000000000000 71 0000000000000000000000000000000000000000000000000000000000000000 72 0000000000000000000000000000000000000000000000000000000000000000 73 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 74 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 75 0000000000000000000000000000000000000000000000000000000000000000 76 0000000000000000000000000000000000000000000000000000000000000000 77 0000000000000000000000000000000000000000000000000000000000000000 78 0000000000000000000000000000000000000000000000000000000000000000 79 0000000000000000000000000000000000000000000000000000000000000000 80 0000000000000000000000000000000000000000000000000000000000000000 81 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 82 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 83 0000000000000000000000000000000000000000000000000000000000000000 84 0000000000000000000000000000000000000000000000000000000000000000 85 0000000000000000000000000000000000000000000000000000000000000000 86 0000000000000000000000000000000000000000000000000000000000000000 87 0000000000000000000000000000000000000000000000000000000000000000 88 0000000000000000000000000000000000000000000000000000000000000000 89 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 90 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 91 0000000000000000000000000000000000000000000000000000000000000000 92 0000000000000000000000000000000000000000000000000000000000000000 93 0000000000000000000000000000000000000000000000000000000000000000 94 0000000000000000000000000000000000000000000000000000000000000000 95 0000000000000000000000000000000000000000000000000000000000000000 96 0000000000000000000000000000000000000000000000000000000000000000 97 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 98 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 99 0000000000000000000000000000000000000000000000000000000000000000 100 0000000000000000000000000000000000000000000000000000000000000000 101 0000000000000000000000000000000000000000000000000000000000000000 102 0000000000000000000000000000000000000000000000000000000000000000 103 0000000000000000000000000000000000000000000000000000000000000000 104 0000000000000000000000000000000000000000000000000000000000000000 105 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 106 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 107 0000000000000000000000000000000000000000000000000000000000000000 108 0000000000000000000000000000000000000000000000000000000000000000 109 0000000000000000000000000000000000000000000000000000000000000000 110 0000000000000000000000000000000000000000000000000000000000000000 111 0000000000000000000000000000000000000000000000000000000000000000 112 0000000000000000000000000000000000000000000000000000000000000000 113 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 114 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 115 0000000000000000000000000000000000000000000000000000000000000000 116 0000000000000000000000000000000000000000000000000000000000000000 117 0000000000000000000000000000000000000000000000000000000000000000 118 0000000000000000000000000000000000000000000000000000000000000000 119 0000000000000000000000000000000000000000000000000000000000000000 120 0000000000000000000000000000000000000000000000000000000000000000 121 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 122 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 123 0000000000000000000000000000000000000000000000000000000000000000 124 0000000000000000000000000000000000000000000000000000000000000000 125 0000000000000000000000000000000000000000000000000000000000000000 126 0000000000000000000000000000000000000000000000000000000000000000 127 0000000000000000000000000000000000000000000000000000000000000000 128 0000000000000000000000000000000000000000000000000000000000000000 129 0000000000000000000000A000FF00A000FF00A000FF00A000FF00A000FF00A0 130 00FF00A000FF00A000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 131 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 132 0000000000000000000000000000000000000000000000000000000000000000 133 0000000000000000000000000000000000000000000000000000000000000000 134 0000000000000000000000000000000000000000000000000000000000000000 135 0000000000000000000000000000000000000000000000000000000000000000 136 0000000000000000000000000000000000000000000000000000000000000000 137 0000000000000000000000A000FF00A000FF00A000FF00A000FF00A000FF00A0 138 00FF00A000FF00A000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 139 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 140 0000000000000000000000000000000000000000000000000000000000000000 141 0000000000000000000000000000000000000000000000000000000000000000 142 0000000000000000000000000000000000000000000000000000000000000000 143 0000000000000000000000000000000000000000000000000000000000000000 144 0000000000000000000000000000000000000000000000000000000000000000 145 0000000000000000000000A000FF00A000FF00A000FF00A000FF00A000FF00A0 146 00FF00A000FF00A000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 147 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 148 0000000000000000000000000000000000000000000000000000000000000000 149 0000000000000000000000000000000000000000000000000000000000000000 150 0000000000000000000000000000000000000000000000000000000000000000 151 0000000000000000000000000000000000000000000000000000000000000000 152 0000000000000000000000000000000000000000000000000000000000000000 153 0000000000000000000000A000FF00A000FF00A000FF00A000FF00A000FF00A0 154 00FF00A000FF00A000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 155 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 156 0000000000000000000000000000000000000000000000000000000000000000 157 0000000000000000000000000000000000000000000000000000000000000000 158 0000000000000000000000000000000000000000000000000000000000000000 159 0000000000000000000000000000000000000000000000000000000000000000 160 0000000000000000000000000000000000000000000000000000000000000000 161 0000000000000000000000A000FF00A000FF00A000FF00A000FF00A000FF00A0 162 00FF00A000FF00A000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 163 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 164 0000000000000000000000000000000000000000000000000000000000000000 165 0000000000000000000000000000000000000000000000000000000000000000 166 0000000000000000000000000000000000000000000000000000000000000000 167 0000000000000000000000000000000000000000000000000000000000000000 168 0000000000000000000000000000000000000000000000000000000000000000 169 0000000000000000000000A000FF00A000FF00A000FF00A000FF00A000FF00A0 170 00FF00A000FF00A000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 171 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 172 0000000000000000000000000000000000000000000000000000000000000000 173 0000000000000000000000000000000000000000000000000000000000000000 174 0000000000000000000000000000000000000000000000000000000000000000 175 0000000000000000000000000000000000000000000000000000000000000000 176 0000000000000000000000000000000000000000000000000000000000000000 177 0000000000000000000000A000FF00A000FF00A000FF00A000FF00A000FF00A0 178 00FF00A000FF00A000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 179 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 180 0000000000000000000000000000000000000000000000000000000000000000 181 0000000000000000000000000000000000000000000000000000000000000000 182 0000000000000000000000000000000000000000000000000000000000000000 183 0000000000000000000000000000000000000000000000000000000000000000 184 0000000000000000000000000000000000000000000000000000000000000000 185 0000000000000000000000A000FF00A000FF00A000FF00A000FF00A000FF00A0 186 00FF00A000FF00A000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 187 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 188 0000000000000000000000000000000000000000000000000000000000000000 189 0000000000000000000000000000000000000000000000000000000000000000 190 0000000000000000000000000000000000000000000000000000000000000000 191 0000000000000000000000000000000000000000000000000000000000000000 192 0000000000000000000000A000FF00A000FF00A000FF00A000FF00A000FF00A0 193 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 194 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 195 00FF00A000FF00A000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 196 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 197 0000000000000000000000000000000000000000000000000000000000000000 198 0000000000000000000000000000000000000000000000000000000000000000 199 0000000000000000000000000000000000000000000000000000000000000000 200 0000000000000000000000A000FF00A000FF00A000FF00A000FF00A000FF00A0 201 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 202 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 203 00FF00A000FF00A000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 204 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 205 0000000000000000000000000000000000000000000000000000000000000000 206 0000000000000000000000000000000000000000000000000000000000000000 207 0000000000000000000000000000000000000000000000000000000000000000 208 0000000000000000000000A000FF00A000FF00A000FF00A000FF00A000FF00A0 209 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 210 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 211 00FF00A000FF00A000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 212 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 213 0000000000000000000000000000000000000000000000000000000000000000 214 0000000000000000000000000000000000000000000000000000000000000000 215 0000000000000000000000000000000000000000000000000000000000000000 216 0000000000000000000000A000FF00A000FF00A000FF00A000FF00A000FF00A0 217 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 218 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 219 00FF00A000FF00A000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 220 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 221 0000000000000000000000000000000000000000000000000000000000000000 222 0000000000000000000000000000000000000000000000000000000000000000 223 0000000000000000000000000000000000000000000000000000000000000000 224 0000000000000000000000A000FF00A000FF00A000FF00A000FF00A000FF00A0 225 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 226 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 227 00FF00A000FF00A000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 228 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 229 0000000000000000000000000000000000000000000000000000000000000000 230 0000000000000000000000000000000000000000000000000000000000000000 231 0000000000000000000000000000000000000000000000000000000000000000 232 0000000000000000000000A000FF00A000FF00A000FF00A000FF00A000FF00A0 233 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 234 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 235 00FF00A000FF00A000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 236 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 237 0000000000000000000000000000000000000000000000000000000000000000 238 0000000000000000000000000000000000000000000000000000000000000000 239 0000000000000000000000000000000000000000000000000000000000000000 240 0000000000000000000000A000FF00A000FF00A000FF00A000FF00A000FF00A0 241 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 242 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 243 00FF00A000FF00A000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 244 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 245 0000000000000000000000000000000000000000000000000000000000000000 246 0000000000000000000000000000000000000000000000000000000000000000 247 0000000000000000000000000000000000000000000000000000000000000000 248 0000000000000000000000A000FF00A000FF00A000FF00A000FF00A000FF00A0 249 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 250 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 251 00FF00A000FF00A000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 252 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 253 0000000000000000000000000000000000000000000000000000000000000000 254 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 255 00FF00FF00FF00FF00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 256 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 257 00FF00A000FF00A000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF 258 FFFF00FFFFFF00FFFFFF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 259 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 260 00FF00A000FF00A000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 261 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 262 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 263 00FF00FF00FF00FF00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 264 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 265 00FF00A000FF00A000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF 266 FFFF00FFFFFF00FFFFFF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 267 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 268 00FF00A000FF00A000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 269 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 270 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 271 00FF00FF00FF00FF00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 272 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 273 00FF00A000FF00A000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF 274 FFFF00FFFFFF00FFFFFF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 275 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 276 00FF00A000FF00A000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 277 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 278 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 279 00FF00FF00FF00FF00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 280 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 281 00FF00A000FF00A000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF 282 FFFF00FFFFFF00FFFFFF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 283 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 284 00FF00A000FF00A000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 285 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 286 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 287 00FF00FF00FF00FF00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 288 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 289 00FF00A000FF00A000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF 290 FFFF00FFFFFF00FFFFFF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 291 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 292 00FF00A000FF00A000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 293 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 294 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 295 00FF00FF00FF00FF00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 296 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 297 00FF00A000FF00A000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF 298 FFFF00FFFFFF00FFFFFF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 299 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 300 00FF00A000FF00A000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 301 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 302 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 303 00FF00FF00FF00FF00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 304 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 305 00FF00A000FF00A000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF 306 FFFF00FFFFFF00FFFFFF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 307 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 308 00FF00A000FF00A000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 309 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 310 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 311 00FF00FF00FF00FF00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 312 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 313 00FF00A000FF00A000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF 314 FFFF00FFFFFF00FFFFFF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 315 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 316 00FF00A000FF00A000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 317 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 318 0000000000000000000000000000000000000000000000000000000000000000 319 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 320 00FF00FF00FF00FF00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 321 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 322 00FF00A000FF00A000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF 323 FFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000000000 324 0000000000000000000000000000000000000000000000000000000000000000 325 0000000000000000000000000000000000000000000000000000000000000000 326 0000000000000000000000000000000000000000000000000000000000000000 327 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 328 00FF00FF00FF00FF00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 329 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 330 00FF00A000FF00A000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF 331 FFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000000000 332 0000000000000000000000000000000000000000000000000000000000000000 333 0000000000000000000000000000000000000000000000000000000000000000 334 0000000000000000000000000000000000000000000000000000000000000000 335 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 336 00FF00FF00FF00FF00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 337 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 338 00FF00A000FF00A000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF 339 FFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000000000 340 0000000000000000000000000000000000000000000000000000000000000000 341 0000000000000000000000000000000000000000000000000000000000000000 342 0000000000000000000000000000000000000000000000000000000000000000 343 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 344 00FF00FF00FF00FF00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 345 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 346 00FF00A000FF00A000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF 347 FFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000000000 348 0000000000000000000000000000000000000000000000000000000000000000 349 0000000000000000000000000000000000000000000000000000000000000000 350 0000000000000000000000000000000000000000000000000000000000000000 351 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 352 00FF00FF00FF00FF00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 353 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 354 00FF00A000FF00A000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF 355 FFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000000000 356 0000000000000000000000000000000000000000000000000000000000000000 357 0000000000000000000000000000000000000000000000000000000000000000 358 0000000000000000000000000000000000000000000000000000000000000000 359 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 360 00FF00FF00FF00FF00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 361 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 362 00FF00A000FF00A000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF 363 FFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000000000 364 0000000000000000000000000000000000000000000000000000000000000000 365 0000000000000000000000000000000000000000000000000000000000000000 366 0000000000000000000000000000000000000000000000000000000000000000 367 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 368 00FF00FF00FF00FF00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 369 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 370 00FF00A000FF00A000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF 371 FFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000000000 372 0000000000000000000000000000000000000000000000000000000000000000 373 0000000000000000000000000000000000000000000000000000000000000000 374 0000000000000000000000000000000000000000000000000000000000000000 375 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 376 00FF00FF00FF00FF00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 377 00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 378 00FF00A000FF00A000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF 379 FFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000000000 380 0000000000000000000000000000000000000000000000000000000000000000 381 0000000000000000000000000000000000000000000000000000000000000000 382 0000000000000000000000000000000000000000000000000000000000000000 383 0000000000000000000000000000000000000000000000000000000000000000 384 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 385 00FF00FF00FF00FF00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 386 00FF00A000FF00A000FF00000000000000000000000000000000000000000000 387 0000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF 388 FFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000000000 389 0000000000000000000000000000000000000000000000000000000000000000 390 0000000000000000000000000000000000000000000000000000000000000000 391 0000000000000000000000000000000000000000000000000000000000000000 392 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 393 00FF00FF00FF00FF00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 394 00FF00A000FF00A000FF00000000000000000000000000000000000000000000 395 0000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF 396 FFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000000000 397 0000000000000000000000000000000000000000000000000000000000000000 398 0000000000000000000000000000000000000000000000000000000000000000 399 0000000000000000000000000000000000000000000000000000000000000000 400 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 401 00FF00FF00FF00FF00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 402 00FF00A000FF00A000FF00000000000000000000000000000000000000000000 403 0000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF 404 FFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000000000 405 0000000000000000000000000000000000000000000000000000000000000000 406 0000000000000000000000000000000000000000000000000000000000000000 407 0000000000000000000000000000000000000000000000000000000000000000 408 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 409 00FF00FF00FF00FF00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 410 00FF00A000FF00A000FF00000000000000000000000000000000000000000000 411 0000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF 412 FFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000000000 413 0000000000000000000000000000000000000000000000000000000000000000 414 0000000000000000000000000000000000000000000000000000000000000000 415 0000000000000000000000000000000000000000000000000000000000000000 416 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 417 00FF00FF00FF00FF00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 418 00FF00A000FF00A000FF00000000000000000000000000000000000000000000 419 0000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF 420 FFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000000000 421 0000000000000000000000000000000000000000000000000000000000000000 422 0000000000000000000000000000000000000000000000000000000000000000 423 0000000000000000000000000000000000000000000000000000000000000000 424 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 425 00FF00FF00FF00FF00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 426 00FF00A000FF00A000FF00000000000000000000000000000000000000000000 427 0000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF 428 FFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000000000 429 0000000000000000000000000000000000000000000000000000000000000000 430 0000000000000000000000000000000000000000000000000000000000000000 431 0000000000000000000000000000000000000000000000000000000000000000 432 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 433 00FF00FF00FF00FF00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 434 00FF00A000FF00A000FF00000000000000000000000000000000000000000000 435 0000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF 436 FFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000000000 437 0000000000000000000000000000000000000000000000000000000000000000 438 0000000000000000000000000000000000000000000000000000000000000000 439 0000000000000000000000000000000000000000000000000000000000000000 440 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 441 00FF00FF00FF00FF00FF00A000FF00A000FF00A000FF00A000FF00A000FF00A0 442 00FF00A000FF00A000FF00000000000000000000000000000000000000000000 443 0000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF 444 FFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000000000 445 0000000000000000000000000000000000000000000000000000000000000000 446 0000000000000000000000000000000000000000000000000000000000000000 447 0000000000000000000000000000000000000000000000000000000000000000 448 0000000000000000000000000000000000000000000000000000000000000000 449 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 450 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 451 0000000000000000000000000000000000000000000000000000000000000000 452 0000000000000000000000000000000000000000000000000000000000000000 453 0000000000000000000000000000000000000000000000000000000000000000 454 0000000000000000000000000000000000000000000000000000000000000000 455 0000000000000000000000000000000000000000000000000000000000000000 456 0000000000000000000000000000000000000000000000000000000000000000 457 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 458 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 459 0000000000000000000000000000000000000000000000000000000000000000 460 0000000000000000000000000000000000000000000000000000000000000000 461 0000000000000000000000000000000000000000000000000000000000000000 462 0000000000000000000000000000000000000000000000000000000000000000 463 0000000000000000000000000000000000000000000000000000000000000000 464 0000000000000000000000000000000000000000000000000000000000000000 465 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 466 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 467 0000000000000000000000000000000000000000000000000000000000000000 468 0000000000000000000000000000000000000000000000000000000000000000 469 0000000000000000000000000000000000000000000000000000000000000000 470 0000000000000000000000000000000000000000000000000000000000000000 471 0000000000000000000000000000000000000000000000000000000000000000 472 0000000000000000000000000000000000000000000000000000000000000000 473 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 474 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 475 0000000000000000000000000000000000000000000000000000000000000000 476 0000000000000000000000000000000000000000000000000000000000000000 477 0000000000000000000000000000000000000000000000000000000000000000 478 0000000000000000000000000000000000000000000000000000000000000000 479 0000000000000000000000000000000000000000000000000000000000000000 480 0000000000000000000000000000000000000000000000000000000000000000 481 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 482 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 483 0000000000000000000000000000000000000000000000000000000000000000 484 0000000000000000000000000000000000000000000000000000000000000000 485 0000000000000000000000000000000000000000000000000000000000000000 486 0000000000000000000000000000000000000000000000000000000000000000 487 0000000000000000000000000000000000000000000000000000000000000000 488 0000000000000000000000000000000000000000000000000000000000000000 489 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 490 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 491 0000000000000000000000000000000000000000000000000000000000000000 492 0000000000000000000000000000000000000000000000000000000000000000 493 0000000000000000000000000000000000000000000000000000000000000000 494 0000000000000000000000000000000000000000000000000000000000000000 495 0000000000000000000000000000000000000000000000000000000000000000 496 0000000000000000000000000000000000000000000000000000000000000000 497 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 498 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 499 0000000000000000000000000000000000000000000000000000000000000000 500 0000000000000000000000000000000000000000000000000000000000000000 501 0000000000000000000000000000000000000000000000000000000000000000 502 0000000000000000000000000000000000000000000000000000000000000000 503 0000000000000000000000000000000000000000000000000000000000000000 504 0000000000000000000000000000000000000000000000000000000000000000 505 0000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 506 00FF00FF00FF00FF00FF00000000000000000000000000000000000000000000 507 0000000000000000000000000000000000000000000000000000000000000000 508 0000000000000000000000000000000000000000000000000000000000000000 509 0000000000000000000000000000000000000000000000000000000000000000 510 0000000000000000000000000000000000000000000000000000000000000000 511 0000000000000000000000000000000000000000000000000000000000000000 512 0000000000000000000000000000000000000000000000000000000000000000 513 0000000000000000000000000000000000000000000000000000000000000000 514 0000000000000000000000000000000000000000000000000000000000000000 515 0000000000000000000000000000000000000000000000000000000000000000 516 0000000000000000000000000000000000000000000000000000000000000000 517 0000000000000000000000000000000000000000000000000000000000000000 518 0000000000000000000000000000000000000000000000000000000000000000 519 0000000000000000000000000000000000000000000000000000000000000000 520 0000000000000000000000000000000000000000000000000000000000000000 521 0000000000000000000000000000000000000000000000000000000000000000 522 0000000000000000000000000000000000000000000000000000000000000000 523 0000000000000000000000000000000000000000000000000000000000000000 524 0000000000000000000000000000000000000000000000000000000000000000 525 0000000000000000000000000000000000000000000000000000000000000000 526 0000000000000000000000000000000000000000000000000000000000000000 527 0000000000000000000000000000000000000000000000000000000000000000 528 0000000000000000000000000000000000000000000000000000000000000000 529 0000000000000000000000000000000000000000000000000000000000000000 530 0000000000000000000000000000000000000000000000000000000000000000 531 0000000000000000000000000000000000000000000000000000000000000000 532 0000000000000000000000000000000000000000000000000000000000000000 533 0000000000000000000000000000000000000000000000000000000000000000 534 0000000000000000000000000000000000000000000000000000000000000000 535 0000000000000000000000000000000000000000000000000000000000000000 536 0000000000000000000000000000000000000000000000000000000000000000 537 0000000000000000000000000000000000000000000000000000000000000000 538 0000000000000000000000000000000000000000000000000000000000000000 539 0000000000000000000000000000000000000000000000000000000000000000 540 0000000000000000000000000000000000000000000000000000000000000000 541 0000000000000000000000000000000000000000000000000000 542 } 543 Left = 264 544 Top = 432 29 545 end 30 object CoolTranslator1: TCoolTranslator546 object Translator1: TTranslator 31 547 POFilesFolder = 'Languages' 32 left = 44033 top = 177548 Left = 660 549 Top = 266 34 550 end 35 551 end -
trunk/UCore.pas
r45 r51 6 6 7 7 uses 8 Classes, SysUtils, UTheme, UApplicationInfo, U CoolTranslator;8 Classes, SysUtils, UTheme, UApplicationInfo, UTranslator; 9 9 10 10 type … … 14 14 TCore = class(TDataModule) 15 15 ApplicationInfo: TApplicationInfo; 16 CoolTranslator1: TCoolTranslator;16 Translator1: TTranslator; 17 17 ThemeManager1: TThemeManager; 18 18 private -
trunk/UEngine.pas
r45 r51 6 6 7 7 uses 8 Dialogs, Classes, SysUtils, Graphics, SpecializedMatrix, SpecializedList,8 Dialogs, Classes, SysUtils, Graphics, SpecializedMatrix, 9 9 IntfGraphics, FPImage, LCLType, SpecializedBitmap, GraphType, Math, URectangle, 10 10 Syncobjs, UThreading, Forms, DateUtils, UAudioSystem, XMLConf, DOM, fgl; … … 56 56 StopByDirt: Boolean; 57 57 constructor Create; 58 end; 59 60 TBullets = class(TFPGObjectList<TBullet>) 58 61 end; 59 62 … … 118 121 Keys: TPlayerKeys; 119 122 Tanks: TTanks; 120 Bullets: T ListObject; // TListObject<TBullet>123 Bullets: TBullets; 121 124 LastShootTime: TDateTime; 122 125 LastDigTime: TDateTime; … … 237 240 PlayerPool: TPlayers; 238 241 Players: TPlayers; 239 DigMasks: T ListObject; // TListObject<TMatrixByte>242 DigMasks: TFPGObjectList<TMatrixByte>; 240 243 Lock: TCriticalSection; 241 244 CurrentRound: Integer; … … 279 282 SPlayer = 'Player'; 280 283 281 282 283 284 function SwapBRComponent(Value: Cardinal): Cardinal; inline; 284 285 begin … … 307 308 for I := 0 to Count - 1 do begin 308 309 Items[I] := TTank.Create; 309 TTank(Items[I]).Assign(TTank(Source.Items[I]));310 Items[I].Assign(Source.Items[I]); 310 311 end; 311 312 end; … … 326 327 while Count > Players.Count do Delete(Count - 1); 327 328 for I := 0 to Count - 1 do 328 TPlayer(Items[I]).Assign(TPlayer(Players[I]));329 Items[I].Assign(Players[I]); 329 330 end; 330 331 … … 335 336 Config.SetValue(DOMString(Path + '/Count'), Count); 336 337 for I := 0 to Count - 1 do 337 TPlayer(Items[I]).SaveConfig(Config, Path + '/Player' + IntToStr(I));338 Items[I].SaveConfig(Config, Path + '/Player' + IntToStr(I)); 338 339 end; 339 340 … … 347 348 while Count < NewCount do Add(TPlayer.Create); 348 349 for I := 0 to Count - 1 do begin 349 Items[I] := TPlayer.Create; 350 TPlayer(Items[I]).Engine := Engine; 351 TPlayer(Items[I]).Id := I; 352 TPlayer(Items[I]).LoadConfig(Config, Path + '/Player' + IntToStr(I)); 350 Items[I].Engine := Engine; 351 Items[I].Id := I; 352 Items[I].LoadConfig(Config, Path + '/Player' + IntToStr(I)); 353 353 end; 354 354 end; … … 410 410 FreeAndNil(Mask); 411 411 FreeAndNil(Image); 412 inherited Destroy;412 inherited; 413 413 end; 414 414 … … 574 574 FreeAndNil(Surface); 575 575 FreeAndNil(Matters); 576 inherited Destroy;576 inherited; 577 577 end; 578 578 … … 586 586 P: Integer; 587 587 begin 588 Bitmap.BeginUpdate; 588 589 try 589 Bitmap.BeginUpdate;590 590 RawImage := Bitmap.RawImage; 591 591 PixelRowPtr := PInteger(RawImage.Data); … … 594 594 PixelPtr := PixelRowPtr; 595 595 for X := 0 to Bitmap.Width - 1 do begin 596 P := TMatter(Matters[Surface.ItemsXY[Trunc(X / Bitmap.Width * Surface.Count.X),597 Trunc(Y / Bitmap.Height * Surface.Count.Y)]] ).Color;596 P := Matters[Surface.ItemsXY[Trunc(X / Bitmap.Width * Surface.Count.X), 597 Trunc(Y / Bitmap.Height * Surface.Count.Y)]].Color; 598 598 PixelPtr^ := SwapBRComponent(P); 599 599 Inc(PByte(PixelPtr), BytePerPixel); … … 753 753 // Bullet movement 754 754 for I := Bullets.Count - 1 downto 0 do 755 with TBullet(Bullets[I]), Engine.World.Surface do begin755 with Bullets[I], Engine.World.Surface do begin 756 756 Pos := Point(Trunc(Position.X), Trunc(Position.Y)); 757 757 if (ItemsXY[LastPos.X, LastPos.Y] = Byte(miBullet1)) or … … 787 787 end else begin 788 788 for P := 0 to Engine.Players.Count - 1 do 789 with TPlayer(Engine.Players[P])do789 with Engine.Players[P] do 790 790 if (Self.Id <> P) and 791 ( TMatter(Engine.World.Matters[ItemsXY[Pos.X, Pos.Y]]).Kind = mkTankBody) and792 ( TMatter(Engine.World.Matters[ItemsXY[Pos.X, Pos.Y]]).Player = P) then791 (Engine.World.Matters[ItemsXY[Pos.X, Pos.Y]].Kind = mkTankBody) and 792 (Engine.World.Matters[ItemsXY[Pos.X, Pos.Y]].Player = P) then 793 793 Shield := Shield - 1 / ShieldSteps; 794 794 if StopByDirt then Explosion(LastPos, BulletExplosionRange); … … 820 820 XX, YY: Integer; 821 821 I: Integer; 822 B: TColor; 822 823 begin 823 824 with Engine.FBitmapLower do begin 824 // Brush.Color := SurfaceMatterColors[smRock]; 825 // FillRect(ScreenFrame); 825 //Brush.Color := SurfaceMatterColors[smRock]; 826 //FillRect(ScreenFrame); 827 for Y := ScreenFrame.Top to ScreenFrame.Bottom - 1 do 828 for X := ScreenFrame.Left to ScreenFrame.Right - 1 do begin 829 ItemsXY[X, Y] := 0; 830 end; 831 826 832 Fill(CreateIndex(ScreenFrame.Left, ScreenFrame.Top), 827 CreateIndex(ScreenFrame.Right, ScreenFrame.Bottom), 828 TMatter(Engine.World.Matters[Integer(miRock)]).Color); 833 CreateIndex(ScreenFrame.Width, ScreenFrame.Height), 834 Engine.World.Matters[Integer(miRock)].Color); 835 829 836 830 837 with Engine.World do … … 833 840 XX := X - ScreenFrame.Left - ((ScreenFrame.Right - ScreenFrame.Left) div 2) + Position.X; 834 841 YY := Y - ScreenFrame.Top - ((ScreenFrame.Bottom - ScreenFrame.Top) div 2) + Position.Y; 835 if (YY >= 0) and (YY < Surface.Count.Y) and (XX >= 0) and (XX < Surface.Count.X) then 836 ItemsXY[X, Y] := TMatter(Engine.World.Matters[Surface.ItemsXY[XX, YY]]).Color; 842 if (YY >= 0) and (YY < Surface.Count.Y) and 843 (XX >= 0) and (XX < Surface.Count.X) then begin 844 B := Engine.World.Matters[Surface.ItemsXY[XX, YY]].Color; 845 ItemsXY[X, Y] := B; 846 end; 837 847 end; 838 848 … … 841 851 if Energy < I / (ScreenFrame.Width - 2) then 842 852 ItemsXY[ScreenFrame.Left + I, ScreenFrame.Bottom - 2] := clBlack 843 else ItemsXY[ScreenFrame.Left + I, ScreenFrame.Bottom - 2] := clYellow;853 else ItemsXY[ScreenFrame.Left + I, ScreenFrame.Bottom - 2] := 0; //clYellow; 844 854 845 855 // Shield bar … … 851 861 for I := ScreenFrame.Left to ScreenFrame.Right - 1 do 852 862 ItemsXY[I, 0] := $010101 * I; 863 864 for Y := ScreenFrame.Top to ScreenFrame.Bottom - 1 do 865 for X := ScreenFrame.Left to ScreenFrame.Right - 1 do begin 866 ItemsXY[X, Y] := 0; 867 end; 853 868 end; 854 869 end; … … 1022 1037 1023 1038 NewTank := TTank.Create; 1024 NewTank.Image.Assign(T Tank(Tanks[0]).Image);1039 NewTank.Image.Assign(Tanks[0].Image); 1025 1040 NewTank.Image.Reverse; 1026 1041 NewTank.Image.ReverseHorizontal; … … 1028 1043 1029 1044 NewTank := TTank.Create; 1030 NewTank.Image.Assign(T Tank(Tanks[1]).Image);1045 NewTank.Image.Assign(Tanks[1].Image); 1031 1046 NewTank.Image.ReverseVertical; 1032 1047 Tanks.Add(NewTank); 1033 1048 1034 1049 NewTank := TTank.Create; 1035 NewTank.Image.Assign(T Tank(Tanks[0]).Image);1050 NewTank.Image.Assign(Tanks[0].Image); 1036 1051 NewTank.Image.ReverseVertical; 1037 1052 Tanks.Add(NewTank); 1038 1053 1039 1054 NewTank := TTank.Create; 1040 NewTank.Image.Assign(T Tank(Tanks[1]).Image);1055 NewTank.Image.Assign(Tanks[1].Image); 1041 1056 NewTank.Image.ReverseVertical; 1042 1057 NewTank.Image.ReverseHorizontal; … … 1044 1059 1045 1060 NewTank := TTank.Create; 1046 NewTank.Image.Assign(T Tank(Tanks[0]).Image);1061 NewTank.Image.Assign(Tanks[0].Image); 1047 1062 NewTank.Image.Reverse; 1048 1063 Tanks.Add(NewTank); 1049 1064 1050 1065 NewTank := TTank.Create; 1051 NewTank.Image.Assign(T Tank(Tanks[1]).Image);1066 NewTank.Image.Assign(Tanks[1].Image); 1052 1067 NewTank.Image.ReverseHorizontal; 1053 1068 Tanks.Add(NewTank); 1054 1069 1055 1070 for I := 0 to Tanks.Count - 1 do 1056 with T Tank(Tanks[I])do begin1071 with Tanks[I] do begin 1057 1072 Mask.Assign(Image); 1058 1073 for Y := 0 to Mask.Count.Y - 1 do … … 1065 1080 begin 1066 1081 Tanks := TTanks.Create; 1067 Bullets := T ListObject.Create;1082 Bullets := TBullets.Create; 1068 1083 House := TRectangle.Create; 1069 1084 ScreenFrame := TRectangle.Create; … … 1076 1091 FreeAndNil(Bullets); 1077 1092 FreeAndNil(Tanks); 1078 inherited Destroy;1093 inherited; 1079 1094 end; 1080 1095 … … 1168 1183 Result := False; 1169 1184 for I := 0 to Players.Count - 1 do 1170 if TPlayer(Players[I]).House.IsInside(Pos) then begin1185 if Players[I].House.IsInside(Pos) then begin 1171 1186 Result := True; 1172 1187 end; … … 1328 1343 1329 1344 NewMask := TMatrixByte.Create; 1330 NewMask.Assign( TMatrixByte(DigMasks[0]));1345 NewMask.Assign(DigMasks[0]); 1331 1346 NewMask.Reverse; 1332 1347 NewMask.ReverseHorizontal; … … 1334 1349 1335 1350 NewMask := TMatrixByte.Create; 1336 NewMask.Assign( TMatrixByte(DigMasks[1]));1351 NewMask.Assign(DigMasks[1]); 1337 1352 NewMask.ReverseVertical; 1338 1353 DigMasks.Add(NewMask); 1339 1354 1340 1355 NewMask := TMatrixByte.Create; 1341 NewMask.Assign( TMatrixByte(DigMasks[0]));1356 NewMask.Assign(DigMasks[0]); 1342 1357 NewMask.ReverseVertical; 1343 1358 DigMasks.Add(NewMask); 1344 1359 1345 1360 NewMask := TMatrixByte.Create; 1346 NewMask.Assign( TMatrixByte(DigMasks[1]));1361 NewMask.Assign(DigMasks[1]); 1347 1362 NewMask.ReverseVertical; 1348 1363 NewMask.ReverseHorizontal; … … 1350 1365 1351 1366 NewMask := TMatrixByte.Create; 1352 NewMask.Assign( TMatrixByte(DigMasks[0]));1367 NewMask.Assign(DigMasks[0]); 1353 1368 NewMask.Reverse; 1354 1369 DigMasks.Add(NewMask); 1355 1370 1356 1371 NewMask := TMatrixByte.Create; 1357 NewMask.Assign( TMatrixByte(DigMasks[1]));1372 NewMask.Assign(DigMasks[1]); 1358 1373 NewMask.ReverseHorizontal; 1359 1374 DigMasks.Add(NewMask); … … 1440 1455 end; 1441 1456 for I := 0 to PlayerPool.Count - 1 do 1442 with TPlayer(PlayerPool[I])do begin1457 with PlayerPool[I] do begin 1443 1458 Engine := Self; 1444 1459 Id := I; 1445 1460 InitTanks; 1446 1461 Name := SPlayer + ' ' + IntToStr(I + 1); 1447 if I < 8then Enabled := True;1462 if I < 2 then Enabled := True; 1448 1463 end; 1449 1464 end; … … 1456 1471 Players.Clear; 1457 1472 for I := 0 to PlayerPool.Count - 1 do 1458 with TPlayer(PlayerPool[I])do1473 with PlayerPool[I] do 1459 1474 if Enabled then begin 1460 1475 NewPlayer := TPlayer.Create; 1461 NewPlayer.Assign( TPlayer(PlayerPool[I]));1476 NewPlayer.Assign(PlayerPool[I]); 1462 1477 Players.Add(NewPlayer); 1463 1478 Score := 0; … … 1476 1491 AliveCount := 0; 1477 1492 for I := 0 to Players.Count - 1 do 1478 with TPlayer(Players[I])do1493 with Players[I] do 1479 1494 if not Exploded then Inc(AliveCount); 1480 1495 if AliveCount <= 1 then begin 1481 1496 for I := 0 to Players.Count - 1 do 1482 with TPlayer(Players[I])do1497 with Players[I] do 1483 1498 if not Exploded then Inc(Score); 1484 1499 if CurrentRound < MaxRound then … … 1507 1522 PlayerFrameHeight * VertFrameCount); 1508 1523 for I := 0 to Players.Count - 1 do begin 1509 TPlayer(Players[I]).ScreenFrame.AsTRect := Rect(1524 Players[I].ScreenFrame.AsTRect := Rect( 1510 1525 (I mod HorizFrameCount) * (FBitmapLower.Count.X div HorizFrameCount) + 1, 1511 1526 (I div HorizFrameCount) * (FBitmapLower.Count.Y div VertFrameCount) + 1, … … 1538 1553 AudioExplode.Open; 1539 1554 InitPlayerPool; 1540 DigMasks := T ListObject.Create;1555 DigMasks := TFPGObjectList<TMatrixByte>.Create; 1541 1556 InitDigMasks; 1542 1557 Redraw; … … 1557 1572 FreeAndNil(AudioShot); 1558 1573 FreeAndNil(AudioExplode); 1559 inherited Destroy;1574 inherited; 1560 1575 end; 1561 1576 … … 1564 1579 I: Integer; 1565 1580 begin 1581 Lock.Acquire; 1566 1582 try 1567 Lock.Acquire;1568 1583 for I := 0 to Players.Count - 1 do begin 1569 TPlayer(Players[I]).Control;1570 TPlayer(Players[I]).Tick;1584 Players[I].Control; 1585 Players[I].Tick; 1571 1586 end; 1572 1587 finally … … 1583 1598 DrawStart := NowPrecise; 1584 1599 FRedrawPending := False; 1600 Lock.Acquire; 1585 1601 try 1586 Lock.Acquire;1587 1602 //if ClearBackground then FBitmapLower.FillAll(clNavy); 1588 1603 for I := 0 to Players.Count - 1 do 1589 1604 if Players[I].Enabled then begin 1590 TPlayer(Players[I]).Paint;1605 Players[I].Paint; 1591 1606 end; 1592 1607 finally … … 1617 1632 1618 1633 for I := 0 to Players.Count - 1 do 1619 with TPlayer(Players[I]) do begin 1620 Init; 1621 end; 1634 Players[I].Init; 1622 1635 ClearBackground := True; 1623 1636 Redraw; -
trunk/tunneler.lpi
r47 r51 78 78 </Modes> 79 79 </RunParams> 80 <RequiredPackages Count=" 6">80 <RequiredPackages Count="5"> 81 81 <Item1> 82 82 <PackageName Value="FCL"/> … … 91 91 </Item3> 92 92 <Item4> 93 <PackageName Value=" CoolTranslator"/>94 <DefaultFilename Value="Packages/ CoolTranslator/CoolTranslator.lpk" Prefer="True"/>93 <PackageName Value="TemplateGenerics"/> 94 <DefaultFilename Value="Packages/TemplateGenerics/TemplateGenerics.lpk" Prefer="True"/> 95 95 </Item4> 96 96 <Item5> 97 <PackageName Value="TemplateGenerics"/> 98 <DefaultFilename Value="Packages/TemplateGenerics/TemplateGenerics.lpk" Prefer="True"/> 97 <PackageName Value="LCL"/> 99 98 </Item5> 100 <Item6>101 <PackageName Value="LCL"/>102 </Item6>103 99 </RequiredPackages> 104 <Units Count="1 1">100 <Units Count="10"> 105 101 <Unit0> 106 102 <Filename Value="tunneler.lpr"/> … … 155 151 </Unit8> 156 152 <Unit9> 157 <Filename Value=" Forms/UFormAbout.pas"/>158 <IsPartOfProject Value="True"/> 159 <ComponentName Value=" FormAbout"/>160 <HasResources Value="True"/> 161 <ResourceBaseClass Value=" Form"/>153 <Filename Value="UCore.pas"/> 154 <IsPartOfProject Value="True"/> 155 <ComponentName Value="Core"/> 156 <HasResources Value="True"/> 157 <ResourceBaseClass Value="DataModule"/> 162 158 </Unit9> 163 <Unit10>164 <Filename Value="UCore.pas"/>165 <IsPartOfProject Value="True"/>166 <ComponentName Value="Core"/>167 <HasResources Value="True"/>168 <ResourceBaseClass Value="DataModule"/>169 </Unit10>170 159 </Units> 171 160 </ProjectOptions> -
trunk/tunneler.lpr
r47 r51 4 4 5 5 uses 6 {$DEFINE UseCThreads} 7 {$IFDEF UNIX}{$IFDEF UseCThreads} 6 {$IFDEF UNIX} 8 7 cthreads, clocale, 9 {$ENDIF} {$ENDIF}8 {$ENDIF} 10 9 Interfaces, // this includes the LCL widgetset 11 Forms, TemplateGenerics, CoolTranslator,UPlatform, FileUtil, SysUtils,10 Forms, TemplateGenerics, UPlatform, FileUtil, SysUtils, 12 11 Common, 13 12 UFormNewGame, UMainForm, UMapForm, UGameResultForm, UCore … … 16 15 {$R *.res} 17 16 18 {$ IFDEF DEBUG}17 {$if declared(UseHeapTrace)} 19 18 const 20 19 HeapTraceLog = 'heaptrclog.trc'; … … 22 21 23 22 begin 24 {$ IFDEF DEBUG}23 {$if declared(UseHeapTrace)} 25 24 // Heap trace 26 25 DeleteFile(ExtractFilePath(ParamStr(0)) + HeapTraceLog);
Note:
See TracChangeset
for help on using the changeset viewer.