home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
152.lha
/
TWin.c
< prev
next >
Wrap
C/C++ Source or Header
|
1988-04-26
|
4KB
|
127 lines
/* TWin.c - Text Server for debugging, by Talin. */
/* to start:
Run TWin.
to print text:
send a message to the message port "Text", where the ln_Name of the
message points to a null-terminated text string to be printed.
to quit TWin - click on close box.
example calling code:
TaskWrite(msg) char *msg;
{ struct MsgPort *tport, *rport, *FindPort();
struct Message mymessage;
if (rport = CreatePort(NULL,0))
{ rport->mp_Flags = PA_SIGNAL;
Forbid();
if (tport = FindPort("Text"))
{ mymessage.mn_Node.ln_Name = msg;
mymessage.mn_Node.ln_Pri = 0;
mymessage.mn_Node.ln_Type = NT_MESSAGE;
mymessage.mn_ReplyPort = rport;
PutMsg(tport,&mymessage);
WaitPort(rport);
}
Permit();
DeletePort(rport);
}
}
*/
#include "exec/types.h"
#include "graphics/gfx.h"
#include "graphics/gfxbase.h"
#include "libraries/diskfont.h"
#include "intuition/intuition.h"
struct Library *IntuitionBase=NULL,
*GfxBase=NULL,
*OpenLibrary();
struct Window *Window=NULL,
*OpenWindow();
struct RastPort *rp;
struct IOStdReq write_req; /* console io request */
struct MsgPort *con_port=NULL, /* console message port */
*task_port=NULL, /* message port from other tasks */
*CreatePort();
struct NewWindow text_window =
{ 50,50,400,100, 2,1,
CLOSEWINDOW,
NOCAREREFRESH | SIMPLE_REFRESH | WINDOWSIZING | WINDOWDEPTH | WINDOWCLOSE | WINDOWDRAG,
NULL,NULL,(UBYTE *)"Task Output Server",NULL,NULL,100,50,1000,1000,WBENCHSCREEN,
};
#define SCAT goto exit_pgm /* standard escape function */
_main()
{ short i;
if ((IntuitionBase = OpenLibrary("intuition.library",0)) == NULL) SCAT;
if ((GfxBase = OpenLibrary("graphics.library",0)) == NULL) SCAT;
if ((Window = OpenWindow(&text_window)) == NULL) SCAT;
rp = Window->RPort;
SetAPen(rp,3); SetBPen(rp,2);
if (!(con_port = CreatePort("ConRead",0))) SCAT;
if (!(task_port = CreatePort("Text",0))) SCAT;
task_port->mp_Flags = PA_SIGNAL;
write_req.io_Data = (APTR)Window; /* open console */
write_req.io_Length = sizeof(* Window);
write_req.io_Message.mn_Node.ln_Type = NT_MESSAGE;
write_req.io_Message.mn_Node.ln_Pri = 0;
write_req.io_Message.mn_ReplyPort = con_port;
if ( OpenDevice("console.device",0,&write_req,0) != 0) SCAT;
while (TRUE)
{ LONG dsig = 1 << task_port->mp_SigBit, /* task signal */
isig = 1 << Window->UserPort->mp_SigBit, /* intuition sig */
signals; /* sigs recv'd */
void *GetMsg();
signals = Wait(dsig | isig); /* wait for sigs */
if (signals & isig) /* if intuition */
{ struct IntuiMessage *message; /* intuition msg */
long class;
while (message = GetMsg(Window->UserPort)) /* get messages */
{ class = message->Class; /* get msg class */
ReplyMsg(message); /* reply */
if (class == CLOSEWINDOW) SCAT; /* close the window */
}
}
if (signals & dsig) /* if another task */
{ struct Message *message; /* exec message */
while (message = GetMsg(task_port)) /* get message */
{ write_req.io_Command = CMD_WRITE; /* write to console */
write_req.io_Data = (APTR)(message->mn_Node.ln_Name); /* string */
write_req.io_Length = -1; /* null terminate */
DoIO(&write_req); /* do it */
ReplyMsg(message); /* reply */
}
}
}
exit_pgm: /* clean up */
if (write_req.io_Device) CloseDevice(&write_req);
if (con_port) DeletePort (con_port);
if (task_port) DeletePort (task_port);
if (Window) CloseWindow(Window);
if (GfxBase) CloseLibrary(GfxBase);
if (IntuitionBase) CloseLibrary(IntuitionBase);
}