More factoring out of the display interface.
[vms-empire.git] / extern.h
1 /* $Id: extern.h,v 1.8 2006/07/25 15:59:54 esr Exp esr $  - (c) Copyright 1987, 1988 Chuck Simmons */
2
3 /*
4  *    Copyright (C) 1987, 1988 Chuck Simmons
5  * 
6  * See the file COPYING, distributed with empire, for restriction
7  * and warranty information.
8  */
9
10 /*
11 extern.h -- define global non-constant storage.
12 */
13
14 /* user-supplied parameters */
15 int SMOOTH;        /* number of times to smooth map */
16 int WATER_RATIO;   /* percentage of map that is water */
17 int MIN_CITY_DIST; /* cities must be at least this far apart */
18 int delay_time;
19 int save_interval; /* turns between autosaves */
20
21 real_map_t map[MAP_SIZE]; /* the way the world really looks */
22 view_map_t comp_map[MAP_SIZE]; /* computer's view of the world */
23 view_map_t user_map[MAP_SIZE]; /* user's view of the world */
24
25 city_info_t city[NUM_CITY]; /* city information */
26
27 /*
28 There is one array to hold all allocated objects no matter who
29 owns them.  Objects are allocated from the array and placed on
30 a list corresponding to the type of object and its owner.
31 */
32
33 piece_info_t *free_list; /* index to free items in object list */
34 piece_info_t *user_obj[NUM_OBJECTS]; /* indices to user lists */
35 piece_info_t *comp_obj[NUM_OBJECTS]; /* indices to computer lists */
36 piece_info_t object[LIST_SIZE]; /* object list */
37
38 /* Display information. */
39 int lines; /* lines on screen */
40 int cols; /* columns on screen */
41
42 /* constant data */
43 extern piece_attr_t piece_attr[];
44 extern int dir_offset[];
45 extern char *func_name[];
46 extern int move_order[];
47 extern char type_chars[];
48 extern char tt_attack[];
49 extern char army_attack[];
50 extern char fighter_attack[];
51 extern char ship_attack[];
52
53 extern move_info_t tt_load;
54 extern move_info_t tt_explore;
55 extern move_info_t tt_unload;
56 extern move_info_t army_fight;
57 extern move_info_t army_load;
58 extern move_info_t fighter_fight;
59 extern move_info_t ship_fight;
60 extern move_info_t ship_repair;
61 extern move_info_t user_army;
62 extern move_info_t user_army_attack;
63 extern move_info_t user_fighter;
64 extern move_info_t user_ship;
65 extern move_info_t user_ship_repair;
66
67 extern char *help_cmd[];
68 extern char *help_edit[];
69 extern char *help_user[];
70 extern int cmd_lines;
71 extern int edit_lines;
72 extern int user_lines;
73
74 /* miscellaneous */
75 long date; /* number of game turns played */
76 char automove; /* TRUE iff user is in automove mode */
77 char resigned; /* TRUE iff computer resigned */
78 char debug; /* TRUE iff in debugging mode */
79 char print_debug; /* TRUE iff we print debugging stuff */
80 char print_vmap; /* TRUE iff we print view maps */
81 char trace_pmap; /* TRUE if we are tracing pmaps */
82 int win; /* set when game is over */
83 char jnkbuf[STRSIZE]; /* general purpose temporary buffer */
84 char save_movie; /* TRUE iff we should save movie screens */
85 int user_score; /* "score" for user and computer */
86 int comp_score;
87 char *savefile;
88
89 /* Screen updating macros */
90 #define display_loc_u(loc) display_loc(USER,user_map,loc)
91 #define display_loc_c(loc) display_loc(COMP,comp_map,loc)
92 #define print_sector_u(sector) print_sector(USER,user_map,sector)
93 #define print_sector_c(sector) print_sector(COMP,comp_map,sector)
94 #define loc_row(loc) ((loc)/MAP_WIDTH)
95 #define loc_col(loc) ((loc)%MAP_WIDTH)
96 #define row_col_loc(row,col) ((long)((row)*MAP_WIDTH + (col)))
97 #define sector_row(sector) ((sector)%SECTOR_ROWS)
98 #define sector_col(sector) ((sector)/SECTOR_ROWS)
99 #define row_col_sector(row,col) ((int)((col)*SECTOR_ROWS+(row)))
100
101 #define loc_sector(loc) \
102         row_col_sector(loc_row(loc)/ROWS_PER_SECTOR, \
103                        loc_col(loc)/COLS_PER_SECTOR)
104                        
105 #define sector_loc(sector) row_col_loc( \
106                 sector_row(sector)*ROWS_PER_SECTOR+ROWS_PER_SECTOR/2, \
107                 sector_col(sector)*COLS_PER_SECTOR+COLS_PER_SECTOR/2)
108                 
109 /* global routines */
110
111 void empire();
112
113 void attack(piece_info_t *att_obj, long loc);
114 void comp_move(int nmoves);
115 void user_move();
116 void edit(long edit_cursor);
117
118 /* map routines */
119 void vmap_cont (int *cont_map, view_map_t *vmap, long loc, char bad_terrain);
120 void rmap_cont (int *cont_map, long loc, char bad_terrain);
121 void vmap_mark_up_cont (int *cont_map, view_map_t *vmap, long loc, char bad_terrain);
122 scan_counts_t vmap_cont_scan (int *cont_map, view_map_t *vmap);
123 scan_counts_t rmap_cont_scan (int *cont_map);
124 int map_cont_edge (int *cont_map, long loc);
125 long vmap_find_aobj (path_map_t path_map[], view_map_t *vmap, long loc, move_info_t *move_info);
126 long vmap_find_wobj (path_map_t path_map[], view_map_t *vmap, long loc, move_info_t *move_info);
127 long vmap_find_lobj (path_map_t path_map[], view_map_t *vmap, long loc, move_info_t *move_info);
128 long vmap_find_lwobj (path_map_t path_map[],view_map_t *vmap,long loc,move_info_t *move_info,int beat_cost);
129 long vmap_find_wlobj (path_map_t path_map[], view_map_t *vmap, long loc, move_info_t *move_info);
130 long vmap_find_dest (path_map_t path_map[], view_map_t vmap[], long cur_loc, long dest_loc, int owner, int terrain);
131 void vmap_prune_explore_locs (view_map_t *vmap);
132 void vmap_mark_path (path_map_t *path_map, view_map_t *vmap, long dest);
133 void vmap_mark_adjacent (path_map_t path_map[], long loc);
134 void vmap_mark_near_path (path_map_t path_map[], long loc);
135 long vmap_find_dir (path_map_t path_map[], view_map_t *vmap, long loc,  char *terrain, char *adjchar);
136 int vmap_count_adjacent (view_map_t *vmap, long loc, char *adj_char);
137 int vmap_shore (view_map_t *vmap, long loc);
138 int rmap_shore (long loc);
139 int vmap_at_sea (view_map_t *vmap, long loc);
140 int rmap_at_sea (long loc);
141
142 /* display routines */
143 void redisplay();
144 void kill_display ();
145 void sector_change ();
146 int cur_sector ();
147 long cur_cursor ();
148 void display_loc (int whose, view_map_t vmap[], long loc);
149 void display_locx (int whose, view_map_t vmap[], long loc);
150 void print_sector (int whose, view_map_t vmap[], int sector);
151 int move_cursor (long *cursor, int offset);
152 void print_zoom (view_map_t *vmap);
153 void print_pzoom (char *s, path_map_t *pmap, view_map_t *vmap);
154 void print_xzoom (view_map_t *vmap);
155 void display_score ();
156 #ifdef A_COLOR
157 void init_colors ();
158 #endif /* A_COLOR */
159 void redraw ();
160 void clear_screen ();
161 void delay ();
162 void close_disp ();
163 void pos_str (int row, int col, char *str, int a, int b, int c, int d, int e, int f, int g, int h);
164 void pos_str1 (int row, int col, char *str, char *a, int b, int c, int d, int e, int f, int g, int h);
165 void addprintf (char *str, int a, int b, int c, int d, int e, int f, int g, int h);
166 void addprintf1 (char *str, char *a, int b, int c, int d, int e, int f, int g, int h);
167 void addprintf2 (char *str, char *a, int b, int c, int d, char *e, char *f, int g, int h);
168
169 void init_game (); /* game routines */
170 void save_game ();
171 int restore_game ();
172 void save_movie_screen ();
173 void replay_movie ();
174
175 void get_str (char *buf, int sizep); /* input routines */
176 void get_strq (char *buf, int sizep);
177 char get_chx ();
178 int getint (char *message);
179 char get_c ();
180 char get_cq ();
181 int getyn (char *message);
182 int get_range (char *message, int low, int high);
183
184 void rndini (); /* math routines */
185 long irand (long high);
186 int dist (long a, long b);
187 int isqrt (int n);
188
189 int find_nearest_city (long loc, int owner, long *city_loc);
190 city_info_t *find_city (long loc); /* object routines */
191 piece_info_t *find_obj (int type, long loc);
192 piece_info_t *find_nfull (int type, long loc);
193 long find_transport (int owner, long loc);
194 piece_info_t *find_obj_at_loc (long loc);
195 int obj_moves (piece_info_t *obj);
196 int obj_capacity (piece_info_t *obj);
197 void kill_obj (piece_info_t *obj, long loc);
198 void kill_city (city_info_t *cityp);
199 void produce (city_info_t *cityp);
200 void move_obj (piece_info_t *obj, long new_loc);
201 void move_sat (piece_info_t *obj);
202 int good_loc (piece_info_t *obj, long loc);
203 void embark (piece_info_t *ship, piece_info_t *obj);
204 void disembark (piece_info_t *obj);
205 void describe_obj (piece_info_t *obj);
206 void scan (view_map_t vmap[], long loc);
207 void scan_sat (view_map_t *vmap, long loc);
208 void set_prod (city_info_t *cityp);
209
210 /* terminal routines */
211 void pdebug (char *s, int a, int b, int c, int d, int e, int f, int g, int h);
212 void topini ();
213 void clreol (int linep, int colp);
214 void topmsg (int linep, char *buf, int a, int b, int c, int d, int e, int f, int g, int h);
215 void topmsg1 (int linep, char *buf, char *a, int b, int c, int d, int e, int f, int g, int h);
216 void topmsg2 (int linep, char *buf, char *a, int b, int c, int d, char *e, char *f, int g, int h);
217 void prompt (char *buf, int a, int b, int c, int d, int e, int f, int g, int h);
218 void prompt1 (char *buf, char *a, int b, int c, int d, int e, int f, int g, int h);
219 void prompt2 (char *buf, char *a, int b, int c, int d, char *e, char *f, int g, int h);
220 void error (char *buf, int a, int b, int c, int d, int e, int f, int g, int h);
221 void info (char *a, char *b, char *c);
222 void comment (char *buf, int a, int b, int c, int d, int e, int f, int g, int h);
223 void comment1 (char *buf,char *a, int b, int c, int d, int e, int f, int g, int h);
224 void extra (char *buf, int a, int b, int c, int d, int e, int f, int g, int h);
225 void huh ();
226 void help (char **text, int nlines);
227 void set_need_delay ();
228 void ksend (char *buf, int a, int b, int c, int d, int e, int f, int g, int h);
229 void ksend1 (char *buf, char *a, int b, int c, int d, int e, int f, int g, int h);
230
231 /* utility routines */
232 void ttinit ();
233 void assert (char *expression, char *file, int line);
234 void empend ();
235 char upper (char c);
236 void tupper (char *str);
237 void check ();
238 int loc_disp (int loc);
239
240 /* randon routines we use */
241 long time();
242 void exit();
243 void perror();
244 void srand();
245 #ifndef LINUX
246 char *strcpy();
247 #endif