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
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 }