diff -r 6e87bbc2abe9 -r db9cadaab2ea tests/main.c --- a/tests/main.c Wed Aug 29 11:19:44 2007 +0200 +++ b/tests/main.c Thu Aug 30 16:40:20 2007 +0200 @@ -1,35 +1,77 @@ +#ifdef __WIN32__ +#include +#include +#include +#include +#else +#include +#include #include #include - -#include "iec_std_lib.h" +#endif /* * Functions and variables provied by generated C softPLC **/ -void config_run__(int tick); -void config_init__(void); extern int common_ticktime__; /* - * Functions and variables to export to generated C softPLC - **/ - -TIME __CURRENT_TIME; + * Functions and variables provied by plc.c + **/ +void run(long int tv_sec, long int tv_nsec); -#define __LOCATED_VAR(type, name) type name; -#include "LOCATED_VARIABLES.h" -#undef __LOCATED_VAR +#define maxval(a,b) ((a>b)?a:b) -static int tick = 0; +#ifdef __WIN32__ +void timer_notify() +{ + struct _timeb timebuffer; + + _ftime( &timebuffer ); + run(timebuffer.time, timebuffer.millitm * 1000000); +} + +int main(int argc,char **argv) +{ + HANDLE hTimer = NULL; + LARGE_INTEGER liDueTime; + + liDueTime.QuadPart = -10000 * maxval(common_ticktime__,1);; + + // Create a waitable timer. + hTimer = CreateWaitableTimer(NULL, TRUE, "WaitableTimer"); + if (NULL == hTimer) + { + printf("CreateWaitableTimer failed (%d)\n", GetLastError()); + return 1; + } + + config_init__(); + + // Set a timer to wait for 10 seconds. + if (!SetWaitableTimer(hTimer, &liDueTime, common_ticktime__, NULL, NULL, 0)) + { + printf("SetWaitableTimer failed (%d)\n", GetLastError()); + return 2; + } + + while(1){ + // Wait for the timer. + if (WaitForSingleObject(hTimer, INFINITE) != WAIT_OBJECT_0) + { + printf("WaitForSingleObject failed (%d)\n", GetLastError()); + break; + } + timer_notify(); + } + return 0; +} +#else void timer_notify(sigval_t val) { - clock_gettime(CLOCK_REALTIME, &__CURRENT_TIME); - printf("Tick %d\n",tick); - config_run__(tick++); - printf(" Located variables : \n"); -#define __LOCATED_VAR(type, name) __print_##type(name); -#include "LOCATED_VARIABLES.h" -#undef __LOCATED_VAR + struct timespec CURRENT_TIME; + clock_gettime(CLOCK_REALTIME, &CURRENT_TIME); + run(CURRENT_TIME.tv_sec, CURRENT_TIME.tv_nsec); } void catch_signal(int sig) @@ -39,7 +81,6 @@ printf("Got Signal %d\n",sig); } -#define maxval(a,b) ((a>b)?a:b) int main(int argc,char **argv) { timer_t timer; @@ -74,3 +115,4 @@ return 0; } +#endif