mirror of https://github.com/gnosygnu/xowa
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
5.8 KiB
94 lines
5.8 KiB
/*
|
|
XOWA: the XOWA Offline Wiki Application
|
|
Copyright (C) 2012 gnosygnu@gmail.com
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU Affero General Public License as
|
|
published by the Free Software Foundation, either version 3 of the
|
|
License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU Affero General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Affero General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
package gplx.core.envs; import gplx.*; import gplx.core.*;
|
|
public class Op_sys {
|
|
Op_sys(byte tid, byte sub_tid, String os_name, byte bitness, String nl_str, byte fsys_dir_spr_byte, boolean fsys_case_match) {
|
|
this.tid = tid; this.sub_tid = sub_tid; this.os_name = os_name; this.bitness = bitness; this.nl_str = nl_str; this.fsys_dir_spr_byte = fsys_dir_spr_byte; this.fsys_dir_spr_str = Char_.To_str((char)fsys_dir_spr_byte); this.fsys_case_match = fsys_case_match;
|
|
}
|
|
public byte Tid() {return tid;} private final byte tid;
|
|
public byte Sub_tid() {return sub_tid;} private final byte sub_tid;
|
|
public String Os_name() {return os_name;} private String os_name;
|
|
public byte Bitness() {return bitness;} private final byte bitness;
|
|
public String Bitness_str() {return (bitness == Bitness_32 ? "32" : "64");}
|
|
public String Nl_str() {return nl_str;} private final String nl_str;
|
|
public String Fsys_dir_spr_str() {return fsys_dir_spr_str;} private final String fsys_dir_spr_str;
|
|
public byte Fsys_dir_spr_byte() {return fsys_dir_spr_byte;} private final byte fsys_dir_spr_byte;
|
|
public String Fsys_http_frag_to_url_str(String raw) {return fsys_dir_spr_byte == Byte_ascii.Slash ? raw : String_.Replace(raw, Lnx.Fsys_dir_spr_str(), fsys_dir_spr_str);}
|
|
public boolean Fsys_case_match() {return fsys_case_match;} private final boolean fsys_case_match;
|
|
public String Fsys_case_match_str(String s) {return String_.CaseNormalize(fsys_case_match, s);}
|
|
public boolean Tid_is_wnt() {return tid == Tid_wnt;}
|
|
public boolean Tid_is_lnx() {return tid == Tid_lnx;}
|
|
public boolean Tid_is_osx() {return tid == Tid_osx;}
|
|
public boolean Tid_is_drd() {return tid == Tid_drd;}
|
|
public String To_str() {return os_name + Bitness_str();}
|
|
|
|
public static final byte Tid_nil = 0, Tid_wnt = 1, Tid_lnx = 2, Tid_osx = 3, Tid_drd = 4;
|
|
public static final byte Sub_tid_unknown = 0, Sub_tid_win_xp = 1, Sub_tid_win_7 = 2, Sub_tid_win_8 = 3;
|
|
public static final byte Bitness_32 = 1, Bitness_64 = 2;
|
|
public static final char Dir_spr_char_lnx = '\n';
|
|
public static final Op_sys Lnx = new_unx_flavor_(Tid_lnx, "linux", Bitness_32);
|
|
public static final Op_sys Osx = new_unx_flavor_(Tid_osx, "macosx", Bitness_32);
|
|
public static final Op_sys Drd = new_unx_flavor_(Tid_drd, "android", Bitness_32);
|
|
public static final Op_sys Wnt = new_wnt_(Sub_tid_unknown, Bitness_32);
|
|
public static Op_sys Cur() {return cur_op_sys;} static Op_sys cur_op_sys = new_auto_identify_();
|
|
public static String Fsys_path_to_lnx(String v) {
|
|
return cur_op_sys.Tid_is_wnt() ? String_.Replace(v, Wnt.fsys_dir_spr_str, Lnx.fsys_dir_spr_str) : v;
|
|
}
|
|
public static String Fsys_path_to_wnt(String v) {
|
|
return cur_op_sys.Tid_is_wnt() ? String_.Replace(v, Lnx.fsys_dir_spr_str, Wnt.fsys_dir_spr_str) : v;
|
|
}
|
|
private static Op_sys new_wnt_(byte bitness, byte sub_tid) {return new Op_sys(Tid_wnt , sub_tid , "windows", bitness, "\r\n", Byte_ascii.Backslash , Bool_.N);}
|
|
private static Op_sys new_unx_flavor_(byte tid, String os_name, byte bitness) {return new Op_sys(tid , Sub_tid_unknown , os_name , bitness, "\n" , Byte_ascii.Slash , Bool_.Y);}
|
|
public static void Cur_(int tid) {
|
|
switch (tid) {
|
|
case Tid_wnt: cur_op_sys = Wnt; break;
|
|
case Tid_lnx: cur_op_sys = Lnx; break;
|
|
case Tid_osx: cur_op_sys = Osx; break;
|
|
case Tid_drd: cur_op_sys = Drd; break;
|
|
default: throw Err_.new_unhandled_default(tid);
|
|
}
|
|
}
|
|
static final String GRP_KEY = "gplx.op_sys";
|
|
// public static Op_sys Cur_() {cur_op_sys = new_auto_identify_(); return cur_op_sys;}
|
|
static Op_sys new_auto_identify_() {
|
|
String os_name = "";
|
|
try {
|
|
String bitness_str = System.getProperty("sun.arch.data.model"); if (bitness_str == null) return Drd;
|
|
bitness_str = bitness_str.toLowerCase();
|
|
byte bitness_byte = Bitness_32;
|
|
if (String_.Eq(bitness_str, "32")) bitness_byte = Bitness_32;
|
|
else if (String_.Eq(bitness_str, "64")) bitness_byte = Bitness_64;
|
|
else throw Err_.new_wo_type("unknown bitness; expecting 32 or 64; System.getProperty(\"bit.level\")", "val", bitness_str);
|
|
|
|
os_name = System.getProperty("os.name").toLowerCase();
|
|
if (String_.Has_at_bgn(os_name, "win")) {
|
|
String os_version = System.getProperty("os.version").toLowerCase();// "Windows 7".equals(osName) && "6.1".equals(osVersion);
|
|
byte sub_tid = Sub_tid_unknown;
|
|
if (String_.Eq(os_name, "windows xp") && String_.Eq(os_version, "5.1")) sub_tid = Sub_tid_win_xp;
|
|
else if (String_.Eq(os_name, "windows 7") && String_.Eq(os_version, "6.1")) sub_tid = Sub_tid_win_7;
|
|
else if (String_.Eq(os_name, "windows 8")) sub_tid = Sub_tid_win_8;
|
|
return new_wnt_(bitness_byte, sub_tid);
|
|
}
|
|
else if (String_.Eq(os_name, "linux")) return new_unx_flavor_(Tid_lnx, os_name, bitness_byte);
|
|
else if (String_.Has_at_bgn(os_name, "mac")) return new_unx_flavor_(Tid_osx, os_name, bitness_byte); // EX:Mac OS X
|
|
else throw Err_.new_wo_type("unknown os_name; expecting windows, linux, mac; System.getProperty(\"os.name\")", "val", os_name);
|
|
} catch (Exception exc) {Drd.os_name = os_name; return Drd;}
|
|
}
|
|
public static void Cur_is_drd_() {cur_op_sys = Drd;}
|
|
}
|