139 lines
3.2 KiB
C
139 lines
3.2 KiB
C
|
/*
|
||
|
* This is sample code generated by rpcgen.
|
||
|
* These are only templates and you can use them
|
||
|
* as a guideline for developing your own functions.
|
||
|
*/
|
||
|
#include "rdict.h"
|
||
|
|
||
|
/* ------------------------------------------------------------------
|
||
|
* nextin -- read a command and(possibly) a word from the next input line
|
||
|
* ------------------------------------------------------------------ */
|
||
|
int nextin(char *cmd, char *word)
|
||
|
{
|
||
|
int i, ch;
|
||
|
ch = getc(stdin);
|
||
|
while (isspace(ch)) {
|
||
|
ch = getc(stdin);
|
||
|
} /* end of while */
|
||
|
if (ch == EOF) {
|
||
|
return (-1);
|
||
|
}
|
||
|
*cmd = (char) ch;
|
||
|
ch = getc(stdin);
|
||
|
while (isspace(ch)) {
|
||
|
ch = getc(stdin);
|
||
|
} /* end of while */
|
||
|
if (ch == EOF) {
|
||
|
return (-1);
|
||
|
}
|
||
|
if (ch == '\n') {
|
||
|
return (0);
|
||
|
}
|
||
|
i = 0;
|
||
|
while (!isspace(ch)) {
|
||
|
if (++i > MAXWORD) {
|
||
|
printf("error: word too long.\n");
|
||
|
exit(1);
|
||
|
}
|
||
|
*word++ = ch;
|
||
|
ch = getc(stdin);
|
||
|
} /* end of while */
|
||
|
*word = '\0';
|
||
|
return i;
|
||
|
} /* end of nextin */
|
||
|
|
||
|
void rdictprog_1(char *host)
|
||
|
{
|
||
|
CLIENT *clnt;
|
||
|
int *result_1;
|
||
|
char *initw_1_arg;
|
||
|
int *result_2;
|
||
|
char *insertw_1_arg;
|
||
|
int *result_3;
|
||
|
char *deletew_1_arg;
|
||
|
int *result_4;
|
||
|
char *lookupw_1_arg;
|
||
|
|
||
|
#ifndef DEBUG
|
||
|
clnt = clnt_create(host, RDICTPROG, RDICTVERS, "udp");
|
||
|
if (clnt == NULL) {
|
||
|
clnt_pcreateerror(host);
|
||
|
exit(1);
|
||
|
}
|
||
|
#endif /* DEBUG */
|
||
|
char word[MAXWORD + 1]; /* space to hold word from input line */
|
||
|
char cmd;
|
||
|
int wordlen; /* length of input word */
|
||
|
while (1) {
|
||
|
printf("\nPlease input:");
|
||
|
wordlen = nextin(&cmd, word);
|
||
|
if (wordlen < 0) {
|
||
|
exit(0);
|
||
|
}
|
||
|
/* printf("\nYour cmd is:%c, your word is:%s\n", cmd, word); */
|
||
|
switch (cmd) {
|
||
|
case 'I': /* 初始化 */
|
||
|
result_1 = initw_1((void *) &initw_1_arg, clnt);
|
||
|
/* printf("\nYour result is:%d\n", *result_1); */
|
||
|
if (result_1 == (int *) NULL)
|
||
|
clnt_perror(clnt, "call failed");
|
||
|
else
|
||
|
if(*result_1 ==0) printf("Dictionary initialized to empty.\n");
|
||
|
else printf("Dictionary have already initialized.\n");
|
||
|
break;
|
||
|
case 'i': /* 插入 */
|
||
|
insertw_1_arg = word;
|
||
|
result_2 = insertw_1(&insertw_1_arg, clnt);
|
||
|
/* printf("\nYour result is:%d, your string is:%s(%d)\n", *result_2, insertw_1_arg, strlen(insertw_1_arg)); */
|
||
|
if (result_2 == (int *) NULL)
|
||
|
clnt_perror(clnt, "call failed");
|
||
|
else
|
||
|
printf("%s inserted.\n", word);
|
||
|
break;
|
||
|
case 'd': /* 删除 */
|
||
|
deletew_1_arg = word;
|
||
|
result_3 = deletew_1(&deletew_1_arg, clnt);
|
||
|
/* printf("\nYour result is:%d, your string is:%s(%d)\n", *result_3, deletew_1_arg, strlen(deletew_1_arg)); */
|
||
|
if (result_3 == (int *) NULL)
|
||
|
clnt_perror(clnt, "call failed");
|
||
|
else
|
||
|
printf("%s deleted.\n", word);
|
||
|
break;
|
||
|
case 'l': /* 查询 */
|
||
|
lookupw_1_arg = word;
|
||
|
result_4 = lookupw_1(&lookupw_1_arg, clnt);
|
||
|
/* printf("\nYour result is:%d, your string is:%s(%d)\n", *result_4, lookupw_1_arg, strlen(lookupw_1_arg)); */
|
||
|
if (result_4 == (int *) NULL)
|
||
|
clnt_perror(clnt, "call failed");
|
||
|
else
|
||
|
if(*result_4 ==0) printf("%s found.\n", word);
|
||
|
else printf("%s not found.\n", word);
|
||
|
break;
|
||
|
case 'q': /* 退出 */
|
||
|
printf("Program quits.\n");
|
||
|
exit(0);
|
||
|
break;
|
||
|
default: /* 非法输入 */
|
||
|
printf("Command %c(%s) invalid.\n", cmd, word);
|
||
|
break;
|
||
|
} /* end of switch */
|
||
|
} /* end of while */
|
||
|
|
||
|
#ifndef DEBUG
|
||
|
clnt_destroy(clnt);
|
||
|
#endif /* DEBUG */
|
||
|
}
|
||
|
|
||
|
|
||
|
int main(int argc, char *argv[])
|
||
|
{
|
||
|
char *host;
|
||
|
|
||
|
if (argc < 2) {
|
||
|
printf("usage: %s server_host\n", argv[0]);
|
||
|
exit(1);
|
||
|
}
|
||
|
host = argv[1];
|
||
|
rdictprog_1(host);
|
||
|
exit(0);
|
||
|
}
|