Example #1
0
int console_open_layer(ContextPtr env, char *cmd) {
    struct stat filestatus;

    func("open_layer(%s)", cmd);

    // check that is a good file
    if(strncasecmp(cmd, "/dev/video", 10) != 0) {
        if(stat(cmd, &filestatus) < 0) {
            error("invalid file %s: %s", cmd, strerror(errno));
            return 0;
        } else { // is it a directory?
            if(S_ISDIR(filestatus.st_mode)) {
                error("can't open a directory as a layer", cmd);
                return 0;
            }
        }
    }

    // ok the path in cmd should be good here

    LayerPtr l = env->open(cmd);
    if(l) {
        /*
           if(!l->init(env)) {
            error("can't initialize layer");
            delete l;
           } else {
         */
        //	  l->set_fps(env->fps_speed);
        //    l->fps=env->fps_speed;

        ViewPortPtr screen = getSelectedScreen();
        if(!screen) {
            ::error("no screen currently selected");
            return 0;
        }
        screen->add_layer(l);
        int len = screen->getLayers().size();
        notice("layer successfully created, now you have %i layers", len);
        return len;
    }
    error("layer creation aborted");
    return 0;
}
Example #2
0
File: freej.cpp Project: K0F/FreeJ
int main(int argc, char **argv) {
    LayerPtr lay;
    ConsoleControllerPtr con;
#ifdef WITH_JAVASCRIPT
    bool interactive = true;
#endif //WITH_JAVASCRIPT

    freej = MakeShared<Context>();

    notice("%s version %s   free the veejay", PACKAGE, VERSION);
    act("2001-2009 RASTASOFT :: %s", PACKAGE_URL);
    act("----------------------------------------------");

    cmdline(argc, argv);
    set_debug(debug_level);

    // create SDL screen by default at selected size
    screen = Factory<ViewPort>::get_instance("Screen", screen_name);
    //  screen = new SdlScreen();
    if(!screen) {
        error("no screen can be opened");
        exit(1);
    }

    screen->init(width, height, 32);
    setSelectedScreen(screen);

    // add the screen to the context
    freej->add_screen(screen);

    if(fullscreen) screen->fullscreen();

    /* sets realtime priority to maximum allowed for SCHED_RR (POSIX.1b)
       this hangs on some linux kernels - darwin doesn't even bothers with it
       anybody knows what's wrong when you turn it on? ouch! it hurts :|
       set_rtpriority is inside jutils.cpp
       if(set_rtpriority(true))
       notice("running as root: high priority realtime scheduling allowed.");
     */



    /* initialize the S-Lang text Console */
    if(!noconsole) {
        if(getenv("TERM")) {
            con = MakeShared<SlwConsole>(freej);
            freej->register_controller(con);
            GlobalLogger::register_logger(con);
            con->console_init();
        }
    }

#ifdef WITH_JAVASCRIPT
    // load default settings
    config_check("keyboard.js");

    /* execute javascript */
    if(javascript[0]) {
        interactive = false;
        open_script(javascript); // TODO: quit here when script failed??
        if(freej->isQuitting()) {
            //      freej.close();
            // here calling close directly we double the destructor
            // fixed omitting the explicit close() call
            // but would be better to make the destructor reentrant
            exit(1);
        } else {
            interactive = true;
        }
    }

    /* execute processing */
    if(processing[0]) {
        interactive = false;
        char tmp[1024];

        // parse includes our extra processing.js library
        snprintf(tmp, 1023, "include(\"processing.js\");script = read_file(\"%s\");Processing(script);", processing);
        freej->js->parse(tmp);
        if(freej->isQuitting()) {
            exit(1);
        } else {
            interactive = true;
        }
    }
#endif //WITH_JAVASCRIPT

    // Set fps
    freej->setFps(fps);

    // TODO freej->setStartRunning(startstate);

    /* create layers requested on commandline */
    {
        char *l, *p, *pp = layer_files;
        while(cli_chars > 0) {

            p = pp;

            while(*p != '#' && cli_chars > 0) {
                p++;
                cli_chars--;
            }
            l = p + 1;
            if(cli_chars <= 0) break;
            *p = '\0';

            func("creating layer for file %s", pp);

            lay = freej->open(pp); // hey, this already init and open the layer !!
            if(lay)  {
                screen->add_layer(lay);
            }

            pp = l;
        }
    }

    freej->start();

    /* initialize the S-Lang text Console */
    if(!noconsole) {
        if(getenv("TERM")) {
            freej->rem_controller(con);
            GlobalLogger::unregister_logger(con);
        }
    }

    return 0;
}