docs: protected static File createRelativePath(File absolute) throws Exception {
      File userDir = new File(System.getProperty("user.dir"));
      String userPath = userDir.getAbsolutePath() + File.separator;
      String targetPath = (new File(absolute.getParent())).getPath() 
        + File.separator;
      String fileName = absolute.getName();
      StringBuffer relativePath = new StringBuffer();
      //    relativePath.append("."+File.separator);
      //    System.err.println("User dir "+userPath);
      //    System.err.println("Target path "+targetPath);
      
      // file is in user dir (or subdir)
      int subdir = targetPath.indexOf(userPath);
      if (subdir == 0) {
        if (userPath.length() == targetPath.length()) {
  	relativePath.append(fileName);
        } else {
  	int ll = userPath.length();
  	relativePath.append(targetPath.substring(ll));
  	relativePath.append(fileName);
        }
      } else {
        int sepCount = 0;
        String temp = new String(userPath);
        while (temp.indexOf(File.separator) != -1) {
  	int ind = temp.indexOf(File.separator);
  	sepCount++;
  	temp = temp.substring(ind+1, temp.length());
        }
        
        String targetTemp = new String(targetPath);
        String userTemp = new String(userPath);
        int tcount = 0;
        while (targetTemp.indexOf(File.separator) != -1) {
  	int ind = targetTemp.indexOf(File.separator);
  	int ind2 = userTemp.indexOf(File.separator);
  	String tpart = targetTemp.substring(0,ind+1);
  	String upart = userTemp.substring(0,ind2+1);
  	if (tpart.compareTo(upart) != 0) {
  	  if (tcount == 0) {
  	    tcount = -1;
  	  }
  	  break;
  	}
  	tcount++;
  	targetTemp = targetTemp.substring(ind+1, targetTemp.length());
  	userTemp = userTemp.substring(ind2+1, userTemp.length());
        }
        if (tcount == -1) {
  	// then target file is probably on another drive (under windows)
  	throw new Exception("Can't construct a path to file relative to user "
  			    +"dir.");
        }
        if (targetTemp.indexOf(File.separator) == -1) {
  	targetTemp = "";
        }
        for (int i = 0; i < sepCount - tcount; i++) {
  	relativePath.append(".."+File.separator);
        }
        relativePath.append(targetTemp + fileName);
      }
      //    System.err.println("new path : "+relativePath.toString());
      return new File(relativePath.toString());
    }