From 0ecd188533b85fc71a0a8c972e0f7218adb5f6f9 Mon Sep 17 00:00:00 2001 From: otya128 Date: Wed, 19 Aug 2015 11:51:08 +0900 Subject: [PATCH] =?UTF-8?q?=E3=82=B9=E3=83=9A=E3=83=BC=E3=82=B9=E3=81=97?= =?UTF-8?q?=E3=81=8B=E5=85=A5=E3=82=8C=E3=81=A6=E3=81=84=E3=81=AA=E3=81=84?= =?UTF-8?q?=E6=99=82=E3=81=AEINPUT=E3=81=AE=E6=8C=99=E5=8B=95=E3=82=92?= =?UTF-8?q?=E5=AE=9F=E8=A3=85.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SMILEBASIC/TEST.txt | 1 + SMILEBASIC/VM.d | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/SMILEBASIC/TEST.txt b/SMILEBASIC/TEST.txt index d08e8ab..0d80b75 100644 --- a/SMILEBASIC/TEST.txt +++ b/SMILEBASIC/TEST.txt @@ -79,6 +79,7 @@ DEF ONGOSUBTEST RETURN @4 END +INPUT$="HELLO" INPUT INPUT$,IN ?INPUT$,IN @DATA_1 diff --git a/SMILEBASIC/VM.d b/SMILEBASIC/VM.d index 4c01cc6..8b420d3 100644 --- a/SMILEBASIC/VM.d +++ b/SMILEBASIC/VM.d @@ -1048,8 +1048,15 @@ class InputCode : Code type = new ValueType[count]; output = new Value[count]; } + void exit(int save_SP, VM vm) + { + for(int i = save_SP - 1, j = vm.stacki; i > vm.stacki && j <= save_SP; i--, j++) + std.algorithm.swap(vm.stack[i], vm.stack[j]); + vm.stacki = save_SP; + } override void execute(VM vm) { + int save_SP = vm.stacki; for(int i = 0; i < count; i++) { Value v; @@ -1066,6 +1073,19 @@ class InputCode : Code wstring input = vm.petitcomputer.input("", false); wstring[] split = input.split(","); error = false; + if(split.length == 0) + { + //スペース以外何も与えないと値を書き換えずに終了する + exit(save_SP, vm); + break; + } + munch(split[0], " "); + if(split[0].length == 0) + { + //スペース以外何も与えないと値を書き換えずに終了する + exit(save_SP, vm); + break; + } if(split.length < count) { error = true;