home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 23 / IOPROG_23.ISO / SOFT / RAYCAST.ZIP / MESSAGE.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1995-10-12  |  2.1 KB  |  78 lines

  1.  
  2. #include "ray.h"
  3. #include "globals.h"
  4. #include "rayspr.h"
  5. #include "message.h"
  6.  
  7. void Request_Object_Messages(pobject send_obj, pobject receive_obj) {
  8.    if ((send_obj==NULL)||(receive_obj==NULL))
  9.       return;
  10.  
  11.    pobject_node new_send_node, new_receive_node;
  12.  
  13.    new_send_node=(pobject_node)NewPtr(sizeof(object_node));
  14.    new_receive_node=(pobject_node)NewPtr(sizeof(object_node));
  15.    new_send_node->data=receive_obj;
  16.    new_receive_node->data=send_obj;
  17.    OL_Push_Node(new_send_node, send_obj->send_objects);
  18.    OL_Push_Node(new_receive_node, send_obj->receive_objects);
  19.  
  20. }
  21.  
  22. void Release_Object_Messages(pobject send_obj, pobject receive_obj) {
  23.    if ((send_obj==NULL)||(receive_obj==NULL))
  24.       return;
  25.  
  26.    pobject_node cur_node;
  27.  
  28.    cur_node=send_obj->send_objects;
  29.    while (!OL_Empty_Node(cur_node)) {
  30.       if (cur_node->data==receive_obj) {
  31.          break;
  32.       }
  33.       cur_node=OL_Next_Node(cur_node);
  34.    } /* endwhile */
  35.  
  36.    if (!OL_Empty_Node(cur_node)) {
  37.       OL_Delete_Node(cur_node, send_obj->send_objects);
  38.    }
  39.  
  40.    cur_node=receive_obj->receive_objects;
  41.    while (!OL_Empty_Node(cur_node)) {
  42.       if (cur_node->data==send_obj) {
  43.          break;
  44.       }
  45.       cur_node=OL_Next_Node(cur_node);
  46.    } /* endwhile */
  47.  
  48.    if (!OL_Empty_Node(cur_node)) {
  49.       OL_Delete_Node(cur_node, receive_obj->receive_objects);
  50.    }
  51.  
  52. }
  53.  
  54. void Send_Auto_Message(pobject send_obj, ULONG message, pdata extra_data) {
  55.   if (send_obj==NULL)
  56.       return;
  57.   
  58.   pobject_node cur_node;
  59.  
  60.   cur_node=send_obj->send_objects;
  61.   while (!OL_Empty_Node(cur_node)) {
  62.      // send the message to the object (structure derefrencing & function pointer 'o rama)
  63.      (*cur_node->data->type->Message_Func)(send_obj, cur_node->data, message, extra_data);
  64.  
  65.      cur_node=OL_Next_Node(cur_node);
  66.   } /* endwhile */
  67.  
  68. }
  69.  
  70. ULONG Send_Specific_Message(pobject send_obj, pobject receive_obj, ULONG message,
  71.    pdata extra_data) {
  72.    if (receive_obj==NULL)
  73.       return ERROR_MESSAGE;
  74.  
  75.    return (*receive_obj->type->Message_Func)(send_obj, receive_obj, message, extra_data);
  76. }
  77.  
  78.