home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue47 / Differ / differ.dpr < prev    next >
Encoding:
Text File  |  1999-06-06  |  3.6 KB  |  121 lines

  1. program differ;
  2. {$APPTYPE CONSOLE}
  3. uses
  4.   SysUtils,
  5.   CGIAPI,
  6.   Classes,
  7.   FileCtrl,
  8.   DiffEng in '..\..\Tools\DiffEng.pas';
  9.  
  10. var
  11.   FileName: string;
  12.   TempFile: string;
  13.   FileType: string;
  14.   FileName1: string;
  15.   TempFile1: string;
  16.   FileType1: string;
  17.   ReturnUrl: string;
  18.   A: array[0..100] of char;
  19.   DifEng: TDifference;
  20.   SSource, SComp,
  21.   SDest: TStringList;
  22.   i: integer;
  23.  
  24.   procedure Error(ErrorStr: string);
  25.   begin
  26.     writeln('content-type: text/html'#13#10#13#10);
  27.     writeln(ErrorStr);
  28.   end;
  29.  
  30. begin
  31.   try
  32.     with CGI do
  33.     begin
  34.       // get required variables for first file
  35.       FileName := ExtractFileName(FormItems.Values['FILENAME']);
  36.       TempFile := FormItems.Values['TEMPFILE'];
  37.       FileType := FormItems.Values['CONTENT-TYPE'];
  38.       // get required variables for second file
  39.       FileName1 := ExtractFileName(FormItems.Values['FILENAME1']);
  40.       TempFile1 := FormItems.Values['TEMPFILE1'];
  41.       FileType1 := FormItems.Values['CONTENT-TYPE1'];
  42.       ReturnUrl := FormItems.Values['RETURN_URL'];
  43.     end;
  44.  
  45.     // validate user entries
  46.     if (FileName = '') or (TempFile = '') then
  47.     begin
  48.       Error('');
  49.       raise EAbort.Create('File 1 not submitted correctly');
  50.     end;
  51.  
  52.     if (FileName1 = '') or (TempFile1 = '') then
  53.     begin
  54.       Error('');
  55.       raise EAbort.Create('File 2 not submitted correctly');
  56.     end;
  57.  
  58.     if (Pos('text', FileType) = 0) or (Pos('text', FileType1) = 0) then
  59.     begin
  60.       Error('');
  61.       raise EAbort.Create('Files must be of type text');
  62.     end;
  63.  
  64.     // run difference engine on the 2 temp files
  65.     try
  66.       SSource := TStringList.Create;
  67.       SComp := TStringList.Create;
  68.       SDest := TStringList.Create;
  69.       try
  70.         SSource.LoadFromFile(TempFile);
  71.         SComp.LoadFromFile(TempFile1);
  72.         DifEng := TDifference.Create(SSource, SComp, SDest);
  73.         try
  74.           DifEng.Convert;
  75.  
  76.           // create and display response page
  77.           writeln('content-type: text/html'#13#10#13#10);
  78.           writeln('<HTML>');
  79.           writeln('<HEAD><TITLE>>Text File Difference Results</TITLE>');
  80.           writeln('<META NAME="GENERATOR" CONTENT="Generated by HomeGrown Text File Difference Engine">');
  81.           writeln('</HEAD>');
  82.           writeln('<BODY BGCOLOR="#FFFFFF">');
  83.           writeln('<BODY>');
  84.           writeln('<H1>Text File Difference Results</H1>');
  85.           writeln('<HR SIZE=2>');
  86.           writeln('Difference results for <B> '+ExtractFileName(Filename)+
  87.             '</B> compared to <B>'+ExtractFileName(FileName1)+'</B>.');
  88.           writeln('<P><B>Legend:</B> Same in both revisions --- <FONT COLOR=GREEN><B>'+
  89.             '<U>Deleted from base revision</U></B></FONT>'+
  90.               ' --- <FONT COLOR=BROWN><U><I>Added to base revision</I></U></FONT>');
  91.           writeln('<HR SIZE=2>');
  92.           for i := 0 to SDest.Count-1 do writeln(SDest[i]);
  93.           writeln('<HR SIZE=2>');
  94.           writeln('<A HREF="'+ReturnUrl+'">Return to refering page</A>');
  95.           writeln('<HR SIZE=2>');
  96.           writeln('<B>Generated by:</B> HomeGrown''s Text File Difference Engine v1.0');
  97.           writeln('</BODY></HTML>');
  98.       
  99.         finally
  100.           DifEng.Free;
  101.         end;
  102.       finally
  103.         SSource.Free;
  104.         SComp.Free;
  105.         SDest.Free;
  106.       end;
  107.     except
  108.       on E: Exception do
  109.       begin
  110.         Error('');
  111.         writeln(E.Message);
  112.       end;
  113.     end;
  114.     
  115.   finally
  116.     // always delete TempFiles
  117.     DeleteFile(StrPCopy(A, TempFile));
  118.     DeleteFile(StrPCopy(A, TempFile1));
  119.   end;
  120. end.
  121.