37#include "../base/Variant.h"
38#include "../base/PList.h"
39#include "../base/PComplexData.h"
40#include "../base/PNode.h"
41#include "../base/grammar.tab.hpp"
43#ifdef PEBL_ITERATIVE_EVAL
44#include "../base/Evaluator-es.h"
45#include "../devices/PEventLoop-es.h"
47#include "../base/Evaluator.h"
48#include "../devices/PEventLoop.h"
51#include "../utility/PError.h"
52#include "../utility/PEBLUtility.h"
53#include "../utility/rc_ptrs.h"
55#include "../devices/PTimer.h"
56#include "../devices/DeviceState.h"
59#include "../objects/PTextBox.h"
62#include "../platforms/validator/PlatformTimer.h"
63#include "../platforms/validator/PlatformKeyboard.h"
64#include "../platforms/validator/PlatformTextBox.h"
65#include "../platforms/validator/PlatformEventQueue.h"
67#include "../platforms/sdl/PlatformTimer.h"
68#include "../platforms/sdl/PlatformKeyboard.h"
69#include "../platforms/sdl/PlatformTextBox.h"
70#include "../platforms/sdl/PlatformEventQueue.h"
72#include "../platforms/sdl/PlatformMovie.h"
80#if defined(PEBL_WIN32)
137 long unsigned int secs;
138 long unsigned int msecs;
163 int delay = plist->
First();
170 string funcname =
"";
190 std::string mystring = plist->
First();
206 string mystring = plist->
First();
233 int val = plist->
First();
278 string mystring = plist->
First();
288 string funcname =
"";
311 string mystring = plist->
First();
321 string funcname =
"";
348 string funcname =
"";
374 string mystring = plist->
First();
390 string funcname =
"";
416 string mystring = plist->
First();
429 string funcname =
"";
456 string funcname =
"";
489 string funcname =
"";
509 int delay = plist->
First();
526 string funcname =
"";
565 int delay = plist->
First();
584 string funcname =
"";
631 PError::AssertType(v1,
PEAT_LIST,
"Argument error in first parameter of function [WaitForListKeyPressWithTimeout(<list-of-keys>,<timeout>,<style>)]: ");
637 PError::AssertType(plist->
Nth(2),
PEAT_NUMBER,
"Argument error in second parameter of function [WaitForListKeyPressWithTimeout(<list-of-keys>,<timeout>,<style>)]: ");
638 int delay = plist->
Nth(2);
649 std::vector<Variant>::iterator p = keylist->
Begin();
650 std::vector<Variant>::iterator end = keylist->
End();
653 string funcname =
"";
722 std::vector<Variant>::iterator p = keylist->
Begin();
723 std::vector<Variant>::iterator end = keylist->
End();
727 string funcname =
"";
792 std::vector<Variant>::iterator p = keylist->
Begin();
793 std::vector<Variant>::iterator end = keylist->
End();
796 string funcname =
"";
850 string exitString = plist->
Nth(2);
860 string funcname =
"";
885 keypressstate =
NULL;
892 texteditstate =
NULL;
1045 int x = plist->
Nth(2);
1050 int y = plist->
Nth(3);
1074 string funcname =
"";
1110 buttonstate =
Variant(
"<pressed>");
1114 buttonstate =
Variant(
"<released>");
1133 Variant buttonstate =
"<wheel>";
1165 int delay = plist->
First();
1189 string funcname =
"";
1219 buttonstate =
Variant(
"<pressed>");
1221 buttonstate =
Variant(
"<released>");
1240 Variant buttonstate =
"<wheel>";
1280 int x = plist->
First();
1285 int y =plist->
Nth(2);
1311 int id = plist->
First();
1381 unsigned int button = (
unsigned int)(
int)(plist->
Nth(2));
1398 unsigned int axis = (
unsigned int)(
int)(plist->
Nth(2));
1415 unsigned int hat = (
unsigned int)(
int)(plist->
First());
1431 unsigned int button = (
unsigned int)(
int)(plist->
Nth(2));
1480 if(mystring ==
"<KEY_PRESS>")
1486 else if(mystring ==
"<KEY_RELEASE>")
1493 }
else if(mystring ==
"<TEXT_INPUT>")
1500 }
else if(mystring ==
"<MOUSE_MOVEMENT>")
1507 }
else if(mystring ==
"<MOUSE_BUTTON>")
1518 }
else if(mystring ==
"<MOUSE_BUTTON_PRESS>")
1524 }
else if(mystring ==
"<MOUSE_BUTTON_RELEASE>")
1530 }
else if(mystring==
"<TIMER>")
1541 }
else if(mystring ==
"<WINDOW_RESIZE>")
1548 }
else if (mystring ==
"<JOYSTICK_BUTTON>")
1554 }
else if (mystring ==
"<JOYSTICK_HAT>")
1561 }
else if (mystring ==
"<JOYSTICK_AXIS>")
1567 }
else if (mystring ==
"<JOYSTICK_BALL>")
1591 Variant v1,v2,v11,v12,v21,v22;
1626 v1 = myList->
First();
1627 v2 = myList->
Nth(2);
1639 v11 = sublist1->
First();
1640 v12 = sublist1->
Nth(2);
1641 v21 = sublist2->
First();
1642 v22 = sublist2->
Nth(2);
1700 "Error in 4th argument of function [RegisterEvent(<device>,<interface>,valuerange,comparison,<function>,<fval>)]: ");
1710 if(test ==
"<NOTEQUAL>")
1714 else if(test ==
"<EQUAL>")
1718 else if(test ==
"<LESSTHAN>")
1722 else if(test ==
"<GREATERTHAN>")
1726 else if(test ==
"<LEQ>")
1730 else if( test ==
"<GEQ>")
1734 else if(test ==
"<TRUE>")
1738 else if(test ==
"<FALSE>")
1753 if(test ==
"<INSIDE>")
1757 else if(test ==
"<OUTSIDE>")
1761 else if (test ==
"<TRUE>")
1765 else if (test ==
"<FALSE>")
1769 else if( test ==
"<ON_EDGE>")
1773 else if(test ==
"<NOT_INSIDE>")
1777 else if(test ==
"<NOT_OUTSIDE>")
1807 device, devicetype);
1814 state =
new IntervalState((
int)v1,(
int)v2, dtype, (
int)intface, device, devicetype);
1818 state =
new RegionState((
int)v11, (
int)v12, (
int)v21, (
int)v22, dtype, (
int)intface, device, devicetype);
1919 buttonstate =
Variant(
"<pressed>");
1923 buttonstate =
Variant(
"<released>");
1953 Variant buttonstate =
"<wheel>";
2004 "Argument error in first argument of function [CallFunction(<fname>,[<paramlist>])]: ");
2006 "Argument error in second argument of function [CallFunction(<fname>,[<paramlist>])]: ");
2019 std::vector<Variant>::iterator a = arglist->
End();
2021 while(a != arglist->
Begin())
2028 rest =
new OpNode(PEBL_VARLIST,valuenode,rest,
"<CALLBACK>",0);
2041 if(node->
GetOp()==PEBL_LAMBDAFUNCTION)
2051#ifdef PEBL_ITERATIVE_EVAL
2058 OpNode * fnode =
new OpNode(PEBL_FUNCTION, namenode, (
PNode*)argsDataNode,
"user-generated", -1);
2088 delete argsDataNode;
2092 OpNode * fnode =
new OpNode(PEBL_FUNCTION, namenode, arglistnode,
"user-generated", -1);
2107 retval = eval->
Pop();
2121 else if(node->
GetOp()==PEBL_LIBRARYFUNCTION)
2132 PNode * tmpNode =
new DataNode(fname2,
"USER-GENERATED",-1);
2136 OpNode * fnode =
new OpNode(PEBL_FUNCTION, tmpNode, arglistnode,
"user-generated", -1);
2147#ifdef PEBL_ITERATIVE_EVAL
2161 retval = eval->
Pop();
2222 int key = (int)(plist->
First());
2241 string mystring = plist->
First();
2255 rawtime = time(
NULL);
2256 char* timestring = ctime(&rawtime);
2262 while( timestring[pos] !=
'\n' && timestring[pos] !=
'\0')
2266 timestring[pos] =
'\0';
2275#ifdef PEBL_VALIDATOR
2293#ifdef PEBL_VALIDATOR
2317 screen = plist->
First();
2333#if defined(PEBL_EMSCRIPTEN)
2335#elif defined(PEBL_OSX)
2337#elif defined (PEBL_UNIX)
2412 PROCESS_INFORMATION pi =PEBLUtility::SystemCallAndReturn(call.c_str(),args.c_str());
2415 DWORD out = WAIT_TIMEOUT;
2416 while(out == WAIT_TIMEOUT)
2418 out= ::WaitForSingleObject(pi.hProcess, 10);
2420 cout <<
"WAIT_ABANDONED: " << (out == WAIT_ABANDONED) << endl;
2421 cout <<
"WAIT_OBJECT_0: " << (out == WAIT_OBJECT_0) << endl;
2422 cout <<
"WAIT_TIMEOUT: " << (out == WAIT_TIMEOUT) << endl;
2423 cout <<
"WAIT_FAILED: "<< (out == WAIT_FAILED) << endl;
2429 ::CloseHandle(pi.hProcess);
2430 ::CloseHandle(pi.hThread);
2440#if defined(PEBL_UNIX)
2456 std::string fullcmd = call +
" " + args;
2466 else if (pid == 0) {
2468 execl(
"/bin/sh",
"sh",
"-c", fullcmd.c_str(), (
char *)
NULL);
2490#if defined(PEBL_UNIX)
2494 pid_t result = waitpid(pid, &status, WNOHANG);
2500 else if (result == pid) {
2508#elif defined(PEBL_WIN32)
2511 HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
2512 if (hProcess ==
NULL) {
2518 if (GetExitCodeProcess(hProcess, &exitCode)) {
2519 CloseHandle(hProcess);
2520 if (exitCode == STILL_ACTIVE) {
2529 CloseHandle(hProcess);
2634#ifdef PEBL_VALIDATOR
2644#ifdef PEBL_VALIDATOR
2965 long int movietime = myMovie->GetLength();
2971 string funcname =
"";
2980 myMovie->StartPlayback();
@ DT_GREATER_THAN_OR_EQUAL
PlatformEnvironment * myEnv
PlatformEventQueue * gEventQueue
This class has got everything you need to evaluate stuff.
bool Evaluate(const PNode *node)
void NodeStackPush(const PNode *node)
static PEventLoop * mEventLoop
bool IsVariableName(Variant v)
static FunctionMap mFunctionMap
Initiate some static member data.
void CallFunction(const OpNode *node)
counted_ptr< PEBLObjectBase > GetObject() const
PEvent Loop()
Initiates the looping tests.
void RegisterEvent(DeviceState *state, const std::string &function, Variant parameters)
void RegisterState(DeviceState *state, const std::string &function, Variant parameters)
virtual void PushEvent(PEvent &evt)
PEBL_DEVICE_TYPE GetType() const
PEBL_TextInputEvent GetTextInputEvent() const
unsigned long int GetEventTime() const
PEBL_MouseButtonEvent GetMouseButtonEvent() const
PEBL_MouseWheelEvent GetMouseWheelEvent() const
PEBL_KeyboardEvent GetKeyboardEvent() const
PEBL_DummyEvent GetDummyEvent() const
std::vector< Variant >::const_iterator End() const
std::vector< Variant >::const_iterator Begin() const
Variant Nth(unsigned int n)
unsigned long Length() const
void PushBack(const Variant &v)
virtual void DestroyChildren()
virtual std::string GetText() const
Validator platform textbox - no rendering, used only for compilation.
virtual int FindCursorPosition(long int x, long int y)
virtual void HandleKeyPress(int keycode, int modkeys, Uint16 unicode)
virtual void HandleTextInput(std::string input)
virtual void SetEditable(bool val)
bool IsComplexData() const
void SetCreationTime(long unsigned int time)
long unsigned int GetCreationTime() const
bool IsStackSignal() const
std::string GetString() const
PComplexData * GetComplexData() const
bool IsNumber() const
This tests whether the Variant is a number (i.e., a float or an integer.)
The following initiates classes used by functions in the Environment library.
Variant GetDrivers(Variant v)
Variant WaitForAnyKeyDown(Variant v)
Variant GetNumJoystickAxes(Variant v)
Variant GetNumJoystickButtons(Variant v)
Variant WaitForKeyRelease(Variant v)
Variant GetDirectoryListing(Variant v)
Variant RegisterEvent(Variant v)
Variant GetPEBLVersion(Variant v)
Variant IsFileStream(Variant v)
PlatformKeyboard myKeyboard
Variant IsString(Variant v)
Variant MakeDirectory(Variant v)
Variant WaitForKeyDown(Variant v)
Variant IsInteger(Variant v)
Variant WaitForAllKeysUp(Variant v)
Variant StartEventLoop(Variant v)
Variant WaitForListKeyPressWithTimeout(Variant v)
Variant DeleteFile(Variant v)
Variant WaitForAnyKeyPressWithTimeout(Variant v)
Variant GetJoystickButtonState(Variant v)
Variant ShowCursor(Variant v)
Variant FileExists(Variant v)
Variant IsImage(Variant v)
Variant WaitForKeyListDown(Variant v)
Variant IsWidget(Variant v)
Variant IsNumber(Variant v)
Variant GetJoystickHatState(Variant v)
Variant CopyFromClipboard(Variant v)
Variant GetJoystick(Variant v)
Variant IsJoystick(Variant v)
Variant IsList(Variant v)
Variant SystemCallUpdate(Variant v)
Variant IsAudioOut(Variant v)
Variant WaitForKeyUp(Variant v)
Variant GetCursorPosition(Variant v)
Variant SystemCall(Variant v)
Variant IsFont(Variant v)
Variant IsShape(Variant v)
Variant ClearEventLoop(Variant v)
Variant SignalFatalError(Variant v)
Variant GetCurrentScreenResolution(Variant v)
Variant ExitQuietly(Variant v)
Variant GetNumJoystickHats(Variant v)
Variant TimeStamp(Variant v)
Variant WaitForAnyKeyDownWithTimeout(Variant v)
Variant LaunchFile(Variant v)
Variant GetMouseState(Variant v)
Variant TranslateKeyCode(Variant v)
Variant GetTime(Variant v)
This function moves a widget to a new location.
Variant GetTextBoxCursorFromClick(Variant v)
Variant WaitForMouseButtonWithTimeout(Variant v)
Variant IsDirectory(Variant v)
Variant GetWorkingDirectory(Variant v)
Variant CopyToClipboard(Variant v)
Variant WaitForKeyPress(Variant v)
Variant GetNumJoysticks(Variant v)
Variant GetTimeOfDay(Variant v)
Variant WaitForAnyKeyPress(Variant v)
Variant IsLabel(Variant v)
Variant CallFunction(Variant v)
Variant PlayMovie(Variant v)
Variant GetJoystickAxisState(Variant v)
Variant SetWorkingDirectory(Variant v)
Variant SetCursorPosition(Variant v)
This sets the mouse to a new position.
Variant IsFloat(Variant v)
Variant WaitForListKeyPress(Variant v)
Variant GetJoystickBallState(Variant v)
Variant GetVideoModes(Variant v)
Variant IsAnyKeyDown(Variant v)
Variant IsCustomObject(Variant v)
Variant IsColor(Variant v)
Variant IsCanvas(Variant v)
Variant CheckProcessStatus(Variant v)
Variant IsKeyDown(Variant v)
Variant IsWindow(Variant v)
Variant IsKeyUp(Variant v)
Variant VariableExists(Variant v)
Variant GetObjectTime(Variant v)
Variant GetExecutableName(Variant v)
Variant GetInput0(Variant v)
Variant IsPEBLObject(Variant v)
Variant TranslateString(Variant v)
Variant IsText(Variant v)
Variant GetTimeHP(Variant v)
Variant GetHomeDirectory(Variant v)
Variant WaitForMouseButton(Variant v)
Variant IsTextBox(Variant v)
Variant GetNumJoystickBalls(Variant v)
Variant GetSystemType(Variant v)
Variant SystemCall(std::string path, std::string args)
Variant LaunchFile(std::string file)
Variant GetHomeDirectory()
PEBL_Keycode TranslateString(const std::string &letters)
std::string TranslateKeycode(const PEBL_Keycode key, int modkeys)
std::string ToUpper(const std::string &text)
Variant SetWorkingDirectory(std::string path)
Variant DeleteMyFile(std::string path)
Variant FileExists(std::string path)
Variant GetDirectoryListing(std::string path)
Variant GetWorkingDirectory()
Variant MakeDirectory(std::string path)
std::string ToLower(const std::string &text)
Variant IsDirectory(std::string path)
void ExitQuietly(const std::string &message, int exitCode=0)
void SignalWarning(const std::string &message)
void AssertType(Variant v, int type, const std::string &outsidemessage)
void SignalFatalError(const std::string &message)
Variant GetDriverList(bool printout=true)
Variant CopyFromClipboard()
void CopyToClipboard(std::string text)
Variant GetCurrentScreenResolution()