📄 formexam.c
字号:
#include <curses.h>#include <form.h>#include "screen.h"#define QUIT (MAX_COMMAND+1)static int get_request(w)WINDOW *w;{ static int mode=REQ_INS_MODE; int c = wgetch(w); switch(c) { case 0x1b: return QUIT; case KEY_LEFT: return REQ_LEFT_FIELD; case KEY_RIGHT: return REQ_RIGHT_FIELD; case KEY_DOWN: return REQ_NEXT_FIELD; case KEY_UP: return REQ_PREV_FIELD; case 'N':return REQ_NEXT_PAGE; case 'P':return REQ_PREV_PAGE; } return(c);} static int my_driver(form,c)FORM *form;int c;{ switch(c) { case QUIT: if(form_driver(form,REQ_VALIDATION)==E_OK) return(TRUE); break; } beep(); return(FALSE);}void main(argc,argv)int argc;char *argv[];{ WINDOW *w; FORM *form; FIELD **f; FIELD **make_fields(); void erase_form(); void dump_form(); void free_fields(); void display_form(); int c,done=FALSE; FIELD *myf; char *data; if(!(form=new_form(make_fields()))) fprintf(stderr,"error "); StartScreen(); display_form(form); w=form_win(form); while(!done) { switch(form_driver(form,c=get_request(w))) { case E_OK: break; case E_UNKNOWN_COMMAND: done=my_driver(form,c); break; default: beep(); break; } } //dump_form(form); //addstr("Hit a key\n"); //refresh(); //getch(); erase_form(form); //free_form(form); //free_fields(f); EndScreen(); exit(0);}typedef FIELD * (*PF_field) ();typedef struct{ PF_field type; int rows; int cols; int frow; int fcol; char *v;}FIELD_RECORD;static FIELD *LABLE(x)FIELD_RECORD *x;{ FIELD *f=new_field(1,strlen(x->v),x->frow,x->fcol,0,0); if(f) { set_field_buffer(f,0,x->v); field_opts_off(f,O_ACTIVE); } return f;}static FIELD* STRING(x)FIELD_RECORD *x;{ FIELD *f=new_field(x->rows,x->cols,x->frow,x->fcol,0,0); if(f) { set_field_back(f,A_STANDOUT|A_UNDERLINE); } return f;} static FIELD_RECORD F[]={ LABLE,0,0,0,11,"Sweepstakes Entry Form1", LABLE,0,0,2,0,"Last Name1", STRING,1,18,1,0,(char *) 0, LABLE,0,0,2,20,"First2", STRING,1,12,1,20,(char *) 0, LABLE,0,0,2,34,"Middle1", STRING,1,13,1,34,(char *) 0, LABLE,0,0,5,11,"Comments1", STRING,4,46,6,0,(char *) 0, LABLE,0,0,0,11,"Sweepstakes Entry Form2", LABLE,0,0,2,0,"Last Name2", STRING,1,18,1,0,(char *) 0, LABLE,0,0,2,20,"First2", STRING,1,12,1,20,(char *) 0, LABLE,0,0,2,34,"Middle2", STRING,1,13,1,34,(char *) 0, LABLE,0,0,5,11,"Comments2", STRING,4,46,6,0,(char *) 0, LABLE,0,0,0,11,"Sweepstakes Entry Form", LABLE,0,0,2,0,"Last Name", STRING,1,18,1,0,(char *) 0, LABLE,0,0,2,20,"First", STRING,1,12,1,20,(char *) 0, LABLE,0,0,2,34,"Middle", STRING,1,13,1,34,(char *) 0, LABLE,0,0,5,11,"Comments", STRING,4,46,6,0,(char *) 0, (PF_field) 0,0,0,0,0,(char *) 0};#define MAX_FIELD 52static FIELD *fields[MAX_FIELD+1];static FIELD **make_fields(){ FIELD **f=fields; int i; for(i=0;i<MAX_FIELD&&F[i].type;++i,++f) { *f=(*F[i].type)(&F[i]); } set_new_page(fields[9], TRUE); set_new_page(fields[18], TRUE); *f=(FIELD *) 0; return(fields);}static void free_fields(f)FIELD **f;{ while(*f) free_field(*f++);}static char *PGM=(char *) 0;static void display_form(f)FORM *f;{ WINDOW *w,*w1; int rows; int cols; scale_form(f,&rows,&cols); if(w=newwin(rows+4,cols+4,2,2)) { set_form_win(f,w); set_form_sub(f,derwin(w,rows,cols,2,2)); box(w, 0, 0); keypad(w,1); } else fprintf(stderr,"ERROR RETURN FROM POST_FORM"); if(post_form(f) != E_OK) fprintf(stderr,"ERROR return from "); else wrefresh(w);}static void erase_form(f)FORM *f;{ WINDOW *w=form_win(f); WINDOW *s=form_sub(f); unpost_form(f); werase(w); wrefresh(w); delwin(s); delwin(w);}static void dump_form(form)FORM *form;{ FIELD **f; int count,i; char *data; if((count=field_count(form))==-1) { printw("Ther form was null\n"); refresh(); return; } else if(count == 0) { printw("The form dones"); refresh(); } if((f=form_fields(form))==NULL) { printw("NO aaaa"); refresh(); return; } for(i=0;i<count;i++) { if((data=field_buffer(f[i],0))!=NULL) { printw("f[%d]:'%s'\n",i,data); refresh(); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -