Showing the changes to java (2 of 2 files). Show all
Unified · Split
| @@ -19,7 +19,8 @@ include "jni.m"; · 18 unmodified lines | |||
| 19 | JArrayJClass, | 19 | JArrayJClass, |
| 20 | JArrayJString, | 20 | JArrayJString, |
| 21 | JClass, | 21 | JClass, |
| 22 | JObject : import jni; | 22 | JObject, |
| 23 | Value : import jni; | ||
| 23 | 24 | ||
| 24 | #>> extra pre includes here | 25 | #>> extra pre includes here |
| 25 | 26 | ||
| @@ -93,41 +94,76 @@ identityHashCode_rObject_I( p0 : JObject) : int · 67 unmodified lines | |||
| 93 | return( jni->IdentityHash(p0) ); | 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 | GetUserName_rString( ) : JString | 111 | GetUserName_rString( ) : JString |
| 97 | {#>> | 112 | {#>> |
| 98 | # return the current inferno user | 113 | # return the current inferno user |
| 99 | # name as a Java String | 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 | # make java string from user name | 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 | GetCWD_rString( ) : JString | 131 | GetCWD_rString( ) : JString |
| 120 | {#>> | 132 | {#>> |
| 121 | # return the current working directory | 133 | # return the current working directory |
| 122 | # as a Java String | 134 | # as a Java String |
| 123 | # | 135 | |
| 124 | # this fct is really only called once so | 136 | return( jni->NewString( workingdir() ) ); |
| 125 | # just load Workdir right here | 137 | }#<< |
| 126 | wdir := load Workdir Workdir->PATH; | 138 | |
| 127 | if ( wdir == nil ) | 139 | initProperties_rProperties_rProperties( p0 : JObject ) : JObject |
| 128 | jni->InitError( jni->sys->sprint( "java.lang.System: could not load %s: %r", Workdir->PATH ) ); | 140 | {#>> |
| 129 | 141 | # Default properties | |
| 130 | return( jni->NewString( wdir->init() ) ); | 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 | registerNatives_V( ) | 169 | registerNatives_V( ) |
| @@ -14,6 +14,7 @@ System_L : module · 13 unmodified lines | |||
| 14 | currentTimeMillis_J : fn( ) : big; | 14 | currentTimeMillis_J : fn( ) : big; |
| 15 | arraycopy_rObject_I_rObject_I_I_V : fn( p0 : JObject,p1 : int,p2 : JObject,p3 : int,p4 : int); | 15 | arraycopy_rObject_I_rObject_I_I_V : fn( p0 : JObject,p1 : int,p2 : JObject,p3 : int,p4 : int); |
| 16 | identityHashCode_rObject_I : fn( p0 : JObject) : int; | 16 | identityHashCode_rObject_I : fn( p0 : JObject) : int; |
| 17 | initProperties_rProperties_rProperties : fn( p0 : JObject ) : JObject; | ||
| 17 | GetUserName_rString : fn( ) : JString; | 18 | GetUserName_rString : fn( ) : JString; |
| 18 | GetCWD_rString : fn( ) : JString; | 19 | GetCWD_rString : fn( ) : JString; |
| 19 | registerNatives_V : fn( ); | 20 | registerNatives_V : fn( ); |