211 lines
5.2 KiB
C
211 lines
5.2 KiB
C
/* WMGlobe 1.3 - All the Earth on a WMaker Icon
|
|
* copyright (C) 1998,99,2000,01 Jerome Dumonteil <jerome.dumonteil@linuxfr.org>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
***************************************************************************/
|
|
/* it uses some functions of : Xglobe, Xearth, wmgeneral, wmaker/wrlib
|
|
***************************************************************************/
|
|
|
|
|
|
#ifndef WMG_HEADER_H
|
|
#define WMG_HEADER_H
|
|
|
|
/* customization : see wmgoption.h */
|
|
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
#include <fcntl.h>
|
|
#include <math.h>
|
|
#include <limits.h>
|
|
#include <ctype.h> /*toupper */
|
|
#include <stdarg.h>
|
|
#include <time.h>
|
|
#include <sys/timeb.h>
|
|
#include <sys/time.h>
|
|
#include <sys/types.h>
|
|
#include <X11/Xlib.h>
|
|
#include <X11/xpm.h>
|
|
#include <X11/Xutil.h>
|
|
#include <X11/extensions/shape.h>
|
|
#include <assert.h>
|
|
#include <X11/Xatom.h>
|
|
#include <locale.h>
|
|
|
|
#include "wraster.h"
|
|
|
|
#include "wmgoption.h"
|
|
|
|
#define FALSE 0
|
|
#define TRUE 1
|
|
#define STRONG 2
|
|
#define MAX(x, y) ((x) < (y) ? (y) : (x))
|
|
#define MIN(x, y) ((x) > (y) ? (y) : (x))
|
|
#define ABS(a) ((a) < 0 ? -(a) : (a))
|
|
|
|
#define PTFIXED 1
|
|
#define PTSUN 2
|
|
#define PTRANDOM 3
|
|
#define PTMOON 4
|
|
|
|
#ifndef PI
|
|
#define PI 3.141592653
|
|
#endif
|
|
|
|
/*
|
|
* wmglobe
|
|
* variables globales
|
|
*/
|
|
|
|
/************/
|
|
/* Typedefs */
|
|
/************/
|
|
#define MAX_MOUSE_REGION (8)
|
|
|
|
typedef struct {
|
|
int enable;
|
|
int top;
|
|
int bottom;
|
|
int left;
|
|
int right;
|
|
} MOUSE_REGION;
|
|
|
|
MOUSE_REGION mouse_region[MAX_MOUSE_REGION];
|
|
|
|
typedef struct MPO {
|
|
int r, g, b;
|
|
} MPO;
|
|
|
|
MPO *md[4], *mn[4];
|
|
|
|
double solu[DIAMETRE][DIAMETRE][3];
|
|
int tabsolu[DIAMETRE][DIAMETRE];
|
|
int solution;
|
|
|
|
typedef struct {
|
|
Pixmap pixmap;
|
|
Pixmap mask;
|
|
XpmAttributes attributes;
|
|
} XpmIcon;
|
|
|
|
|
|
Display *dpy;
|
|
|
|
char *dayfile, *nightfile, *dpy_name;
|
|
|
|
Pixmap pix, pixmask;
|
|
|
|
XEvent Event;
|
|
|
|
RImage *map, *small, *mapnight;
|
|
|
|
XpmIcon screenpos, scrdate, scrdiv, numpix, txtpix, wmg;
|
|
|
|
Window iconwin, win;
|
|
int onlyshape, option_iw;
|
|
GC NormalGC;
|
|
|
|
/********* rendering********/
|
|
|
|
#if WITH_MARKERS
|
|
double marker[MAX_MARKERS][3];
|
|
int nb_marker, sun_marker, moon_marker;
|
|
RColor sun_col, moon_col;
|
|
double moon_lat,moon_long;
|
|
#endif
|
|
|
|
double delay, time_multi;
|
|
/*
|
|
* struct timeval delta_tim, last_tim, next_tim, render_tim, base_tim,
|
|
* vec_tim;
|
|
*
|
|
* time_t beg_time, ini_time,t1901;
|
|
*/
|
|
struct timeval tlast, tnext, trend, tdelay, tini, tbase;
|
|
time_t tsunpos;
|
|
|
|
int sens, fun, funx, funy, oknimap, mratiox, mratioy, gotoscr;
|
|
|
|
int typecadre, p_type, use_nightmap, use_default_nightmap, use_nmap_ini,
|
|
firstTime, stoprand, do_something, iop;
|
|
|
|
double v_lat, v_long, old_dvlat, old_dvlong, dv_lat, dv_long;
|
|
double dlat, dlong, addlat, addlong, ratiox, ratioy, dawn;
|
|
|
|
double sun_lat;
|
|
double sun_long;
|
|
|
|
double fov;
|
|
double radius;
|
|
double proj_dist; /* distance to projection plane */
|
|
|
|
double center_dist; /* distance to center of earth */
|
|
|
|
double ambient_light; /* how dark is the dark side? */
|
|
|
|
double light_x, light_y, light_z; /* vector of sunlight with lengt 1 */
|
|
|
|
double c_coef, b_coef;
|
|
double zoom;
|
|
int radius_proj, aml; /* radius of sphere on screen */
|
|
|
|
RColor noir;
|
|
#ifdef DEBUG
|
|
double minhz;
|
|
#endif
|
|
|
|
int stable;
|
|
|
|
/****************************************************************/
|
|
/* Function Prototypes */
|
|
/****************************************************************/
|
|
int main(int argc, char *argv[]);
|
|
|
|
|
|
void AddMouseRegion(int index, int left, int top, int right, int bottom);
|
|
int CheckMouseRegion(int x, int y);
|
|
void RedrawWindowXYWH(int x, int y, int w, int h);
|
|
void set_defaults();
|
|
void loadxpm(Window drawable);
|
|
void cmdline(int argc, char *argv[]);
|
|
void screen_back();
|
|
void rotation_terre(int x, int y, int lat_flag);
|
|
void zooming(int facto);
|
|
struct timeval diftimev(struct timeval t1, struct timeval t2);
|
|
struct timeval addtimev(struct timeval t1, struct timeval t2);
|
|
struct timeval getimev();
|
|
|
|
|
|
void setZoom(double z);
|
|
void calcDistance();
|
|
void renderFrame();
|
|
void initmyconvert();
|
|
int myRConvertImage(RContext * context, RImage * image, Pixmap * pixmap);
|
|
RContext *myRCreateContext
|
|
(Display * dpy, int screen_number, RContextAttributes * attribs);
|
|
void setTime(struct timeval t);
|
|
void recalc(int calme);
|
|
void sun_position(time_t ssue, double *lat, double *lon);
|
|
void moon_position(time_t ssue, double *lat, double *lon);
|
|
void transform_marker(int m);
|
|
void setViewPos(double lat, double lon);
|
|
int ripalpha(RImage * image);
|
|
RImage*
|
|
RScaleImage(RImage *image, unsigned new_width, unsigned new_height);
|
|
void
|
|
RReleaseImage(RImage *image);
|
|
|
|
#endif
|