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