home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / rcs567s.zip / diff16 / normal.c < prev    next >
C/C++ Source or Header  |  1989-02-24  |  2KB  |  72 lines

  1. /* Normal-format output routines for GNU DIFF.
  2.    Copyright (C) 1988, 1989 Free Software Foundation, Inc.
  3.  
  4. This file is part of GNU DIFF.
  5.  
  6. GNU DIFF is free software; you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation; either version 1, or (at your option)
  9. any later version.
  10.  
  11. GNU DIFF is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU General Public License
  17. along with GNU DIFF; see the file COPYING.  If not, write to
  18. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  19.  
  20.  
  21. #include "diff.h"
  22.  
  23. void print_normal_hunk ();
  24. void print_number_range ();
  25. struct change *find_change ();
  26.  
  27. /* Print the edit-script SCRIPT as a normal diff.
  28.    INF points to an array of descriptions of the two files.  */
  29.  
  30. void
  31. print_normal_script (script)
  32.      struct change *script;
  33. {
  34.   print_script (script, find_change, print_normal_hunk);
  35. }
  36.  
  37. /* Print a hunk of a normal diff.
  38.    This is a contiguous portion of a complete edit script,
  39.    describing changes in consecutive lines.  */
  40.  
  41. void
  42. print_normal_hunk (hunk)
  43.      struct change *hunk;
  44. {
  45.   int first0, last0, first1, last1, deletes, inserts;
  46.   register int i;
  47.  
  48.   /* Determine range of line numbers involved in each file.  */
  49.   analyze_hunk (hunk, &first0, &last0, &first1, &last1, &deletes, &inserts);
  50.   if (!deletes && !inserts)
  51.     return;
  52.  
  53.   /* Print out the line number header for this hunk */
  54.   print_number_range (',', &files[0], first0, last0);
  55.   fprintf (outfile, "%c", change_letter (inserts, deletes));
  56.   print_number_range (',', &files[1], first1, last1);
  57.   fprintf (outfile, "\n");
  58.  
  59.   /* Print the lines that the first file has.  */
  60.   if (deletes)
  61.     for (i = first0; i <= last0; i++)
  62.       print_1_line ("<", &files[0].linbuf[i]);
  63.  
  64.   if (inserts && deletes)
  65.     fprintf (outfile, "---\n");
  66.  
  67.   /* Print the lines that the second file has.  */
  68.   if (inserts)
  69.     for (i = first1; i <= last1; i++)
  70.       print_1_line (">", &files[1].linbuf[i]);
  71. }
  72.