#include <stdio.h>
#include <dos/dos.h>
#include <dos/filehandler.h>
#include <clib/exec_protos.h>
#include <clib/dos_protos.h>
#include <clib/alib_protos.h>

struct debugmsg
{ struct Message dbg_msg;
  char *dbg_fmt;
  va_list dbg_varlist;
};

void main()
{ struct MsgPort *mp;
  BPTR cfh;
  struct debugmsg *dmn;
  struct Task *tsk;
  LONG sigset;
  BOOL brk=FALSE;
  char buf[2000];

  tsk=FindTask(NULL);
  if ((mp=CreatePort("DPrintF() Port", 0))!=NULL)
  { if ((cfh=Open("CON:0/0/640/127/\"DPrintF() window\"",MODE_NEWFILE))!=NULL)
    { while(!brk)
      { sigset=Wait((1 << mp->mp_SigBit) | SIGBREAKF_CTRL_C);
        if (sigset & (1 << mp->mp_SigBit))
        { while ((dmn=(struct debugmsg *) GetMsg(mp))!=NULL)
          { Write(cfh, buf, vsprintf(buf, dmn->dbg_fmt, dmn->dbg_varlist));
            ReplyMsg(&dmn->dbg_msg);
          }
        }
        if (sigset & SIGBREAKF_CTRL_C)
          brk=TRUE;
      }
      Close(cfh);
    }
    DeletePort(mp);
  }
}

