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