home *** CD-ROM | disk | FTP | other *** search
/ Aminet 18 / aminetcdnumber181997.iso / Aminet / misc / emu / AROSdev.lha / AROS / scripts / relpath < prev    next >
Text File  |  1996-10-22  |  1KB  |  66 lines

  1. #!/bin/sh
  2. # $0 from to
  3. # Find a relative path from "to" to "from"
  4. # ie. a path which can be used in "from" to get to "to".
  5. # Example: $0 x/y/z a/b -> ../../../a/b
  6. # Example: $0 /x/y/z a/b -> /x/y/z
  7. # Example: $0 x/../y/z a/b -> ../../a/b
  8. # Example: $0 x/y/../z a/b -> ../../a/b
  9. # Example: $0 x/./y/z a/b -> ../../../a/b
  10. # Example (in x): $0 ../y/z a/b -> ../../x/a/b
  11.  
  12. gawk 'BEGIN {
  13.     from=ARGV[1];
  14.     to=ARGV[2];
  15.  
  16.     prefix="";
  17.  
  18.     gsub (/\/$/,"",from);
  19.  
  20.     first=1;
  21.     cddir=".";
  22.  
  23.     if (substr(from,1,1)=="/")
  24.     print from
  25.     else
  26.     {
  27.     while (from!="")
  28.     {
  29.         if (!match(from,/^[^/]+/))
  30.         {
  31.         from=substr(from,2);
  32.         }
  33.         else
  34.         {
  35.         dir=substr(from,RSTART,RLENGTH);
  36.         from=substr(from,RSTART+RLENGTH+1);
  37.  
  38.         if (dir!="..")
  39.             first=0;
  40.  
  41.         if (dir != "." && dir != "..")
  42.         {
  43.             prefix=prefix "../";
  44.         }
  45.         else if (dir=="..")
  46.         {
  47.             if (first)
  48.             {
  49.             cmd="cd " cddir " ; pwd";
  50.             cmd | getline;
  51.             close (cmd);
  52.             path=$1;
  53.             gsub(/.*\//,"",path);
  54.             to=path "/" to;
  55.             cddir=cddir "/..";
  56.             }
  57.             else
  58.             prefix=substr(prefix,4);
  59.         }
  60.         }
  61.     }
  62.  
  63.     print prefix to
  64.     }
  65. }' $1 $2
  66.