1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 03:28:20 +02:00

Embedded console / terminal support

This commit is contained in:
Brian Fiete 2024-07-23 07:56:23 +02:00
parent 60817eec48
commit 20a8e3327c
28 changed files with 2317 additions and 690 deletions

View file

@ -54,7 +54,8 @@ enum BfpResult
BfpResult_PartialData,
BfpResult_TempFileError,
BfpResult_Timeout,
BfpResult_NotEmpty
BfpResult_NotEmpty,
BfpResult_PipeListening
};
enum BfpSystemResult
@ -77,7 +78,8 @@ enum BfpFileResult
BfpFileResult_PartialData = BfpResult_PartialData,
BfpFileResult_InsufficientBuffer = BfpResult_InsufficientBuffer,
BfpFileResult_Timeout = BfpResult_Timeout,
BfpFileResult_NotEmpty = BfpResult_NotEmpty
BfpFileResult_NotEmpty = BfpResult_NotEmpty,
BfpFileResult_PipeListening = BfpResult_PipeListening
};
typedef void(*BfpCrashInfoFunc)();
@ -197,6 +199,7 @@ enum BfpSpawnFlags
BfpSpawnFlag_ErrorDialog = 0x400,
BfpSpawnFlag_Window_Hide = 0x800,
BfpSpawnFlag_Window_Maximized = 0x1000,
BfpSpawnFlag_NoActivateWindow = 0x2000,
};
enum BfpSpawnResult
@ -420,7 +423,7 @@ enum BfpFileStdKind
BFP_EXPORT BfpFile* BFP_CALLTYPE BfpFile_Create(const char* name, BfpFileCreateKind createKind, BfpFileCreateFlags createFlags, BfpFileAttributes createdFileAttr, BfpFileResult* outResult);
BFP_EXPORT BfpFile* BFP_CALLTYPE BfpFile_GetStd(BfpFileStdKind kind, BfpFileResult* outResult);
BFP_EXPORT intptr BFP_CALLTYPE BfpFile_GetSystemHandle(BfpFile* file);
BFP_EXPORT BfpFile* BFP_CALLTYPE BfpFile_GetFromHandle(intptr handle, BfpFileResult* outResult);
BFP_EXPORT void BFP_CALLTYPE BfpFile_Release(BfpFile* file);
BFP_EXPORT void BFP_CALLTYPE BfpFile_Close(BfpFile* file, BfpFileResult* outResult);
BFP_EXPORT intptr BFP_CALLTYPE BfpFile_Write(BfpFile* file, const void* buffer, intptr size, int timeoutMS, BfpFileResult* outResult);

View file

@ -1689,6 +1689,13 @@ public:
creationFlags |= CREATE_NO_WINDOW;
// set up the environment block parameter
if ((flags & BfpSpawnFlag_NoActivateWindow) != 0)
{
startupInfo.dwFlags |= STARTF_USESHOWWINDOW;
startupInfo.wShowWindow = SW_SHOWNOACTIVATE;
}
// set up the environment block parameter
WCHAR* targetStrPtr = NULL;
UTF16String targetStrW;
if ((flags & BfpSpawnFlag_ArgsIncludesTarget) != 0)
@ -1726,7 +1733,7 @@ public:
String str8(env, envSize);
envW = UTF8Decode(str8);
envVoidPtr = (void*)envW.c_str();
startupInfo.dwFlags |= CREATE_UNICODE_ENVIRONMENT;
creationFlags |= CREATE_UNICODE_ENVIRONMENT;
}
else
{
@ -2998,6 +3005,11 @@ BFP_EXPORT BfpFile* BFP_CALLTYPE BfpFile_Create(const char* path, BfpFileCreateK
return bfpFile;
}
BFP_EXPORT BfpFile* BFP_CALLTYPE BfpFile_GetFromHandle(intptr handle, BfpFileResult* outResult)
{
return new BfpFile((HANDLE)handle);
}
BFP_EXPORT BfpFile* BFP_CALLTYPE BfpFile_GetStd(BfpFileStdKind kind, BfpFileResult* outResult)
{
HANDLE h = INVALID_HANDLE_VALUE;
@ -3235,6 +3247,9 @@ BFP_EXPORT intptr BFP_CALLTYPE BfpFile_Read(BfpFile* file, void* buffer, intptr
int lastError = ::GetLastError();
switch (lastError)
{
case ERROR_PIPE_LISTENING:
OUTRESULT(BfpFileResult_PipeListening);
break;
case ERROR_BROKEN_PIPE: // Just an EOF
OUTRESULT(BfpFileResult_Ok);
break;