Doing unix2dos conversion in Snavig as a sed call.
authorDavid Griffith <dave@661.org>
Thu, 14 Apr 2022 02:47:26 +0000 (19:47 -0700)
committerDavid Griffith <dave@661.org>
Thu, 14 Apr 2022 03:48:56 +0000 (20:48 -0700)
src/misc/snavig.pl

index 054d53e065bca024feb627e40d28697988bb3306..82f9ba5922b01284a563940da4f6112c65fe2bb2 100755 (executable)
@@ -51,6 +51,7 @@ GetOptions('usage|?' => \$options{usage},
 
 my $shorten_filenames;
 my $transform_symbols;
+my $dos_end;           # To convert \n line endings to \r\n
 
 my $type = $options{type};
 
@@ -61,8 +62,9 @@ my @sources;
 my @inputfiles;
 
 my $sed = "sed";
-#my $sed = "gsed";  # You actually need GNU sed, so if you're on MacOS...
+#my $sed = "gsed";  # GNU sed required, so if you're on macOS, BSD, etc...
 my $sedfile = "urbzig.sed";
+my $sedfilepath;
 my $sedinplace = "-i.bak";
 
 my %symbolmap = ();
@@ -79,8 +81,9 @@ print "  Preparing files for $type.\n";
 if ($type eq "tops20") {
        $shorten_filenames = 1;
        $transform_symbols = 1;
+       $dos_end = 1;
 } elsif ($type eq "dos") {
-       # nothing special
+       $dos_end = 1;
 } else {
        print "  Unknown target type $type.\n";
        usage();
@@ -93,8 +96,7 @@ for my $arg (@ARGV) {
 }
 $target = pop @sources;
 
-$sedfile = "$topdir/$target/$sedfile";
-
+$sedfilepath = "$topdir/$target/$sedfile";
 
 print "  Copying sources from: ";
 my $source_dir_count = @sources;
@@ -132,12 +134,12 @@ if ($shorten_filenames) {
        shorten_filenames($target, 6);
 }
 
+open my $mapfile, '>', $sedfilepath;
+
 if ($transform_symbols) {
-       print "  Transforming symbols...\n";
        # Scan source code and build a symbol map.
+       print "  Adding to " . $sedfile . " list of symbols to convert...\n";
        %symbolmap = build_symbolmap($target, 6, 6);
-
-       open my $mapfile, '>', $sedfile;
        for my $k (reverse(sort(keys %symbolmap))) {
                my $symbol = $symbolmap{$k}{'original'};
                my $newsym = $symbolmap{$k}{'new'};
@@ -147,9 +149,20 @@ if ($transform_symbols) {
                        print $mapfile "s/$symbol/$newsym/g\n";
                }               
        }
-       transform_symbols($target);
 }
 
+if ($dos_end) {
+       print "  Adding to " . $sedfile . " line ending conversion of LF to CR LF...\n";
+       print $mapfile 's/$/\r/' . "\n";
+}
+
+print "  Running conversion...\n";
+chdir $target;
+`$sed $sedinplace -f $sedfilepath *`;
+unlink glob("*.bak");
+chdir $topdir;
+
+
 print "  Done!\n";
 exit;
 
@@ -163,16 +176,6 @@ sub usage {
        exit;
 }
 
-# Ensure that all symbols are changed.
-sub transform_symbols {
-       my ($dir, @junk) = @_;
-
-       chdir $dir;
-       `$sed $sedinplace -f $sedfile *.c *h`;
-       unlink glob("*.bak");
-       chdir $topdir;
-}
-
 
 # Identify unique symbol names and rewrite them if they are longer than
 # $slimit characters to "A[0-9]{$slimit}".  This does not rewrite the