#include <cave_ogl.h>
#include <GL/glu.h>
#include <string.h>
#include <sys/stat.h>
#include <python2.2/Python.h>


void init_gl(void);
void draw(void);
void update(void);
void loadScript(void);

char *filename;
time_t lastModified=0;

main(int argc,char **argv)
    {
    CAVEConfigure(&argc,argv,NULL);
    if (argc < 2)
        {
        fprintf(stderr,"Usage: %s script.py\n",argv[0]);
        exit(1);
        }
    filename = strdup(argv[1]);
    CAVEInit();
    CAVEInitApplication(init_gl,0);
    CAVEFrameFunction(update,0);
    CAVEDisplay(draw,0);
    while (!CAVEgetbutton(CAVE_ESCKEY))
	    {
    	usleep(10000);
	    }
    Py_Finalize();
    CAVEExit();
    }


void init_gl(void)
    {
    char *path = getenv("PYTHONPATH"), *newpath;
    if (path)
        {
        newpath = malloc(strlen(path)+14);
        sprintf(newpath, "PYTHONPATH=%s:.",path);
        }
    else
        newpath = strdup("PYTHONPATH=.");
    putenv(newpath);

    Py_Initialize();
    loadScript();
    }

void loadScript(void)
    {
    FILE *fp;
    struct stat info;
    PyRun_SimpleString("def draw(): pass\n");
    PyRun_SimpleString("def update(): pass\n");
    fp = fopen(filename, "r");
    if (!fp)
        {
        perror(filename);
        exit(1);
        }
    PyRun_SimpleFile(fp, filename);
    fclose(fp);
    if (stat(filename, &info) != -1)
        lastModified = info.st_mtime;
    }


void update(void)
    {
    struct stat info;
    if (stat(filename, &info) != -1)
        {
        if (lastModified != info.st_mtime)
            loadScript();
        }
    PyRun_SimpleString("update()\n");
    }


void draw(void)
    {
    PyRun_SimpleString("draw()\n");
    }
