зеркало из https://github.com/mozilla/gecko-dev.git
213 строки
6.3 KiB
Java
213 строки
6.3 KiB
Java
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* The contents of this file are subject to the Netscape Public
|
|
* License Version 1.1 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS
|
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
* implied. See the License for the specific language governing
|
|
* rights and limitations under the License.
|
|
*
|
|
* The Original Code is mozilla.org code.
|
|
*
|
|
* The Initial Developer of the Original Code is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All
|
|
* Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*/
|
|
|
|
/*
|
|
* Platform specific support for detecting platform and locating prefs files
|
|
*/
|
|
|
|
// when who what
|
|
// 12/06/97 jband added this file
|
|
//
|
|
|
|
package com.netscape.jsdebugging.ifcui;
|
|
|
|
import netscape.application.*;
|
|
import netscape.util.*;
|
|
import java.io.File;
|
|
|
|
/* A place to get info about the application Environment */
|
|
|
|
// all statics...
|
|
public class Env
|
|
{
|
|
public static final int ENV_WIN = 1;
|
|
public static final int ENV_MAC = 2;
|
|
public static final int ENV_UNIX = 3;
|
|
|
|
public static void Init()
|
|
{
|
|
_initPlatformType();
|
|
_initCodebaseDir();
|
|
_initPrefsDir();
|
|
}
|
|
|
|
public static int getCoursePlatformType()
|
|
{
|
|
if( 0 == _coursePlatformType )
|
|
_initPlatformType();
|
|
return _coursePlatformType;
|
|
}
|
|
|
|
public static String getPrefsDir()
|
|
{
|
|
if( null == _prefsDir )
|
|
_initPrefsDir();
|
|
return _prefsDir;
|
|
}
|
|
|
|
public static String getCodebaseDir()
|
|
{
|
|
if( null == _codebaseDir )
|
|
_initCodebaseDir();
|
|
return _codebaseDir;
|
|
}
|
|
|
|
private static void _initPlatformType()
|
|
{
|
|
if( 0 != _coursePlatformType )
|
|
return;
|
|
try
|
|
{
|
|
String os = System.getProperty("os.name").toUpperCase();
|
|
// System.out.println("System.getProperty(\"os.name\").toUpperCase() returned: " + os);
|
|
if( os.startsWith("WIN") )
|
|
_coursePlatformType = ENV_WIN;
|
|
else if( os.startsWith("MAC") )
|
|
_coursePlatformType = ENV_MAC;
|
|
else
|
|
_coursePlatformType = ENV_UNIX;
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
System.out.println(e);
|
|
System.out.println("Failed in getting os.name, defaulting to Unix");
|
|
_coursePlatformType = ENV_UNIX;
|
|
}
|
|
}
|
|
|
|
private static void _initCodebaseDir()
|
|
{
|
|
if( null != _codebaseDir )
|
|
return;
|
|
|
|
Application app = Application.application();
|
|
if( null == app )
|
|
{
|
|
System.out.println("Failed in getting app, codebasedir set to /");
|
|
return;
|
|
}
|
|
// get codebase
|
|
java.net.URL loadDirURL = app.codeBase();
|
|
String loadDir = loadDirURL.getFile();
|
|
if(null != loadDir)
|
|
_codebaseDir = loadDir.replace('/', File.separatorChar);
|
|
|
|
// unescape the path
|
|
StringBuffer sb = new StringBuffer();
|
|
int len = _codebaseDir.length();
|
|
for(int i = 0; i < len; i++ )
|
|
{
|
|
char c = _codebaseDir.charAt(i);
|
|
if('%' == c && i+2 < len)
|
|
{
|
|
int high = Character.digit(_codebaseDir.charAt(i+1),16);
|
|
int low = Character.digit(_codebaseDir.charAt(i+2),16);
|
|
|
|
if(-1 != high && -1 != low)
|
|
{
|
|
c = (char) ((high * 16) + low);
|
|
i += 2;
|
|
}
|
|
}
|
|
sb.append(c);
|
|
}
|
|
_codebaseDir = sb.toString();
|
|
|
|
_initPlatformType();
|
|
|
|
// hack to lose the leading slash in Windows filenames
|
|
if( ENV_WIN == _coursePlatformType &&
|
|
_codebaseDir.length() >= 3 &&
|
|
_codebaseDir.charAt(0) == File.separatorChar &&
|
|
(_codebaseDir.charAt(2) == ':' || _codebaseDir.charAt(2) == '|') )
|
|
{
|
|
_codebaseDir = _codebaseDir.substring(1);
|
|
}
|
|
|
|
// hack to lose the leading slash in Mac filenames
|
|
//
|
|
// REMOVED! Mac Java in Nav wants leading slash!
|
|
//
|
|
// if( ENV_MAC == _coursePlatformType &&
|
|
// _codebaseDir.length() >= 2 &&
|
|
// _codebaseDir.charAt(0) == File.separatorChar )
|
|
// {
|
|
// _codebaseDir = _codebaseDir.substring(1);
|
|
// }
|
|
|
|
//
|
|
// force leading slash on Mac
|
|
//
|
|
if( ENV_MAC == _coursePlatformType &&
|
|
_codebaseDir.length() >= 2 &&
|
|
_codebaseDir.charAt(0) != File.separatorChar )
|
|
{
|
|
_codebaseDir = File.separatorChar + _codebaseDir;
|
|
}
|
|
|
|
// hack to get a 'normal' filename on Windows
|
|
if( ENV_WIN == _coursePlatformType && _codebaseDir.charAt(1) == '|' )
|
|
_codebaseDir = _codebaseDir.charAt(0)+":"+ _codebaseDir.substring(2);
|
|
}
|
|
|
|
private static void _initPrefsDir()
|
|
{
|
|
if( null != _prefsDir )
|
|
return;
|
|
|
|
_initPlatformType();
|
|
_initCodebaseDir();
|
|
|
|
// set default
|
|
_prefsDir = _codebaseDir;
|
|
if( null == _prefsDir )
|
|
_prefsDir = "/";
|
|
|
|
String s = Application.application().parameterNamed("PrefsDir");
|
|
if( null != s )
|
|
{
|
|
_prefsDir = s;
|
|
System.out.println("JSD set prefs dir from applet tag");
|
|
}
|
|
else if( ENV_MAC == _coursePlatformType && _codebaseDir.length() > 1 )
|
|
{
|
|
// is a Mac, try to use 'System Folder/Preferences'
|
|
|
|
// use codebase for Volume name
|
|
int sep = _codebaseDir.indexOf(File.separatorChar,1);
|
|
if(-1 != sep)
|
|
{
|
|
_prefsDir = _codebaseDir.substring(0,sep+1) +
|
|
"System Folder" +
|
|
File.separatorChar +
|
|
"Preferences" +
|
|
File.separatorChar;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
private static int _coursePlatformType = 0;
|
|
private static String _codebaseDir = null;
|
|
private static String _prefsDir = null;
|
|
}
|