HPlogo 900 Series HP 3000 Computer Systems: MPE/iX Architected Interface Facility: Operating System Reference Manual > Appendix C Programming Examples

Example 2 - RECV1S, receive data

» 

Technical documentation

Complete book in PDF
» Feedback

 » Table of Contents

 » Index

The program RECV1S and its counterpart SEND1S use the AIF:OS system calls to send and receive the data.

This is the source code for program RECV1S:

#pragma list off

#include <stdio.h>

#include <string.h>

#include <time.h>

#include <mpe.h>

#pragma list on



#pragma intrinsic_file "aifintr.pub.sys"

#pragma intrinsic      AIFPORTOPEN

#pragma intrinsic      AIFPORTCLOSE

#pragma intrinsic      AIFPORTSEND



#pragma intrinsic_file "sysintr.pub.sys"

#pragma intrinsic      GETPRIVMODE

#pragma intrinsic      GETUSERMODE



#define num_items      50

typedef int^ item_array_type[num_items];

typedef int  itemnum_array_type[num_items];

typedef t_mpe_status  item_status_array_type[num_items];



/*

This program RECV1s and its counterpart SEND1S will use AIF:OS intrinsics

to send and receive data.

*/



   static item_array_type          item_array;

   static itemnum_array_type       itemnum_array;

   static item_status_array_type   itemstatus_array;

   static t_mpe_status             overall_status;

   static char                     error_stng[80];

   static int                      user_id = 123456789; /* your valid user_id */

   static int                      port_id = 0;


/***************************************************************************/

/*                          fatal_aif_error                                */

/***************************************************************************/

void fatal_aif_error (t_mpe_status             *overall status

                      char

                      item_status_array_type

                      item_status_array)

{

  int i;



  printf ("**** %s\n", error_stng);

  printf ("**** error: Info=%d Subsystem=%d\n",

                overall_status->decode.error_num

                overall_status->decode.subsys_num



  for (i=0; i, num_items; i++|) {

     if (item_status_array[i].decode.error.num) {

       printf("\n Loop: %d error: Info=%d Subsystem=%d\n",

              i, item_status_array[i].decode.error_num,

              item_status_array[i].decode.subsys_num);

         } /* if */

     }     /* for loop */

  QUIT (1);

} /* fatal_aif_error */


/***************************************************************************/

/*                          open_port                                      */

/***************************************************************************/

void open_port (int    *port_id)

{

   char port_name[16]     = "PORT1           ";

   char port_password[16] = "PORT1_PASS      ";

   int  access_mode       = 1;

   int  create_option     = 1; /* default, but we're showing an example */



   itemnum_array[0] = 11201;

   item_array[0]    = &create_option;

   itemnum_array[1] = 0;

   GETPRIVMODE ();

   *port_id = AIFPORTOPEN (&overall_status, port_name, port_password,

                          access_mode, user_id,

                          itemnum_array, item_array, itemstatus_array);

   GETUSERMODE ();

   if (overall_status.word) {

      strcpy (error_stng, "AIFPORTOPEN intrinsic error");

      fatal_aif_error (&overall_status, error_stng, itemstatus_array);

      }

} /* open_port */







/***************************************************************************/

/*                          close_port                                     */

/***************************************************************************/

void close_port (int    *port_id)

{

   int  access_mode       = 1;



   GETPRIVMODE ();

   AIFPORTCLOSE (&overall_status, port_id, access_mode);

   GETUSERMODE ();

   if (overall_status.word) {

      strcpy (error_stng, "AIFPORTCLOSE intrinsic error");

      fatal_aif_error (&overall_status, error_stng, itemstatus_array);

      }

} /* close_port */
/***************************************************************************/

/*                          receive_stng                                   */

/***************************************************************************/

int  receive_stng (int    *port_id,

                   char   *stng,

                   int    stng_len,

                   int    msg_pri)

{

   int      time_out = -1;



   itemnum_array[0] = 11002;

   item_array[0]    = &time_out;

   itemnum_array[1] = 11001;

   item_array[1]    = &msg_pri;

   itemnum_array[2] = 0;

   GETPRIVMODE ();

   printf ("\nChecking for msg at pri: %d\n", msg_pri);

   AIFPORTRECEIVE (&overall_status, port_id, stng, &stng_len

                   , ,, itemnum_array, item_array, itemstatus_array);

   GETUSERMODE ();

   if (( (overall_status.decode.error_num == -111) ||



         (overall_status.decode.error_num == -129)) &&&

       (overall_status.decode.subsys_num == 516)) {

       printf ("No message found at that priority\n");

       return FALSE;

       }

   else if (overall_status.word) {

      strcpy (error_stng, "AIFPORTRECEIVE intrinsic error");

      fatal_aif_error (&overall_status, error_stng, itemstatus_array);

      }

   else

      stng[stng_len] = '\0';

      return TRUE;

} /* receive_stng */
/***************************************************************************/

/*                                    MAIN                                 */

/***************************************************************************/

int main(int argc, char *argv[], char *envp[], int parm)

{

   char                            stng[80];

   int                             msg_pri;



   open_port (&port_id);



   printf ("\n\nEnter message priority (0 to quit) : ");

   scanf ("%d", &msg_pri);



   printf ("portid is %d\n", port_id);

   while (msg_pri) {

      if (receive_stng (&port_id, stng, sizeof (stng), msg_pri)) {

         printf ("\nReceived msg: %s  at pri: %d\n", stng, msg_pri);

         }

      printf ("\n\nEnter message priority : ");

      scanf ("%d", &msg_pri);

      }



   close_port (&port_id);

}
Feedback to webmaster