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

📄 version_disp.c

📁 API
💻 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 + -