/* * SYSTEM DEPENDENT CODE * * The sys*.c files contain the platform dependent code for * the Unix command-line (reference) port of R. * * sys-common.c has code common to the unix/gnome/gnuwin32 ports * sys-unix.c has code common to the unix/gnome ports * system.c has interface-specific code * * * 1) FATAL MESSAGES AT STARTUP * * void R_Suicide(char *msg) * * This function displays the given message and the causes R to * die immediately. It is used for non-recoverable errors such as * not having enough memory to launch etc. The phrase "dialog box" * springs to mind for non-Unix platforms. * * * 2. CONSOLE I/O * * The first group of functions is concerned with reading and * writing to the system console. * * int R_ReadConsole(const char *prompt, unsigned char *buf, * int buflen, int hist) * * This function prints the given prompt at the console and then * does an fgets(3)-like operation, transferring up to "buflen" bytes * into the buffer "buf". This should be zero-terminated, and end * with "\n\0" if there is no more input available (but not if the * input line exceeds "buflen" bytes). If "hist" is non-zero, then * the line is added to any command history which is being maintained. * Note that this is one natural place from which to run an event loop. * * void R_WriteConsole(const char *buf, int buflen) * void R_WriteConsoleEx(const char *buf, int buflen, int otype) * * Those functions write the given buffer out to the console. No * special actions are required. Under Unix the characters are * just appended to stdout. otype determines whether the content is * regular output (0) or error/warning (1) and can be used by GUIs * to distinguish those. * * void R_ResetConsole(void) * * This function is called when the system is reset after an error. * It probably isn't really needed. * * void R_FlushConsole(void) * * This called to flush any output to the system console. Under Unix * this is just fflush(stdout). Other systems may not need this. * * void R_ClearerrConsole(void) * * This function clears any errors associated with reading from the * console. In Unix it is used to clear any EOF condition associated * with stdin. * * void R_ShowMessage(const char *s) * * Display the (multi-line) message in the string s. This might be * printed on an error stream or displayed in a message dialog box: * it should be brought to the user's attention immediately. * * * 3) ACTIONS DURING (LONG) COMPUTATIONS * * void R_Busy(int which) * * This function invokes actions (such as change of cursor) when * R embarks on an extended computation (which=1) and when such a * state terminates (which=0). * * * 4) INITIALIZATION AND TERMINATION ACTIONS * * void R_InitialData(void) * FILE* R_OpenInitFile(void) * FILE* R_OpenLibraryFile(char *file) * FILE* R_OpenSysInitFile(void) * FILE* R_OpenSiteFile() * * These functions load the initial system and user data into R. * * void R_RestoreGlobalEnv(void) * void R_SaveGlobalEnv(void) * * These functions save and restore the user's global environment. * The system specific aspect of this is what files are used. * * void R_CleanUp(Rboolean saveact, int status, int RunLast) * This function invokes any actions which occur at system termination. * * * 5) FILESYSTEM INTERACTION * * int FileExists(const char *file) * * This function returns 1 if the named file exists and 0 otherwise. * On Unix/Windows this is just an interface to "stat". * * int R_HiddenFile(const char *file) * * This function returns 1 if the named file is "hidden". In Unix, * this is the case if the file name begins with a '.'. On the Mac * a file is hidden if the file name ends in '\r'. * More complex tests may be needed on other platforms. Currently, * only the Unix-style visibility is implemented and used on all platforms. * * int R_ShowFiles(int nfile, const char **file, const char **headers, * const char *wtitle, Rboolean del, const char *pager) * * nfile = number of files * file = array of filenames * headers = the `headers' args of file.show. Printed before each file. * wtitle = title for window: the `title' arg of file.show * del = flag for whether files should be deleted after use * pager = pager to be used. * * This function is used to display the contents of files. On (raw) * Unix this means invoking a pager on the file. On Gui-based platforms * the file would probably be displayed in a window with the given * title. * * int R_ChooseFile(int new, const char *buf, int len) * * Choose a file and return its name in buf of length len. On * command-line systems ask the user, on GUI platforms bring up a * dialog box. * * Argument new is designed to choose the style of dialog box * presented to the user: at present only new = 0 is used. (In * file.choose(new), new is logical.) * * char* R_ExpandFileName(const char *s) * * This is a utility function which can be used to expand special * characters in file names. In Unix it's sole function is to expand * and "~"s which occur in filenames. The minimal action is to * return the argument unaltered. * * FILE *R_fopen(const char *filename, const char *mode); * * This is a wrapper function for ``fopen''. It was necessary for * classic MacOS. * * * 6) SYSTEM INFORMATION * * char *R_HomeDir(void) * * Get the R ``home directory'' as a string. * * * 7) PLATFORM DEPENDENT FUNCTIONS * * SEXP do_getenv(SEXP call, SEXP op, SEXP args, SEXP rho) * SEXP do_interactive(SEXP call, SEXP op, SEXP args, SEXP rho) * SEXP do_machine(SEXP call, SEXP op, SEXP args, SEXP rho) * SEXP do_proctime(SEXP call, SEXP op, SEXP args, SEXP rho) * SEXP do_system(SEXP call, SEXP op, SEXP args, SEXP rho) * */