diff --git a/.idea/artifacts/ide_jar.xml b/.idea/artifacts/ide_jar.xml
new file mode 100644
index 0000000..3333997
--- /dev/null
+++ b/.idea/artifacts/ide_jar.xml
@@ -0,0 +1,18 @@
+
+
+ $PROJECT_DIR$/out/artifacts/ide_jar
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/befunge/src/main/kotlin/befide/befunge/b93/B93Interpreter.kt b/befunge/src/main/kotlin/befide/befunge/b93/B93Interpreter.kt
index 9f73f8c..e8c999f 100644
--- a/befunge/src/main/kotlin/befide/befunge/b93/B93Interpreter.kt
+++ b/befunge/src/main/kotlin/befide/befunge/b93/B93Interpreter.kt
@@ -29,7 +29,7 @@ class B93Interpreter : Interpreter {
override val stdInput = LinkedList()
override val stdOutput = LinkedList()
private var outBuf: StringBuffer = StringBuffer()
- private var bufLimit = 10
+ private var bufLimit = 0
private val fungeMods = HashMap()
diff --git a/ide/src/main/kotlin/befide/ide/ActionView.kt b/ide/src/main/kotlin/befide/ide/ActionView.kt
index 29475a7..616b952 100644
--- a/ide/src/main/kotlin/befide/ide/ActionView.kt
+++ b/ide/src/main/kotlin/befide/ide/ActionView.kt
@@ -3,8 +3,11 @@ package befide.ide
import befide.befunge.core.Interpreter
import javafx.animation.Animation
import javafx.animation.Timeline
+import javafx.beans.property.SimpleBooleanProperty
import javafx.util.Duration
import tornadofx.*
+import tornadofx.getValue
+import tornadofx.setValue
class ActionView(val interp: Interpreter, val codeView: CodeView, val ioView: IOView) : View() {
var runTimeline: Timeline = timeline(false) {
@@ -19,55 +22,87 @@ class ActionView(val interp: Interpreter, val codeView: CodeView, val ioView: IO
cycleCount = Animation.INDEFINITE
}
+ val isRunningProperty = SimpleBooleanProperty(false)
+ var isRunning by isRunningProperty
+
+ val canResetProperty = SimpleBooleanProperty(false)
+ var canReset by canResetProperty
+
+ fun start(rate: Double) {
+ stop()
+
+ isRunning = true
+ canReset = true
+
+ interp.funge.values = codeView.values
+
+ runTimeline.rate = rate
+ runTimeline.playFromStart()
+ }
+
+ fun step() {
+ canReset = true
+
+ interp.funge.values = codeView.values
+
+ interp.step()
+ }
+
+ fun stop() {
+ isRunning = false
+
+ runTimeline.stop()
+ }
+
+ fun reset() {
+ stop()
+ interp.reset()
+ ioView.reset()
+ canReset = false
+ }
+
+ fun clearCode() {
+ reset()
+ codeView.clear()
+ }
+
override val root = hbox {
button("step") {
- setOnAction {
- interp.funge.values = codeView.values
-
- interp.step()
- }
+ setOnAction { step() }
+ disableWhen(isRunningProperty)
}
- button("reset") {
- setOnAction {
- interp.reset()
- ioView.reset()
-
- codeView.values = interp.funge.values
- }
- }
+ separator { }
button("run") {
- setOnAction {
- interp.funge.values = codeView.values
-
- runTimeline.rate = 10000.0
- runTimeline.playFromStart()
- }
+ setOnAction { start(10000.0) }
}
button("walk") {
- setOnAction {
- interp.funge.values = codeView.values
-
- runTimeline.rate = 50.0
- runTimeline.playFromStart()
- }
+ setOnAction { start(50.0) }
}
button("crawl") {
- setOnAction {
- interp.funge.values = codeView.values
-
- runTimeline.rate = 4.0
- runTimeline.playFromStart()
- }
+ setOnAction { start(4.0) }
}
+ separator {}
+
button("stop") {
- setOnAction {
- runTimeline.stop()
- }
+ setOnAction { stop() }
+ enableWhen(isRunningProperty)
+ }
+
+ spacer()
+
+ button("reset") {
+ setOnAction { reset() }
+ enableWhen(canResetProperty.and(isRunningProperty.not()))
+ }
+
+ button("clear") {
+ setOnAction { clearCode() }
+ disableWhen(isRunningProperty)
}
}
}
\ No newline at end of file
diff --git a/ide/src/main/kotlin/befide/ide/CodeView.kt b/ide/src/main/kotlin/befide/ide/CodeView.kt
index 02333e8..a9ed445 100644
--- a/ide/src/main/kotlin/befide/ide/CodeView.kt
+++ b/ide/src/main/kotlin/befide/ide/CodeView.kt
@@ -50,6 +50,14 @@ class CodeView(val interp: Interpreter) : View() {
cursorPos = interp.funge.nextVec(cursorPos, delta ?: cursorDelta)
}
+ fun clear() {
+ for (row in labels) {
+ for (lbl in row) {
+ lbl.value = Value(' ')
+ }
+ }
+ }
+
var src: String
get() = labels.joinToString("\n") { row ->
row.dropLastWhile { lbl ->
diff --git a/ide/src/main/kotlin/befide/ide/EditorView.kt b/ide/src/main/kotlin/befide/ide/EditorView.kt
index 013c3a9..188536c 100644
--- a/ide/src/main/kotlin/befide/ide/EditorView.kt
+++ b/ide/src/main/kotlin/befide/ide/EditorView.kt
@@ -23,9 +23,11 @@ class EditorView : View("Befide") {
}
init {
- codeView.src = """v ;00000000;
->>>>>>>>>>>>>55+0g68*-90g68*-2*+80g68*-4*+70g68*-8*+v
-@.+***288-*86g03+**88-*86g04+**84-*86g05+**44-*86g06<"""
+ primaryStage.isResizable = false
+
+// codeView.src = """v ;00000000;
+//>>>>>>>>>>>>>55+0g68*-90g68*-2*+80g68*-4*+70g68*-8*+v
+//@.+***288-*86g03+**88-*86g04+**84-*86g05+**44-*86g06<"""
// codeView.src = """ 2>:3g" "-!v\ g30 <
// |!`"O":+1_:.:03p>03g+:"O"`|
diff --git a/ide/src/main/kotlin/befide/ide/Main.kt b/ide/src/main/kotlin/befide/ide/Main.kt
index bb1bf07..a4dee96 100644
--- a/ide/src/main/kotlin/befide/ide/Main.kt
+++ b/ide/src/main/kotlin/befide/ide/Main.kt
@@ -7,3 +7,7 @@ class MainApp : App(EditorView::class) {
importStylesheet(resources["style.css"])
}
}
+
+fun main(args: Array) {
+ launch(args)
+}
\ No newline at end of file
diff --git a/ide/src/main/kotlin/befide/ide/StackView.kt b/ide/src/main/kotlin/befide/ide/StackView.kt
index 554474d..25f2ae2 100644
--- a/ide/src/main/kotlin/befide/ide/StackView.kt
+++ b/ide/src/main/kotlin/befide/ide/StackView.kt
@@ -3,7 +3,12 @@ package befide.ide
import befide.befunge.b93.padEnd
import befide.befunge.core.Interpreter
import befide.befunge.state.Value
+import javafx.beans.property.SimpleListProperty
+import javafx.beans.property.SimpleObjectProperty
import javafx.beans.property.SimpleStringProperty
+import javafx.collections.FXCollections
+import javafx.scene.layout.Priority
+import javafx.scene.text.Font
import tornadofx.*
import tornadofx.getValue
import tornadofx.setValue
@@ -11,39 +16,27 @@ import tornadofx.setValue
class StackView(val interp: Interpreter) : View() {
val charOutProperty = SimpleStringProperty()
var charOut by charOutProperty
- val longOutProperty = SimpleStringProperty()
- var longOut by longOutProperty
-
- override val root = hbox {
- textarea(charOutProperty) {
- maxWidth = 1.0
- paddingHorizontal = 1
- prefRowCount = interp.funge.height
- isEditable = false
- }
- textarea(longOutProperty) {
- prefRowCount = interp.funge.height
- prefWidth = 90.0
- isEditable = false
- }
+ override val root = textarea(charOutProperty) {
+ addClass("stack-pane")
+ prefWidth = 150.0
+ isEditable = false
}
private fun getStackStr(mapping: (Value) -> T): String {
- return interp.stack.takeLast(interp.funge.height)
+ val num = interp.funge.height - 3
+ return interp.stack.takeLast(num)
.map(mapping)
- .padEnd(interp.funge.height, "")
+ .padEnd(num, "")
// .reversed()
.joinToString("\n")
}
init {
- charOut = getStackStr { it.asChar ?: '*' }
- longOut = getStackStr { it.value }
+ charOut = getStackStr { "${it.asChar ?: '\u2022'} (${it.value})" }
- interp.stackChanged += {
- charOut = getStackStr { it.asChar ?: '*' }
- longOut = getStackStr { it.value }
+ interp.stackChanged += { _ ->
+ charOut = getStackStr { "${it.asChar ?: '\u2022'} (${it.value})" }
}
}
}
diff --git a/ide/src/main/resources/META-INF/MANIFEST.MF b/ide/src/main/resources/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e63a41c
--- /dev/null
+++ b/ide/src/main/resources/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Main-Class: befide.ide.MainApp
+
diff --git a/ide/src/main/resources/befide/ide/style.css b/ide/src/main/resources/befide/ide/style.css
index c5476d1..6b5fe11 100644
--- a/ide/src/main/resources/befide/ide/style.css
+++ b/ide/src/main/resources/befide/ide/style.css
@@ -3,7 +3,7 @@
-fx-font-fill: black;
}
-.code, .text-area {
+.code, .text-area, .stack-pane {
-fx-font-family: Consolas, monospace;
-fx-text-fill: black;
-fx-font-size: 18;
@@ -14,7 +14,6 @@
-fx-border-radius: 2px;
-fx-border-width: 1px;
-fx-background-color: #fff;
- -fx-graphic: none;
}
.code-num {