Author: yamakenz
Date: Mon Aug 6 15:50:57 2007
New Revision: 4803
Modified:
sigscheme-trunk/NEWS
sigscheme-trunk/src/port.c
sigscheme-trunk/src/sigscheme.h
Log:
* src/sigscheme.h
- (scm_p_current_error_port, scm_p_set_current_input_portx,
scm_p_set_current_output_portx, scm_p_set_current_error_portx): New
function decl
* src/port.c
- (scm_p_current_error_port, scm_p_set_current_input_portx,
scm_p_set_current_output_portx, scm_p_set_current_error_portx): New
function
* NEWS
-- Update
Modified: sigscheme-trunk/NEWS
==============================================================================
--- sigscheme-trunk/NEWS (original)
+++ sigscheme-trunk/NEWS Mon Aug 6 15:50:57 2007
@@ -27,6 +27,10 @@
- New character codec procedures %%current-char-codec,
%%set-current-char-codec! and with-char-codec
+ - New port handling procedures %%current-error-port,
+ %%set-current-input-port!, %%set-current-output-port!,
+ %%set-current-error-port!
+
- New debugging procedures %%pair-mutable?, %%string-mutable?,
%%vector-mutable?
Modified: sigscheme-trunk/src/port.c
==============================================================================
--- sigscheme-trunk/src/port.c (original)
+++ sigscheme-trunk/src/port.c Mon Aug 6 15:50:57 2007
@@ -331,6 +331,56 @@
return scm_out;
}
+SCM_EXPORT ScmObj
+scm_p_current_error_port(void)
+{
+ DECLARE_FUNCTION("%%current-error-port", procedure_fixed_0);
+
+ return scm_err;
+}
+
+SCM_EXPORT ScmObj
+scm_p_set_current_input_portx(ScmObj newport)
+{
+ DECLARE_FUNCTION("%%set-current-input-port!", procedure_fixed_1);
+
+ SCM_ENSURE_LIVE_PORT(newport);
+ if (!(SCM_PORT_FLAG(newport) & SCM_PORTFLAG_INPUT))
+ ERR_OBJ("input port required but got", newport);
+
+ scm_in = newport;
+
+ return SCM_TRUE;
+}
+
+SCM_EXPORT ScmObj
+scm_p_set_current_output_portx(ScmObj newport)
+{
+ DECLARE_FUNCTION("%%set-current-output-port!", procedure_fixed_1);
+
+ SCM_ENSURE_LIVE_PORT(newport);
+ if (!(SCM_PORT_FLAG(newport) & SCM_PORTFLAG_OUTPUT))
+ ERR_OBJ("output port required but got", newport);
+
+ scm_out = newport;
+
+ return SCM_TRUE;
+}
+
+SCM_EXPORT ScmObj
+scm_p_set_current_error_portx(ScmObj newport)
+{
+ DECLARE_FUNCTION("%%set-current-error-port!", procedure_fixed_1);
+
+ SCM_ENSURE_LIVE_PORT(newport);
+ if (!(SCM_PORT_FLAG(newport) & SCM_PORTFLAG_OUTPUT))
+ ERR_OBJ("output port required but got", newport);
+
+ scm_err = newport;
+
+ return SCM_TRUE;
+}
+
/* TODO: dynamic environment for scm_in (although R5RS does not require it) */
SCM_EXPORT ScmObj
scm_p_with_input_from_file(ScmObj filepath, ScmObj thunk)
Modified: sigscheme-trunk/src/sigscheme.h
==============================================================================
--- sigscheme-trunk/src/sigscheme.h (original)
+++ sigscheme-trunk/src/sigscheme.h Mon Aug 6 15:50:57 2007
@@ -1588,6 +1588,10 @@
SCM_EXPORT ScmObj scm_p_output_portp(ScmObj obj);
SCM_EXPORT ScmObj scm_p_current_input_port(void);
SCM_EXPORT ScmObj scm_p_current_output_port(void);
+SCM_EXPORT ScmObj scm_p_current_error_port(void);
+SCM_EXPORT ScmObj scm_p_set_current_input_portx(ScmObj newport);
+SCM_EXPORT ScmObj scm_p_set_current_output_portx(ScmObj newport);
+SCM_EXPORT ScmObj scm_p_set_current_error_portx(ScmObj newport);
SCM_EXPORT ScmObj scm_p_with_input_from_file(ScmObj filepath, ScmObj thunk);
SCM_EXPORT ScmObj scm_p_with_output_to_file(ScmObj filepath, ScmObj thunk);
SCM_EXPORT ScmObj scm_p_open_input_file(ScmObj filepath);