1#!/usr/bin/perl 2# usage: diff -bu dxf1 dxf2 | cmp_dxf 3# compares two ascii dxf files, and compares it line by line, 4# adjusting for different %g/%f formatting, and some 5# volatile elements. 6 7use strict; 8$\ = " "; 9die "Usage: diff -bu dxf1 dxf2 | cmp_dxf\n" if @ARGV; 10 11sub isfloat { 12 my $g = shift; 13 return ($g >= 10 && $g <= 59) || 14 ($g >= 110 && $g <= 149) || 15 ($g >= 210 && $g <= 239) || 16 ($g >= 460 && $g <= 469) || 17 ($g >= 1060 && $g < 1070); 18} 19sub isstr { 20 my $g = shift; 21 return ($g >= 0 && $g < 5) || 22 ($g >= 6 && $g <= 9) || 23 ($g >= 100 && $g <= 104) || 24 ($g >= 300 && $g <= 319) || 25 ($g >= 410 && $g <= 419) || 26 ($g >= 430 && $g <= 439) || 27 ($g >= 470 && $g <= 479) || 28 ($g >= 999 && $g <= 1009); 29} 30 31# open my $f, "<:crlf", $ARGV[0] or die "Failed to read diff: $!\n"; 32my $var; 33while (<>) { 34 chomp; 35 $var = $_ if /^ \$(\w+)/; 36 next if /^ /; 37 next if /^\+999/; 38 next if /^\+LibreDWG /; 39 #next if /^@@/; 40 next if /^[\+\-]\d+\.\d+/; 41 print "$_\n"; 42 # ignore comments 43 #if ($a =~ /^999/) { <$d1>; $a = <$d1>; chomp $a } 44 #if ($b =~ /^999/) { <$d2>; $b = <$d2>; chomp $b } 45 #if ($a != $b) { print "$.: DXF $a <> $b\n"; next } 46 47 #my $v1 = <$d1>; my $v2 = <$d2>; 48 #chomp $v1; chomp $v2; 49 #if (isfloat($a)) { 50 # if (abs($v1 - $v2) > 1e-6) { print "$.: $a $v1 <> $v2\n"; next } 51 #} 52 #elsif (isstr($a)) { 53 # if ($v1 ne $v2) { print "$.: $a \"$v1\" <> \"$v2\"\n"; next } 54 #} else { 55 # if ($v1 != $v2) { print "$.: $a $v1 <> $v2\n"; next } 56 #} 57} 58