View Javadoc

1   package com.tapina.robe.swi.clib.stdio;
2   
3   import com.tapina.robe.runtime.Environment;
4   import com.tapina.robe.runtime.MemoryMap;
5   import com.tapina.robe.swi.clib.Stub;
6   import com.tapina.robe.swi.clib.VarArgs;
7   import com.tapina.robe.swi.clib.stdio.printf.PrintfEngine;
8   
9   /***
10   * This function writes output into the string pointed to by out under control of the format string .
11   * In operation it is similar to fprintf , but output is directed to a string instead of to a stream.
12   * The terminating null byte is added automatically.
13   * Returns: The number of characters written.
14   */
15  public class SPrintF extends Stub {
16      public void executeStub(Environment environment) {
17          final int[] R = environment.getCpu().R;
18          final MemoryMap memoryMap = environment.getMemoryMap();
19          final String formatString = memoryMap.getString0(R[1]);
20          // NB: varargs are treated as normal arguments (i.e. passed in a1, a2, a3, a4 then stack).
21          final String out = PrintfEngine.getInstance().sprintf(formatString, new VarArgs(environment, 2));
22          memoryMap.storeString0(R[0], out);
23          R[0] = out.length();
24      }
25  }