1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-05 06:50:21 +02:00
Commit graph

9141 commits

Author SHA1 Message Date
Jim Blandy
37a33fed28 Patch from Greg Badros:
* snarf.h (SCM_PROC, SCM_PROC1): Use __cplusplus or
GUILE_CPLUSPLUS_SNARF macros to force adding a cast to the last
(function pointer) argument to scm_make_gsubr and scm_make_subr
calls.  This avoids warnings in C++ programs using guile-snarf.
1999-07-17 05:49:20 +00:00
Gary Houston
5c070ca7fd 1999-07-14 Gary Houston <ghouston@easynet.co.uk>
* unif.c (scm_uniform_array_read_x), ports.c (scm_getc): increment
	read_pos after scm_fill_buffer.
	* ioext.c (scm_do_read_line): simplify by ignoring the fill_buffer
	return char.
	* vports.c (sf_fill_buffer), strports.c (stfill_buffer),
	fports.c (fport_fill_buffer): implement the interface change.
	* ports.c (scm_fill_buffer): interface change: no longer increments
	read_pos past the character that's returned.  it seems clearer to
	leave it to the caller to decide what to do (thanks Jim).
	* vports.c (sf_fill_buffer): put the read char into the buffer
	as well as returning it.
	* ports.c (scm_grow_port_cbuf): residue of this deleted procedure
	deleted.
1999-07-14 13:55:01 +00:00
Gary Houston
3fe6190f46 1999-07-13 Gary Houston <ghouston@easynet.co.uk>
* strports.c (scm_strprint_obj): simplify.  start with initial
	buffer size of 0.
	(st_seek): don't allow string to be extended if seeking past
	the end of a read-only port.
1999-07-12  Gary Houston  <ghouston@easynet.co.uk>
	* strports.c (st_seek): change the resize checks.
	* ports.c (scm_ftruncate): throw error if offset works out negative.
	* strports.c (st_flush): increase string size in blocks of
	SCM_WRITE_BLOCK instead of 1. set read_end to read_pos if
	it's greater and reset read_buf_size.
	(scm_mkstrport): set rw_randow if only writing, since read_buf needs
	to be maintained for output ports too (it holds the written
	part of the string, while write_buf may have unwritten buffer
	chars.)
	(st_truncate): rewritten.
	(top of file): added a few notes.
1999-07-06  Gary Houston  <ghouston@easynet.co.uk>
	* strports.c (st_grow_port): set pt->read_pos.  set
	pt->read_buf_size one less than pt->write_buf_size if there's
	an unwritten char at the end of the string.  similarly for
	pt->read_end.
	(st_resize_port): renamed from st_grow_port.
	(st_seek): simplify by assuming that pt->write_pos == pt->read_pos.
	seek from read_end instead of write_end for SEEK_END.
	(st_ftruncate): calculate current length using readbuf, not write
	buf.
	(scm_strport_to_string): use read_buf_size for length.
	(stfill_buffer): don't re-initialise the readbuf.
1999-07-05  Gary Houston  <ghouston@easynet.co.uk>
	* strports.c (scm_strport_to_string): new procedure.
	(scm_call_with_output_string, scm_strprint_obj): use
	scm_strport_to_string.
	used SCM_INUM0 instead of SCM_MAKINUM (0) in a few places.
1999-07-13 11:06:18 +00:00
Mikael Djurfeldt
4dc7f07fde *** empty log message *** 1999-07-08 05:58:11 +00:00
Mikael Djurfeldt
aea5b792f7 * symbols.c (scm_gensym): Bugfix. (Thanks to Johannes Hjorth.) 1999-07-08 05:55:34 +00:00
Mikael Djurfeldt
544b923292 *** empty log message *** 1999-07-07 09:44:53 +00:00
Mikael Djurfeldt
23a621512f Greg's smob patch 1999-07-07 09:44:01 +00:00
Gary Houston
283a1a0e77 1999-07-04 Gary Houston <ghouston@easynet.co.uk>
* unif.c (scm_uniform_array_write): likewise.
	* ioext.c (scm_redirect_port): likewise.
	* ports.c (scm_putc): call scm_read_flush.
	(scm_puts): likewise.
	(scm_lfwrite): likewise.
	(scm_lseek): likewise.
	(scm_ftruncate): likewise.
	* ports.c (scm_fill_buffer): don't take pt argument.  change callers.
	(read_flush_void_port): new proc, for void port ptob.
	* vports.c (sf_read_flush): likewise.
	* strports.c (st_read_flush): take offset arg.
	* fports.c (local_read_flush): use offset, don't reset putback
	buffer here.
	* ports.h (scm_ptobfuns): let read_flush take an offset argument,
	which is the number of chars from the putback buffer.
	* ports.c (scm_read_flush): new procedure, resets the putback
	buffer before calling the ptob routine.
1999-07-04 11:50:54 +00:00
Gary Houston
6c9514275b 1999-07-04 Gary Houston <ghouston@easynet.co.uk>
* strports.c (scm_strprint_obj): bug fix: get pt from the port,
	not from the parameter obj.  (Thanks to Eric Moore.)
	* ports.h: SCM_CRDY, SCM_CUC, SCM_CRDYP, SCM_SETRDY, SCM_CUNGET,
	SCM_CGETUN, SCM_CLRDY, SCM_TRY_CLRDY, SCM_N_READY_CHARS: deleted.
	* strings.c (scm_make_string): throw error if 2nd arg isn't
	a char.
	* unif.c (scm_uniform_array_read_x): fix reading from a port.
	allow non-fports.
	(scm_uniform_array_write): likewise.
1999-06-29  Gary Houston  <ghouston@easynet.co.uk>
	* ports.c (scm_drain_input): rewritten.
	* fports.c (local_fclose): check putback_buf.
	(local_read_flush): likewise.
	* ports.c (scm_remove_from_port_table): maybe free putback_buf.
	* ports.h (scm_port): replace cbuf/cbufend/cp with putback_buf/
	putback_buf_size.
	(SCM_INITIAL_PUTBACK_BUF_SIZE): renamed from SCM_INITIAL_CBUF_SIZE.
	* ports.c (scm_grow_port_cbuf): deleted.
	(scm_add_to_port_table): initialise putback_buf to 0.  remove cbuf
	stuff.
	(scm_char_ready_p): check putback_buf
	(scm_fill_buffer): likewise.
	(scm_ungetc): rewritten.
1999-06-27  Gary Houston  <ghouston@easynet.co.uk>
	* fports.c (local_fclose): account for push-back buffer.
	* ports.c (scm_char_ready_p): check the push-back buffer in
	a new way.
	* ioext.c (scm_do_read_line): remove the extra code to handle
	the push-back buffer.
	* ports.c (scm_getc): don't use SCM_CRDYP etc.
	* ioext.c (scm_do_read_line): call scm_fill_buffer.
	* ports.c (scm_ungetc): don't call SCM_CUNGET.  reset the
	read buffer pointers.
	scm_fill_buffer: new procedure.
	(scm_getc): call scm_fill_buffer.
	* ports.h (struct scm_port): saved_read_buf, saved_read_pos,
	saved_read_end: new fields.
1999-07-04  Gary Houston  <ghouston@easynet.co.uk>
	* configure.in: don't check for ways to violate stdio abstraction.
1999-07-04 11:02:21 +00:00
Mikael Djurfeldt
0af045dfe5 *** empty log message *** 1999-06-23 16:00:30 +00:00
Mikael Djurfeldt
af1f9aa293 * dynl-dl.c (sysdep_dynl_link): Added parenthesis around the
trinary conditional in order for the flag computation to be
correct.
1999-06-23 16:00:15 +00:00
Mikael Djurfeldt
8b5af48ab1 *** empty log message *** 1999-06-23 11:19:45 +00:00
Mikael Djurfeldt
ff2961ec2c * tag.c (scm_tag): Base tag on vtable pointer. 1999-06-23 11:19:25 +00:00
Mikael Djurfeldt
ad1965993e * struct.c, struct.h:
(scm_struct_i_free): New hidden struct slot.  Holds destructor for
instances to this vtable.
(scm_struct_free_0): New destructor: Doesn't deallocate data.
(scm_struct_free_light): New destructor: Deallocates a light
struct (i.e. a struct without hidden slots).
(scm_struct_free_standard): New destructor: Deallocates standard
structs.
(scm_struct_free_entity): New destructor: Deallocates entity
structs.
(SCM_SET_VTABLE_DESTRUCTOR): New macro.
Changes to hidden slots:
(scm_struct_i_size): scm_struct_i_flags now shares space with
scm_struct_i_size which holds the size of light structs.
(scm_struct_i_n_words): This slot has changed meaning.  Previously
it included hidden slots.  Now it indicates visible slots.
(scm_alloc_struct): Clear flags.
(SCM_STRUCTF_MASK): 4 new flag positions added => 12 bits.
(struct_num, scm_struct_i_tag): Removed.
(scm_struct_vtable_tag): Base tag on the pointer to mallocated
memory.
(scm_struct_ihashq): Base hash value on pointer to struct handle.
1999-06-23 11:17:36 +00:00
Mikael Djurfeldt
37b83f68b0 * snarf.h (SCM_KEYWORD, SCM_GLOBAL_KEYWORD): New macros. 1999-06-23 11:16:52 +00:00
Mikael Djurfeldt
2eafbe52c6 * objects.h (SCM_SET_CLASS_DESTRUCTOR,
SCM_SET_CLASS_INSTANCE_SIZE): New macros.
1999-06-23 11:16:44 +00:00
Mikael Djurfeldt
135e76f876 * objects.c (scm_init_objects): Initialize destructor slot of the
primordial entity class.
1999-06-23 11:16:28 +00:00
Mikael Djurfeldt
d6af5a438b * libguile.h: #include "objects.h" 1999-06-23 11:16:18 +00:00
Mikael Djurfeldt
430a6cc34e * keywords.c, keywords.h (scm_c_make_keyword): New function.
(We should remove the use of the prefix '-'.)
1999-06-23 11:16:09 +00:00
Mikael Djurfeldt
f0cb1733dd * gc.c (scm_gc_sweep): Call struct free slot. 1999-06-23 11:15:58 +00:00
Marius Vollmer
3f737ec81d *** empty log message *** 1999-06-21 15:18:48 +00:00
Marius Vollmer
8e3ab00333 Resolved harmless conflict. 1999-06-21 15:16:54 +00:00
Marius Vollmer
56a19408b8 * dynl.c (DYNL_GLOBAL): New.
(sysdep_dynl_link): Added `flags' argument.
(kw_global, sym_global): New.
(scm_dynamic_link): Handle keyword arguments.  Pass suitable flags
to sysdep_dynl_link.
* dynl-dl.c (sysdep_dynl_link): Handle new `flags' argument by
conditrionally adding RTLD_GLOBAL to DLOPEN_MODES.
* dynl-shl.c (sysdep_dynl_link): Add and ignore new flags
argument.
* dynl-dld.c (sysdep_dynl_link): Add and ignore new flags
argument.
* dynl.h (scm_dynamic_link): Added rest argument.
* dynl.c (sysdep_dynl_unlink, sysdep_dynl_func): Use const
qualifier for char* argument, to match prototypes.  Thanks to Mark
Elbrecht.
1999-06-21 15:14:01 +00:00
Jim Blandy
56ef2fe230 *** empty log message *** 1999-06-21 14:50:36 +00:00
Jim Blandy
a80a90e951 * dynl.c (no_dynl_error, sysdep_dynl_link, sysdep_dynl_unlink,
sysdep_dynl_func): Use ANSI declarations, and const char *
pointers.  (Thanks to Mark Elbrecht.)
1999-06-21 14:50:19 +00:00
Jim Blandy
560f4b23a4 *** empty log message *** 1999-06-19 20:21:25 +00:00
Jim Blandy
ff4670212a Patch from Greg Harvey:
* eq.c, eval.c, list.c, ramap.c, vectors.c: Always write parens
around the condition of an `if', `while', etc., even if the
condition is a macro invocation that expands to something
surrounded by parens.  It's more readable.
1999-06-19 20:21:07 +00:00
Jim Blandy
727e010e9f *** empty log message *** 1999-06-19 17:27:01 +00:00
Jim Blandy
07cff7d7e7 *** empty log message *** 1999-06-19 17:26:09 +00:00
Jim Blandy
d9c393f5fa * eval.c (scm_map, scm_for_each): Verify that all arguments are
proper lists, and of the appropriate lengths.
(check_map_args): New function.
1999-06-19 17:25:25 +00:00
Jim Blandy
98947fdca4 *** empty log message *** 1999-06-19 16:11:55 +00:00
Jim Blandy
01a119acae * guardians.c (guardian_t): `next' - new field to be used for
chaining the live guardians in a single-linked list during the GC
mark phase.
(GUARDIAN_NEXT): convenience macro to access the `next' field.
(guardians, guardians_size, n_guardians): deleted.
(first_live_guardian, current_link_field): new globals used to
point to the head of the live guardian list and current `next'
field, respectively.
(g_mark): append the guardian to the live guardian list.
(scm_guardian_gc_init): zero the live guardian list.
(scm_guardian_zombify): iterate through the live guardian list.
1999-06-19 16:11:38 +00:00
Jim Blandy
1cc7e8faa4 *** empty log message *** 1999-06-16 10:18:34 +00:00
Jim Blandy
a5c314c80e * gc.c (scm_mallocated): Just make this signed.
(scm_igc): Check for underflow by seeing if this is negative.
Much cleaner.
* gc.h (scm_mallocated): Fix declaration.
(Thanks to Greg Harvey.)
1999-06-16 10:18:27 +00:00
Jim Blandy
7c9310c86d *** empty log message *** 1999-06-16 09:00:35 +00:00
Jim Blandy
acdb12daa8 * ports.h: #include <sys/types.h>, to get a definition for `off_t'. 1999-06-16 08:53:46 +00:00
Jim Blandy
797da112b8 *** empty log message *** 1999-06-15 14:01:25 +00:00
Jim Blandy
c7abe4f351 * stime.c (bdtime2c): Initialize lt->gmtoff and lt->tm_zone from
sbd_time.  (Thanks to Eric Hanchrow.)
1999-06-15 14:01:13 +00:00
Jim Blandy
ab4bef8567 Fix from Ken Raeburn <raeburn@raeburn.org>:
* weaks.c (scm_make_weak_vector): Add another extra slot before
vector contents, to be used only during garbage collection.
* weaks.h (SCM_WVECT_GC_CHAIN): New macro to access it.
* gc.c (scm_weak_vectors): Now a SCM instead of a SCM*, and now
static.
(scm_weak_size, scm_n_weak): Deleted.
(scm_igc): Use SCM_WVECT_GC_CHAIN to build up a chain of weak
vectors without allocating new storage during GC, using
scm_weak_vectors as the head of the chain.
(scm_mark_weak_vector_spines): Walk SCM_WVECT_GC_CHAIN chain
instead of stepping through an array.
(scm_gc_sweep): Update offset used to find start of weak vector to
free it.
(scm_init_storage): Set scm_weak_vectors to EOL.
Fix from Ken Raeburn <raeburn@raeburn.org>:
* gc.c (already_in_gc): New variable.
(scm_igc): Set and clear already_in_gc; abort if it's set at
entry.
1999-06-15 14:00:24 +00:00
Jim Blandy
250da36910 Fix from Ken Raeburn <raeburn@raeburn.org>:
* weaks.c (scm_make_weak_vector): Add another extra slot before
vector contents, to be used only during garbage collection.
* weaks.h (SCM_WVECT_GC_CHAIN): New macro to access it.
* gc.c (scm_weak_vectors): Now a SCM instead of a SCM*, and now
static.
(scm_weak_size, scm_n_weak): Deleted.
(scm_igc): Use SCM_WVECT_GC_CHAIN to build up a chain of weak
vectors without allocating new storage during GC, using
scm_weak_vectors as the head of the chain.
(scm_mark_weak_vector_spines): Walk SCM_WVECT_GC_CHAIN chain
instead of stepping through an array.
(scm_gc_sweep): Update offset used to find start of weak vector to
free it.
(scm_init_storage): Set scm_weak_vectors to EOL.
1999-06-15 14:00:11 +00:00
Jim Blandy
da6929b4b8 *** empty log message *** 1999-06-14 16:30:10 +00:00
Jim Blandy
cb8dfa3f67 * fports.c (local_seek): Signal an error if the seek fails.
* ports.c (scm_lseek): Don't check return value of port's seek
function; it's its job to signal an error if there's a problem.
1999-06-14 16:29:48 +00:00
Jim Blandy
afc5764cd0 * ioext.c (scm_read_line): Switch to reading properly.
* fports.c, fports.h, gc.c, gdbint.c, ioext.c, ports.c, ports.h,
scmsigs.c, strports.c, vports.c: Install the sources which
actually correspond to the changes described below.  I got the
ChangeLog entries and the patch from two different places...
1999-06-12 17:26:56 +00:00
Jim Blandy
2f9c714095 *** empty log message *** 1999-06-12 17:26:51 +00:00
Jim Blandy
754c9491fb * strports.c (scm_call_with_output_string): Don't include the
extra character at the end of the string in the result.
* fports.c, fports.h, gc.c, gdbint.c, ioext.c, ports.c, ports.h,
scmsigs.c, strports.c, vports.c: Install the sources which
actually correspond to the changes described below.  I got the
ChangeLog entries and the patch from two different places...
1999-06-12 17:26:34 +00:00
Jim Blandy
840ae05d91 * fports.c, fports.h, gc.c, gdbint.c, ioext.c, ports.c, ports.h,
scmsigs.c, strports.c, vports.c: Install the sources which
actually correspond to the changes described below.  I got the
ChangeLog entries and the patch from two different places...
1999-06-12 17:26:22 +00:00
Jim Blandy
aad827f4c5 *** empty log message *** 1999-06-09 12:25:26 +00:00
Jim Blandy
ee149d0368 * ioext.c (scm_do_read_line): Rewritten to use memchr to find the
newline.  A bit faster, and definitely hairier.
	(scm_read_line): Count newlines here instead.
	* strings.c (scm_take_str): New function.
	(scm_take0str): Reimplement in terms of scm_take_str.  * strings.h
	(scm_take_str): New declaration.  * ioext.c (scm_read_line): Use
	scm_take_str, to avoid copying the string.
	Add some simple-minded support for line buffered ports.
	* ports.h (SCM_BUFLINE): New flag for ports.
	* init.c (scm_init_standard_ports): Request line-buffering on
	the standard output port.
*	* ports.c (scm_mode_bits): Recognize 'l' as a request for line
	buffering.
	(scm_putc, scm_puts, scm_lfwrite): If the port is line-buffered,
	and there's a newline to be written, flush the port.
	* ports.c: (scm_lseek): clear buffers even if just reading current
	position.
	* fports.c (local_fclose): call local_fflush unconditionally.
	(various): don't use the scm_must... memory procs.
	* ports.h (scm_port): make read_pos a pointer to const.
	strports.c: take care of rw_active and rw_randow.
	fports.c: scm_fport_drain_input: removed.  do it all in ports.c.
	strports.c (scm_mkstrport): check that pos is reasonable.
	ioext.c (scm_ftell, scm_fseek): use lseek.
	(SCM_CLEAR_BUFFERS): macro deleted.
	ioext.c (redirect_port: use ptob fflush, read_flush.
	ports.h (scm_ptobfuns): add ftruncate.
	ports.c (scm_newptob): set ftruncate.
	adjust ptob tables.
*	ports.c (scm_ftruncate): new procedure.
	fports.c (local_ftrunate), strports.c (str_ftruncate): new procs.
	strports.c (st_seek, st_grow_port): new procs.
	fports.h (scm_port): change size types from int to off_t.
	ports.c (scm_init_ports): initialise the seek symbols here
	instead of in ioext.c.
	strports.c (scm_call_with_output_string): start with an empty
	string, so seek and ftruncate can be used.
	* ports.h (scm_ptobfuns): add a read_flush procedure which is the
	equivalent to fflush for the read buffer.
	* ports.c (scm_newptob): set read_flush.
	ports.c (void_port_ptob): set read_flush.
	fports.c (local_read_flush): new proc.  add to ptob.
	strport.c (st_read_flush): likewise.
	vport.c (sf_read_flush): likewise.
	fports.h (struct scm_fport): remove random member.  there's nothing
	left but fdes.  leaving it as a struct to allow for future changes.
	fports.c: replace usage of scm_fport::random with scm_port::rw_random.
	ports.c: (scm_putc, scm_puts, scm_lfwrite): call the read_flush
	ptob proc if the read buffer is filled.
	* ports.h (scm_port): add a rw_random member and replace
	reading and writing members with rw_active member.
	SCM_PORT_READ/SCM_PORT_WRITE: new values.
	* ports.h (struct scm_port_table): add writing and reading members
	to replace write_needs_seek: it isn't good enough for non-fports.
	ports.c, ioext.c, fports.c: corresponding changes.
	(struct scm_port_table): give it a typedef and rename to scm_port.
	ports.c, fports.c, strports.c, vports.c, ioext.c, ports.h:
	corresponding changes.
	* ports.c (scm_newptob): bugfix: set seek member.
*	* (scm_lseek): new procedure, using code from ioext.c:scm_fseek
	and generalised to all port types.
	* scmsigs.c (scm_init_scmsigs): set the SA_RESTART flag for all
	signals (it was only being done for handlers installed from Scheme).
	Otherwise (for example) SIGSTOP followed by SIGCONT on an interpreter
	waiting for input caused an EINTR error from read.
	* ports.h (struct scm_port_table): make all the char members
	unsigned, so they convert to int without becoming negative if large.
	* fports.c (scm_fdes_wait_for_input): forgot to check compilation
	with threads enabled.  rename this procedure to
	fport_wait_for_input and take a port instead of a fdes.
	use scm_fport_input_waiting_p instead of scm_fdes_waiting_p.
	* readline.c (scm_readline): Applied a patch from Greg Harvey to
	get readline support working again: use fdopen to get FILE objects.
	* gc.c (scm_init_storage): install an atexit proc to flush the
	ports.
	(cleanup): the new proc.  it sets a global variable which can be
	checked by the ptob flush procs to avoid trying to throw
	exceptions during exit.  not very pleasant but it seems more reliable.
	* fports.c (local_fflush): check terminating variable and if set
	don't throw exception.
	* CHECKME: that the atexit proc is installed if unexec used.
	* throw.c (scm_handle_by_message): don't flush all ports here.
	it still causes bus errors.
	* fports.h (SCM_FPORT_CLEAR_BUFFERS): rename to SCM_CLEAR_BUFFERS
	and move to ioext.c.
	* fports.c (scm_fdes_waiting_p): merged into fport_input_waiting_p.
	* ports.c (scm_char_ready_p): check the port buffer and call the
	ptob entry if needed.
	* ports.h (scm_ptobfuns): input_waiting_p added.  change all the
	ptob initialisers.  use it in char-ready
	* ioext.c (scm_do_read_line): moved from ports.c.  make it static.
	* vports.c (sfflush): modified to write a char (since softports
	currently use shortbuf.)
	* fports.c (scm_standard_stream_to_port): moved to init.c and
	made static.
	* init.c (scm_init_standard_ports): make stdout and stderr
	unbuffered if connected to a terminal.  with stdio they
	were line-buffered by default.
	* ports.h (scm_ptobfuns): change fflush return to void.
	change flush proc definitions.
	* strports.c (scm_call_with_output_string): get size from
	buffer instead of port stream.
	(scm_strprint_obj): likewise.
	(st_flush): new proc.
	* ports.h (struct scm_port_table): added write_end member,
	as an optimisation.  set it where write_buf_size is set.
	* ports.h (struct scm_port_table): change stream from void *
	back to SCM.  SCM presumably must be large enough to hold a
	pointer (and probably vice versa but who knows.)
	(SCM_SSTREAM): deleted.  change users back to SCM_STREAM.
	(scm_puts): rewritten
	* fports.c (local_ffwrite, local_fputs): removed.
	* strports.c (stputc, stputs, stwrite): dyked out (FIXME)
	* vports.c (sfputc, sfputs, sfwrite) likewise.
	* ports.c (write_void_port, puts_void_port): removed.
	(putc_void_port, getc_void_port, fgets_void_port): likewise.
	* ports.c (scm_lfwrite): rewritten using fport.c version.
	* fports.c (local_fputc): deleted.
	* ports.c (scm_add_to_port_table): initialise write_needs_seek.
	* ports.h (scm_ptobfuns): add seek function pointer.
	* fports.c: set it to local_seek, new procedure.
	* fports.h (SCM_MAYBE_DRAIN_INPUT): moved to ports.c.
	use ptob for seek. take ptob instead of fport arg.
	* ports.h (struct scm_port_table): new member write_needs_seek,
	replaces reading member in fport struct.
	* vports.c (sfgetc): store the getted char into the buffer.
	rename to sf_fill_buffer and install it for fill-buffer in ptob.
	the Scheme interface is still a	procedure that gets a char.
	(scm_make_soft_port): set up the port buffer (shortbuf).
	* fports.c (local_fgetc, local_fgets): deleted.
	* strports.c (stgetc): likewise.
	* ports.c: scm_generic_fgets: likewise.
	* ports.h (scm_ptobfuns): add fill_buffer.
	* ports.c (scm_newptob): assign it.
	* strports.c (scm_mkstrport): set up the buffer.
	put just the string into the stream, not cons (pos stream).
	(stfill_buffer): new proc.
	* ports.h: fport buffer moved into port table: to be
	used for all port types.
	* throw.c (scm_handle_by_message): flush ports at exit.
	* socket.c (scm_sock_fd_to_port): use scm_fdes_to_port.
	(scm_getsockopt, scm_setsockopt, scm_shutdown, scm_connect,
	scm_bind, scm_listen, scm_accept, scm_getsockname,
	scm_getpeername, scm_recv, scm_send, scm_recvfrom,
	scm_sendto,
	use SCM_FPORT_FDES.  use SCM_OPFPORTP not SCM_FPORTP.
	* posix.c (scm_getgroups): use SCM_ALLOW/DEFER_INTS.
	(scm_ttyname): use SCM_FPORT_FDES.
	(scm_tcgetpgrp, scm_tcsetpgrp): likewise.
	* ioext.c (scm_isatty_p): use SCM_FPORT_FDES.
	(scm_fdes_to_ports): modified.
	(scm_fdopen): use scm_fdes_to_port.
	* ports.c (scm_init_ports): don't try to flush ports using
	atexit().  it's too late, errors will cause SEGV.
	* fports.c (scm_fport_buffer_add): new procedure.
	* fports.h (SCM_FDES_RANDOM_P): new macro.  use it in
	scm_fdes_to_port and scm_redirect_port.
	* ioext.c (scm_redirect_port): use setvbuf to set buffers in the
	new port.  reset fp->random.
	* fports.c (scm_fdes_to_port), ports.c (scm_void_port),
	filesys.c (scm_opendir):
	restore defer interrupts while the port is constructed.
*	(scm_setvbuf): if mode is _IOFBF and size is not supplied,
	derive buffer size from fdes or use a default.
	(scm_fdes_to_port): use setvbuf instead of creating the buffers
	directly.
	vports.c (various places): use SCM_SSTREAM.
	strports.c: likewise.
	* gdbint.c: likewise.
	* ports.h (SCM_SSTREAM): new macro.
	* fports.c (scm_input_waiting_p): use scm_return_first, since port
	may be removed from the stack by the tail call to scm_fdes_waiting_p.
	* fports.h (SCM_CLEAR_BUFFERS): new macro.
	* ports.c (scm_force_output): call scm_fflush.
	* print.c (scm_newline): don't check errno for EPIPE (it wouldn't
*	reach this point.)  don't flush port (if scm_cur_outp).
	* fports.h (SCM_FPORT_FDES): new macro.
	* vports.c (sfflush): don't need to set errno.
	* ports.c: install scm_flush_all_ports to be run on exit.
	ports.c fports.c ioext.c posix.c socket.c net_db.c filesys.c:
	removed all uses of SCM_DEFER/ALLOW ints for now.  they were mainly
	just protecting errno.  some may need to be put back.
	* scmsigs.c (take_signal): save and restore errno while this
	proc runs.
	*fports.c (print_pipe_port, local_pclose, scm_pipob): deleted.
*	open-pipe, close-pipe are emulated in (ice-9 popen)
	ports.c (scm_ports_prehistory): don't init scm_pipob.
	ports.h (scm_tc16_pipe): deleted.
	posix.c (scm_open_pipe, scm_close_pipe): deleted.
	* ioext.c (scm_primitive_move_to_fdes): use fport.
	* fport.c (scm_fport_fill_buffer): flush write buffer if needed.
	change arg type from scm_fport to SCM port.
	fport.h (SCM_SETFDES): removed.
	(SCM_MAYBE_DRAIN_INPUT): new macro.
	* ioext.c (scm_dup_to_fdes): use SCM_FSTREAM.
	(scm_ftell): always use lseek and account for the buffer.
	(scm_fileno): use fport buffer.
	(scm_fseek): clear fport buffers.  always use lseek.
	* posix.c (scm_pipe): use fport buffer.
	* unif.c: include fports.h instead of genio.h.
	* fports.c (scm_fdes_wait_for_input, scm_fport_fill_buffer): new
	procedures.
	(local_fgetc): use them.
	(local_ffwrite): use buffer.
	(local_fgets): use buffer.
	(scm_setbuf0): deleted.
	(scm_setvbuf): set the buffer.
	(scm_setfileno): deleted.
	(scm_evict_ports): set fdes directly.
*	(scm_freopen): deleted.  doesn't seem useful in Guile.
	(scm_stdio_to_port): deleted.
	fports.h (struct scm_fport): add shortbuf member to avoid separate
	code for unbuffered ports.
	(SCM_FPORTP, SCM_OPFPORTP, SCM_OPINFPORTP, SCM_OPOUTFPORTP): moved
	from ports.h.
	* genio.c, genio.h: move contents into ports.c, ports.h.  The
	division wasn't useful.
	* fports.c, fports.h (scm_fport_drain_input): new procedure.
	* ports.c (scm_drain_input): call scm_fport_drain_input.
	* scm_fdes_waiting_p: new procedure.
	* fports.c (scm_fdes_to_port): allocate read and/or write buffers.
	(scm_input_waiting_p): check the buffer.
	(local_fgetc, local_fflush, local_fputc): likewise.
	* fports.h (scm_fport): read/write_buf,_pos,_buf_end,,_buf_size:
	new members.
	* init.c (scm_init_standard_ports): pass fdes instead of FILE *.
*	* 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.
1999-06-09 12:19:58 +00:00
Jim Blandy
1c3abaea89 * 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.
1999-06-09 12:18:55 +00:00
Jim Blandy
c45acc349c * gc.c (scm_igc): Check for scm_mallocated underflow. Otherwise,
it shows up as terrible performance, as we GC constantly.
* gc.c (scm_init_storage): install an atexit proc to flush the
ports.
(cleanup): the new proc.  it sets a global variable which can be
checked by the ptob flush procs to avoid trying to throw
exceptions during exit.  not very pleasant but it seems more reliable.
* fports.c (local_fflush): check terminating variable and if set
don't throw exception.
* CHECKME: that the atexit proc is installed if unexec used.
1999-06-09 12:18:40 +00:00