void print_sdiff_script (struct change *script) { next0 = next1 = - files[0].prefix_lines; print_script (script, print_sdiff_hunk); print_sdiff_common_lines (files[0].valid_lines, files[1].valid_lines); }
void print_sdiff_script (struct change *script) { begin_output (); next0 = next1 = - files[0].prefix_lines; print_script (script, find_change, print_sdiff_hunk); print_sdiff_common_lines (files[0].valid_lines, files[1].valid_lines); }
static void print_sdiff_hunk (struct change *hunk) { lin first0, last0, first1, last1; register lin i, j; /* Determine range of line numbers involved in each file. */ enum changes changes = analyze_hunk (hunk, &first0, &last0, &first1, &last1); if (!changes) return; /* Print out lines up to this change. */ print_sdiff_common_lines (first0, first1); if (sdiff_merge_assist) { long int len0 = last0 - first0 + 1; long int len1 = last1 - first1 + 1; fprintf (outfile, "c%ld,%ld\n", len0, len1); } /* Print "xxx | xxx " lines. */ if (changes == CHANGED) { for (i = first0, j = first1; i <= last0 && j <= last1; i++, j++) print_1sdiff_line (&files[0].linbuf[i], '|', &files[1].linbuf[j]); changes = (i <= last0 ? OLD : 0) + (j <= last1 ? NEW : 0); next0 = first0 = i; next1 = first1 = j; } /* Print " > xxx " lines. */ if (changes & NEW) { for (j = first1; j <= last1; ++j) print_1sdiff_line (0, '>', &files[1].linbuf[j]); next1 = j; } /* Print "xxx < " lines. */ if (changes & OLD) { for (i = first0; i <= last0; ++i) print_1sdiff_line (&files[0].linbuf[i], '<', 0); next0 = i; } }