From 1c3abaea89c00a2fd95ebb767d157cb2d264d471 Mon Sep 17 00:00:00 2001 From: Jim Blandy Date: Wed, 9 Jun 1999 12:18:55 +0000 Subject: [PATCH] * genio.c, genio.h: move contents into ports.c, ports.h. The division wasn't useful. * * ports.c (scm_drain_input): new procedure. ports.h: prototype. * fports.c (FPORT_READ_SAFE, FPORT_WRITE_SAFE, FPORT_ALL_OKAY, pre_read, pre_write): removed. (local_fputc, local_fputs, local_ffwrite): use write, not stdio. (scm_standard_stream_to_port): change first arg from FILE * to int fdes. (local_fflush): flush fdes, not FILE *. * fports.h (SCM_NOFTELL): removed. * genio.c, ports.c: don't include filesys.h. * genio.c (scm_getc): don't use scm_internal_select if FPORT. do it in fports.c:local_fgetc. * genio.c: don't use SCM_SYSCALL when calling ptob procedures. do it where it's needed in the port smobs. * filesys.c (scm_input_waiting_p): moved to fports.c, stdio buffer support removed. take SCM arg, not FILE *. * filesys.h: prototype moved too. * fports.c (scm_fdes_to_port): new procedure. (local_fgetc): use read not fgetc. (local_fclose): use close, not fclose. (local_fgets): use read, not fgets * fports.h: prototype for scm_fdes_to_port. * fports.h (scm_fport): new struct. * fports.c (scm_open_file): use open, not fopen. #include fcntl.h * ports.h (struct scm_port_table): change stream from SCM to void *. * ports.c (scm_add_to_port_table): check for memory allocation error. (scm_prinport): remove MSDOS hair. (scm_void_port): set stream to 0 instead of SCM_BOOL_F. (scm_close_port): don't throw errors: do it in fports.c. --- libguile/genio.c | 208 ----------------------------------------------- 1 file changed, 208 deletions(-) rewrite libguile/genio.c (100%) diff --git a/libguile/genio.c b/libguile/genio.c dissimilarity index 100% 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; -} -- 2.20.1