コマンドライン引数を使うようにした
This commit is contained in:
@@ -5,127 +5,17 @@ import std.file;
|
|||||||
import otya.smilebasic.parser;
|
import otya.smilebasic.parser;
|
||||||
import otya.smilebasic.error;
|
import otya.smilebasic.error;
|
||||||
import otya.smilebasic.petitcomputer;
|
import otya.smilebasic.petitcomputer;
|
||||||
|
import std.getopt;
|
||||||
|
|
||||||
int main(string[] argv)
|
int main(string[] argv)
|
||||||
{
|
{
|
||||||
version(none)
|
bool nodirectmode;
|
||||||
{
|
string inputfile;
|
||||||
auto parser = new Parser("ADD(ADD(1,2,3,4,5,6),2,3,4,5,6)");
|
auto helpInformation = getopt(argv, "no-direct-mode", &nodirectmode, "file", &inputfile);
|
||||||
writeln(parser.calc());
|
|
||||||
}
|
|
||||||
|
|
||||||
version(none)
|
|
||||||
{
|
|
||||||
auto parser = new Parser(
|
|
||||||
//"@A\nA=1+2+3+4\nPRINT 1+1,2+3;10-5,A:A=A*2 PRINT A
|
|
||||||
"
|
|
||||||
TEST2 6,7,8 OUT K,L,M
|
|
||||||
?K,L,M
|
|
||||||
IF 1 THEN PRINT 2
|
|
||||||
IF 0 THEN PRINT 4 ELSE PRINT 5
|
|
||||||
IF 0 THEN
|
|
||||||
PRINT 111
|
|
||||||
ELSE
|
|
||||||
PRINT 222
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
FOR I=-2 TO -9 STEP -2
|
|
||||||
PRINT I
|
|
||||||
NEXT
|
|
||||||
?I
|
|
||||||
?\"Hello, World!!\"
|
|
||||||
?\"A\"*4
|
|
||||||
FOR I=0 TO 100
|
|
||||||
IF I MOD 3==0 AND I MOD 5==0 THEN
|
|
||||||
?\"FIZZBUZZ\"
|
|
||||||
ELSE
|
|
||||||
IF I MOD 3==0 THEN
|
|
||||||
?\"FIZZ\"
|
|
||||||
ELSE
|
|
||||||
IF I MOD 5==0 THEN
|
|
||||||
?\"BUZZ\"
|
|
||||||
ELSE
|
|
||||||
?I
|
|
||||||
ENDIF
|
|
||||||
ENDIF
|
|
||||||
ENDIF
|
|
||||||
NEXT
|
|
||||||
?1 AND 1 OR 1 AND 0
|
|
||||||
?(1 OR 2 XOR 3)
|
|
||||||
?(1 OR 2 XOR 3 OR 4)
|
|
||||||
?@HELLOWORLD
|
|
||||||
FOR I=0 TO 10
|
|
||||||
IF I==4 THEN BREAK
|
|
||||||
IF I==1 THEN CONTINUE
|
|
||||||
?I
|
|
||||||
NEXT
|
|
||||||
VAR V[10,10]
|
|
||||||
V[0,1]=12
|
|
||||||
?V[0,1]
|
|
||||||
?\"ABC\"[1][0]
|
|
||||||
?1/2
|
|
||||||
GOSUB @A
|
|
||||||
?A()
|
|
||||||
?B(1,2,3)
|
|
||||||
FOR I=0 TO 10
|
|
||||||
?I;\"!\",\"=\",FACT(I)
|
|
||||||
NEXT
|
|
||||||
TEST \"HELLO\",\",\",\"WORLD\"
|
|
||||||
TEST2 6,7,8 OUT K,L,M
|
|
||||||
?K,L,M
|
|
||||||
FACT 10 OUT F
|
|
||||||
?F
|
|
||||||
END
|
|
||||||
@A
|
|
||||||
?\"SUBROUTINE TEST\"
|
|
||||||
RETURN
|
|
||||||
DEF A()
|
|
||||||
?\"FUNCTION A\"
|
|
||||||
RETURN 1
|
|
||||||
END
|
|
||||||
DEF B(A,B[],C)
|
|
||||||
LOCAL=123
|
|
||||||
?\"FUNCTION B\",A,B,C
|
|
||||||
?LOCAL
|
|
||||||
RETURN -1
|
|
||||||
END
|
|
||||||
DEF FACT(N)
|
|
||||||
IF N<=1 THEN RETURN 1
|
|
||||||
RETURN N*FACT(N-1)
|
|
||||||
END
|
|
||||||
DEF TEST A,B,C
|
|
||||||
?\"TEST\",A,B,C
|
|
||||||
RETURN
|
|
||||||
END
|
|
||||||
?\"CHECK\"
|
|
||||||
DEF TEST2 A,B,C OUT D,E,F
|
|
||||||
?\"TEST2\",A,B,C
|
|
||||||
F=C
|
|
||||||
F=C
|
|
||||||
D=A
|
|
||||||
E=B
|
|
||||||
?F
|
|
||||||
RETURN
|
|
||||||
END
|
|
||||||
");
|
|
||||||
version(none) auto parser = new Parser(readText("FIZZBUZZ.TXT").to!wstring);
|
|
||||||
auto vm = parser.compile();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
vm.run();
|
|
||||||
}
|
|
||||||
catch(SmileBasicError sbe)
|
|
||||||
{
|
|
||||||
writeln(sbe);
|
|
||||||
}
|
|
||||||
catch(Throwable t)
|
|
||||||
{
|
|
||||||
writeln(t);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//try
|
//try
|
||||||
{
|
{
|
||||||
auto pc = new PetitComputer();
|
auto pc = new PetitComputer();
|
||||||
pc.run();
|
pc.run(nodirectmode, inputfile);
|
||||||
}
|
}
|
||||||
/*(Throwable t)
|
/*(Throwable t)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1131,7 +1131,7 @@ class PetitComputer
|
|||||||
}
|
}
|
||||||
Slot[] slot;
|
Slot[] slot;
|
||||||
bool isRunningDirectMode = false;
|
bool isRunningDirectMode = false;
|
||||||
void run()
|
void run(bool nodirectmode = false, string inputfile = "")
|
||||||
{
|
{
|
||||||
slot = new Slot[5];
|
slot = new Slot[5];
|
||||||
keybuffer = new Key[128];
|
keybuffer = new Key[128];
|
||||||
@@ -1174,59 +1174,10 @@ class PetitComputer
|
|||||||
}
|
}
|
||||||
//デバッグ用
|
//デバッグ用
|
||||||
version(NDirectMode)
|
version(NDirectMode)
|
||||||
|
nodirectmode = true;
|
||||||
|
if (nodirectmode)
|
||||||
{
|
{
|
||||||
slot[0].load(readText("./TEST.TXT").to!wstring);
|
slot[0].load(readText(inputfile).to!wstring);
|
||||||
version(none)
|
|
||||||
parser = new Parser(
|
|
||||||
//readText("./SYS/GAME6TALK.TXT").to!wstring
|
|
||||||
//readText("./SYS/GAME7EXPAD.TXT").to!wstring
|
|
||||||
//readText("./SYS/GAME4SHOOTER.TXT").to!wstring
|
|
||||||
//readText("./SYS/GAME2RPG.TXT").to!wstring
|
|
||||||
//readText("./SYS/GAME1DOTRC.TXT").to!wstring
|
|
||||||
//readText(input("LOAD PROGRAM:", true).to!string).to!wstring
|
|
||||||
//readText("./SYS/EX8TECDEMO.TXT").to!wstring
|
|
||||||
//readText("./SYS/EX1TEXT.TXT").to!wstring
|
|
||||||
//readText("FIZZBUZZ.TXT").to!wstring
|
|
||||||
//readText("TEST.TXT").to!wstring
|
|
||||||
/*"?ABS(-1)
|
|
||||||
LOCATE 0,10
|
|
||||||
COLOR 5
|
|
||||||
FOR I=0 TO 10
|
|
||||||
?I;\"!\",\"=\",FACT(I)
|
|
||||||
NEXT
|
|
||||||
DEF FACT(N)
|
|
||||||
IF N<=1 THEN RETURN 1
|
|
||||||
RETURN N*FACT(N-1)
|
|
||||||
END"*/
|
|
||||||
/*
|
|
||||||
`CLS : CL=0 : Z=0
|
|
||||||
WHILE 1
|
|
||||||
INC Z : IF Z>200 THEN Z=0
|
|
||||||
FOR I=0 TO 15
|
|
||||||
LOCATE 9,4+I,Z : COLOR (CL+I) MOD 16
|
|
||||||
PRINT "★ 梅雨で雨が多い季節ですね ★"
|
|
||||||
NEXT
|
|
||||||
CL=(CL+1) MOD 16
|
|
||||||
WEND`*/
|
|
||||||
/*
|
|
||||||
`CLS : CL=0
|
|
||||||
WHILE 1
|
|
||||||
FOR I=0 TO 15
|
|
||||||
LOCATE 9,4+I : COLOR (CL+I) MOD 16
|
|
||||||
PRINT "Ё プチコン3ゴウ Ж"
|
|
||||||
NEXT
|
|
||||||
CL=(CL+1) MOD 16 : VSYNC 1
|
|
||||||
WEND`
|
|
||||||
/*
|
|
||||||
`CLS : CL=0
|
|
||||||
@LOOP
|
|
||||||
FOR I=0 TO 15
|
|
||||||
LOCATE 9,4+I : COLOR (CL+I) MOD 16
|
|
||||||
PRINT "Ё プチコン3ゴウ Ж"
|
|
||||||
NEXT
|
|
||||||
CL=(CL+1) MOD 16 : VSYNC 1
|
|
||||||
GOTO @LOOP`*/
|
|
||||||
);
|
|
||||||
runSlot(0);
|
runSlot(0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user