📄 input_tool.c
字号:
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 + -