Provided by: pvm-dev_3.4.5-12.6ubuntu1_amd64 bug

NAME

       pvm_recvf - Redefines the comparison function used to accept messages.

SYNOPSIS

       C    int (*old)() = pvm_recvf( int (*new)( int bufid, int tid, int tag ))

       Fortran   NOT AVAILABLE

DESCRIPTION

       The  routine  pvm_recvf  defines  the  comparison  function  to  be  used by the pvm_recv,
       pvm_nrecv, and pvm_probe functions.  It is available as a means to customize  PVM  message
       passing.   pvm_recvf  sets  a  user  supplied comparison function to evaluate messages for
       receiving.

       recvf returns the old value of the matching function, or 0 if the  old  function  was  the
       default matcher

       pvm_recvf  is intended for sophisticated C programmers who understand the function of such
       routines (like signal) and who require a receive routine that can match  on  more  complex
       message contexts than the default provides.

MATCHING FUNCTION

       The  default  comparison function evaluates the source and message tag associated with all
       incoming messages.

PARAMETERS

       tid     Integer task identifier of sending process supplied by the user.

       tag     Integer message tag supplied by the user.

       bufid   Integer message buffer identifier.

       The matching function should return:

            Value     Action taken
            < 0       Return immediately with this error code.
              0       Do not pick this message.
              1       Pick this message and do not scan the rest.
            > 1       Pick this highest ranked message after
                      scanning them all.

EXAMPLES

       Implementing message probe with recvf, using our matching function to  return  information
       in a global variable.

       #include <pvm3.h>

       static int foundit = 0;

       static int
       foo_match(mid, tid, tag)
            int mid;
            int tid;
            int tag;
       {
            int t, c;
            struct pvmminfo header;

            pvm_getminfo(mid, &header);

            if ((tid == -1 || tid == header.src) && (tag == -1 || tag == header.tag))
                 foundit = 1;

            return 0;
       }

       int
       probe(src, tag)
       {
            int (*omatch)();
            int cc;

            omatch = pvm_recvf(foo_match);

            foundit = 0;

            if ((cc = pvm_nrecv(src, tag)) < 0)
                 return cc;

            pvm_recvf(omatch);

            return foundit;
       }

ERRORS

       No error conditions are returned by pvm_recvf

SEE ALSO

       pvm_bufinfo(3PVM),  pvm_getminfo(3PVM),  pvm_recv(3PVM), pvm_nrecv(3PVM), pvm_probe(3PVM),
       pvm_trecv(3PVM)

                                         30 August, 1993                              RECVF(3PVM)