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

📄 nsaver.h

📁 一个嵌入式操作系统(microwindows)的源代码
💻 H
字号:
#ifndef NSAVER_H#define NSAVER_H/* * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * The Original Code is NanoScreenSaver. * * The Initial Developer of the Original Code is Alex Holden. * Portions created by Alex Holden are Copyright (C) 2000, 2002 * Alex Holden <alex@alexholden.net>. All Rights Reserved. * * Contributor(s): * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public license (the  "[GNU] License"), in which case the * provisions of [GNU] License are applicable instead of those * above.  If you wish to allow use of your version of this file only * under the terms of the [GNU] License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting  the provisions above and replace  them with the notice and * other provisions required by the [GNU] License.  If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the [GNU] License. *//* An interesting xscreensaver that might be copied is rotzoomer(sweep mode) */#ifdef UCLIBC_HACK /* Temp hack to work around uClibc bug */#undef RAND_MAX#define RAND_MAX 32767#endif#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))#define RANDRANGE(LO, HI) ((rand() % ((int)(HI) - (int)(LO) + 1)) + (int)(LO))#define FRANDRANGE(LO, HI) (((double)rand() * ((double)(HI) - (double)(LO)) / \			(double)((double)RAND_MAX + 1.0)) + (double)(LO))#define PI 3.14159265358979323846264338327#define CAPTURESCREEN_DELAY 500#define GRP_MINBRIGHTNESS 150	typedef struct {	GR_WINDOW_ID main_window;	GR_GC_ID main_gc;	GR_EVENT event;	long animate_interval;	struct timeval timeout;	int saver;	void *priv;	GR_SCREEN_INFO si;} nstate;void *my_malloc(size_t size);GR_COLOR get_random_colour(int min_brightness);void get_random_point_on_screen(nstate *state, GR_COORD *x, GR_COORD *y,							GR_COLOR *c);int not_square(int n);void make_random_square(nstate *state, int min_brightness, int min_size,		int max_size, int need_square, GR_COORD *retx, GR_COORD *rety,		GR_SIZE *retsize);int init(nstate *state);void calculate_timeout(nstate *state);unsigned long timeout_delay(nstate *state);unsigned long timeout_delay(nstate *state);void do_animate(nstate *state);int do_screensaver_event(nstate *state);int handle_event(nstate *state);void msleep(long ms);GR_WINDOW_ID capture_screen(nstate *state);#define NUM_SAVERS 13void saver1_init(nstate *state);void saver1_exposure(nstate *state);void saver1_animate(nstate *state);#define SAVER2_DELAY 30#define SAVER2_MAXPIXELS 65535#define SAVER2_PIXELS_PER_FRAME 16typedef struct {	unsigned int pixels;} s2state;void saver2_init(nstate *state);void saver2_exposure(nstate *state);void saver2_animate(nstate *state);#define SAVER3_DELAY 30#define SAVER3_MAXSEGMENTS 65535#define SAVER3_SEGMENTS_PER_FRAME 4typedef struct {	int maxsegments;	GR_COORD lastx;	GR_COORD lasty;} s3state;void saver3_init(nstate *state);void saver3_exposure(nstate *state);void saver3_animate(nstate *state);#define SAVER4_DELAY 30#define SAVER4_NUMWORMS 5#define SAVER4_WORMLENGTH 50#define SAVER4_VELOCITY 2#define SAVER4_MAXROTATION (PI/8)#define SAVER4_WORMTHICKNESS 3typedef struct {	double x;	double y;	double d;	GR_COLOR colour;	GR_POINT points[SAVER4_WORMLENGTH];} s4worm;typedef struct {	int length;	int tip;	s4worm worms[SAVER4_NUMWORMS];} s4state;void saver4_init(nstate *state);void saver4_exposure(nstate *state);void saver4_get_new_worm_position(nstate *state, int worm, int newtip);int saver4_worm_collides(nstate *state, s4state *s, int x, int y, int thisworm,								int thispoint);void saver4_animate(nstate *state);#define SAVER5_DELAY 30#define SAVER5_NUMSTARS 300#define SAVER5_STARS_INCREMENT 2#define SAVER5_STARS_ACCEL_RATE 30typedef struct {	double angle;	int pos;} s5star;typedef struct {	int numstars;	s5star stars[SAVER5_NUMSTARS];} s5state;void saver5_init(nstate *state);int saver5_drawstar(nstate *state, s5state *s, int star, int delete);void saver5_exposure(nstate *state);void saver5_animate(nstate *state);#define SAVER6_DELAY 8#define SAVER6_MAXVERTICES 20#define SAVER6_MINFULLVERTICES 5#define SAVER6_MINVERTICES 3#define SAVER6_MINDROP 10#define SAVER6_MAXBOLTS 4#define SAVER6_MAXFORKS 20#define SAVER6_MAXEND_Y 50#define SAVER6_THICKNESS 6#define SAVER6_MINDURATION 10#define SAVER6_MAXDURATION 20#define SAVER6_MAXNEWBOLTTIME 300#define SAVER6_MAXZIGZAG 10#define SAVER6_MAXPERTURBATION 5#define SAVER6_FORK_PROBABILITY 0.5typedef struct {	int valid;	GR_POINT vertices[SAVER6_THICKNESS][SAVER6_MAXVERTICES];} s6fork;typedef struct {	int duration;	s6fork forks[SAVER6_MAXFORKS];} s6bolt;typedef struct {	int new_bolt_time;	s6bolt bolts[SAVER6_MAXBOLTS];} s6state;void saver6_init(nstate *state);void saver6_drawfork(nstate *state, s6state *s, int bolt, int fork, int delete);void saver6_drawbolt(nstate *state, s6state *s, int bolt, int delete);void saver6_drawlightning(nstate *state, s6state *s, int delete);void saver6_exposure(nstate *state);void saver6_setvertices(s6state *s, int bolt, int fork, int vert, GR_COORD x,								GR_COORD y);void saver6_makefork(nstate *state, s6state *s, int bolt, int fork, GR_COORD x,								GR_COORD y);void saver6_perturb(nstate *state, GR_COORD *x, GR_COORD *y, int maxperturb);void saver6_makebolt(nstate *state, s6state *s, int bolt);void saver6_newbolt(nstate *state, s6state *s);void saver6_perturb_bolt(nstate *state, s6state *s, int bolt, int fork);void saver6_perturb_lightning(nstate *state, s6state *s);void saver6_animate(nstate *state);/* The algorithm used in saver7 was adapted from "grav" by Greg Bowering */#define SAVER7_DELAY 10#define SAVER7_PLANETS 15#define SAVER7_PLANETS_USE_DAMPING#define SAVER7_STARCOLOUR GR_COLOR_YELLOW#define SAVER7_STARRADIUS 5#define SAVER7_PLANETRADIUS 3#define SAVER7_DIST 16.0#define SAVER7_ALMOSTDIST (SAVER7_DIST - 0.01)#define SAVER7_MAX_STARTDIM (SAVER7_ALMOSTDIST / 2.0)#define SAVER7_MIN_STARTDIM -SAVER7_MAX_STARTDIM#define SAVER7_MAX_STARTVEL 0.04#define SAVER7_MIN_STARTVEL -SAVER7_MAX_STARTVEL#define SAVER7_G -0.02#define SAVER7_COLLIDE 0.0001#define SAVER7_DAMPING_FACTOR 0.999999#define SAVER7_MAX_ACCEL 0.1typedef struct {	double r;	double rv;	double x;	double xv;	double y;	double yv;	GR_COORD ax;	GR_COORD ay;	GR_COLOR colour;} s7planet;typedef struct {	s7planet planets[SAVER7_PLANETS];	GR_COORD starx;	GR_COORD stary;} s7state;void saver7_init(nstate *state);void saver7_exposure(nstate *state);void saver7_animate(nstate *state);/* The algorithm used in saver8 is based on that found at:   http://www.go2net.com/internet/deep/1997/04/16/body.html */#define SAVER8_DELAY1 1#define SAVER8_DELAY2 10000#define SAVER8_NUMCOLOURS 64 /* Don't set this higher than 512! */#define SAVER8_MINFACTOR 1#define SAVER8_MAXFACTOR 20#define SAVER8_LINES_PER_FRAME 64typedef struct {	GR_PIXELVAL *rows;	int rownum;	GR_PIXELVAL colours[SAVER8_NUMCOLOURS];	int current_line;	int factor;} s8state;void saver8_init(nstate *state);void saver8_drawpattern(nstate *state);void saver8_exposure(nstate *state);void saver8_animate(nstate *state);#define SAVER9_DELAY 30typedef struct {	GR_WINDOW_ID pid;} s9state;void saver9_init(nstate *state);void saver9_exposure(nstate *state);void saver9_animate(nstate *state);#define SAVER10_DELAY 20#define SAVER10_SPOTDIA 49#define SAVER10_VELOCITY 3#define SAVER10_OVERSIZE (2 * SAVER10_VELOCITY)typedef struct {	GR_WINDOW_ID screen;	GR_WINDOW_ID spot;	double x;	double y;	double direction;} s10state;void saver10_init(nstate *state);void saver10_exposure(nstate *state);void saver10_animate(nstate *state);#define SAVER11_DELAY 50#define SAVER11_MIN_BRIGHTNESS 100#define SAVER11_MIN_SIZE 20#define SAVER11_MAX_SIZE 150typedef struct {	GR_COORD x;	GR_COORD y;	GR_SIZE size;} s11state;void saver11_init(nstate *state);void saver11_exposure(nstate *state);void saver11_animate(nstate *state);/* saver12 is heavily based on "munch" from xscreensaver. */#define SAVER12_DELAY 10#define SAVER12_MIN_BRIGHTNESS 100#define SAVER12_MIN_SIZE 64#define SAVER12_MAX_SIZE 256typedef struct {	int t;	int kt;	GR_COORD x;	GR_COORD y;	GR_SIZE size;} s12state;void saver12_new_shape(nstate *state);void saver12_init(nstate *state);void saver12_exposure(nstate *state);void saver12_animate(nstate *state);#define SAVER13_DELAY 10#define SAVER13_ZOOM_FACTOR 8#define SAVER13_ROWS_BUFFER 64#define SAVER13_VELOCITY 4typedef struct {	GR_PIXELVAL *screen;	GR_PIXELVAL *rows;	int rownum;	double x;	double y;	double direction;} s13state;void saver13_init(nstate *state);void saver13_exposure(nstate *state);void saver13_animate(nstate *state);typedef void(*saver_function)(nstate *);saver_function init_functions[NUM_SAVERS] = {	saver1_init,	saver2_init,	saver3_init,	saver4_init,	saver5_init,	saver6_init,	saver7_init,	saver8_init,	saver9_init,	saver10_init,	saver11_init,	saver12_init,	saver13_init};saver_function exposure_functions[NUM_SAVERS] = {	saver1_exposure,	saver2_exposure,	saver3_exposure,	saver4_exposure,	saver5_exposure,	saver6_exposure,	saver7_exposure,	saver8_exposure,	saver9_exposure,	saver10_exposure,	saver11_exposure,	saver12_exposure,	saver13_exposure,};saver_function animate_functions[NUM_SAVERS] = {	saver1_animate,	saver2_animate,	saver3_animate,	saver4_animate,	saver5_animate,	saver6_animate,	saver7_animate,	saver8_animate,	saver9_animate,	saver10_animate,	saver11_animate,	saver12_animate,	saver13_animate};#endif

⌨️ 快捷键说明

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