#!/cygdrive/d/Perl/bin/perl # Version 3: includes Usage help with no arguments, and warning if bad filename use Cwd; use strict; my $dir = getcwd; sub getAbsfile{ my($file) = @_; my $abs=""; $file =~ s/\/\//\//g; if ( -T $file){ $abs=$dir."/".$file; $abs =~ s/[^ \/]+\/\.\.//g; $abs =~ s/\/\//\//g; } else { printf("Warning: file error - no such file for filename=$file\n"); return 0; } if (! -T $abs){ $abs=$file; } return $abs; } sub parseFile{ my($file) = @_; my $line=""; my @reflist=(); my $tfile=".xotabs2relyz99"; my $startdir = $file; $startdir =~ s/[^ \/]+$//g; if(!open(IN, $file)){ printf("\nERROR couldn't open file $file\n\n"); return 0; } if(!open(OUT, ">$tfile")){ printf("\nERROR couldn't open temp file $tfile\n\n"); exit 1; } while($line=){ $line =~ s/< *([Aa] +|[Ii][Mm][Gg])/<$1 /g; my @reflist = split(//,$line); if ($#reflist>1){ foreach my $tline (@reflist){ $tline =~ s/\n//g; if (length($tline)>0){ print OUT "$tline\n"; } } } else { $line =~ s///g; print OUT $line; } } close(IN); close(OUT); if(!open(OUT, ">$file")){ printf("\nERROR couldn't open file $file\n\n"); return 0; } if(!open(IN, $tfile)){ printf("\nERROR couldn't open temp file $tfile\n\n"); exit 1; } while($line=){ if ($line =~ /< *([Aa] +|[Ii][Mm][Gg])/){ $line=convert($startdir, $line); } print OUT $line; } close(IN); close(OUT); } sub convert{ my($pattern, $line)=@_; my $file=""; my $test=0; my $fix=""; while($test==0 && $pattern){ # the 'i' after the pattern match indicates CASE-INSENSITIVITY if ($line =~ /$pattern/i){ $test=1; } else { $pattern =~ s/[^ \/]+\/$//gi; $fix=$fix."../"; } } if ($test==1){ # the pattern match must be case-insensitive relatively ($line =~ /[^\"]*\"([^ ]*)($pattern)([^ ]+)\"/i); $file = $fix.$3; $line =~ s/\"[^\"]*($pattern)[^\"]*\"/\"$file\"/gi; } return $line; } my $args = $#ARGV; my $var=0; my $temp=""; my $good=0; if ($args !=-1){ while ($var <= $args ){ $temp = getAbsfile($ARGV[$var]); if ($temp) { $good=parseFile($temp); } if ($good){ printf("done $ARGV[$var]\n") } $var++; } printf("Complete!\n"); } else{ printf("Usage: perl abs2rel filename [filename2 filename3 ....]"); }