lhotka@incstar.uucp (Glamdring) (09/07/90)
I am having a problem using ports in Modula 2... I have the following program
which is an adaption of an example C program in the 'Programmer's Guide to the
Amiga' by Rob Peck. The program gets into the first while loop waiting for a
NIL message pointer, but it always gets the same message back causing an
infinite loop. Thanks for any help!!
MODULE T1;
FROM SYSTEM IMPORT ADDRESS, ADR, BYTE;
FROM Tasks IMPORT Wait, SignalSet;
FROM Ports IMPORT GetMsg, MessagePtr, ReplyMsg, PutMsg, MsgPortPtr,
Message, WaitPort;
FROM PortsUtil IMPORT CreatePort, DeletePort;
FROM InOut IMPORT WriteLn, WriteString;
VAR
myPort : MsgPortPtr;
recPort : MsgPortPtr;
mess : Message;
inmess : MessagePtr;
messadr : ADDRESS;
instr : POINTER TO ARRAY [1..100] OF CHAR;
BEGIN
myPort := CreatePort(NIL,0);
IF myPort # NIL THEN
recPort := CreatePort(ADR("reply"),0);
IF recPort # NIL THEN
mess.mnNode.lnName := ADR("Hello world");
mess.mnReplyPort := recPort;
mess.mnLength := 0;
messadr := ADR(mess);
PutMsg(myPort^,ADR(mess));
inmess := WaitPort(myPort^);
WHILE inmess # NIL DO
instr := inmess^.mnNode.lnName;
WriteString("Message: ");
WriteString(instr^);
WriteLn;
ReplyMsg(inmess);
inmess := GetMsg(myPort^);
END;
inmess := WaitPort(recPort^);
WHILE inmess # NIL DO
instr := inmess^.mnNode.lnName;
WriteString(instr^);
WriteLn;
inmess := GetMsg(recPort^);
END;
DeletePort(myPort^);
DeletePort(recPort^);
ELSE
DeletePort(myPort^);
WriteString("2nd create port failed");
WriteLn;
END;
ELSE
WriteString("1st create port failed");
WriteLn;
END;
END T1.
______________________________________________________________________
/ Rockford Lhotka INCSTAR Corp \
| Systems Administrator PO Box 285 |
| incstar!lhotka@rosevax.rosemount.com 1990 Industrial Blvd |
\ 612/779-1701 Stillwater, MN 55082 /
----------------------------------------------------------------------