The Client




/* 	Mike Cook
	6/26/98
	REU 1998
	RPC Client/Server Program -- Server side
*/

#include "header.h"

int *add_ints(struct varintarr *input_structure);
struct varchararr *add_text_ints(struct varchararr *input_text);
void choice(char *user_choice);

char tb_choice;

void main()
{
	if(registerrpc(PROGRAM, VERSION, ROUTINE_1, choice,
	   xdr_char, xdr_void) == -1)
	{
		perror("registerrpc error 1");
		exit(1);
	}
	
	if(registerrpc(PROGRAM, VERSION, ROUTINE_2, add_ints,
		xdr_varintarr, xdr_int) == -1)
	{
		perror("registerrpc error 2");
		exit(1);
	}

	if(registerrpc(PROGRAM, VERSION, ROUTINE_3, add_text_ints,
		xdr_varchararr, xdr_varchararr) == -1)
	{
		perror("registerrpc error 3");
		exit(1);
	}

	svc_run();
	fprintf(stderr,"svc_run() call failed\n");

	exit(1);
}

int *add_ints(struct varintarr *input_structure)
{
	int		i;
	static int sum;
	int		*ptr;

	sum = 0;
	ptr = (input_structure->data);
	ptr++;

	for (i = 1; i <= (input_structure->data[0]); i++)
	{
		sum += *ptr;
		ptr++;
	}

	return (&sum);	
}

struct varchararr *add_text_ints(struct varchararr *input_text)
{
	int			i, text_sum, spaces = 0, intsRead[MAXSIZE];
	char		*ptr;
	char		*result_string;
	static		struct varchararr output_text;

	text_sum = 0;
	ptr = (input_text->data);

	for (i = 0; i < input_text->arrlnth; i++)
	{
		if (input_text->data[i] == ' ')		
			spaces++;
	}
	spaces++;	/* The number of integers on the line read */

	for (i = 0; i < spaces; i++)
	{
		if (i == (spaces - 1))
		{
			sscanf(ptr, "%d", &intsRead[i]);
		}
		else
		{
			sscanf(ptr, "%d ", &intsRead[i]);
			while (*ptr != ' ')
			{
				ptr++;
			}
			ptr++;
		}
		text_sum += intsRead[i];
	}

	output_text.data = malloc(MAXLINE);
	sprintf(output_text.data, "%d", text_sum);
	output_text.arrlnth = sizeof(output_text.data);
	
	return (&output_text);	
}

void choice(char *user_choice)
{
	tb_choice = *user_choice;
}


[Project Page] [Programs Page] [REU Page] [Scientific Visualization]

©1998 MRC