CQRLOG is an advanced ham radio logging application based
diff --git a/src/cqrlog.lpi b/src/cqrlog.lpi
index a6cd580..e04a45d 100644
--- a/src/cqrlog.lpi
+++ b/src/cqrlog.lpi
@@ -105,7 +105,7 @@
-
+
@@ -888,6 +888,13 @@
+
+
+
+
+
+
+
diff --git a/src/cqrlog.lpr b/src/cqrlog.lpr
index 29d3dff..0bd6ecc 100644
--- a/src/cqrlog.lpr
+++ b/src/cqrlog.lpr
@@ -25,7 +25,8 @@ uses
fNewCommentToCall, fFindCommentToCall, frExportPref, fExportPref,
fWorkedGrids, fPropDK0WCY, fRemind, fContest, fMonWsjtx, fXfldigi,
dMembership, dSatellite, uRigControl, uRotControl, azidis3, aziloc, fDOKStat,
- fCabrilloExport, uDbUtils, dQTHProfile, uConnectionInfo, znacmech, gline2;
+ fCabrilloExport, uDbUtils, dQTHProfile, uConnectionInfo, znacmech, gline2,
+ fDbSqlSel;
var
Splash : TfrmSplash;
@@ -99,7 +100,6 @@ begin
Application.CreateForm(TdmMembership, dmMembership);
Application.CreateForm(TdmSatellite, dmSatellite);
-
Splash.Update;
application.ProcessMessages;
sleep(800);
diff --git a/src/fDBConnect.pas b/src/fDBConnect.pas
index a48849c..65b8c96 100644
--- a/src/fDBConnect.pas
+++ b/src/fDBConnect.pas
@@ -73,7 +73,6 @@ type
private
RemoteMySQL : Boolean;
AskForDB : Boolean;
-
procedure SaveLogin;
procedure LoadLogin;
procedure UpdateGridFields;
@@ -91,7 +90,7 @@ var
implementation
{$R *.lfm}
-uses dData, dUtils, fNewLog;
+uses dData, dUtils, fNewLog, fDbSqlSel;
{ TfrmDBConnect }
@@ -523,28 +522,47 @@ var
Connect : Boolean = True;
begin
tmrAutoConnect.Enabled := False;
+
if AskForDB then
begin
- if Application.MessageBox('It seems you are trying to run this program for the first time, '+
- 'are you going to save data to local machine?'#10#13'If you say Yes, '+
- 'new databases will be created. This may take a while, please be patient.' ,'Question ...',
- mb_YesNo+mb_IconQuestion) = idYes then
- begin
- dmData.StartMysqldProcess;
- Sleep(3000)
- end
- else begin
- Connect := False;
- RemoteMySQL := True;
- chkSaveToLocal.Checked := False;
- chkSaveToLocalClick(nil);
- edtServer.SetFocus
- end
+ if (frmDbSqlSel = nil) then Application.CreateForm(TfrmDbSqlSel, frmDbSqlSel);
+ frmDbSqlSel.Show;
+
+ repeat //wait for user to make selection on other window
+ Begin
+ sleep(100);
+ Application.ProcessMessages;
+ end;
+ until frmDbSqlSel.rdy;
+
+ if frmDbSqlSel.loc then
+ begin
+ dmData.StartMysqldProcess;
+ Sleep(3000)
+ end
+ else
+ begin
+ Connect := True;
+ RemoteMySQL := True;
+
+ edtUser.Text:=frmDbSqlSel.user;
+ edtPass.Text:=frmDbSqlSel.pass;
+ edtPort.Text:=frmDbSqlSel.port;
+ edtServer.Text:=frmDbSqlSel.ip;
+ chkAutoConn.Checked:= frmDbSqlSel.Acon;
+ chkSavePass.Checked:= frmDbSqlSel.Rmbr;
+
+ chkSaveToLocal.Checked := False;
+ chkSaveToLocalClick(nil);
+ end;
+
+ FreeAndNil(frmDbSqlSel);
+
end;
if (not OpenFromMenu) and Connect then
- btnConnect.Click;
+ btnConnect.Click;
if btnOpenLog.Enabled then
- btnOpenLog.SetFocus
+ btnOpenLog.SetFocus
end;
procedure TfrmDBConnect.OpenDefaultLog;
diff --git a/src/fDbSqlSel.lfm b/src/fDbSqlSel.lfm
new file mode 100644
index 0000000..f9fd75b
--- /dev/null
+++ b/src/fDbSqlSel.lfm
@@ -0,0 +1,650 @@
+object frmDbSqlSel: TfrmDbSqlSel
+ Left = 393
+ Height = 306
+ Top = 141
+ Width = 441
+ Caption = 'Select SQL for logs'
+ ClientHeight = 306
+ ClientWidth = 441
+ Color = clWhite
+ OnClose = FormClose
+ OnCreate = FormCreate
+ LCLVersion = '2.0.12.0'
+ object gbLocalUser: TGroupBox
+ AnchorSideLeft.Control = Owner
+ AnchorSideTop.Control = rbExternal
+ AnchorSideTop.Side = asrBottom
+ AnchorSideRight.Control = Owner
+ AnchorSideRight.Side = asrBottom
+ Left = 6
+ Height = 89
+ Top = 176
+ Width = 429
+ Anchors = [akTop, akLeft, akRight]
+ BorderSpacing.Left = 6
+ BorderSpacing.Top = 12
+ BorderSpacing.Right = 6
+ Caption = 'Define Local SQL user'
+ ClientHeight = 71
+ ClientWidth = 427
+ TabOrder = 6
+ TabStop = True
+ Visible = False
+ object edtUserName: TEdit
+ AnchorSideTop.Control = gbLocalUser
+ AnchorSideTop.Side = asrCenter
+ AnchorSideRight.Control = edtPassword
+ Left = 229
+ Height = 34
+ Top = 18
+ Width = 90
+ Anchors = [akTop, akRight]
+ BorderSpacing.Right = 12
+ OnExit = edtUserNameExit
+ TabOrder = 2
+ Text = 'cqrlog'
+ end
+ object edtPassword: TEdit
+ AnchorSideTop.Control = gbLocalUser
+ AnchorSideTop.Side = asrCenter
+ AnchorSideRight.Control = gbLocalUser
+ AnchorSideRight.Side = asrBottom
+ Left = 331
+ Height = 34
+ Top = 18
+ Width = 90
+ Anchors = [akTop, akRight]
+ BorderSpacing.Right = 6
+ OnExit = edtPasswordExit
+ TabOrder = 3
+ Text = 'cqrlog'
+ end
+ object lblPass: TLabel
+ AnchorSideLeft.Control = edtPassword
+ AnchorSideBottom.Control = edtPassword
+ Left = 331
+ Height = 17
+ Top = 1
+ Width = 62
+ Anchors = [akLeft, akBottom]
+ Caption = 'Password'
+ ParentColor = False
+ end
+ object lblUsername: TLabel
+ AnchorSideLeft.Control = edtUserName
+ AnchorSideBottom.Control = edtUserName
+ Left = 229
+ Height = 17
+ Top = 1
+ Width = 67
+ Anchors = [akLeft, akBottom]
+ Caption = 'Username'
+ ParentColor = False
+ end
+ object lblIp: TLabel
+ AnchorSideLeft.Control = edtIP
+ AnchorSideBottom.Control = edtIP
+ Left = 6
+ Height = 17
+ Top = 1
+ Width = 60
+ Anchors = [akLeft, akBottom]
+ Caption = 'IP addres'
+ ParentColor = False
+ end
+ object lblPort: TLabel
+ AnchorSideLeft.Control = edtPort
+ AnchorSideBottom.Control = edtPort
+ Left = 108
+ Height = 17
+ Top = 1
+ Width = 26
+ Anchors = [akLeft, akBottom]
+ Caption = 'Port'
+ ParentColor = False
+ end
+ object edtPort: TEdit
+ AnchorSideLeft.Control = edtIP
+ AnchorSideLeft.Side = asrBottom
+ AnchorSideTop.Control = gbLocalUser
+ AnchorSideTop.Side = asrCenter
+ Left = 108
+ Height = 34
+ Top = 18
+ Width = 90
+ BorderSpacing.Left = 12
+ MaxLength = 5
+ NumbersOnly = True
+ OnExit = edtPortExit
+ TabOrder = 1
+ Text = '3306'
+ end
+ object edtIP: TEdit
+ AnchorSideLeft.Control = gbLocalUser
+ AnchorSideTop.Control = gbLocalUser
+ AnchorSideTop.Side = asrCenter
+ Left = 6
+ Height = 34
+ Top = 18
+ Width = 90
+ BorderSpacing.Left = 6
+ OnExit = edtIPExit
+ TabOrder = 0
+ Text = 'localhost'
+ end
+ end
+ object lblQuestion: TLabel
+ AnchorSideLeft.Control = Owner
+ AnchorSideLeft.Side = asrCenter
+ AnchorSideTop.Control = pnlWelcome
+ AnchorSideTop.Side = asrBottom
+ Left = 21
+ Height = 34
+ Top = 43
+ Width = 398
+ BorderSpacing.Top = 6
+ Caption = 'It seems you are trying to run this program for '#10'the first time. Do you want to save your Log data to:'
+ Font.Style = [fsBold]
+ ParentColor = False
+ ParentFont = False
+ end
+ object rbFolder: TRadioButton
+ AnchorSideLeft.Control = Owner
+ AnchorSideTop.Control = lblQuestion
+ AnchorSideTop.Side = asrBottom
+ Left = 24
+ Height = 23
+ Top = 89
+ Width = 271
+ BorderSpacing.Left = 24
+ BorderSpacing.Top = 12
+ Caption = 'your linux user folder (Cqrlog default)'
+ Checked = True
+ OnClick = rbFolderClick
+ ParentShowHint = False
+ TabOrder = 1
+ TabStop = True
+ end
+ object rbLocal: TRadioButton
+ AnchorSideLeft.Control = rbFolder
+ AnchorSideTop.Control = rbFolder
+ AnchorSideTop.Side = asrBottom
+ Left = 24
+ Height = 23
+ Top = 115
+ Width = 202
+ BorderSpacing.Top = 3
+ Caption = 'local machine''s SQL server'
+ OnChange = rbLocalChange
+ ParentShowHint = False
+ TabOrder = 2
+ TabStop = True
+ end
+ object rbExternal: TRadioButton
+ AnchorSideLeft.Control = rbFolder
+ AnchorSideTop.Control = rbLocal
+ AnchorSideTop.Side = asrBottom
+ Left = 24
+ Height = 23
+ Top = 141
+ Width = 226
+ BorderSpacing.Top = 3
+ Caption = 'external networked SQL server'
+ OnChange = rbExternalChange
+ ParentShowHint = False
+ TabOrder = 3
+ TabStop = True
+ end
+ object btnOK: TButton
+ AnchorSideTop.Side = asrBottom
+ AnchorSideRight.Control = Owner
+ AnchorSideRight.Side = asrBottom
+ AnchorSideBottom.Control = Owner
+ AnchorSideBottom.Side = asrBottom
+ Left = 354
+ Height = 25
+ Hint = 'Confirm your selection'
+ Top = 269
+ Width = 75
+ Anchors = [akRight, akBottom]
+ BorderSpacing.Right = 12
+ BorderSpacing.Bottom = 12
+ Caption = 'OK'
+ OnClick = btnOKClick
+ TabOrder = 5
+ end
+ object pnlWelcome: TPanel
+ AnchorSideLeft.Control = Owner
+ AnchorSideTop.Control = Owner
+ AnchorSideRight.Control = Owner
+ AnchorSideRight.Side = asrBottom
+ Left = 30
+ Height = 31
+ Top = 6
+ Width = 381
+ Anchors = [akTop, akLeft, akRight]
+ AutoSize = True
+ BorderSpacing.Left = 30
+ BorderSpacing.Top = 6
+ BorderSpacing.Right = 30
+ ClientHeight = 31
+ ClientWidth = 381
+ Color = clWhite
+ ParentColor = False
+ TabOrder = 0
+ object lblWelcome: TLabel
+ AnchorSideLeft.Control = pnlWelcome
+ AnchorSideLeft.Side = asrCenter
+ AnchorSideTop.Control = pnlWelcome
+ AnchorSideTop.Side = asrCenter
+ Left = 52
+ Height = 30
+ Top = 0
+ Width = 277
+ Caption = 'Welcome to Cqrlog!'
+ Font.Color = clOlive
+ Font.Height = 25
+ Font.Style = [fsBold, fsItalic]
+ ParentColor = False
+ ParentFont = False
+ end
+ end
+ object imLogo: TImage
+ AnchorSideLeft.Control = btnOK
+ AnchorSideTop.Control = rbFolder
+ AnchorSideRight.Side = asrBottom
+ Left = 354
+ Height = 64
+ Top = 89
+ Width = 64
+ Picture.Data = {
+ 1754506F727461626C654E6574776F726B47726170686963E423000089504E47
+ 0D0A1A0A0000000D4948445200000040000000400806000000AA6971DE00000A
+ 4D6943435050686F746F73686F70204943432070726F66696C65000078DA9D53
+ 775893F7163EDFF7650F5642D8F0B1976C81002223AC08C81059A21092006184
+ 101240C585880A561415119C4855C482D50A489D88E2A028B867418A885A8B55
+ 5C38EE1FDCA7B57D7AEFEDEDFBD7FBBCE79CE7FCCE79CF0F8011122691E6A26A
+ 003952853C3AD81F8F4F48C4C9BD80021548E0042010E6CBC26705C50000F003
+ 79787E74B03FFC01AF6F00020070D52E2412C7E1FF83BA50265700209100E022
+ 12E70B01905200C82E54C81400C81800B053B3640A009400006C797C422200AA
+ 0D00ECF4493E0500D8A993DC1700D8A21CA908008D0100992847240240BB0060
+ 5581522C02C0C200A0AC40222E04C0AE018059B632470280BD0500768E58900F
+ 4060008099422CCC0020380200431E13CD03204C03A030D2BFE0A95F7085B848
+ 0100C0CB95CD974BD23314B895D01A77F2F0E0E221E2C26CB142611729106609
+ E4229C979B231348E7034CCE0C00001AF9D1C1FE383F90E7E6E4E1E666E76CEF
+ F4C5A2FE6BF06F223E21F1DFFEBC8C020400104ECFEFDA5FE5E5D60370C701B0
+ 75BF6BA95B00DA560068DFF95D33DB09A05A0AD07AF98B7938FC401E9EA150C8
+ 3C1D1C0A0B0BED2562A1BD30E38B3EFF33E16FE08B7EF6FC401EFEDB7AF00071
+ 9A4099ADC0A383FD71616E76AE528EE7CB0442316EF7E723FEC7857FFD8E29D1
+ E234B15C2C158AF15889B850224DC779B952914421C995E212E97F32F11F96FD
+ 0993770D00AC864FC04EB607B5CB6CC07EEE01028B0E58D27600407EF32D8C1A
+ 0B91001067343279F7000093BFF98F402B0100CD97A4E30000BCE8185CA89417
+ 4CC608000044A0812AB041070CC114ACC00E9CC11DBCC01702610644400C24C0
+ 3C104206E4801C0AA11896411954C03AD804B5B0031AA0119AE110B4C131380D
+ E7E0125C81EB70170660189EC218BC86090441C8081361213A8811628ED822CE
+ 0817998E04226148349280A420E988145122C5C872A402A9426A915D4823F22D
+ 7214398D5C40FA90DBC820328AFC8ABC47319481B25103D4027540B9A81F1A8A
+ C6A073D174340F5D8096A26BD11AB41E3D80B6A2A7D14BE87574007D8A8E6380
+ D1310E668CD9615C8C87456089581A26C71663E55835568F35631D583776151B
+ C09E61EF0824028B8013EC085E8410C26C82909047584C5843A825EC23B412BA
+ 085709838431C2272293A84FB4257A12F9C478623AB1905846AC26EE211E219E
+ 255E270E135F9348240EC992E44E0A21259032490B496B48DB482DA453A43ED2
+ 10699C4C26EB906DC9DEE408B280AC209791B7900F904F92FBC9C3E4B7143AC5
+ 88E24C09A22452A494124A35653FE504A59F324299A0AA51CDA99ED408AA883A
+ 9F5A496DA076502F5387A91334759A25CD9B1643CBA42DA3D5D09A696769F768
+ 2FE974BA09DD831E4597D097D26BE807E9E7E983F4770C0D860D83C748622819
+ 6B197B19A718B7192F994CA605D39799C85430D7321B9967980F986F55582AF6
+ 2A7C1591CA12953A9556957E95E7AA545573553FD579AA0B54AB550FAB5E567D
+ A64655B350E3A909D416ABD5A91D55BBA936AECE5277528F50CF515FA3BE5FFD
+ 82FA630DB2868546A08648A35463B7C6198D2116C63265F15842D6725603EB2C
+ 6B984D625BB2F9EC4C7605FB1B762F7B4C534373AA66AC6691669DE671CD010E
+ C6B1E0F039D99C4ACE21CE0DCE7B2D032D3F2DB1D66AAD66AD7EAD37DA7ADABE
+ DA62ED72ED16EDEBDAEF75709D409D2C9DF53A6D3AF77509BA36BA51BA85BADB
+ 75CFEA3ED363EB79E909F5CAF50EE9DDD147F56DF4A3F517EAEFD6EFD11F3730
+ 34083690196C313863F0CC9063E86B9869B8D1F084E1A811CB68BA91C468A3D1
+ 49A327B826EE8767E33578173E66AC6F1C62AC34DE65DC6B3C61626932DBA4C4
+ A4C5E4BE29CD946B9A66BAD1B4D374CCCCC82CDCACD8ACC9EC8E39D59C6B9E61
+ BED9BCDBFC8D85A5459CC54A8B368BC796DA967CCB05964D96F7AC98563E5679
+ 56F556D7AC49D65CEB2CEB6DD6576C501B579B0C9B3A9BCBB6A8AD9BADC4769B
+ 6DDF14E2148F29D229F5536EDA31ECFCEC0AEC9AEC06ED39F661F625F66DF6CF
+ 1DCC1C121DD63B743B7C727475CC766C70BCEBA4E134C3A9C4A9C3E957671B67
+ A1739DF33517A64B90CB1297769717536DA78AA76E9F7ACB95E51AEEBAD2B5D3
+ F5A39BBB9BDCADD96DD4DDCC3DC57DABFB4D2E9B1BC95DC33DEF41F4F0F758E2
+ 71CCE39DA79BA7C2F390E72F5E765E595EFBBD1E4FB39C269ED6306DC8DBC45B
+ E0BDCB7B603A3E3D65FACEE9033EC63E029F7A9F87BEA6BE22DF3DBE237ED67E
+ 997E07FC9EFB3BFACBFD8FF8BFE179F216F14E056001C101E501BD811A81B303
+ 6B031F049904A50735058D05BB062F0C3E15420C090D591F72936FC017F21BF9
+ 6333DC672C9AD115CA089D155A1BFA30CC264C1ED6118E86CF08DF107E6FA6F9
+ 4CE9CCB60888E0476C88B81F69199917F97D14292A32AA2EEA51B453747174F7
+ 2CD6ACE459FB67BD8EF18FA98CB93BDB6AB6727667AC6A6C526C63EC9BB880B8
+ AAB8817887F845F1971274132409ED89E4C4D8C43D89E37302E76C9A339CE49A
+ 54967463AEE5DCA2B917E6E9CECB9E773C593559907C3885981297B23FE58320
+ 42502F184FE5A76E4D1D13F2849B854F45BEA28DA251B1B7B84A3C92E69D5695
+ F638DD3B7D43FA68864F4675C633094F522B79911992B923F34D5644D6DEACCF
+ D971D92D39949C949CA3520D6996B42BD730B728B74F662B2B930DE479E66DCA
+ 1B9387CAF7E423F973F3DB156C854CD1A3B452AE500E164C2FA82B785B185B78
+ B848BD485AD433DF66FEEAF9230B82167CBD90B050B8B0B3D8B87859F1E022BF
+ 45BB16238B5317772E315D52BA647869F0D27DCB68CBB296FD50E2585255F26A
+ 79DCF28E5283D2A5A5432B82573495A994C9CB6EAEF45AB9631561956455EF6A
+ 97D55B567F2A17955FAC70ACA8AEF8B046B8E6E2574E5FD57CF5796DDADADE4A
+ B7CAEDEB48EBA4EB6EACF759BFAF4ABD6A41D5D086F00DAD1BF18DE51B5F6D4A
+ DE74A17A6AF58ECDB4CDCACD03356135ED5BCCB6ACDBF2A136A3F67A9D7F5DCB
+ 56FDADABB7BED926DAD6BFDD777BF30E831D153BDEEF94ECBCB52B78576BBD45
+ 7DF56ED2EE82DD8F1A621BBABFE67EDDB847774FC59E8F7BA57B07F645EFEB6A
+ 746F6CDCAFBFBFB2096D52368D1E483A70E59B806FDA9BED9A77B5705A2A0EC2
+ 41E5C127DFA67C7BE350E8A1CEC3DCC3CDDF997FB7F508EB48792BD23ABF75AC
+ 2DA36DA03DA1BDEFE88CA39D1D5E1D47BEB7FF7EEF31E36375C7358F579EA09D
+ 283DF1F9E48293E3A764A79E9D4E3F3DD499DC79F74CFC996B5D515DBD6743CF
+ 9E3F1774EE4CB75FF7C9F3DEE78F5DF0BC70F422F762DB25B74BAD3DAE3D477E
+ 70FDE148AF5B6FEB65F7CBED573CAE74F44DEB3BD1EFD37FFA6AC0D573D7F8D7
+ 2E5D9F79BDEFC6EC1BB76E26DD1CB825BAF5F876F6ED17770AEE4CDC5D7A8F78
+ AFFCBEDAFDEA07FA0FEA7FB4FEB165C06DE0F860C060CFC3590FEF0E09879EFE
+ 94FFD387E1D247CC47D52346238D8F9D1F1F1B0D1ABDF264CE93E1A7B2A713CF
+ CA7E56FF79EB73ABE7DFFDE2FB4BCF58FCD8F00BF98BCFBFAE79A9F372EFABA9
+ AF3AC723C71FBCCE793DF1A6FCADCEDB7DEFB8EFBADFC7BD1F9928FC40FE50F3
+ D1FA63C7A7D04FF73EE77CFEFC2FF784F3FB25D29F3300000006624B474400FF
+ 00FF00FFA0BDA793000000097048597300000B1300000B1301009A9C18000000
+ 0774494D4507E00B180D0E1F23BE4C6B000019184944415478DAE59A69D02557
+ 79DF9FE52CBDDCED5D675F352369461AB4039230428A1196B12C8535E02AC29A
+ 18873521840AC4C4B84C3081220E8905C1612B3621B064CB0A06814162119201
+ 210909493323349A7DE69D77B9EFBDB76FF739E779F261820B2863B619598E7E
+ 9FBA4F777555FFEBFF2CFD9C46F805B8EBDD6BE02FBEB2D23E54395CE5872625
+ 106F52EA624C6FB8F101F9C9FBFFE4B9E7C36BAFFB163C96C1BF6FF13D579F0B
+ AFBFE13BF0B6CB4F839A8D1781CD407CAEB566E3D10A278F0C70360A4A699302
+ 48451A964075C9B31E6E395D42E403A9893BDF7BEB037313300D0B30072FB8F0
+ 3CF8E46DDF7E6C0BF047579F016FBEE15E000078FD65A74F1BA6B6B7FC9446F0
+ 85FD06679683E901A2393460B334D6AC9BA9384AF5380293D4CA08A396E7501A
+ 89E3A4FB1DA4AFDD3769DF7EDE08D6FED92DF7EC050078C525DBE003B77CFFB1
+ 27C01BAF3C13DE79E3F7E08D976F77E3A45789C01506F5DCB19A3B7A85C1B911
+ 3FBB5FE3F0D0885A4989162A6055858E13A9A3808228431211AA9C0547A0E029
+ CD753C7C84881F2690952B5BE9BA6BBE7CDF3E0080773CFF1C78D3B5773E7604
+ F8C08B77E0AEC33023A22F1D047CCA91216D89A21C129402B4B0BA673E75A06F
+ DE324E3AAA2265E3A832A8D17A03D1629471548EB1498C088A5C1B544602F014
+ B193FBDF6C62FCC8A48B7BD6B79B6B8AD2FCD516D38C5F79E3AE7F74011800E0
+ AD57ED3007E7E56C49E9950A78C920D029C72AEA1CABA88D888E088B2AC025AB
+ 3BF0E6A8E63714400CA3515569842DA38A3784519992260534AC80181570D4A0
+ 7A0E8351B4AB176BDDDA727ABE51DDBA7719765F7ECE9AA5AF3F7858FE3105A0
+ 575FF4248CC9AE70DE9CEBAC5949A8BE6342CA299163297A99BA75ED54AE6DA5
+ D4E6F05FB7CF84F75EB026E1BA9EA48D53AC6DA72A681CA2D1CC1964726C5859
+ C99261466399E72B7A2D117D569465D7BC59DD083DFD70635EB7B4503DEFE517
+ 6FDEA4BA170000C2B16BA1DAF35F1E5D015A538A75ACAD2459A1A05B54604A25
+ D9CD9D303E63B28E3399D8AE17EAD950943645A7CD1B3C866F6E9B123963BA49
+ DB574AEC790520E0DC32786B4881D031309131CE3000710DC43E014F354A78B4
+ A2F6389AAB86C24F64E4D7BFF2924B77BCE2A95B377DF47F7CD664EBDF04697C
+ 3D1DBEEF3D000010173F737243E02567AFD631F124213E97904E614245420440
+ 973BA6CC215B6642B6C0C65845524971738872C4B1146D9BC05BC05103149392
+ B3087544420044364A00680D271141639C719CF2A8C8B923BB30C6EE7481DCCE
+ EDFA26EAFAC5B9E5DE87DEFD8E23575EF504E99DF29A948637A1E95C7DF293E0
+ DB9E75814F29FE2B44FC3712250B31A1A8A088DA98C425019300398A5A2632ED
+ D21113031055921A072A727048B873DE6212824641C78D289217C38804126352
+ 9395C54DD08C9E3E9905291DD6470612D775E5A12D5D6847D4DB5C9685237383
+ AFCDAE9D1813E7DF7CC5BFBFE2D8C4CAD9F4D56F5A7DC6339F070000F5C267C1
+ 4F3CFB8409603EF1CAA7C20BAFB9B5FE83679DF72911ED1843971AC6892892D7
+ 41B351A3746808BE4929B41C7ED332E6735573B60078CFEA8B2CC3DC3B9A2922
+ 1C581CCBD10A09D9251125D40613666A2D710251033AC5D69A22D338D1E25449
+ 5221ECD82C7532363DB4A63739D9398CC26765A53BFF63D77CE31B573EEB095F
+ BAFC37DF125496A1E9DF0E507F574FB803DEF1FC73E14DD77E07FEF09F9FB32E
+ 89BE3825FD17F323983F3AD45B6BC13D8661FBD1DA6D1E35F01B8E911921882A
+ D541B08E114310F24E71752F837E15607ED008A09104844039786B94415251E6
+ 777B4A67777D4CA7AC300B833A85DCD9232BB2B0DA5AB3D36459A789F26D63F3
+ 6D93B3ED7E7F44C77C69AFDD71D6A95F6C6DDC213BCE988BA18A90EA9EF8C933
+ 80CCA927AE0F78C7D5E7C19B6EF836FCFE6F9FD58284BE013C7FD8C0EBE72ABE
+ F8D8D8C42A112725C36C8EA708156A628410023521601DC738AE03784374CACA
+ 0E3C3237D07183EAB21C009D7AA3C9B96CCF644E9BBBA5C453579BA5C271DFDA
+ 72DE6AB59E89F7DB2C77C0F8882F3AB36C69518D07326E3909BEA735B5A239ED
+ EC6DDFDDBA662F71D68DDC7B61AC8F7E10B2D997FD6A21F0C38337DD70BC4FBF
+ 7CE3E6C1CD3FD81538511112A9AACE21480791909092825214445116414621D6
+ 44040A0A0082C326C89D3F98A3D3D6743125C5438B4329DB16538C24A9318D38
+ 6A65A80681A63BB9A2CD58222742C8B3B2A360A0C8CB0E02A977792E64CBF5C3
+ AABEDAFB4C0EED3DD0EE9870C7EC8A21C5831FD07EFF8174523E8600007EE7D2
+ F3AD04BD7AB9A1578D226D5C6EB0AC127B11263686990918110514420898520D
+ A119430C35C558434A09677B396D9E6DEBDD7B9660DDAA691DF4470B65ABEC9E
+ B69AE3A6293B5AB56AA60F900DACA749540845776234AE47F3336BD6B4FA0BC3
+ C1ECBA4E1EA543D5A89A2F27665159EE6F65FAA9BCA30FAC99AE96B3C9756341
+ A36979A0E5EAE7FD727DC04FBBF0F12F7F2BCC1478C36C11FE67D7350F9726D6
+ 169A6831A885463D36E8305041097B39413777D82D4B2C8BB6E67947B22CD77E
+ D5E8EE434BF894EDB3D8F48FC2DA559D0994AA6E1A2006A558477445DECB8A52
+ 7DDE322EF3A93D315974263A59D1E96579DE2E26A6275CA7D79EC98BB29D65D9
+ 465FB69F5987F613F71CCA564173982D052E666AD4E183303AF2BE5FAE15FE69
+ DCBEFB809CBB6AEDF7C9A4FB09751D2AAEAA53324110A21004410D6021815340
+ 0FC84ED91845624432CA6C409460FFD165BCF0CC7518160FC2CCAA358ACD9027
+ 5A1964DE86B23B915B63C07ACF45271FFA56D7F7A60A9B24A376AFC88CCBD1E5
+ B6E3B38E902593E5D603BA4E1D801616E89115D34D1CCDF573631792CB4FD337
+ BEE6A9F0F677DD7062040000B873DF01BDFB91C3FB2E3973DD57188013F06C93
+ B08C820688C830A225446B58ADB16099C19041224622D2940498490F1E5B8633
+ B7ACA3BC9EE3F59B3651A80658B6BAA9D56B65653B2397B798D9F68B4E9175A7
+ 273262D3CA5B5DF01E8DB145E67397801D9685B3A2A4C430356E6869A19F8EF4
+ 8ADA834405EAC76AB9037FFC27D7FEEA21F0A3BCF4B7CE87F77FFE6F8F74BDFC
+ F18ABCFEF06C363ED8E2F190A46E343521A690620C12639024008246C9E6EAF3
+ 16F6BA13DA2A5B1212CB37771D13E9ADC56AFE08AEDCB0C5A65417D52871DEEE
+ DAA2B464F396EB4C946D766DDFEA6485712DF4197A9715602CDB562B6F596B5B
+ 4591CF3AE737B0CD9EB6B8943D757EB9C89B3A1919D5DC9AAE49465FC013E600
+ 00803B1F3C006FF9AD27C27B3EFFADF0E475B377012569926E1F36D01947B588
+ 48806408C913A1C9BCE356E6C859370F64763A671E593D93D9CCAA5F585A864D
+ A76CC2345CC2755BB731CA08BBB31BB06C0B5ADF4EB6287CABE34AA042AD3762
+ 3892F5DEA06D25366CAD0141B62109B8246C15F4A2AA265CE84BC84D33EFBD82
+ E93E275587AE833F7AD775BF7C15F849C67BAF85A69C80CEE4E5704E7106AE3C
+ 55AF1846F38648D901247B9B2B5B4B459E77DAADBC638D2D24C14A82746A9EC3
+ A6588F6749EBD8CB417A2D6BE2A8321B366EB6C610AE3F75ABA20E65E5A6D59A
+ C40D4DD1E16EBB72C033406406C4A26C4A154904DC16C67E2DE01786A3F1783C
+ 8EA36A3498A99B786F532F2E1F3A3C7EFB39DBD2FE0D9BA6C6D87A8E56F33742
+ 3E79E58911E087D47337619D6A78E7D7FA70F7FBDE6765A97A6904F7AAB1B833
+ 943261EB52BBC853ABB0A9CC314C9626AC992D9A6EDB69BD5C8BA626CB5B5981
+ 4499E1927B933D5C7BEA060568A437DBD6043D2D4A01326D22841AC8D4C69409
+ 30664A1D35540D63D26108218CAA548D86FD6ED3344746A3BE3936577DD299FA
+ 5BDBB684DBA6278A2494007085E6D357EACF6C847E5EFCF43375D5D44A3878EC
+ 10BCEEB26D9E7AAC95A6A3D6C90FAC4B2E90307A34B3D3659AEDE5CDD4441E2D
+ 5B20622AD73967BC3383A55A626862D969837105CF1D3A0AEB4FDF40603275D6
+ 8292576244E48C140C11B351CC10891029F784122CA2E30831CB1B8784655367
+ 9C17E99C710DDBEEBA6FBCEFB28BEA035967A2A997D38975C08FA2AA70CD8B9E
+ 4EFB1617AE12E4FF38487EE3A1B1750D643033D50E176C5F355C3DD3AB26263B
+ 9CB5B25CD2F1F25076BC57341634B1B186159996E6FBB061FB665030607DA986
+ 5981B384C8B5B596158D1212224394047D498D86504B351A9926D4FDC5C51155
+ C3C587C675E3FB4B4B9F5E3B5D7DE9B44D7CA8B5E1D5CBC3BDFF0DDCC4D9E0DA
+ 97FEEA0EF831F5104175499E73D9E5FF471B59C326BDB8DBCA266726B3B4714D
+ 27AC9C28A06C65E0CBCC32E7A933D97636CF6D8AA04492F276CE31812009B2CB
+ 70EFAE7DB076EB661005143000026C9C310A16008115095411908800843CA57C
+ 34CEFBDE269FE505A88C5B88C44D5D5F72F058A87B5DBDD9BA8F0D7D7B126DFB
+ D2541FFD28F899179D38018E8BD00555ADFFFCADCFFFB3DD7B1777F9BC7C6ED9
+ EE6CE94D77D8E7A57179AF85A64CBE5DB2290AB559165B99B3404E43931A9FB1
+ 4506623F066083071FDE0FAB4FD908020E55150C1816554030A00A88A080441E
+ 8111D0AB7360347AE894E252EC7A823E84E0D72E85E6B29D7B9A875CEBE881A9
+ 947B1D7FB5C2ECD7F497EA037E16C383D7C1B3DFF6E9F1E4CAE9AF64EDCE874C
+ 56DC0E9CF5B3B255FA326FE765ABEDB3B2642A0C8227850CC964266F778DC95A
+ 246A955D07CAC929287B6D38F0D05E9058034840D5444D53B38AA0A400AA8031
+ 248B800E90D91A6BD97AF659E6B23C2F7D9E1BE2DC4C74DD36C1FCD7F7EDB5EB
+ 8A896C5CF71FC4139204FF3E5AAB9F07CDE046B4E596FA2FFEF4530F22BBB9BC
+ 6CE5B6EC4493954334AE41E7ADC9AD63E3198C4B80B661E319980C196FC7D5B2
+ 0174D89E98244484437BF6C1CCBA55000D132882AAC7D834681CA9A818224250
+ 6C8C610BE0122250E69B366191DAAD818B751E07E3B423C4E689DFB863E9E859
+ 679F59FDD29DE0CF83CDDA0070BA5EF57B67CD8524D7F7FB83AF2F2F2D2E55C3
+ 01C410383649257122B2C9590FD679464683A0CCCCD06A4F269F950AE4B4D59B
+ 049B59983F7814C2B88F31D4A8123149C4941A044D9C522251604422636D8626
+ 136B30F7CE3A624F79E178B2431B464D7E6A7F09BBE5C404DCFCB95B0100607E
+ E77FFFC53AC19F590D9A4F82861A8707FFC6A4C1D09EBE3D1F3DB2A75942F693
+ C665CEE5A5F832579739B5D68A8269102912504236919025C6864368D818A729
+ 25B4D660538F613C1A83CB18880C3231C4D0A0B51E4405090015108818401515
+ 92326AAAEBDA205223AA14A3A4A38BE98EBD7BEE597CC633AF9457BFF4029CDA
+ FC9213EB00742F002A9EA3C3B943315FF3BB63B7EAF706975CDAF96ED636DF21
+ 8B03E4044CC24C84CC06B2CC1A9F59B4D6281121A01AEB7C6AB52682B15E8DF1
+ C0C6437BA20B0808D5F23284F112C450638A0DA4D490A440498251150244A3AA
+ 8C600488BCB18EDB593DA1E805C973A79D9D2FB1DBD9BFF373D45BFF2C7DE8FB
+ 5F39F1210000D05BBF0642FF468C47DEC7BEC874CDDAECCB68CDEEA8149B8492
+ 347282C625686C9268130A226144B243501C27899190229B2CB0CD13DB4CDB13
+ 254802A8AB01C43004808092028A08484A28124955304934485614D0650E2CD8
+ 36108223B6CE5BB3CDBB62E39AADCB601061CF5E3CB149F0EFE2C9F4202C3CA4
+ 3CF104B1B9D6A7CE2E1FDCF599E50F57CD5882984D51DDAA52A19B2B9499D78C
+ 317A057180C4880886AD468544AC209288381755A5BC15B1A9049C1B03400E92
+ 1A54604074201208C480A4A4CC6C18926343758C59C8B3A66C9A66534AE660CE
+ CDCA9DF7084755E1853F3C3902D88917020040357F8B021CA3F1E181B9E03CD9
+ 73D7F7EB5D21B9278538ECC5809978E0268218B40DA6844C0A8060450223221C
+ 1FBA820210025A655B8287118646212F2348AC01D9A3A4A4284A894855051193
+ 414436949C1228336BE6750D08AC1E0DA5DABFDF4F16F4A7736BCFFCFD745242
+ E08738DE059AD6AA161BC2ECE6978C96FACD5FD7E3EAFAA6AE1F8CA15E884D5D
+ 835400690C4C5A019963487CCC302DA514EAA61E89481091A00800C6668A2657
+ 6280F128029100A1804A449584004292122280052044328E896CE69A56488532
+ 4185ECCFCD7C3A7FC0E70200C091FD0F9E7807FC5D28745F068383FF5B893B18
+ FB9F6168EAE53BEEA96E018153EB1A56B1C10468463E434E1A2D6172486855C4
+ 000259EF150013A842686A88A122E73D080368125041204AA0AAC06C21860644
+ 0144C40022006680D8CF927662EE964DBFC9D63A1BDB29658FCC1F7CA0ABAAF3
+ 88080FDC77E7C9710000406BD5CB00C82A165B848B7278D6A9F86035ACAFAD46
+ D591500F41E2424BC27C1BD2C881D6C640ED332736CF7CB4C60404C1181310B1
+ 90F11A2302B25397659092800A00A102112202A2AA804822002240A3C42E0350
+ 62EBC7B90F3D05DF4284A9A4983FB0FB363C7CE0113C6DFB3927C7013FA498BE
+ 1A0040012081F970BAECFC8F7EFD2DFFF9A5C9BAECE964CC99ECDC6A4BA6638C
+ 7564FCB22A66922057490E14C05A42554424924612A4A82498D479874D2D6033
+ 03220A88C7F72400091135A980477448942C53CC158A5936CDFDE351759AB3FC
+ A5D3B75CA4272509FE83DF0B0F23DE76D795D4D40BFBEA51DAE54C3C2D9871C6
+ E21D789FA9B116C95A22624056000A2981A69828A548CCAC402CAA099208B105
+ 6C6A00EB048808D8182044101112516B08A231069A8612198732AE5BC670AF69
+ AA0A00E0AE7BBE0267ED78DAA323C0FCAEF7819B3A432F79CA2E3DB26FFEF0DE
+ 23E1DED8341754E37C8328F782FA606CDE186B959888101C917A2235CA6414C0
+ 8A4416397E999821C6A8488A2110382FC0E830A5A48880CC8422A844CAD65872
+ 66345733AEA91AB9ADD5993EA6F512017A05007D540498DCF2BBFF6F80F27559
+ B9661047E3D1CEB9C5F8374D33B64DBE3C9BE5ED6E59966D83AE6D29CB883300
+ B451002581082828A065643121345604D5398F755D41D38C41C440515A002454
+ 11456440F2ACD8242235929093CAC0FBECF0B05A30E8BBD5492D833F7D767031
+ 08CF6AB7C31124ED26943E114DB231280A4E555D8C439FE250635C164943AF52
+ 172154793D5ECE9A7175DC1F883A1E574ACC8A84508DC620E978694F2902A101
+ 4981D86408C489ACCD8A3CDB9D52B8BBEB3BB27FFFDDFCBD073E0FFDD1CE472F
+ 07FC5DB3D4FE6D9DD3AF35ABAB7B1EE90F9B9B535C827A142F945428483EF479
+ 59297206C425A21B596B466C14AAE1721153F4A1694441C93ACB8488CEA08A05
+ 5C5A5A86A2CC61341A61A7434A6C3086618A510135EE2382DBBCB338DF5FC4C9
+ 04B461C519DA2ED60A3FDA0254735F826274BF751C69614197E707669502AD54
+ E458476BC635FB26444A292968040591109A165B720A101121309101158E31A8
+ F30E091597874348512049046B2C02AA12214A6C8E89C8EDAAA9DF2AFD3D9393
+ B352CC6C1C4C7457CB68B4F0E83B209FFE6700000100C2C2DE8F5647EF1E5DB7
+ B008BBED48AECAB26695F7E319487ECA702E680D21107BE70621240B020911BD
+ 88F489A070967282084CA4ADC2C170149008A0694650981255D2988D038AB015
+ 0516EA201BBBCEDE323E3A540080A298787473C04F32B1EE457A6C797E213483
+ 43A11E7EB1AE4641D3B0E7CCB0D138ACAB61BDB038BF385C5898AFEA66FC5096
+ FB5DADB2757796676311A8EB0697EA00B5AA883108DE1128200C07CB52554389
+ 210E42080F11A49B2D854F38676E4F64A5D54EB47BD7C3BFFA58FC840C53F401
+ D87FFFCDF6DE07D2E9C6954FF6DEADB2D69DC7860A6B4C27CB73B0367FB82CDB
+ 07C9640791F93200CA538A456C469B4043C10C6858ED68142044C0A64950B68B
+ DA5BB793887757E3C16D4D35BAD3E2C22D939D2AB4D7FE4B3D21FB022782E6D8
+ F538AC024CAC7D9E7EE1C6F7AF71969E45A4EBADB181ADDD9E67D9C39DCEC46E
+ 76E5619B153329E9246AAA8D91CB9A68D7A14A8F74C08834610C6A88C80B8B95
+ 218243ED4E5B9B7175538A4BEF767977E07C313F33D31E933D4D1E1302A4C52F
+ 00F72E87F77EFA2668DC00CE7547332469A56835CBE8CC76BB2C9DCF45A97B3F
+ A2854EAF5520F091A2E0678CC7D213D173484756807688C8B4B3101532B7DC5F
+ E27DFBE6DCD6AD6BFE03B2D1BA0EF396E63FD776BBEBDBDFF33ABDF06D7BA055
+ 6E786C38E047B9E5B61BE1920B8F6F661E3B70933F74309170C9EDF6CC78C3E6
+ 1D0960644275645B5D8FDB21360BB15A3CAB3F92686C7BDADBFA3283548DA355
+ C3C97DFF7BBB9F3CBB6AF20F564EDBBF44DBE54670E0F34E3339B1359DB0ADB1
+ 93C95F7DE98BB86126A71D4FB838A9F6A13FDF87B215A710A049314068FA082A
+ BA7BCF21DBEBAD9AF43C7C86A1746C7ED90F732FAD7D3FD8DD7FF007FD67FEFA
+ 1517FD27A76E916DAE132BB68AAA00229D9C99E089E48A4B9FAA3B9E70713ADE
+ 4176A0D50166E79786836A908406D675968BB2359A9ADE80DFBE77B05B217D8D
+ A1FFD713ADE57BCA5CBEF0A4CB2EFAAA23B362F59AF38F8D23406F768B1C7F16
+ C13F0907FC24A3FE6E704E41C2006218631396B4B7E219F0C0CEEFF0695BCF4D
+ 3AFE18253D1D511791B229397228645FFDE2779E361C87B52F7AC5ABFE17E23F
+ 9957FD39FF5358BAEDC7CEF7DCFFB9E365353D024B073E09F5E04E0400F8E487
+ AEB9E357FE47E8B188EF5EF863E71B4EBFE2B8A5793D7457BF000E1C8E7A7C52
+ 6D6E7DE79BFFED96B7BEF625F0B8E45D6F7ECDDAEB3FF5E18FC1E3993FFFC407
+ FFF6A70E701F0F02FCEB97BFD8FFDA93CE9BBEE8FCB3767EF1D66F3C0EC3E075
+ BFD3FECBEB3E76FDE33A0CAEFDC8FBEFFAFFAA0AFCC273C99999EFFDBB97BF60
+ EBE35680E5A5FEB7B69DF3C48B1FB7027CEFDE7BEF5FEAF78BC7AD002D4AF785
+ A5231FFCF8C73FF063EBFF173FD6EBA9961184F10000000049454E44AE426082
+ }
+ end
+ object pnlInfo: TPanel
+ AnchorSideLeft.Control = Owner
+ AnchorSideTop.Control = rbExternal
+ AnchorSideTop.Side = asrBottom
+ AnchorSideRight.Control = Owner
+ AnchorSideRight.Side = asrBottom
+ AnchorSideBottom.Side = asrBottom
+ Left = 30
+ Height = 89
+ Top = 176
+ Width = 381
+ Anchors = [akTop, akLeft, akRight]
+ BorderSpacing.Left = 30
+ BorderSpacing.Top = 12
+ BorderSpacing.Right = 30
+ ClientHeight = 89
+ ClientWidth = 381
+ Color = clWhite
+ ParentColor = False
+ TabOrder = 4
+ Visible = False
+ object lblInfo: TLabel
+ AnchorSideLeft.Control = pnlInfo
+ AnchorSideTop.Control = pnlInfo
+ AnchorSideRight.Control = pnlInfo
+ Left = 1
+ Height = 34
+ Top = 1
+ Width = 366
+ Caption = 'Cqrlog is creatng your first log, it might take some time.'#10'Please be patient!'
+ Font.Color = clMaroon
+ ParentColor = False
+ ParentFont = False
+ ShowAccelChar = False
+ WordWrap = True
+ end
+ end
+ object lblError: TLabel
+ AnchorSideLeft.Control = Owner
+ AnchorSideBottom.Control = btnOK
+ AnchorSideBottom.Side = asrBottom
+ Left = 6
+ Height = 1
+ Top = 293
+ Width = 1
+ Anchors = [akLeft, akBottom]
+ BorderSpacing.Left = 6
+ Font.Color = clRed
+ ParentColor = False
+ ParentFont = False
+ end
+ object btnHelp: TSpeedButton
+ AnchorSideTop.Control = btnOK
+ AnchorSideRight.Control = btnOK
+ Left = 232
+ Height = 25
+ Top = 269
+ Width = 116
+ Anchors = [akTop, akRight]
+ BorderSpacing.Right = 6
+ Caption = '(Please read)'
+ Glyph.Data = {
+ F6030000424DF6030000000000003600000028000000100000000F0000000100
+ 200000000000C003000064000000640000000000000000000000FFFFFF00FFFF
+ FF0095564AFB89463BFF8A4437FF8B4437FF8C4538FF8D4639FF8E4739FF8F48
+ 3AFF90493BFF914A3CFF924B3DFF985346F8FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00784641F5DBDCDCFFD4DCDCFFD4DCDCFFD4DCDCFFD3DCDCFFD3DCDCFFD3DC
+ DCFFD3DCDCFFD3DCDCFFD6DCDCFFB0928B8BFFFFFF00FFFFFF00FFFFFF00FFFF
+ FF0096574BF589463BFF8A4437FF8B4437FF8C4538FF8D4639FF8E4739FF8F48
+ 3AFF90493BFF914A3CFF924B3DFF9A5547F0FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00AF7467F5AD7568FFB0705EFFB27160FFB47462FFB36E5CFFB56F5DFFBB78
+ 66FFBD7B68FFBF7D6BFFC17F6BFFB87563F7FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00B4776AF5AE7568FFB37362FFB57462FFB4705DFFDDBEB4FFE7D1CCFFBB79
+ 66FFBF7D69FFC17F6CFFC3816DFFBA7664F7FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00DAB2AAFAAF7668FFB97865FFBB7967FFB76F5AFFFDFAFAFFFFFFFFFFC485
+ 73FFC3826EFFC68470FFC88672FFBD7966E1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00AD7062F5B87D70FFBE7D69FFC07E6BFFBF7A66FFDFBCB1FFD9B5ACFFC67F
+ 68FFCA8873FFCC8A75FFCE8C76FFBF7D69E2FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00B17668F5BC8373FFC3826FFFC5836FFFC27A64FFFDFBFAFFFFFFFFFFC07B
+ 68FFCF8B73FFD18F79FFD3917BFFC37F6CE2FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00B27769F5C08676FFCA8773FFC88470FFCA846EFFE7C7BCFFFFFFFFFFFBF8
+ F7FFCF9888FFD69178FFD8967FFFC6846FE2FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00B2796AF5C58A7BFFCC866FFFE0B8ABFFC8856FFFCF876FFFE3B7A8FFFEFB
+ FAFFFFFFFFFFD19A89FFDE9A81FFCB8772E2FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00B07465F5C88C7AFFDFAC9CFFFFFFFFFFF8F2F0FFD28970FFD6896DFFEBC2
+ B6FFFFFFFFFFEED8D1FFE19B82FFCE8B76E2FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00DDB6AFFACB8E7BFFD58B73FFFBF4F1FFFFFFFFFFF9F5F3FFF9EAE5FFFFFF
+ FFFFFFFFFFFFE8B8A4FFEAA48AFFCE8A74E7FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00B27667F5D29784FFDE9B82FFDD9981FFEFCABBFFFBF1EEFFFBEFEBFFF9E9
+ E3FFEDB6A2FFEAA589FFEFAC91FFCE8B75E7FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00B67A6CF5D79B88FFE5A088FFE5A288FFE6A086FFE79F84FFE8A185FFEAA4
+ 88FFEEAA8EFFF0AE93FFF4B297FFCE8C76E7FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00E2A289A4D0927FD7D49078DAD39079DAD5927BDAD7947CDAD8947DDADB96
+ 7FDADB9880DADC9A81DAE19F86DBD4937CAEFFFFFF00FFFFFF00
+ }
+ OnClick = btnHelpClick
+ ShowHint = True
+ ParentShowHint = False
+ end
+end
diff --git a/src/fDbSqlSel.pas b/src/fDbSqlSel.pas
new file mode 100644
index 0000000..beee62f
--- /dev/null
+++ b/src/fDbSqlSel.pas
@@ -0,0 +1,383 @@
+unit fDbSqlSel;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,
+ ExtCtrls, Buttons;
+
+type
+
+ { TfrmDbSqlSel }
+
+ TfrmDbSqlSel = class(TForm)
+ btnHelp: TSpeedButton;
+ btnOK: TButton;
+ edtPort: TEdit;
+ edtIP: TEdit;
+ edtUserName: TEdit;
+ edtPassword: TEdit;
+ gbLocalUser: TGroupBox;
+ imLogo: TImage;
+ lblError: TLabel;
+ lblIp: TLabel;
+ lblPort: TLabel;
+ lblInfo: TLabel;
+ lblUsername: TLabel;
+ lblPass: TLabel;
+ lblQuestion: TLabel;
+ lblWelcome: TLabel;
+ pnlWelcome: TPanel;
+ pnlInfo: TPanel;
+ rbFolder: TRadioButton;
+ rbLocal: TRadioButton;
+ rbExternal: TRadioButton;
+ procedure btnHelpClick(Sender: TObject);
+ procedure btnOKClick(Sender: TObject);
+ procedure edtIPExit(Sender: TObject);
+ procedure edtPasswordExit(Sender: TObject);
+ procedure edtPortExit(Sender: TObject);
+ procedure edtUserNameExit(Sender: TObject);
+ procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
+ procedure FormCreate(Sender: TObject);
+ procedure rbExternalChange(Sender: TObject);
+ procedure rbFolderClick(Sender: TObject);
+ procedure rbLocalChange(Sender: TObject);
+ private
+ procedure ChkValues;
+ procedure MakeScript1;
+ procedure MakeScript2;
+ procedure ExecuteScript;
+
+ public
+ ip,port,
+ user,pass :String;
+ loc,rdy,
+ Acon,Rmbr :Boolean;
+ end;
+
+const
+ C_PATH ='/bin:/usr/bin/:/usr/local/bin/:~/.local/bin:/sbin:/usr/sbin:/usr/local/sbin';
+ C_HEIGHT = 230;
+var
+ frmDbSqlSel: TfrmDbSqlSel;
+
+implementation
+
+{ TfrmDbSqlSel }
+
+uses fDBConnect, dUtils;
+
+procedure TfrmDbSqlSel.rbLocalChange(Sender: TObject);
+begin
+ if rbLocal.Checked then
+ Begin
+ btnOK.Enabled:=True;
+ lblError.Caption:='';
+ lblError.Visible:=False;
+ gbLocalUser.Visible:=True;
+ frmDbSqlSel.Height:=C_HEIGHT+ gbLocalUser.Height+btnOK.Height;
+ edtIp.ReadOnly:=True;
+ edtIp.Font.Color:=clGray;
+ edtport.ReadOnly:= True;
+ edtport.Font.Color:=clGray;
+ edtIP.Text:='localhost';
+ edtPort.Text:='3306';
+ repaint;
+ edtUsername.SetFocus;
+ edtUsername.SelectAll;
+ end
+ else
+ frmDbSqlSel.Height:=C_HEIGHT;
+end;
+
+procedure TfrmDbSqlSel.rbExternalChange(Sender: TObject);
+begin
+ if rbExternal.Checked then
+ Begin
+ btnOK.Enabled:=True;
+ lblError.Caption:='';
+ lblError.Visible:=False;
+ gbLocalUser.Visible:=True;
+ frmDbSqlSel.Height:=C_HEIGHT+ gbLocalUser.Height+btnOK.Height;
+ edtIp.ReadOnly:=False;
+ edtIp.Font.Color:=clDefault;
+ edtport.ReadOnly:= False;
+ edtport.Font.Color:=clDefault;
+ edtIP.Text:='';
+ edtPort.Text:='3306';
+ repaint;
+ edtIP.SetFocus;
+ edtIP.SelectAll;
+ end
+ else
+ frmDbSqlSel.Height:=C_HEIGHT;
+end;
+
+procedure TfrmDbSqlSel.rbFolderClick(Sender: TObject);
+begin
+ rbFolder.SetFocus;
+ lblError.Caption:='';
+ lblError.Visible:=False;
+ gbLocalUser.Visible:=False;
+ btnOK.Enabled:=True;
+end;
+
+procedure TfrmDbSqlSel.MakeScript1; //"create_cqr_user.sh"
+var
+ UsrHome:string;
+ f :TextFile;
+Begin
+ UsrHome:=dmUtils.GetHomeDirectory;
+
+ AssignFile(f,UsrHome+'create_cqr_user.sh');
+ rewrite(f);
+ Writeln(f,'#!/bin/bash');
+ Writeln(f);
+ Writeln(f,'echo -e "\nCreating user '+user+'@localhost for Cqrlog use\n"');
+ Writeln(f,'sudo -p "Give user %u password for sudo: " mysql< /tmp/cqrSQLUsrCreate');
+ Writeln(f,'[ $status -ne 0 ] && echo -e "\nUser creation FAILED !\n\nCheck error !"');
+ Writeln(f,'read -p "Press enter to continue"');
+ Writeln(f,'echo Done! > /tmp/cqrBashDone');
+ Writeln(f,'exit $status');
+ closeFile(f);
+ dmUtils.ExecuteCommand('chmod a+rwx '+UsrHome+'create_cqr_user.sh');
+
+end;
+procedure TfrmDbSqlSel.MakeScript2; //"backup_all_cqr.sh"
+var
+ UsrHome:string;
+ f :TextFile;
+Begin
+ UsrHome:=dmUtils.GetHomeDirectory;
+
+ AssignFile(f,UsrHome+'backup_all_cqr.sh');
+ rewrite(f);
+ Writeln(f,'#!/bin/bash');
+ Writeln(f);
+ Writeln(f,'echo -e "\nCreating backup of all Cqrlog logs in database to /tmp/allcqrlogs.sql\n"');
+ Writeln(f,'$(mysql -u'+user+' -p'+pass+' -B -N -h'+ip+' -P'+port+' -e " show databases like '+#$27+'cqr%'+#$27+'" |\');
+ Writeln(f,'xargs echo -n mysqldump -q -h'+ip+' -P'+port+' -u'+user+' -p'+pass+' --databases) > /tmp/allcqrlogs.sql');
+ Writeln(f,'echo -e "Done!\nCopy backup file to your safe place.\nIt will be erased from /tmp at next Linux start\n\nTo restore all Cqrlog logs use command:\n"');
+ Writeln(f,'echo "mysql -h'+ip+' -P'+port+' -u'+user+' -p'+pass+' < /tmp/allcqrlogs.sql"');
+ closeFile(f);
+ dmUtils.ExecuteCommand('chmod a+rwx '+UsrHome+'backup_all_cqr.sh');
+
+end;
+
+Procedure TfrmDbSqlSel.ExecuteScript;
+var
+ UsrHome,
+ msg :string;
+ c :integer;
+Begin
+ UsrHome:=dmUtils.GetHomeDirectory;
+ //try to find three well-known terminals
+ msg:=FileSearch('xterm',C_PATH,true);
+ if msg='' then
+ msg:=FileSearch('gnome-terminal',C_PATH,true);
+ if msg='' then
+ msg:=FileSearch('lxterminal',C_PATH,true);
+ if msg='' then
+ ShowMessage('Cqrlog did not find command-line terminal from your system!')
+ else
+ dmUtils.ExecuteCommand(msg+' -e '+UsrHome+'create_cqr_user.sh');
+
+ c:=60; //max timeout in seconds
+ repeat //we need this stupid wait because [poWaitOnExit] did not work with Mint 20 !
+ Begin
+ sleep(1000);
+ Application.ProcessMessages;
+ dec(c);
+ end;
+ until ((msg='') or (c<1) or (FileExists('/tmp/cqrBashDone')));
+
+ if FileExists('/tmp/cqrSQLUsrCreate') then
+ Begin
+ msg:= 'It looks like SQL user addition went ok.'
+ +LineEnding+'You can press OK now.'
+ +LineEnding+LineEnding;
+ end
+ else
+ Begin
+ msg:= 'If you did not see terminal and enter your password there'
+ +LineEnding+ 'then do this:'
+ +LineEnding+'Open linux command-line terminal and type:'+LineEnding+UsrHome+'create_cqr_user.sh (and press enter)'
+ +LineEnding+LineEnding+'After that is done without errors close terminal and press OK here'
+ +LineEnding+LineEnding;
+ end;
+
+
+ msg:=msg+'Backup of all Cqrlog SQL databases can be done at any '
+ +LineEnding+'time from command-line terminal by typing:'
+ +LineEnding+UsrHome+'backup_all_cqr.sh (and pressing enter)';
+
+ ShowMessage(msg);
+ Application.ProcessMessages;
+ end;
+
+procedure TfrmDbSqlSel.btnOKClick(Sender: TObject);
+
+begin
+ btnOK.SetFocus;
+ gbLocalUser.Visible:=True; //these lines are needed for RPi graphics
+ frmDbSqlSel.Height:=C_HEIGHT+ gbLocalUser.Height+btnOK.Height; //to show lblInfo ok in default selection !?!?!
+ gbLocalUser.SendToBack;
+ gbLocalUser.Visible:=False;
+ frmDbSqlSel.Height:=C_HEIGHT+pnlInfo.Height;
+
+ if rbExternal.Checked then
+ begin
+ //set info text and return value
+ lblInfo.Caption:='Cqrlog is connecting to SQL server and '+LineEnding
+ +'creating a new log if needed. Please be patient!';
+ pnlInfo.Visible:=true;
+ pnlInfo.BringToFront;
+ pnlInfo.Repaint;
+ ip :=edtIp.Text;
+ port:=edtPort.Text;
+ user:=edtUsername.Text;
+ pass:=edtPassword.Text;
+ loc:=False;
+ Acon:=True;
+ Rmbr:=True;
+ MakeScript2;
+ end;
+ if rbLocal.Checked then
+ Begin
+ lblInfo.Caption:='Cqrlog is connecting to SQL server and '+LineEnding
+ +'creating a new log if needed. Please be patient!';
+ pnlInfo.Visible:=true;
+ pnlInfo.BringToFront;
+ pnlInfo.Repaint;
+ ip :=edtIp.Text;
+ port:=edtPort.Text;
+ user:=edtUsername.Text;
+ pass:=edtPassword.Text;
+ loc:=False;
+ Acon:=True;
+ Rmbr:=True;
+ //create script for making sql user, save it and then exceute it
+ //set values to database connect and exit
+ MakeScript1;
+ MakeScript2;
+ ExecuteScript;
+ end;
+
+ btnOK.Visible:=False;
+ btnHelp.Visible:=False;
+ pnlInfo.Visible:=True;
+ pnlInfo.BringToFront;
+ pnlInfo.Repaint;
+ rdy:=true;
+ Application.ProcessMessages;
+ sleep(4000);
+
+ Close;
+end;
+
+procedure TfrmDbSqlSel.btnHelpClick(Sender: TObject);
+var
+ wb :string;
+begin
+ wb:=FileSearch('xdg-open',C_PATH,true);
+ if wb<>'' then dmUtils.RunOnBackground(wb+' /usr/share/cqrlog/help/firsttime.html');
+end;
+
+procedure TfrmDbSqlSel.ChkValues;
+Begin
+ btnOK.Enabled:=True;
+ lblError.Caption:='';
+ lblError.Visible:=False;
+ if edtIP.Text='' then
+ Begin
+ btnOK.Enabled:=False;
+ lblError.Caption:='IP address can not be empty !';
+ lblError.Visible:=True;
+ exit;
+ end;
+ if edtPort.Text='' then
+ Begin
+ btnOK.Enabled:=False;
+ lblError.Caption:='Port can not be empty !';
+ lblError.Visible:=True;
+ exit;
+ end;
+ if length(edtUsername.Text)<4 then
+ Begin
+ btnOK.Enabled:=False;
+ lblError.Caption:='Username must be at least 4 characters long !';
+ lblError.Visible:=True;
+ exit;
+ end;
+ if edtPassword.Text='' then
+ Begin
+ btnOK.Enabled:=False;
+ lblError.Caption:='Password can not be empty !';
+ lblError.Visible:=True;
+ exit;
+ end;
+end;
+procedure TfrmDbSqlSel.edtIPExit(Sender: TObject);
+begin
+ ChkValues;
+end;
+
+procedure TfrmDbSqlSel.edtPasswordExit(Sender: TObject);
+begin
+ ChkValues;
+end;
+
+procedure TfrmDbSqlSel.edtPortExit(Sender: TObject);
+begin
+ ChkValues;
+end;
+
+procedure TfrmDbSqlSel.edtUserNameExit(Sender: TObject);
+begin
+ ChkValues;
+end;
+
+procedure TfrmDbSqlSel.FormClose(Sender: TObject; var CloseAction: TCloseAction
+ );
+begin
+ rdy := True;
+end;
+
+procedure TfrmDbSqlSel.FormCreate(Sender: TObject);
+
+begin
+ ip :='localhost';
+ port:='64000';
+ user:='cqrlog';
+ pass:='cqrlog';
+ loc :=True;
+ rdy := False;
+ Acon:=False;
+ Rmbr:=False;
+ frmDbSqlSel.Height:=C_HEIGHT;
+ lblError.Caption:='';
+ lblError.Visible:=False;
+ DeleteFile('/tmp/cqrSQLUsrCreate');
+ DeleteFile('/tmp/cqrBashDone');
+end;
+
+
+
+
+initialization
+ {$I fDbSqlSel.lrs}
+
+end.
+
diff --git a/src/uVersion.pas b/src/uVersion.pas
index 538d95a..b2ae2c4 100644
--- a/src/uVersion.pas
+++ b/src/uVersion.pas
@@ -18,10 +18,7 @@ const
cRELEAS = 2;
cBUILD = 1;
-
-
- cBUILD_DATE = '2022-04-06';
-
+ cBUILD_DATE = '2022-04-09';
implementation