1
0
Files
otyaSMILEBASIC/SMILEBASIC/systemvariable.d
2017-07-09 23:39:07 +09:00

160 lines
3.3 KiB
D

module otya.smilebasic.systemvariable;
import otya.smilebasic.type;
import otya.smilebasic.error;
import otya.smilebasic.vm;
class SystemVariable
{
VM vm;
@property
abstract Value value();
@property
void value(Value value)
{
//v3.3.2
//TIME$=1,TIME$="1"=>Type mismatch(runtime)
//MAINCNT=1,MAINCNT="1"=>Syntax error(runtime)
throw new TypeMismatch();
}
}
import std.datetime;
import std.string;
import std.conv;
class Date : SystemVariable
{
@property
override Value value()
{
auto currentTime = Clock.currTime();
wstring timeString = format("%04d/%02d/%02d", currentTime.year, currentTime.month, currentTime.day).to!wstring;
return Value(timeString);
}
}
class Time : SystemVariable
{
@property
override Value value()
{
auto currentTime = Clock.currTime();
wstring timeString = format("%02d:%02d:%02d", currentTime.hour, currentTime.minute, currentTime.second).to!wstring;
return Value(timeString);
}
}
class Maincnt : SystemVariable
{
@property
override Value value()
{
return Value(vm.petitcomputer.maincnt);
}
}
class CSRX : SystemVariable
{
@property
override Value value()
{
return Value(vm.petitcomputer.console.CSRX);
}
}
class CSRY : SystemVariable
{
@property
override Value value()
{
return Value(vm.petitcomputer.console.CSRY);
}
}
class CSRZ : SystemVariable
{
@property
override Value value()
{
return Value(vm.petitcomputer.console.CSRZ);
}
}
class TabStep : SystemVariable
{
@property
override Value value()
{
return Value(vm.petitcomputer.console.TABSTEP);
}
@property
override void value(Value value)
{
if(!value.isNumber)
{
throw new TypeMismatch();
}
int i = value.castInteger;
if(i < 0 || i > 16)
{
throw new OutOfRange();
}
vm.petitcomputer.console.TABSTEP = i;
}
}
class Version : SystemVariable
{
@property
override Value value()
{
return Value(vm.petitcomputer.version_);
}
}
class FreeMem : SystemVariable
{
@property
override Value value()
{
return Value(8327164);
}
}
class Result : SystemVariable
{
@property
override Value value()
{
return Value(vm.petitcomputer.project.result);
}
}
class Hardware : SystemVariable
{
@property
override Value value()
{
return Value(cast(int)vm.petitcomputer.hardware);
}
}
class MilliSecond : SystemVariable
{
@property
override Value value()
{
import derelict.sdl2.sdl;
return Value(cast(int)SDL_GetTicks());
}
}
class ProgramSlot : SystemVariable
{
@property
override Value value()
{
return Value(vm.petitcomputer.program.currentSlot);
}
}
class CallIndex : SystemVariable
{
@property override Value value()
{
return Value(vm.petitcomputer.callidx);
}
}
class Zero : SystemVariable
{
@property override Value value()
{
return Value(0);
}
}