home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Zodiac Super OZ
/
MEDIADEPOT.ISO
/
FILES
/
13
/
DEG.ZIP
/
DATIN.C
next >
Wrap
C/C++ Source or Header
|
1992-01-17
|
3KB
|
140 lines
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <io.h>
#include <dos.h>
#include <fcntl.h>
#include <string.h>
#define BACKSPACE '\010'
#define BACKUP "\010"
#define CR 0x0d
#define ONULL 0
#define ALPHA '@'
#define NUMERIC '#'
#define UNDERSCORE "_"
#define DELETE "\010_\010"
datain(line,format)
register char *line,*format;
{
register short cnt,pos,letter;
register char *temp;
temp = format;
pos = 0;
printf("\33[1m");
while(*temp != ONULL)
{
if((*temp==ALPHA) || (*temp==NUMERIC))
printf(UNDERSCORE);
else
printf("%c",temp[0]);
pos++;
temp++;
}
temp = format;
while(*temp++ != ONULL)
printf(BACKUP);
pos = 0;
while(line[pos] != ONULL)
printf("%c",line[pos++]);
letter = 0;
do
{
if ((format[pos] == ONULL) || (format[pos] == ALPHA) ||
(format[pos] == NUMERIC))
{
letter = getch();
if (letter == CR)
break;
if (letter == BACKSPACE)
pos = backsp(line,format,pos);
}
switch (format[pos])
{
case ONULL:
break;
case ALPHA:
if ((letter >= ' ') && (letter <= 0x7f))
{
line[pos] = letter;
printf("%c",line[pos]);
pos++;
}
break;
case NUMERIC:
if ((letter >= '0') && (letter <= '9'))
{
line[pos] = letter;
printf("%c",line[pos]);
pos++;
}
break;
default:
letter = 0;
line[pos] = format[pos];
printf("%c",line[pos]);
pos++;
}
}
while(letter != CR);
line[pos] = 0;
printf("\33[0m");
return pos;
}
backsp(line,format,pos)
register char *line,*format;
register short pos;
{
register short cnt;
if ((format[pos-1]== ALPHA) || (format[pos-1]==NUMERIC))
{
printf(DELETE);
return pos - 1;
}
for(cnt=pos-1;cnt>=0;cnt--)
{
printf(BACKUP);
if ((format[cnt]==ALPHA) || (format[cnt] ==NUMERIC))
{
printf("_\010");
return cnt;
}
}
return 0;
}
dataentry(title,line,format)
register char *title,*line,*format;
{
printf("\33[2J"); /* clear screen */
center(title,10);
scenter(format,12);
return datain(line,format);
}
center(title,pos)
char *title;
short pos;
{
scenter(title,pos);
printf(title);
}
scenter(title,pos)
char *title;
short pos;
{
short lgn;
printf("\33[%d;",pos);
lgn = strlen(title);
lgn = lgn / 2;
lgn = 40 - lgn - 1;
printf("%dH",lgn);
}