/* * 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(char *prompt, char *buf, int buflen, int hist) * * This function prints the given prompt at the console and then * does a gets(3)-like operation, transferring up to "buflen" characters * into the buffer "buf". The last two characters are set to "\n\0" * to preserve sanity. 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(char *buf, int buflen) * * This function writes the given buffer out to the console. No * special actions are required. Under Unix the characters are * just appended to stdout. * * 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(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(int saveact, int status, int RunLast) * This function invokes any actions which occur at system termination. * * * 5) FILESYSTEM INTERACTION * * int FileExists(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(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. * * int R_ShowFiles(int nfile, char **file, char **headers, char *wtitle, * int del, 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, 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(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 (and then only when the readline * library is available. The minimal action is to return the argument * unaltered. * * FILE *R_fopen(const char *filename, const char *mode); * * This is a (probably unnecessary) wrapper function for ``fopen''. * * * 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) * */