1999-10-04 15:06:00 -07:00
|
|
|
/*
|
2004-01-19 14:30:35 -08:00
|
|
|
* Copyright (C) 2000-2004 Carsten Haitzler, Geoff Harrison and various contributors
|
2000-04-05 16:22:56 -07:00
|
|
|
*
|
1999-10-04 15:06:00 -07:00
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
|
* of this software and associated documentation files (the "Software"), to
|
|
|
|
* deal in the Software without restriction, including without limitation the
|
|
|
|
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
|
|
* sell copies of the Software, and to permit persons to whom the Software is
|
|
|
|
* furnished to do so, subject to the following conditions:
|
2000-04-05 16:22:56 -07:00
|
|
|
*
|
1999-10-04 15:06:00 -07:00
|
|
|
* The above copyright notice and this permission notice shall be included in
|
|
|
|
* all copies of the Software, its documentation and marketing & publicity
|
|
|
|
* materials, and acknowledgment shall be given in the documentation, materials
|
|
|
|
* and software packages that this Software was used.
|
2000-04-05 16:22:56 -07:00
|
|
|
*
|
1999-10-04 15:06:00 -07:00
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
|
|
* THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
|
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
|
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
*/
|
1999-08-17 15:56:46 -07:00
|
|
|
#include "E.h"
|
|
|
|
#include "timestamp.h"
|
1999-10-28 05:24:39 -07:00
|
|
|
#include <sys/utsname.h>
|
2004-03-11 15:44:19 -08:00
|
|
|
#include <signal.h>
|
|
|
|
#include <time.h>
|
1999-08-17 15:56:46 -07:00
|
|
|
|
1999-10-01 12:54:23 -07:00
|
|
|
static void
|
1999-10-01 11:15:04 -07:00
|
|
|
runDocBrowser(void)
|
|
|
|
{
|
|
|
|
char file[FILEPATH_LEN_MAX];
|
|
|
|
|
2004-03-11 13:29:28 -08:00
|
|
|
Esnprintf(file, sizeof(file), "%s/edox", EDirBin());
|
2004-03-05 09:05:53 -08:00
|
|
|
if (!canexec(file))
|
|
|
|
return;
|
|
|
|
Esnprintf(file, sizeof(file), "%s/E-docs", EDirRoot());
|
|
|
|
if (!canread(file))
|
|
|
|
return;
|
|
|
|
|
1999-10-01 11:15:04 -07:00
|
|
|
if (fork())
|
|
|
|
EDBUG_RETURN_;
|
|
|
|
|
2004-03-11 13:29:28 -08:00
|
|
|
Esnprintf(file, sizeof(file), "exec %s/edox %s/E-docs",
|
2004-02-18 14:18:41 -08:00
|
|
|
EDirBin(), EDirRoot());
|
2004-03-05 09:05:53 -08:00
|
|
|
|
1999-12-06 09:12:20 -08:00
|
|
|
execl(usershell(getuid()), usershell(getuid()), "-c", (char *)file, NULL);
|
1999-10-01 11:15:04 -07:00
|
|
|
|
2004-03-05 09:05:53 -08:00
|
|
|
exit(0);
|
1999-10-01 11:15:04 -07:00
|
|
|
}
|
|
|
|
|
1999-08-17 15:56:46 -07:00
|
|
|
int
|
|
|
|
main(int argc, char **argv)
|
|
|
|
{
|
2003-12-07 01:18:55 -08:00
|
|
|
int i;
|
1999-09-22 19:31:53 -07:00
|
|
|
ECursor *ec = NULL;
|
1999-10-28 05:24:39 -07:00
|
|
|
struct utsname ubuf;
|
2003-06-15 08:27:05 -07:00
|
|
|
char *str;
|
1999-09-22 19:31:53 -07:00
|
|
|
|
1999-08-17 15:56:46 -07:00
|
|
|
/* This function runs all the setup for startup, and then
|
|
|
|
* proceeds into the primary event loop at the end.
|
|
|
|
*/
|
|
|
|
|
2004-03-09 11:07:05 -08:00
|
|
|
/* Init state variable struct */
|
2004-03-20 07:49:05 -08:00
|
|
|
memset(&Mode, 0, sizeof(EMode));
|
|
|
|
Mode.mode = MODE_NONE;
|
|
|
|
Mode.startup = 1;
|
2004-03-09 11:07:05 -08:00
|
|
|
|
1999-08-17 15:56:46 -07:00
|
|
|
/* unsetenv("LD_PRELOAD"); */
|
|
|
|
|
2004-04-01 14:48:32 -08:00
|
|
|
/* Initialise internationalisation */
|
|
|
|
LangInit();
|
1999-12-06 09:12:20 -08:00
|
|
|
|
2003-06-15 08:27:05 -07:00
|
|
|
str = getenv("EDBUG");
|
|
|
|
if (str)
|
2004-03-20 07:49:05 -08:00
|
|
|
Mode.debug = atoi(str);
|
2003-06-15 08:27:05 -07:00
|
|
|
str = getenv("EDBUG_FLAGS");
|
|
|
|
if (str)
|
2004-01-04 10:07:18 -08:00
|
|
|
EventDebugInit(str);
|
1999-08-17 15:56:46 -07:00
|
|
|
|
|
|
|
EDBUG(1, "main");
|
|
|
|
|
|
|
|
/* go head and set up the internal data lists that enlightenment
|
|
|
|
* uses for finding everything
|
|
|
|
*/
|
|
|
|
lists = Emalloc(sizeof(List) * LIST_TYPE_COUNT);
|
|
|
|
lists = memset(lists, 0, (sizeof(List) * LIST_TYPE_COUNT));
|
|
|
|
|
|
|
|
srand(time(NULL));
|
|
|
|
|
1999-10-28 05:24:39 -07:00
|
|
|
if (!uname(&ubuf))
|
2004-02-28 07:14:02 -08:00
|
|
|
e_machine_name = Estrdup(ubuf.nodename);
|
1999-10-28 05:24:39 -07:00
|
|
|
if (!e_machine_name)
|
2004-02-28 07:14:02 -08:00
|
|
|
e_machine_name = Estrdup("localhost");
|
2004-02-13 10:36:52 -08:00
|
|
|
|
|
|
|
SetSMProgName(argv[0]);
|
|
|
|
|
1999-08-17 15:56:46 -07:00
|
|
|
themepath[0] = 0;
|
|
|
|
{
|
|
|
|
int j = 0;
|
|
|
|
|
|
|
|
/* Now we're going to interpret any of the commandline parameters
|
|
|
|
* that are passed to it -- Well, at least the ones that we
|
|
|
|
* understand.
|
|
|
|
*/
|
|
|
|
|
|
|
|
for (j = 1; j < argc; j++)
|
2003-05-22 12:15:03 -07:00
|
|
|
{
|
|
|
|
if ((!strcmp("-theme", argv[j])) && (argc - j > 1))
|
|
|
|
{
|
|
|
|
Esnprintf(themepath, sizeof(themepath), "%s", argv[++j]);
|
|
|
|
}
|
|
|
|
else if ((!strcmp("-econfdir", argv[j])) && (argc - j > 1))
|
|
|
|
{
|
2004-02-13 10:36:52 -08:00
|
|
|
EDirUserSet(argv[++j]);
|
2003-05-22 12:15:03 -07:00
|
|
|
}
|
|
|
|
else if ((!strcmp("-ecachedir", argv[j])) && (argc - j > 1))
|
|
|
|
{
|
2004-02-13 10:36:52 -08:00
|
|
|
EDirUserCacheSet(argv[++j]);
|
2003-05-22 12:15:03 -07:00
|
|
|
}
|
|
|
|
else if ((!strcmp("-display", argv[j])) && (argc - j > 1))
|
|
|
|
{
|
|
|
|
dstr = argv[++j];
|
|
|
|
}
|
|
|
|
else if (!strcmp("-single", argv[j]))
|
|
|
|
{
|
2004-04-07 07:32:36 -07:00
|
|
|
Mode.wm.single = 1;
|
2003-05-22 12:15:03 -07:00
|
|
|
}
|
|
|
|
else if ((!strcmp("-smid", argv[j])) && (argc - j > 1))
|
|
|
|
{
|
|
|
|
SetSMID(argv[++j]);
|
|
|
|
}
|
|
|
|
else if ((!strcmp("-clientId", argv[j])) && (argc - j > 1))
|
|
|
|
{
|
|
|
|
SetSMID(argv[++j]);
|
|
|
|
}
|
|
|
|
else if ((!strcmp("--sm-client-id", argv[j])) && (argc - j > 1))
|
|
|
|
{
|
|
|
|
SetSMID(argv[++j]);
|
|
|
|
}
|
|
|
|
else if ((!strcmp("-smfile", argv[j])) && (argc - j > 1))
|
|
|
|
{
|
|
|
|
SetSMFile(argv[++j]);
|
|
|
|
}
|
|
|
|
else if ((!strcmp("-ext_init_win", argv[j])) && (argc - j > 1))
|
|
|
|
{
|
|
|
|
init_win_ext = atoi(argv[++j]);
|
|
|
|
}
|
|
|
|
else if (!strcmp("-no_overwrite", argv[j]))
|
|
|
|
{
|
|
|
|
no_overwrite = 1;
|
|
|
|
}
|
|
|
|
else if ((!strcmp("-help", argv[j]))
|
|
|
|
|| (!strcmp("--help", argv[j]))
|
|
|
|
|| (!strcmp("-h", argv[j])) || (!strcmp("-?", argv[j])))
|
|
|
|
{
|
|
|
|
printf("enlightenment options: \n"
|
|
|
|
"\t-theme /path/to/theme \n"
|
|
|
|
"\t-econfdir /path/to/.enlightenment/conf/dir\n"
|
|
|
|
"\t-ecachedir /path/to/cached/dir \n"
|
|
|
|
"\t[-smid | -clientId | --sm-client-id] id \n"
|
|
|
|
"\t-smfile file \n"
|
|
|
|
"\t-ext_init_win window_id \n"
|
|
|
|
"\t-no_overwrite \n"
|
|
|
|
"\t[-v | -version | --version] \n"
|
|
|
|
"\t-display display_name \n");
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
else if ((!strcmp("-v", argv[j]))
|
|
|
|
|| (!strcmp("-version", argv[j]))
|
|
|
|
|| (!strcmp("--version", argv[j]))
|
|
|
|
|| (!strcmp("-v", argv[j])))
|
|
|
|
{
|
|
|
|
printf(_("Enlightenment Version: %s\nLast updated on: %s\n"),
|
|
|
|
ENLIGHTENMENT_VERSION, E_CHECKOUT_DATE);
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
}
|
2000-03-14 14:29:04 -08:00
|
|
|
|
|
|
|
/* Set a default location for the "previous session" data when
|
|
|
|
* we do not actually have a previous session. */
|
|
|
|
SetSMFile(NULL);
|
1999-08-17 15:56:46 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
if (themepath[0] == 0)
|
2000-07-26 11:00:47 -07:00
|
|
|
{
|
2003-05-22 12:15:03 -07:00
|
|
|
FILE *f;
|
|
|
|
char s[FILEPATH_LEN_MAX];
|
|
|
|
char *file;
|
|
|
|
|
|
|
|
file = FindFile("user_theme.cfg");
|
|
|
|
if (file)
|
|
|
|
{
|
|
|
|
s[0] = 0;
|
|
|
|
f = fopen(file, "r");
|
|
|
|
if (f)
|
|
|
|
{
|
|
|
|
if (fscanf(f, "%4000s", s) < 1)
|
|
|
|
s[0] = 0;
|
|
|
|
fclose(f);
|
|
|
|
if (s[0])
|
|
|
|
Esnprintf(themepath, sizeof(themepath), "%s", s);
|
|
|
|
}
|
|
|
|
Efree(file);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (themepath[0] == 0)
|
|
|
|
{
|
|
|
|
char *def;
|
|
|
|
|
2004-02-11 07:27:54 -08:00
|
|
|
def = ThemeGetDefault();
|
2003-05-22 12:15:03 -07:00
|
|
|
if (def)
|
|
|
|
{
|
|
|
|
Esnprintf(themepath, sizeof(themepath), "%s", def);
|
|
|
|
Efree(def);
|
|
|
|
}
|
|
|
|
}
|
2000-07-26 11:00:47 -07:00
|
|
|
}
|
1999-08-17 15:56:46 -07:00
|
|
|
SetSMUserThemePath(themepath);
|
|
|
|
|
|
|
|
/* run most of the setup */
|
2004-03-11 08:58:14 -08:00
|
|
|
AlertInit(); /* Set up all the text bits that belong on the GSOD */
|
2003-08-18 14:54:27 -07:00
|
|
|
SignalsSetup();
|
2004-04-07 07:32:36 -07:00
|
|
|
SetupX(); /* This is where the we fork per screen */
|
1999-10-10 10:15:03 -07:00
|
|
|
BlumFlimFrub();
|
1999-08-17 15:56:46 -07:00
|
|
|
ZoomInit();
|
|
|
|
SetupDirs();
|
|
|
|
InitDesktopBgs();
|
|
|
|
GotoDesktop(0);
|
|
|
|
CommsSetup();
|
|
|
|
CommsFindCommsWindow();
|
|
|
|
GrabX();
|
1999-09-06 20:41:10 -07:00
|
|
|
LoadGroups();
|
1999-08-17 15:56:46 -07:00
|
|
|
LoadSnapInfo();
|
|
|
|
MapUnmap(0);
|
|
|
|
|
|
|
|
/* make all of our fallback classes */
|
|
|
|
SetupFallbackClasses();
|
|
|
|
UngrabX();
|
2004-01-03 04:55:08 -08:00
|
|
|
|
1999-08-17 15:56:46 -07:00
|
|
|
desks.desk[0].viewable = 0;
|
|
|
|
/* now we're going to load the configuration/theme */
|
|
|
|
LoadEConfig(themepath);
|
2004-03-20 07:49:05 -08:00
|
|
|
SetAreaSize(Conf.areas.nx, Conf.areas.ny);
|
|
|
|
TransparencySet(Conf.theme.transparency);
|
1999-08-17 15:56:46 -07:00
|
|
|
|
|
|
|
desks.desk[0].viewable = 1;
|
|
|
|
RefreshDesktop(0);
|
2004-03-20 07:49:05 -08:00
|
|
|
if (Conf.sound)
|
2000-07-26 11:00:47 -07:00
|
|
|
{
|
2004-01-03 04:29:58 -08:00
|
|
|
SoundPlay("SOUND_STARTUP");
|
|
|
|
SoundFree("SOUND_STARTUP");
|
2000-07-26 11:00:47 -07:00
|
|
|
}
|
2004-04-21 13:51:57 -07:00
|
|
|
|
1999-08-17 15:56:46 -07:00
|
|
|
/* toss down the dragbar and related */
|
|
|
|
InitDesktopControls();
|
2004-04-21 13:51:57 -07:00
|
|
|
|
1999-08-17 15:56:46 -07:00
|
|
|
/* then draw all the buttons that belong on the desktop */
|
2003-12-07 01:18:55 -08:00
|
|
|
ShowDesktopButtons();
|
2003-11-15 14:27:17 -08:00
|
|
|
|
2003-03-23 19:48:09 -08:00
|
|
|
HintsInit();
|
1999-08-17 15:56:46 -07:00
|
|
|
SessionInit();
|
|
|
|
ShowDesktopControls();
|
|
|
|
CheckEvent();
|
2004-04-21 13:51:57 -07:00
|
|
|
|
1999-08-17 15:56:46 -07:00
|
|
|
/* retreive stuff from last time we were loaded if we're restarting */
|
|
|
|
ICCCM_GetMainEInfo();
|
1999-09-14 10:36:48 -07:00
|
|
|
SetupEnv();
|
2004-03-20 07:49:05 -08:00
|
|
|
if (Conf.mapslide)
|
1999-09-21 19:13:51 -07:00
|
|
|
CreateStartupDisplay(0);
|
2004-04-21 13:51:57 -07:00
|
|
|
|
2003-03-23 19:48:09 -08:00
|
|
|
/* set some more hints */
|
|
|
|
HintsSetDesktopViewport();
|
1999-08-17 15:56:46 -07:00
|
|
|
desks.current = 0;
|
2004-04-21 13:51:57 -07:00
|
|
|
|
|
|
|
/* Set up the iconboxes and pagers */
|
1999-08-26 11:56:06 -07:00
|
|
|
IB_Setup();
|
2004-03-20 07:49:05 -08:00
|
|
|
if (Conf.pagers.enable)
|
2000-07-26 11:00:47 -07:00
|
|
|
{
|
2004-03-20 07:49:05 -08:00
|
|
|
Conf.pagers.enable = 0;
|
2004-04-09 05:59:56 -07:00
|
|
|
Mode.queue_up = 0;
|
2003-05-22 12:15:03 -07:00
|
|
|
EnableAllPagers();
|
2004-04-09 05:59:56 -07:00
|
|
|
Mode.queue_up = DRAW_QUEUE_ENABLE;
|
2000-07-26 11:00:47 -07:00
|
|
|
}
|
2004-04-07 07:32:36 -07:00
|
|
|
|
2004-04-21 13:51:57 -07:00
|
|
|
MapUnmap(1);
|
|
|
|
|
2004-04-07 07:32:36 -07:00
|
|
|
/* Kill the E process owning the "init window" */
|
|
|
|
if (Mode.wm.master && init_win_ext)
|
2000-07-26 11:00:47 -07:00
|
|
|
{
|
2003-05-22 12:15:03 -07:00
|
|
|
XKillClient(disp, init_win_ext);
|
|
|
|
init_win_ext = 0;
|
2000-07-26 11:00:47 -07:00
|
|
|
}
|
1999-09-07 16:16:39 -07:00
|
|
|
|
|
|
|
/* sync just to make sure */
|
1999-08-17 15:56:46 -07:00
|
|
|
XSync(disp, False);
|
2004-04-09 05:59:56 -07:00
|
|
|
Mode.queue_up = DRAW_QUEUE_ENABLE;
|
1999-09-07 16:16:39 -07:00
|
|
|
|
1999-08-17 15:56:46 -07:00
|
|
|
/* hello! we don't have a resizemode of 5! */
|
2004-03-20 07:49:05 -08:00
|
|
|
if (Conf.resizemode == 5)
|
|
|
|
Conf.resizemode = 0;
|
1999-08-17 15:56:46 -07:00
|
|
|
/* of course, we have to set the cursors */
|
1999-09-22 19:31:53 -07:00
|
|
|
ec = FindItem("DEFAULT", 0, LIST_FINDBY_NAME, LIST_TYPE_ECURSOR);
|
|
|
|
if (ec)
|
2000-07-26 11:00:47 -07:00
|
|
|
{
|
2003-05-22 12:15:03 -07:00
|
|
|
ApplyECursor(root.win, ec);
|
|
|
|
ec->ref_count++;
|
|
|
|
ec->inroot = 1;
|
2000-07-26 11:00:47 -07:00
|
|
|
}
|
1999-08-17 15:56:46 -07:00
|
|
|
|
2004-03-20 07:49:05 -08:00
|
|
|
Mode.startup = 0;
|
1999-09-21 19:13:51 -07:00
|
|
|
/* ok - paranoia - save current settings to disk */
|
1999-09-22 13:05:33 -07:00
|
|
|
if (root.scr == 0)
|
|
|
|
autosave();
|
1999-09-21 19:13:51 -07:00
|
|
|
/* let's make sure we set this up and go to our desk anyways */
|
|
|
|
ICCCM_GetMainEInfo();
|
|
|
|
GotoDesktop(desks.current);
|
2004-03-20 07:49:05 -08:00
|
|
|
if (desks.current < (Conf.desks.num - 1))
|
2000-07-26 11:00:47 -07:00
|
|
|
{
|
2003-05-22 12:15:03 -07:00
|
|
|
char ps = 0;
|
|
|
|
|
2004-03-20 07:49:05 -08:00
|
|
|
if (!Conf.mapslide)
|
2003-05-22 12:15:03 -07:00
|
|
|
{
|
2004-03-20 07:49:05 -08:00
|
|
|
ps = Conf.desks.slidein;
|
|
|
|
Conf.desks.slidein = 0;
|
2003-05-22 12:15:03 -07:00
|
|
|
}
|
|
|
|
GotoDesktop(desks.current + 1);
|
|
|
|
GotoDesktop(desks.current - 1);
|
2004-03-20 07:49:05 -08:00
|
|
|
if (!Conf.mapslide)
|
|
|
|
Conf.desks.slidein = ps;
|
2000-07-26 11:00:47 -07:00
|
|
|
}
|
1999-09-21 19:13:51 -07:00
|
|
|
else if (desks.current > 0)
|
2000-07-26 11:00:47 -07:00
|
|
|
{
|
2003-05-22 12:15:03 -07:00
|
|
|
char ps = 0;
|
|
|
|
|
2004-03-20 07:49:05 -08:00
|
|
|
if (!Conf.mapslide)
|
2003-05-22 12:15:03 -07:00
|
|
|
{
|
2004-03-20 07:49:05 -08:00
|
|
|
ps = Conf.desks.slidein;
|
|
|
|
Conf.desks.slidein = 0;
|
2003-05-22 12:15:03 -07:00
|
|
|
}
|
|
|
|
GotoDesktop(desks.current - 1);
|
|
|
|
GotoDesktop(desks.current + 1);
|
2004-03-20 07:49:05 -08:00
|
|
|
if (!Conf.mapslide)
|
|
|
|
Conf.desks.slidein = ps;
|
2000-07-26 11:00:47 -07:00
|
|
|
}
|
1999-09-21 19:13:51 -07:00
|
|
|
XSync(disp, False);
|
2003-11-15 14:27:17 -08:00
|
|
|
|
1999-10-09 21:46:45 -07:00
|
|
|
/* if we didn't have an external window piped to us, we'll do some stuff */
|
2004-03-20 07:49:05 -08:00
|
|
|
if (!Conf.mapslide)
|
1999-09-21 19:13:51 -07:00
|
|
|
CreateStartupDisplay(0);
|
2003-11-15 14:27:17 -08:00
|
|
|
|
2004-04-12 01:28:34 -07:00
|
|
|
BackgroundDestroyByName("STARTUP_BACKGROUND_SIDEWAYS");
|
|
|
|
BackgroundDestroyByName("STARTUP_BACKGROUND");
|
2003-11-15 14:27:17 -08:00
|
|
|
|
1999-10-18 10:42:01 -07:00
|
|
|
#ifdef SIGCONT
|
1999-09-22 19:31:53 -07:00
|
|
|
for (i = 0; i < child_count; i++)
|
|
|
|
kill(e_children[i], SIGCONT);
|
1999-10-18 10:42:01 -07:00
|
|
|
#endif
|
1999-09-07 16:16:39 -07:00
|
|
|
|
1999-10-07 10:23:20 -07:00
|
|
|
SetupUserInitialization();
|
2004-03-20 07:49:05 -08:00
|
|
|
if (Mode.firsttime)
|
1999-10-13 07:45:28 -07:00
|
|
|
runDocBrowser();
|
2003-05-31 01:28:52 -07:00
|
|
|
|
2004-03-20 07:49:05 -08:00
|
|
|
Mode.startup = 1;
|
2003-05-31 01:28:52 -07:00
|
|
|
SpawnSnappedCmds();
|
2004-03-20 07:49:05 -08:00
|
|
|
Mode.startup = 0;
|
1999-09-23 14:08:03 -07:00
|
|
|
|
2004-02-11 07:27:54 -08:00
|
|
|
ThemeBadDialog();
|
2004-04-10 12:39:02 -07:00
|
|
|
|
|
|
|
BackgroundsInit(); /* Start the background accounting */
|
|
|
|
|
1999-08-17 15:56:46 -07:00
|
|
|
/* The primary event loop */
|
|
|
|
for (;;)
|
|
|
|
WaitEvent();
|
2004-04-10 12:39:02 -07:00
|
|
|
|
1999-08-17 15:56:46 -07:00
|
|
|
/* Of course, we should NEVER get to this point */
|
|
|
|
EDBUG_RETURN(0);
|
|
|
|
}
|