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 7 import java.io.IOException; 8 9 /*** 10 * This function reads a3 objects of size specified by a2 into the array pointed to by a1, from the stream pointed to by a4. 11 * Returns: The number of objects successfully read. 12 */ 13 public class FRead extends Stub { 14 public void executeStub(Environment environment) { 15 final int[] R = environment.getCpu().R; 16 final int readSize = R[2] * R[1]; 17 if (readSize == 0) { 18 R[0] = 0; 19 return; 20 } 21 final MemoryMap memoryMap = environment.getMemoryMap(); 22 FilePointer filePointer = FilePointer.find(memoryMap.getWord(R[3])); 23 try { 24 byte[] data = filePointer.read(readSize); 25 memoryMap.storeBytes(R[0], data, 0, data.length - (data.length % R[1])); 26 R[0] = data.length / R[1]; 27 } catch (IOException e) { 28 R[0] = 0; 29 } 30 } 31 }