You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
159 lines
2.9 KiB
159 lines
2.9 KiB
// I/O through <stdio.h> or <iostream.h>
|
|
|
|
#ifndef _CL_IO_H
|
|
#define _CL_IO_H
|
|
|
|
#include "cl_types.h"
|
|
#include "cl_modules.h"
|
|
|
|
#if !defined(CL_IO_STDIO) && !defined(CL_IO_IOSTREAM)
|
|
// Prefer iostream based I/O - this is what people expect.
|
|
#define CL_IO_IOSTREAM
|
|
#endif
|
|
|
|
|
|
#if defined(CL_IO_STDIO)
|
|
|
|
// I/O through <stdio.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#define cl_istream FILE *
|
|
#define cl_ostream FILE *
|
|
#define cl_stdin stdin
|
|
#define cl_stdout stdout
|
|
#define cl_stderr stderr
|
|
extern FILE* cl_debugout;
|
|
|
|
// Elementary operations on cl_istream
|
|
|
|
#define cl_EOF EOF
|
|
|
|
inline int freadchar (cl_istream stream)
|
|
{
|
|
// return fgetc(stream);
|
|
return getc(stream);
|
|
}
|
|
|
|
inline int funreadchar (cl_istream stream, int c)
|
|
{
|
|
return ungetc(c,stream);
|
|
}
|
|
|
|
// Elementary operations on cl_ostream
|
|
|
|
inline void fprintchar (cl_ostream stream, char c)
|
|
{
|
|
// fputc(c,stream);
|
|
putc(c,stream);
|
|
}
|
|
|
|
inline void fprint (cl_ostream stream, const char * string)
|
|
{
|
|
// fprintf(stream,"%s",string);
|
|
fputs(string,stream);
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
#if defined(CL_IO_IOSTREAM)
|
|
|
|
// I/O through <iostream.h>
|
|
|
|
#ifdef floor
|
|
#undef floor
|
|
#include <iostream.h>
|
|
#define floor cln_floor
|
|
#else
|
|
#include <iostream.h>
|
|
#endif
|
|
|
|
#define cl_istream istream&
|
|
#define cl_ostream ostream&
|
|
#define cl_stdin cin
|
|
#define cl_stdout cout
|
|
#define cl_stderr cerr
|
|
extern ostream* cl_debugout_stream;
|
|
#define cl_debugout (*cl_debugout_stream)
|
|
|
|
// Elementary operations on cl_istream
|
|
|
|
#define cl_EOF (-1)
|
|
|
|
inline int freadchar (cl_istream stream)
|
|
{
|
|
char c;
|
|
if (stream.get(c))
|
|
return c;
|
|
else
|
|
// EOF or error
|
|
return cl_EOF;
|
|
}
|
|
|
|
inline int funreadchar (cl_istream stream, int c)
|
|
{
|
|
if (c != cl_EOF)
|
|
stream.putback((char)c);
|
|
return c;
|
|
}
|
|
|
|
// Elementary operations on cl_ostream
|
|
|
|
inline void fprintchar (cl_ostream stream, char c)
|
|
{
|
|
stream.put(c);
|
|
}
|
|
|
|
inline void fprint (cl_ostream stream, const char * string)
|
|
{
|
|
stream << string;
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
extern void fprintdecimal (cl_ostream stream, unsigned long x);
|
|
extern void fprintdecimal (cl_ostream stream, long x);
|
|
|
|
inline void fprintdecimal (cl_ostream stream, unsigned int x)
|
|
{
|
|
fprintdecimal(stream,(unsigned long)x);
|
|
}
|
|
inline void fprintdecimal (cl_ostream stream, int x)
|
|
{
|
|
fprintdecimal(stream,(long)x);
|
|
}
|
|
|
|
extern void fprinthexadecimal (cl_ostream stream, unsigned long x);
|
|
extern void fprinthexadecimal (cl_ostream stream, long x);
|
|
|
|
inline void fprinthexadecimal (cl_ostream stream, unsigned int x)
|
|
{
|
|
fprinthexadecimal(stream,(unsigned long)x);
|
|
}
|
|
inline void fprinthexadecimal (cl_ostream stream, int x)
|
|
{
|
|
fprinthexadecimal(stream,(long)x);
|
|
}
|
|
|
|
|
|
class cl_print_flags;
|
|
class cl_print_number_flags;
|
|
class cl_print_real_flags;
|
|
class cl_print_rational_flags;
|
|
class cl_print_float_flags;
|
|
CL_REQUIRE(cl_prin_globals)
|
|
|
|
|
|
// Define the customary << and >> operators.
|
|
|
|
#define CL_DEFINE_PRINT_OPERATOR(_class_) \
|
|
inline cl_ostream operator<< (cl_ostream stream, const _class_& x) \
|
|
{ \
|
|
fprint(stream,x); \
|
|
return stream; \
|
|
}
|
|
|
|
|
|
#endif /* _CL_IO_H */
|