generated from rnentjes/kotlin-server-web-undertow
Remove legacy JVM-specific file system, shell, and related implementations; migrate to platform-agnostic and common main modules.
This commit is contained in:
57
src/commonMain/kotlin/mtmc/os/shell/builtins/SetCommand.kt
Normal file
57
src/commonMain/kotlin/mtmc/os/shell/builtins/SetCommand.kt
Normal file
@@ -0,0 +1,57 @@
|
||||
package mtmc.os.shell.builtins
|
||||
|
||||
import mtmc.emulator.MonTanaMiniComputer
|
||||
import mtmc.emulator.Register
|
||||
import mtmc.os.shell.ShellCommand
|
||||
import mtmc.tokenizer.MTMCToken
|
||||
import mtmc.tokenizer.MTMCTokenizer
|
||||
|
||||
class SetCommand : ShellCommand() {
|
||||
@Throws(Exception::class)
|
||||
public override fun exec(tokens: MTMCTokenizer, computer: MonTanaMiniComputer) {
|
||||
val memLocation = tokens.matchAndConsume(
|
||||
MTMCToken.TokenType.INTEGER,
|
||||
MTMCToken.TokenType.HEX,
|
||||
MTMCToken.TokenType.BINARY
|
||||
)
|
||||
if (memLocation == null) {
|
||||
val register = tokens.matchAndConsume(MTMCToken.TokenType.IDENTIFIER)
|
||||
if (register == null) usageException()
|
||||
val value = tokens.matchAndConsume(
|
||||
MTMCToken.TokenType.INTEGER,
|
||||
MTMCToken.TokenType.HEX,
|
||||
MTMCToken.TokenType.BINARY
|
||||
)
|
||||
if (value == null) usageException()
|
||||
val reg = Register.toInteger(register!!.stringValue())
|
||||
if (reg >= 0) {
|
||||
computer.setRegisterValue(reg, value!!.intValue())
|
||||
} else {
|
||||
throw IllegalArgumentException("Bad register: " + register.stringValue())
|
||||
}
|
||||
} else {
|
||||
val value = tokens.matchAndConsume(
|
||||
MTMCToken.TokenType.INTEGER,
|
||||
MTMCToken.TokenType.HEX,
|
||||
MTMCToken.TokenType.BINARY,
|
||||
MTMCToken.TokenType.STRING
|
||||
)
|
||||
if (value == null) usageException()
|
||||
if (value?.type === MTMCToken.TokenType.INTEGER || value?.type === MTMCToken.TokenType.BINARY || value?.type === MTMCToken.TokenType.HEX) {
|
||||
computer.writeWordToMemory(memLocation.intValue(), value.intValue())
|
||||
} else {
|
||||
computer.writeStringToMemory(
|
||||
memLocation.intValue(),
|
||||
value!!.stringValue().encodeToByteArray()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override val help: String
|
||||
get() = """
|
||||
set <loc> <value>- sets a memory location value
|
||||
loc: a register name or memory location
|
||||
value: an integer, hex or binary value, or, for memory locations, a quoted string
|
||||
""".trimIndent()
|
||||
}
|
||||
Reference in New Issue
Block a user