void R_CleanUp(SA_TYPE saveact, int status, int runLast) { if(saveact == SA_DEFAULT) /* The normal case apart from R_Suicide */ saveact = SaveAction; if(saveact == SA_SAVEASK) { if(R_Interactive) { switch (R_YesNoCancel(G_("Save workspace image?"))) { case YES: saveact = SA_SAVE; break; case NO: saveact = SA_NOSAVE; break; case CANCEL: jump_to_toplevel(); break; } } else saveact = SaveAction; } switch (saveact) { case SA_SAVE: if(runLast) R_dot_Last(); if(R_DirtyImage) R_SaveGlobalEnv(); if (CharacterMode == RGui || (R_Interactive && CharacterMode == RTerm)) { R_setupHistory(); /* re-read the history size and filename */ gl_savehistory(R_HistoryFile, R_HistorySize); } break; case SA_NOSAVE: if(runLast) R_dot_Last(); break; case SA_SUICIDE: default: break; } R_RunExitFinalizers(); editorcleanall(); CleanEd(); CleanTempDir(); closeAllHlpFiles(); KillAllDevices(); AllDevicesKilled = TRUE; if (R_Interactive && CharacterMode == RTerm) SetConsoleTitle(oldtitle); UnLoad_Rbitmap_Dll(); if (R_CollectWarnings && saveact != SA_SUICIDE && CharacterMode == RTerm) PrintWarnings(); app_cleanup(); RConsole = NULL; exit(status); }
void R_CleanUp(SA_TYPE saveact, int status, int runLast) { if(saveact == SA_DEFAULT) /* The normal case apart from R_Suicide */ saveact = SaveAction; if(saveact == SA_SAVEASK) { if(R_Interactive) { switch (R_YesNoCancel(G_("Save workspace image?"))) { case YES: saveact = SA_SAVE; break; case NO: saveact = SA_NOSAVE; break; case CANCEL: // There might be residual events with destroyed handles R_ProcessEvents(); jump_to_toplevel(); break; } } else saveact = SaveAction; } switch (saveact) { case SA_SAVE: if(runLast) R_dot_Last(); if(R_DirtyImage) R_SaveGlobalEnv(); if (CharacterMode == RGui) { R_setupHistory(); /* re-read the history size and filename */ wgl_savehistory(R_HistoryFile, R_HistorySize); } else if(R_Interactive && CharacterMode == RTerm) { R_setupHistory(); /* re-read the history size and filename */ gl_savehistory(R_HistoryFile, R_HistorySize); } break; case SA_NOSAVE: if(runLast) R_dot_Last(); break; case SA_SUICIDE: default: break; } R_RunExitFinalizers(); editorcleanall(); CleanEd(); KillAllDevices(); /* Unix does not do this under SA_SUICIDE */ AllDevicesKilled = TRUE; /* used in devWindows.c to inhibit callbacks */ R_CleanTempDir(); /* changes directory */ if (R_Interactive && CharacterMode == RTerm) SetConsoleTitle(oldtitle); if (R_CollectWarnings && saveact != SA_SUICIDE && CharacterMode == RTerm) /* no point in doing this for Rgui as the console is about to close */ PrintWarnings(); /* from device close and (if run) .Last */ app_cleanup(); RConsole = NULL; if(ifp) fclose(ifp); /* input file from -f or --file= */ if(ifile[0]) unlink(ifile); /* input file from -e */ exit(status); }
void attribute_hidden Rstd_CleanUp(SA_TYPE saveact, int status, int runLast) { if(saveact == SA_DEFAULT) /* The normal case apart from R_Suicide */ saveact = SaveAction; if(saveact == SA_SAVEASK) { if(R_Interactive) { unsigned char buf[1024]; qask: R_ClearerrConsole(); R_FlushConsole(); int res = R_ReadConsole("Save workspace image? [y/n/c]: ", buf, 128, 0); if(res) { switch (buf[0]) { case 'y': case 'Y': saveact = SA_SAVE; break; case 'n': case 'N': saveact = SA_NOSAVE; break; case 'c': case 'C': jump_to_toplevel(); break; default: goto qask; } } else saveact = SA_NOSAVE; /* probably EOF */ } else saveact = SaveAction; } switch (saveact) { case SA_SAVE: if(runLast) R_dot_Last(); if(R_DirtyImage) R_SaveGlobalEnv(); #ifdef HAVE_LIBREADLINE # ifdef HAVE_READLINE_HISTORY_H if(R_Interactive && UsingReadline) { int err; R_setupHistory(); /* re-read the history size and filename */ stifle_history(R_HistorySize); err = write_history(R_HistoryFile); if(err) warning(_("problem in saving the history file '%s'"), R_HistoryFile); } # endif /* HAVE_READLINE_HISTORY_H */ #endif /* HAVE_LIBREADLINE */ break; case SA_NOSAVE: if(runLast) R_dot_Last(); break; case SA_SUICIDE: default: break; } R_RunExitFinalizers(); CleanEd(); if(saveact != SA_SUICIDE) KillAllDevices(); R_CleanTempDir(); if(saveact != SA_SUICIDE && R_CollectWarnings) PrintWarnings(); /* from device close and (if run) .Last */ if(ifp) fclose(ifp); /* input file from -f or --file= */ fpu_setup(FALSE); exit(status); }