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