/* * 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); }