void search() { int cpos = 0; int c; point_t o_point = curbp->b_point; point_t found; searchtext[0] = '\0'; display_prompt_and_response(m_sprompt, searchtext); cpos = strlen(searchtext); for (;;) { c = getch(); /* ignore control keys other than C-g, backspace, CR, C-s, C-R, ESC */ if (c < 32 && c != 07 && c != 0x08 && c != 0x13 && c != 0x12 && c != 0x1b) continue; switch(c) { case 0x1b: /* esc */ searchtext[cpos] = '\0'; flushinp(); /* discard any escape sequence without writing in buffer */ return; case 0x07: /* ctrl-g */ curbp->b_point = o_point; return; case 0x13: /* ctrl-s, do the search */ found = search_forward(searchtext); display_search_result(found, FWD_SEARCH, m_sprompt, searchtext); break; case 0x12: /* ctrl-r, do the search */ found = search_backwards(searchtext); display_search_result(found, REV_SEARCH, m_sprompt, searchtext); break; case 0x7f: /* del, erase */ case 0x08: /* backspace */ if (cpos == 0) continue; searchtext[--cpos] = '\0'; display_prompt_and_response(m_sprompt, searchtext); break; default: if (cpos < STRBUF_M - 1) { searchtext[cpos++] = c; searchtext[cpos] = '\0'; display_prompt_and_response(m_sprompt, searchtext); } break; } } }
void display_search_result(const SEARCH_RESULT_T *result) { if(!result) return; if(result->next_result) { display_search_result(result->next_result); } printf("========search result start=========\n"); printf("mac: \t%s\n", result->mac); printf("version: \t%s\n",result->version); printf("dest_ip: \t%s\n", result->dest_ip); printf("local_ip: \t%s\n", result->local_ip); printf("gateway: \t%s\n", result->gateway); printf("mask_ip: \t%s\n", result->mask_ip); printf("local port: \t%d\n", result->local_port); printf("dest port: \t%d\n", result->dest_port); printf("work mode: \t%d\n", result->work_mode); printf("bit rate: \t%d\n", result->bit_rate); printf("com flag: \t%d\n", result->com_flag); printf("id: \t%d\n", result->id); printf("next_result_pointer: \t0x%016llX\n", (unsigned long long)(result->next_result->mac)); printf("========search result end =========\n"); }
/************************************ * usage * * 1. usage of search mrr device * 2. usage of configure mrr device * ************************************/ int usage_search() { int ret = 0; //you must declare a pointer to SEARCH_RESULT_T firstly SEARCH_RESULT_T *presult = NULL; //call search_mrr_device() to search, the result will be saved in struct presult ret = search_mrr_device(&presult); ///////////////////////////////////////////////////////////////// //模拟搜索出多个设备 /* SEARCH_RESULT_T result2 = {0}; memcpy(&result2, presult, sizeof(SEARCH_RESULT_T)); sprintf(result2.mac, "%s", "12-23-34-45-56-67"); result2.com_flag = 5; result2.bit_rate = 11200; add_result_to_list(&presult, &result2); SEARCH_RESULT_T result3 = {0}; memcpy(&result3, &result2, sizeof(SEARCH_RESULT_T)); result3.com_flag = 6; result3.bit_rate = 9760; add_result_to_list(&presult, &result3); add_result_to_list(&presult, &result3); */ ///////////////////////////////////////////////////////////////// //output the search result on screen display_search_result(presult); //you must call safe_delete_search_result() to delete the pointer lastly safe_delete_search_result(presult); return ret; }