This commit is contained in:
Pavel 2024-02-19 11:28:31 +03:00
parent a0d0f1d735
commit 128a2dc369
10 changed files with 233 additions and 15 deletions

View File

@ -82,9 +82,6 @@ begin
inherited;
end;
var
runing:Boolean=False;
procedure re_init_tty; register;
var
i:Integer;
@ -244,8 +241,6 @@ begin
Result:=nil;
if Item.FLock then Exit;
if runing then Exit;
SetStdHandle(STD_OUTPUT_HANDLE,cfg.hOutput);
SetStdHandle(STD_ERROR_HANDLE ,cfg.hError );
@ -326,7 +321,6 @@ begin
Result.g_ipc.kevent(@kev,1);
runing:=True;
end;

View File

@ -1,7 +1,7 @@
object frmMain: TfrmMain
Left = 527
Left = 396
Height = 343
Top = 146
Top = 211
Width = 623
Caption = 'fpPS4'
ClientHeight = 343
@ -11,8 +11,8 @@ object frmMain: TfrmMain
OnCreate = FormCreate
object Pages: TPageControl
Left = 0
Height = 343
Top = 0
Height = 275
Top = 68
Width = 623
ActivePage = TabList
Align = alClient
@ -20,12 +20,12 @@ object frmMain: TfrmMain
TabOrder = 0
object TabList: TTabSheet
Caption = 'Games'
ClientHeight = 315
ClientHeight = 247
ClientWidth = 615
PopupMenu = MenuList
object ListGrid: TStringGrid
Left = 0
Height = 315
Height = 247
Top = 0
Width = 615
Align = alClient
@ -62,6 +62,44 @@ object frmMain: TfrmMain
Caption = 'Log'
end
end
object MainToolBar: TToolBar
Left = 0
Height = 68
Top = 0
Width = 623
AutoSize = True
ButtonHeight = 64
ButtonWidth = 64
EdgeBorders = [ebLeft, ebTop, ebRight, ebBottom]
Images = MainImageList
ImagesWidth = 64
TabOrder = 1
object TBPlay: TToolButton
Left = 3
Top = 2
ImageIndex = 0
Style = tbsCheck
OnClick = TBPlayClick
end
object TBPause: TToolButton
Left = 71
Top = 2
ImageIndex = 1
OnClick = TBPauseClick
end
object TBStop: TToolButton
Left = 139
Top = 2
ImageIndex = 2
OnClick = TBStopClick
end
object TBConfig: TToolButton
Left = 207
Top = 2
Caption = 'TBConfig'
ImageIndex = 6
end
end
object MenuList: TPopupMenu
Left = 171
Top = 142
@ -95,4 +133,72 @@ object frmMain: TfrmMain
OnClick = MIDelClick
end
end
object MainImageList: TImageList
AllocBy = 7
Height = 64
Width = 64
Left = 241
Top = 144
Bitmap = {
4C7A070000004000000040000000340700000000000078DAEDDD6DA815451CC7
F1311F8A527BF0018C2C82BCA18904051A61192589BDAB171156221244595448
3E5CEF3D57B4B0C84A2A8AD00CA10C312AACC427C42C7C119441655EA5A232B1
C0EBF353EAE93F348B8B9D7BCFEC9E39BBB33BDF1FFC88E0B0673FE3EED9DDD9
B1942284104208A99BABA51BA447A55BA4E302F3AF9356633D2B7D473A3410FF
F1F3FC51BBA44F4AFB94DC5FADD31DD28901FBA3AE910E0FD8AF7B44DA21BD30
507FD49DD24901FBE3E7C43501FBABE6BE419F131705EA8FBA4B7A4FC0FEF839
716DC07EDD63D245D2FE81FAA3FE2E7D38607FD48DD25101FB754F4997480704
EA8FBAC7B373A29A53374B4707ECD7FDC79C130303F547FDD39C13BD02F547FD
423A2660BFEE19E90AE9A040FD517F3373B3A1FA755706EEEFC2CFF11FF0EFDF
70AE7F41F9B7047AFF13EAFDEFA9809F7F427DFEFD23D0F98F90E7BFF4FCE748
E6BF837AFFD1A18AF14E90F75FEEDE7F4E56C58BABF7DF455D13C2FA8774EB5F
EE56E5489AF54FFD5479C2FAB79EBB5D3A5E9537DDAD7FDD2F9D21EDADCA9D75
35E69F964987A830A2DFB1AC37BF6D9BA4631521841042082184104248B9F39C
F4A4AA3F2FA83FB3C0627B0B1D6FAFD9B1D9D7A8272CB677C2F1F69A9DA4EF42
B2DE1E7EFCF8F1E3C78F1F3F7EFCF8F1E3C78F1F3F7EFCF8F1E3C78F1F3F7EFC
F8F1E3C78F1F3F7EFCF8F1E3C78F1F3F7EFCF8CFC5F57AE5A2AD7F5E60B9CFFA
33F373D81E21841042082184104248BD2C57FFFD371EAB05EB69E95207FED305
B4C7C7A0D1540B5EFCF8F1E3C78F1F3F7EFCF8F1E3C78F1F3F7EFCF8F1E3C78F
1F3F7EFCF8F1E3C78F1F3F7EFCF8F1E3C78F1F3F7EFCF843F287BEFE795941C7
40EFF3DB8A10420821841042082189D3D1D1D122ADC4DA12927DCE9C391BE49F
D5A8B366CDFA36947130CE6AADB6B6B67E5AF631E8C9AF2BC7C681F6F6F68565
1D877AFED839B1B38CE784AD3F763C6C28D33824F5479573E2FD328C415ABF39
273A8B7E2C34E28F9D131B8B3A0E2EFC51DBDADA56166D0C5CFACD39B1BB48C7
826B7FEC9CD85C847168963FEABC79F356F93C06CDF6EBCE9E3D7BAFAFC74216
FED8387CE5DB3864E98F5D2756FB320679F87D3A27F2F2C7C6615B9EE390B73F
769DF8308F31F0C51F3B273AB21C079FFC799C133EFA63F36F9F347B0C7CF6C7
E65B5A42F59B56F0E3C7CFEF1FD73FEE7FB8FFE5F987E75FE63F98FF62FE93F9
6FBFFDBEBF13E4FD17EF3F5DD98BB82684F50F0DAD7F29FC9AB006D63FBD17E2
FAA750D7BFC9B1FE7D88EB1FE5CFBBAB52A92C0871FD6B20EB9F835EFF1E8D41
A87FFF81104208218410424898A9F12C6CD396ACB69781BFE2727D9AEBEDE1C7
8F1F3F7EFCF8F1E3C78F1F3F7EFCF8F1E3C78F1F3F7EFCF8F1E3C78F1F3F7EFC
F8F1E3C78F1F3F7EFCF8F1E3C78F1F3F7EFCF8F9FB0F8410420821841042CA91
94CFA3BEB5A5017F11FE7F374D9B1FC18F1F3F7EFCF8F1E3C78F1F3F7EFCF8F1
E3C78F1F3F7EFCF8F1E3C78F1F3F7EFCF8F1E3C78F1F3F7EFCF8F1E3C78F1F3F
7EFCF80BE20FFAEF3F1042082184104208212475A64B774ACF4AABB1EE912E92
F62BB1FDDEF3CCB5FA5289FD6B2DFC07A51794D4FF83855FF78A02DA2E97F671
E41F54673B433C72DF2CFDCEECF771E90BD2BE353ED74BBADFD27F4337DF3545
BACF7C669FF9F73C33417AB8C6FEAFAE3106F75BDA755FADF15D4F75F3D96772
B2DF253DDA83619B7492F446E95CE9B1047E7D6D7C4B3A563A4EBAB4CEE76766
6C1F6F8EF5AA479D91A17FB76776DD13D2AB32B00FF3D01EF5BE0CFC7D3D3CF6
A38ECDE8F86FF5D0BED65C63B388FE9ED73DB27F9DC33DA31E83CF13EEE769E9
C7D269D291D281D28BA5D79967A377A547126EF367E96539DD03DC96603FD74B
475BFEBE2E4DB0DDBCEE7F74C658EEE3A214CF7453CD35ADDEB6A7E7E8EFB0D8
BFC50D6C7F8AC5F63FCBC1DD5FFAB8F4649D7DDB2AEDDDE077BD613106AF35F1
99501FB74F48B79BE7B7FDE677CCE61EDEC5F578B0F480E57916ED9F9E5F9B6F
F13C6E9367535E93B63AFC335892721FDA1D7CF7AF29BFDBE5EFF21D29F7E127
07DF9DF69E648243FF8094FB702847FF08C7BF43870AE677BDEEEE70C1FC2E8F
FF81391EFFBFA4FC6E97735277A6DC871F1D7CF7CC025FFFE63A7ACE7B4CFA4D
8AFB9F718EEE7F0E5A7ABBCCFE759A6B7F1FD59C5C6279FFFBA583FBDF372DDC
2FAB7CDE89D83CFFBCD2C0F61FB2D8FE470578FE7D31C57130CDE2F8AA9A31CA
2B49E63F3699F1AA972BA5CB3D9DF76F74FEEB8C748D99B31825BDD4CC7F8D30
73D72B54CFEF946AB5D3DC1F676DF769FE736BC663D0E6E1FC7756BF837A7D8E
AFEF3FC664E0F7F9FDD7E48C8E814E0FEDFA77736846FE5B55B2F7F959F4D18C
AF0113EB8C81BEF7D5EB1F6E925612FE6644EB1FF438DF2EFD40F9F90EA4BB35
20ABD4FFD7BF4C4DE05F9CE09AF3B4CA37B74877A873EB9F9EEFE6B9AB778239
9CEBBBF9AE47D4B935547F491F54FE64B0C5F3A6EDBA910175DE470C53D9BDEB
761917FE22679385FD6F55DE3CA0ECDE159739FA3ABDAB867BAF2AFFFA774208
218478907F01A6F0B4E2
}
end
end

View File

@ -23,10 +23,15 @@ uses
host_ipc;
type
TMainButtonsState=(mbsStopped,
mdsStarted,
mdsRunned,
mdsSuspended);
{ TfrmMain }
TfrmMain = class(TForm)
MainImageList: TImageList;
MIDevide3: TMenuItem;
MIRun: TMenuItem;
MIEdit: TMenuItem;
@ -40,6 +45,11 @@ type
ListGrid: TStringGrid;
TabList: TTabSheet;
TabLog: TTabSheet;
MainToolBar: TToolBar;
TBPlay: TToolButton;
TBPause: TToolButton;
TBStop: TToolButton;
TBConfig: TToolButton;
procedure FormCreate(Sender: TObject);
procedure OnIdleUpdate(Sender:TObject;var Done:Boolean);
@ -48,6 +58,9 @@ type
procedure MIDelClick(Sender: TObject);
procedure MIEditClick(Sender: TObject);
procedure MIRunClick(Sender: TObject);
procedure TBPauseClick(Sender: TObject);
procedure TBPlayClick(Sender: TObject);
procedure TBStopClick(Sender: TObject);
private
public
@ -67,6 +80,8 @@ type
FLogUpdateTime:QWORD;
FMainButtonsState:TMainButtonsState;
procedure ReadIniFile;
procedure LoadItemIni(Item:TGameItem);
procedure SaveItemIni(Item:TGameItem);
@ -79,6 +94,7 @@ type
procedure DoEdit(Sender: TObject);
procedure LogEnd;
procedure ClearLog;
procedure SetButtonsState(s:TMainButtonsState);
end;
var
@ -163,7 +179,8 @@ begin
end;
if ((kev[i].fflags and NOTE_EXEC)<>0) then
begin
ShowMessage('NOTE_EXEC pid:'+IntToStr(kev[i].ident));
//ShowMessage('NOTE_EXEC pid:'+IntToStr(kev[i].ident));
Form.SetButtonsState(mdsRunned);
end;
end;
@ -322,6 +339,8 @@ begin
Pages.ActivePageIndex:=0;
Application.AddOnIdleHandler(@OnIdleUpdate,False);
SetButtonsState(mbsStopped);
end;
procedure TfrmMain.OnIdleUpdate(Sender:TObject;var Done:Boolean);
@ -338,9 +357,18 @@ begin
end;
if (FGameProcess<>nil) then
if (FGameProcess.g_ipc<>nil) then
begin
FGameProcess.g_ipc.Update(IpcHandler);
if (FGameProcess.g_ipc<>nil) then
begin
FGameProcess.g_ipc.Update(IpcHandler);
end;
if FGameProcess.is_terminated then
begin
TBStopClick(Sender);
end;
end;
end;
@ -430,6 +458,8 @@ var
aRow:Integer;
cfg:TGameRunConfig;
begin
if (FGameProcess<>nil) then Exit;
aRow:=ListGrid.Row;
if (aRow=0) then Exit;
@ -448,6 +478,46 @@ begin
cfg.fork_proc:=True;
FGameProcess:=run_item(cfg,Item);
SetButtonsState(mdsStarted);
end;
procedure TfrmMain.TBPlayClick(Sender: TObject);
begin
if (FGameProcess<>nil) then
begin
//resume
FGameProcess.resume;
SetButtonsState(mdsRunned);
end else
begin
//run
MIRunClick(Sender);
end;
end;
procedure TfrmMain.TBPauseClick(Sender: TObject);
begin
if (FGameProcess<>nil) then
begin
//suspend
FGameProcess.suspend;
SetButtonsState(mdsSuspended);
end;
end;
procedure TfrmMain.TBStopClick(Sender: TObject);
begin
if (FGameProcess<>nil) then
if (FGameProcess.g_fork) then //only forked
begin
//terminate
FGameProcess.stop;
SetButtonsState(mbsStopped);
FreeAndNil(FGameProcess);
//
Pages.ActivePage:=TabList;
end;
end;
procedure TfrmMain.MIDelClick(Sender: TObject);
@ -555,6 +625,54 @@ begin
SaveItemIni(Item);
end;
procedure TfrmMain.SetButtonsState(s:TMainButtonsState);
begin
FMainButtonsState:=s;
case s of
mbsStopped:
begin
TBPlay .Enabled:=True;
TBPause.Enabled:=False;
TBStop .Enabled:=False;
//
TBPlay .ImageIndex:=0;
TBPause.ImageIndex:=1+3;
TBStop .ImageIndex:=2+3;
end;
mdsStarted:
begin
TBPlay .Enabled:=False;
TBPause.Enabled:=False;
TBStop .Enabled:=False;
//
TBPlay .ImageIndex:=0+3;
TBPause.ImageIndex:=1+3;
TBStop .ImageIndex:=2+3;
end;
mdsRunned:
begin
TBPlay .Enabled:=False;
TBPause.Enabled:=True;
TBStop .Enabled:=True;
//
TBPlay .ImageIndex:=0+3;
TBPause.ImageIndex:=1;
TBStop .ImageIndex:=2;
end;
mdsSuspended:
begin
TBPlay .Enabled:=True;
TBPause.Enabled:=False;
TBStop .Enabled:=True;
//
TBPlay .ImageIndex:=0;
TBPause.ImageIndex:=1+3;
TBStop .ImageIndex:=2;
end;
end;
end;
end.

BIN
icons/211751_gear_icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 972 B

BIN
icons/211871_pause_icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 479 B

BIN
icons/211876_play_icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

BIN
icons/211931_stop_icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 403 B