home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_11_04
/
1104046b
< prev
next >
Wrap
Text File
|
1992-12-29
|
5KB
|
230 lines
/* LISTING 2 Sample Program using prompt() */
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <dos.h>
#include <string.h>
#include "./keys.h"
/* Identify Field Indexes */
#define FNAME 0
#define LNAME 1
#define SEX 2
#define AGE 3
#define MOVE_CUR(row,col) printf("\x1B[%d;%df",row,col);
/* Prototypes */
extern int prompt (char *, char, int, int, int, int,
char *, int, int);
struct fields {
short row; /* Field Row */
short col; /* Field Column */
short fyi_row; /* FYI Row */
short fyi_col; /* FYI Column */
short min_len; /* Minimum Length */
short max_len; /* Maximum Length */
char match; /* Match Character Code */
char fyi[81]; /* FYI Message */
};
struct fields field[] = {
{ 10,37,15,35,0,30,'A',"ENTER IN YOUR FIRST NAME." },
{ 11,37,15,35,0,30,'A',"ENTER IN YOUR LAST NAME. " },
{ 12,37,15,35,0, 1,'X',"ENTER IN YOUR SEX. (M/F) " },
{ 13,37,15,35,0, 3,'#',"ENTER IN YOUR AGE. " }
};
void main()
{
char xbuf[81]; /* Buffer */
char fname[31]; /* First Name */
char lname[31]; /* Last Name */
char sex; /* Male/Female */
int c;
int age;
int index;
/* Initialize Variables And Draw Screen Titles */
fname[0] = lname[0] = sex = '\0';
MOVE_CUR(10,25);
printf("FIRST NAME:");
MOVE_CUR(11,25);
printf("LAST NAME:");
MOVE_CUR(12,25);
printf("SEX M/F ..:");
MOVE_CUR(13,25);
printf("AGE ......:");
age = 0;
index = FNAME;
while (1) {
switch (index) {
case FNAME:
sprintf(xbuf,"%-s",fname);
c = prompt(xbuf,
field[FNAME].match,
field[FNAME].min_len,
field[FNAME].max_len,
field[FNAME].row,
field[FNAME].col,
field[FNAME].fyi,
field[FNAME].fyi_row,
field[FNAME].fyi_col);
switch (c) {
case C_UP :
case UP_NO_CHG:
case C_END :
/* Go To Last Screen Field */
index = AGE;
break;
case C_ESC :
/* Exit Program */
exit(0);
case C_CR :
case C_DOWN:
case C_TAB :
strcpy(fname,xbuf);
case CR_NO_CHG:
case DN_NO_CHG:
case TB_NO_CHG:
/* Go To Next Field */
index = LNAME;
break;
}
MOVE_CUR(10,37);
printf("%-30.30s",fname);
break;
case LNAME:
sprintf(xbuf,"%-s",lname);
c = prompt(xbuf,
field[LNAME].match,
field[LNAME].min_len,
field[LNAME].max_len,
field[LNAME].row,
field[LNAME].col,
field[LNAME].fyi,
field[LNAME].fyi_row,
field[LNAME].fyi_col);
switch (c) {
case C_END :
/* Go To Last Screen Field */
index = AGE;
break;
case C_ESC :
/* Exit Program */
exit(0);
case C_UP :
case UP_NO_CHG:
case C_HOME :
/* Go To Previous Field */
index = FNAME;
break;
case C_CR :
case C_DOWN:
case C_TAB :
strcpy(lname,xbuf);
case CR_NO_CHG:
case DN_NO_CHG:
case TB_NO_CHG:
/* Go To Next Field */
index = SEX;
break;
}
MOVE_CUR(11,37);
printf("%-30.30s",lname);
break;
case SEX:
sprintf(xbuf,"%c",sex);
c = prompt(xbuf,
field[SEX].match,
field[SEX].min_len,
field[SEX].max_len,
field[SEX].row,
field[SEX].col,
field[SEX].fyi,
field[SEX].fyi_row,
field[SEX].fyi_col);
switch (c) {
case C_UP :
case UP_NO_CHG:
/* Go To Previous Field */
index = LNAME;
break;
case C_ESC :
/* Exit Program */
exit(0);
case C_HOME:
/* Go To First Screen Field */
index = FNAME;
break;
case C_CR :
case C_DOWN:
case C_TAB :
sex = xbuf[0];
case C_END :
case CR_NO_CHG:
case DN_NO_CHG:
case TB_NO_CHG:
/* Go To Next Previous Field */
index = AGE;
break;
}
MOVE_CUR(12,37);
printf("%c",sex);
break;
case AGE:
sprintf(xbuf,"%-d",age);
c = prompt(xbuf,
field[AGE].match,
field[AGE].min_len,
field[AGE].max_len,
field[AGE].row,
field[AGE].col,
field[AGE].fyi,
field[AGE].fyi_row,
field[AGE].fyi_col);
switch (c) {
case C_UP :
case UP_NO_CHG:
/* Go To Previous Field */
index = SEX;
break;
case C_ESC :
/* Exit Program */
exit(0);
case C_HOME:
case C_CR :
case C_DOWN:
case C_TAB :
age = atoi(xbuf);
case CR_NO_CHG:
case DN_NO_CHG:
case TB_NO_CHG:
/* Go To Next Screen Field */
index = FNAME;
break;
}
MOVE_CUR(13,37);
printf("%- 3d",age);
break;
}
}
}