/* BARRIER(,) */ define(BARRIER, `MENTER($1) if ($1.count[0] < ($2 - 1)) { DELAY($1,0) } CONTINUE($1,0) MEXIT($1)' ) /* BARDEC() */ define(BARDEC, `DECVAR($1,1)' ) /* BARINIT() */ define(BARINIT, `MONINIT($1,1)' ) define(GSSPEC, int sub; /* subscript stored in monitor */ ) /* GSDEC() */ define(GSDEC, `DECVAR($1,1,GSSPEC)' ) /* GSINIT() */ define(GSINIT, `MONINIT($1,1) $1.sub = 0;' ) /* GETSUB(,,,) */ define(GETSUB, `MENTER($1) if ($1.sub <= $3) { $2 = $1.sub++; } else { $2 = -1; if ($1.count[0] < ($4 - 1)) { DELAY($1,0) } else $1.sub = 0; CONTINUE($1,0) } MEXIT($1)' ) define(ASPEC, int pgdone; int pbdone; ) /* ADEC() */ define(ADEC, `DECVAR($1,1,ASPEC)' ) /* AINIT() */ define(AINIT, `MONINIT($1,1) $1.pgdone = $1.pbdone = 0;' ) /* ASKFOR(,,,,) */ define(ASKFOR, `MENTER($1) if (($1.pgdone == 0) && ($1.pbdone != 0)) { if ($1.count[0] < ($3 - 1)) { DELAY($1,0) } } else { $2 = -2; while (($1.pgdone == 0) && ($1.pbdone == 0)) { $4 if ($2 == 0) { CONTINUE($1,0) } else { if ($1.count[0] == ($3 - 1)) { $1.pbdone = 1; } else { DELAY($1,0) } } } } if ($1.pgdone != 0) { $2 = -1; CONTINUE($1,0) } else { $2 = $1.pbdone; if ($1.count[0] == 0) { $5 $1.pbdone = 0; } CONTINUE($1,0) } MEXIT($1)' ) /* probend(,) */ define(PROBEND, `MENTER($1) $1.pbdone = $2; MEXIT($1)' ) /* progend() */ define(PROGEND, `MENTER($1) $1.pgdone = 1; CONTINUE($1,0) MEXIT($1)' ) /* nlockdec() */ define(LOCKDEC, `DECVAR($1,0)' ) /* nlockinit() */ define(LOCKINIT, `MONINIT($1,0)' ) /* nlock() */ define(LOCK, `MENTER($1)' ) /* nunlock() */ define(UNLOCK, `MEXIT($1)' )