/* 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;
}
©1998 MRC