mars.util
Class SystemIO

java.lang.Object
  extended by mars.util.SystemIO

public class SystemIO
extends Object

Provides standard i/o services needed to simulate the MIPS syscall routines. These methods will detect whether the simulator is being run from the command line or through the GUI, then do I/O to System.in and System.out in the former situation, and interact with the GUI in the latter.

Author:
Pete Sanderson and Ken Vollmar

Field Summary
static String fileErrorString
          String used for description of file error
static int SYSCALL_BUFSIZE
          Buffer size for syscalls for file I/O
static int SYSCALL_MAXFILES
          Maximum number of files that can be open
 
Constructor Summary
SystemIO()
           
 
Method Summary
static void closeFile(int fd)
          Close the file with specified file descriptor
static String getFileErrorMessage()
          Retrieve file operation or error message
static int openFile(String filename, int flags)
          Open a file for either reading or writing.
static void printString(String string)
          Implements syscall having 4 in $v0, to print a string.
static int readChar(int serviceNumber)
          Implements syscall having 12 in $v0, to read a char value.
static double readDouble(int serviceNumber)
          Implements syscall to read a double value.
static float readFloat(int serviceNumber)
          Implements syscall to read a float value.
static int readFromFile(int fd, byte[] myBuffer, int lengthRequested)
          Read bytes from file.
static int readInteger(int serviceNumber)
          Implements syscall to read an integer value.
static String readString(int serviceNumber, int maxLength)
          Implements syscall to read a string.
static void resetFiles()
          Reset all files -- clears out the file descriptor table.
static int writeToFile(int fd, byte[] myBuffer, int lengthRequested)
          Write bytes to file.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

SYSCALL_BUFSIZE

public static final int SYSCALL_BUFSIZE
Buffer size for syscalls for file I/O

See Also:
Constant Field Values

SYSCALL_MAXFILES

public static final int SYSCALL_MAXFILES
Maximum number of files that can be open

See Also:
Constant Field Values

fileErrorString

public static String fileErrorString
String used for description of file error

Constructor Detail

SystemIO

public SystemIO()
Method Detail

readInteger

public static int readInteger(int serviceNumber)
Implements syscall to read an integer value. Client is responsible for catching NumberFormatException.

Parameters:
serviceNumber - the number assigned to Read Int syscall (default 5)
Returns:
int value corresponding to user input

readFloat

public static float readFloat(int serviceNumber)
Implements syscall to read a float value. Client is responsible for catching NumberFormatException.

Parameters:
serviceNumber - the number assigned to Read Float syscall (default 6)
Returns:
float value corresponding to user input Feb 14 2005 Ken Vollmar

readDouble

public static double readDouble(int serviceNumber)
Implements syscall to read a double value. Client is responsible for catching NumberFormatException.

Parameters:
serviceNumber - the number assigned to Read Double syscall (default 7)
Returns:
double value corresponding to user input 1 Aug 2005 DPS, based on Ken Vollmar's readFloat

printString

public static void printString(String string)
Implements syscall having 4 in $v0, to print a string.


readString

public static String readString(int serviceNumber,
                                int maxLength)
Implements syscall to read a string.

Parameters:
serviceNumber - the number assigned to Read String syscall (default 8)
maxLength - the maximum string length
Returns:
the entered string, truncated to maximum length if necessary

readChar

public static int readChar(int serviceNumber)
Implements syscall having 12 in $v0, to read a char value.

Parameters:
serviceNumber - the number assigned to Read Char syscall (default 12)
Returns:
int value with lowest byte corresponding to user input

writeToFile

public static int writeToFile(int fd,
                              byte[] myBuffer,
                              int lengthRequested)
Write bytes to file.

Parameters:
fd - file descriptor
myBuffer - byte array containing characters to write
lengthRequested - number of bytes to write
Returns:
number of bytes written, or -1 on error

readFromFile

public static int readFromFile(int fd,
                               byte[] myBuffer,
                               int lengthRequested)
Read bytes from file.

Parameters:
fd - file descriptor
myBuffer - byte array to contain bytes read
lengthRequested - number of bytes to read
Returns:
number of bytes read, 0 on EOF, or -1 on error

openFile

public static int openFile(String filename,
                           int flags)
Open a file for either reading or writing. Note that read/write flag is NOT IMPLEMENTED. Also note that file permission modes are also NOT IMPLEMENTED.

Parameters:
filename - string containing filename
flag - 0 for read, 1 for write
Returns:
file descriptor in the range 0 to SYSCALL_MAXFILES-1, or -1 if error

closeFile

public static void closeFile(int fd)
Close the file with specified file descriptor

Parameters:
fd - the file descriptor of an open file

resetFiles

public static void resetFiles()
Reset all files -- clears out the file descriptor table.


getFileErrorMessage

public static String getFileErrorMessage()
Retrieve file operation or error message

Returns:
string containing message