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:
parent
60817eec48
commit
20a8e3327c
28 changed files with 2317 additions and 690 deletions
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue