summaryrefslogtreecommitdiff
path: root/examples/apps
diff options
context:
space:
mode:
authorGraeme Geldenhuys <graeme@mastermaths.co.za>2010-08-02 15:53:38 +0200
committerGraeme Geldenhuys <graeme@mastermaths.co.za>2010-08-02 15:53:38 +0200
commit1bb17dd1014dfa085ce63480966344e6cd0418fc (patch)
tree2d9fa7da1636356a710687ee95be642ab407e2cd /examples/apps
parent6e874c60c647acb0b78ee259deef0d90f0de5ad2 (diff)
downloadfpGUI-1bb17dd1014dfa085ce63480966344e6cd0418fc.tar.xz
Debug Server: New sample application that works with FPC's dbugintf unit.
A nice application that displays debug messages sent via applications. Very handy for debugging CGI applications too.
Diffstat (limited to 'examples/apps')
-rw-r--r--examples/apps/debugserver/extrafpc.cfg6
-rw-r--r--examples/apps/debugserver/fpgDebugServer.lpi94
-rw-r--r--examples/apps/debugserver/fpgDebugServer.lpr30
-rw-r--r--examples/apps/debugserver/frm_main.pas467
-rw-r--r--examples/apps/debugserver/images.inc208
-rw-r--r--examples/apps/debugserver/images/clean.bmpbin0 -> 822 bytes
-rw-r--r--examples/apps/debugserver/images/pause.bmpbin0 -> 822 bytes
-rw-r--r--examples/apps/debugserver/images/run.bmpbin0 -> 822 bytes
-rw-r--r--examples/apps/debugserver/images/state_error.bmpbin0 -> 822 bytes
-rw-r--r--examples/apps/debugserver/images/state_info.bmpbin0 -> 822 bytes
-rw-r--r--examples/apps/debugserver/images/state_lightbulb.bmpbin0 -> 822 bytes
-rw-r--r--examples/apps/debugserver/images/state_lightbulb_off.bmpbin0 -> 822 bytes
-rw-r--r--examples/apps/debugserver/images/state_warning.bmpbin0 -> 822 bytes
-rw-r--r--examples/apps/debugserver/images/status.bmpbin0 -> 5174 bytes
-rw-r--r--examples/apps/debugserver/images/stop.bmpbin0 -> 822 bytes
-rw-r--r--examples/apps/debugserver/state_images.inc260
16 files changed, 1065 insertions, 0 deletions
diff --git a/examples/apps/debugserver/extrafpc.cfg b/examples/apps/debugserver/extrafpc.cfg
new file mode 100644
index 00000000..bf32f456
--- /dev/null
+++ b/examples/apps/debugserver/extrafpc.cfg
@@ -0,0 +1,6 @@
+-FUunits
+-Fu../../../lib/$fpctarget
+-Fi.
+-Xs
+-XX
+-CX
diff --git a/examples/apps/debugserver/fpgDebugServer.lpi b/examples/apps/debugserver/fpgDebugServer.lpi
new file mode 100644
index 00000000..9dff3598
--- /dev/null
+++ b/examples/apps/debugserver/fpgDebugServer.lpi
@@ -0,0 +1,94 @@
+<?xml version="1.0"?>
+<CONFIG>
+ <ProjectOptions>
+ <Version Value="8"/>
+ <General>
+ <Flags>
+ <SaveOnlyProjectUnits Value="True"/>
+ <MainUnitHasCreateFormStatements Value="False"/>
+ <MainUnitHasTitleStatement Value="False"/>
+ <UseDefaultCompilerOptions Value="True"/>
+ </Flags>
+ <SessionStorage Value="InIDEConfig"/>
+ <MainUnit Value="0"/>
+ <TargetFileExt Value=""/>
+ <UseAppBundle Value="False"/>
+ <ResourceType Value="res"/>
+ </General>
+ <VersionInfo>
+ <Language Value=""/>
+ <CharSet Value=""/>
+ <StringTable Comments="" CompanyName="" FileDescription="" FileVersion="" InternalName="" LegalCopyright="" LegalTrademarks="" OriginalFilename="" ProductName="" ProductVersion=""/>
+ </VersionInfo>
+ <PublishOptions>
+ <Version Value="2"/>
+ <IgnoreBinaries Value="False"/>
+ <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+ <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
+ </PublishOptions>
+ <RunParams>
+ <local>
+ <FormatVersion Value="1"/>
+ <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
+ </local>
+ </RunParams>
+ <RequiredPackages Count="1">
+ <Item1>
+ <PackageName Value="fpgui_toolkit"/>
+ </Item1>
+ </RequiredPackages>
+ <Units Count="2">
+ <Unit0>
+ <Filename Value="fpgDebugServer.lpr"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="fpgDebugServer"/>
+ </Unit0>
+ <Unit1>
+ <Filename Value="frm_main.pas"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="frm_main"/>
+ </Unit1>
+ </Units>
+ </ProjectOptions>
+ <CompilerOptions>
+ <Version Value="9"/>
+ <Target>
+ <Filename Value="fpgDebugServer"/>
+ </Target>
+ <SearchPaths>
+ <UnitOutputDirectory Value="units/$(TargetCPU)-$(TargetOS)"/>
+ </SearchPaths>
+ <Parsing>
+ <SyntaxOptions>
+ <AllowLabel Value="False"/>
+ <CPPInline Value="False"/>
+ </SyntaxOptions>
+ </Parsing>
+ <Linking>
+ <Options>
+ <Win32>
+ <GraphicApplication Value="True"/>
+ </Win32>
+ </Options>
+ </Linking>
+ <Other>
+ <CompilerMessages>
+ <UseMsgFile Value="True"/>
+ </CompilerMessages>
+ <CompilerPath Value="$(CompPath)"/>
+ </Other>
+ </CompilerOptions>
+ <Debugging>
+ <Exceptions Count="3">
+ <Item1>
+ <Name Value="EAbort"/>
+ </Item1>
+ <Item2>
+ <Name Value="ECodetoolError"/>
+ </Item2>
+ <Item3>
+ <Name Value="EFOpenError"/>
+ </Item3>
+ </Exceptions>
+ </Debugging>
+</CONFIG>
diff --git a/examples/apps/debugserver/fpgDebugServer.lpr b/examples/apps/debugserver/fpgDebugServer.lpr
new file mode 100644
index 00000000..eaf9492b
--- /dev/null
+++ b/examples/apps/debugserver/fpgDebugServer.lpr
@@ -0,0 +1,30 @@
+program fpgDebugServer;
+
+{$mode objfpc}{$H+}
+
+uses
+ {$IFDEF UNIX}{$IFDEF UseCThreads}
+ cthreads,
+ {$ENDIF}{$ENDIF}
+ Classes
+ ,fpg_main, frm_main
+ ;
+
+procedure MainProc;
+var
+ frm: TMainForm;
+begin
+ fpgApplication.Initialize;
+ frm := TMainForm.Create(nil);
+ try
+ frm.Show;
+ fpgApplication.Run;
+ finally
+ frm.Free;
+ end;
+end;
+
+begin
+ MainProc;
+end.
+
diff --git a/examples/apps/debugserver/frm_main.pas b/examples/apps/debugserver/frm_main.pas
new file mode 100644
index 00000000..e0da08a7
--- /dev/null
+++ b/examples/apps/debugserver/frm_main.pas
@@ -0,0 +1,467 @@
+{
+ fpGUI - Free Pascal GUI Toolkit
+
+ Copyright (C) 2006 - 2010 See the file AUTHORS.txt, included in this
+ distribution, for details of the copyright.
+
+ See the file COPYING.modifiedLGPL, included in this distribution,
+ for details about redistributing fpGUI.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ Description:
+ This is the server part to a standard FPC unit - dbugintf. This unit
+ offers a simple API to send messages to a debug server (using
+ SimpleIPC), modeled after the GExperts GDebug tool for Delphi, with
+ some minor enhancements. This is a great way to debug CGI apps on a
+ server as well.
+
+ NOTE: you would normally wrap the SendXXX methods with {$ifdef debug} so
+ the code can be excluded from a final released product (without debug
+ information). But this is obviously for you do decide.
+
+ Typical usage is as follows:
+
+ uses
+ dbugintf, sysutils;
+
+ procedure BackupFile(FN : String);
+ var
+ BFN: String;
+ begin
+ SendMethodEnter('BackupFile');
+ BFN := FN + '.bak';
+ SendDebug(Format('backup file "%s" exists, deleting',[BFN]));
+ SendDebug(Format('Backing up "%s" to "%s"',[FN,BFN]));
+ SendMethodExit('BackupFile');
+ end;
+
+ procedure SaveToFile(FN : String);
+ begin
+ SendMethodEnter('SaveToFile');
+ BackupFile(FN);
+ SendDebug('Saving to file '+FN);
+ SendMethodExit('SaveToFile');
+ end;
+
+
+ Available SendXXX methods from the dbugintf unit are:
+
+ procedure SendBoolean(const Identifier: string; const Value: Boolean);
+ procedure SendDateTime(const Identifier: string; const Value: TDateTime);
+ procedure SendInteger(const Identifier: string; const Value: Integer; HexNotation: Boolean = False);
+ procedure SendPointer(const Identifier: string; const Value: Pointer);
+ procedure SendDebugEx(const Msg: string; MType: TDebugLevel);
+ procedure SendDebug(const Msg: string);
+ procedure SendMethodEnter(const MethodName: string);
+ procedure SendMethodExit(const MethodName: string);
+ procedure SendSeparator;
+ procedure SendDebugFmt(const Msg: string; const Args: array of const);
+ procedure SendDebugFmtEx(const Msg: string; const Args: array of const; MType: TDebugLevel);
+
+}
+unit frm_main;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ SysUtils
+ ,Classes
+ ,fpg_base
+ ,fpg_main
+ ,fpg_form
+ ,fpg_button
+ ,fpg_panel
+ ,fpg_menu
+ ,fpg_basegrid
+ ,fpg_grid
+ ,simpleipc
+ ,dbugmsg
+ ;
+
+type
+ TMainForm = class(TfpgForm)
+ private
+ {@VFD_HEAD_BEGIN: MainForm}
+ MainMenu: TfpgMenuBar;
+ Bevel1: TfpgBevel;
+ grdMessages: TfpgStringGrid;
+ mnuFile: TfpgPopupMenu;
+ mnuEdit: TfpgPopupMenu;
+ mnuHelp: TfpgPopupMenu;
+ btnQuit: TfpgButton;
+ Bevel2: TfpgBevel;
+ btnPause: TfpgButton;
+ btnStart: TfpgButton;
+ btnClear: TfpgButton;
+ {@VFD_HEAD_END: MainForm}
+ FIPCSrv: TSimpleIPCServer;
+ FPaused: Boolean;
+ FAddAtBottom: Boolean;
+ FDiscarded: Integer;
+ FShowOnMessage: Boolean;
+ procedure StartServer;
+ procedure StopServer;
+ procedure CheckMessages(Sender: TObject);
+ procedure CheckDebugMessages;
+ procedure ReadDebugMessage;
+ procedure ShowDebugMessage(const AMsg: TDebugmessage);
+ procedure ShowMessageWindow;
+ procedure miFileQuit(Sender: TObject);
+ procedure miHelpAboutFPGui(Sender: TObject);
+ procedure miHelpProductInformation(Sender: TObject);
+ procedure btnClearClicked(Sender: TObject);
+ procedure btnPauseClicked(Sender: TObject);
+ procedure btnStartClicked(Sender: TObject);
+ procedure GridDrawCell(Sender: TObject; const ARow, ACol: Integer; const ARect: TfpgRect; const AFlags: TfpgGridDrawState; var ADefaultDrawing: boolean);
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure AfterCreate; override;
+ end;
+
+{@VFD_NEWFORM_DECL}
+
+implementation
+
+uses
+ dateutils
+ ,fpg_dialogs
+ ;
+
+
+{$I images.inc}
+{$I state_images.inc}
+
+{@VFD_NEWFORM_IMPL}
+
+procedure TMainForm.btnClearClicked(Sender: TObject);
+begin
+ grdMessages.RowCount := 0;
+end;
+
+procedure TMainForm.btnPauseClicked(Sender: TObject);
+begin
+ FPaused := not FPaused;
+end;
+
+procedure TMainForm.btnStartClicked(Sender: TObject);
+begin
+ if Assigned(FIPCSrv) then
+ Exit;
+ StartServer;
+end;
+
+procedure TMainForm.GridDrawCell(Sender: TObject; const ARow, ACol: Integer;
+ const ARect: TfpgRect; const AFlags: TfpgGridDrawState; var ADefaultDrawing: boolean);
+var
+ img: TfpgImage;
+ i: integer;
+ dx: integer;
+begin
+ if ACol = 0 then
+ begin
+ ADefaultDrawing := False;
+ try
+ i := StrToInt(grdMessages.Cells[ACol, ARow]);
+ case i of
+ -1: img := fpgImages.GetImage('dbs.state.stop');
+ 0: img := fpgImages.GetImage('dbs.state.info');
+ 1: img := fpgImages.GetImage('dbs.state.warning');
+ 2: img := fpgImages.GetImage('dbs.state.error');
+ 3: img := fpgImages.GetImage('dbs.state.identify');
+ end;
+ dx := (grdMessages.ColumnWidth[ACol] - 16) div 2;
+ grdMessages.Canvas.DrawImage(ARect.Left + dx, ARect.Top {+ y}, img);
+ except
+ on E: Exception do
+ begin
+// writeln('Cell text = ' + grdMessages.Cells[ACol, ARow]);
+ end;
+ end;
+ end;
+end;
+
+procedure TMainForm.StartServer;
+begin
+ FIPCSrv := TSimpleIPCServer.Create(nil);
+ FIPCSrv.ServerID := DebugServerID;
+ FIPCSrv.Global := True;
+ FIPCSrv.Active := True;
+ FIPCSrv.StartServer;
+ fpgApplication.OnIdle := @CheckMessages;
+// ITMessages.Enabled:=True;
+end;
+
+procedure TMainForm.StopServer;
+begin
+ fpgApplication.OnIdle := nil;
+// ITMessages.Enabled := False;
+ FreeAndNil(FIPCSrv);
+end;
+
+procedure TMainForm.CheckMessages(Sender: TObject);
+begin
+ CheckDebugMessages;
+end;
+
+procedure TMainForm.CheckDebugMessages;
+begin
+ while FIPCSrv.PeekMessage(1, True) do
+ ReadDebugMessage;
+end;
+
+procedure TMainForm.ReadDebugMessage;
+var
+ Msg: TDebugMessage;
+begin
+ FIPCSrv.MsgData.Seek(0, soFromBeginning);
+ ReadDebugMessageFromStream(FIPCSrv.MsgData, MSg);
+ if not FPaused then
+ ShowDebugMessage(Msg)
+ else
+ Inc(FDiscarded);
+end;
+
+procedure TMainForm.ShowDebugMessage(const AMsg: TDebugmessage);
+var
+ r: integer;
+begin
+ grdMessages.BeginUpdate;
+ try
+ grdMessages.RowCount := grdMessages.RowCount + 1;
+ r := grdMessages.RowCount-1;
+ //if FAddAtBottom then
+ // grdMessages.Items.Add(LI)
+ //else
+ // grdMessages.Items.InsertItem(LI, 0);
+ grdMessages.Cells[0, r] := IntToStr(AMsg.MsgType);
+ grdMessages.Cells[1, r] := FormatDateTime('HH:mm:ss', AMsg.MsgTimeStamp);
+ grdMessages.Cells[2, r] := AMsg.Msg;
+ grdMessages.FocusCol := 0;
+ grdMessages.FocusRow := grdMessages.RowCount-1;
+ finally
+ grdMessages.EndUpdate;
+ end;
+ if FShowOnMessage then
+ ShowMessageWindow;
+end;
+
+procedure TMainForm.ShowMessageWindow;
+begin
+ if not Visible then
+ Show;
+end;
+
+procedure TMainForm.miFileQuit(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TMainForm.miHelpAboutFPGui(Sender: TObject);
+begin
+ TfpgMessageDialog.AboutFPGui;
+end;
+
+procedure TMainForm.miHelpProductInformation(Sender: TObject);
+begin
+ TfpgMessageDialog.Information('Product Information', WindowTitle + LineEnding + 'Written by Graeme Geldenhuys - 2010');
+end;
+
+constructor TMainForm.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FPaused := False;
+ FAddAtBottom := False;
+ FShowOnMessage := False;
+ StartServer;
+
+ fpgImages.AddMaskedBMP('dbs.clean', @DBS_clean, sizeof(DBS_clean), 15, 0);
+ fpgImages.AddMaskedBMP('dbs.stop', @DBS_stop, sizeof(DBS_stop), 0, 0);
+ fpgImages.AddMaskedBMP('dbs.pause', @DBS_pause, sizeof(DBS_pause), 0, 0);
+ fpgImages.AddMaskedBMP('dbs.run', @DBS_run, sizeof(DBS_run), 0, 0);
+
+ fpgImages.AddMaskedBMP('dbs.state.info', @DBS_state_info, sizeof(DBS_state_info), 0, 0);
+ fpgImages.AddMaskedBMP('dbs.state.warning', @DBS_state_warning, sizeof(DBS_state_warning), 0, 0);
+ fpgImages.AddMaskedBMP('dbs.state.error', @DBS_state_error, sizeof(DBS_state_error), 0, 0);
+ fpgImages.AddMaskedBMP('dbs.state.identify', @DBS_state_lightbulb, sizeof(DBS_state_lightbulb), 0, 0);
+ fpgImages.AddMaskedBMP('dbs.state.stop', @DBS_state_lightbulb_off, sizeof(DBS_state_lightbulb_off), 0, 0);
+end;
+
+destructor TMainForm.Destroy;
+begin
+ StopServer;
+ inherited Destroy;
+end;
+
+procedure TMainForm.AfterCreate;
+begin
+ {%region 'Auto-generated GUI code' -fold}
+ {@VFD_BODY_BEGIN: MainForm}
+ Name := 'MainForm';
+ SetPosition(353, 245, 486, 313);
+ WindowTitle := 'fpGUI''s Debug Server';
+ Hint := '';
+ ShowHint := True;
+
+ MainMenu := TfpgMenuBar.Create(self);
+ with MainMenu do
+ begin
+ Name := 'MainMenu';
+ SetPosition(0, 0, 486, 26);
+ Anchors := [anLeft,anRight,anTop];
+ end;
+
+ Bevel1 := TfpgBevel.Create(self);
+ with Bevel1 do
+ begin
+ Name := 'Bevel1';
+ SetPosition(0, 26, 486, 31);
+ Anchors := [anLeft,anRight,anTop];
+ Hint := '';
+ Style := bsLowered;
+ Shape := bsBottomLine;
+ end;
+
+ grdMessages := TfpgStringGrid.Create(self);
+ with grdMessages do
+ begin
+ Name := 'grdMessages';
+ SetPosition(4, 63, 478, 246);
+ Anchors := [anLeft,anRight,anTop,anBottom];
+ AddColumn('Type', 50, taLeftJustify);
+ AddColumn('Time', 75, taCenter);
+ AddColumn('Message', 330, taLeftJustify);
+ FontDesc := '#Grid';
+ HeaderFontDesc := '#GridHeader';
+ Hint := '';
+ RowCount := 0;
+ RowSelect := True;
+ ShowGrid := False;
+ TabOrder := 2;
+ Options := [go_SmoothScroll];
+ OnDrawCell := @GridDrawCell;
+ end;
+
+ mnuFile := TfpgPopupMenu.Create(self);
+ with mnuFile do
+ begin
+ Name := 'mnuFile';
+ SetPosition(260, 100, 120, 24);
+ AddMenuItem('Quit', '', @miFileQuit);
+ end;
+
+ mnuEdit := TfpgPopupMenu.Create(self);
+ with mnuEdit do
+ begin
+ Name := 'mnuEdit';
+ SetPosition(260, 126, 120, 24);
+ AddMenuItem('Cut', '', nil).Enabled := False;
+ AddMenuItem('Copy', '', nil).Enabled := False;
+ AddMenuItem('Paste', '', nil).Enabled := False;
+ AddMenuItem('-', '', nil);
+ AddMenuItem('Preferences...', '', nil).Enabled := False;
+ end;
+
+ mnuHelp := TfpgPopupMenu.Create(self);
+ with mnuHelp do
+ begin
+ Name := 'mnuHelp';
+ SetPosition(260, 152, 120, 24);
+ AddMenuItem('About fpGUI...', '', @miHelpAboutFPGui);
+ AddMenuItem('Product Information...', '', @miHelpProductInformation);
+ end;
+
+ btnQuit := TfpgButton.Create(Bevel1);
+ with btnQuit do
+ begin
+ Name := 'btnQuit';
+ SetPosition(4, 2, 25, 25);
+ Text := '';
+ Flat := True;
+ FontDesc := '#Label1';
+ Hint := '';
+ ImageMargin := -1;
+ ImageName := 'stdimg.quit';
+ ImageSpacing := 0;
+ TabOrder := 0;
+ Focusable := False;
+ OnClick := @miFileQuit;
+ end;
+
+ Bevel2 := TfpgBevel.Create(Bevel1);
+ with Bevel2 do
+ begin
+ Name := 'Bevel2';
+ SetPosition(34, 2, 8, 25);
+ Hint := '';
+ Style := bsLowered;
+ Shape := bsLeftLine;
+ end;
+
+ btnPause := TfpgButton.Create(Bevel1);
+ with btnPause do
+ begin
+ Name := 'btnPause';
+ SetPosition(43, 2, 25, 25);
+ Text := '';
+ AllowAllUp := True;
+ Flat := True;
+ FontDesc := '#Label1';
+ GroupIndex := 1;
+ Hint := 'pause server';
+ ImageMargin := -1;
+ ImageName := 'dbs.pause';
+ TabOrder := 2;
+ Focusable := False;
+ OnClick :=@btnPauseClicked;
+ end;
+
+ btnStart := TfpgButton.Create(Bevel1);
+ with btnStart do
+ begin
+ Name := 'btnStart';
+ SetPosition(70, 2, 25, 25);
+ Text := '';
+ Flat := True;
+ FontDesc := '#Label1';
+ Hint := 'start server';
+ ImageMargin := -1;
+ ImageName := 'dbs.run';
+ TabOrder := 2;
+ Focusable := False;
+ OnClick := @btnStartClicked;
+ Enabled := False;
+ end;
+
+ btnClear := TfpgButton.Create(Bevel1);
+ with btnClear do
+ begin
+ Name := 'btnClear';
+ SetPosition(97, 2, 25, 25);
+ Text := '';
+ Flat := True;
+ FontDesc := '#Label1';
+ Hint := 'clear listview';
+ ImageMargin := -1;
+ ImageName := 'dbs.clean';
+ TabOrder := 2;
+ Focusable := False;
+ OnClick :=@btnClearClicked;
+ end;
+
+ {@VFD_BODY_END: MainForm}
+ {%endregion}
+
+ // Hook up the menus to the MenuBar
+ MainMenu.AddMenuItem('File', nil).SubMenu := mnuFile;
+ MainMenu.AddMenuItem('Edit', nil).SubMenu := mnuEdit;
+ MainMenu.AddMenuItem('Help', nil).SubMenu := mnuHelp;
+end;
+
+
+end.
diff --git a/examples/apps/debugserver/images.inc b/examples/apps/debugserver/images.inc
new file mode 100644
index 00000000..166155c9
--- /dev/null
+++ b/examples/apps/debugserver/images.inc
@@ -0,0 +1,208 @@
+
+Const
+ DBS_clean : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,224, 17,243, 18,130,164, 19,130,165, 97, 87,195,222,
+ 18,242,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,236, 10,
+ 248, 29,125,169, 80,193,210, 91,211,225, 52,177,199, 17,139,164, 86,
+ 93,191,235, 11,247,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255, 58,110,181, 58,177,
+ 198, 95,216,231, 38,202,223, 78,212,229,109,217,231, 53,177,198, 25,
+ 127,168,217, 21,240,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,188, 37,229, 34,150,174,108,218,232, 16,197,
+ 220, 3,194,218, 3,194,218, 21,198,220, 91,215,231, 87,199,214, 19,
+ 135,165,192, 34,231,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255, 44,118,176, 94,207,221, 70,218,237, 24,208,231, 17,203,
+ 227, 7,196,220, 3,194,218, 3,194,218, 76,211,228, 88,205,220, 15,
+ 136,163,227, 15,244,255, 0,255,255, 0,255,255, 0,255,229, 14,245,
+ 24,143,168,139,237,251, 60,229,252, 55,228,251, 47,222,246, 35,215,
+ 238, 20,205,229, 4,195,219, 3,194,218, 86,214,230, 54,179,199, 87,
+ 94,192,255, 0,255,255, 0,255,255, 0,255,160, 47,218, 55,169,194,
+ 138,239,253, 95,234,253, 97,235,253, 82,233,253, 60,230,253, 42,219,
+ 243, 24,208,231, 16,198,220, 73,210,228,103,212,226, 23,129,167,255,
+ 0,255,255, 0,255,248, 4,252, 40, 30,176, 22, 65,174,132,234,251,
+ 107,236,253,132,239,253,109,236,253, 82,233,253, 68,229,251,101,227,
+ 243,119,221,235, 74,192,207, 38,151,178, 21,128,165,255, 0,255,160,
+ 52,218, 20,130,166, 49,159,189, 40, 74,187, 29, 56,184, 97,216,246,
+ 99,234,253,108,235,253,125,238,253,136,234,248, 73,186,206, 13,139,
+ 162, 92, 91,194,191, 35,230,253, 1,254,255, 0,255,165, 49,220, 10,
+ 136,161, 79,200,216,104,220,236, 51,109,200, 13, 27,171, 98,177,215,
+ 114,220,234, 73,183,206, 18,139,165, 97, 89,195,228, 15,245,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,126, 51,194, 1,
+ 135,156, 65,189,205,119,222,235, 30,102,178, 27, 48,170, 46,118,177,
+ 136, 65,209,234, 11,247,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,253, 1,254,106, 43,178, 12, 75,133, 11,118,178, 1,
+ 136,161, 51,173,190, 41,152,181,194, 33,231,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,144, 32,197, 14, 78,139, 15,122,188, 16,125,193, 14, 78,138, 49,
+ 107,173, 0,139,156,214, 22,239,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 18, 69,
+ 132, 12,114,178, 16,125,193, 10,107,169, 37, 63,142,253, 1,254,125,
+ 71,205,236, 10,248,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255, 26, 66,136, 10,105,
+ 166, 11,109,171, 10, 71,128,187, 19,219,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,196, 17,224, 37, 64,143, 28, 66,
+ 137,184, 20,217,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);
+
+Const
+ DBS_run : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255, 4,115, 58, 33,130, 79, 99,130,
+ 114,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255, 4,115, 58,122,207,164, 44,140, 90, 61,118,
+ 89,174,174,174,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255, 4,115, 58,130,216,172,118,214,166, 60,157,106, 39,116,
+ 76,172,174,173,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 9,119, 63,131,219,174, 31,198,113,114,222,167, 75,178,127, 23,116,
+ 69,168,173,170,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 4,115, 58,
+ 131,220,175, 17,195,105, 26,204,115,105,223,163, 90,194,141, 19,118,
+ 67,158,167,163,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255, 4,115, 58,169,220,193,
+ 16,189,101, 17,193,103, 19,194,105, 89,211,149,103,201,152, 22,124,
+ 71,136,156,146,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255, 4,115, 58,169,220,193, 13,179, 94,
+ 14,182, 96, 14,182, 96, 13,180, 95, 71,196,132,112,202,156, 29,130,
+ 77,103,140,121,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255, 4,115, 58,169,220,193, 12,170, 88, 18,174, 94,
+ 21,175, 96, 22,173, 97, 19,170, 93, 58,182,119,117,199,157, 40,137,
+ 87, 78,131,103,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255, 4,115, 58,169,220,193, 46,173,107, 43,173,106, 39,171,104,
+ 34,169,100, 28,165, 95, 65,178,120,120,198,159, 41,136, 88,103,140,
+ 121,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 4,
+ 115, 58,169,220,193, 54,173,112, 50,172,109, 45,170,106, 40,168,102,
+ 88,188,137,120,197,157, 31,128, 78,131,154,142,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 4,115, 58,169,
+ 220,193, 62,177,118, 58,175,115, 54,174,112,111,197,152,113,191,151,
+ 24,123, 73,166,176,171,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255, 4,115, 58,169,220,193, 69,
+ 180,123, 71,180,124,130,204,166,103,182,140, 23,119, 69,193,197,195,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255, 4,115, 58,165,218,191, 87,187,135,144,
+ 210,176, 91,171,130, 35,119, 76,212,213,212,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255, 4,115, 58,169,220,193,155,213,183, 76,159,115, 61,
+ 125, 92,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255, 4,115, 58,164,217,190, 61,147,102, 95,136,115,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 4,115,
+ 58, 45,136, 89,133,156,144,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);
+
+Const
+ DBS_pause : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,152,112, 80,164,101,
+ 52,164,101, 52,152,112, 80,255, 0,255,255, 0,255,152,112, 80,164,
+ 101, 52,164,101, 52,152,112, 80,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,159,104, 62,201,156,118,205,165,
+ 133,159,104, 62,255, 0,255,255, 0,255,159,104, 62,201,156,118,205,
+ 165,133,159,104, 62,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,163,101, 53,215,172,136,225,197,173,163,101,
+ 53,255, 0,255,255, 0,255,163,101, 53,215,172,136,225,197,173,163,
+ 101, 53,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,164,101, 52,216,169,129,230,204,181,164,101, 52,255, 0,
+ 255,255, 0,255,164,101, 52,216,169,129,230,204,181,164,101, 52,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 164,101, 52,215,167,127,230,204,181,164,101, 52,255, 0,255,255, 0,
+ 255,164,101, 52,215,167,127,230,204,181,164,101, 52,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,164,101, 52,
+ 215,169,129,230,205,182,164,101, 52,255, 0,255,255, 0,255,164,101,
+ 52,215,169,129,230,205,182,164,101, 52,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,164,101, 52,216,171,132,
+ 230,206,183,164,101, 52,255, 0,255,255, 0,255,164,101, 52,216,171,
+ 132,230,206,183,164,101, 52,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,164,101, 52,217,174,137,230,206,183,
+ 164,101, 52,255, 0,255,255, 0,255,164,101, 52,217,174,137,230,206,
+ 183,164,101, 52,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,164,101, 52,217,176,141,230,206,183,164,101, 52,
+ 255, 0,255,255, 0,255,164,101, 52,217,176,141,230,206,183,164,101,
+ 52,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,164,101, 52,217,178,143,230,206,183,164,101, 52,255, 0,255,
+ 255, 0,255,164,101, 52,217,178,143,230,206,183,164,101, 52,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,164,
+ 101, 52,218,179,145,230,206,183,164,101, 52,255, 0,255,255, 0,255,
+ 164,101, 52,218,179,145,230,206,183,164,101, 52,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,164,101, 52,218,
+ 181,147,230,207,185,164,101, 52,255, 0,255,255, 0,255,164,101, 52,
+ 218,181,147,230,207,185,164,101, 52,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,164,101, 52,219,182,148,231,
+ 209,187,164,101, 52,255, 0,255,255, 0,255,164,101, 52,219,182,148,
+ 231,209,187,164,101, 52,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,164,101, 52,221,188,157,231,209,188,164,
+ 101, 52,255, 0,255,255, 0,255,164,101, 52,221,188,157,231,209,188,
+ 164,101, 52,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,162,102, 55,220,191,164,223,198,175,162,102, 55,255,
+ 0,255,255, 0,255,162,102, 55,220,191,164,223,198,175,162,102, 55,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,153,110, 76,171,113, 67,172,114, 68,153,110, 76,255, 0,255,255,
+ 0,255,153,110, 76,171,113, 67,172,114, 68,153,110, 76,255, 0,255,
+ 255, 0,255,255, 0,255);
+
+Const
+ DBS_stop : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255, 87, 72,197, 76, 51,146, 76, 51,146, 76, 51,146, 76, 51,
+ 146, 76, 51,146, 76, 51,146, 76, 51,146, 76, 51,146, 76, 51,146, 76,
+ 51,146, 76, 51,146,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 87, 72,197,135,150,246,124,141,247,114,132,248,104,124,248, 94,115,
+ 250, 83,106,250, 74, 99,250, 66, 92,251, 58, 85,252, 51, 79,252, 76,
+ 51,146,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 87, 72,197,
+ 146,158,245,135,150,246,124,141,247,114,133,248,104,124,249, 94,115,
+ 249, 84,107,250, 75, 99,251, 66, 92,251, 57, 85,252, 76, 51,146,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255, 87, 72,197,155,167,245,
+ 146,159,245,135,150,247,124,141,247,114,132,248,103,124,248, 94,115,
+ 249, 84,107,250, 74, 99,251, 65, 92,251, 76, 51,146,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255, 87, 72,197,166,175,244,156,167,245,
+ 145,159,245,135,150,246,125,141,247,113,132,247,104,124,248, 93,115,
+ 249, 84,106,250, 74, 99,251, 76, 51,146,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255, 87, 72,197,174,183,243,165,175,245,156,167,245,
+ 145,159,245,135,150,247,124,141,247,114,132,248,104,123,249, 93,115,
+ 249, 83,107,250, 76, 51,146,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255, 87, 72,197,183,190,243,175,183,244,166,176,244,155,168,245,
+ 146,159,246,135,150,246,124,141,247,114,132,248,103,123,248, 93,115,
+ 249, 76, 51,146,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 87,
+ 72,197,191,197,242,183,190,243,175,183,244,165,175,244,156,167,245,
+ 146,159,246,135,149,246,125,141,247,114,132,248,104,124,248, 76, 51,
+ 146,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 87, 72,197,199,
+ 202,241,191,197,243,183,190,243,174,183,244,166,175,244,155,167,245,
+ 146,159,246,135,150,246,124,141,247,114,132,247, 76, 51,146,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255, 87, 72,197,204,208,241,198,
+ 203,241,191,197,242,183,191,243,175,183,244,166,175,245,155,168,245,
+ 145,159,246,135,150,246,125,141,247, 76, 51,146,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255, 87, 72,197,209,212,241,204,208,242,198,
+ 203,242,191,197,242,183,190,243,174,184,243,165,175,244,155,168,244,
+ 145,159,245,135,149,246, 76, 51,146,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255, 87, 72,197, 87, 72,197, 87, 72,197, 87, 72,197, 87,
+ 72,197, 87, 72,197, 87, 72,197, 87, 72,197, 87, 72,197, 87, 72,197,
+ 87, 72,197, 87, 72,197,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);
diff --git a/examples/apps/debugserver/images/clean.bmp b/examples/apps/debugserver/images/clean.bmp
new file mode 100644
index 00000000..74575793
--- /dev/null
+++ b/examples/apps/debugserver/images/clean.bmp
Binary files differ
diff --git a/examples/apps/debugserver/images/pause.bmp b/examples/apps/debugserver/images/pause.bmp
new file mode 100644
index 00000000..677d37b2
--- /dev/null
+++ b/examples/apps/debugserver/images/pause.bmp
Binary files differ
diff --git a/examples/apps/debugserver/images/run.bmp b/examples/apps/debugserver/images/run.bmp
new file mode 100644
index 00000000..9cccfaa0
--- /dev/null
+++ b/examples/apps/debugserver/images/run.bmp
Binary files differ
diff --git a/examples/apps/debugserver/images/state_error.bmp b/examples/apps/debugserver/images/state_error.bmp
new file mode 100644
index 00000000..d99e6440
--- /dev/null
+++ b/examples/apps/debugserver/images/state_error.bmp
Binary files differ
diff --git a/examples/apps/debugserver/images/state_info.bmp b/examples/apps/debugserver/images/state_info.bmp
new file mode 100644
index 00000000..d92895ae
--- /dev/null
+++ b/examples/apps/debugserver/images/state_info.bmp
Binary files differ
diff --git a/examples/apps/debugserver/images/state_lightbulb.bmp b/examples/apps/debugserver/images/state_lightbulb.bmp
new file mode 100644
index 00000000..f9937c70
--- /dev/null
+++ b/examples/apps/debugserver/images/state_lightbulb.bmp
Binary files differ
diff --git a/examples/apps/debugserver/images/state_lightbulb_off.bmp b/examples/apps/debugserver/images/state_lightbulb_off.bmp
new file mode 100644
index 00000000..1bdcdb45
--- /dev/null
+++ b/examples/apps/debugserver/images/state_lightbulb_off.bmp
Binary files differ
diff --git a/examples/apps/debugserver/images/state_warning.bmp b/examples/apps/debugserver/images/state_warning.bmp
new file mode 100644
index 00000000..e1a75926
--- /dev/null
+++ b/examples/apps/debugserver/images/state_warning.bmp
Binary files differ
diff --git a/examples/apps/debugserver/images/status.bmp b/examples/apps/debugserver/images/status.bmp
new file mode 100644
index 00000000..4bdd4ad7
--- /dev/null
+++ b/examples/apps/debugserver/images/status.bmp
Binary files differ
diff --git a/examples/apps/debugserver/images/stop.bmp b/examples/apps/debugserver/images/stop.bmp
new file mode 100644
index 00000000..f27fc185
--- /dev/null
+++ b/examples/apps/debugserver/images/stop.bmp
Binary files differ
diff --git a/examples/apps/debugserver/state_images.inc b/examples/apps/debugserver/state_images.inc
new file mode 100644
index 00000000..1c6aa2e3
--- /dev/null
+++ b/examples/apps/debugserver/state_images.inc
@@ -0,0 +1,260 @@
+
+Const
+ DBS_state_info : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,241, 12,227,203, 41,
+ 155,161, 70, 81,144, 76, 62,142, 75, 62,154, 69, 82,197, 39,156,238,
+ 11,227,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,224, 28,189,163, 77, 72,178,128, 87,213,183,
+ 147,219,195,166,218,195,166,210,180,144,171,122, 82,146, 71, 72,216,
+ 26,189,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 226, 32,189,163, 81, 60,203,167,125,216,187,159,195,156,119,182,138,
+ 98,180,134, 96,190,150,114,209,179,151,197,163,119,137, 76, 62,217,
+ 26,189,255, 0,255,255, 0,255,255, 0,255,244, 15,228,180, 94, 74,
+ 207,170,129,218,188,162,190,145,102,186,140, 98,183,137, 95,179,132,
+ 94,177,131, 93,176,131, 92,205,170,141,198,165,121,149, 72, 73,239,
+ 11,228,255, 0,255,255, 0,255,220, 59,155,191,145, 94,224,194,168,
+ 197,150,108,194,145,105,225,203,184,254,253,252,255,255,254,234,220,
+ 208,180,133, 94,179,133, 94,212,181,153,174,123, 86,200, 40,155,255,
+ 0,255,255, 0,255,197,108, 82,219,188,156,213,173,137,199,152,108,
+ 195,149,105,193,147,103,237,223,211,250,247,244,187,139, 99,185,138,
+ 99,184,138, 98,197,157,120,210,184,147,160, 70, 82,255, 0,255,255,
+ 0,255,193,122, 60,227,199,175,208,162,118,197,153,107,196,151,106,
+ 196,150,105,238,224,212,251,247,244,191,144,102,190,143,101,190,143,
+ 100,190,146,105,223,198,170,150, 77, 59,255, 0,255,255, 0,255,199,
+ 128, 66,228,201,176,208,163,122,204,157,113,199,154,108,197,152,107,
+ 255,255,255,255,255,254,195,150,105,193,148,104,194,148,104,195,152,
+ 109,223,197,171,153, 80, 59,255, 0,255,255, 0,255,210,122, 92,224,
+ 188,159,219,179,147,207,160,117,205,158,114,203,156,113,221,191,163,
+ 221,191,162,197,153,107,197,153,107,196,152,107,209,171,133,216,186,
+ 151,172, 74, 82,255, 0,255,255, 0,255,231, 72,164,205,156,104,231,
+ 203,180,212,165,122,208,160,119,207,158,116,251,248,245,251,248,245,
+ 203,158,113,203,157,113,205,161,119,223,192,165,185,138, 91,210, 45,
+ 155,255, 0,255,255, 0,255,249, 20,231,211,128, 90,217,178,140,230,
+ 202,179,214,169,125,209,165,121,226,196,168,225,195,168,208,162,118,
+ 209,164,119,221,189,162,208,172,133,180, 92, 74,244, 13,228,255, 0,
+ 255,255, 0,255,255, 0,255,241, 49,197,209,135, 79,217,178,140,230,
+ 205,184,224,186,157,215,171,133,214,169,130,217,179,145,225,194,171,
+ 212,174,134,180,102, 62,230, 36,189,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,242, 49,198,214,131, 91,208,160,106,224,
+ 191,160,227,197,174,227,197,174,223,188,159,200,151, 98,195,113, 73,
+ 233, 41,189,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,250, 21,231,234, 74,168,216,125,101,207,
+ 133, 78,205,132, 74,209,119, 91,228, 68,161,247, 19,228,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);
+
+Const
+ DBS_state_lightbulb : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,212, 61,
+ 230, 79, 77, 92, 69, 69, 70, 64, 65, 66, 70, 68, 80,201, 65,223,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,131, 85,149,188,188,
+ 187,235,234,234,205,204,204,163,161,159, 90, 65,109,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,121,105,140,166,165,162,168,162,
+ 162,157,153,152,148,143,139, 82, 69, 96,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,219, 49,236,102,126,151,122,149,163, 58,138,152, 53,127,
+ 140, 96,110,118, 46, 67, 88,223, 41,239,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,227, 38,251,
+ 112,151,225, 70,157,230, 75,190,247, 71,230,253, 65,229,253, 81,195,
+ 251, 22,124,222, 61,123,211,213, 47,247,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,230, 35,251,105,159,233,166,211,243,
+ 101,174,240,116,225,246,115,225,246,114,224,246,113,224,246, 76,163,
+ 236,156,195,239, 44,125,215,201, 59,245,255, 0,255,255, 0,255,255,
+ 0,255,253, 3,255,127,153,236,165,212,243,220,250,254, 56,161,235,
+ 116,225,246,106,228,246, 93,226,245,114,224,246, 22,145,232,192,245,
+ 253,172,206,241, 45,124,215,234, 25,251,255, 0,255,255, 0,255,183,
+ 102,245,139,200,239,236,252,254,119,225,247, 47,153,234,117,225,246,
+ 116,225,246,104,222,245,115,225,246, 9,134,230, 70,213,243,220,254,
+ 254,111,170,229,121,115,230,255, 0,255,255, 0,255,127,169,238,201,
+ 233,249,212,249,253,124,227,247,134,229,248, 96,177,239,104,181,239,
+ 99,180,239, 76,166,236,130,228,247, 89,220,245,138,235,250,203,226,
+ 247, 57,135,218,255, 0,255,255, 0,255,126,192,238,223,246,253,200,
+ 245,252,205,246,252,214,247,253,211,244,252,207,242,252,202,241,251,
+ 196,240,252,186,242,251,150,234,248,114,229,247,226,244,253, 50,136,
+ 216,255, 0,255,255, 0,255,149,183,242,210,239,251,219,249,254,223,
+ 249,253,236,251,254,238,252,254,239,252,254,239,252,254,235,251,254,
+ 224,249,254,184,241,251,168,241,251,203,229,248, 62,141,221,255, 0,
+ 255,255, 0,255,200,115,249,180,227,248,229,250,254,219,248,253,228,
+ 250,254,240,252,254,249,254,255,249,254,255,239,252,254,210,246,253,
+ 180,241,251,237,253,255,107,179,234,136,121,236,255, 0,255,255, 0,
+ 255,252, 10,255,181,173,246,195,235,250,226,249,253,224,249,253,213,
+ 247,253,207,246,253,201,244,252,199,244,252,214,249,253,235,250,254,
+ 144,202,242, 80,151,230,243, 17,253,255, 0,255,255, 0,255,255, 0,
+ 255,247, 22,254,196,159,249,183,228,248,199,236,251,215,243,252,225,
+ 247,253,226,248,254,216,240,252,182,223,248,107,187,237,108,152,235,
+ 232, 33,252,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,227, 82,251,193,156,248,168,192,246,148,202,241,133,
+ 197,240,128,182,240,135,157,240,187, 98,246,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);
+
+Const
+ DBS_state_warning : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 123,108,237, 45,167,224, 43,164,223, 41,161,221, 39,158,220, 37,155,
+ 218, 35,152,217, 32,147,214, 27,140,211, 22,133,207, 17,126,204, 13,
+ 119,201, 9,113,198, 6,108,195, 3,104,193, 93, 64,214, 72,154,230,
+ 190,227,245,244,252,254,239,251,254,238,251,254,238,251,254,239,252,
+ 254,239,252,254,239,251,254,238,251,254,237,251,254,237,251,254,236,
+ 251,254,242,252,254,171,206,235, 42, 88,202,195, 52,247, 98,191,232,
+ 244,252,254,181,239,250, 88,218,245, 88,218,245, 87,216,243, 88,215,
+ 242, 88,214,242, 87,217,244, 81,216,245, 78,215,244, 98,218,246,234,
+ 251,254, 68,147,210,182, 32,237,255, 0,255, 94,139,234,157,215,241,
+ 231,249,253,139,229,248, 90,219,246, 91,218,244, 61,161,213, 61,161,
+ 213, 84,214,242, 82,216,245, 80,214,244,216,246,252,136,191,229, 85,
+ 85,217,255, 0,255,255, 0,255,227, 25,251, 55,174,229,243,251,254,
+ 195,242,251, 92,220,246, 92,218,244,100,223,246, 87,203,235, 85,214,
+ 242, 84,217,245,148,231,248,227,244,251, 28,132,209,222, 18,248,255,
+ 0,255,255, 0,255,255, 0,255,121,119,238,140,210,240,234,251,254,
+ 148,230,248, 92,218,244, 71,177,221, 61,161,213, 86,215,242, 92,219,
+ 245,222,248,253,125,192,231,135, 75,232,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,246, 9,254, 69,167,232,200,234,247,230,250,253,
+ 93,218,244, 61,161,213, 61,161,213, 87,215,242,199,243,252,192,227,
+ 244, 59,137,221,245, 7,253,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,185, 64,247,113,200,237,249,254,255, 94,220,244,
+ 62,162,213, 62,162,213, 92,217,244,237,251,254,104,187,229,178, 55,
+ 242,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255, 90,152,236,169,223,244,237,249,253, 62,163,214,
+ 62,163,214,212,245,252,162,215,241, 93,125,230,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,218, 35,251, 58,182,232,249,253,255,148,233,249,158,235,250,
+ 236,250,254, 49,167,225,215, 31,249,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,116,131,239,148,216,242,243,252,254,231,250,254,143,211,240,
+ 134,101,239,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,241,
+ 13,254, 68,177,234,241,250,253,213,239,250, 67,165,232,241, 12,253,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,141,
+ 110,243,133,212,241,130,209,240,173, 75,245,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,253, 2,255, 93,
+ 156,238,104,142,239,253, 2,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);
+
+Const
+ DBS_state_error : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,227, 11,247,154, 37,
+ 227, 76, 62,204, 54, 67,197, 52, 65,195, 70, 57,199,149, 31,222,225,
+ 9,246,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,191, 27,239, 76, 74,209, 82,100,212,132,144,
+ 231,149,160,238,149,159,237,131,142,229, 76, 93,206, 61, 59,195,184,
+ 21,233,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 193, 30,241, 71, 85,213,117,132,227,161,172,244,127,139,236, 92,103,
+ 228, 91,102,227,125,135,234,159,168,241,111,124,221, 50, 64,194,185,
+ 21,234,255, 0,255,255, 0,255,255, 0,255,231, 13,250, 89, 86,222,
+ 120,136,230,163,176,245, 87,103,231, 86,101,230,137,146,237,136,146,
+ 236, 83, 95,226, 82, 93,225,159,169,242,111,125,221, 65, 61,198,226,
+ 9,246,255, 0,255,255, 0,255,168, 51,240, 96,115,224,164,179,247,
+ 90,110,235, 89,108,234, 88,105,232,255,255,255,255,255,255, 85, 98,
+ 229, 84, 97,227, 83, 95,226,159,169,242, 80, 97,209,151, 35,225,255,
+ 0,255,255, 0,255,106, 94,233,142,159,240,132,153,244, 92,115,238,
+ 91,112,236, 90,110,235,144,157,241,166,175,243, 87,103,231, 86,101,
+ 230, 85, 98,229,125,137,235,133,145,231, 78, 64,206,255, 0,255,255,
+ 0,255, 93,109,234,160,179,247,101,128,242, 95,120,240, 93,118,239,
+ 92,115,238,211,217,250,255,255,255, 89,108,234, 88,105,232, 87,103,
+ 231, 93,108,231,153,165,241, 60, 76,204,255, 0,255,255, 0,255, 97,
+ 114,238,161,182,248,103,132,244, 96,124,243, 95,122,241, 95,120,240,
+ 255,255,255,255,255,255, 91,112,236, 90,110,235, 89,108,234, 95,111,
+ 233,155,168,241, 65, 80,208,255, 0,255,255, 0,255,118,105,243,145,
+ 166,243,136,161,248, 98,128,244, 97,126,243, 96,124,243,255,255,255,
+ 255,255,255, 93,118,239, 92,115,238, 91,112,236,130,147,241,137,152,
+ 236, 89, 76,216,255, 0,255,255, 0,255,178, 62,250,108,129,236,169,
+ 189,251, 99,130,245, 98,129,245, 98,128,244,255,255,255,255,255,255,
+ 95,122,241, 95,120,240, 93,118,239,165,181,248, 93,112,221,162, 46,
+ 235,255, 0,255,255, 0,255,235, 17,254,117,114,247,131,151,240,169,
+ 189,251, 99,130,245, 99,130,245,255,255,255,255,255,255, 97,126,243,
+ 96,124,243,166,185,249,123,141,234, 92, 90,225,231, 13,250,255, 0,
+ 255,255, 0,255,255, 0,255,206, 43,253,109,123,248,132,151,241,169,
+ 189,251,138,163,248,107,137,246,107,137,246,137,162,248,168,188,250,
+ 127,146,236, 89,103,229,198, 34,246,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,206, 43,253,119,117,250,110,131,238,146,
+ 166,244,160,180,248,160,180,248,145,166,243,104,125,233,105,104,237,
+ 200, 37,248,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,235, 18,255,181, 65,253,124,112,250,108,
+ 122,247,106,120,245,119,106,245,177, 60,248,233, 16,253,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);
+
+Const
+ DBS_state_lightbulb_off : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,212, 61,
+ 230, 79, 77, 92, 69, 69, 70, 64, 65, 66, 70, 68, 80,201, 65,223,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,131, 85,149,188,188,
+ 187,235,234,234,205,204,204,163,161,159, 90, 65,109,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,121,105,140,166,165,162,168,162,
+ 162,157,153,152,148,143,139, 82, 69, 96,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,243, 57,227,102,126,151,152,161,154,105,145,134,100,136,
+ 123,129,127,113, 46, 67, 88,244, 48,230,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,248, 41,238,
+ 216,175,166,207,186,147,212,193,158,213,194,160,212,193,157,215,197,
+ 164,195,168,118,201,164,133,244, 54,229,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,249, 38,240,215,178,166,232,222,203,
+ 217,200,168,221,206,179,221,206,178,221,206,178,221,206,178,210,190,
+ 154,229,217,196,198,168,125,241, 69,222,255, 0,255,255, 0,255,255,
+ 0,255,255, 3,254,222,169,180,232,222,203,247,243,237,145,174,179,
+ 221,206,179,219,203,174,216,199,167,221,206,178,127,161,167,240,234,
+ 222,233,223,205,198,165,126,249, 29,242,255, 0,255,255, 0,255,236,
+ 109,213,225,212,187,251,249,246,223,209,182,141,169,176,221,206,179,
+ 221,206,179,218,202,172,221,206,178,119,153,161,210,190,154,247,243,
+ 237,217,200,168,219,139,173,255, 0,255,255, 0,255,222,179,180,242,
+ 236,225,245,240,232,223,209,183,226,213,190,167,189,195,172,192,197,
+ 169,191,196,156,180,187,224,211,186,215,197,165,228,216,193,242,236,
+ 225,202,170,134,255, 0,255,255, 0,255,222,201,180,247,243,237,242,
+ 236,226,243,238,228,245,241,233,244,239,230,243,238,229,242,236,226,
+ 241,235,224,239,232,218,229,218,197,221,206,178,248,245,239,199,173,
+ 129,255, 0,255,255, 0,255,227,189,193,243,238,229,246,242,236,247,
+ 243,237,251,249,246,251,249,246,251,249,246,251,249,246,250,248,244,
+ 248,245,239,238,231,217,234,225,208,242,236,225,204,172,139,255, 0,
+ 255,255, 0,255,241,117,224,237,229,214,249,247,242,246,242,236,249,
+ 247,242,251,250,247,254,254,253,254,254,253,251,249,246,244,239,230,
+ 237,229,214,251,249,246,217,200,168,224,136,184,255, 0,255,255, 0,
+ 255,254, 10,253,236,174,212,240,234,222,248,245,239,247,243,237,245,
+ 241,233,243,238,229,242,236,226,242,236,225,245,241,233,250,248,244,
+ 227,215,192,209,171,152,252, 18,248,255, 0,255,255, 0,255,255, 0,
+ 255,253, 22,251,240,161,221,237,229,214,242,236,225,245,241,233,248,
+ 245,239,248,245,240,245,241,233,237,229,214,217,200,169,218,168,170,
+ 249, 35,241,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,248, 82,239,239,158,220,234,195,206,228,208,194,224,
+ 203,185,222,190,182,225,165,186,237,102,215,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);