home *** CD-ROM | disk | FTP | other *** search
/ Zodiac Super OZ / MEDIADEPOT.ISO / FILES / 13 / DEG.ZIP / DATIN.C next >
C/C++ Source or Header  |  1992-01-17  |  3KB  |  140 lines

  1. #include <conio.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <io.h>
  5. #include <dos.h>
  6. #include <fcntl.h>
  7. #include <string.h>
  8.  
  9. #define BACKSPACE '\010'
  10. #define BACKUP "\010"
  11. #define CR 0x0d
  12. #define ONULL 0
  13. #define ALPHA '@'
  14. #define NUMERIC '#'
  15. #define UNDERSCORE "_"
  16. #define DELETE "\010_\010"
  17.  
  18. datain(line,format)
  19. register char *line,*format;
  20. {
  21. register short cnt,pos,letter;
  22. register char *temp;
  23.  
  24.   temp = format;
  25.   pos = 0;
  26.  
  27.   printf("\33[1m");
  28.   while(*temp != ONULL)
  29.   {
  30.     if((*temp==ALPHA) || (*temp==NUMERIC))
  31.       printf(UNDERSCORE);
  32.     else
  33.       printf("%c",temp[0]);
  34.     pos++;
  35.     temp++;
  36.   }
  37.   temp = format;
  38.   while(*temp++ != ONULL)
  39.     printf(BACKUP);
  40.   pos = 0;
  41.   while(line[pos] != ONULL)
  42.     printf("%c",line[pos++]);
  43.   letter = 0;
  44.   do
  45.   {
  46.     if ((format[pos] == ONULL) || (format[pos] == ALPHA) ||
  47.     (format[pos] == NUMERIC))
  48.     {
  49.       letter = getch();
  50.       if (letter == CR)
  51.         break;
  52.       if (letter == BACKSPACE)
  53.         pos = backsp(line,format,pos);
  54.     }
  55.     switch (format[pos])
  56.     {
  57.     case ONULL:
  58.      break;
  59.     case ALPHA:
  60.       if ((letter >= ' ') && (letter <= 0x7f))
  61.       {
  62.         line[pos] = letter;
  63.         printf("%c",line[pos]);
  64.         pos++;
  65.       }
  66.       break;
  67.     case NUMERIC:
  68.       if ((letter >= '0') && (letter <= '9'))
  69.       {
  70.         line[pos] = letter;
  71.         printf("%c",line[pos]);
  72.         pos++;
  73.       }
  74.       break;
  75.     default:
  76.       letter = 0;
  77.       line[pos] = format[pos];
  78.       printf("%c",line[pos]);
  79.       pos++;
  80.     }
  81.   }
  82.   while(letter != CR);
  83.   line[pos] = 0;
  84.   printf("\33[0m");
  85.   return pos;
  86. }
  87.  
  88. backsp(line,format,pos)
  89. register char *line,*format;
  90. register short pos;
  91. {
  92. register short cnt;
  93.   if ((format[pos-1]== ALPHA) || (format[pos-1]==NUMERIC))
  94.   {
  95.     printf(DELETE);
  96.     return pos - 1;
  97.   }
  98.  
  99.   for(cnt=pos-1;cnt>=0;cnt--)
  100.   {
  101.     printf(BACKUP);
  102.     if ((format[cnt]==ALPHA) || (format[cnt] ==NUMERIC))
  103.     {
  104.       printf("_\010");
  105.       return cnt;
  106.     }
  107.   }
  108.   return 0;
  109. }
  110.  
  111. dataentry(title,line,format)
  112. register char *title,*line,*format;
  113. {
  114.   printf("\33[2J");                         /* clear screen */
  115.   center(title,10);
  116.   scenter(format,12);
  117.   return datain(line,format);
  118. }
  119.  
  120. center(title,pos)
  121. char *title;
  122. short pos;
  123. {
  124.   scenter(title,pos);
  125.   printf(title);
  126. }
  127.  
  128. scenter(title,pos)
  129. char *title;
  130. short pos;
  131. {
  132. short lgn;
  133.   printf("\33[%d;",pos);
  134.   lgn = strlen(title);
  135.   lgn = lgn / 2;
  136.   lgn = 40 - lgn - 1;
  137.   printf("%dH",lgn);
  138. }
  139.  
  140.