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

📄 input_tool.c

📁 API
💻 C
📖 第 1 页 / 共 3 页
字号:
	char 	tmp[150];
	int	len, year;

	rm_tail_space( str );

	switch( MV_TYPE( f_ptr->option ) ) {

	case FLD_SHORT:
		if ( strlen(str) != 0 ) {
			*( ( short * )f_ptr->field )=atoi( str );
		} else
			*( ( short * )f_ptr->field )=0;
		break;
	case FLD_INT:
		if ( strlen(str) != 0 ) {
			*( ( int * )f_ptr->field )=atoi( str );
		} else
			*( ( int * )f_ptr->field )=0;
		break;
	case FLD_LONG:
		if ( strlen(str) != 0 ) {
			*( ( long * )f_ptr->field )=atol( str );
		} else
			*( ( long * )f_ptr->field )=0;
		break;
	case FLD_UNSIGNED:
		if ( strlen(str) != 0 ) {
			*( ( unsigned * )f_ptr->field )=( unsigned )atoi( str );
		} else 
			*( ( unsigned * )f_ptr->field ) = 0;
		break;
	case FLD_FLOAT:
	case FLD_MONEY:
		if ( strlen(str) != 0 ) {
			ff = atof( str);
			sprintf( tmp, "%.2lf", ff);
			*( ( double * )f_ptr->field )=atof( tmp );
		} else 
			*( ( double * )f_ptr->field )=0.0;
		break;
	case FLD_FLOAT_4:
		if ( strlen(str) != 0 ) {
			ff = atof( str);
			sprintf( tmp, "%.4lf", ff);
			*( ( double * )f_ptr->field )=atof( tmp );
		} else
			*( ( double * )f_ptr->field )=0.0;
		break;
	case FLD_STRING:
		strcpy( ( char * )f_ptr->field, str );
		break;
	case FLD_DATE:
		if ( strlen(str) == 0 )  {
			strcpy( ( char * )f_ptr->field, str );
			break;
		}
		if ( !isdigit (str[0]) )
			break;

		len = strlen( str);
		/* modify by dongyi */
		/*****  YYYY/MM/DD *****/
		/*
					if (len == 10)
						strcpy( ( char * )f_ptr->field, str );
		*/
		/*****	YYMMDD	*****/
		if (len == 6) 	{
			year = atol(str) / 10000;
			if ( (year>=0) && (year<=50) )
				sprintf(tmp, "20%2.2s%2.2s%2.2s", str, str+2, str+4);
			else if ( (year>=51) && (year<=99) )
				sprintf(tmp, "19%2.2s%2.2s%2.2s", str, str+2, str+4);
			else	break;

			strcpy( ( char * )f_ptr->field, tmp );
		}
		/*****	YYYYMMDD  *****/
		/*****  YY/MM/DD  *****/
		if (len == 8)	{
			if ( isdigit(str[2]) && isdigit(str[5]) )
				sprintf(tmp, "%-8.8s", str);
			else if ( str[2] == '/' )	{
				sprintf(tmp, "%2.2s", str);
				year = atol(tmp);
				if ( (year>=0) && (year<=50) )
					sprintf(tmp,"20%2.2s%2.2s%2.2s",
					    str,str + 3 ,str+6);
				else if ( (year>=51) && (year<=99) )
					sprintf(tmp, "19%2.2s%2.2s%2.2s",
					    str,str+3,str+6);
				else	break;
			}
			strcpy( ( char * )f_ptr->field, tmp );
		}
		memset (tmp, 0, 150);
		break;
	default:
		return( -1 );
		break;
	}
	return( 0 );
}

int	fieldtostr( f_ptr, str)
struct field_st *f_ptr;
char *str;
{
	char *sp;
	double ff;
	long	l;

	switch( MV_TYPE( f_ptr->option ) ) {

	case FLD_SHORT:
		sprintf( str, "%d", *( ( short * )f_ptr->field ) );
		break;
	case FLD_INT:
		sprintf( str, "%d", *( ( int * )f_ptr->field ) );
		break;
	case FLD_LONG:
		sprintf( str, "%ld", *( ( long * )f_ptr->field ) );
		break;
	case FLD_FLOAT:
	case FLD_MONEY:
		sprintf( str, "%.2lf", *( ( double * )f_ptr->field ) );
		break;
	case FLD_FLOAT_4:
		sprintf( str, "%.4lf", *( ( double * )f_ptr->field ) );
		break;
	case FLD_STRING:
	case FLD_DATE:
		strcpy( str, ( char * )f_ptr->field );
		break;
	case FLD_UNSIGNED:
		sprintf( str, "%d", *( ( unsigned * )f_ptr->field ) );
		break;
	default:
		return( -1 );
		break;
	}

	return( 0 );
}


/*
 *	获取屏幕结构文件名称
 */
int	gen_name( out_str, in_str )
char * in_str, *out_str;
{
#ifdef zgx010414_modify
	sprintf( out_str, "%s/view/%s", getenv( "HOME" ), in_str );
#else
	sprintf( out_str, "%s/view/%s", getenv( "WORKDIR" ), in_str );
#endif
}


int	mvgetstring(x,y,len,str)
int x,y,len;
char *str;
{
	int i,j,k;
	char ch;
	for(i=0;i<len;i++) str[i]='\0';
	i=x; 	
	j=y;	
	k=0;
	noecho();
	for(k=0;k<len;k++,j++) {
		move(i,j);
		ch = getkey(stdscr);
		if(ch == ESCAPE) { 
			ch=getch(); 
			return(-1);
		}
		if(ch == ENTER) break;
		if(k < 0) k=0;
		str[k] = ch;
		if(ch == BS) {
			if(j < y+1) j=y+1;
			move(i,j-1); 
			addch(' ');
			k -= 2; 
			j -= 2;
		}
		else addch(ch);
	}
	str[k] = 0;
	return(k);
}

int	wmvgetstring( win, x,y, len, str)
WINDOW	*win;
int 	x,y,len;
char 	*str;
{
	int 	i,j,k;
	char 	ch;

	i=x; 	
	j=y;	
	k=0;
	for(k=0;k<len;k++,j++) {
		wmove( win, i, j );
		ch = getkey(win);
		if(ch == ESCAPE) { 
			ch = wgetch(win); 
			return(-1);
		}
		if(ch == ENTER) break;
		if(k < 0) k=0;
		str[k] = ch;
		if(ch == BS) {
			if(j < k+1) j=k+1;
			wmove(win, i, j-1); 	
			waddch( win, ' ');
			k -= 2; 
			j -= 2;
			continue;
		}
		waddch( win, ch );
	}
	str[k] = 0;
	return(0);
}

int	mvgetstring1(x,y,len,str)
int x,y,len;
char *str;
{
	int i,j,k;
	char ch;

	i=x; 	
	j=y;	
	k=0;
	for(k=0;k<len;k++,j++) {
		move(i,j);
		ch = getkey(stdscr);
		if(ch == ESCAPE) {
			ch=getch(); 
			return(-1);
		}
		if(ch == ENTER) break;
		if(k < 0) k=0;
		str[k] = ch;
		if(ch == BS) {
			if(j < k+1) j=k+1;
			move(i,j-1); 	
			addch(' ');
			k -= 2; 
			j -= 2;
			continue;
		}
		addch(ch);
	}
	str[k] = 0;
	return(0);
}

/*
 *	检查各字段是否为空
 */
int	check_data( pwin, f_ptr )
WINDOW	*pwin;
struct field_st *f_ptr;
{
//	struct field_st *ptr;
//	char	tmp[200];
//
//	for ( ptr = f_ptr; ; ptr++ ) {
//		if ( MV_CHK( ptr->option ) && isblank( ptr ) )  {
//			sprintf( tmp, " [%s]不能为空... ", ptr->field_name );
//			h_wpromptr( pwin, 16, tmp, 1, 1 );
//			return( FAIL );
//				}
//		if ( MV_END( ptr->option ) )
//			return( SUCC );
//	}
	return(SUCC);
}

/*
 * 读取键盘输入
 *
 *	周国祥:应改为keypad(win, TRUE) 或使用功能键转换表
 */
int	getkey(win)
WINDOW	*win;
{
	int	ch = 0;
	int	bak = -1;
	int	flag = 0;

	keypad( win, FALSE);
	nodelay( win, FALSE);
	ch = wgetch(win);
	if (ch != 27)	goto  BAK;

	nap(20);
	nodelay( win, TRUE);
	bak = wgetch(win);
	nap(20);
	bak = wgetch(win);

	if ( bak != (-1) ) {
		ch = bak;
		flag = 1;
	}
	if (ch == 91)
		errcall(ERROR, "getkey has [ error ");

	nodelay( win, FALSE);

BAK:
	if ( flag == 1 ) {
		switch (ch) {
		case 65 :
			return UP;
			break;
		case 66 :
			return DOWN;
			break;
		case 67 :
			return RIGHT;
			break;
		case 68 :
			return LEFT;
			break;
		case 70 :
			return END;
			break;
		case 71 :
			return PGDN;
			break;
		case 72 :
			return HOME;
			break;
		case 73 :
			return PGUP;
			break;
		case 76 :
			return INS;
			break;
		}
	} else
		return (ch);
}

int	clear_wline_part( pwin, row, col, len )
WINDOW 	*pwin;
int 	row, col;
int	len;
{
	int	i;

	wmove( pwin, row, col );
	for (i=0;i<len;i++)
		wechochar(pwin, ' ');

	return (0);
}

/*
 * Draw a box of current windows.
 */

void Box0(WINDOW *win, int line, int colu)
{
	int i;

	for (i = 2; i < colu-2; i += 2)
		mvwaddstr(win, 0, i, "━");
	for (i = 2; i < colu-2; i += 2)
		mvwaddstr(win, line-1, i, "━");

	for (i = 1; i < line-1; i ++) {
		mvwaddstr(win, i, 0, "┃");
		mvwaddstr(win, i, colu-2, "┃");
	}

	mvwaddstr(win, 0, 0, "┏");
	mvwaddstr(win, 0, colu-2, "┓");
	mvwaddstr(win, line-1, 0, "┗");
	mvwaddstr(win, line-1, colu-2, "┛");

}

/*
 * Draw a box of current windows with bottom line.
 */

void Box1(WINDOW *win, int line, int colu)
{
	int i;

	mvwaddstr(win, 0, 0, "┏");
	mvwaddstr(win, 0, colu-2, "┓");
	mvwaddstr(win, line-1, 0, "┗");
	mvwaddstr(win, line-1, colu-2, "┛");

	for (i = 2; i < colu-2; i += 2) {
		mvwaddstr(win, 0, i, "━");
		mvwaddstr(win, line-1, i, "━");
		mvwaddstr(win, line-3, i, "─");
	}

	for (i = 1; i < line-1; i ++) {
		mvwaddstr(win, i, 0, "┃");
		mvwaddstr(win, i, colu-2, "┃");
	}

	mvwaddstr(win, line-3, 0, "┠");
	mvwaddstr(win, line-3, colu-2, "┨");
}

/*
 * Draw a box of current windows with twin line.
 */

void Box2(WINDOW *win, int line, int colu)
{
	int i;

	mvwaddstr(win, 0, 0, "┏");
	mvwaddstr(win, 0, colu-2, "┓");
	mvwaddstr(win, line-1, 0, "┗");
	mvwaddstr(win, line-1, colu-2, "┛");

	for (i = 2; i < colu-2; i += 2) {
		mvwaddstr(win, 0, i, "━");
		mvwaddstr(win, 2, i, "─");
		mvwaddstr(win, line-1, i, "━");
		mvwaddstr(win, line-3, i, "─");
	}

	for (i = 1; i < line-1; i ++) {
		mvwaddstr(win, i, 0, "┃");
		mvwaddstr(win, i, colu-2, "┃");
	}

	mvwaddstr(win, 2, 0, "┠");
	mvwaddstr(win, 2, colu-2, "┨");
	mvwaddstr(win, line-3, 0, "┠");
	mvwaddstr(win, line-3, colu-2, "┨");
}

int	FunKeyHelp(char *title)
{
	char	filename[128];

	if (get_helpname(title, filename)) return(-1);
	return(viewfile(16, 80, 4, 0, filename, "帮助信息"));
}

char	GV_help_file[128];

int	get_helpname(title, filename)
char	*title ;
char	*filename;
{
	int c;
	char nas_help_file[128], tmp[128];
	FILE *help_fd;

	sprintf(nas_help_file, "%s%s", getenv("WORKDIR"), GV_help_file);
	help_fd = fopen(nas_help_file, "r");
	if (!help_fd) return(-1);

	while ((c = getc(help_fd)) != EOF)
		if (c == '%') {
			gitem(tmp, 50, help_fd);
			if (!strcmp(title, tmp)) break;
		}
	if (c == EOF) {
		fclose(help_fd);
		return(-1);
	}
	while (c = getc(help_fd), c != '#' && c != EOF);
	if (c == EOF) {
		fclose(help_fd);
		return(-1);
	}
	gitem(tmp, 80, help_fd);

	fclose(help_fd);

	sprintf(filename, "%s/help/%s", getenv("WORKDIR"), tmp);
	return(0);
}

/*读一选择项名或说明*/
gitem(ss, bf, fp)
char	ss[];
int	bf;
FILE	*fp;
{
	int	c, i, j;
	for (i = 0; (c = getc(fp), c != '\n' && c != EOF && i < bf); i++)
		ss[i] = c;
	ss[i] = '\0';

	/*
	 * 去掉后面的空格
	 */
	for (j = i-1; j >= 0; j--)
		if (ss[j] != ' ' && ss[j] != '\t')
			break;
	ss[j+1] = '\0';
}

⌨️ 快捷键说明

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