vansickl@bcrka340.bnr.ca (Greg VanSickle 1561848) (04/09/91)
While showing rexx to a freind I typed in the simple programme given in AC's Tech Amiga article on Interprocess Communication. It didn't work! The source for the two programmes are given below - note the two trace statements marked as T1 and T2, the symptoms depended heavily on them. Simple1 runs simple2, sends it 25 messages, then quits. Simple2 opens a port, waits for 25 messages, displays them, closes the port and quits: /* simple1.rexx */ trace r <---- T1 address command call addlib("rexxsupport.library",0, -30, 0) run rx simple2 call delay(300) address PORT do i = 1 to 50 by 2 i i i end exit /* simple2.rexx */ trace r <---- T2 call openport(PORT) call delay(500) do i = 1 to 50 by 2 call waitpkt(PORT) pkt = getpkt(PORT) say getarg(pkt) call reply(pkt) end call closeport(PORT) exit If T1 isn't included, and T2 is, then the program runs to completion as expected. However, if T2 is not included then I get the following sent to the consol: 1 1 1 3 3 3 5 5 5 7 7 7 Error 18 in line 8: Invalid argument to funtion +++ command returned 10 Command returned 10/18: Invalid argument to function +++ Error 13 in line 9: Host Environment not found bin:rexx/rx faiiled (return code 10) If T1 is included and T2 is not then I get a similar result but it fails on the first message, not the 5th. Question 1: 'address PORT' ... 'i i i' must build a packet and send it to the port PORT. Does the programme continue past the statement 'i i i' before the reply message is received? Question 2: I noticed that it's difficult to keep consol output separate when two rexx programmes are running. Does anyone know an easy way to keep the output from simple1 and simple2 separate ? Question 3: I make the following (but shakey) conclusion, is it correct? Between waitpkt and getpck in simple2, simple1 terminates, which means the reply port disappears, hence PORT is no longer a valid argument for getpkt. This implies the answer to question 1 is 'yes', ie. all 25 messages are sent regardless of the status of replies to any of them. If this is the case, the programme is fundamentally flawed. Question 4: How do you make this work? Thanks in advance. =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Geg VanSickle Silicon Support Bell Northern Research phone: 613-763-5160 PO Box 3500 ESN: 393-5160 Nepean, Ontario, Canada K2H 8V4 cocos: Greg Van Sickle email: vansickl@bnr.ca --------------------------------------------------------------------- Vancouver van cu' ver n. where we should all be, as opposed to where I am =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
WGLP09@SLACVM.SLAC.STANFORD.EDU (04/11/91)
There are so many things wrong with your T1 and T2 that I won't even begin to try to answer them all. But for starters, the run rx simple2 (or whatever it was called) is asynchronous and the first messages likely aren't sent because PORT doesn't exist yet. Secondly, there may be multiple messages waiting on the port. After the WaitPkt, you must loop over them with GetPkt until you get a NULL packet (c2d(0) I seem to remember, or if you have a recent update, the null() function return the kind of NULL you want). Only *then* should you waitpkt again. Try some variations on this to get it to work... You may want to use "WaitForPort" (a program that comes with ARexx) or a loop with a delay to check that "PORT" finally exists before sending it messages. And you need to have some way of telling the second program you're done and that it should exit. Hope this helps for starters... Willy. ---------- Willy Langeveld - Bitnet: WGLP09 @ SLACVM - BIX: langeveld