mirror of https://github.com/IoTcat/HOMES.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
271 lines
6.3 KiB
271 lines
6.3 KiB
/* function for detect the keyborad to wait for a keyboard event and return it with ASCII */ |
|
int input__detect_input_ASCII() |
|
{ |
|
int nKey; |
|
|
|
/* clear former cache */ |
|
fflush(stdin); |
|
|
|
/* get key value */ |
|
nKey = _getch(); |
|
|
|
return nKey; |
|
} |
|
|
|
|
|
char *input__process_space(char *chTmp) |
|
{ |
|
for(int i=0;i<strlen(chTmp);i++) |
|
{ |
|
if(chTmp[i]==32) chTmp[i]='_'; |
|
} |
|
|
|
return chTmp; |
|
} |
|
|
|
/* function to get a char type string as needed */ |
|
char *input__getchar_plus(char *p) |
|
{ |
|
|
|
char *pTmp; |
|
|
|
/* apply for a large dynamic memory for the first time storage */ |
|
if((pTmp=(char *)malloc(100*sizeof(char)))==NULL) |
|
{ |
|
printf("Application memory failure...\n"); |
|
exit(0); /* if fail, exit the input__as1_getchar_plus function with the return value of 0 */ |
|
} |
|
|
|
/* get words from keyboard to pTemp */ |
|
gets(pTmp); |
|
|
|
/* apply for a dynamic memory as needed */ |
|
if((p=(char *)malloc(strlen(pTmp)+1))==NULL) |
|
{ |
|
printf("Application memory failure...\n"); |
|
exit(0); /* if fail, exit the input__as1_getchar_plus function with the return value of 0 */ |
|
} |
|
|
|
/* copy str from pTmp to p */ |
|
strcpy(p,pTmp); |
|
|
|
/* free the Tmp memory */ |
|
free(pTmp); |
|
|
|
p=input__process_space(p); |
|
|
|
return p; |
|
} |
|
|
|
|
|
/* function for get keyboard arrow event */ |
|
int input__get_arrow() |
|
{ |
|
int nVal=0; |
|
|
|
while(1) |
|
{ |
|
nVal=input__detect_input_ASCII(); |
|
|
|
if(nVal==224) |
|
{ |
|
/* get arraw value */ |
|
int nKey=input__detect_input_ASCII(); |
|
|
|
if(nKey==75) |
|
return -1; |
|
if(nKey==77) |
|
return 1; |
|
if(nKey==72) |
|
return -1; |
|
if(nKey==80) |
|
return 1; |
|
else |
|
return 0; |
|
} |
|
|
|
if(nVal==13) |
|
return 6; |
|
if(nVal==27) |
|
return 9; |
|
} |
|
} |
|
|
|
|
|
int data__filter_input(char*parameter1) |
|
{ |
|
if(strlen(parameter1)>40 || parameter1[0]=='\0') |
|
{ |
|
return -40; |
|
} |
|
else if(strlen(parameter1)==2) |
|
{ |
|
int i=0; |
|
for(i=0;i<2;i++) |
|
{ |
|
if(isdigit(parameter1[i])) |
|
continue; |
|
else |
|
break; |
|
} |
|
if(i==2) |
|
return 2; |
|
else |
|
return -2; |
|
} |
|
else if(strlen(parameter1)==1)/*Visitor number*/ |
|
{ |
|
if(parameter1[0]==48 || parameter1[0]==49 || parameter1[0]==50) |
|
return 1; |
|
else |
|
return -1; |
|
} |
|
else if(strlen(parameter1)==3)/*Price or room number*/ |
|
{ |
|
int i=0; |
|
for(i=0;i<3;i++)/*Whether all characters are digits*/ |
|
{ |
|
if(isdigit(parameter1[i])) |
|
continue; |
|
else |
|
break; |
|
} |
|
if(i==3 && parameter1[0]!=48)/*If the first element is not 0*/ |
|
{ |
|
return 3; |
|
} |
|
else |
|
{ |
|
return -3; |
|
} |
|
|
|
} |
|
else if(strlen(parameter1)==4)/*price*/ |
|
{ |
|
int i; |
|
for(i=0;i<4;i++)/*Whether all characters are digits*/ |
|
{ |
|
if(isdigit(parameter1[i])) |
|
continue; |
|
else |
|
break; |
|
} |
|
if(i==4 && atoi(parameter1)>=1000 && atoi(parameter1)<=9999) |
|
return 4; |
|
else |
|
return -4; |
|
} |
|
else if(strlen(parameter1)==7) |
|
{ |
|
if(parameter1[3]==44 || parameter1[3]==45)/*Test * and - first */ |
|
{ |
|
int i,t; |
|
for(i=0;i<3;i++) |
|
{ |
|
if(isdigit(parameter1[i])) |
|
continue; |
|
else |
|
break; |
|
} |
|
for(t=4;t<7;t++) |
|
{ |
|
if(isdigit(parameter1[t])) |
|
continue; |
|
else |
|
break; |
|
} |
|
if(i==3 && t==7) |
|
{ |
|
if(parameter1[0]<=56 && parameter1[0]>=49 && parameter1[4]<=56 && parameter1[4]>=49) |
|
{ |
|
if((parameter1[1]==48 || parameter1[1]==49)&& (parameter1[5]==48 || parameter1[5]==49) ) |
|
{ |
|
if(parameter1[1]==48 && parameter1[5]==48) |
|
{ |
|
if((parameter1[2]<=57 && parameter1[2]>=49) && (parameter1[6]<=57 && parameter1[6]>=49)) |
|
return 7; |
|
} |
|
else if(parameter1[1]==48 && parameter1[5]==49) |
|
{ |
|
if((parameter1[2]<=57 && parameter1[2]>=49) && parameter1[6]==48) |
|
return 7; |
|
} |
|
else if(parameter1[1]==49 && parameter1[5]==48) |
|
{ |
|
if((parameter1[6]<=57 && parameter1[6]>=49) && parameter1[2]==48) |
|
return 7; |
|
} |
|
else if(parameter1[1]==49 && parameter1[5]==49) |
|
{ |
|
if(parameter1[2]==48 && parameter1[6]==48) |
|
return 7; |
|
} |
|
} |
|
} |
|
} |
|
return -7; |
|
} |
|
else |
|
return -7; |
|
} |
|
else if(strlen(parameter1)==8)/*Date*/ |
|
{ |
|
int i; |
|
for(i=0;i<8;i++)/*Whether all characters are digits*/ |
|
{ |
|
if(isdigit(parameter1[i])) |
|
continue; |
|
else |
|
break; |
|
} |
|
if(i==8 && atoi(parameter1)>=20181218 && atoi(parameter1)<=99999999) |
|
return 8; |
|
else |
|
return -8; |
|
|
|
} |
|
else if(strlen(parameter1)==11)/*telephone number*/ |
|
{ |
|
int i; |
|
for(i=0;i<11;i++)/*Whether all characters are digits*/ |
|
{ |
|
if(isdigit(parameter1[i]) || parameter1[i]==35 || parameter1[i]==42 || parameter1[i]==43) |
|
continue; |
|
else |
|
break; |
|
} |
|
if(i==11 && parameter1[0]!=48) |
|
return 11; |
|
else |
|
return -11; |
|
} |
|
else |
|
{ |
|
int i; |
|
for(i=0;i<strlen(parameter1);i++) |
|
{ |
|
if((parameter1[i]<=122 && parameter1[i]>=65) || parameter1[i]==32) |
|
continue; |
|
else |
|
break; |
|
} |
|
if(i==strlen(parameter1)) |
|
{ |
|
return 20; |
|
} |
|
else |
|
return -20; |
|
} |
|
/* char test[50]; |
|
int rv; |
|
while(1) |
|
{ |
|
system("cls"); |
|
printf("Please enter a input\n\n"); |
|
gets(test); |
|
rv=data__filter_input(test); |
|
printf("The return value of your input is %d.\n\n\n\n if it is larger than 0, then it is legal\n\n",rv); |
|
printf("If it is less than 0, then it is illegal"); |
|
system("pause"); |
|
}*/ |
|
}
|
|
|