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

📄 screenhack.c

📁 编译后直接运行的MP3播放器全部C语言源代码 一个包含FAT文件系统、系统引导 Boot、FLASH Driver等内容的
💻 C
📖 第 1 页 / 共 2 页
字号:
/* xscreensaver, Copyright (c) 1992, 1995, 1997, 1998 *  Jamie Zawinski <jwz@jwz.org> * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation.  No representations are made about the suitability of this * software for any purpose.  It is provided "as is" without express or  * implied warranty. * * And remember: X Windows is to graphics hacking as roman numerals are to * the square root of pi. *//* This file contains simple code to open a window or draw on the root.   The idea being that, when writing a graphics hack, you can just link   with this .o to get all of the uninteresting junk out of the way.   -  create a procedure `screenhack(dpy, window)'   -  create a variable `char *progclass' which names this program's      resource class.   -  create a variable `char defaults []' for the default resources, and      null-terminate it.   -  create a variable `XrmOptionDescRec options[]' for the command-line,      and null-terminate it.   And that's it... */#include <stdio.h>#include <X11/Intrinsic.h>#include <X11/IntrinsicP.h>#include <X11/CoreP.h>#include <X11/Shell.h>#include <X11/StringDefs.h>#include <X11/Xutil.h>#include <X11/keysym.h>#ifdef __sgi# include <X11/SGIScheme.h>	/* for SgiUseSchemes() */#endif /* __sgi */#ifdef HAVE_XMU# ifndef VMS#  include <X11/Xmu/Error.h># else /* VMS */#  include <Xmu/Error.h># endif#else# include "xmu.h"#endif#include "screenhack.h"#include "version.h"#include "vroot.h"#include "debug.h"#ifndef isupper# define isupper(c)  ((c) >= 'A' && (c) <= 'Z')#endif#ifndef _tolower# define _tolower(c)  ((c) - 'A' + 'a')#endif#define KEYBOARD_GENERIC \  "Keyboard   Rockbox\n" \  "--------   --------------\n" \  "+          ON\n" \  "8          UP\n" \  "2          DOWN\n" \  "4          LEFT\n" \#ifdef HAVE_LCD_BITMAP#define KEYBOARD_SPECIFIC  \  "6          RIGHT\n" \  "Enter      OFF\n" \  "5          PLAY\n" \  "/          F1\n" \  "*          F2\n" \  "-          F3\n"#else #define KEYBOARD_SPECIFIC  \  "6          RIGHT/PLAY  (there's no separation between PLAY and RIGHT)\n" \  "Enter      MENU\n"#endif    char having_new_lcd=True;char *progname;XrmDatabase db;XtAppContext app;Bool mono_p;static XrmOptionDescRec default_options [] = {  { "-root",	".root",		XrmoptionNoArg, "True" },  { "-window",	".root",		XrmoptionNoArg, "False" },  { "-mono",	".mono",		XrmoptionNoArg, "True" },  { "-install",	".installColormap",	XrmoptionNoArg, "True" },  { "-noinstall",".installColormap",	XrmoptionNoArg, "False" },  { "-visual",	".visualID",		XrmoptionSepArg, 0 },  { "-window-id", ".windowID",		XrmoptionSepArg, 0 },  { 0, 0, 0, 0 }};static char *default_defaults[] = {  ".root:		false",#define GEOMETRY_POSITION 1  "*geometry:		"#ifdef HAVE_LCD_BITMAP  "120x68"#else  "280x132" /* A bit larger that necessary */#endif  , /* this should be .geometry, but nooooo... */  "*mono:		false",  "*installColormap:	false",  "*visualID:		default",  "*windowID:		",  0};extern Display* dpy;extern int display_zoom;static XrmOptionDescRec *merged_options;static int merged_options_size;static char **merged_defaults;static void merge_options (void){    int def_opts_size, opts_size;    int def_defaults_size, defaults_size;    for (def_opts_size = 0; default_options[def_opts_size].option;         def_opts_size++)        ;    for (opts_size = 0; options[opts_size].option; opts_size++)        ;    merged_options_size = def_opts_size + opts_size;    merged_options = (XrmOptionDescRec *)        malloc ((merged_options_size + 1) * sizeof(*default_options));    memcpy (merged_options, default_options,            (def_opts_size * sizeof(*default_options)));    memcpy (merged_options + def_opts_size, options,            ((opts_size + 1) * sizeof(*default_options)));    for (def_defaults_size = 0; default_defaults[def_defaults_size];         def_defaults_size++)        ;    for (defaults_size = 0; defaults[defaults_size]; defaults_size++)        ;    merged_defaults = (char **)        malloc ((def_defaults_size + defaults_size + 1) * sizeof (*defaults));    memcpy (merged_defaults, default_defaults,            def_defaults_size * sizeof(*defaults));    memcpy (merged_defaults + def_defaults_size, defaults,            (defaults_size + 1) * sizeof(*defaults));    /* This totally sucks.  Xt should behave like this by default.       If the string in `defaults' looks like ".foo", change that       to "Progclass.foo".    */    {        char **s;        for (s = merged_defaults; *s; s++)            if (**s == '.')            {                const char *oldr = *s;                char *newr = (char *) malloc(strlen(oldr)                                              + strlen(progclass) + 3);                strcpy (newr, progclass);                strcat (newr, oldr);                *s = newr;            }    }}/* Make the X errors print out the name of this program, so we have some   clue which one has a bug when they die under the screensaver. */static int screenhack_ehandler (Display *dpy, XErrorEvent *error){    fprintf (stderr, "\nX error in %s:\n", progname);    if (XmuPrintDefaultErrorMessage (dpy, error, stderr))        exit (-1);    else        fprintf (stderr, " (nonfatal.)\n");    return 0;}static Bool MapNotify_event_p (Display *dpy, XEvent *event, XPointer window){    (void)dpy;    return (event->xany.type == MapNotify &&            event->xvisibility.window == (Window) window);}static Atom XA_WM_PROTOCOLS, XA_WM_DELETE_WINDOW;static Bool checkrepeat(time_t prev,                       time_t now){    if(now-prev < 50) {        DEBUGF("Consider this a button repeat\n");        return true;    }    return false;}/* Dead-trivial event handling.   Exit if the WM_PROTOCOLS WM_DELETE_WINDOW ClientMessage is received. */int screenhack_handle_event(Display *dpy, XEvent *event,                            bool *release, bool *repeat){    int key=0;    static time_t lasttime;    static unsigned int lastkeycode;    *release = FALSE;    *repeat = false;    switch (event->xany.type) {    case KeyPress:      {          KeySym keysym;          unsigned char c = 0;          XLookupString (&event->xkey, &c, 1, &keysym, 0);          key = keysym;#if 0          DEBUGF("Got keypress: %02x %x, time %lx\n", c,                 event->xkey.keycode,                 event->xkey.time);#endif          if(lastkeycode == event->xkey.keycode)              *repeat = checkrepeat(lasttime, event->xkey.time);          lasttime = event->xkey.time;          lastkeycode = event->xkey.keycode;      }      break;    case KeyRelease:      {          KeySym keysym;          unsigned char c = 0;          XLookupString (&event->xkey, &c, 1, &keysym, 0);          key = keysym;#if 0          DEBUGF("Got keyrelease: %c (%02x) %x\n", c, c,                 event->xkey.keycode);#endif          if(lastkeycode == event->xkey.keycode)              *repeat = checkrepeat(lasttime, event->xkey.time);                    lasttime = event->xkey.time;          lastkeycode = event->xkey.keycode;          if(*repeat)              return 0; /* on repeats, return nothing on release */                        *release = TRUE;      }      break;    case Expose:      {	screen_redraw();      }

⌨️ 快捷键说明

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