diff --git a/libguile/genio.c b/libguile/genio.c index b11bf025e..e69de29bb 100644 --- a/libguile/genio.c +++ b/libguile/genio.c @@ -1,208 +0,0 @@ -/* Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307 USA - * - * As a special exception, the Free Software Foundation gives permission - * for additional uses of the text contained in its release of GUILE. - * - * The exception is that, if you link the GUILE library with other files - * to produce an executable, this does not by itself cause the - * resulting executable to be covered by the GNU General Public License. - * Your use of that executable is in no way restricted on account of - * linking the GUILE library code into it. - * - * This exception does not however invalidate any other reasons why - * the executable file might be covered by the GNU General Public License. - * - * This exception applies only to the code released by the - * Free Software Foundation under the name GUILE. If you copy - * code from other Free Software Foundation releases into a copy of - * GUILE, as the General Public License permits, the exception does - * not apply to the code that you add in this way. To avoid misleading - * anyone as to the status of such modified files, you must delete - * this exception notice from them. - * - * If you write modifications of your own for GUILE, it is your choice - * whether to permit this exception to apply to your modifications. - * If you do not wish that, delete this exception notice. */ - -#include -#include "_scm.h" -#include "chars.h" -#ifdef GUILE_ISELECT -#include "filesys.h" -#endif - -#include "genio.h" - -#ifdef HAVE_STRING_H -#include -#endif - - -void -scm_putc (c, port) - int c; - SCM port; -{ - scm_sizet i = SCM_PTOBNUM (port); - SCM_SYSCALL ((scm_ptobs[i].fputc) (c, port)); -} - -void -scm_puts (s, port) - char *s; - SCM port; -{ - scm_sizet i = SCM_PTOBNUM (port); - SCM_SYSCALL ((scm_ptobs[i].fputs) (s, port)); -} - -void -scm_lfwrite (ptr, size, port) - char *ptr; - scm_sizet size; - SCM port; -{ - scm_sizet i = SCM_PTOBNUM (port); - SCM_SYSCALL (scm_ptobs[i].fwrite (ptr, size, 1, port)); -} - - -void -scm_fflush (port) - SCM port; -{ - scm_sizet i = SCM_PTOBNUM (port); - (scm_ptobs[i].fflush) (port); -} - - - -int -scm_getc (port) - SCM port; -{ - SCM f; - int c; - scm_sizet i; - - if (SCM_CRDYP (port)) - { - c = SCM_CGETUN (port); - SCM_TRY_CLRDY (port); /* Clear ungetted char */ - } - else - { - f = SCM_STREAM (port); - i = SCM_PTOBNUM (port); -#ifdef GUILE_ISELECT - if (SCM_FPORTP (port) && !scm_input_waiting_p ((FILE *) f, "scm_getc")) - { - int n; - SELECT_TYPE readfds; - int fd = fileno ((FILE *) f); - do - { - FD_ZERO (&readfds); - FD_SET (fd, &readfds); - n = scm_internal_select (fd + 1, &readfds, NULL, NULL, NULL); - } - while (n == -1 && errno == EINTR); - } -#endif - SCM_SYSCALL (c = (scm_ptobs[i].fgetc) (port)); - } - - if (c == '\n') - { - SCM_INCLINE (port); - } - else if (c == '\t') - { - SCM_TABCOL (port); - } - else - { - SCM_INCCOL (port); - } - - return c; -} - - -void -scm_ungetc (c, port) - int c; - SCM port; -{ - SCM_CUNGET (c, port); - - if (c == '\n') - { - /* What should col be in this case? - * We'll leave it at -1. - */ - SCM_LINUM (port) -= 1; - } - else - SCM_COL(port) -= 1; -} - - -void -scm_ungets (s, n, port) - char *s; - int n; - SCM port; -{ - /* This is simple minded and inefficient, but unreading strings is - * probably not a common operation, and remember that line and - * column numbers have to be handled... - * - * Please feel freee to write an optimized version! - */ - while (n--) - scm_ungetc (s[n], port); -} - - -char * -scm_do_read_line (port, len) - SCM port; - int *len; -{ - char *s; - scm_sizet i; - - i = SCM_PTOBNUM (port); - SCM_SYSCALL (s = (scm_ptobs[i].fgets) (port, len)); - - /* We should never get an empty string. Every line has a newline at - the end, except for the last one. If the last line has no - newline and is empty, then that's just an ordinary EOF, and we - should have s == NULL. But this seems obscure to me, so we check - this here, to protect ourselves from odd port implementations. */ - if (s && *len <= 0) - abort (); - - /* If we're not at EOF, and there was a newline at the end of the - string, increment the line counter. */ - if (s && s[*len - 1] == '\n') - SCM_INCLINE(port); - - return s; -}