⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 linux下的flash播放器源程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	    timeout--;	    usleep(10000);	  }	}		int canRead = ( chkpass.normalExit() && (chkpass.exitStatus() != 2) );	return canRead;}//----------------------------------------------------------------------------int main( int argc, char *argv[] ){	// drop root privileges temporarily#ifdef HAVE_SETEUID	seteuid(getuid());#else        setreuid(-1, getuid());#endif // HAVE_SETEUID	Window saveWin = 0;	int timeout = 600;	ProgramName = argv[0];	ssApp a( argc, argv );        globalKapp = &a;	glocale = new KLocale("klock");	if ( argc == 1 )	    usage( argv[0] );	enum parameter_code { 	    install, setup, preview, inroot, test, delay, 	    arg_lock, corners, descr, arg_nice, help, allow_root,	    unknown	} parameter;		char *strings[] = { 	    "-install", "-setup", "-preview", "-inroot", "-test", "-delay", 	    "-lock", "-corners", "-desc", "-nice", "--help", "-allow-root",	    0	};	int i = 1;	while ( i < argc) {	    parameter = unknown;	    for ( int p = 0 ; strings[p]; p++)		if ( !strcmp( argv[i], strings[p]) ) {		    parameter = static_cast<parameter_code>(p);		    break;		}	    switch (parameter) 		{		case install:		    mode = MODE_INSTALL;		    break;		case setup:		    mode = MODE_SETUP;		    break;		case preview:		    mode = MODE_PREVIEW;		    saveWin = atol( argv[++i] );		    break;		case inroot:		    mode = MODE_PREVIEW;		    saveWin = kapp->desktop()->winId();		    break;		case test:		    mode = MODE_TEST;		    break;		case delay:		    timeout = atoi( argv[++i] ) * 60;		    if( timeout == 0 )			only1Time = 1;		    else if( timeout < 60 )			timeout = 60;		    break;		case arg_lock:		    lock = TRUE;		    break;		case corners:		    setCorners( argv[++i] );		    break;		case descr:		    printf( "%s\n", getScreenSaverName() );		    exit( 0 );		case arg_nice:#ifdef HAVE_NICE		    nice( atoi( argv[++i] ) );#else		    warning(glocale->translate(					       "Option %s is not support on "					       "this plattform!"), 			    strings[arg_nice]);#endif		    break;		case allow_root:		    allowroot = 1;		    break;		case help:		    usage( argv[0] );		    break;		default: // unknown		    debug("unknown parameter");		    break;		}	    i++;	}	// regain root privileges#ifdef HAVE_SETEUID	seteuid(0);#else    setreuid(-1, 0);#endif // HAVE_SETEUID	initPasswd();	// ... and drop them again before doing anything important	setuid(getuid());	// now check, if I can verify passwords (might be a problem	// only with shadow passwords, due to missing SUID on	// kcheckpass program.#ifdef HAVE_SHADOW        canGetPasswd = canReadPasswdDatabase();#else	canGetPasswd = true;#endif    // Get the size of the desktop    XWindowAttributes attr;    if (XGetWindowAttributes(qt_xdisplay(), RootWindow(qt_xdisplay(),        qt_xscreen()), &attr) == 0)    {        debug("Failed getting Root window size");    }    else    {        desktopWidth = attr.width;        desktopHeight = attr.height;    }	catchSignals();	if ( mode == MODE_INSTALL )	{		if (!canGetPasswd && lock) {			QString tmp = glocale->translate(			              "Warning: You won't be able to lock the screen!\n\n"			              "Your system uses shadow passwords.\n"			              "Please contact your system administrator.\n"			              "Tell him that you need suid for the kcheckpass program!");			KMsgBox::message(NULL, 				 glocale->translate("Shadow Passwords"), 				 tmp, KMsgBox::EXCLAMATION);		}		setLock("install");		XGetScreenSaver( qt_xdisplay(), &xs_timeout, &xs_interval,				&xs_prefer_blanking, &xs_allow_exposures );		XSetScreenSaver( qt_xdisplay(), 0, xs_interval, xs_prefer_blanking,			xs_allow_exposures );        initAutoLock();					while ( 1 )		{			if ( waitTimeout( timeout ) == FORCE_LOCK )				lockOnce = TRUE;			// if another saver is in test-mode, kill it			killProcess(getLock("test"));			saverWidget = createSaverWindow();            if (saverWidget)            {                saverWidget->setFixedSize(desktopWidth, desktopHeight);                saverWidget->move( 0, 0 );                saverWidget->show();                saverWidget->raise();                QApplication::flushX();                saveWin = saverWidget->winId();                startScreenSaver( saveWin );                a.enter_loop();                stopScreenSaver();                destroySaverWindow( saverWidget );                lockOnce = FALSE;                if( only1Time )                     break;            }		}        cleanupAutoLock();	}	else if ( mode == MODE_TEST )	{		if( lock ) {			fprintf(stderr, glocale->translate(	                        "\nplease don't use -test together with -lock.\n"			        "use klock instead.\n\n") );			exit(1);		}		setLock("test");		saverWidget = createSaverWindow();        if (saverWidget)        {            saverWidget->setFixedSize(desktopWidth, desktopHeight);            saverWidget->move( 0, 0 );            saverWidget->show();            saverWidget->raise();            QApplication::flushX();            saveWin = saverWidget->winId();            startScreenSaver( saveWin );            a.enter_loop();            stopScreenSaver();            destroySaverWindow( saverWidget );        }	}	else if ( mode == MODE_PREVIEW )	{		char mode[32];		sprintf(mode, "preview%ld", (unsigned long) saveWin);		setLock(mode);		startScreenSaver( saveWin );		a.exec();	}	else if ( mode == MODE_SETUP )	{		setupScreenSaver();	}	else		usage( argv[0] );    if ( !pidFile.isEmpty() )    {        remove( pidFile );    }	return 0;}//----------------------------------------------------------------------------void catchSignals(){	// SIGUSR1 forces a lock	signal(SIGUSR1, lockNow);	// These signals are captured to clean-up before exiting	signal(SIGINT, cleanup);		/* Interrupt */	signal(SIGTERM, cleanup);		/* Terminate */	signal(SIGABRT, cleanup);	signal(SIGALRM, cleanup);	signal(SIGFPE, cleanup);	signal(SIGILL, cleanup);	signal(SIGPIPE, cleanup);	signal(SIGQUIT, cleanup);	signal(SIGSEGV, cleanup);#ifdef SIGBUS	signal(SIGBUS, cleanup);#endif#ifdef SIGEMT	signal(SIGEMT, cleanup);#endif#ifdef SIGPOLL	signal(SIGPOLL, cleanup);#endif#ifdef SIGSYS	signal(SIGSYS, cleanup);#endif#ifdef SIGTRAP	signal(SIGTRAP, cleanup);#endif#ifdef SIGVTALRM	signal(SIGVTALRM, cleanup);#endif#ifdef SIGXCPU	signal(SIGXCPU, cleanup);#endif#ifdef SIGXFSZ	signal(SIGXFSZ, cleanup);#endif}static void lockNow( int ){	forceTimeout();	// SIGUSR1 forces a lock	signal(SIGUSR1, lockNow);}static void cleanup( int id ){    if ( !pidFile.isEmpty() )    {        remove( pidFile );    }	if ( mode == MODE_INSTALL )	{		if (id != SIGPIPE)        {			XSetScreenSaver( qt_xdisplay(), xs_timeout, xs_interval,			                 xs_prefer_blanking, xs_allow_exposures );            cleanupAutoLock();        }	}	exit(1);}void usage( char *name ){	printf( glocale->translate(	   "Usage: %s -install|-setup|-test|-desc|-preview wid|-inroot\n"\	   "       [-corners xxxx] [-delay num] [-lock] [-allow-root] [-nice num]\n"), name ); 	printf( glocale->translate(	"  -corners xxxx     Placing cursor in corner performs action:\n"\	"                     x = i  no action (ignore)\n"\	"                     x = s  save screen\n"\	"                     x = l  lock screen\n"\	"                    order: top-left, top-right, bottom-left, bottom-right\n"\	"  -delay num        Amount of idle time before screen saver\n"\	"                     starts  (default 10min)\n"\	"  -desc             Print the screen saver's description to stdout\n"\	"  -install          Install screen saver\n"\	"  -lock             Require password to stop screen saver\n"\	"  -allow-root       Accept root password to unlock\n"\	"  -nice num         Run with specified nice value\n\n"\	"  -preview wid      Run in the specified XWindow\n"\	"  -inroot           Run in the root window\n"\	"  -setup            Setup screen saver\n"\	"  -test             Invoke the screen saver immediately\n"));	exit(1);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -