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

📄 wininit.c

📁 在IBM RS6000小型机上AIX操作系统下INFORMIX数据库C源代码有通讯和管理程序
💻 C
字号:
#include "../def/window.h"#include <ctype.h>/***    功能: 用RECORD结构产生屏幕*/initform(view,lf,rf,yfg)RECORD *view;char lf,rf;short yfg;{	short	j, i, y, x;	for (i = 0; i < view->nu; i++) {		y = view->field[i]->y;              if(view->field[i]->dflag==YES) {		x = view->field[i]->x - strlen(view->field[i]->name)-yfg;		mvwaddstr(view->win, y, x, view->field[i]->name);               }		x = view->field[i]->x - 1;		mvwaddch(view->win, y, x, lf);		for (j = 0; j < view->field[i]->dlen; j++)			mvwaddch(view->win, y, view->field[i]->x + j, ' ');		x = view->field[i]->x + view->field[i]->dlen;		mvwaddch(view->win, y, x, rf);                *(view->field[i]->buf_i)=0;                *(view->field[i]->buf_d)=0;                view->field[i]->buf_s[0]='\0';                view->field[i]->upbuf[0]='\0';	}	wrefresh(view->win);        view->dqnu=0;        view->recend=NO;}clearform(view)RECORD *view;{	short	j, i, y;	for (i = 0; i < view->nu; i++) {		y = view->field[i]->y;		for (j = 0; j < view->field[i]->dlen; j++)			mvwaddch(view->win, y, view->field[i]->x + j, ' ');                *(view->field[i]->buf_i)=0;                *(view->field[i]->buf_d)=0;                view->field[i]->buf_s[0]='\0';                view->field[i]->upbuf[0]='\0';	}	wrefresh(view->win);        view->dqnu=0;        view->recend=NO;}clearwork(bp,y,x,ny,nx)RECORD *bp;short  y, x,ny,nx;{	short	i, j;        for(i=0;i<ny;i++)               for(j=0;j<nx;j++) 			mvwaddch(bp->win, y + i, x + j, ' ');	wrefresh(bp->win);}gbfdef(view,lb,nu,str)RECORD *view;short lb,nu;char *str;{if(nu>view->nu-1){   puts("域数error!!");   return(0);}switch(lb) {	case A_DEF:		if ( ( view->field[nu]->def = str ) != ZCP ) {			view->field[nu]->def = (char *)malloc(81);             		strcpy(view->field[nu]->def, str);                } else             strcpy(view->field[nu]->def, str);             return(1);             break;	case A_HELP:		if ( ( view->field[nu]->help = str ) != ZCP ) {			view->field[nu]->help = (char *)malloc(81);             		strcpy(view->field[nu]->help, str);                } else             strcpy(view->field[nu]->help, str);             return(1);             break;        default:             puts("无效属性类别!!");              return(0);             break;       }}gbreclb(view,lb,fun)RECORD *view;short lb;int (*fun)();{	if(lb>0&&lb<4){             view->reclb=lb;             if((lb==UP)||(lb==UP)){        	view->dqnu=0;        	view->recend=NO;             }		if(fun!=0)			view->fun=fun;             return(1);	}	        puts("无效属性类别!!");         return(0);}attri(view,lb,nu)RECORD *view;short lb,nu;{if(nu>view->nu-1){   puts("域数error!!");   return(0);}switch(lb) {	case F_FLAG:             view->field[nu]->flag=NO;             return(1);             break;	case F_DFLAG:             view->field[nu]->dflag=NO;             return(1);             break;	case F_UNFLAG:             view->field[nu]->nuflag=NO;             return(1);             break;	case F_UPDATE:             view->field[nu]->update=NO;             return(1);             break;	case G_FLAG:             view->field[nu]->flag=YES;             return(1);             break;	case G_DFLAG:             view->field[nu]->dflag=YES;             return(1);             break;	case G_UNFLAG:             view->field[nu]->nuflag=YES;             return(1);             break;	case G_UPDATE:             view->field[nu]->update=YES;             return(1);             break;        default:             puts("无效属性类别!!");              return(0);             break;       }}/* * 	记录初始化 */RECORD *initrec( win, msgwin, f, b, tab_rec,msgy,msgx)WINDOW *win,*msgwin;int	f;	/* 当前域前景	*/int	b;	/* 当前域背景	*/char  *tab_rec;short  msgy,msgx;{        RECORD *bp;	register int	i;	bp = ( RECORD *)malloc(sizeof( RECORD ));	if ( bp == ZBP ) {		puts("分配内存溢出 !!!");		return(0);	}        bp->reclb=0;        bp->win=win;        bp->msgwin=msgwin;	bp->nu = 0;	bp->dqnu = 0;	bp->recend = NO;	bp->f = f;	bp->b = b;	if ( ( bp->tab_rec = tab_rec ) != ZCP ) {		bp->tab_rec = ( char *)malloc(strlen(tab_rec) + 1);		strcpy(bp->tab_rec, tab_rec);	}        bp->dpmaxbs=0;        bp->msgy=msgy;        bp->msgx=msgx;	i = 0;	while ( i < NBFIELD )		bp->field[i++] = ZFP;	return( bp );}/* * 	STR域初始化 */initfield_s(bp, name, tab_fie, type, begy, begx, len, dlen, fun, funstr)RECORD *bp;/* 块指针	*/char	*name;		/* 域名		*/char    *tab_fie;           /* 对应数据库表字段 */int	type;		/* 域类别	*/int	begy;		/* 起始光标行	*/int	begx;		/* 起始光标列	*/int	len;		/* 域长度	*/int	dlen;		/* 显示域长度	*/int	(*fun)();char   *funstr;         /* 程序变量 */{	int	i;	register FIELD *fp;	fp = ( FIELD *)malloc(sizeof( FIELD ));	if ( fp == ZFP ) {		puts("分配域描述符内存溢出 !!!");		return(0);	}	if ( ( fp->name = name ) != ZCP ) {		fp->name = ( char *)malloc(strlen(name) + 1);		strcpy(fp->name, name);	}	if ( ( fp->tab_fie = tab_fie ) != ZCP ) {		fp->tab_fie = ( char *)malloc(strlen(tab_fie) + 1);		strcpy(fp->tab_fie, tab_fie);	}	fp->type = type;	fp->y = begy;	fp->x = begx;	if ( len < 1 ) {		puts("出错: 域长度必须大于 0   !!!");		return(0);	}	if ( type == DAT1 ) fp->len=10;        else	if ( type == DAT2 ) fp->len=8;        else	fp->len = len;	fp->scale = 0;	if ( dlen < len ) {		puts("出错: 显示域长度必须大于域长!!!");		return(0);	}	fp->dlen = dlen;	fp->buf_s = (char *)malloc((fp->len) + 1);		if ( fp->buf_s == ZCP ) {		puts("STR分配域编辑缓冲区内存溢出 !!!");		return(0);		}	fp->buf_s[fp->len] = '\0';	fp->buf_i = (int *)malloc(sizeof(int));		if ( fp->buf_i == ZIP ) {		puts("INT分配域编辑缓冲区内存溢出 !!!");		return(0);		}	fp->buf_d = (double *)malloc(sizeof(double));		if ( fp->buf_d == ZDP ) {		puts("DOUBLE分配域编辑缓冲区内存溢出 !!!");		return(0);		}        if (funstr!=0)        	fp->buf_s=funstr;	fp->upbuf = (char *)malloc((fp->len) + 1);	if ( fp->upbuf == ZCP ) {		puts("分配域修改缓冲区内存溢出 !!!");		return(0);	}	fp->upbuf[fp->len] = '\0';	fp->fun = fun;	fp->def = 0;	fp->help = 0;	fp->flag = YES;	fp->dflag = YES;	fp->nuflag = YES;	fp->update = YES;	bp->nu++;	if ( bp->nu > NBFIELD ) {		puts("域数分配error!!!");		return(0);	}	bp->field[bp->nu-1] = fp;	return( 1 );}/* * 	INT域初始化 */initfield_i(bp, name, tab_fie, type, begy, begx, len, dlen, fun, funint)RECORD *bp;/* 块指针	*/char	*name;		/* 域名		*/char    *tab_fie;           /* 对应数据库表字段 */int	type;		/* 域类别	*/int	begy;		/* 起始光标行	*/int	begx;		/* 起始光标列	*/int	len;		/* 域长度	*/int	dlen;		/* 域长度	*/int	(*fun)();int	*funint;		{	int	i;	register FIELD *fp;	fp = ( FIELD *)malloc(sizeof( FIELD ));	if ( fp == ZFP ) {		puts("分配域描述符内存溢出 !!!");		return(0);	}	if ( ( fp->name = name ) != ZCP ) {		fp->name = ( char *)malloc(strlen(name) + 1);		strcpy(fp->name, name);	}	if ( ( fp->tab_fie = tab_fie ) != ZCP ) {		fp->tab_fie = ( char *)malloc(strlen(tab_fie) + 1);		strcpy(fp->tab_fie, tab_fie);	}	fp->type = type;	fp->y = begy;	fp->x = begx;	if ( len < 1 ) {		puts("出错: 域长度必须大于 0   !!!");		return(0);	}	fp->len = len;	fp->scale = 0;	if ( dlen < len ) {		puts("出错: 显示域长度必须大于域长!!!");		return(0);	}	fp->dlen = dlen;	fp->buf_s = (char *)malloc((fp->len) + 1);	if ( fp->buf_s == ZCP ) {		puts("STR分配域编辑缓冲区内存溢出 !!!");		return(0);	}	fp->buf_s[fp->len] = '\0';	fp->buf_i = (int *)malloc(sizeof(int));		if ( fp->buf_i == ZIP ) {		puts("INT分配域编辑缓冲区内存溢出 !!!");		return(0);		}	fp->buf_d = (double *)malloc(sizeof(double));		if ( fp->buf_d == ZDP ) {		puts("DOUBLE分配域编辑缓冲区内存溢出 !!!");		return(0);		}        if(funint!=0)        	fp->buf_i=funint;	fp->upbuf = (char *)malloc((fp->len) + 1);	if ( fp->upbuf == ZCP ) {		puts("分配域修改缓冲区内存溢出 !!!");		return(0);	}	fp->upbuf[fp->len] = '\0';	fp->fun = fun;	fp->def = 0;	fp->help = 0;	fp->flag = YES;	fp->dflag = YES;	fp->nuflag = YES;	fp->update = YES;	bp->nu++;	if ( bp->nu > NBFIELD ) {		puts("域数分配error!!!");		return(0);	}	bp->field[bp->nu-1] = fp;	return( 1 );}/* * 	DOUBLE域初始化 */initfield_d(bp, name, tab_fie, type, begy, begx, len, scale, dlen, fun, fundou)RECORD *bp;/* 块指针	*/char	*name;		/* 域名		*/char    *tab_fie;           /* 对应数据库表字段 */int	type;		/* 域类别	*/int	begy;		/* 起始光标行	*/int	begx;		/* 起始光标列	*/int	len;		/* 域长度	*/int	scale;		/* 小数位数	*/int	dlen;		/* 域长度	*/int	(*fun)();double  *fundou;{	int	i;	register FIELD *fp;	fp = ( FIELD *)malloc(sizeof( FIELD ));	if ( fp == ZFP ) {		puts("分配域描述符内存溢出 !!!");		return(0);	}	if ( ( fp->name = name ) != ZCP ) {		fp->name = ( char *)malloc(strlen(name) + 1);		strcpy(fp->name, name);	}	if ( ( fp->tab_fie = tab_fie ) != ZCP ) {		fp->tab_fie = ( char *)malloc(strlen(tab_fie) + 1);		strcpy(fp->tab_fie, tab_fie);	}	fp->type = type;	fp->y = begy;	fp->x = begx;	if ( len < 1 ) {		puts("出错: 域长度必须大于 0   !!!");		return(0);	}	if ( type == UDOU || type == DOUB ) {		if ( len > 12 ) {			puts("出错:域长度不能大于12 !!!");			return(0);		}	}	if ( scale < 0 )		scale = 0;	if ( type == UDOU || type == DOUB ) {		if ( scale >= len ) {			puts("出错:小数位溢出 !!!");			return(0);		}	}	fp->len = len;	fp->scale = scale;	if ( dlen < len ) {		puts("出错: 显示域长度必须大于域长!!!");		return(0);	}	fp->dlen = dlen;	fp->buf_s = (char *)malloc((fp->len) + 1);	if ( fp->buf_s == ZCP ) {		puts("分配域编辑缓冲区内存溢出 !!!");		return(0);	}	fp->buf_s[fp->len] = '\0';	fp->buf_i = (int *)malloc(sizeof(int));		if ( fp->buf_i == ZIP ) {		puts("INT分配域编辑缓冲区内存溢出 !!!");		return(0);		}	fp->buf_d = (double *)malloc(sizeof(double));		if ( fp->buf_d == ZDP ) {		puts("DOUBLE分配域编辑缓冲区内存溢出 !!!");		return(0);		}        if(fundou!=0)        	fp->buf_d=fundou;	fp->upbuf = (char *)malloc((fp->len) + 1);	if ( fp->upbuf == ZCP ) {		puts("分配域修改缓冲区内存溢出 !!!");		return(0);	}	fp->upbuf[fp->len] = '\0';	fp->fun = fun;	fp->def = 0;	fp->help = 0;	fp->flag = YES;	fp->dflag = YES;	fp->nuflag = YES;	fp->update = YES;	bp->nu++;	if ( bp->nu > NBFIELD ) {		puts("域数分配error!!!");		return(0);	}	bp->field[bp->nu-1] = fp;	return( 1 );}initdbform(bp,maxbs)RECORD *bp;int maxbs;{	int i,k[15],j[15],c,d,m,n;	bp->dpmaxbs=maxbs;	k[0]=0;        for(i=0,c=0;i<bp->nu;i++) {		if((bp->field[i]->dlen)>=strlen(bp->field[i]->name)) {			if((bp->field[i]->dlen)%2==0) 				k[i+1]=bp->field[i]->dlen+c+2;                        else				k[i+1]=bp->field[i]->dlen+c+3;                } else {			if(strlen(bp->field[i]->name)%2==0) 				k[i+1]=strlen(bp->field[i]->name)+c+2;                        else				k[i+1]=strlen(bp->field[i]->name)+c+3;                }		c=k[i+1];                j[i]=(c-k[i]-strlen(bp->field[i]->name))/2+k[i]+1;        }       for(d=0;d<=bp->dpmaxbs+3;d++) {       		for(m=0,n=0;m<=c;m+=2) {           		if( m==0) {   			  if(d==0) mvwaddstr(bp->win,d,m,"┌");			  else if(d==2) mvwaddstr(bp->win,d,m,"├");			  else if(d==bp->dpmaxbs+3) mvwaddstr(bp->win,d,m,"└");			  else mvwaddstr(bp->win,d,m,"│");			}           		else if( m==k[i]) {   			  if (d==0) mvwaddstr(bp->win,d,m,"┐");			  else if(d==2) mvwaddstr(bp->win,d,m,"┤");			  else if(d==bp->dpmaxbs+3) mvwaddstr(bp->win,d,m,"┘");			  else mvwaddstr(bp->win,d,m,"│");			}           		else if( m==k[n+1]) {   			  if (d==0) mvwaddstr(bp->win,d,m,"┬");			  else if(d==2) mvwaddstr(bp->win,d,m,"┼");			  else if(d==bp->dpmaxbs+3) mvwaddstr(bp->win,d,m,"┴");			  else mvwaddstr(bp->win,d,m,"│");				n++;			}			else { if ( d==0 || d== 2 || d==bp->dpmaxbs+3 )                                       mvwaddstr(bp->win,d,m,"─");                                    else                                       mvwaddstr(bp->win,d,m,"  ");				}			}	}	for(m=0;m<bp->nu;m++) {                mvwaddstr(bp->win,1,j[m],bp->field[m]->name);               	 *(bp->field[m]->buf_i)=0;               	 *(bp->field[m]->buf_d)=0.00;        	bp->field[m]->buf_s[0]='\0';        	bp->field[m]->upbuf[0]='\0';        }  	wrefresh(bp->win);	return( 0 );}/* * 	菜单域初始化 */initpopfd(bp, menu, count, begy, begx)RECORD *bp;		/* 块指针	*/char	*menu[];  	/*菜单字符串数组指针*/ int	count;    	/*菜单项数*/ int	begy;		/* 起始光标行	*/int	begx;		/* 起始光标列	*/{	int	i;	for(i=0;i<count;i++) 	initfield_s(bp, menu[i], 0, STR, begy+i, begx, 1, strlen(menu[i]),0,0);	return( 1 );}initlinefd(bp, menu, count, begy)RECORD *bp;		/* 块指针	*/char	*menu[];  	/*菜单字符串数组指针*/ int	count;    	/*菜单项数*/ int	begy;		/* 起始光标行	*/{	int	sy[20], i, len = 0;	for (i = 0; i < count; i++) {		sy[i] = len;		len = len + strlen(menu[i]) + 2;  	}	len = (bp->win->_maxx - len) / 2;	for (i = 0; i < count; i++)		sy[i] = sy[i] + len;	for(i=0;i<count;i++) 	initfield_s(bp, menu[i], 0, STR, begy, sy[i], 1, strlen(menu[i]),0,0);	return( 1 );}inityufun(bp, nu, fun)RECORD *bp;		/* 块指针	*/short	nu; int	(*fun)();{	bp->field[nu]->fun=fun;	return( 1 );}menu_win(bp)RECORD *bp;{	int	i, choice;	short	f, b, c;	char    key[25];	choice = bp->nu;	for (i = 0; i < choice; i++) {		key[i]=bp->field[i]->name[0];		if(!isalnum(key[i])) {			dperror(bp,"菜单选择项应是数字或字母!");			return(0);		}		dispbuf(bp, i, bp->field[i]->name);	}	choice = 0;	getcolor(bp->win, f, b);	for (; ; ) {                wstandout(bp->win);		dispbuf(bp, choice, bp->field[choice]->name);                wstandend(bp->win);		c = wacckey(bp->win);        		clmsg(bp,60);		if (isalnum(c)) 			dispbuf(bp, choice, bp->field[choice]->name);		for(i=0;i<=bp->nu;i++)			if(key[i]==c) break;		if(i<bp->nu) 			choice = i;		else {			switch (c) {			case RET:       			case LF:				if (choice == ( bp->nu - 1 ))					return(EXIT);				if(bp->field[choice]->fun!=0)					bp->field[choice]->fun(bp);				break;			case KEY_DOWN:          			case KEY_RIGHT:        				dispbuf(bp, choice, bp->field[choice]->name);				choice++;				if (choice > (bp->nu - 1)) choice = 0;				break;			case KEY_UP:          			case KEY_LEFT:       				dispbuf(bp, choice, bp->field[choice]->name);				choice--;				if (choice < 0) choice = bp->nu - 1;				break;			default:            				printf("\007");				break;			}		}	}}

⌨️ 快捷键说明

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