diff options
Diffstat (limited to 'amiga/gui.c')
-rw-r--r-- | amiga/gui.c | 45 |
1 files changed, 23 insertions, 22 deletions
diff --git a/amiga/gui.c b/amiga/gui.c index 0f5210179..461a20dab 100644 --- a/amiga/gui.c +++ b/amiga/gui.c @@ -167,6 +167,7 @@ struct ami_gui_tb_userdata { int items; }; +static struct MsgPort *schedulermsgport = NULL; static struct MsgPort *appport; static Class *urlStringClass; @@ -416,7 +417,9 @@ static bool ami_open_resources(void) ASO_NoTrack, FALSE, TAG_DONE))) return false; - ami_file_req_init(); + if(!(schedulermsgport = AllocSysObjectTags(ASOT_PORT, + ASO_NoTrack, FALSE, + TAG_DONE))) return false; return true; } @@ -2689,7 +2692,7 @@ void ami_get_msg(void) { ULONG winsignal = 1L << sport->mp_SigBit; ULONG appsig = 1L << appport->mp_SigBit; - ULONG schedulesig = 1L << schedulermsgport->mp_SigBit; /* \todo create schedulermsgport */ + ULONG schedulesig = 1L << schedulermsgport->mp_SigBit; ULONG ctrlcsig = SIGBREAKF_CTRL_C; uint32 signal = 0; fd_set read_fd_set, write_fd_set, except_fd_set; @@ -2741,11 +2744,8 @@ void ami_get_msg(void) ami_print_cont(); } - if(signal & schedulesig) { /* \todo rewrite */ - while((timermsg = (struct TimerRequest *)GetMsg(msgport))) { - ReplyMsg((struct Message *)timermsg); - schedule_run(); - } + if(signal & schedulesig) { + ami_schedule_handle(schedulermsgport); } if(signal & helpsignal) @@ -2993,17 +2993,17 @@ static void gui_quit(void) ami_mouse_pointers_free(); LOG(("Freeing clipboard")); ami_clipboard_free(); + LOG(("Removing scheduler process")); + ami_scheduler_process_delete(); - FreeSysObject(ASOT_PORT,appport); - FreeSysObject(ASOT_PORT,sport); + FreeSysObject(ASOT_PORT, appport); + FreeSysObject(ASOT_PORT, sport); + FreeSysObject(ASOT_PORT, schedulermsgport); ami_file_req_free(); ami_openurl_close(); FreeStringClass(urlStringClass); - LOG(("Freeing scheduler")); - ami_schedule_free(); - FreeObjList(window_list); FreeVec(current_user_options); @@ -5347,6 +5347,16 @@ int main(int argc, char** argv) CloseLibrary(PopupMenuBase); } + if (ami_open_resources() == false) { /* alloc message ports */ + ami_misc_fatal_error("Unable to allocate resources"); + return RETURN_FAIL; + } + + if(ami_scheduler_process_create(schedulermsgport) != NSERROR_OK) { + ami_misc_fatal_error("Failed to initialise scheduler"); + return RETURN_FAIL; + } + user = GetVar("user", temp, 1024, GVF_GLOBAL_ONLY); current_user = ASPrintf("%s", (user == -1) ? "Default" : temp); current_user_dir = ASPrintf("PROGDIR:Users/%s", current_user); @@ -5364,11 +5374,6 @@ int main(int argc, char** argv) ami_mime_init("PROGDIR:Resources/mimetypes"); sprintf(temp, "%s/mimetypes.user", current_user_dir); ami_mime_init(temp); - if(ami_schedule_create() == false) { - ami_misc_fatal_error("Failed to initialise scheduler"); - return RETURN_FAIL; - } - amiga_plugin_hack_init(); ret = amiga_datatypes_init(); @@ -5395,11 +5400,6 @@ int main(int argc, char** argv) if(current_user_cache != NULL) FreeVec(current_user_cache); ret = amiga_icon_init(); - if (ami_open_resources() == false) { /* alloc ports/asl reqs, open libraries/devices */ - ami_misc_fatal_error("Unable to allocate resources"); - return RETURN_FAIL; - } - search_web_init(nsoption_charp(search_engines_file)); ami_clipboard_init(); ami_openurl_open(); @@ -5409,6 +5409,7 @@ int main(int argc, char** argv) save_complete_init(); ami_theme_init(); ami_init_mouse_pointers(); + ami_file_req_init(); win_destroyed = false; ami_font_setdevicedpi(0); /* for early font requests, eg treeview init */ |