* genio.c, genio.h: move contents into ports.c, ports.h. The
authorJim Blandy <jimb@red-bean.com>
Wed, 9 Jun 1999 12:18:55 +0000 (12:18 +0000)
committerJim Blandy <jimb@red-bean.com>
Wed, 9 Jun 1999 12:18:55 +0000 (12:18 +0000)
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

dissimilarity index 100%
index b11bf02..e69de29 100644 (file)
@@ -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.  */
-\f
-#include <stdio.h>
-#include "_scm.h"
-#include "chars.h"
-#ifdef GUILE_ISELECT
-#include "filesys.h"
-#endif
-
-#include "genio.h"
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-\f
-
-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);
-}
-
-\f
-
-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;
-}