📄 win_util.c
字号:
/*
*
* 周国祥 2001/05/08 Created
*/
#include <curses.h>
#include <setjmp.h>
#include <signal.h>
/*
* 清窗口内容
*/
zut_wclear(win)
WINDOW *win;
{
int i, j;
for (i = 0; i < win->_maxy; i++)
for (j = 0; j < win->_maxx; j++)
mvwprintw(win, i, j, " ");
}
/*
* 清窗口内容的同时在窗口的周边画一方框
*/
zut_win_wboxclear(w, bf)
WINDOW *w;
bool bf;
{
if (bf == TRUE)
zut_win_draw_hcbox(w, w->_maxy, w->_maxx, 0, 0, TRUE);
else
zut_win_draw_cbox(w, w->_maxy, w->_maxx, 0, 0, TRUE);
}
/*
* 在指定窗口中画一细线方框
* 若bf==TRUE, 则清框中内容; 否则, 不清
*/
zut_win_draw_cbox(win, nrow, ncol, row, col, bf)
WINDOW *win;
int nrow, ncol, row, col;
bool bf;
{
int i, j;
if (bf == TRUE) /* 清窗口 */
for (i = 0; i < nrow; i++)
for (j = 0; j < ncol; j++)
mvwprintw(win, row+i, col+j, " ");
mvwprintw(win, row, col, "┌");
for (j = 1; j < ncol/2 - 1; j++)
mvwprintw(win, row, col+j*2, "─");
mvwprintw(win, row, col+ncol-2, "┐");
for (i = 1; i < nrow-1; i++) {
mvwprintw(win, row+i, col, "│");
mvwprintw(win, row+i, col+ncol-2, "│");
}
mvwprintw(win, row+nrow-1, col, "└");
for (j = 1; j < ncol/2 - 1; j++)
mvwprintw(win, row+nrow-1, col+j*2, "─");
mvwprintw(win, row+nrow-1, col+ncol-2, "┘");
}
/*
* 在指定窗口中画一粗线方框
* 若bf==TRUE, 则清框中内容; 否则, 不清
*/
zut_win_draw_hcbox(win, nrow, ncol, row, col, bf)
WINDOW *win;
int nrow, ncol, row, col;
bool bf;
{
int i, j;
if (bf == TRUE) /* 清窗口 */
for (i = 0; i < nrow; i++)
for (j = 0; j < ncol; j++)
mvwprintw(win, row+i, col+j, " ");
mvwprintw(win, row, col, "┏");
for (j = 1; j < ncol/2 - 1; j++)
mvwprintw(win, row, col+j*2, "━");
mvwprintw(win, row, col+ncol-2, "┓");
for (i = 1; i < nrow-1; i++) {
mvwprintw(win, row+i, col, "┃");
mvwprintw(win, row+i, col+ncol-2, "┃");
}
mvwprintw(win, row+nrow-1, col, "┗");
for (j = 1; j < ncol/2 - 1; j++)
mvwprintw(win, row+nrow-1, col+j*2, "━");
mvwprintw(win, row+nrow-1, col+ncol-2, "┛");
}
/*
* 在某窗口的底部一行显示信息
*/
zut_disp_prompt(w, str)
WINDOW *w;
char *str;
{
short row = w->_maxy - 1;
zut_win_disp_prompt(w, row, str);
}
/*
* 在某窗口的底部一行显示信息
*/
zut_disp_prompt1(w, str)
WINDOW *w;
char *str;
{
short row = w->_maxy - 2;
if (row < 0)
row = 0;
zut_win_disp_prompt(w, row, str);
}
zut_win_disp_prompt(w, row, str)
WINDOW *w;
int row;
char *str;
{
int i;
char format[20];
short lastcol = w->_maxx - 2;
sprintf(format, "%%%ds", lastcol - 2);
wattroff(w, A_BOLD);
for (i = 2; i < lastcol; i++)
mvwprintw(w, row, i, " ");
wrefresh(w);
mvwprintw(w, row, 2, format, " ");
wrefresh(w);
for (i = 0; i < (int)strlen(str); i++) {
if (str[i] == '[') {
mvwprintw(w, row, 2+i, "%c", str[i]);
wattron(w, A_BOLD);
continue;
}
if (str[i] == ']') {
wattroff(w, A_BOLD);
mvwprintw(w, row, 2+i, "%c", str[i]);
continue;
}
mvwprintw(w, row, 2+i, "%c", str[i]);
}
/*
mvwprintw(w, row, 2, "%s", str);
*/
wrefresh(w);
wattroff(w, A_BOLD);
}
/*
* 在某窗口的底部一行显示错误信息
*/
zut_err_prompt(w, str)
WINDOW *w;
char *str;
{
short row = w->_maxy - 1;
zut_win_err_prompt(w, row, str);
}
/*
* 在某窗口的底部一行显示错误信息
*/
zut_err_prompt1(w, str)
WINDOW *w;
char *str;
{
short row = w->_maxy - 2;
if (row < 0)
row = 0;
zut_win_err_prompt(w, row, str);
}
zut_win_err_prompt(w, row, str)
WINDOW *w;
int row;
char *str;
{
int i;
int j;
char format[20];
short lastcol = w->_maxx - 2;
sprintf(format, "%%-%ds", lastcol - 2);
beep();
if (w) {
touchwin(w);
mvwprintw(w, row, 2, format, " ");
wrefresh(w);
wattron(w, A_REVERSE);
wattron(w, A_BOLD);
mvwprintw(w, row, 2, format, str);
wattroff(w, A_BOLD);
wattroff(w, A_REVERSE);
wrefresh(w);
#if 1
sleep(1);
wstandend(w);
mvwprintw(w, row, 2, format, " ");
wrefresh(w);
#else
wgetch(w);
#endif
} else if (stdscr) {
wattron(stdscr, A_REVERSE);
wattron(stdscr, A_BOLD);
mvwprintw(stdscr, 22, 5, "%74s", " ");
mvwprintw(stdscr, 22, 5, "%s", str);
wattroff(stdscr, A_BOLD);
wattroff(stdscr, A_REVERSE);
wrefresh(stdscr);
sleep(1);
mvwprintw(stdscr, 22, 5, "%74s", " ");
} else {
fprintf(stderr, "%s\n", str);
}
}
zut_win_popup_help(str)
char *str;
{
int i;
WINDOW *help_win;
int rows, cols;
int srow, scol;
char format[20];
sprintf(format, "%%-%ds", (int)strlen(str));
rows = 3;
cols = (int)strlen(str+8);
srow = LINES - rows - 1;
scol = (COLS - cols - 2) / 2;
help_win = newwin(rows, cols+2, srow, scol);
for (i = 4; i < cols-4; i++)
mvwprintw(help_win, 1, i, " ");
wrefresh(help_win);
mvwprintw(help_win, 1, 4, format, " ");
wstandout(help_win);
mvwprintw(help_win, 1, 4, format, str);
wstandend(help_win);
wrefresh(help_win);
wgetch(help_win);
delwin(help_win);
return;
}
/*
* 左对齐显示字串
*/
zut_disp_str(w, x, y, lim, s)
WINDOW *w;
int x, y;
int lim;
char s[];
{
#if 0
int i, j;
wmove(w, x, y);
for (i = 0; i < lim; i++) {
if (s[i] == '\0')
break;
wprintw(w, "%c", s[i]);
}
for (j = i; j < lim; j++)
wprintw(w, "%c", ' ');
wrefresh(w);
#else
mvwprintw(w, x, y, "%-*s", lim, s);
wrefresh(w);
#endif
}
/*
* 右对齐显示字串
*/
zut_disp_str1(w, x, y, lim, s)
WINDOW *w;
int x, y;
int lim;
char s[];
{
mvwprintw(w, x, y, "%*s", lim, s);
wrefresh(w);
}
/*
* 从 x,y 开始填充 lim 个圆点
*/
zut_fill_dot(w, x, y, lim)
WINDOW *w;
int x, y, lim;
{
int i;
for (i = y; i <= y + lim - 1; i++)
mvwprintw(w, x, i, ".");
}
/*
* 从 x,y 开始填充 lim 个空格
*/
zut_fill_sp(w, x, y, lim)
WINDOW *w;
int x, y, lim;
{
int i;
for (i = y; i <= y + lim - 1; i++)
mvwprintw(w, x, i, " ");
}
/*
* 弹出退出窗口, 选择退出
*/
zut_win_exit(str)
char *str;
{
int i, j;
int c;
char flag = 0;
WINDOW *exitw;
exitw = newwin(5, 30+2, 12, 28);
keypad(exitw, TRUE);
zut_win_draw_cbox(exitw, 5, 30, 0, 0);
mvwprintw(exitw, 1, 4, "退出综合业务处理系统? ");
wstandend(exitw);
wattron(exitw,A_BOLD);
mvwprintw(exitw, 3, 16, "不退");
wattroff(exitw,A_BOLD);
wstandout(exitw);
wattron(exitw,A_BOLD);
mvwprintw(exitw, 3, 6, "退出");
wrefresh(exitw);
wattroff(exitw,A_BOLD);
wstandend(exitw);
while (1) {
c = wgetch(exitw);
switch(c) {
case KEY_LEFT:
case KEY_RIGHT:
if (flag == 1)
flag = 0;
else
flag = 1;
break;
case '\n':
case '\r':
if (flag == 0) {
#ifdef zgx971224del /* move to txmain.c */
clear();
refresh();
endwin();
/*
ioctl(0, TCSETAW, &stdin_in);
ioctl(1, TCSETAW, &stdin_out);
*/
exit(0);
#endif
return(0);
} else {
delwin(exitw);
return(1);
}
default:
beep();
continue;
}
if (flag == 0) {
wattron(exitw,A_BOLD);
mvwprintw(exitw, 3, 16, "不退");
wattroff(exitw,A_BOLD);
wstandout(exitw);
wattron(exitw,A_BOLD);
mvwprintw(exitw, 3, 6, "退出");
wattroff(exitw,A_BOLD);
wstandend(exitw);
} else {
wattron(exitw,A_BOLD);
mvwprintw(exitw, 3, 6, "退出");
wattroff(exitw,A_BOLD);
wstandout(exitw);
wattron(exitw,A_BOLD);
mvwprintw(exitw, 3, 16, "不退");
wattroff(exitw,A_BOLD);
wstandend(exitw);
}
wrefresh(exitw);
}
}
#ifdef zgx010508_del
/*
* 显示屏幕头信息
* 在一窗口的第0行显示"屏幕状态","操作员","日期"等信息
* 一般情况下,参数message_win为屏幕顶部之WINDOW
*/
zut_win_disp_message(message_win, scr_state)
WINDOW *message_win;
char *scr_state;
{
int m, d, y, hh, mm, ss;
int i;
char format[20];
for (i = 2; i < COLS-2; i++)
mvwprintw(message_win, 0, i, " ");
#ifdef zgx980116
mvwprintw(message_win, 0, 0, "屏幕状态: ");
#else
mvwprintw(message_win, 0, 0, "屏幕: ");
#endif
#ifdef zgx980204
wstandout(message_win);
wattron(message_win, A_BOLD);
#else
wattron(message_win, A_REVERSE);
#endif
sprintf(format, "%%%ds", (int)strlen(scr_state));
#ifdef zgx980116
mvwprintw(message_win, 0, 10, format, scr_state);
#else
mvwprintw(message_win, 0, 6, format, scr_state);
#endif
#ifdef zgx980204
wattroff(message_win, A_BOLD);
wstandend(message_win);
#else
wattroff(message_win, A_REVERSE);
#endif
zut_win_disp_opname(message_win, GV_opcode, GV_opname);
#ifdef zgx980116
mvwprintw(message_win, 0, 58, "日期: ");
zut_get_ymd(&y, &m, &d);
mvwprintw(message_win, 0, 64, "%d年%02d月%02d日", y, m, d);
wrefresh(message_win);
#else
zut_get_ymdhms(&y, &m, &d, &hh, &mm, &ss);
mvwprintw(message_win, 0, 50, "%04d年%02d月%02d日 %02d:%02d:%02d", y, m, d, hh, mm, ss);
wrefresh(message_win);
#endif
}
zut_win_disp_opname(w, opcode, opname)
WINDOW *w;
short opcode;
char *opname;
{
/*
mvwprintw(w, 0, 38, "操作员: ");
*/
#ifdef zgx980116
mvwprintw(w, 0, 38, "柜 员: ");
mvwprintw(w, 0, 46, "%-8s", opname);
wrefresh(w);
#else
mvwprintw(w, 0, 30, "柜员: ");
if (opcode == 0)
mvwprintw(w, 0, 36, "%4s", " ");
else
mvwprintw(w, 0, 36, "%04d", opcode);
mvwprintw(w, 0, 42, "%-8s", opname);
wrefresh(w);
#endif
}
/*
* 显示屏幕头信息
* 在一窗口的第0行显示"交易信息","操作员"等信息
* 一般情况下,参数header_win为屏幕顶部之WINDOW
*/
zut_win_disp_tx_header(header_win, tx_code, tx_name)
WINDOW *header_win;
int tx_code;
char *tx_name;
{
int m, d, y, hh, mm, ss;
int i;
char format[20];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -