static void RestoreConsole() { int fd; if ((fd = open("/dev/con", O_RDONLY)) >= 0) newconsole(fd); }
static OpenConsole () { input = 0; if (app_resources.file) { if (!strcmp (app_resources.file, "console")) { struct stat sbuf; /* must be owner and have read/write permission */ #if !defined(__NetBSD__) && !defined(__OpenBSD__) && !defined(Lynx) && !defined(__EMX__) if (!stat("/dev/console", &sbuf) && (sbuf.st_uid == getuid()) && !access("/dev/console", R_OK|W_OK)) #endif { #ifdef USE_FILE input = fopen (FILE_NAME, "r"); #ifdef __EMX__ if (input) { ULONG arg = 1,arglen; APIRET rc; if ((rc=DosDevIOCtl(fileno(input), 0x76,0x4d, &arg, sizeof(arg), &arglen, NULL, 0, NULL)) != 0) { fclose(input); input = 0; } } #endif #endif #ifdef USE_PTY if (get_pty (&pty_fd, &tty_fd, ttydev, ptydev) == 0) { #ifdef TIOCCONS int on = 1; if (ioctl (tty_fd, TIOCCONS, (char *) &on) != -1) input = fdopen (pty_fd, "r"); #else #ifndef Lynx int consfd = open("/dev/console", O_RDONLY); if (consfd >= 0) { if (ioctl(consfd, SRIOCSREDIR, tty_fd) != -1) input = fdopen (pty_fd, "r"); close(consfd); } #else if (newconsole(tty_fd) < 0) perror("newconsole"); else { input = fdopen (pty_fd, "r"); atexit(RestoreConsole); } #endif #endif } #endif } #ifdef USE_OSM /* Don't have to be owner of /dev/console when using /dev/osm. */ if (!input) input = osm_pipe(); #endif if (input && app_resources.verbose) { char *hostname; TextAppend (text, "Console log for ", 16); hostname = mit_console_name + MIT_CONSOLE_LEN; TextAppend (text, hostname, strlen (hostname)); TextAppend (text, "\n", 1); } } else { struct stat sbuf; regularFile = FALSE; if (access(app_resources.file, R_OK) == 0) { input = fopen (app_resources.file, "r"); if (input) if (!stat(app_resources.file, &sbuf) && (sbuf.st_mode & S_IFMT) == S_IFREG) { regularFile = TRUE; fseek(input, 0, SEEK_END); } } } if (!input) { if (app_resources.exitOnFail) exit(0); TextAppend (text, "Couldn't open ", 14); TextAppend (text, app_resources.file, strlen (app_resources.file)); TextAppend (text, "\n", 1); } } else input = stdin; if (input) { #ifdef MINIX fcntl(fileno (input), F_SETFD, fcntl(fileno (input), F_GETFD) | FD_ASYNCHIO); nbio_register(fileno (input)); #endif input_id = XtAddInput (fileno (input), (XtPointer) XtInputReadMask, inputReady, (XtPointer) text); } }
int setupui(void) { char *p, *ctype, Rlocale[1000] = ""; /* Windows' locales can be very long */ initapp(0, 0); /* set locale before doing anything with menus */ setlocale(LC_CTYPE, ""); /* necessary in case next fails to set a valid locale */ if((p = getenv("LC_ALL"))) strcpy(Rlocale, p); if((p = getenv("LC_CTYPE"))) strcpy(Rlocale, p); if (strcmp(Rlocale, "C") == 0) strcpy(Rlocale, "en"); setlocale(LC_CTYPE, Rlocale); mbcslocale = MB_CUR_MAX > 1; ctype = setlocale(LC_CTYPE, NULL); p = strrchr(ctype, '.'); if(p && isdigit(p[1])) localeCP = atoi(p+1); else localeCP = 1252; readconsolecfg(); int flags = StandardWindow | Document | Menubar; if(mbcslocale) flags |= UseUnicode; if (RguiMDI & RW_MDI) { TRACERUI("Rgui"); RFrame = newwindow( #ifdef _WIN64 "RGui (64-bit)", #else "RGui (32-bit)", #endif MDIsize, StandardWindow | Menubar | Workspace); setclose(RFrame, closeconsole); show(RFrame); TRACERUI("Rgui done"); TRACERUI("Console"); if (!(RConsole = newconsole("R Console", flags ))) return 0; TRACERUI("Console done"); } else { TRACERUI("Console"); #ifdef _WIN64 if (!(RConsole = newconsole("R Console (64-bit)", flags ))) return 0; #else if (!(RConsole = newconsole("R Console (32-bit)", flags ))) return 0; #endif TRACERUI("Console done"); } if (ismdi()) { int btsize = 24; rect r = rect(2, 2, btsize, btsize); control tb, bt; MCHECK(tb = newtoolbar(btsize + 4)); addto(tb); MCHECK(bt = newtoolbutton(open_image, r, menueditoropen)); MCHECK(addtooltip(bt, G_("Open script"))); r.x += (btsize + 1) ; MCHECK(bt = newtoolbutton(open1_image, r, menuloadimage)); MCHECK(addtooltip(bt, G_("Load workspace"))); r.x += (btsize + 1) ; MCHECK(bt = newtoolbutton(save_image, r, menusaveimage)); MCHECK(addtooltip(bt, G_("Save workspace"))); r.x += (btsize + 6); MCHECK(bt = newtoolbutton(copy_image, r, buttoncopy)); MCHECK(addtooltip(bt, G_("Copy"))); r.x += (btsize + 1); MCHECK(bt = newtoolbutton(paste_image, r, buttonpaste)); MCHECK(addtooltip(bt, G_("Paste"))); r.x += (btsize + 1); MCHECK(bt = newtoolbutton(copypaste_image, r, buttoncopypaste)); MCHECK(addtooltip(bt, G_("Copy and paste"))); r.x += (btsize + 6); MCHECK(bt = newtoolbutton(stop_image, r, buttonkill)); MCHECK(addtooltip(bt, G_("Stop current computation"))); r.x += (btsize + 6) ; MCHECK(bt = newtoolbutton(print_image, r, menuprint)); MCHECK(addtooltip(bt, G_("Print"))); } if (ismdi() && (RguiMDI & RW_STATUSBAR)) { TRACERUI("status bar"); addstatusbar(); addto(RConsole); TRACERUI("status bar done"); } if (ismdi()) { char s[256]; PrintVersionString(s, 256); setstatus(s); } addto(RConsole); setclose(RConsole, closeconsole); setdrop(RConsole, dropconsole); MCHECK(RConsolePopup = gpopup(popupact, ConsolePopup)); MCHECK(RMenuBar = newmenubar(menuact)); MCHECK(newmenu(G_("File"))); MCHECK(msource = newmenuitem(G_("Source R code..."), 0, menusource)); MCHECK(newmenuitem(G_("New script"), 0, menueditornew)); MCHECK(newmenuitem(G_("Open script..."), 0, menueditoropen)); MCHECK(mdisplay = newmenuitem(G_("Display file(s)..."), 0, menudisplay)); MCHECK(newmenuitem("-", 0, NULL)); MCHECK(mload = newmenuitem(G_("Load Workspace..."), 0, menuloadimage)); MCHECK(msave = newmenuitem(G_("Save Workspace..."), 'S', menusaveimage)); MCHECK(newmenuitem("-", 0, NULL)); MCHECK(mloadhistory = newmenuitem(G_("Load History..."), 0, menuloadhistory)); MCHECK(msavehistory = newmenuitem(G_("Save History..."), 0, menusavehistory)); MCHECK(newmenuitem("-", 0, NULL)); MCHECK(newmenuitem(G_("Change dir..."), 0, menuchangedir)); MCHECK(newmenuitem("-", 0, NULL)); MCHECK(newmenuitem(G_("Print..."), 'P', menuprint)); MCHECK(newmenuitem(G_("Save to File..."), 0, menusavefile)); MCHECK(newmenuitem("-", 0, NULL)); MCHECK(newmenuitem(G_("Exit"), 0, menuexit)); MCHECK(newmenu(G_("Edit"))); MCHECK(mcopy = newmenuitem(G_("Copy"), 'C', menucopy)); MCHECK(mpaste = newmenuitem(G_("Paste"), 'V', menupaste)); MCHECK(mpastecmds = newmenuitem(G_("Paste commands only"), 0, menupastecmds)); MCHECK(mcopypaste = newmenuitem(G_("Copy and Paste"), 'X', menucopypaste)); MCHECK(newmenuitem(G_("Select all"), 0, menuselectall)); MCHECK(newmenuitem(G_("Clear console"), 'L', menuclear)); MCHECK(newmenuitem("-", 0, NULL)); MCHECK(mde = newmenuitem(G_("Data editor..."), 0, menude)); MCHECK(newmenuitem("-", 0, NULL)); MCHECK(mconfig = newmenuitem(G_("GUI preferences..."), 0, menuconfig)); if (ismdi()) { MCHECK(newmenu(G_("View"))); MCHECK(mtools = newmenuitem(G_("Toolbar"), 0, menutools)); MCHECK(mstatus = newmenuitem(G_("Statusbar"), 0, menustatus)); if(RguiMDI & RW_TOOLBAR) check(mtools); if(RguiMDI & RW_STATUSBAR) check(mstatus); } MCHECK(newmenu(G_("Misc"))); MCHECK(newmenuitem(G_("Stop current computation \tESC"), 0, menukill)); MCHECK(newmenuitem(G_("Stop all computations"), 0, menukillall)); if (DebugMenuitem || isdebuggerpresent()) MCHECK(newmenuitem(G_("Break to debugger"), 0, menudebug)); MCHECK(newmenuitem("-", 0, NULL)); MCHECK(mlazy = newmenuitem(G_("Buffered output"), 'W', menulazy)); MCHECK(mcomplete = newmenuitem(G_("Word completion"), 0, menucomplete)); check(mcomplete); MCHECK(mfncomplete = newmenuitem(G_("Filename completion"), 0, menufncomplete)); if(check_file_completion()) check(mfncomplete); else uncheck(mfncomplete); MCHECK(newmenuitem("-", 0, NULL)); MCHECK(mls = newmenuitem(G_("List objects"), 0, menuls)); MCHECK(mrm = newmenuitem(G_("Remove all objects"), 0, menurm)); MCHECK(msearch = newmenuitem(G_("List search &path"), 0, menusearch)); pmenu = (PkgMenuItems) malloc(sizeof(struct structPkgMenuItems)); RguiPackageMenu(pmenu); RguiWindowMenu(); MCHECK(m = newmenu(G_("Help"))); MCHECK(newmenuitem(G_("Console"), 0, menuconsolehelp)); MCHECK(newmenuitem("-", 0, NULL)); CheckForManuals(); hmenu = (HelpMenuItems) malloc(sizeof(struct structHelpMenuItems)); RguiCommonHelp(m, hmenu); consolesetbrk(RConsole, menukill, ESC, 0); wgl_hist_init(R_HistorySize, 0); if (R_RestoreHistory) wgl_loadhistory(R_HistoryFile); if (ismdi() && !(RguiMDI & RW_TOOLBAR)) toolbar_hide(); show(RConsole); return 1; }