X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FApplications%2Faxwin3_src%2FWM%2Fmain.c;h=105039539b4470d5e5d76762ce5ca712f338c96b;hb=69597a188bf638485ea83b7608430f92080c1855;hp=c14cbb5dee676edec7771226b297c82fbc2f09b7;hpb=3453712bc891df6b6b5283e4a7539b146112c8bd;p=tpg%2Facess2.git diff --git a/Usermode/Applications/axwin3_src/WM/main.c b/Usermode/Applications/axwin3_src/WM/main.c index c14cbb5d..10503953 100644 --- a/Usermode/Applications/axwin3_src/WM/main.c +++ b/Usermode/Applications/axwin3_src/WM/main.c @@ -9,18 +9,13 @@ #include #include #include -#include +#include +#include "include/lowlevel.h" // === IMPORTS === extern void Video_Setup(void); extern void WM_Initialise(void); -extern int Renderer_Menu_Init(void); -extern int Renderer_Widget_Init(void); -extern int Renderer_Background_Init(void); -extern int Renderer_Framebuffer_Init(void); -extern int Renderer_RichText_Init(void); extern void WM_Update(void); -extern void WM_Hotkey_Register(int nKeys, uint32_t *Keys, const char *ActionName); // === PROTOTYPES === void ParseCommandline(int argc, char **argv); @@ -39,6 +34,8 @@ const char *gsMouseDevice = NULL; #define __INSTALL_ROOT "/Acess/Apps/AxWin/3.0" const char *gsInstallRoot = __INSTALL_ROOT; +const char *gsInterfaceApp = __INSTALL_ROOT"/AxWinUI"; + int gbNoSpawnUI = 0; // === CODE === /** @@ -59,30 +56,20 @@ int main(int argc, char *argv[]) IPC_Init(); Input_Init(); - Renderer_Menu_Init(); - Renderer_Widget_Init(); - Renderer_Background_Init(); - Renderer_Framebuffer_Init(); - Renderer_RichText_Init(); WM_Initialise(); - - // TODO: Config - uint32_t keys[4]; - keys[0] = KEYSYM_LEFTGUI; keys[1] = KEYSYM_r; - WM_Hotkey_Register(2, keys, "Interface>Run"); // Spawn interface root + if( !gbNoSpawnUI ) { int server_tid = gettid(); _SysDebug("server_tid = %i", server_tid); - static char csInterfaceApp[] = __INSTALL_ROOT"/AxWinUI"; char server_info[] = "AXWIN3_SERVER=00000"; const char *envp[] = {server_info, NULL}; - const char *argv[] = {csInterfaceApp, NULL}; + const char *argv[] = {gsInterfaceApp, NULL}; _SysDebug("server_tid = %i, &server_tid = %p", server_tid, &server_tid); sprintf(server_info, "AXWIN3_SERVER=%i", server_tid); // TODO: Does the client need FDs? - int rv = _SysSpawn(csInterfaceApp, argv, envp, 0, NULL, NULL); + int rv = _SysSpawn(gsInterfaceApp, argv, envp, 0, NULL, NULL); if( rv < 0 ) { _SysDebug("_SysSpawn chucked a sad, rv=%i, errno=%i", rv, _errno); } @@ -92,28 +79,59 @@ int main(int argc, char *argv[]) for(;;) { fd_set fds; + fd_set efds; int nfds = 0; FD_ZERO(&fds); + FD_ZERO(&efds); WM_Update(); Input_FillSelect(&nfds, &fds); - IPC_FillSelect(&nfds, &fds); + IPC_FillSelect(&nfds, &fds, &efds); nfds ++; - if( _SysSelect(nfds, &fds, NULL, NULL, NULL, THREAD_EVENT_IPCMSG) == -1 ) { + if( _SysSelect(nfds, &fds, NULL, &efds, NULL, THREAD_EVENT_IPCMSG) == -1 ) { _SysDebug("ERROR: select() returned -1"); return -1; } Input_HandleSelect(&fds); - IPC_HandleSelect(&fds); + IPC_HandleSelect(&fds, &efds); } return 0; } +void PrintUsage(void) +{ + fprintf(stderr, "Arguments:\n"); + fprintf(stderr, " --no-ui : Don't spawn the UI process\n"); +} + void ParseCommandline(int argc, char **argv) { - + for( int i = 1; i < argc; i ++ ) + { + if( argv[i][0] != '-' ) { + // Error? + PrintUsage(); + exit(-1); + } + else if( argv[i][1] != '-' ) { + // Short + PrintUsage(); + exit(-1); + } + else { + // Long + if( strcmp(argv[i], "--no-ui") == 0 ) { + gbNoSpawnUI = 1; + } + else { + // Error. + PrintUsage(); + exit(-1); + } + } + } }