|
|
|
The program RECV1S and its counterpart SEND1S use the AIF:OS system calls to
send and receive the data.
To compile the source code for RECV1S:
ccxl recv1s,,$null;info="-Aa +e"
link from=$oldpass,xdbend.lib.sys;to=recv1p;&
cap=ia,pm;rl=libcinit.lib.sys
This is the source code for program RECV1S:
or
View in browser
#pragma list off
#define _MPEXL_SOURCE /* required by errno.h */
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <mpe.h>
#include <errno.h> /* t_mpe_status */
#pragma list on
#pragma intrinsic_file "aifintr.pub.sys"
#pragma intrinsic AIFPORTOPEN
#pragma intrinsic AIFPORTCLOSE
#pragma intrinsic AIFPORTRECEIVE
#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];
#define FALSE 0
#define TRUE 1
/*
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];
/*Your valid AIF userid */
static int user_id = 123456789;
static int port_id = 0;
/******************************************************************/
/* fatal_aif_error */
/******************************************************************/
void fatal_aif_error ( t_mpe_status *overall_status,
char* error_stng,
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[17] = "PORT1 ";
char port_password[17] = "PORT1_PASS ";
int access_mode = 1;
int create_option = 1; /* default, but 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);
}
|