History

Implemented getSystemParameters() defaults

Dmitry Kabak (userdima committed 13 years ago

Commit 7503d241 parent c636dd92 files · +61 −24Browse files

Showing the changes to java (2 of 2 files). Show all

Unified · Split

2 files
  1. java/pkg/java/lang/System_L.b +60 −24
  2. java/pkg/java/lang/System_L.m +1 −0
java/pkg/java/lang/System_L.b+60−24
@@ -19,7 +19,8 @@ include "jni.m"; · 18 unmodified lines
1919 JArrayJClass,
2020 JArrayJString,
2121 JClass,
22− JObject : import jni;
22+ JObject,
23+ Value : import jni;
2324
2425 #>> extra pre includes here
2526
@@ -93,41 +94,76 @@ identityHashCode_rObject_I( p0 : JObject) : int · 67 unmodified lines
9394 return( jni->IdentityHash(p0) );
9495 }#<<
9596
97+username(): string
98+{
99+ fd := jni->sys->open("#c/user", jni->sys->OREAD);
100+ if(fd == nil)
101+ return "unknown";
102+
103+ buf := array[128] of byte;
104+ n := jni->sys->read(fd, buf, len buf);
105+ if(n < 0)
106+ return "unknown";
107+
108+ return string buf[:n];
109+}
110+
96111 GetUserName_rString( ) : JString
97112 {#>>
98113 # return the current inferno user
99114 # name as a Java String
100− #
101− user_name : string;
102−
103− fd := jni->sys->open("#c/user", jni->sys->OREAD);
104− if(fd == nil)
105− user_name = "unknown";
106− else {
107− buf := array[128] of byte;
108− n := jni->sys->read(fd, buf, len buf);
109− if(n < 0)
110− user_name = "unknown";
111− else
112− user_name = string buf[:n];
113− }
114115
115116 # make java string from user name
116− return( jni->NewString( user_name ) );
117+ return( jni->NewString( username() ) );
117118 }#<<
118119
120+wdir: Workdir;
121+workingdir(): string
122+{
123+ if (wdir == nil) {
124+ wdir = load Workdir Workdir->PATH;
125+ if ( wdir == nil )
126+ jni->InitError( jni->sys->sprint( "java.lang.System: could not load %s: %r", Workdir->PATH ) );
127+ }
128+ return wdir->init();
129+}
130+
119131 GetCWD_rString( ) : JString
120132 {#>>
121133 # return the current working directory
122134 # as a Java String
123− #
124− # this fct is really only called once so
125− # just load Workdir right here
126− wdir := load Workdir Workdir->PATH;
127− if ( wdir == nil )
128− jni->InitError( jni->sys->sprint( "java.lang.System: could not load %s: %r", Workdir->PATH ) );
129−
130− return( jni->NewString( wdir->init() ) );
135+
136+ return( jni->NewString( workingdir() ) );
137+}#<<
138+
139+initProperties_rProperties_rProperties( p0 : JObject ) : JObject
140+{#>>
141+ # Default properties
142+ # TODO: ask Inferno when possible instead of hardcoded values
143+ properties := array [] of {
144+ ("java.vendor", "Inferno project"),
145+ ("java.vendor.url", "http://www.vitanuova.com/inferno/"),
146+ ("java.home", "/java"),
147+ ("java.class.version", "50.0"), # hopefully :)
148+ ("java.class.path", "/java/pkg"),
149+ ("os.name", "Inferno OS"),
150+ ("os.arch", "x86"),
151+ ("os.version", "4th edition"),
152+ ("file.separator", "/"),
153+ ("path.separator", ":"),
154+ ("line.separator", "\n"),
155+ ("user.home", workingdir()),
156+ ("user.name", username()),
157+ ("user.dir", "/usr/" + username())
158+ };
159+ for (i := 0; i < len properties; i++) {
160+ (key, value) := properties[i];
161+ args := array [2] of ref jni->Value;
162+ args[0] = ref Value.TObject(jni->NewStringObject(key));
163+ args[1] = ref Value.TObject(jni->NewStringObject(value));
164+ (val, err) := jni->CallMethod(p0, "setProperty", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;", args);
165+ }
166+ return p0;
131167 }#<<
132168
133169 registerNatives_V( )
java/pkg/java/lang/System_L.m+1−0
@@ -14,6 +14,7 @@ System_L : module · 13 unmodified lines
1414 currentTimeMillis_J : fn( ) : big;
1515 arraycopy_rObject_I_rObject_I_I_V : fn( p0 : JObject,p1 : int,p2 : JObject,p3 : int,p4 : int);
1616 identityHashCode_rObject_I : fn( p0 : JObject) : int;
17+ initProperties_rProperties_rProperties : fn( p0 : JObject ) : JObject;
1718 GetUserName_rString : fn( ) : JString;
1819 GetCWD_rString : fn( ) : JString;
1920 registerNatives_V : fn( );