home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Linux / Divers / bomb.tar.gz / bomb.tar / bomb / defs.h < prev    next >
C/C++ Source or Header  |  1998-03-08  |  6KB  |  317 lines

  1. /*
  2.     bomb - automatic interactive visual stimulation
  3.     Copyright (C) 1994  Scott Draves <spot@cs.cmu.edu>
  4.  
  5.     This program is free software; you can redistribute it and/or modify
  6.     it under the terms of the GNU General Public License as published by
  7.     the Free Software Foundation; either version 2 of the License, or
  8.     (at your option) any later version.
  9.  
  10.     This program is distributed in the hope that it will be useful,
  11.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.     GNU General Public License for more details.
  14.  
  15.     You should have received a copy of the GNU General Public License
  16.     along with this program; if not, write to the Free Software
  17.     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. */
  19.  
  20. #define mac_bomb 0
  21. #define vga_bomb 1
  22. #define xws_bomb 1
  23. #define ogl_bomb 0
  24. #define win_bomb 0
  25.  
  26.  
  27.  
  28. #define use_guile 0
  29.  
  30. #if use_guile
  31. #include <gh.h>
  32. #endif
  33.  
  34. #define use_mpeg 0
  35.  
  36. #if use_mpeg
  37. #include "mpeg2/src/mpeg2enc/mpeg.h"
  38. #endif
  39.  
  40. #if mac_bomb || win_bomb
  41. #  define DATA_DIR "C:\\bomb\\"
  42. // #  define DATA_DIR ""
  43. typedef unsigned char u_char;
  44. #  define M_PI 3.141592654
  45. #else
  46. #  include <unistd.h>
  47. #endif
  48.  
  49. #include <stdio.h>
  50. #include <stdlib.h>
  51. #include <time.h>
  52. #include <math.h>
  53. #include <string.h>
  54.  
  55. #if vga_bomb
  56. #  include <vga.h>
  57. #endif
  58.  
  59. #include "cmap.h"
  60. #include "libifs.h"
  61.  
  62.  
  63. #ifdef __cplusplus
  64. extern "C" {
  65. #endif
  66.  
  67. #define sym_one          0
  68. #define sym_tile4        1
  69. #define sym_mirror4      2
  70. #define sym_mirror2      3
  71. #define sym_frame_buffer 4
  72. #define sym_tile4_stack2 5
  73.  
  74. #define distrib_original   0
  75. #define distrib_new        1
  76. #define distrib_continuous 2
  77. #define distrib_rule_lock  4
  78.  
  79. #define grad_none -1
  80.  
  81.  
  82. void begin_timer();
  83. double end_timer();
  84.  
  85.  
  86.  
  87. #define alen(x) (sizeof(x)/sizeof((x)[0]))
  88.  
  89. #if mac_bomb || win_bomb
  90. #  define R (rand()|(rand()<<16))
  91. #else
  92. #  define R   (random())
  93. #endif
  94.  
  95. #define R8b (random_byte())
  96.  
  97. #define fuse_ndrifts 4
  98.  
  99. int iclamp(int p, int n);
  100.  
  101.  
  102.  
  103. /* REZ is not used by some rules */
  104.  
  105. /* REZ chooses the grid size.  
  106.    0 = 160x100
  107.    1 = 160x200
  108.    2 = 320x200 */
  109. #define REZ 2
  110.  
  111. #if REZ==0
  112. #  define XSIZE 160
  113. #  define XMUL 2
  114. #  define YSIZE 100
  115. #  define YMUL 2
  116. #elif REZ==1
  117. #  define XSIZE 160
  118. #  define XMUL 2
  119. #  define YSIZE 200
  120. #  define YMUL 1
  121. #elif REZ==2
  122. #  define XSIZE 320
  123. #  define XMUL 1
  124. #  define YSIZE 200
  125. #  define YMUL 1
  126. #endif
  127.  
  128. #define SMALL_XSIZE (XSIZE/2)
  129. #define SMALL_YSIZE (YSIZE/2)
  130. #define SMALL_XMUL  (XMUL*2)
  131. #define SMALL_YMUL  (YMUL*2)
  132.  
  133. #define VSMALL_XSIZE (XSIZE/8)
  134. #define VSMALL_YSIZE (YSIZE/8)
  135. #define VSMALL_XMUL  (XMUL*8)
  136. #define VSMALL_YMUL  (YMUL*8)
  137.  
  138.  
  139. typedef int board_t[XSIZE+2][YSIZE+2];
  140.  
  141. typedef struct {
  142.    int fill;
  143. } fill_t;
  144.  
  145. #define MAXRHYTHM 2
  146.  
  147. #define flame_nspan 3
  148.  
  149. typedef struct {
  150.    int rule;
  151.    int speed;     /* computed from speed_*    */
  152.    int mask;
  153.    int randomized_underflow;
  154.    int cycle_bkg;
  155.    int remap;
  156.    int floor;           /* computed from frame, hot, cold */
  157.    int driver_slowdown;
  158.    int brain;
  159.    int brain_shift;
  160.    int drift;
  161.    int drift_speed;
  162.    int rhythm[MAXRHYTHM];
  163.    double drift_time;
  164.    ifs_control_point flame_cp;
  165.    ifs_control_point flame_span[flame_nspan];
  166.    int hot;
  167.    int cool;
  168.    int image_window_size;
  169.    int search_time;
  170.    int bsize;
  171.    int speed_base;
  172.    int speed_beat_speed;
  173.    int speed_beat_size;
  174.    int seq[2];
  175.    int fastflip_rate;
  176. } rule_t;
  177.  
  178. typedef struct {
  179.    int cmap;
  180.    int index;
  181.    int index2;
  182. } cmap_t;
  183.  
  184. extern board_t board[2];
  185. extern board_t board2[2];
  186. extern board_t board3[2];
  187. extern int dbuf;
  188. extern int remap[256 * 256];
  189. extern int p1;
  190. #define MAXFLAMES 500
  191. extern ifs_control_point flames[MAXFLAMES];
  192. extern int nflames;
  193.  
  194. void distrib(int dist, rule_t *rule, cmap_t *cmap, fill_t *fill);
  195. void init_rotate();
  196.  
  197. #define LIVE_BIT 1
  198. #define HIST_BIT 2
  199.  
  200. /* a place to write 8-bit pixels.  should have a cmap in here */
  201. typedef struct {
  202.    u_char *p;
  203.    int width;
  204.    int height;
  205.    int stride;
  206. } image8_t;
  207.  
  208. extern image8_t fb;
  209.  
  210. #define max_heat (0x10000)
  211.  
  212. #define N_RAM_IMAGES 10
  213.  
  214. int seq_next_image(int *seq_p);
  215. void init_shade();
  216. void init_wave();
  217. void seq_start(int *seq);
  218. void init_rotor();
  219. void init_seq();
  220. void pick_liss_coefs();
  221.  
  222. #define status_string_length 80
  223. extern char status_string[status_string_length];
  224. extern int display_fps;
  225.  
  226. int random_byte();
  227. int quantize(double d);
  228.  
  229.  
  230. /* instead of argv (XXX) */
  231. #define argd(s,d)   ((ai = getenv(s)) ? atof(ai) : (d))
  232. #define argi(s,d)   ((ai = getenv(s)) ? atoi(ai) : (d))
  233. #define args(s,d)   ((ai = getenv(s)) ? ai : (d))
  234. #define arge(s,e)   ((ai = getenv(s)) && (!strcmp(e,ai)))
  235. static char *ai;
  236.  
  237. extern int high_growth_game(rule_t *p);
  238.  
  239. extern ifs_control_point cc_direction;
  240. extern int grad_state;
  241. extern rule_t rule;
  242. extern int current_cmap[256 * 3];
  243.  
  244. void fill_board(fill_t *p);
  245. void pix2heat(image8_t *fb, board_t *dst);
  246. void change_rules2(int old_sym, int new_sym, board_t *dst);
  247. void pix2heat2(image8_t *fb, board_t *dst,
  248.            int x0, int y0, int x1, int y1);
  249. void double_board(int vh, board_t *dst, int sym);
  250. void write_fb_mpeg(image8_t *fb);
  251. void write_fb_ppm(image8_t *fb);
  252. int run_hist(image8_t *fb);
  253. void cool(image8_t *fb);
  254. void warm(image8_t *fb);
  255. void image8_set_cmap(int i, int n, int *cmap);
  256. double adjust_speed(double);
  257. void image8_flush();
  258. void blur(board_t *from, board_t *to);
  259. void image2grad(board_t *from, board_t *to, int s, int n, int m);
  260. void spiral(board_t *to, double angle, int n, int m);
  261. void hex_tile(board_t *to, double angle, int *pattern, int pat_len, int n, int m);
  262. void do_mouse(int x, int y);
  263. void pen(board_t *dboard, int mask, int x, int y, int bsize);
  264. void bomb_exit();
  265. void init();
  266. #if win_bomb
  267. void win_init();
  268. void read_registry();
  269. void write_registry();
  270. extern int rule_mask;
  271. int win_exit();
  272. #endif
  273.  
  274. #if mac_bomb
  275. /* if pix_rep is 0 then write directly on the screen */
  276. #define pix_rep 0
  277. #define use_sioux 0
  278. #endif
  279.  
  280. #if xws_bomb && vga_bomb
  281. extern int running_x;
  282. #endif
  283.  
  284.  
  285. #if xws_bomb
  286. #include <X11/X.h>
  287. #include <X11/Xlib.h>
  288. #include <X11/Xutil.h>
  289. #define pix_rep 1
  290. extern char *image_buf;
  291. extern Display *disp;
  292. extern Window win;
  293. extern Visual *visual;
  294. extern int fb_bpp;
  295. extern int depth;
  296. extern int *xws_lut;
  297. extern GC gc;
  298. extern XImage *xws_image;
  299. extern Colormap xws_cmap;
  300. #endif
  301.  
  302. #if ogl_bomb
  303. #include <GL/gl.h>
  304. #include <GL/glx.h>
  305. #include <X11/X.h>
  306. #include <X11/Xutil.h>
  307. #define pix_rep 3
  308. extern Display *disp;
  309. extern Window win;
  310. extern Colormap xws_cmap;
  311. #endif
  312.  
  313.  
  314. #ifdef __cplusplus
  315. }
  316. #endif
  317.