;/* port1.c - Execute me to compile with SAS C 5.10
LC -b1 -cfistq -v -y -j73 port1.c
Blink FROM LIB:c.o,port1.o TO port1 LIBRARY LIB:LC.lib,LIB:Amiga.lib
quit
* port1.c - port and message example, run at the same time as port2.c
*/
#include <exec/types.h>
#include <exec/ports.h>
#include <dos/dos.h>
#include <clib/exec_protos.h>
#include <clib/alib_protos.h>
#include <stdio.h>
#ifdef LATTICE
int CXBRK(void) { return(0); } /* Disable Lattice CTRL-C handling */
int chkabort(void) {return(0);}
#endif
struct XYMessage {
struct Message xym_Msg;
WORD xy_X;
WORD xy_Y;
};
void main(int argc, char **argv)
{
struct MsgPort *xyport;
struct XYMessage *xymsg;
ULONG portsig, usersig, signal;
BOOL ABORT = FALSE;
if (xyport = CreatePort("xyport", 0))
{
portsig = 1 << xyport->mp_SigBit; /* Give user a `break' signal. */
usersig = SIGBREAKF_CTRL_C;
printf("Start port2 in another shell. CTRL-C here when done.\n");
do
{ /* port1 will wait forever and reply */
signal = Wait(portsig | usersig); /* to messages, until the user breaks. */
/* Since we only have one port that might get messages we */
if (signal & portsig) /* have to reply to, it is not really necessary to test for */
{ /* the portsignal. If there is not message at the port, xymsg */
while(xymsg = (struct XYMessage *)GetMsg(xyport)) /* simply will be NULL. */
{
printf("port1 received: x = %d y = %d\n", xymsg->xy_X, xymsg->xy_Y);
xymsg->xy_X += 50; /* Since we have not replied yet to the owner of */
xymsg->xy_Y += 50; /* xymsg, we can change the data contents of xymsg. */
printf("port1 replying with: x = %d y = %d\n", xymsg->xy_X, xymsg->xy_Y);
ReplyMsg((struct Message *)xymsg);
}
}
if (signal & usersig) /* The user wants to abort. */
{
while(xymsg = (struct XYMessage *)GetMsg(xyport)) /* Make sure port is empty. */
ReplyMsg((struct Message *)xymsg);
ABORT = TRUE;
}
}
while (ABORT == FALSE);
DeletePort(xyport);
}
else printf("Couldn't create 'xyport'\n");
}
[Back to Amiga Developer Docs]