home *** CD-ROM | disk | FTP | other *** search
- /* Turbo ScrEdit Validate Procedures */
-
- void S_Find_Min_and_Max()
- {
- int C1, C2, s_len;
-
- S_CompMin[0]=0;
- S_CompMax[0]=0;
- C1 = 0;
- C2 = 0;
-
- s_len=strlen(S_CurStr);
-
- S_Min_Max_Loaded = 0;
- S_EndofLine = 0;
-
- while (!S_Min_Max_Loaded)
- {
- S_Sub++;
- if (S_Sub<s_len)
- {
- if (S_CurStr[S_Sub]==94)
- {
- S_Sub++;
- S_CompMax[C2++]=S_CurStr[S_Sub];
- }
- else
- {
- if (S_CurStr[S_Sub]==39)
- {
- if (S_CompMax[0]==0) strcpy(S_CompMax,S_CompMin);
- S_Min_Max_Loaded = 1;
- }
- else
- {
- if (S_CompMax[0]==0)
- {
- S_CompMin[C1++]=S_CurStr[S_Sub];
- S_CompMin[C1]=0;
- }
- else
- {
- S_CompMax[C2++]=S_CurStr[S_Sub];
- S_CompMax[C2]=0;
- }
- }
- }
- if ((S_CompMin[0]==92)||(S_CompMin[0]==61)) S_Min_Max_Loaded = 1;
- }
- else
- {
- S_Min_Max_Loaded=1;
- S_EndofLine =1;
- }
- }
- if (S_UpCase)
- {
- strcpy(S_CompMin,strupr(S_CompMin));
- strcpy(S_CompMax,strupr(S_CompMax));
- }
- }
-
-
-
-
- void S_ReadNextRangeRec()
- {
- long rec;
-
- S_CurrLine = S_NextLine;
-
- if (S_VRec != S_NextRec)
- {
- rec = (S_NextRec)*sizeof(*s_indx);
- fseek(s_file,rec,0);
- fread(s_indx,sizeof(*s_indx),1,s_file);
- S_VRec = S_NextRec;
- }
-
- S_NextRec = s_indx->D.s_rangerec [S_CurrLine];
- S_NextLine = s_indx->D.s_rangeline[S_CurrLine]-1;
- movmem(&s_indx->D.s_rangelist[S_CurrLine][1],&S_CurStr,
- s_indx->D.s_rangelist[S_CurrLine][0]);
- S_CurStr[s_indx->D.s_rangelist[S_CurrLine][0]]=0;
- S_Sub = (S_InsideIf) ? 4:1;
- S_CompMin[0]=0;
- S_CompMax[0]=0;
- }
-
-
-
-
- void S_ProcessDate()
- {
- char
- DateMask[40],
- TestMonth[3],
- TestDay[3],
- TestYear[5],
- CheckMonth,
- CheckDay,
- CheckYear;
- int
- x,y,z,
- WorkMonth,
- WorkDay,
- WorkYear,
- WorkNum;
-
- CheckMonth = 0;
- CheckDay = 0;
- CheckYear = 0;
- WorkMonth = 0;
- WorkDay = 0;
- WorkYear = 0;
- S_ErrorMsg[0] = 0;
- x = (S_InsideIf) ? 8:5;
- z = x;
- y = 0;
-
- while (S_CurStr[x]!=0)
- {
- switch (S_CurStr[x])
- {
- case 'D':
- {
- if (!isdigit(S_EditStr[y]))
- {
- strcpy(S_ErrorMsg,"Day contains a invalid character for <");
- strcat(S_ErrorMsg,(char *)&S_CurStr[z]);
- strcat(S_ErrorMsg,"> Format");
- goto Exit_Point;
- }
- CheckDay++;
- TestDay[CheckDay-1]=S_EditStr[y];
- TestDay[CheckDay] =0;
- break;
- }
- case 'M':
- {
- if (!isdigit(S_EditStr[y]))
- {
- strcpy(S_ErrorMsg,"Month contains a invalid character for <");
- strcat(S_ErrorMsg,(char *)&S_CurStr[z]);
- strcat(S_ErrorMsg,"> Format");
- goto Exit_Point;
- }
- CheckMonth++;
- TestMonth[CheckMonth-1]=S_EditStr[y];
- TestMonth[CheckMonth] =0;
- break;
- }
- case 'Y':
- {
- if (!isdigit(S_EditStr[y]))
- {
- strcpy(S_ErrorMsg,"Year contains a invalid character for <");
- strcat(S_ErrorMsg,(char *)&S_CurStr[z]);
- strcat(S_ErrorMsg,"> Format");
- goto Exit_Point;
- }
- CheckYear++;
- TestYear[CheckYear-1]=S_EditStr[y];
- TestYear[CheckYear] =0;
- break;
- }
- default :
- {
- if (S_EditStr[y]!=S_CurStr[x])
- {
- strcpy(S_ErrorMsg,"Please enter date in <");
- strcat(S_ErrorMsg,(char *)&S_CurStr[z]);
- strcat(S_ErrorMsg,"> Format");
- goto Exit_Point;
- }
- }
- }
- y++;
- x++;
- }
-
- if (S_EditStr[y]!=0)
- {
- strcpy(S_ErrorMsg,"You have keyed to many charactes for <");
- strcat(S_ErrorMsg,(char *)&S_CurStr[z]);
- strcat(S_ErrorMsg,"> Format");
- goto Exit_Point;
- }
-
- WorkDay = (CheckDay >0) ? atoi(TestDay) :0;
- WorkMonth = (CheckMonth>0) ? atoi(TestMonth):0;
- WorkYear = (CheckYear >0) ? atoi(TestYear) :0;
- WorkNum = (WorkYear/4);
- WorkNum *= 4;
- WorkNum -= WorkYear;
-
- if ((CheckMonth>0)&&((WorkMonth < 1)||(WorkMonth>12)))
- {
- strcpy(S_ErrorMsg,"You have keyed a invalid Month. Use 1 thru 12 only");
- goto Exit_Point;
- }
-
- if (CheckDay>0)
- {
- if ((WorkMonth==4)||(WorkMonth==6)||(WorkMonth==9)||(WorkMonth==11))
- {
- if (WorkDay>30)
- {
- strcpy(S_ErrorMsg,"This month can have only 30 days or less");
- goto Exit_Point;
- }
- }
- else
- {
- if ((WorkMonth!=2)&&(WorkDay>31))
- {
- strcpy(S_ErrorMsg,"This month can have only 31 days or less");
- goto Exit_Point;
- }
- else
- {
- if (WorkMonth == 2)
- {
- if (WorkNum==0)
- {
- if (WorkDay>29)
- {
- strcpy(S_ErrorMsg,"February can have only 29 days or less");
- goto Exit_Point;
- }
- }
- else
- {
- if (WorkDay>28)
- {
- strcpy(S_ErrorMsg,"February can have only 28 days or less");
- goto Exit_Point;
- }
- }
- }
- }
- }
- }
-
- if ((CheckYear>0)&&(WorkYear<1))
- {
- strcpy(S_ErrorMsg,"Year must have a value greater than zero.");
- goto Exit_Point;
- }
-
- Exit_Point:
-
- if (S_ErrorMsg[0]!=0)
- {
- S_ScreenValid = 0;
- S_Validate_Finished = 1;
- S_Skip = 1;
- }
- }
-
-
-
- void S_ProcessIn()
- {
- int x,y,z;
-
- S_GetFieldType(s_field->C.s_type[S_Point]);
- S_Decimal = S_FType;
-
- S_Matched = 0;
- S_CompMin[0] = 0;
-
- if (!S_Matched)
- {
- while ((!S_Matched)&&(S_CompMin[0]!=92)&&(S_CompMin[0]!='='))
- {
- S_Find_Min_and_Max();
- if ((S_CompMin[0]!=92)&&(S_CompMin[0]!='=')&&(!S_EndofLine))
- {
- if (S_Decimal < 8)
- {
- S_Numeric = atof(S_EditStr);
- S_CompMin_Numeric = atof(S_CompMin);
- S_CompMax_Numeric = atof(S_CompMax);
- if ((S_Numeric>=S_CompMin_Numeric)&&(S_Numeric<=S_CompMax_Numeric))
- S_Matched = 1;
- }
- else
- {
- if ((strcmp(S_EditStr,S_CompMin)>=0) &&
- (strcmp(S_EditStr,S_CompMax)<=0))
- S_Matched = 1;
- }
- }
- if ((S_EndofLine) && ((S_CompMin[0]==0) && (S_CompMax[0]==0)))
- {
- S_ReadNextRangeRec();
- while ((S_CurStr[S_Sub]!=39)&&
- (S_CurStr[S_Sub]!=92)&&
- (S_CurStr[S_Sub++]!='='));
- if ((S_CurStr[S_Sub]==92)||(S_CurStr[S_Sub]=='='))
- {
- S_CompMin[0]=S_CurStr[S_Sub];
- S_CompMin[1]=0;
- }
- }
- }
- }
-
- if (S_Matched)
- {
- while ((S_CurStr[S_Sub]!=92)&&(S_CurStr[S_Sub]!='='))
- {
- S_Sub=0;
- while ((S_CurStr[S_Sub]!=0)&&
- (S_CurStr[S_Sub]!=92)&&
- (S_CurStr[S_Sub]!='=')) S_Sub++;
- if ((S_CurStr[S_Sub]!=92)&&(S_CurStr[S_Sub]!='='))
- {
- S_ReadNextRangeRec();
- S_Sub=0;
- }
- }
- if (S_CurStr[S_Sub]=='=')
- {
- S_ScreenValid = 0;
- S_Validate_Finished = 1;
- x = strlen(S_CurStr);
- s_copy(S_CurStr,S_ErrorMsg,S_Sub+1,x-S_Sub);
- }
- else
- {
- S_OpCode[0]=0;
- S_Matched = 0;
- }
- }
- else
- {
- if (S_CurStr[S_Sub]==92)
- {
- S_ScreenValid = 0;
- S_Validate_Finished = 1;
- x = strlen(S_CurStr);
- s_copy(S_CurStr,S_ErrorMsg,S_Sub+1,x-S_Sub);
- }
- else
- S_OpCode[0]=0;
- }
- }
-
-
-
- void S_Processif()
- {
- int c,x,y,z;
- S_Matched = 0;
- S_CompMin[0]=0;
- S_CompMax[0]=0;
- S_EndofLine =0;
-
- while (strcmp(S_CompMin,"THEN")!=0)
- {
- if (S_EndofLine)
- {
- S_ReadNextRangeRec();
- S_Sub=0;
- while ((S_CurStr[S_Sub]!=0)&&(S_CurStr[S_Sub]!=39)) S_Sub++;
- }
-
- if (S_CurStr[3]=='N')
- {
- x = 7;
- S_OpCode1[0]='N';
- }
- else
- {
- x = 3;
- S_OpCode1[0]=0;
- }
-
- y=0;
- while (x>0)
- {
- if ((S_CurStr[x]!=39)&&(S_CurStr[x]!=32)) S_CompField[y++]=S_CurStr[x++];
- else x=0;
- S_CompField[y]=0;
- }
-
- strupr(S_CompField);
-
- S_FieldNum = 0;
- x = 1;
- while (x)
- {
- if (S_FieldNum == s_curr.s_count)
- {
- S_FieldNum = -1;
- x = 0;
- }
- else
- if (strcmp(S_CompField,strupr(s_field->C.s_fieldname[S_FieldNum]))==0)
- x=0;
- else
- S_FieldNum++;
- }
-
- S_CompMin[0]=0;
- S_CompMax[0]=0;
-
- if (S_FieldNum > -1) S_Get_Field_Value(S_FieldNum);
- else strcpy(S_CompMin,"THEN");
-
- if (S_UpCase) strupr(S_EditStr);
-
- S_GetFieldType(s_field->C.s_type[S_FieldNum]);
- S_Decimal = S_FType;
-
- S_EndofLine = 0;
- while ((strcmp(S_CompMin,"AND")!=0)&&
- (strcmp(S_CompMin,"OR")!=0)&&
- (strcmp(S_CompMin,"THEN")!=0))
- {
- if (S_EndofLine)
- {
- S_ReadNextRangeRec();
- S_Sub=0;
- while ((S_CurStr[S_Sub]!=0)&&(S_CurStr[S_Sub]!=39)) S_Sub++;
- }
- S_Find_Min_and_Max();
- if ((strcmp(S_CompMin,"AND")!=0)&&
- (strcmp(S_CompMin,"OR")!=0) &&
- (strcmp(S_CompMin,"THEN")!=0))
- {
- if (S_Decimal<7)
- {
- S_Numeric = atof(S_EditStr);
- S_CompMin_Numeric = atof(S_CompMin);
- S_CompMax_Numeric = atof(S_CompMax);
- if (S_OpCode1[0]=='N')
- {
- if ((S_Numeric<S_CompMin_Numeric)||(S_Numeric>S_CompMax_Numeric))
- S_Matched = 1;
- }
- else
- {
- if ((S_Numeric>=S_CompMin_Numeric)&&(S_Numeric<=S_CompMax_Numeric))
- S_Matched = 1;
- }
- }
- else
- {
- if (S_OpCode1[0]=='N')
- {
- if ((strcmp(S_EditStr,S_CompMin)<0)||(strcmp(S_EditStr,S_CompMax)>0))
- S_Matched = 1;
- }
- else
- if ((strcmp(S_EditStr,S_CompMin)>=0)&&
- (strcmp(S_EditStr,S_CompMax)<=0))
- S_Matched = 1;
- }
- }
- }
- if (strcmp(S_CompMin,"AND")==0)
- {
- if (!S_Matched)
- {
- S_CompMin[0]=0;
- while ((strcmp(S_CompMin,"OR")!=0)&&(strcmp(S_CompMin,"THEN")!=0))
- {
- S_ReadNextRangeRec();
- S_Sub=0;
- while ((S_CurStr[S_Sub]!=0)&&(S_CurStr[S_Sub]!=39)) S_Sub++;
- S_CompMin[0]=0;
- while ((strcmp(S_CompMin,"AND")!=0)
- &&(strcmp(S_CompMin,"OR")!=0)
- &&(strcmp(S_CompMin,"THEN")!=0))
- S_Find_Min_and_Max();
- }
- if (strcmp(S_CompMin,"OR")==0) S_CompMin[0]=0;
- }
- else
- {
- S_CompMin[0] = 0;
- S_Matched = 0;
- }
- }
- else
- {
- if (strcmp(S_CompMin,"OR")==0)
- {
- if (S_Matched)
- {
- while (strcmp(S_CompMin,"THEN")!=0)
- {
- S_ReadNextRangeRec();
- S_Sub=0;
- while ((S_CurStr[S_Sub]!=0)&&(S_CurStr[S_Sub]!=39)) S_Sub++;
- while ((strcmp(S_CompMin,"AND")!=0)
- &&(strcmp(S_CompMin,"OR")!=0)
- &&(strcmp(S_CompMin,"THEN")!=0))
- S_Find_Min_and_Max();
- }
- }
- else
- S_CompMin[0]=0;
- }
- }
- }
-
-
- strcpy(S_EditStr,S_EditStrHold);
-
- if (S_Matched)
- {
- S_Matched = 0;
- S_InsideIf = 1;
- while ((S_ScreenValid)&&(S_CurStr[0]!='E')&&(!S_Skip))
- {
- S_ReadNextRangeRec();
- if (S_CurStr[0]!='E')
- {
- switch (S_CurStr[3])
- {
- case 'D' : {S_ProcessDate();break;}
- case 'I' :
- {
- S_Sub=0;
- while ((S_CurStr[S_Sub]!=0)&& (S_CurStr[S_Sub]!=39)) S_Sub++;
- S_ProcessIn();
- break;
- }
- case 'S' : {S_Skip = 1;break;}
- case 'E' :
- {
- S_ScreenValid = 0;
- strcpy(S_ErrorMsg,&S_CurStr[9]);
- }
- }
- }
- }
- S_InsideIf = 0;
- }
- while (strcmp(S_CurStr,"ENDIF")!=0) S_ReadNextRangeRec();
- }
-
-
-
-
- void S_Validate_Location()
- {
- int x,y,z;
- S_UpCase= 0;
- S_InsideIf= 0;
- S_Matched= 0;
- S_Skip= 0;
- S_OpCode[0]= 0;
- S_CurrLine= 9999;
-
- while ((S_NextRec)&&(!S_Skip))
- {
- S_ReadNextRangeRec();
- if (S_CurStr[0] == 'I') /* check for IN or if */
- {
- S_Sub = s_pos(S_CurStr,"'");
- if (S_CurStr[1] == 'F') S_Processif();
- else S_ProcessIn();
- if (S_Validate_Finished) S_NextRec = 0;
- }
- if (S_CurStr[0] == 'U') /* check for Upshift key word */
- {
- if (S_CurStr[10] == 'N') /* if ON */
- {
- S_UpCase = 1;
- strupr(S_EditStr);
- }
- else
- {
- S_UpCase = 0; /* if Off */
- strcpy(S_EditStr,S_NewStr);
- }
- strcpy(S_EditStrHold,S_EditStr);
- }
- if ((S_CurStr[0] == 'R')||((S_CurStr[0] == 'S')&&(S_CurStr[1] == 'K')))
- {
- x = strlen(S_EditStr);
- while ((x>0)&&(S_EditStr[x-1]<33))
- {
- S_EditStr[x-1]=0;
- x++;
- }
- if (S_EditStr[0]==0)
- {
- if (S_CurStr[0]=='S') S_NextRec = 0;
- if (S_CurStr[0]=='R')
- {
- S_Sub = 0;
- while ((S_CurStr[S_Sub]!=0)&&(S_CurStr[S_Sub]!=39)) S_Sub++;
- if (S_CurStr[S_Sub]==39)
- strcpy(S_ErrorMsg,(char *)&S_CurStr[S_Sub]);
- else
- strcpy(S_ErrorMsg,"** This field is required **");
- S_ScreenValid = 0;
- S_NextRec = 0;
- }
- }
- }
- if (S_CurStr[0]=='D') S_ProcessDate();
- }
- }
-
-
-
-
- void S_ValidateScreen()
- {
- int C;
- S_PrevField = S_Point;
- if (s_curr.s_rangerecno==0)
- {
- S_Validate_Finished = 1;
- S_ScreenValid = 1;
- }
- else
- {
- S_Point = -1;
- S_UpCase = 0;
- S_Validate_Finished = 0;
- if (S_ValidateField > -1) S_Point = S_ValidateField;
- }
- while (!S_Validate_Finished)
- {
- if (S_Point < s_curr.s_count)
- {
- S_NextRec = s_field->C.s_rangenextrec [S_Point];
- S_NextLine = s_field->C.s_rangenextline[S_Point]-1;
- if (S_NextRec)
- {
- S_ScreenValid = 1;
- S_Get_Field_Value(S_Point);
- strcpy(S_EditStrHold,S_EditStr);
- strcpy(S_NewStr,S_EditStr);
- S_Validate_Location();
- if ((!S_ScreenValid)||(S_ValidateField > -1))
- {
- S_Validate_Finished = 1;
- S_Point--;
- }
- }
- S_Point++;
- }
- else
- {
- S_Validate_Finished = 1;
- }
- }
- if (S_ScreenValid)
- S_Point = S_PrevField;
- else
- if (S_IsDupe(S_Point)) S_SetDupeFields = 1;
- S_ValidateField = -1;
- }
-
-
-