git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
InitRD - Libc++, libm, bochs, dbserver
[tpg/acess2.git]
/
Usermode
/
Applications
/
axwin3_src
/
WM
/
main.c
diff --git
a/Usermode/Applications/axwin3_src/WM/main.c
b/Usermode/Applications/axwin3_src/WM/main.c
index
c6a4546
..
1050395
100644
(file)
--- a/
Usermode/Applications/axwin3_src/WM/main.c
+++ b/
Usermode/Applications/axwin3_src/WM/main.c
@@
-9,10
+9,13
@@
#include <acess/sys.h>
#include <stdlib.h>
#include <stdio.h>
#include <acess/sys.h>
#include <stdlib.h>
#include <stdio.h>
+#include <string.h>
+#include "include/lowlevel.h"
// === IMPORTS ===
// === IMPORTS ===
-extern void WM_Update(void);
extern void Video_Setup(void);
extern void Video_Setup(void);
+extern void WM_Initialise(void);
+extern void WM_Update(void);
// === PROTOTYPES ===
void ParseCommandline(int argc, char **argv);
// === PROTOTYPES ===
void ParseCommandline(int argc, char **argv);
@@
-25,11
+28,14
@@
const char *gsMouseDevice = NULL;
int giScreenHeight = 480;
int giTerminalFD = -1;
int giScreenHeight = 480;
int giTerminalFD = -1;
+ int giTerminalFD_Input = 0;
int giMouseFD = -1;
#define __INSTALL_ROOT "/Acess/Apps/AxWin/3.0"
const char *gsInstallRoot = __INSTALL_ROOT;
int giMouseFD = -1;
#define __INSTALL_ROOT "/Acess/Apps/AxWin/3.0"
const char *gsInstallRoot = __INSTALL_ROOT;
+const char *gsInterfaceApp = __INSTALL_ROOT"/AxWinUI";
+ int gbNoSpawnUI = 0;
// === CODE ===
/**
// === CODE ===
/**
@@
-37,59
+43,95
@@
const char *gsInstallRoot = __INSTALL_ROOT;
*/
int main(int argc, char *argv[])
{
*/
int main(int argc, char *argv[])
{
- int server_tid = gettid();
-
ParseCommandline(argc, argv);
if( gsTerminalDevice == NULL ) {
gsTerminalDevice = "/Devices/VTerm/6";
}
if( gsMouseDevice == NULL ) {
ParseCommandline(argc, argv);
if( gsTerminalDevice == NULL ) {
gsTerminalDevice = "/Devices/VTerm/6";
}
if( gsMouseDevice == NULL ) {
- gsMouseDevice = "/Devices/
PS2Mouse
";
+ gsMouseDevice = "/Devices/
Mouse/system
";
}
Video_Setup();
}
Video_Setup();
-// Interface_Init();
IPC_Init();
Input_Init();
IPC_Init();
Input_Init();
-
// WM_Updat
e();
+
WM_Initialis
e();
// Spawn interface root
// Spawn interface root
- if(
clone(CLONE_VM, 0) == 0
)
+ if(
!gbNoSpawnUI
)
{
{
- static char csInterfaceApp[] = __INSTALL_ROOT"/AxWinUI";
+ int server_tid = gettid();
+ _SysDebug("server_tid = %i", server_tid);
char server_info[] = "AXWIN3_SERVER=00000";
char server_info[] = "AXWIN3_SERVER=00000";
- char *envp[] = {server_info, NULL};
- char *argv[] = {csInterfaceApp, NULL};
+ const char *envp[] = {server_info, 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);
sprintf(server_info, "AXWIN3_SERVER=%i", server_tid);
- execve(csInterfaceApp, argv, envp);
+ // TODO: Does the client need FDs?
+ int rv = _SysSpawn(gsInterfaceApp, argv, envp, 0, NULL, NULL);
+ if( rv < 0 ) {
+ _SysDebug("_SysSpawn chucked a sad, rv=%i, errno=%i", rv, _errno);
+ }
}
// Main Loop
for(;;)
{
fd_set fds;
}
// Main Loop
for(;;)
{
fd_set fds;
+ fd_set efds;
int nfds = 0;
FD_ZERO(&fds);
int nfds = 0;
FD_ZERO(&fds);
+ FD_ZERO(&efds);
+ WM_Update();
+
Input_FillSelect(&nfds, &fds);
Input_FillSelect(&nfds, &fds);
- IPC_FillSelect(&nfds, &fds);
+ IPC_FillSelect(&nfds, &fds
, &efds
);
nfds ++;
nfds ++;
- if(
select(nfds, &fds, NULL, NULL, NULL
) == -1 ) {
+ if(
_SysSelect(nfds, &fds, NULL, &efds, NULL, THREAD_EVENT_IPCMSG
) == -1 ) {
_SysDebug("ERROR: select() returned -1");
return -1;
}
Input_HandleSelect(&fds);
_SysDebug("ERROR: select() returned -1");
return -1;
}
Input_HandleSelect(&fds);
- IPC_HandleSelect(&fds);
+ IPC_HandleSelect(&fds
, &efds
);
}
return 0;
}
}
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)
{
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);
+ }
+ }
+ }
}
}
UCC
git Repository :: git.ucc.asn.au