⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 listbox.c

📁 一个网络流量分析的完整的程序
💻 C
字号:
/* * listbox.c - scrollable listbox management module * * Written by Gerard Paul Java * Copyright (c) Gerard Paul Java 2001 */#include <curses.h>#include <panel.h>#include <string.h>#include <stdlib.h>#include "winops.h"#include "labels.h"#include "listbox.h"#include "msgboxes.h"void tx_init_listbox(struct scroll_list *list, int width, int height,                      int startx, int starty,                      int mainattr, int borderattr, int selectattr,                      int keyattr){    bzero(list, sizeof(struct scroll_list));    list->borderwin = newwin(height, width, starty, startx);    list->borderpanel = new_panel(list->borderwin);    wattrset(list->borderwin, borderattr);    box(list->borderwin, ACS_VLINE, ACS_HLINE);        list->win = newwin(height - 2, width - 2, starty + 1, startx + 1);    list->panel = new_panel(list->win);    wattrset(list->win, mainattr);    tx_colorwin(list->win);        list->mainattr = mainattr;    list->selectattr = selectattr;    list->height = height;    list->width = width;    list->keyattr = keyattr;        tx_stdwinset(list->win);    scrollok(list->win, 0);}void tx_set_listbox_title(struct scroll_list *list, char *text, int x){    mvwprintw(list->borderwin, 0, x, " %s ", text);}void tx_add_list_entry(struct scroll_list *list, char *node, char *text){    struct textlisttype *ptmp;        ptmp = malloc(sizeof(struct textlisttype));    bzero(ptmp, sizeof(struct textlisttype));            strncpy(ptmp->text, text, MAX_TEXT_LENGTH);    ptmp->nodeptr = node;        if (list->textlist == NULL) {        list->textlist = ptmp;        ptmp->prev_entry = NULL;    } else {        list->texttail->next_entry = ptmp;        ptmp->prev_entry = list->texttail;    }        list->texttail = ptmp;    ptmp->next_entry = NULL;}void tx_show_listbox(struct scroll_list *list){    int i = 0;    struct textlisttype *tptr = list->textlist;        while ((i <= list->height - 3) && (tptr != NULL)) {        mvwprintw(list->win, i, 1, tptr->text);        tptr = tptr->next_entry;        i++;    }        update_panels();    doupdate();}void tx_operate_listbox(struct scroll_list *list,                        int *keystroke,                        int *aborted){    int ch;    int exitloop = 0;    int row = 0;    char padding[MAX_TEXT_LENGTH];    char sp_buf[10];        if (list->textlist == NULL) {        tx_errbox("No list entries", ANYKEY_MSG, &ch);        *aborted = 1;        return;    }        list->textptr = list->textlist;         tx_listkeyhelp(list->mainattr, list->keyattr);    update_panels();    doupdate();        while (!exitloop) {        snprintf(sp_buf, 9, "%%%dc", list->width - strlen(list->textptr->text) - 3);        snprintf(padding, MAX_TEXT_LENGTH - 1, sp_buf, ' ');        wattrset(list->win, list->selectattr);        mvwprintw(list->win, row, 0, " %s%s", list->textptr->text, padding);                    ch = wgetch(list->win);        wattrset(list->win, list->mainattr);        mvwprintw(list->win, row, 0, " %s%s", list->textptr->text, padding);                switch(ch) {        case KEY_UP:            if (list->textptr == NULL)                continue;                            if (list->textptr->prev_entry != NULL) {                if (row == 0) {                    scrollok(list->win, 1);                    wscrl(list->win, -1);                    scrollok(list->win, 0);                } else                    row--;                                    list->textptr = list->textptr->prev_entry;            }            break;        case KEY_DOWN:            if (list->textptr == NULL)                continue;                            if (list->textptr->next_entry != NULL) {                if (row == list->height - 3) {                    scrollok(list->win, 1);                    wscrl(list->win, 1);                    scrollok(list->win, 0);                } else                    row++;                                list->textptr = list->textptr->next_entry;            }            break;        case 13:            *aborted = 0;            exitloop = 1;            break;        case 27:        case 'x':        case 'X':        case 24:            *aborted = 1;            exitloop = 1;        case 12:        case 'l':        case 'L':            tx_refresh_screen();            break;        }    }    *keystroke = ch;}void tx_hide_listbox(struct scroll_list *list){    hide_panel(list->panel);    hide_panel(list->borderpanel);    update_panels();    doupdate();}void tx_unhide_listbox(struct scroll_list *list){    show_panel(list->panel);    show_panel(list->panel);    update_panels();    doupdate();}void tx_close_listbox(struct scroll_list *list){    del_panel(list->panel);    del_panel(list->borderpanel);    delwin(list->win);    delwin(list->borderwin);        update_panels();    doupdate();}void tx_destroy_list(struct scroll_list *list){    struct textlisttype *ttmp = list->textlist;    struct textlisttype *ctmp;        if (ttmp != NULL) {       ctmp = ttmp->next_entry;              while (ttmp != NULL) {           free(ttmp);           ttmp = ctmp;                      if (ctmp != NULL)               ctmp = ctmp->next_entry;       }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -