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 >
Text File  |  1992-12-29  |  5KB  |  230 lines

  1. /* LISTING 2    Sample Program using prompt()  */
  2.  
  3. #include <stdio.h>
  4. #include <conio.h>
  5. #include <ctype.h>
  6. #include <dos.h>
  7. #include <string.h>
  8. #include "./keys.h"
  9.  
  10. /* Identify Field Indexes */
  11. #define FNAME          0
  12. #define LNAME          1
  13. #define SEX            2
  14. #define AGE            3
  15.  
  16. #define MOVE_CUR(row,col) printf("\x1B[%d;%df",row,col);
  17.  
  18. /* Prototypes */
  19. extern int  prompt (char *, char, int, int, int, int, 
  20.             char *, int, int);
  21.  
  22. struct fields {
  23.    short row;        /* Field Row            */
  24.    short col;        /* Field Column         */
  25.    short fyi_row;    /* FYI Row              */
  26.    short fyi_col;    /* FYI Column           */
  27.    short min_len;    /* Minimum Length       */
  28.    short max_len;    /* Maximum Length       */
  29.    char  match;      /* Match Character Code */
  30.    char  fyi[81];    /* FYI Message          */
  31. };
  32.  
  33. struct fields field[] = {
  34.    { 10,37,15,35,0,30,'A',"ENTER IN YOUR FIRST NAME." },
  35.    { 11,37,15,35,0,30,'A',"ENTER IN YOUR LAST NAME. " },
  36.    { 12,37,15,35,0, 1,'X',"ENTER IN YOUR SEX. (M/F) " },
  37.    { 13,37,15,35,0, 3,'#',"ENTER IN YOUR AGE.       " }
  38. };
  39.  
  40. void main()
  41. {
  42.    char xbuf[81];   /* Buffer      */
  43.    char fname[31];  /* First Name  */
  44.    char lname[31];  /* Last  Name  */
  45.    char sex;        /* Male/Female */
  46.    int  c;
  47.    int  age;       
  48.    int  index;
  49.  
  50.    /* Initialize Variables And Draw Screen Titles */
  51.    fname[0] = lname[0] = sex = '\0';
  52.    MOVE_CUR(10,25);
  53.    printf("FIRST NAME:");
  54.    MOVE_CUR(11,25);
  55.    printf("LAST  NAME:");
  56.    MOVE_CUR(12,25);
  57.    printf("SEX M/F ..:");
  58.    MOVE_CUR(13,25);
  59.    printf("AGE ......:");
  60.    age = 0;
  61.    index = FNAME;
  62.  
  63.    while (1) {
  64.       switch (index) {
  65.       case FNAME:
  66.        sprintf(xbuf,"%-s",fname);
  67.        c = prompt(xbuf, 
  68.               field[FNAME].match, 
  69.               field[FNAME].min_len,
  70.               field[FNAME].max_len,
  71.               field[FNAME].row,
  72.               field[FNAME].col,
  73.               field[FNAME].fyi,
  74.               field[FNAME].fyi_row,
  75.               field[FNAME].fyi_col);
  76.        switch (c) {
  77.        case C_UP     :
  78.        case UP_NO_CHG:
  79.        case C_END    :
  80.         /* Go To Last Screen Field */
  81.         index = AGE;
  82.         break;
  83.  
  84.        case C_ESC :
  85.         /* Exit Program */
  86.         exit(0);
  87.  
  88.        case C_CR  :
  89.        case C_DOWN:
  90.        case C_TAB :
  91.         strcpy(fname,xbuf);
  92.        case CR_NO_CHG:
  93.        case DN_NO_CHG:
  94.        case TB_NO_CHG:
  95.         /* Go To Next Field */
  96.         index = LNAME;
  97.         break;
  98.        }
  99.        MOVE_CUR(10,37);
  100.        printf("%-30.30s",fname);
  101.        break;
  102.  
  103.       case LNAME:
  104.        sprintf(xbuf,"%-s",lname);
  105.        c = prompt(xbuf,
  106.               field[LNAME].match, 
  107.               field[LNAME].min_len,
  108.               field[LNAME].max_len,
  109.               field[LNAME].row,
  110.               field[LNAME].col,
  111.               field[LNAME].fyi,
  112.               field[LNAME].fyi_row,
  113.               field[LNAME].fyi_col);
  114.        switch (c) {
  115.        case C_END :
  116.         /* Go To Last Screen Field */
  117.         index = AGE;
  118.         break;
  119.  
  120.        case C_ESC :
  121.         /* Exit Program */
  122.         exit(0);
  123.  
  124.        case C_UP     :
  125.        case UP_NO_CHG:
  126.        case C_HOME   :
  127.         /* Go To Previous Field */
  128.         index = FNAME;
  129.         break;
  130.  
  131.        case C_CR  :
  132.        case C_DOWN:
  133.        case C_TAB :
  134.         strcpy(lname,xbuf);
  135.        case CR_NO_CHG:
  136.        case DN_NO_CHG:
  137.        case TB_NO_CHG:
  138.         /* Go To Next Field */
  139.         index = SEX;
  140.         break;
  141.        }
  142.        MOVE_CUR(11,37);
  143.        printf("%-30.30s",lname);
  144.        break;
  145.  
  146.       case SEX:
  147.        sprintf(xbuf,"%c",sex);
  148.        c = prompt(xbuf,
  149.               field[SEX].match, 
  150.               field[SEX].min_len,
  151.               field[SEX].max_len,
  152.               field[SEX].row,
  153.               field[SEX].col,
  154.               field[SEX].fyi,
  155.               field[SEX].fyi_row,
  156.               field[SEX].fyi_col);
  157.        switch (c) {
  158.        case C_UP     :
  159.        case UP_NO_CHG:
  160.         /* Go To Previous Field */
  161.         index = LNAME;
  162.         break;
  163.  
  164.        case C_ESC :
  165.         /* Exit Program */
  166.         exit(0);
  167.  
  168.        case C_HOME:
  169.         /* Go To First Screen Field */
  170.         index = FNAME;
  171.         break;
  172.  
  173.        case C_CR  :
  174.        case C_DOWN:
  175.        case C_TAB :
  176.         sex = xbuf[0];
  177.        case C_END    :
  178.        case CR_NO_CHG:
  179.        case DN_NO_CHG:
  180.        case TB_NO_CHG:
  181.         /* Go To Next Previous Field */
  182.         index = AGE;
  183.         break;
  184.        }
  185.        MOVE_CUR(12,37);
  186.        printf("%c",sex);
  187.        break;
  188.  
  189.       case AGE:
  190.        sprintf(xbuf,"%-d",age);
  191.        c = prompt(xbuf,
  192.               field[AGE].match, 
  193.               field[AGE].min_len,
  194.               field[AGE].max_len,
  195.               field[AGE].row,
  196.               field[AGE].col,
  197.               field[AGE].fyi,
  198.               field[AGE].fyi_row,
  199.               field[AGE].fyi_col);
  200.        switch (c) {
  201.        case C_UP     :
  202.        case UP_NO_CHG:
  203.         /* Go To Previous Field */
  204.         index = SEX;
  205.         break;
  206.  
  207.        case C_ESC :
  208.         /* Exit Program */
  209.         exit(0);
  210.  
  211.        case C_HOME:
  212.        case C_CR  :
  213.        case C_DOWN:
  214.        case C_TAB :
  215.         age = atoi(xbuf);
  216.        case CR_NO_CHG:
  217.        case DN_NO_CHG:
  218.        case TB_NO_CHG:
  219.         /* Go To Next Screen Field */
  220.         index = FNAME;
  221.         break;
  222.        }
  223.        MOVE_CUR(13,37);
  224.        printf("%- 3d",age);
  225.        break;
  226.       }
  227.    }
  228. }
  229.  
  230.