home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / java / io / Win32FileSystem.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  4.9 KB  |  347 lines

  1. package java.io;
  2.  
  3. import java.security.AccessController;
  4. import sun.security.action.GetPropertyAction;
  5.  
  6. class Win32FileSystem extends FileSystem {
  7.    private final char slash = ((String)AccessController.doPrivileged(new GetPropertyAction("file.separator"))).charAt(0);
  8.    private final char altSlash;
  9.    private final char semicolon = ((String)AccessController.doPrivileged(new GetPropertyAction("path.separator"))).charAt(0);
  10.    private static String[] driveDirCache = new String[26];
  11.  
  12.    public Win32FileSystem() {
  13.       this.altSlash = (char)(this.slash == '\\' ? 47 : 92);
  14.    }
  15.  
  16.    private boolean isSlash(char var1) {
  17.       return var1 == '\\' || var1 == '/';
  18.    }
  19.  
  20.    private boolean isLetter(char var1) {
  21.       return var1 >= 'a' && var1 <= 'z' || var1 >= 'A' && var1 <= 'Z';
  22.    }
  23.  
  24.    private String slashify(String var1) {
  25.       return var1.length() > 0 && var1.charAt(0) != this.slash ? this.slash + var1 : var1;
  26.    }
  27.  
  28.    public char getSeparator() {
  29.       return this.slash;
  30.    }
  31.  
  32.    public char getPathSeparator() {
  33.       return this.semicolon;
  34.    }
  35.  
  36.    private int normalizePrefix(String var1, int var2, StringBuffer var3) {
  37.       int var4;
  38.       for(var4 = 0; var4 < var2 && this.isSlash(var1.charAt(var4)); ++var4) {
  39.       }
  40.  
  41.       char var5;
  42.       if (var2 - var4 >= 2 && this.isLetter(var5 = var1.charAt(var4)) && var1.charAt(var4 + 1) == ':') {
  43.          var3.append(var5);
  44.          var3.append(':');
  45.          var4 += 2;
  46.       } else {
  47.          var4 = 0;
  48.          if (var2 >= 2 && this.isSlash(var1.charAt(0)) && this.isSlash(var1.charAt(1))) {
  49.             var4 = 1;
  50.             var3.append(this.slash);
  51.          }
  52.       }
  53.  
  54.       return var4;
  55.    }
  56.  
  57.    private String normalize(String var1, int var2, int var3) {
  58.       if (var2 == 0) {
  59.          return var1;
  60.       } else {
  61.          if (var3 < 3) {
  62.             var3 = 0;
  63.          }
  64.  
  65.          char var5 = this.slash;
  66.          StringBuffer var6 = new StringBuffer(var2);
  67.          int var4;
  68.          if (var3 == 0) {
  69.             var4 = this.normalizePrefix(var1, var2, var6);
  70.          } else {
  71.             var4 = var3;
  72.             var6.append(var1.substring(0, var3));
  73.          }
  74.  
  75.          while(var4 < var2) {
  76.             char var7 = var1.charAt(var4++);
  77.             if (!this.isSlash(var7)) {
  78.                var6.append(var7);
  79.             } else {
  80.                while(var4 < var2 && this.isSlash(var1.charAt(var4))) {
  81.                   ++var4;
  82.                }
  83.  
  84.                if (var4 == var2) {
  85.                   int var8 = var6.length();
  86.                   if (var8 == 2 && var6.charAt(1) == ':') {
  87.                      var6.append(var5);
  88.                   } else if (var8 == 0) {
  89.                      var6.append(var5);
  90.                   } else if (var8 == 1 && this.isSlash(var6.charAt(0))) {
  91.                      var6.append(var5);
  92.                   }
  93.                   break;
  94.                }
  95.  
  96.                var6.append(var5);
  97.             }
  98.          }
  99.  
  100.          String var9 = var6.toString();
  101.          return var9;
  102.       }
  103.    }
  104.  
  105.    public String normalize(String var1) {
  106.       int var2 = var1.length();
  107.       char var3 = this.slash;
  108.       char var4 = this.altSlash;
  109.       char var5 = 0;
  110.  
  111.       for(int var6 = 0; var6 < var2; ++var6) {
  112.          char var7 = var1.charAt(var6);
  113.          if (var7 == var4) {
  114.             return this.normalize(var1, var2, var5 == var3 ? var6 - 1 : var6);
  115.          }
  116.  
  117.          if (var7 == var3 && var5 == var3 && var6 > 1) {
  118.             return this.normalize(var1, var2, var6 - 1);
  119.          }
  120.  
  121.          if (var7 == ':' && var6 > 1) {
  122.             return this.normalize(var1, var2, 0);
  123.          }
  124.  
  125.          var5 = var7;
  126.       }
  127.  
  128.       return var5 == var3 ? this.normalize(var1, var2, var2 - 1) : var1;
  129.    }
  130.  
  131.    public int prefixLength(String var1) {
  132.       char var2 = this.slash;
  133.       int var3 = var1.length();
  134.       if (var3 == 0) {
  135.          return 0;
  136.       } else {
  137.          char var4 = var1.charAt(0);
  138.          char var5 = var3 > 1 ? var1.charAt(1) : 0;
  139.          if (var4 == var2) {
  140.             return var5 == var2 ? 2 : 1;
  141.          } else if (this.isLetter(var4) && var5 == ':') {
  142.             return var3 > 2 && var1.charAt(2) == var2 ? 3 : 2;
  143.          } else {
  144.             return 0;
  145.          }
  146.       }
  147.    }
  148.  
  149.    public String resolve(String var1, String var2) {
  150.       char var3 = this.slash;
  151.       int var4 = var1.length();
  152.       if (var4 == 0) {
  153.          return var2;
  154.       } else {
  155.          int var5 = var2.length();
  156.          if (var5 == 0) {
  157.             return var1;
  158.          } else {
  159.             String var6 = var2;
  160.             if (var5 > 1 && var2.charAt(0) == var3) {
  161.                if (var2.charAt(1) == var3) {
  162.                   var6 = var2.substring(2);
  163.                } else {
  164.                   var6 = var2.substring(1);
  165.                }
  166.             }
  167.  
  168.             String var7 = var1;
  169.             if (var1.charAt(var4 - 1) == var3) {
  170.                var7 = var1.substring(0, var4 - 1);
  171.             }
  172.  
  173.             return var7 + this.slashify(var6);
  174.          }
  175.       }
  176.    }
  177.  
  178.    public String getDefaultParent() {
  179.       return "" + this.slash;
  180.    }
  181.  
  182.    public boolean isAbsolute(File var1) {
  183.       int var2 = var1.getPrefixLength();
  184.       return var2 == 2 && var1.getPath().charAt(0) == this.slash || var2 == 3;
  185.    }
  186.  
  187.    private static native String getDriveDirectory(int var0);
  188.  
  189.    private static int driveIndex(char var0) {
  190.       if (var0 >= 'a' && var0 <= 'z') {
  191.          return var0 - 97;
  192.       } else {
  193.          return var0 >= 'A' && var0 <= 'Z' ? var0 - 65 : -1;
  194.       }
  195.    }
  196.  
  197.    private static String getDriveDirectory(char var0) {
  198.       int var1 = driveIndex(var0);
  199.       if (var1 < 0) {
  200.          return null;
  201.       } else {
  202.          String var2 = driveDirCache[var1];
  203.          if (var2 != null) {
  204.             return var2;
  205.          } else {
  206.             var2 = getDriveDirectory(var1 + 1);
  207.             driveDirCache[var1] = var2;
  208.             return var2;
  209.          }
  210.       }
  211.    }
  212.  
  213.    private String getUserPath() {
  214.       return this.normalize(System.getProperty("user.dir"));
  215.    }
  216.  
  217.    private String getDrive(String var1) {
  218.       int var2 = this.prefixLength(var1);
  219.       return var2 == 3 ? var1.substring(0, 2) : null;
  220.    }
  221.  
  222.    public String resolve(File var1) {
  223.       String var2 = var1.getPath();
  224.       int var3 = var1.getPrefixLength();
  225.       if (var3 == 2 && var2.charAt(0) == this.slash) {
  226.          return var2;
  227.       } else if (var3 == 3) {
  228.          return var2;
  229.       } else if (var3 == 0) {
  230.          return this.getUserPath() + this.slashify(var2);
  231.       } else if (var3 == 1) {
  232.          String var13 = this.getUserPath();
  233.          String var14 = this.getDrive(var13);
  234.          return var14 != null ? var14 + var2 : var13 + var2;
  235.       } else if (var3 == 2) {
  236.          String var4 = this.getUserPath();
  237.          String var5 = this.getDrive(var4);
  238.          if (var5 != null && var2.startsWith(var5)) {
  239.             return var4 + this.slashify(var2.substring(2));
  240.          } else {
  241.             char var6 = var2.charAt(0);
  242.             String var7 = getDriveDirectory(var6);
  243.             if (var7 != null) {
  244.                String var9 = "" + var6 + ':' + var7 + this.slashify(var2.substring(2));
  245.                SecurityManager var10 = System.getSecurityManager();
  246.  
  247.                try {
  248.                   if (var10 != null) {
  249.                      var10.checkRead(var9);
  250.                   }
  251.  
  252.                   return var9;
  253.                } catch (SecurityException var12) {
  254.                   throw new SecurityException("Cannot resolve path " + var2);
  255.                }
  256.             } else {
  257.                return var6 + ":" + this.slashify(var2.substring(2));
  258.             }
  259.          }
  260.       } else {
  261.          throw new InternalError("Unresolvable path: " + var2);
  262.       }
  263.    }
  264.  
  265.    public native String canonicalize(String var1) throws IOException;
  266.  
  267.    public native int getBooleanAttributes(File var1);
  268.  
  269.    public native boolean checkAccess(File var1, boolean var2);
  270.  
  271.    public native long getLastModifiedTime(File var1);
  272.  
  273.    public native long getLength(File var1);
  274.  
  275.    public native boolean createFileExclusively(String var1) throws IOException;
  276.  
  277.    public native boolean delete(File var1);
  278.  
  279.    public synchronized native boolean deleteOnExit(File var1);
  280.  
  281.    public native String[] list(File var1);
  282.  
  283.    public native boolean createDirectory(File var1);
  284.  
  285.    public native boolean rename(File var1, File var2);
  286.  
  287.    public native boolean setLastModifiedTime(File var1, long var2);
  288.  
  289.    public native boolean setReadOnly(File var1);
  290.  
  291.    private boolean access(String var1) {
  292.       try {
  293.          SecurityManager var2 = System.getSecurityManager();
  294.          if (var2 != null) {
  295.             var2.checkRead(var1);
  296.          }
  297.  
  298.          return true;
  299.       } catch (SecurityException var3) {
  300.          return false;
  301.       }
  302.    }
  303.  
  304.    private static native int listRoots0();
  305.  
  306.    public File[] listRoots() {
  307.       int var1 = listRoots0();
  308.       int var2 = 0;
  309.  
  310.       for(int var3 = 0; var3 < 26; ++var3) {
  311.          if ((var1 >> var3 & 1) != 0) {
  312.             if (!this.access((char)(65 + var3) + ":" + this.slash)) {
  313.                var1 &= ~(1 << var3);
  314.             } else {
  315.                ++var2;
  316.             }
  317.          }
  318.       }
  319.  
  320.       File[] var4 = new File[var2];
  321.       int var5 = 0;
  322.       char var6 = this.slash;
  323.  
  324.       for(int var7 = 0; var7 < 26; ++var7) {
  325.          if ((var1 >> var7 & 1) != 0) {
  326.             var4[var5++] = new File((char)(65 + var7) + ":" + var6);
  327.          }
  328.       }
  329.  
  330.       return var4;
  331.    }
  332.  
  333.    public int compare(File var1, File var2) {
  334.       return var1.getPath().compareToIgnoreCase(var2.getPath());
  335.    }
  336.  
  337.    public int hashCode(File var1) {
  338.       return var1.getPath().toLowerCase().hashCode() ^ 1234321;
  339.    }
  340.  
  341.    private static native void initIDs();
  342.  
  343.    static {
  344.       initIDs();
  345.    }
  346. }
  347.