View Javadoc

1   package com.tapina.robe.swi.clib.stdio;
2   
3   import com.tapina.robe.runtime.Environment;
4   import com.tapina.robe.swi.clib.CLibrary;
5   import com.tapina.robe.swi.clib.Stub;
6   
7   import java.io.EOFException;
8   import java.io.IOException;
9   
10  /***
11   * This function reads a single character from the stream pointed to by stream and returns it as an int.
12   * It is virtually identical to fgetc . The only difference is that the function might be a macro and the argument
13   * may be evaluated more than once so you can't use an expression with side effects. For example: getc(f[i++])
14   * may cause i to be incremented twice.
15   * Returns: Character read, or EOF for an error.
16   */
17  public class GetC extends Stub {
18      public void executeStub(Environment environment) {
19          final int[] R = environment.getCpu().R;
20          FilePointer filePointer = FilePointer.find(environment.getMemoryMap().getWord(R[0]));
21          try {
22              R[0] = filePointer.getc();
23          } catch (EOFException e) {
24              log.info("EOF during getc()");
25              R[0] = CLibrary.EOF;
26          } catch (IOException e) {
27              log.warning("Error during getc(): " + e.getMessage());
28              R[0] = CLibrary.EOF;
29          }
30      }
31  }