* numbers.c (scm_logand, scm_logior, scm_logxor, scm_logtest,
[bpt/guile.git] / libguile / print.h
index 2025c8f..149d976 100644 (file)
@@ -2,7 +2,7 @@
 
 #ifndef PRINTH
 #define PRINTH
-/*     Copyright (C) 1995,1996 Free Software Foundation, Inc.
+/*     Copyright (C) 1995,1996,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
@@ -56,9 +56,9 @@ extern scm_option scm_print_opts[];
 
 /* State information passed around during printing.
  */
-#define SCM_PRINT_STATE_P(obj) (SCM_NIMP(obj) && SCM_STRUCTP(obj) && \
-                               SCM_STRUCT_VTABLE(obj) == \
-                                  scm_print_state_vtable)
+#define SCM_PRINT_STATE_P(obj) (SCM_STRUCTP(obj) \
+                               && (SCM_STRUCT_VTABLE(obj) \
+                                   == scm_print_state_vtable))
 #define SCM_PRINT_STATE(obj) ((scm_print_state *) SCM_STRUCT_DATA (obj))
 
 #define RESET_PRINT_STATE(pstate) \
@@ -70,8 +70,11 @@ extern scm_option scm_print_opts[];
 #define SCM_WRITINGP(pstate) ((pstate)->writingp)
 #define SCM_SET_WRITINGP(pstate, x) { (pstate)->writingp = (x); }
 
-#define SCM_COERCE_OPORT(p) ((SCM_NIMP(p) && SCM_PRINT_STATE_P(SCM_CDR (p)))? \
-                             SCM_CAR(p) : p)
+#define SCM_COERCE_OUTPORT(p) ((SCM_NIMP (p) \
+                               && SCM_CONSP (p) \
+                               && SCM_PRINT_STATE_P (SCM_CDR (p))) \
+                              ? SCM_CAR (p) \
+                              : p)
 
 #define SCM_PRINT_STATE_LAYOUT "sruwuwuwuwuwpwuwuwuruopr"
 typedef struct scm_print_state {
@@ -109,4 +112,7 @@ extern SCM scm_printer_apply SCM_P ((SCM proc, SCM exp, SCM port,
 extern int scm_valid_oport_value_p SCM_P ((SCM val));
 extern void scm_init_print SCM_P ((void));
 
+#ifdef GUILE_DEBUG
+extern SCM scm_current_pstate SCM_P ((void));
+#endif 
 #endif  /* PRINTH */