一個(gè)基于串口終端的菜單顯示函數(shù) |
發(fā)布時(shí)間: 2012/8/10 15:37:32 |
// 函數(shù)會(huì)自動(dòng)主力用戶輸入信息,并返回按鍵碼給調(diào)用它的函數(shù)
/* menu顯示函數(shù) */ int menu(const char **menu, int start_row) { register int i; static int flag = 1; int item_count; char *title; int key_val; int pointer = 0; char item[100]; if (flag) { flag = 0; pointer = 0; } /* 計(jì)算菜單項(xiàng)個(gè)數(shù) */ item_count = 0; while (1) { if (menu[item_count] != NULL) { item_count++; } else { break; } } /* 清空屏幕 */ system("clear"); /* 進(jìn)入 menu 循環(huán) */ while (1) { /* 顯示裝飾頭 */ printf("nn"); puts("\033[0;32;40m ╱◥██◣ ╭╭ ⌒╮ Have A Good Day! ^_^ ’↑’-’w’, ’↓’-’s’\033[0m"); puts("\033[0;32;40m︱田︱田田︱╰------------------------------------------------\033[0m"); /* 顯示標(biāo)題 */ for (i = 0; i < start_row; i++) { printf("n"); } title = (char*)malloc(strlen(menu[0]) * sizeof(char) + 40 * sizeof(char)); if (title == NULL) { perror("malloc"); } sprintf(title, "\033[0;31;44m%s\033[0m", menu[0]); puts(title); free(title); /* 顯示menu */ for (i = 1; i < item_count; i++) { if (i == pointer + 2) { char buff[200]; sprintf(buff, "\033[7;30;43m%s\033[0m", menu[i]); puts(buff); } else { puts(menu[i]); } } // end for /* 獲取鍵盤信息,并處理 */ tcflush(0, TCIFLUSH); // 清空串口緩沖 key_val = getch(); switch (key_val) { case ’q’: return -1; case ’w’: if (pointer > 0) { pointer--; } else { pointer = item_count - 4; } system("clear"); break; case ’s’: pointer++; pointer %= (item_count - 3); system("clear"); break; case KEY_ENTER: if (pointer == item_count -4) { pointer = -1; } return pointer; default: if (isdigit(key_val)) { if ((key_val - ’0’ >= 0) && (key_val - ’0’ <= item_count - 5)) { pointer = key_val - ’0’; // 字符 → 數(shù)值 return pointer; } } /* 清空屏幕 */ system("clear"); pointer = 0; printf("key_default! The key_val: %d", key_val); } // end switch (key_val) } // end while(1) } 本文出自:億恩科技【1tcdy.com】 服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |