Showing the changes to java (2 of 2 files). Show all
Unified · Split
| @@ -19,7 +19,8 @@ include "jni.m"; · 18 unmodified lines | ||
| 19 | 19 | JArrayJClass, |
| 20 | 20 | JArrayJString, |
| 21 | 21 | JClass, |
| 22 | − JObject : import jni; | |
| 22 | + JObject, | |
| 23 | + Value : import jni; | |
| 23 | 24 | |
| 24 | 25 | #>> extra pre includes here |
| 25 | 26 | |
| @@ -93,41 +94,76 @@ identityHashCode_rObject_I( p0 : JObject) : int · 67 unmodified lines | ||
| 93 | 94 | return( jni->IdentityHash(p0) ); |
| 94 | 95 | }#<< |
| 95 | 96 | |
| 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 | + | |
| 96 | 111 | GetUserName_rString( ) : JString |
| 97 | 112 | {#>> |
| 98 | 113 | # return the current inferno user |
| 99 | 114 | # 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 | − } | |
| 114 | 115 | |
| 115 | 116 | # make java string from user name |
| 116 | − return( jni->NewString( user_name ) ); | |
| 117 | + return( jni->NewString( username() ) ); | |
| 117 | 118 | }#<< |
| 118 | 119 | |
| 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 | + | |
| 119 | 131 | GetCWD_rString( ) : JString |
| 120 | 132 | {#>> |
| 121 | 133 | # return the current working directory |
| 122 | 134 | # 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; | |
| 131 | 167 | }#<< |
| 132 | 168 | |
| 133 | 169 | registerNatives_V( ) |
| @@ -14,6 +14,7 @@ System_L : module · 13 unmodified lines | ||
| 14 | 14 | currentTimeMillis_J : fn( ) : big; |
| 15 | 15 | arraycopy_rObject_I_rObject_I_I_V : fn( p0 : JObject,p1 : int,p2 : JObject,p3 : int,p4 : int); |
| 16 | 16 | identityHashCode_rObject_I : fn( p0 : JObject) : int; |
| 17 | + initProperties_rProperties_rProperties : fn( p0 : JObject ) : JObject; | |
| 17 | 18 | GetUserName_rString : fn( ) : JString; |
| 18 | 19 | GetCWD_rString : fn( ) : JString; |
| 19 | 20 | registerNatives_V : fn( ); |