include NET_DEFS

   define(NAMESIZE,3)
   define(BROADCAST,1)

   define(BUFFSIZE,137)

   define(SUCCEEDED,7)
   define(FAILED,8)

   external cleanup
   integer getarg, strim, ctop, getlin, ctoc, equal

   character line(MAXLINE)
   integer vcstat(2), buff(BUFFSIZE)

   integer vcid, size, i, j, k

   i = 1

   buff(i) = BROADCAST
   i += 1

   if (getarg(1, line, MAXARG) ~= EOF)
   {
      call mapstr(line, UPPER)

      if (equal(line, "ALL"s) == YES)
         do j = 1, NAMESIZE
         {
            buff(i) = 0
            i += 1
         }
      else
      {
         for (j = strim(line); j < 2 * NAMESIZE; j += 1)
            line(j + 1) = " "c
         line(2 * NAMESIZE + 1) = EOS

         j = 1
         i += (ctop(line, j, buff(i), NAMESIZE) + 1) / 2
      }
   }
   else
      do j = 1, NAMESIZE
      {
         buff(i) = 0
         i += 1
      }

   j = 2
   k = 1
   repeat
   {
      size = getarg(j, line(k), MAXLINE - k + 1)
      if (size ~= EOF)
      {
         k += size
         line(k) = " "c
         k += 1
      }
      else
         break

      j += 1
   }

   if (k == 1)
   {
      k = getlin(line, STDIN, MAXLINE)

      if (k == EOF)
         k = 1
   }

   line(k) = EOS
   call strim(line)

   size = i + ctoc(line, buff(i), MAXLINE) - 1

   call ring$c(vcid, vcstat, line)

   if (line(1) == EOS)
      call mkon$f("CLEANUP$", 8, cleanup)
   else
      call error(line)

   call ring$t(vcid, vcstat, buff, size, line)

   if (line(1) == EOS)
   {
      i = 2
      j = size - NAMESIZE - 1

      while (i < j)
      {
         select (buff(i + NAMESIZE))
            when (SUCCEEDED)
               call print(STDOUT, "Message has been sent on system *,#h*n"s,
                  2 * NAMESIZE, buff(i))

            when (FAILED)
               call print(STDOUT, "Message request failed on system *,#h*n"s,
                  2 * NAMESIZE, buff(i))

         i += NAMESIZE + 2
      }
   }
   else
      call error(line)

   stop
   end


   subroutine cleanup(cp)

   longint cp

   call x$clra

   return
   end
