1
0

コマンドライン引数を使うようにした

This commit is contained in:
otya128
2016-09-02 22:04:28 +09:00
parent 1bfb655e74
commit 820009bfb5
2 changed files with 10 additions and 169 deletions

View File

@@ -5,127 +5,17 @@ import std.file;
import otya.smilebasic.parser;
import otya.smilebasic.error;
import otya.smilebasic.petitcomputer;
import std.getopt;
int main(string[] argv)
{
version(none)
{
auto parser = new Parser("ADD(ADD(1,2,3,4,5,6),2,3,4,5,6)");
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);
}
}
bool nodirectmode;
string inputfile;
auto helpInformation = getopt(argv, "no-direct-mode", &nodirectmode, "file", &inputfile);
//try
{
auto pc = new PetitComputer();
pc.run();
pc.run(nodirectmode, inputfile);
}
/*(Throwable t)
{

View File

@@ -1131,7 +1131,7 @@ class PetitComputer
}
Slot[] slot;
bool isRunningDirectMode = false;
void run()
void run(bool nodirectmode = false, string inputfile = "")
{
slot = new Slot[5];
keybuffer = new Key[128];
@@ -1174,59 +1174,10 @@ class PetitComputer
}
//デバッグ用
version(NDirectMode)
nodirectmode = true;
if (nodirectmode)
{
slot[0].load(readText("./TEST.TXT").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`*/
);
slot[0].load(readText(inputfile).to!wstring);
runSlot(0);
}
else