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

📄 tool.c

📁 在SCO UNIX制定界面程序 可根据文件配制菜单,而不必修改源程序,非常方便
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <curses.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#include "mytools.h"
#include "errmesg.h"
#include "errmesg_macro.h"
#include "tool.h"
#include "db_struct_c.h"

#define SCR_NUM 	200
double  atof();
long	atol();

extern int do_query, do_insert, do_update, do_delete, special, his_query;
extern S_tran_ls tran_ls;
extern char *mstr;
void prescan();
static char str_bak[200] = "";
static struct {
	char *name;
	char *index;
} index[] = { { "card_type"," data_id, card_id"},
		{ NULL,		NULL}};
/* IN_ITEM() */

static	int	prompt_flg = 1;		/* 提示行开关 0:无提示行 1:有提示行 */

static unsigned	in_item_ch = ENTER; 	/* 置为ENTER是为了当第一个字段为只显示时
					   能够返回ENTER以便继续作下一个字段	*/

/*
 * 字段值输入函数
 *
 */
int in_item(pwin,name,row,col,value,len,fieldcheck,p_func,view,flag)
WINDOW *pwin; 			/* 显示窗口 */
char	*name; 			/* 名称 */
int	row, col;	 	/* 坐标 */
char	*value;			/* 要编辑的字符串 */
int	len; 			/* 字符串的长度 */
int	( *fieldcheck )(); 	/* 字段检查函数指针 */
int	( *p_func )(); 		/* 字段检查函数指针 */
int	view; 			/* 0:正常 1:不处理 2:只显示
				   4:密文显示 8:非空(允许ESC退出) */
int	flag; 			/* 是否回车确认 */
{
	static 	int	OverWrite = 1;
	int	 	y = row, x = col;
	char		*sp = value, *p;
	int	 	result = 0;
	int		k, full_flag;
	char 		buffer[128];
	int		locate;


	if ( view & SKIP )
		return( in_item_ch );


	value[len] = 0;
	memset( value + strlen( value ), ' ', len - strlen( value ) );

	if ( view & NOEDIT ) {
		wmove( pwin, row, col );
		if ( view & HIDE )
			disp_pwd( pwin, value );
		else
			waddstr( pwin, value );
		wrefresh( pwin );
		/*
		 * 即使本字段无需输入,但仍需执行字段域值检查
		 */
		if ( fieldcheck ) {
			if ( ( k = fieldcheck( value ) ) != SUCC ) {
				wattroff( pwin, Item_Attr );
				h_wpromptr( pwin, 16, errstr[k], 1, 1 );
				wattron( pwin, Item_Attr );
			}
		}
		if ( p_func ) {
			if ( ( k = p_func( value ) ) != SUCC ) {
				wattroff( pwin, Item_Attr );
				h_wpromptr( pwin, 16, errstr[k], 1, 1 );
				wattron( pwin, Item_Attr );
			}
		}
		return( in_item_ch );
	}

	if ( prompt_flg == PROMPT_ON )
		if ( OverWrite )
		{
			clear_wline(stdscr, LINES-1);
			h_prompt( LINES-1, 69, "覆盖方式",0,1);
		}
		else
		{
			clear_wline(stdscr, LINES-1);
			h_prompt( LINES-1, 69, "插入方式",0,1);
		}

	wattron( pwin, Item_Attr );

	wmove( pwin, row, col );
	if ( view & HIDE )
		disp_pwd( pwin, value );
	else waddstr( pwin, value );

	full_flag = 0;

	keypad ( pwin, FALSE );

	do {
		wmove( pwin, y, x );
		wrefresh( pwin );

		if ( full_flag == 0 )
			in_item_ch = getkey(pwin);
		else in_item_ch = ENTER;

		switch ( in_item_ch ) {

		case INS:
			OverWrite ^= 1;
			wattroff( pwin, Item_Attr );
			if ( prompt_flg==PROMPT_ON )
				if ( OverWrite )
				{
					clear_wline(stdscr, LINES-1);
					h_prompt( LINES-1, 69, "覆盖方式",0,1);
				}
				else
				{
					clear_wline(stdscr, LINES-1);
					h_prompt( LINES-1, 69, "插入方式",0,1);
				}
			wattron( pwin, Item_Attr );
			break;

		case LEFT:
			if ( sp != value ) {
				sp--;
				x--;
			}
			break;

		case RIGHT:
			if ( * ( sp + 1 ) != 0 ) {
				sp ++;
				x ++;
			} else
				full_flag = 1;
			break;

		case HOME:
			sp = value;
			x = col;
			break;

		case END:
			locate = len;
			for ( sp = value+len-1; locate > 0 ; sp--, locate-- )
				if ( *sp != ' ' ) break;
			if ( locate < len ) {
				x = col + locate;
				sp = value + locate;
			} else {
				x = col + len - 1;
				sp = value + len - 1;
			}
			break;

		case UP:
			result = in_item_ch;
			break;

		case DOWN:	/* End edit of the field */
		case CR:
		case ENTER:
			p = value + strlen(value) - 1;
			if (strchr(value, ' ')) {
				if (view & FULL) {
					beep();
					full_flag = 0;
					break;
				}
				while ((p != value) && (*p == ' ')) p--;
				if (*p == ' ') {
					if (view & NOEMPTY) {
						beep();
						full_flag = 0;
						break;
					}
					value[0] = 0;
				}
			}
			if (value[0] && (view & DIGITAL)) {
				while ((p != value) && isdigit(*p)) p--;
				if (!isdigit(*p)) {
					beep();
					full_flag = 0;
					break;
				}
			}

			if ( fieldcheck )
				if ( ( k = fieldcheck( value ) ) != SUCC ) {
					wattroff( pwin, Item_Attr );
					h_wpromptr( pwin, 16, errstr[k], 1, 1 );
					wattron( pwin, Item_Attr );

					if (str_bak[0])
						h_winprompt( pwin, 16, 2, str_bak, 0, 0 );

// Omitted for BOC			set_blank( value, len );
					sp = value;
					y = row;
					x = col;
					mvwaddstr( pwin, y, x, sp );
					full_flag = 0;
					break;
				}
			if ( p_func )
				if ( ( k = p_func( value ) ) != SUCC ) {
					wattroff( pwin, Item_Attr );
					h_wpromptr( pwin, 16, errstr[k], 1, 1 );
					wattron( pwin, Item_Attr );

					if (str_bak[0]) h_winprompt( pwin, 16, 2, str_bak, 0, 0 );

// Omitted for BOC			set_blank( value, len );
					sp = value;
					y = row;
					x = col;
					mvwaddstr( pwin, y, x, sp );
					full_flag  = 0;
					break;
				}

			result=in_item_ch;
			break;

		case ESCAPE:	/* Confirm and exit */
			p = value + strlen(value) - 1;
			if (strchr(value, ' ')) {
				if (view & FULL) {
					beep();
					full_flag = 0;
					break;
				}
				while ((p != value) && (*p == ' ')) p--;
				if (*p == ' ') {
					if (view & NOEMPTY) {
/*================== WuBin 2001-6-22 17:10 ======Start==============
						beep();
						full_flag = 0;
						break;
===========================2001-6-22 17:10=======End==============*/
				/*	result=in_item_ch;	 非空状态时,允许ESC退出 */
						beep();
						full_flag = 0;
						break;
					break;
					}
					value[0] = 0;
				}
			}
			if (value[0] && (view & DIGITAL)) {
				while ((p != value) && isdigit(*p)) p--;
				if (!isdigit(*p)) {
					beep();
					full_flag = 0;
					break;
				}
			}

			if ( fieldcheck )
				if ( ( k = fieldcheck( value ) ) != SUCC ) {
					wattroff( pwin, Item_Attr );
					h_wpromptr( pwin, 16, errstr[k], 1, 1 );
					wattron( pwin, Item_Attr );

					if (str_bak[0]) h_winprompt( pwin, 16, 2, str_bak, 0, 0 );

// Omitted for BOC			set_blank( value, len );
					sp = value;
					y = row;
					x = col;
					mvwaddstr( pwin, y, x, sp );
					break;
				}
			if ( p_func )
				if ( ( k = p_func( value ) ) != SUCC ) {
					wattroff( pwin, Item_Attr );
					h_wpromptr( pwin, 16, errstr[k], 1, 1 );
					wattron( pwin, Item_Attr );

					if (str_bak[0]) h_winprompt( pwin, 16, 2, str_bak, 0, 0 );

// Omitted for BOC			set_blank( value, len );
					sp = value;
					y = row;
					x = col;
					mvwaddstr( pwin, y, x, sp );
					break;
				}

			result=in_item_ch;
			break;

		case CTRL_L:	/* Redraw screen */
			wrefresh( curscr );
			break;

		case CTRL_D:	/* Clears to the end of the field */
			memset( sp, ' ', strlen( sp ) );
			value[len] = 0;
			if ( view & HIDE )
				disp_pwd( pwin, sp );
			else waddstr( pwin, sp );
			break;

		case CTRL_W:	/* Help	screen */
			FunKeyHelp(name);
			break;

		case CTRL_N:
/*
			if (special && do_insert)
					disp_posls(value);
*/
			break;

		case CTRL_U:	/* Quit */
		case CTRL_C:	/* clear all fields */
			result=in_item_ch;
			break;

		case CTRL_X:	/* Deletes current character */
			memcpy( sp, sp + 1, strlen( sp ) - 1 );
			sp[strlen(sp)-1] = ' ';
			if ( view & HIDE )
				disp_pwd( pwin, sp );
			else waddstr( pwin, sp );
			break;

		case BS:	/* Delete previous character */
			/* If is begin , del itself  */
			if ( sp != value ) {
				sp --;
				x --;
			}
			wmove( pwin, y, x );
			memcpy( sp, sp + 1, strlen( sp ) - 1 );
			sp[strlen(sp)-1] = ' ';
			if ( view & HIDE )
				disp_pwd( pwin, sp );
			else waddstr( pwin, sp );
			break;

		default:
			if ( iscntrl( in_item_ch ) ) break;
			if ( * ( sp+1 ) != 0 ) {
				if ( OverWrite == 0 )
					move_mem( sp+1, sp, strlen( sp )-1 );
				*sp = in_item_ch;
				if ( view & HIDE )
					disp_pwd( pwin, sp );
				else waddstr( pwin, sp );
				sp ++;
				x ++;
			} else {
				*sp = in_item_ch;
				if ( view & HIDE )
					disp_pwd( pwin, sp );
				else waddstr( pwin, sp );
				if ( flag == NOENTER ) full_flag = 1;
			}
			break;
		}

	} while( result == 0 );

	wmove( pwin, row, col);
	wrefresh( pwin );

	/* End - Modified by Liyao, 11/19/97 */

	wattroff( pwin, Item_Attr );

	str_bak[0] = 0;

	return( result );
}

int	get_confirm_str( str )
char *str;

⌨️ 快捷键说明

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