monke flip. (ditched exitProcess, now we using fucking callbacks)

This commit is contained in:
2026-03-20 21:11:53 +03:00
parent 60ca2d38f9
commit b69c6cd0dc
7 changed files with 24 additions and 23 deletions
+6
View File
@@ -1,10 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings"> <component name="GradleSettings">
<option name="linkedExternalProjectsSettings"> <option name="linkedExternalProjectsSettings">
<GradleProjectSettings> <GradleProjectSettings>
<option name="externalProjectPath" value="$PROJECT_DIR$" /> <option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleHome" value="" /> <option name="gradleHome" value="" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
</set>
</option>
</GradleProjectSettings> </GradleProjectSettings>
</option> </option>
</component> </component>
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="KotlinJpsPluginSettings"> <component name="KotlinJpsPluginSettings">
<option name="version" value="2.1.20" /> <option name="version" value="2.0.21" />
</component> </component>
</project> </project>
+3
View File
@@ -1,6 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" /> <component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="FrameworkDetectionExcludesConfiguration">
<file type="web" url="file://$PROJECT_DIR$" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="corretto-17" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="corretto-17" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" /> <output url="file://$PROJECT_DIR$/out" />
</component> </component>
+8 -14
View File
@@ -48,23 +48,18 @@ fun main(args: Array<String>) {
* @param invoker инвокер команд * @param invoker инвокер команд
*/ */
fun runRepl(inputManager: InputManager, invoker: CommandInvoker) { fun runRepl(inputManager: InputManager, invoker: CommandInvoker) {
var isRunning: Boolean = true var isRunning = true
// exitProcess мне нравился больше
invoker.register(ExitCommand { isRunning = false })
while (isRunning) { while (isRunning) {
val line = inputManager.readLine() ?: break
val line = inputManager.readLine()
// EOF — завершаем без сохранения
if (line == null) {
println("\nНу ладно.")
isRunning = false
continue
}
if (line.isBlank()) continue if (line.isBlank()) continue
invoker.execute(line) invoker.execute(line)
} }
println("\nНу ладно.")
} }
/** /**
@@ -93,7 +88,6 @@ fun registerCommands(
ClearCommand(manager), ClearCommand(manager),
SaveCommand(manager, fileManager), SaveCommand(manager, fileManager),
ExecuteScriptCommand(invoker), ExecuteScriptCommand(invoker),
ExitCommand(),
AddIfMaxCommand(manager, inputManager), AddIfMaxCommand(manager, inputManager),
AddIfMinCommand(manager, inputManager), AddIfMinCommand(manager, inputManager),
HistoryCommand(invoker), HistoryCommand(invoker),
@@ -28,7 +28,6 @@ class ExecuteScriptCommand(private val invoker: CommandInvoker) : Command {
println("Чтение скрипта '$filePath'...") println("Чтение скрипта '$filePath'...")
val queue = CommandQueue() val queue = CommandQueue()
queue.loadFromScript(filePath) queue.loadFromScript(filePath)
println("Команды в очереди: ${queue.peek()}") // временно
if (queue.isEmpty()) { if (queue.isEmpty()) {
println("Текст Скриптонита пустой или не найден.") println("Текст Скриптонита пустой или не найден.")
+5 -7
View File
@@ -1,16 +1,14 @@
package commands package commands
import kotlin.system.exitProcess
/** /**
* Завершает программу без сохранения. * Завершает программу без сохранения. Теперь это Callback
*/ */
class ExitCommand : Command { class ExitCommand(private val onExit: () -> Unit) : Command {
override val name = "exit" override val name = "exit"
override val description = "завершить программу (без сохранения)" override val description = "завершить программу"
override fun execute(args: List<String>) { override fun execute(args: List<String>) {
println("Завершение работы.") println("До свидания!")
exitProcess(0) //nizya onExit()
} }
} }
+1
View File
@@ -60,6 +60,7 @@ class CommandQueue {
visitedScripts.add(filePath) visitedScripts.add(filePath)
// Лениво читаю файл, пока Сканер не вернет null, т.е. файл закончится
Scanner(file, Charsets.UTF_8).use { scanner -> Scanner(file, Charsets.UTF_8).use { scanner ->
generateSequence { if (scanner.hasNextLine()) scanner.nextLine() else null } generateSequence { if (scanner.hasNextLine()) scanner.nextLine() else null }
.map { it.trim() } .map { it.trim() }