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

📄 winlib.c

📁 在IBM RS6000小型机上AIX操作系统下INFORMIX数据库C源代码有通讯和管理程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "../def/window.h"#include <ctype.h>/*****   功能: 给指定的域录入值****   返回: 1 结束 -2 中断***/inputrec(bp)RECORD *bp; /*记录块指针*/{	FIELD   *p; 	char	*str;  	short	Flag = 0, k, i, dlen = 0, c, point = 0;	int	f, b;	char	s[4];        if (bp->reclb<SR || bp->reclb>UP) {        	dperror(bp,"方式定义错误!!");  		return(EXIT);        }	if (bp->recend == YES) {        	if ( bp->reclb==SR ) {			if (bp->fun != 0) {				if (bp->fun(bp) != 1)					return(EXIT);				else 					clearform(bp);			} else 			 	clearform(bp);        	} else if ( bp->reclb==CX ) {			if (bp->fun != 0) bp->fun(bp);              		  bp->dqnu=0;               		  bp->recend = NO;		       	return(EXIT);        	} else if ( bp->reclb==UP ) {			if (bp->fun != 0)                        		 bp->fun(bp);                 	bp->dqnu=0;                	bp->recend = NO;                	for(i=0;i<bp->nu;i++)bp->field[i]->upbuf[0]='\0';			return(EXIT);		}	}	p = bp->field[bp->dqnu];	if (p->flag == NO && bp->reclb==SR ) { 		dispbuf(bp, bp->dqnu, p->upbuf);		if ((bp->dqnu + 1) < bp->nu) 			bp->dqnu++;		else {			bp->recend = YES;			bp->dqnu = 0;		}		return(1);	}	if ( p->tab_fie==0 &&  bp->reclb==CX )  {               	p->upbuf[0]='\0';		if ((bp->dqnu + 1) < bp->nu) 			bp->dqnu++;		else {			bp->recend = YES;			bp->dqnu = 0;		}		return(1);	}	if ((p->flag == NO || p->update == NO ) && bp->reclb==UP ) {		if ((bp->dqnu + 1) < bp->nu) 			bp->dqnu++;		else {			bp->recend = YES;			bp->dqnu = 0;		}		return(1);	}	if (p->nuflag==YES && p->upbuf[0] == '\0' && bp->reclb==UP ) {        	dperror(bp,"没有查询不能修改");  		return(EXIT);	}	str = (char *)malloc(p->dlen + 1);  	if (p->help != 0)		dpmsg(bp, p->help); 	getcolor(bp->win, f, b);	wsetcolor(bp->win, bp->f, bp->b);	if (p->def != 0 && bp->reclb==SR ) 		dispbuf(bp, bp->dqnu, p->def);	else if ( bp->reclb==CX ) 		clearyu(bp,bp->dqnu);	for ( ; ; ) {		wmove(bp->win, p->y, p->x + dlen);		wrefresh(bp->win);		if (dlen == p->len)          			c = '\012';		else			c = wacckey(bp->win);		if (dlen == 0)			clearyu(bp,bp->dqnu);		clmsg(bp, 60);		if (p->type == STR && !iscntrl(c & 0x7f)) {			s[0] = c;			if (c & 0x80) {				c = wacckey(bp->win);				s[1] = c;				s[2] = '\0';				if (p->len - dlen >= 2) {				      mvwaddstr(bp->win, p->y, p->x + dlen, s);			              wrefresh(bp->win);					str[dlen++] = s[0];					str[dlen++] = s[1];					continue;				} else 					printf("\007");			}		}		switch (c) {		case '0': case '1': case '2':		case '3': case '4': case '5':		case '6': case '7': case '8':		case '9':			if (p->type != MAST)				mvwaddch(bp->win, p->y, p->x + dlen, c);			else				mvwaddch(bp->win, p->y, p->x + dlen, '*');			str[dlen++] = c;			if (p->type == DAT1)                           if (dlen==4 || dlen==7) str[dlen++]='/';			if (p->type == DAT2)                           if (dlen==2 || dlen==5) str[dlen++]='/';			wrefresh(bp->win);			break;		case '-':          			if ((dlen == 0 &&  p->type < 3 )  || p->type == 6 ) {				mvwaddch(bp->win, p->y, p->x + dlen, c);				wrefresh(bp->win);				str[dlen++] = c;			} else				printf("\007");			break;		case '.':         			if (( point == 0 && ( p->type == 2 || p->type == 4 ))                               || p->type == 5 || p->type == 6) {				mvwaddch(bp->win, p->y, p->x + dlen, c);				wrefresh(bp->win);				str[dlen++] = c;				point = 1;			} else				printf("\007");			break;		case Space:      			if ( p->type == 6) {				mvwaddch(bp->win, p->y, p->x + dlen, c);				wrefresh(bp->win);				str[dlen++] = c;			} else				printf("\007");			break;		case DEL:       			printf("\007");			free(str);			wsetcolor(bp->win, f, b);			if(bp->reclb!=UP)				clearform(bp);			else				dispbuf(bp,bp->dqnu,p->upbuf);			bp->dqnu = 0;			return(EXIT);   			break;		case End:       			if ( bp->reclb==CX ) {				wsetcolor(bp->win, f, b);				clearyu(bp,bp->dqnu);				if (bp->fun != 0) bp->fun(bp);				return(EXIT);                        } else 				printf("\007");			break;		case BS:            			if (dlen == 0)				printf("\007");			else {			dlen--;			if (str[dlen] == '\056')				point = 0;			if (str[dlen] & 0x80) {				dlen--;				mvwaddstr(bp->win, p->y, p->x + dlen, "  ");			} else  {				if (p->type==DAT1 && (dlen == 4 || dlen == 7)) 					dlen --;				if (p->type==DAT2 && (dlen == 2 || dlen == 5)) 					dlen --;				mvwaddch(bp->win, p->y, p->x + dlen, ' ');			}			wrefresh(bp->win);			}			break;		case KEY_UP:      		case KEY_LEFT:      			for (i = bp->dqnu - 1; ; i--) {				if (i < 0) {					dperror(bp, "以上没有可进域");					break;				}                                if (bp->reclb!=UP) {					if (bp->field[i]->flag == YES                                    		|| bp->field[i]->tab_fie!=0) {						wsetcolor(bp->win, f, b);						clearyu(bp,bp->dqnu);						bp->dqnu = i;						free(str);						return(1); 						break;					}				} else {					if (bp->field[i]->flag == YES &&                                            bp->field[i]-> update == YES &&                                            bp->field[i]->tab_fie!=0) {					wsetcolor(bp->win, f, b);					dispbuf(bp,bp->dqnu,p->upbuf);					bp->dqnu = i;					free(str);					return(1);					break;					}				}			}			break;		case KEY_DOWN:      		case KEY_RIGHT:      			if ( bp->reclb==CX ) {				for (i = bp->dqnu + 1 ; ; i++) {					if (i > ( bp->nu-1 )) {						dperror(bp, "以下没有可进域");						break;					}					if (bp->field[i]->flag == YES                        		            || bp->field[i]->tab_fie!=0) {						wsetcolor(bp->win, f, b);						clearyu(bp,bp->dqnu);						bp->dqnu = i;						free(str);						return(1); 						break;					}				}                        } else if ( bp->reclb==UP ) {				for (i = bp->dqnu + 1 ; ; i++) {					if (i > ( bp->nu-1 )) {						dperror(bp, "以下没有可进域");						break;					}					if (bp->field[i]->flag == YES &&                                             bp->field[i]-> update == YES &&                                             bp->field[i]->tab_fie!=0) {					wsetcolor(bp->win, f, b);					dispbuf(bp,bp->dqnu,p->upbuf);					bp->dqnu = i;					free(str);					return(1); 					break;					}				}                        } else 				printf("\007");			break;		case RET:                 		case LF:                 			wsetcolor(bp->win, f, b);			str[dlen] = '\0';                        if( dlen==0 && p->def==0 && bp->reclb==SR)  {                        	if( p->nuflag==YES )  {					dperror(bp, "该域不能为空!!");					wsetcolor(bp->win, bp->f,bp->b);					dlen = 0;					/*free(str); */                       		 } else Flag = 1;                       	}                        if( dlen==0 && p->def >(char *)0 && bp->reclb==SR)  {				if (putbuf( bp, bp->dqnu, p->def,0) == 0) { 				        wsetcolor(bp->win, bp->f,bp->b);					dlen = 0;					free(str);                                 } else  Flag=1;                        }			if ( dlen==0 && bp->reclb==CX ) {                               p->upbuf[0]='\0';			       clearyu(bp,bp->dqnu);                               Flag=1;                        }			if ( dlen==0 && bp->reclb==UP ) {        			putbuf( bp, bp->dqnu,p->upbuf,0);                                Flag=1;                        }                        if( dlen > 0 )  {				if (putbuf( bp, bp->dqnu, str,1) == 0) {					wsetcolor(bp->win, bp->f,bp->b);					dlen = 0;					/*free(str);*/                                 } else  Flag=1;                        }			if ( Flag==1 ) {			/*	free(str); */				if (p->fun != 0 && 					( bp->reclb==SR || bp->reclb==UP)) {                                        k=p->fun(bp);					if (k != 0 ) {				                free(str);                                                if (k!=1) return(EXIT);						if ((bp->dqnu + 1) < bp->nu) 							bp->dqnu++;						else {							bp->recend = YES;							bp->dqnu = 0;						}						return(1);					} else {						wsetcolor(bp->win, bp->f,bp->b);						dlen = 0;                                                Flag = 0;					}				} else {					if ((bp->dqnu + 1) < bp->nu) 						bp->dqnu++;					else {						bp->recend = YES;						bp->dqnu = 0;					}				        free(str);					return(1);				}			}			break;		default:                			if (isprint(c) && (p->type == STR || p->type == CHAR)) {				mvwaddch(bp->win, p->y, p->x + dlen, c);				wrefresh(bp->win);				str[dlen++] = c;			} else				printf("\007");			break;		}	}}/*****   功能: 给指定的域赋值****   返回: 1 ok 0 error***/putbuf( bp, nu, str,bz)RECORD *bp; short  nu;         /*域号*/char	*str;      /*赋值串*/short   bz;        /*小数AUTO 补位 1_ok 0_no */{	char fmstr[40],fmstr1[40];        double atof(),je;        int k,mod;	clearyu(bp,nu);	if (strlen(str) != 0) {  		switch (bp->field[nu]->type) {		case YINT:		case UINT:                        strcpy(bp->field[nu]->upbuf,str);                        *(bp->field[nu]->buf_i)=atoi(str);                        sprintf(fmstr1,"%d",*(bp->field[nu]->buf_i));		        tomoney(fmstr, fmstr1, bp->field[nu]->dlen, 0, 1 );		        mvwaddstr(bp->win, bp->field[nu]->y,                                            bp->field[nu]->x, fmstr);		        wrefresh(bp->win);			return(1);			break;		case UDOU:		case DOUB:			mod = 1;			if (bp->field[nu]->scale > 0)				for (k = 1; k <= bp->field[nu]->scale; k++)					mod *= 10;

⌨️ 快捷键说明

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