view pwplib/pwplib-unix.c @ 52:411c1c8d810e

Use #if 0 instead of commenting out.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 24 May 2010 14:24:04 +0300
parents 53676367d46f
children f0c596c5905b
line wrap: on
line source

#define __PWPLIB_C

#include "config.h"

#include <stdio.h>
#include <stdlib.h>

#ifdef DRIVE_SDL
#include <SDL.h>
#endif
#include <signal.h>
#include <time.h>
#include <sys/time.h>

#include "pwplib.h"
#include "tty.h"


/******************** random stuff *************************/

static int sdl_init = 0;

extern void pwplib_dummy();
#define pwp_dummy pwplib_dummy

void pwpwrite(const char *fmt, ...)
{
    if (!pwplib.setup[SETUP_SHUTUP]) {
        va_list ap;
        va_start(ap, fmt);
        vfprintf(stderr, fmt, ap);
        va_end(ap);

        usleep(1000 * pwplib.set.infodelay);
    }
}

/********************* timer  ******************************/

#define TIMERHZ 72
int pwp_unix_tod()
{
#ifdef DRIVE_SDL
    if (sdl_init) {
        int quit = 0;
        SDL_Event event;
        if (SDL_PollEvent(&event) >= 0) {
            switch (event.type) {
              case SDL_KEYDOWN:
                  if (event.key.keysym.sym == SDLK_ESCAPE)
                      quit = 1;
                  break;
#if 0
/* NOTICE! Disableing this is a hack for Final ISI only */
              case SDL_QUIT:
                  quit = 1;
                  break;
#endif
            }
        }
        if (quit) {
            SDL_Quit();
            pwplib_shutdown();
            exit(1);
        }
        return (SDL_GetTicks() * TIMERHZ) / 1000;
    }
    else
#endif
    {
        struct timeval tod;
        gettimeofday(&tod, NULL);
        return (tod.tv_sec * TIMERHZ) + (tod.tv_usec * TIMERHZ / 1000000);
    }
}

/********************* destructors, signals etc **********/

void pwp_fatalsignal(int n)
{
    pwpwrite("* pwplib shutting down\n");

#ifdef DRIVE_SDL
    if (sdl_init) {
        sdl_init = 0;
        SDL_Quit();
    }
#endif

    pwplib_shutdown();

    pwpwrite("* died to signal %d\n", n);

    exit(1);
}

/******************** initialization *********************/

int pwplib_initcore()
{
    int sdl_flags = 0;
    pwplib_init_common();

   /*** setup signals, etc ***/

#ifdef DRIVE_SDL
#ifdef DRIVE_VIDEO
    sdl_flags |= SDL_INIT_VIDEO;
#endif
#ifdef DRIVE_AUDIO
    sdl_flags |= SDL_INIT_AUDIO;
#endif
    /* With SDL, we let it handle the signals */
    if (SDL_Init(SDL_INIT_TIMER | SDL_INIT_EVENTTHREAD | sdl_flags) != 0) {
        pwpwrite("* SDL could not be initialized (%s).\n", SDL_GetError());
        sdl_init = 0;
    } else
        sdl_init = 1;
#endif

    if (!sdl_init) {
        signal(SIGTERM, pwp_fatalsignal);
        signal(SIGINT, pwp_fatalsignal);
        signal(SIGQUIT, pwp_fatalsignal);
        signal(SIGKILL, pwp_fatalsignal);
        signal(SIGSEGV, pwp_fatalsignal);
    }

   /*** video ***/

#   ifdef DRIVE_VIDEO

#   ifdef DRIVE_SDL
    if (sdl_init && pwp_SDL_init())
    {
    }
    else
#   endif
#   ifdef DRIVE_PVP
    if (pwplib.setup[SETUP_PVP])
        pvp_init();
    else
#   endif
    if (!pwplib.setup[SETUP_NOVIDEO])
    {
        tty_init();
    }
#   endif

   /*** audio ***/
#  ifdef DRIVE_AUDIO
    if (!pwplib.setup[SETUP_NOSOUND])
    {
        int snd = 0;
#ifdef DRIVE_SDL
        if (!snd)
        {
            if (sdl_init && pwp_sdlaudio_init())
                snd++;
        }
#endif

#ifdef DRIVE_OSS
        if (!snd)
        {
            if (oss_init())
                snd++;
        }
#endif

#ifdef DRIVE_HPUX
        if (!snd)
        {
            if (hpuxsnd_init())
                snd++;
        }
#endif

        if (!snd)
            pwpwrite("* couldn't init sound. going silent.\n");

    }
    else
        pwpwrite("* no sound, as requested\n");
#  endif

   /*** fallbacks - remove? ***/

    if (pwplib.dump_rast == pwplib_dummy && pwplib.dump_attr != pwplib_dummy)
        pwplib.dump_rast = pwplib_dump_rast_plain;

   /*** timer ***/

    if (pwplib.setup[SETUP_BPS] | pwplib.setup[SETUP_FPS])
    {
        pwpwrite("non-realtime output (bps=%d fps=%d)\n", pwplib.setup[SETUP_BPS], pwplib.setup[SETUP_FPS]);
        pwplib.timerfunc = pwp_timer_nrt;
        pwplib.timer_counter = 0;
    }
    else
        pwplib.timerfunc = pwp_unix_tod;

   /*** hmmm ***/

    if (!sdl_init && pwplib.setup[SETUP_HALVE])
        pwplib.videobuf.height <<= 1;

    /* only allow if smaller than original? */

    if (pwplib.setup[SETUP_USERHEIGHT])
        pwplib.videobuf.height = pwplib.setup[SETUP_USERHEIGHT];
    if (pwplib.setup[SETUP_USERWIDTH])
        pwplib.videobuf.width = pwplib.setup[SETUP_USERWIDTH];

   /*** done ***/

#   ifdef DRIVE_VIDEO
    if (!pwplib.setup[SETUP_NOVIDEO])
    {
        pwpwrite("* pwplib now controls a %d x %d framebuffer\n", pwplib.videobuf.width, pwplib.videobuf.height);
    }
#  endif

    return 1;
}

/************************************/

const char *pwplogo =
    "\033[2J\033[H\n"
    "   \033[36;46mMMmmmmmmMM\033[0m\n"
    "       \033[36;46mMM\033[0m\n"
    "    \033[31;41mxxxxxxxxxxxx\033[0m\n"
    "    \033[31;41mxxxxxxxxxxxxxxxxxxx\033[0m\n"
    "   \033[31;41mxxxxxxxxx\033[0m\n"
    "   \033[33;43mZZZZZ\033[34;44m....\033[0m        %%%%%%%%%  %%%        %%%  %%%%%%%%%\n"
    "  \033[37;47m@@@@\033[34;44m......\033[0m        %%%%%%%%%. %%%....... %%%. %%%%%%%%%....\n"
    "  \033[37;47m@@@@\033[34;44m....\033[37mo\033[34m.\033[0m   .....%%%   %%%  %%%   %%%  %%%  %%%   %%%\n"
    " \033[37;47m@@@@@@@\033[34;44m....\033[0m        %%%   %%%  %%%   %%%  %%%  %%%   %%%\n"
    " \033[37;47m@@@@@@@@@@@\033[0m        %%%%  %%%  %%%   %%%  %%%  %%%%  %%%\n"
    " \033[37;47m@@@@@@@@@@@@@\033[0m      %%%%  %%%  %%%   %%%  %%%  %%%%  %%%\n"
    " \033[37;47m@@@@@@@@@@@@@@@\033[0m    %%%%%%%%%  %%%   %%%  %%%  %%%%%%%%%\n"
    "  \033[37;47m@@@@\033[0m              %%%%%%%%%  %%%   %%%  %%%  %%%%%%%%%\n"
    "  \033[37;47m@@@@@@\033[0m            %%%        %%%%% %%%  %%%  %%%\n"
    "  \033[37;47m@@@@@@@@@@\033[0m  \033[31;41mxx\033[0m    %%%        %%%%% %%%  %%%  %%%\n"
    "  \033[37;47m@@@@@@@@@@@@@@\033[0m    %%%        %%%%% %%%% %%%  %%%\n"
    "   \033[37;47m@@@@@@@@@@@\033[0m      %%%        %%%%% %%%% %%%  %%%\n"
    "   \033[37;47m@@@@@@@@@\033[0m   .....%%%....... %%%%%%%%%%%%%%. %%%..........\n"
    "     \033[37;47m@@@@@\033[0m          %%%        %%%%%%%%%%%%%%  %%%\n"
    "     \033[37;47m@@@@\033[0m\n\n";


void pwplib_startup()
{
    if (!pwplib.setup[SETUP_SHUTUP])
    {
        pwpwrite("starting up.... 2sec delay for ^C");
        sleep(2);
    }

    /* send initstuff? */
}

void pwplib_end()
{
    if (pwplib.setup[SETUP_SHUTUP])
        return;

    pwplib_shutdown();
    sleep(2);

    fputs(pwplogo, stderr);
    pwpwrite("shutting down multimedia subsystems\n" "operation finished - support pwp\n\n\n");
}

/***************************************************************/

int pwplib_init(int argc, char **argv)
{
    pwplib.argc = argc;
    pwplib.argv = argv;

    pwplib_getopts();

    if (pwplib.setup[SETUP_WANTHELP])
    {
        pwplib_printhelp();
        exit(0);
    }

    if (!pwplib.setup[SETUP_SHUTUP])
    {
        fputs(pwplogo, stderr);
        pwpwrite("pwplib " PWPLIB_VERSION " initializing..\n\nrun with --help for some options\n\n");
    }

    pwpwrite("* using locale '%s'\n", pwplib.set.lang);

    if (!pwplib_initcore())
    {
        pwpwrite("initialization failed!\n");
        return 0;
    }

    if (pwplib.setup[SETUP_WANTHELP])
        return 0;

    return 1;
}