1 package com.tapina.robe.swi.clib.stdio;
2
3 import com.tapina.robe.runtime.ByteArray;
4 import com.tapina.robe.runtime.Environment;
5 import com.tapina.robe.runtime.MemoryMap;
6 import com.tapina.robe.swi.clib.Stub;
7
8 import java.io.IOException;
9
10 /***
11 * This function writes a3 objects of size specified by a2 from the array pointed to by a1, into the file
12 * pointed to by a4.
13 * Returns: The number of objects written.
14 */
15 public class FWrite extends Stub {
16 public void executeStub(Environment environment) {
17 final int[] R = environment.getCpu().R;
18 final int writeSize = R[2] * R[1];
19 final MemoryMap memoryMap = environment.getMemoryMap();
20 final FilePointer filePointer = FilePointer.find(environment.getMemoryMap().getWord(R[3]));
21 final ByteArray data = memoryMap.getByteArray(R[0], writeSize, false);
22 try {
23 filePointer.write(data.getArray(), data.getOffset(), data.getLength());
24 R[0] = R[2];
25 } catch (IOException e) {
26 log.severe("Error in fwrite(): " + e.getMessage());
27 R[0] = 0;
28 }
29 }
30 }