/*
 *			f p r i n t f . c
 *
 * Formatted output to a device.
 */

#include "stdio.h"
#include <types.h>
#include <sys.h>
#include <params.h>

fprintf(devp, fmt, args)
dct *devp;
char *fmt;
int args;
{
    iorb *iob;
    FILE fil;
#ifdef SYS_IOBUFS
    ext iorb *sys_iobufs;
#endif
    void write_done();

#ifdef SYS_IOBUFS
    if ((iob = sys_iobufs) == NULL)
      return;
    sys_iobufs = iob->i_link;
#else
    if ((iob = (iorb *)alloc(sizeof(iorb) + IO_BUFSIZE)) == NULL)
      return;
#endif
    iob->i_addr = (byte *)(iob + 1);
    iob->i_devp = devp;
    iob->i_cmp = write_done;

    fil.f_count = IO_BUFSIZE;
    fil.f_buf = (char *)iob->i_addr;
    _doprnt(fmt, &args, &fil);
    *(fil.f_buf) = '\0';

    iob->i_breq = IO_BUFSIZE - fil.f_count;
    sio(iob);
}
