+ return scm_apply (proc, exp, scm_cons (pwps, scm_listofnull));
+}
+
+SCM_PROC (s_port_with_print_state, "port-with-print-state", 2, 0, 0, scm_port_with_print_state);
+
+SCM
+scm_port_with_print_state (SCM port, SCM pstate)
+{
+ SCM pwps;
+ SCM_ASSERT (scm_valid_oport_value_p (port),
+ port, SCM_ARG1, s_port_with_print_state);
+ SCM_ASSERT (SCM_NIMP (pstate) && SCM_PRINT_STATE_P (pstate),
+ pstate, SCM_ARG2, s_port_with_print_state);
+ port = SCM_COERCE_OUTPORT (port);
+ SCM_NEWSMOB (pwps, scm_tc16_port_with_ps, scm_cons (port, pstate));
+ return pwps;
+}
+
+SCM_PROC (s_get_print_state, "get-print-state", 1, 0, 0, scm_get_print_state);
+
+SCM
+scm_get_print_state (SCM port)
+{
+ if (SCM_NIMP (port))
+ {
+ if (SCM_PORT_WITH_PS_P (port))
+ return SCM_PORT_WITH_PS_PS (port);
+ if (SCM_OUTPORTP (port))
+ return SCM_BOOL_F;
+ }
+ return scm_wta (port, (char *) SCM_ARG1, s_get_print_state);