1 package com.tapina.robe.swi.clib.stdlib; 2 3 import com.tapina.robe.runtime.ByteArrayUtils; 4 import com.tapina.robe.runtime.Environment; 5 import com.tapina.robe.runtime.MemoryMap; 6 import com.tapina.robe.runtime.RawDataBlock; 7 import com.tapina.robe.swi.OS; 8 import com.tapina.robe.swi.clib.Stub; 9 10 /*** 11 * This reads the contents of an environment variable, whose name is given. In DOS it reads the DOS environment 12 * variables eg PATH, whereas in RISC OS it reads the system variable eg Obey$Dir. When reading the variables it 13 * converts numbers to strings and expands macros. 14 * You should not modify the returned string and it may be overwritten by subsequent calls to getenv. 15 * This function is equivalent to the SWI OS_ReadVarVal , with R4=3. 16 * Returns: A pointer to the variable contents. 17 */ 18 public class GetEnv extends Stub { 19 RawDataBlock block = null; 20 21 public void executeStub(Environment environment) { 22 final MemoryMap memoryMap = environment.getMemoryMap(); 23 final int[] R = environment.getCpu().R; 24 final String value = OS.getInstance().readVarVal(memoryMap.getString0(R[0])); 25 if (this.block != null) { 26 memoryMap.removeSystemDataBlock(block); 27 } 28 this.block = memoryMap.createSystemDataBlock(value); 29 R[0] = block.getAddress(); 30 } 31 }