dol: initial dol commit
[jump.git] / dol / src / dol / visitor / rtems / lib / buffer_test_io.h
diff --git a/dol/src/dol/visitor/rtems/lib/buffer_test_io.h b/dol/src/dol/visitor/rtems/lib/buffer_test_io.h
new file mode 100644 (file)
index 0000000..605a608
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+ *  Support for running the test output through a buffer
+ * 
+ *  buffer_test_io.h,v 1.1 2002/08/02 00:51:52 joel Exp
+ */
+
+#ifndef __BUFFER_TEST_IO_h
+#define __BUFFER_TEST_IO_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdlib.h>
+
+/*
+ *  Uncomment this to get buffered test output.  When commented out,
+ *  test output behaves as it always has and is printed ASAP.
+ */
+
+/* #define TESTS_BUFFER_OUTPUT */
+
+#if !defined(TESTS_BUFFER_OUTPUT)
+
+#define rtems_test_exit(_s) \
+  do { \
+    exit(_s); \
+  } while (0)
+
+#define FLUSH_OUTPUT() \
+  do { \
+    fflush(stdout); \
+  } while (0)
+
+#else  /* buffer test output */
+
+#define _TEST_OUTPUT_BUFFER_SIZE 2048
+extern char _test_output_buffer[_TEST_OUTPUT_BUFFER_SIZE];
+void _test_output_append(char *);
+void _test_output_flush(void);
+
+#define rtems_test_exit(_s) \
+  do { \
+    _test_output_flush(); \
+    exit(_s); \
+  } while (0)
+
+#undef printf
+#define printf(...) \
+  do { \
+     char _buffer[128]; \
+     sprintf( _buffer, __VA_ARGS__); \
+     _test_output_append( _buffer ); \
+  } while (0)
+
+#undef puts
+#define puts(_string) \
+  do { \
+     char _buffer[128]; \
+     sprintf( _buffer, "%s\n", _string ); \
+     _test_output_append( _buffer ); \
+  } while (0)
+
+#undef putchar
+#define putchar(_c) \
+  do { \
+     char _buffer[2]; \
+     _buffer[0] = _c; \
+     _buffer[1] = '\0'; \
+     _test_output_append( _buffer ); \
+  } while (0)
+
+/* we write to stderr when there is a pause() */
+#define FLUSH_OUTPUT() _test_output_flush()
+
+#if defined(TEST_INIT) || defined(CONFIGURE_INIT)
+
+char _test_output_buffer[_TEST_OUTPUT_BUFFER_SIZE];
+int _test_output_buffer_index = 0;
+
+void _test_output_append(char *_buffer)
+{
+  char *p;
+  
+  for ( p=_buffer ; *p ; p++ ) {
+    _test_output_buffer[_test_output_buffer_index++] = *p;
+    _test_output_buffer[_test_output_buffer_index]   = '\0';
+#if 0
+    if ( *p == '\n' ) {
+      fprintf( stderr, "BUFFER -- %s", _test_output_buffer );
+      _test_output_buffer_index = 0;
+     _test_output_buffer[0]   = '\0';
+    }
+#endif
+    if ( _test_output_buffer_index >= (_TEST_OUTPUT_BUFFER_SIZE - 80) ) 
+      _test_output_flush();
+  }
+}
+
+#include <termios.h>
+#include <unistd.h>
+
+void _test_output_flush(void)
+{
+  fprintf( stderr, "%s", _test_output_buffer );
+  _test_output_buffer_index = 0;
+  tcdrain( 2 );
+}
+
+#endif  /* TEST_INIT */
+#endif /* TESTS_BUFFER_OUTPUT */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif