Showing the changes to sys/src/cmd/diff/diffio.c (1 of 9 files). Show all
Unified · Split
| @@ -302,6 +302,7 @@ change(int a, int b, int c, int d) · 301 unmodified lines | ||
| 302 | 302 | range(a, b, " "); |
| 303 | 303 | break; |
| 304 | 304 | case 'c': |
| 305 | + case 'a': | |
| 305 | 306 | if(nchanges%1024 == 0) |
| 306 | 307 | changes = erealloc(changes, (nchanges+1024)*sizeof(changes[0])); |
| 307 | 308 | ch = &changes[nchanges++]; |
| @@ -348,24 +349,39 @@ flushchanges(void) · 40 unmodified lines | ||
| 348 | 349 | |
| 349 | 350 | for(i=0; i<nchanges; ){ |
| 350 | 351 | j = changeset(i); |
| 351 | − a = changes[i].a; | |
| 352 | − b = changes[j-1].b; | |
| 353 | − c = changes[i].c; | |
| 354 | − d = changes[j-1].d; | |
| 352 | + a = changes[i].a-Lines; | |
| 353 | + b = changes[j-1].b+Lines; | |
| 354 | + c = changes[i].c-Lines; | |
| 355 | + d = changes[j-1].d+Lines; | |
| 356 | + if(a < 1) | |
| 357 | + a = 1; | |
| 358 | + if(c < 1) | |
| 359 | + c = 1; | |
| 360 | + if(b > len[0]) | |
| 361 | + b = len[0]; | |
| 362 | + if(d > len[1]) | |
| 363 | + d = len[1]; | |
| 364 | + if(mode == 'a'){ | |
| 365 | + a = 1; | |
| 366 | + b = len[0]; | |
| 367 | + c = 1; | |
| 368 | + d = len[1]; | |
| 369 | + j = nchanges; | |
| 370 | + } | |
| 355 | 371 | Bprint(&stdout, "%s:", file1); |
| 356 | 372 | range(a, b, ","); |
| 357 | 373 | Bprint(&stdout, " - "); |
| 358 | 374 | Bprint(&stdout, "%s:", file2); |
| 359 | 375 | range(c, d, ","); |
| 360 | 376 | Bputc(&stdout, '\n'); |
| 361 | − at = a-Lines; | |
| 377 | + at = a; | |
| 362 | 378 | for(; i<j; i++){ |
| 363 | 379 | fetch(ixold, at, changes[i].a-1, input[0], " "); |
| 364 | 380 | fetch(ixold, changes[i].a, changes[i].b, input[0], "< "); |
| 365 | 381 | fetch(ixnew, changes[i].c, changes[i].d, input[1], "> "); |
| 366 | 382 | at = changes[i].b+1; |
| 367 | 383 | } |
| 368 | − fetch(ixold, at, b+Lines, input[0], " "); | |
| 384 | + fetch(ixold, at, b, input[0], " "); | |
| 369 | 385 | } |
| 370 | 386 | nchanges = 0; |
| 371 | 387 | } |