home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 June / SIMTEL_0692.cdr / msdos / database / refrecov.arc / VERIFY.INC < prev   
Encoding:
Text File  |  1986-06-02  |  5.1 KB  |  204 lines

  1. type
  2.   TestRec = record
  3.               Failed : boolean;
  4.               Reason : Message;
  5.             end;
  6.  
  7. procedure VerifyRecSize(var RecBuf : VarLenBuf;
  8.                         FieldCount : byte;
  9.                         var Verified : TestRec);
  10. var
  11.   Min, Max : integer;
  12. begin
  13.   with RecBuf, Verified do
  14.   begin
  15.     Min := 4 + FieldCount;
  16.     Max := 4 + (FieldCount * 2) + (FieldCount * 255);
  17.     if Len < Min then
  18.     begin
  19.       Failed := true;
  20.       Reason := 'The record is too small';
  21.     end
  22.     else
  23.       if Len > Max then
  24.       begin
  25.         Failed := true;
  26.         Reason := 'The record is too large';
  27.       end;
  28.   end;
  29. end; { VerifyRecSize }
  30.  
  31. procedure VerifyLocText(var RecBuf : VarLenBuf;
  32.                         var Offset : integer;
  33.                         var Verified : TestRec);
  34. var
  35.   TextPos : integer;
  36.   LocalText : Str255;
  37. begin
  38.   with RecBuf, Verified do
  39.   begin
  40.     TextPos := MemW[Seg(Buf^):Ofs(Buf^) + Offset];
  41.     Offset := Offset + 2;             { Move the offset to the next field }
  42.     if TextPos >= Len then   { The text reference over shot end of record }
  43.     begin
  44.       Failed := true;
  45.       Reason := 'The local text offset was out of range';
  46.     end
  47.     else
  48.       GetText(RecBuf, TextPos, LocalText);
  49.   end;
  50. end; { VerifyLocText }
  51.  
  52. procedure VerifyRepText(var RecBuf : VarLenBuf;
  53.                         FieldNum : byte;
  54.                         var Offset : integer;
  55.                         var Verified : TestRec);
  56. var
  57.   TextPos : integer;
  58.   RepText : Str255;
  59. begin
  60.   with RecBuf, Verified do
  61.   begin
  62.     TextPos := MemW[Seg(Buf^):Ofs(Buf^) + Offset];
  63.     Offset := Offset + 2;    { Move the offset to the next field }
  64.     GetRepText(FieldNum, TextPos, RepText);
  65.     if RepText = '' then
  66.     with Verified do
  67.     begin
  68.       failed := true;
  69.       Reason := 'The text was not returned from the text pool';
  70.     end
  71.   end;
  72. end; { VerifyRepText }
  73.  
  74. procedure VerifyField(var RecBuf : VarLenBuf;
  75.                       FieldCount : byte;
  76.                       var Offset : integer;
  77.                       var Verified : TestRec);
  78. var
  79.   Form : byte;
  80.   FieldName : Str255;
  81.  
  82. begin
  83.   with RecBuf, FieldDescriptors[FieldCount]^, Verified do
  84.   begin
  85.     Failed := false;
  86.     GetText(FieldNameText, NameOffset, FieldName);
  87.     case DataType of
  88.       UnTyped   : ;  { Add change of offset }
  89.       LocalText : VerifyLocText(RecBuf, Offset, Verified);
  90.       RepText   : VerifyRepText(RecBuf, FieldCount, Offset, Verified);
  91.       Date, IntVal : Offset := Offset + 2;
  92.       Numeric   : Offset := Offset + 8;
  93.     end;
  94.   end;
  95. end; { VerifyField }
  96.  
  97. procedure VerifyDataRecord(var RecBuf : VarLenBuf;
  98.                            var Verified : TestRec);
  99. var
  100.   FieldCount : byte;
  101.   Offset : integer;
  102. begin
  103.   GetFieldCount(RecBuf, FieldCount);
  104.   VerifyRecSize(RecBuf, FieldCount, Verified);
  105.   Offset := 4;
  106.   for FieldCount := 0 to (FieldCount - 1) do
  107.     VerifyField(RecBuf, FieldCount, Offset, Verified);
  108. end; { VerifyDataRecord }
  109.  
  110. procedure ErrorPrompt(RecordNum : integer; var Abort : boolean);
  111. var
  112.   ch : char;
  113. begin
  114.   Writeln(^G, 'Error occured in record # ', RecordNum);
  115.   Write('Do you want to continue (Y/N)? ');
  116.   repeat
  117.     Read(KBD, ch);
  118.     ch := UpCase(ch);
  119.   until ch in ['Y', 'N'];
  120.   Writeln(ch);
  121.   Writeln;
  122.   Abort := ch = 'N';
  123. end; { ErrorPrompt }
  124.  
  125.  
  126. procedure DisplayFieldNames(FieldCount : integer;
  127.                             var FieldNameText : VarLenBuf);
  128. var
  129.   NmFields,
  130.   StartText : integer;
  131.   FieldName : Str255;
  132. begin
  133.   ClrScr;
  134.   for NmFields := 0 to FieldCount - 1 do
  135.     with FieldDescriptors[NmFields]^ do
  136.     begin
  137.       GetText(FieldNameText, NameOffset, FieldName);
  138.       Write('Field number ',NmFields,': ', FieldName);
  139.       Writeln(' is of type ',DataFields[DataType]);
  140.       if WhereY > 22 then
  141.       begin
  142.         Readln;
  143.         ClrScr;
  144.       end;
  145.     end;
  146.     Readln;
  147. end; { DisplayFieldNames }
  148.  
  149. procedure DispHexNum(Num : byte);
  150. const
  151.   HexArray : array[0..$F] of char = '0123456789ABCDEF';
  152. begin
  153.   Write(HexArray[Num shr 4], HexArray[Num mod $10]);
  154. end; { DispHexNum }
  155.  
  156. procedure DisplayRec(var RecBuf : VarLenBuf);
  157. var
  158.   i : integer;
  159.   CurByte : byte;
  160. begin
  161.   with RecBuf do
  162.     for i := 0 to Len - 1 do
  163.     begin
  164.       if (i mod $10 = 0) and (i > 0) then
  165.         Writeln;
  166.       if (i mod $40 = 0) and (i > 0) then
  167.         Writeln;
  168.       CurByte := Mem[Seg(Buf^):Ofs(Buf^) + i];
  169.       DispHexNum(CurByte);
  170.       Write(' ');
  171.     end;
  172. end; { DisplayRec }
  173.  
  174. type
  175.   WindowDesc = record
  176.                  X1, Y1, X2, Y2 : byte;
  177.                end;
  178. const
  179.   TopWin : WindowDesc =
  180.              (X1 : 1; Y1 : 1; X2 : 80; Y2 : 12);
  181.   BotWin : WindowDesc =
  182.              (X1 : 1; Y1 : 14; X2 : 80; Y2 : 25);
  183.   StandardWindow : WindowDesc =
  184.              (X1 : 1; Y1 : 1; X2 : 80; Y2 : 25);
  185. var
  186.   CurWindow,
  187.   LastWindow : WindowDesc;
  188.  
  189. procedure SetWindow(var NewWindow : WindowDesc);
  190. begin
  191.   LastWindow := CurWindow;
  192.   CurWindow := NewWindow;
  193. end; { SetWindow }
  194.  
  195. procedure DrawLine;
  196. var
  197.   i : byte;
  198. begin
  199.   SetWindow(StandardWindow);
  200.   GotoXY(1, 13);
  201.   for i := 1 to 80 do
  202.     Write('═');
  203. end; { DrawLine }
  204.