Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4247678
  • 博文数量: 776
  • 博客积分: 13014
  • 博客等级: 上将
  • 技术积分: 10391
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-22 17:00
文章分类

全部博文(776)

文章存档

2015年(55)

2014年(43)

2013年(147)

2012年(20)

2011年(82)

2010年(429)

分类: LINUX

2010-02-22 22:45:59

// 函数编写:王晨曦
// 一个基于串口终端的菜单显示函数[原创]
// 函数会自动主力用户输入信息,并返回按键码给调用它的函数
/* menu显示函数 */
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;
    }
    /* 计算菜单项个数 */
    item_count = 0;
    while (1)
    {
        if (menu[item_count] != NULL)
        {
            item_count++;
        }
        else
        {
            break;
        }
    }
    /* 清空屏幕 */
    system("clear");
    /* 进入 menu 循环 */
    while (1)
    {
        /* 显示装饰头 */
        printf("\n\n");
        puts("\033[0;32;40m ╱◥██◣ ╭╭ ⌒╮ Have A Good Day! ^_^  ’↑’-’w’, ’↓’-’s’\033[0m");
        puts("\033[0;32;40m︱田︱田田︱╰------------------------------------------------\033[0m");
        /* 显示标题 */
        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’; // 字符 → 数值
                        return pointer;
                    }
                }
                /* 清空屏幕 */
                system("clear");
                pointer = 0;
                printf("key_default! The key_val: %d", key_val);
        } // end switch (key_val)
    } // end while(1)
}
阅读(1035) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~