📄 version_disp.c
字号:
/*****************************************************************
* 程序名: version_disp.c 版本LOGO显示处理
* 功 能: 显示版本LOGO画面, 并调用操作员注册程序提供
* 柜员登录处理
* 作 者: 周国祥 2001/04/05 创建
* 2002/04/09 增加CLIENT_LOGIN处理, 支持省行集中
*****************************************************************/
#ifdef MY_CURSES
#include "zcurses.h"
#include "keydef.h"
#else
#include <curses.h>
#endif
#include <stdio.h>
#include <termio.h>
#include <signal.h>
#include <time.h>
#include <setjmp.h>
/*
#include <string.h>
*/
jmp_buf timepos;
WINDOW *VER_W;
#define VER_LOGO 0 /* 版本LOGO显示 */
#define OPER_LOGIN 1 /* 操作员注册 */
#define CLIENT_LOGIN 2 /* 客户(地市行)操作员注册 */
/*
* 显示软件版本信息。并进行客户(地市行)操作员注册
*/
version_client_login(svattr, title1, title2, verno, group)
short svattr;
char *title1;
char *title2;
char *verno;
char *group;
{
int ret;
int client_oper_login();
#ifdef zgx020409_modi
ret = version_disp(svattr, title1, title2, verno, group, CLIENT_LOGIN);
#else
ret = version_disp(svattr, title1, title2, verno, group, client_oper_login);
#endif
return(ret);
}
/*
* 显示软件版本信息。屏幕保护等
*/
version(svattr, title1, title2, verno, group)
short svattr;
char *title1;
char *title2;
char *verno;
char *group;
{
int ret;
#ifdef zgx020409_modi
ret = version_disp(svattr, title1, title2, verno, group, VER_LOGO);
#else
ret = version_disp(svattr, title1, title2, verno, group, NULL);
#endif
return(ret);
}
/*
* 显示软件版本信息。
* 可用于操作员注册、屏幕保护等画面处理。
*/
#ifdef zgx020409_modi
version_disp(svattr, title1, title2, verno, group, flag)
short svattr;
char *title1;
char *title2;
char *verno;
char *group;
char flag;
{
#else
version_disp(svattr, title1, title2, verno, group, p_func)
short svattr;
char *title1;
char *title2;
char *verno;
char *group;
int (*p_func)(); /* 用户注册等处理函数指针 */
{
#endif
WINDOW *ver_win;
int i, j;
int nrows = 18;
int ncols;
char workroom[128];
void timeview();
void timeview1();
int yy, mm, dd, hi, mi, si;
int row, col;
int ret = 0;
if (svattr != A_REVERSE)
svattr = A_NORMAL;
sprintf(workroom, "软件服务中心");
ncols = (int)strlen(workroom);
if (ncols < strlen(title1))
ncols = (int)strlen(title1);
if (ncols < (int)strlen(title2))
ncols = (int)strlen(title2);
if (ncols < (int)strlen(verno))
ncols = (int)strlen(verno);
if (ncols < (int)strlen(verno))
ncols = (int)strlen(verno);
if (ncols < (int)strlen(group))
ncols = (int)strlen(group);
#ifdef zgx010407
ncols = (ncols+1)/2*2 + 32;
#else
ncols = (ncols+1)/2*2 + 24;
#endif
if (ncols > 74)
ncols = 74;
#ifdef zgx020423_modi
row = (LINES - nrows + 1)/2;
#else
row = (LINES - nrows + 1)/2 + 2; /* 登录画面往下挪两行 */
#endif
col = (COLS - ncols + 1)/2;
#ifdef MY_CURSES
saveterm(svattr);
#endif
ver_win = newwin(nrows, ncols, row, col);
if (ver_win == NULL)
return(-2);
VER_W = ver_win;
if (svattr != A_NORMAL)
wattron(ver_win, A_REVERSE);
else
wattroff(ver_win, A_REVERSE);
for (i = 0; i < nrows; i++)
for (j = 0; j < ncols; j++)
mvwprintw(ver_win, i, j, " ");
mvwprintw(ver_win, 0, 2, "┏");
for (j = 1; j < ncols/2 - 3; j++)
mvwprintw(ver_win, 0, 2+j*2, "━");
mvwprintw(ver_win, 0, 2+(ncols/2-3)*2, "┓");
for (i = 1; i < nrows-2; i++) {
mvwprintw(ver_win, i, 2, "┃");
mvwprintw(ver_win, i, 2+(ncols/2-3)*2, "┃");
if (svattr == A_NORMAL)
wattron(ver_win, A_REVERSE);
else
wattroff(ver_win, A_REVERSE);
mvwprintw(ver_win, i, 2+(ncols/2-2)*2, " ");
if (svattr == A_NORMAL)
wattroff(ver_win, A_REVERSE);
else
wattron(ver_win, A_REVERSE);
}
mvwprintw(ver_win, nrows-2, 2, "┗");
for (j = 1; j < ncols/2 - 3; j++)
mvwprintw(ver_win, nrows-2, 2+j*2, "━");
mvwprintw(ver_win, nrows-2, 2 + (ncols/2-3)*2, "┛");
if (svattr == A_NORMAL)
wattron(ver_win, A_REVERSE);
else
wattroff(ver_win, A_REVERSE);
mvwprintw(ver_win, nrows-2, 2+(ncols/2-2)*2, " ");
for (j = 1; j < ncols/2-1; j++)
mvwprintw(ver_win, nrows-1, 2 + j*2, " ");
if (svattr == A_NORMAL)
wattroff(ver_win, A_REVERSE);
else
wattron(ver_win, A_REVERSE);
wrefresh(ver_win);
wmove(ver_win, 2, (ncols-4-strlen(title1))/2);
wprintw(ver_win, title1);
#ifdef MY_CURSES
wattron(ver_win, A_DBHIGH1);
wattron(ver_win, A_DBWIDTH);
wmove(ver_win, 3, (ncols-4-2*strlen(title2))/2);
wprintw(ver_win, title2);
wattroff(ver_win, A_DBWIDTH);
wattroff(ver_win, A_DBHIGH1);
wattron(ver_win, A_DBHIGH2);
wattron(ver_win, A_DBWIDTH);
wmove(ver_win, 4, (ncols-4-2*strlen(title2))/2);
wprintw(ver_win, title2);
wattroff(ver_win, A_DBWIDTH);
wattroff(ver_win, A_DBHIGH2);
#else /* 系统CURSES */
/*
wmove(ver_win, 3, (ncols-4-2*strlen(title2))/2);
wprintw_db(ver_win, title2, 1);
wmove(ver_win, 4, (ncols-4-2*strlen(title2))/2);
wprintw_db(ver_win, title2, 2);
*/
wmove(ver_win, 4, (ncols-4-strlen(title2))/2);
wprintw(ver_win, title2);
#endif
wmove(ver_win, 6, (ncols-4-strlen(verno))/2);
wprintw(ver_win, verno);
wrefresh(ver_win);
if (group[0] != '\0') {
wmove(ver_win, nrows-5, (ncols-4-strlen(group))/2);
wprintw(ver_win, group);
/**********
wmove(ver_win, nrows-3, (ncols-4- 21)/2);
wprintw(ver_win, "联 合 开 发 (2001.05)");
**********/
wmove(ver_win, nrows-3, (ncols-4- 40)/2);
wprintw(ver_win, "Copyright (c) 1994-2002. All Rights Reserved");
} else {
wmove(ver_win, nrows-5, (ncols-4- 18)/2);
wprintw(ver_win, "Copyright (c) 1998");
wmove(ver_win, nrows-3, (ncols-4- 20)/2);
wprintw(ver_win, "All Rights Reserved");
}
wmove(ver_win, nrows-4, (ncols-4-strlen(workroom))/2);
wprintw(ver_win, "%s", workroom);
zut_get_ymdhms(&yy, &mm, &dd, &hi, &mi, &si);
if (svattr == A_NORMAL)
wattron(ver_win, A_REVERSE);
else
wattroff(ver_win, A_REVERSE);
wattron(ver_win, A_BOLD);
wmove(ver_win, 8, (ncols-4-24)/2);
wprintw(ver_win, " %04d.%02d.%02d %02d:%02d:%02d ", yy, mm, dd, hi, mi, si);
wattroff(ver_win, A_BOLD);
if (svattr == A_NORMAL)
wattroff(ver_win, A_REVERSE);
else
wattron(ver_win, A_REVERSE);
wattroff(ver_win, A_REVERSE);
wrefresh(ver_win);
setjmp(timepos);
if (svattr == A_NORMAL)
signal(SIGALRM, timeview1);
else
signal(SIGALRM, timeview);
alarm(1);
ret = 0;
#ifdef zgx020409_modi
if (flag == OPER_LOGIN) {
/*
* 操作员注册
*/
ret = operator_login(ver_win, 10, 20);
} else if (flag == CLIENT_LOGIN) {
/*
* 客户(地市行)操作员注册
*/
ret = client_oper_login(ver_win, 10, 20);
} else {
/*
* 显示软件版本。或屏幕保护。
*/
getc(stdin);
}
#else
if (p_func) {
/*
* 进行中心操作员或客户(地市行)操作员注册
*/
ret = p_func(ver_win, 10, 20);
} else {
/*
* 显示软件版本。或屏幕保护。
*/
getc(stdin);
}
#endif
alarm(0);
delwin(ver_win);
#ifdef MY_CURSES
restoreterm();
#endif
return(ret);
}
void timeview()
{
short row, col;
short nrows, ncols;
int yy, mm, dd, hi, mi, si;
signal(SIGALRM, SIG_IGN);
nrows = VER_W->_maxy;
row = 7;
ncols = VER_W->_maxx;
col = (ncols - 4 - 24)/2;
zut_get_ymdhms(&yy, &mm, &dd, &hi, &mi, &si);
wattroff(VER_W, A_REVERSE);
wattron(VER_W, A_BOLD);
wmove(VER_W, row, col);
wprintw(VER_W, " %04d.%02d.%02d %02d:%02d:%02d ", yy, mm, dd, hi, mi, si);
wattroff(VER_W, A_BOLD);
wattroff(VER_W, A_REVERSE);
wrefresh(VER_W);
longjmp(timepos, 1);
}
void timeview1()
{
short row, col;
short nrows, ncols;
int yy, mm, dd, hi, mi, si;
signal(SIGALRM, SIG_IGN);
nrows = VER_W->_maxy;
row = 7;
ncols = VER_W->_maxx;
col = (ncols - 4 - 24)/2;
zut_get_ymdhms(&yy, &mm, &dd, &hi, &mi, &si);
wattron(VER_W, A_REVERSE);
wattron(VER_W, A_BOLD);
wmove(VER_W, row, col);
wprintw(VER_W, " %04d.%02d.%02d %02d:%02d:%02d ", yy, mm, dd, hi, mi, si);
wattroff(VER_W, A_BOLD);
wattroff(VER_W, A_REVERSE);
wrefresh(VER_W);
longjmp(timepos, 1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -