Xref: utzoo alt.msdos.programmer:308 comp.binaries.ibm.pc.d:4162 comp.sys.ibm.pc:33217
Path: utzoo!utgpu!watmath!att!tut.cis.ohio-state.edu!ucbvax!pasteur!agate!eos!ptolemy!raymond
From: raymond@ptolemy.arc.nasa.gov (Eric A. Raymond)
Newsgroups: alt.msdos.programmer,comp.binaries.ibm.pc.d,comp.sys.ibm.pc
Subject: Creating your own stream
Message-ID: <1961@ptolemy.arc.nasa.gov>
Date: 15 Aug 89 07:05:22 GMT
Reply-To: raymond@ptolemy.arc.nasa.gov (Eric A. Raymond)
Organization: NASA Ames Research Center
Lines: 32

Having built a windowing system of sorts, I would like to create
streams which would replace the stdio, stdout, and stderr streams.

That is, given a set of primitive I/O functions, can I create a
file-like device which will call these routines?  Then I can redirect
I/O as I please.


For instance:
    my_stream = make_stream(my_getc, my_putc, my_printstring);
                                              ^
                                              +-- for efficiency
    redirect_stream(stderr,my_stream);

    printf(my_stream,"Hello World.\n");


Unfortunately, me thinks this is highly system/compiler dependent (or
rather language dependent; it's a snap in common lisp).

Failing that, can I temporarily (only during program execution)
install a device driver which is part of the program to handle DOS's
stdout/stderr (I believe they're one in the same for DOS) streams?

Failing that, can I suppose I can clobber printf with my own routine
which uses vsprintf.  Similarly with putc.

Flailing that :-), I can just live with using "special versions" of
I/O functions.
-- 
Eric A. Raymond  (raymond@ptolemy.arc.nasa.gov)
G7 C7 G7 G#7 G7 G+13 C7 GM7 Am7 Bm7 Bd7 Am7 C7 Do13 G7 C7 G7 D+13: Elmore James