DIRECTORY Cmplr8Mntr1Defs, Cmplr8Mntr2Defs, RunRegressions, XMesaProcs; XMesaCmplr8: PROGRAM IMPORTS Cmplr8Mntr1Defs, Cmplr8Mntr2Defs, RunRegressions, XMesaProcs = BEGIN filename: LONG STRING _ "XMesaCmplr8"L; XMesaCall8: PROCEDURE = { XMesaProcs.PrintCR; XMesaProcs.PrintS[filename]; XMesaProcs.PrintCR; XMesa8a[]; --FORK and JOIN XMesa8b[]; --FORK and JOIN cont'd XMesa8c[]; --MONITORS << This test is just plain broken - it's inherently timing dependent XMesa8d[]; --CV's >> XMesaProcs.PrintS["Done"L]; XMesaProcs.PrintCR; }; --end of XMesaCall8 XMesa8a: PROCEDURE = { --FORK and JOIN str: LONG STRING _ "This is a test of the FORK and JOIN constructs"; numOfChar, numOfSpace, numofA, numOfE: CARDINAL _ 0; p: PROCESS RETURNS [CARDINAL]; q: PROCESS RETURNS [CARDINAL, CARDINAL]; InspectString: PROCEDURE [s: LONG STRING] = BEGIN --Count how many letters the string contains p _ FORK CountSpaces[str]; numOfSpace _ 100; --test by setting the value arbitrarily numOfChar _ s.length; numOfSpace _ JOIN p; END; CheckForSpecials: PROCEDURE [s: LONG STRING] = BEGIN q _ FORK CountAandE[str]; numOfChar _ s.length; [numofA, numOfE] _ JOIN q; END; CountSpaces: PROCEDURE [s: LONG STRING] RETURNS [CARDINAL] = BEGIN --Count how many blank spaces the string contains c: CHARACTER; si: CARDINAL _ 0; num: CARDINAL _ 0; UNTIL si = s.length DO c _ s[si]; si _ si + 1; IF c = ' THEN num _ num + 1; ENDLOOP; RETURN[num]; END; CountAandE: PROCEDURE [s: LONG STRING] RETURNS [CARDINAL, CARDINAL] = BEGIN --Count how many blank spaces the string contains c: CHARACTER; si: CARDINAL _ 0; num1: CARDINAL _ 0; num2: CARDINAL _ 0; UNTIL si = s.length DO c _ s[si]; si _ si + 1; IF c = 'a THEN num1 _ num1 + 1; IF c = 'e THEN num2 _ num2 + 1; ENDLOOP; RETURN[num1, num2]; END; InspectString[str]; IF numOfChar # 46 THEN XMesaProcs.PutFailMessage[3810, filename]; IF numOfSpace # 9 THEN XMesaProcs.PutFailMessage[3830, filename]; numOfChar _ 0; CheckForSpecials[str]; IF numofA # 2 THEN XMesaProcs.PutFailMessage[3850, filename]; IF numOfE # 2 THEN XMesaProcs.PutFailMessage[3870, filename]; }; XMesa8b: PROCEDURE = { --FORK and JOIN cont'd flag1, flag2: BOOL _ FALSE; p: PROCESS; Proc1: PROCEDURE = {flag1 _ TRUE; }; p _ FORK Proc1; flag2 _ TRUE; JOIN p; IF flag2 # TRUE THEN XMesaProcs.PutFailMessage[3865, filename]; IF flag1 # TRUE THEN XMesaProcs.PutFailMessage[3875, filename]; }; XMesa8c: PROCEDURE = { --MONITORS p, q, r: PROCESS; flag: BOOL _ FALSE; proc1: PROCEDURE = BEGIN Cmplr8Mntr1Defs.Activate; Cmplr8Mntr1Defs.Activate; Cmplr8Mntr1Defs.Activate; END; proc2: PROCEDURE = BEGIN Cmplr8Mntr1Defs.Activate; Cmplr8Mntr1Defs.DeActivate; Cmplr8Mntr1Defs.Activate; END; proc3: PROCEDURE = BEGIN Cmplr8Mntr1Defs.Activate; Cmplr8Mntr1Defs.DeActivate; Cmplr8Mntr1Defs.DeActivate; END; Cmplr8Mntr1Defs.Activate; Cmplr8Mntr1Defs.Activate; Cmplr8Mntr1Defs.Activate; Cmplr8Mntr1Defs.DeActivate; flag _ Cmplr8Mntr1Defs.Inspect[]; IF flag # TRUE THEN XMesaProcs.PutFailMessage[3890, filename]; p _ FORK proc1; Cmplr8Mntr1Defs.DeActivate; Cmplr8Mntr1Defs.DeActivate; JOIN p; flag _ FALSE; flag _ Cmplr8Mntr1Defs.Inspect[]; IF flag # TRUE THEN XMesaProcs.PutFailMessage[3910, filename]; p _ FORK proc1; q _ FORK proc2; r _ FORK proc3; Cmplr8Mntr1Defs.Activate; Cmplr8Mntr1Defs.Activate; Cmplr8Mntr1Defs.Activate; Cmplr8Mntr1Defs.DeActivate; JOIN p; JOIN q; JOIN r; flag _ FALSE; flag _ Cmplr8Mntr1Defs.Inspect[]; IF flag # TRUE THEN XMesaProcs.PutFailMessage[3930, filename]; }; XMesa8d: PROCEDURE = { newTicket: CARDINAL _ 0; p: PROCESS; FOR begin: INTEGER IN [0..10] DO newTicket _ Cmplr8Mntr2Defs.AllocateTicket[]; ENDLOOP; IF newTicket # 100 THEN XMesaProcs.PutFailMessage[3950, filename]; IF newTicket # Cmplr8Mntr2Defs.nullTicket THEN XMesaProcs.PutFailMessage[3980, filename]; IF Cmplr8Mntr2Defs.flag # TRUE THEN XMesaProcs.PutFailMessage[3990, filename]; Cmplr8Mntr2Defs.FreeTicket[]; p _ FORK Cmplr8Mntr2Defs.FreeTicket[]; newTicket _ Cmplr8Mntr2Defs.AllocateTicket[]; IF newTicket # Cmplr8Mntr2Defs.nullTicket THEN XMesaProcs.PutFailMessage[3995, filename]; JOIN p; IF newTicket # 9 THEN XMesaProcs.PutFailMessage[4000, filename]; IF Cmplr8Mntr2Defs.flag # FALSE THEN XMesaProcs.PutFailMessage[4010, filename]; }; RunRegressions.RegisterTest[XMesaCall8, "test8"]; END...  File: XMesaCmplr8.mesa - created by MW. Last edit: JKF 1-Jul-87 18:25:10 MW 6-May-87 9:19:12 Mna, April 17, 1991 3:32 pm PDT Copyright (C) 1987 by Xerox Corporation. All rights reserved. Processes and concurrency mainline ÊT•NewlineDelimiter ™J™2J™&J™&J™J˜J™=J˜J™J˜J˜šÏk ˜ J˜J˜J˜J˜ J˜—šÏn œ˜Jšœ?˜FJš˜J˜Jšœ œœ˜'J˜Jšž œ œ˜˜J˜J˜J˜J˜Jšœ Ïc˜Jšœ Ÿ˜"Jšœ Ÿ ˜J˜EJšœ Ÿ˜J˜J˜J˜J˜J˜JšœŸ˜J˜—šžœ œŸ˜'Jšœœœ4˜DJšœ'œ˜4Jšœœœœ˜Jš œœœœœ˜(J˜šž œ œœœ˜+JšœŸ,˜3Jšœœ˜JšœŸ'˜:J˜Jšœ œ˜Jšœ˜J˜J˜—šžœ œœœ˜.Jš˜Jšœœ˜J˜Jšœœ˜Jšœ˜J˜J˜—š ž œ œœœœœ˜—Jšœ˜ Jšœ˜J˜—šž œ œœœœœœ˜EJšœŸ1˜8Jšœ œ˜ Jšœœ˜Jšœœ˜Jšœœ˜šœ˜J˜ J˜ Jšœœ˜Jšœœ˜Jšœ˜—Jšœ ˜Jšœ˜J˜—J˜Jšœœ+˜AJ˜Jšœœ+˜AJ˜J˜J˜Jšœ œ+˜=J˜Jšœ œ+˜=J˜J˜—šžœ œŸ˜.Jšœœœ˜Jšœœ˜ J˜Jšžœ œ œ˜$J˜Jšœœ˜Jšœœ˜ Jšœ˜Jšœ œœ+˜?Jšœ œœ+˜?J˜J˜J˜—šžœ œŸ ˜"Jšœ œ˜Jšœœœ˜šœ œ˜Jš˜J˜J˜J˜J˜Jšœ˜J˜—šœ œ˜Jš˜J˜J˜J˜J˜Jšœ˜J˜—šœ œ˜Jš˜J˜J˜J˜J˜J˜Jšœ˜J˜—J˜J˜J˜J˜J˜J˜!Jšœœœ+˜>J˜Jšœœ˜J˜J˜Jšœ˜J˜J˜Jšœœ˜ J˜!Jšœœœ+˜>J˜J˜Jšœœ˜Jšœœ˜Jšœœ˜J˜J˜J˜J˜J˜J˜Jšœ˜Jšœ˜Jšœ˜J˜Jšœœ˜ J˜!Jšœœœ+˜>J˜J˜—šžœ œ˜Jšœ œ˜Jšœœ˜ J˜Jš œœœ œ/œ˜WJ˜Jšœœ+˜Bšœ(œ˜/J˜*—Jšœœœ+˜NJ˜J˜J˜Jšœœ˜&J˜J˜-J˜šœ(˜.J˜*J˜—Jšœ˜J˜Jšœœ+˜@šœœœ˜%J˜*J˜—J˜J˜—J™J˜1J˜Jšœ˜——…—èF