/* standard Intuition include files */ #include #include #include #include #include #include #include /* Include file specifically for Snip */ #include "Snip.h" struct Window *Window; /* the display window */ char title[30]; /* Window title */ struct GfxBase *GfxBase = NULL; struct IntuitionBase *IntuitionBase; struct DMsg *WMsg, *TMsg; struct Disp *Disp0, *DispPW, *DispWN; struct Dat *Dat; struct MsgPort *WtPort, *RdPort; SHORT i; LONG Mark; FLOAT base; main() { printf("testprog says hello\n"); if(!(IntuitionBase=(struct IntuitionBase *) OpenLibrary("intuition.library",0L))) { printf("no intuition library\n"); /* some sort of message */ exit(0L);} /* in event of failure */ if(!(WtPort = CreatePort("SnipWPort", 0L ))) /* make a message port */ { printf("can't create Port\n"); /* some sort of message */ goto dropout; } RdPort = FindPort("SnipRPort"); /* find Snip's port !!! */ if(RdPort == 0) { printf("no RdPort found"); exit(0L);} /* can't find it */ WMsg = (struct DMsg *)AllocMem( (LONG)(sizeof(struct DMsg)), MEMF_CLEAR | MEMF_PUBLIC ); if( !(WMsg) ){ printf(" no message allocated\n"); exit(0L); } WMsg->Msg.mn_Node.ln_Type = NT_MESSAGE; WMsg->Msg.mn_Node.ln_Pri = 0; WMsg->Msg.mn_ReplyPort = WtPort; /* make a message and */ PutMsg(RdPort,WMsg); /* tell Snip we're ready */ printf("message sent %ld\n", (LONG)WMsg); Wait(1L<mp_SigBit); /* wait for reply message */ TMsg = (struct DMsg *)GetMsg(WtPort); /* remove the message */ /*----------------------------------------------------------------------*/ /* */ /* FOR REALLY, REALLY ADVANCED USERS WHO WISH TO GO WHERE ANGELS (like */ /* me) AND GURUS FEAR TO TREAD. */ /* */ /* Alternatively, at this stage a reply could be */ /* sent to reactivate Snip. This would allow both programs to be active */ /* simultaneously but be aware that changes in the data will affect */ /* both programs. */ /* Creating or deleting channels ( Duplicate, Delete, Average and */ /* arithmetic ) will disrupt the expected arrangement of data unless */ /* strict attention is paid to updating variables which keep track of */ /* such things. - Expect the worst, don't blame me if it blows */ /* everything apart and feel free to make reasonable and practical */ /* suggestions for better documentation. - Good luck !! */ /*----------------------------------------------------------------------*/ /*----------------------------------------------------------------------*/ /* */ /* FOR MERE MORTALS ( Of high calibre, of course - or they wouldn't be */ /* programming the AMIGA ). */ /* */ /*---------------------| Insert program code here |---------------------*/ printf("Window %d Active, Previously Window %d\n", WMsg->WN, WMsg->PrevWN ); Disp0 = *( WMsg->Disp ); /* pointer to first Disp pointer */ DispPW = *( WMsg->Disp + WMsg->PrevWN); DispWN = *( WMsg->Disp + WMsg->WN); Dat = *( WMsg->Dat ); printf("Window 0 Channel %d, from %ld for %ld points\n", Disp0->Chan, Disp0->firstx, Disp0->nx ); printf("current chan %d from %ld for %ld\n", DispWN->Chan, DispWN->firstx, DispWN->nx ); printf("previous chan %d from %ld for %ld\n", DispPW->Chan, DispPW->firstx, DispPW->nx ); printf("%d Channels displayed, %d Channels hidden\n", WMsg->DChans, WMsg->RChans ); printf("cursor value %f at position %ld\n", WMsg->base, WMsg->Mark); printf("Last window opened - %d\n", WMsg->LastWin); /*-------------------------| End of user code |-------------------------*/ PutMsg(RdPort,WMsg); /* send message to reactivate Snip */ Wait(1L<mp_SigBit); /* wait for reply message */ TMsg = (struct DMsg *)GetMsg(WtPort); /* remove the message */ printf("Test done"); dropout: /* then tidy up and leave */ if( WMsg ) FreeMem ( WMsg, (LONG)sizeof(struct DMsg) ); printf(", IO message deleted"); if( WtPort ) RemPort ( WtPort ); if( WtPort ) DeletePort ( WtPort ); printf(", Port deleted"); if( IntuitionBase ) CloseLibrary( IntuitionBase ); printf("Intuition closed\n"); }