1 #include <stdio.h>
2 #include <math.h>
3 #include <string.h>
4 
5 typedef char boolean;
6 
7 #define TRUE            1
8 #define FALSE           0
9 
10 /* Window size info */
11 #define D_WID	640
12 #define D_HT	548
13 #define B_WID	200
14 #define T_WID	D_WID
15 #define T_HT	(F_HT + 4)
16 #define B_HT	(D_HT + T_HT + 1)
17 #define M_WID	(B_WID + D_WID + 1)
18 #define M_HT	B_HT
19 
20 #define NAIL_SIZE	4
21 
22 #define COORD_X(x)	(x)
23 #define COORD_Y(y)	(draw_ht - (y))
24 #define COORD_DX(dx)	(dx)
25 #define COORD_DY(dy)	(-(dy))
26 
27 /* Font size info */
28 #define F_NAME	"6x10"
29 #define F_WID	6
30 #define F_HT	10
31 
32 /* File operations */
33 #define F_NONE		0
34 #define F_LOAD		1
35 #define F_SAVE		2
36 #define F_INSERT	3
37 
38 /* Longest filename */
39 #define MAXPATH		256
40 
41 #define SQR(x)          ((x) * (x))
42 #define SGN(x)          ((x) < 0 ? (-1) : 1)
43 #ifndef ABS
44 #define ABS(x)          ((x) < 0 ? (-(x)) : (x))
45 #endif
46 #ifndef MIN
47 #define MIN(x,y)        ((x) < (y) ? (x) : (y))
48 #define MAX(x,y)        ((x) < (y) ? (y) : (x))
49 #endif
50 
51 /* Key codes used */
52 #define K_DELETE	(-1)
53 #define K_RETURN	(-2)
54 #define K_ESCAPE	(-3)
55 
56 /* Types of widgets */
57 #define O_NOTHING	(-1)
58 #define O_ACTING	0
59 #define O_BUTTON	1
60 #define O_SLIDER	2
61 #define O_CHECKBOX	3
62 #define O_MBUTTON	4
63 #define O_LSLIDER	5
64 #define O_RSLIDER	6
65 #define O_TSLIDER	7
66 
67 /* Types of mouse actions */
68 #define M_DOWN		0
69 #define M_UP		1
70 #define M_DRAG		2
71 #define M_HOLD		3
72 #define M_REDISPLAY	4
73 
74 /* Forces */
75 #define FR_GRAV		0
76 #define FR_CMASS	1
77 #define FR_PTATTRACT	2
78 #define FR_WALL		3
79 
80 #define BF_NUM		4
81 
82 /* Defaults */
83 #define DEF_TSTEP	0.025
84 
85 typedef struct {
86     double cur_mass, cur_rest;
87     double cur_ks, cur_kd;
88     boolean fix_mass, show_spring;
89     int center_id;
90     int bf_mode[BF_NUM];
91     double cur_grav_val[BF_NUM];
92     double cur_misc_val[BF_NUM];
93     double cur_visc, cur_stick;
94     double cur_dt, cur_prec;
95     boolean adaptive_step, grid_snap;
96     double cur_gsnap;
97     boolean w_top, w_left, w_right, w_bottom;
98     int collide;
99 } t_state;
100 
101 /* -------- Functions/variables defined --------- */
102 
103 /* widget.c */
104 extern boolean scan_flag, key_widgets(), check_widgets();
105 extern void init_widgets(), add_button(), add_modebutton(), add_checkbox(), add_slider(), redraw_widgets();
106 extern void update_slider(), activate_mbutton();
107 extern int slider_valno();
108 
109 /* xdisp.c */
110 extern int main_wid, main_ht, draw_wid, draw_ht;
111 extern char filename[];
112 extern int cursor_pos, spthick;
113 extern int file_op, mass_radius();
114 extern void fatal(), disp_filename(), redraw_system(), review_system();
115 extern t_state mst;
116 
117 /* keypress.c */
118 extern void key_press();
119 
120 /* misc.c */
121 extern char *xmalloc(), *xrealloc();
122 
123 /* obj.c */
124 extern void init_objects(), delete_mass(), delete_spring(), delete_selected(), add_massparent(), del_massparent();
125 extern void select_object(), select_objects(), unselect_all(), select_all(), translate_selobj(), set_center();
126 extern boolean anything_selected();
127 extern int create_mass(), create_spring(), nearest_object();
128 
129 /* phys.c */
130 extern boolean animate_obj();
131