1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32: #include <sys/cdefs.h>
33: #ifndef lint
34: #if 0
35: static char sccsid[] = "@(#)globals.c 8.2 (Berkeley) 4/28/95";
36: #else
37: __RCSID("$NetBSD: globals.c,v 1.13 2003/08/07 09:37:42 agc Exp $");
38: #endif
39: #endif
40:
41: #include <sys/types.h>
42: #include <setjmp.h>
43: #include "extern.h"
44:
45: struct scenario scene[] = {
46:
47:
48:
49:
50:
51:
52:
53:
54: { 5, 3, 5, 2, "Ranger vs. Drake",
55: {
56: { "Ranger", specs+0, N_A, 7, 20, 4, 0 },
57: { "Drake", specs+1, N_B, 7, 31, 5, 0 }
58: }
59: },
60: { 1, 3, 6, 2, "The Battle of Flamborough Head",
61: {
62: { "Bonhomme Rich", specs+2, N_A, 13, 40, 2, 0 },
63: { "Serapis", specs+3, N_B, 2, 42, 2, 0 }
64: }
65: },
66: { 5, 5, 5, 10, "Arbuthnot and Des Touches",
67: {
68: { "America", specs+4, N_B, 7, 37, 4, 0 },
69: { "Befford", specs+5, N_B, 5, 35, 4, 0 },
70: { "Adamant", specs+6, N_B, 3, 33, 4, 0 },
71: { "London", specs+7, N_B, 1, 31, 4, 0 },
72: { "Royal Oak", specs+8, N_B, -1, 29, 4, 0 },
73: { "Neptune", specs+9, N_F, 6, 44, 4, 0 },
74: { "Duc Bougogne", specs+10, N_F, 8, 46, 4, 0 },
75: { "Conquerant", specs+48, N_F, 10, 48, 4, 0 },
76: { "Provence", specs+11, N_F, 12, 50, 4, 0 },
77: { "Romulus", specs+12, N_F, 20, 58, 4, 0 }
78: }
79: },
80: { 1, 3, 5, 10, "Suffren and Hughes",
81: {
82: { "Monmouth", specs+52, N_B, 9, 45, 2, 0 },
83: { "Hero", specs+5, N_B, 13, 49, 2, 0 },
84: { "Isis", specs+6, N_B, 12, 48, 2, 0 },
85: { "Superb", specs+50, N_B, 10, 46, 2, 0 },
86: { "Burford", specs+48, N_B, 11, 47, 2, 0 },
87: { "Flamband", specs+13, N_F, 7, 59, 4, 0 },
88: { "Annibal", specs+9, N_F, 4, 56, 4, 0 },
89: { "Severe", specs+11, N_F, 2, 54, 4, 0 },
90: { "Brilliant", specs+49, N_F, -1, 51, 4, 0 },
91: { "Sphinx", specs+51, N_F, -5, 47, 4, 0 }
92: }
93: },
94: { 1, 3, 4, 2, "Nymphe vs. Cleopatre",
95: {
96: { "Nymphe", specs+14, N_B, 13, 30, 2, 0 },
97: { "Cleopatre", specs+15, N_F, 3, 41, 2, 0 }
98: }
99: },
100: { 1, 3, 5, 2, "Mars vs. Hercule",
101: {
102: { "Mars", specs+16, N_B, 13, 30, 2, 0 },
103: { "Hercule", specs+17, N_F, 3, 41, 2, 0 }
104: }
105: },
106: { 5, 3, 5, 2, "Ambuscade vs. Baionnaise",
107: {
108: { "Ambuscade", specs+18, N_B, 13, 30, 2, 0 },
109: { "Baionnaise", specs+19, N_F, 3, 41, 2, 0 }
110: }
111: },
112: { 1, 5, 6, 2, "Constellation vs. Insurgent",
113: {
114: { "Constellation", specs+20, N_A, 9, 50, 8, 0 },
115: { "Insurgent", specs+22, N_F, 4, 24, 2, 0 }
116: }
117: },
118: { 1, 3, 5, 2, "Constellation vs. Vengeance",
119: {
120: { "Constellation", specs+20, N_A, 12, 40, 2, 0 },
121: { "Vengeance", specs+21, N_F, 1, 43, 2, 0 }
122: }
123: },
124: { 1, 3, 6, 10, "The Battle of Lissa",
125: {
126: { "Amphion", specs+23, N_B, 8, 50, 4, 0 },
127: { "Active", specs+24, N_B, 6, 48, 4, 0 },
128: { "Volage", specs+25, N_B, 4, 46, 4, 0 },
129: { "Cerberus", specs+26, N_B, 2, 44, 4, 0 },
130: { "Favorite", specs+27, N_F, 9, 34, 2, 0 },
131: { "Flore", specs+21, N_F, 13, 39, 2, 0 },
132: { "Danae", specs+64, N_F, 15, 37, 2, 0 },
133: { "Bellona", specs+28, N_F, 17, 35, 2, 0 },
134: { "Corona", specs+29, N_F, 12, 31, 2, 0 },
135: { "Carolina", specs+30, N_F, 15, 28, 2, 0 }
136: }
137: },
138: { 2, 5, 6, 2, "Constitution vs. Guerriere",
139: {
140: { "Constitution", specs+31, N_A, 7, 35, 1, 0 },
141: { "Guerriere", specs+32, N_B, 7, 47, 4, 0 }
142: }
143: },
144: { 1, 3, 5, 2, "United States vs. Macedonian",
145: {
146: { "United States", specs+33, N_A, 1, 52, 6, 0 },
147: { "Macedonian", specs+34, N_B, 14, 40, 1, 0 }
148: }
149: },
150: { 1, 3, 6, 2, "Constitution vs. Java",
151: {
152: { "Constitution", specs+31, N_A, 1, 40, 2, 0 },
153: { "Java", specs+35, N_B, 11, 40, 2, 0 }
154: }
155: },
156: { 1, 3, 5, 2, "Chesapeake vs. Shannon",
157: {
158: { "Chesapeake", specs+36, N_A, 13, 40, 2, 0 },
159: { "Shannon", specs+37, N_B, 1, 42, 2, 0 }
160: }
161: },
162: { 1, 1, 6, 5, "The Battle of Lake Erie",
163: {
164: { "Lawrence", specs+38, N_A, 4, 55, 8, 0 },
165: { "Niagara", specs+42, N_A, 7, 61, 8, 0 },
166: { "Lady Prevost", specs+39, N_B, 4, 25, 2, 0 },
167: { "Detroit", specs+40, N_B, 7, 22, 2, 0 },
168: { "Q. Charlotte", specs+41, N_B, 10, 19, 2, 0 }
169: }
170: },
171: { 1, 1, 5, 2, "Wasp vs. Reindeer",
172: {
173: { "Wasp", specs+42, N_A, 3, 41, 2, 0 },
174: { "Reindeer", specs+43, N_B, 10, 48, 2, 0 }
175: }
176: },
177: { 1, 2, 5, 3, "Constitution vs. Cyane and Levant",
178: {
179: { "Constitution", specs+31, N_A, 10, 45, 2, 0 },
180: { "Cyane", specs+44, N_B, 3, 37, 2, 0 },
181: { "Levant", specs+45, N_B, 5, 35, 2, 0 }
182: }
183: },
184: { 5, 5, 5, 3, "Pellew vs. Droits de L'Homme",
185: {
186: { "Indefatigable", specs+46, N_B, 12, 45, 6, 0 },
187: { "Amazon", specs+47, N_B, 9, 48, 6, 0 },
188: { "Droits L'Hom", specs+48, N_F, 3, 28, 5, 0 }
189: }
190: },
191: { 2, 2, 3, 10, "Algeciras",
192: {
193: { "Caesar", specs+49, N_B, 7, 70, 6, 0 },
194: { "Pompee", specs+50, N_B, 5, 72, 6, 0 },
195: { "Spencer", specs+5, N_B, 3, 74, 6, 0 },
196: { "Hannibal", specs+7, N_B, 1, 76, 6, 0 },
197: { "Real-Carlos", specs+53, N_S, 9, 20, 3, 0 },
198: { "San Fernando", specs+54, N_S, 11, 16, 3, 0 },
199: { "Argonauta", specs+55, N_S, 10, 14, 4, 0 },
200: { "San Augustine", specs+56, N_S, 6, 22, 4, 0 },
201: { "Indomptable", specs+51, N_F, 7, 23, 5, 0 },
202: { "Desaix", specs+52, N_F, 7, 27, 7, 0 }
203: }
204: },
205: { 5, 3, 6, 7, "Lake Champlain",
206: {
207: { "Saratoga", specs+60, N_A, 8, 10, 1, 0 },
208: { "Eagle", specs+61, N_A, 9, 13, 2, 0 },
209: { "Ticonderoga", specs+62, N_A, 12, 17, 3, 0 },
210: { "Preble", specs+63, N_A, 14, 20, 2, 0 },
211: { "Confiance", specs+57, N_B, 4, 70, 6, 0 },
212: { "Linnet", specs+58, N_B, 7, 68, 6, 0 },
213: { "Chubb", specs+59, N_B, 10, 65, 6, 0 }
214: }
215: },
216: { 5, 3, 6, 4, "Last Voyage of the USS President",
217: {
218: { "President", specs+67, N_A, 12, 42, 5, 0 },
219: { "Endymion", specs+64, N_B, 5, 42, 5, 0 },
220: { "Pomone", specs+65, N_B, 7, 82, 6, 0 },
221: { "Tenedos", specs+66, N_B, 7, -1, 4, 0 }
222: }
223: },
224: { 7, 5, 5, 2, "Hornblower and the Natividad",
225: {
226: { "Lydia", specs+68, N_B, 12, 40, 2, 0 },
227: { "Natividad", specs+69, N_S, 2, 40, 4, 0 }
228: }
229: },
230: { 1, 3, 6, 2, "Curse of the Flying Dutchman",
231: {
232: { "Piece of Cake", specs+19, N_S, 7, 40, 2, 0 },
233: { "Flying Dutchy", specs+71, N_F, 7, 41, 1, 0 }
234: }
235: },
236: { 1, 4, 1, 4, "The South Pacific",
237: {
238: { "USS Scurvy", specs+70, N_A, 7, 40, 1, 0 },
239: { "HMS Tahiti", specs+71, N_B, 12, 60, 1, 0 },
240: { "Australian", specs+18, N_S, 5, 20, 8, 0 },
241: { "Bikini Atoll", specs+63, N_F, 2, 60, 4, 0 }
242: }
243: },
244: { 7, 3, 6, 5, "Hornblower and the battle of Rosas bay",
245: {
246: { "Sutherland", specs+5, N_B, 13, 30, 2, 0 },
247: { "Turenne", specs+10, N_F, 9, 35, 6, 0 },
248: { "Nightmare", specs+9, N_F, 7, 37, 6, 0 },
249: { "Paris", specs+53, N_F, 3, 45, 4, 0 },
250: { "Napoleon", specs+56, N_F, 1, 40, 6, 0 }
251: }
252: },
253: { 6, 4, 7, 5, "Cape Horn",
254: {
255: { "Concord", specs+51, N_A, 3, 20, 4, 0 },
256: { "Berkeley", specs+7, N_A, 5, 50, 5, 0 },
257: { "Thames", specs+71, N_B, 10, 40, 1, 0 },
258: { "Madrid", specs+53, N_S, 13, 60, 8, 0 },
259: { "Musket", specs+10, N_F, 10, 60, 7, 0 }
260: }
261: },
262: { 8, 3, 7, 3, "New Orleans",
263: {
264: { "Alligator", specs+71, N_A, 13, 5, 1, 0 },
265: { "Firefly", specs+50, N_B, 10, 20, 8, 0 },
266: { "Cypress", specs+46, N_B, 5, 10, 6, 0 }
267: }
268: },
269: { 5, 3, 7, 3, "Botany Bay",
270: {
271: { "Shark", specs+11, N_B, 6, 15, 4, 0 },
272: { "Coral Snake", specs+31, N_F, 3, 30, 6, 0 },
273: { "Sea Lion", specs+33, N_F, 13, 50, 8, 0 }
274: }
275: },
276: { 4, 3, 6, 4, "Voyage to the Bottom of the Sea",
277: {
278: { "Seaview", specs+71, N_A, 6, 3, 3, 0 },
279: { "Flying Sub", specs+64, N_A, 8, 3, 3, 0 },
280: { "Mermaid", specs+70, N_B, 2, 5, 5, 0 },
281: { "Giant Squid", specs+53, N_S, 10, 30, 8, 0 }
282: }
283: },
284: { 7, 3, 6, 3, "Frigate Action",
285: {
286: { "Killdeer", specs+21, N_A, 7, 20, 8, 0 },
287: { "Sandpiper", specs+27, N_B, 5, 40, 8, 0 },
288: { "Curlew", specs+34, N_S, 10, 60, 8, 0 }
289: }
290: },
291: { 7, 2, 5, 6, "The Battle of Midway",
292: {
293: { "Enterprise", specs+49, N_A, 10, 70, 8, 0 },
294: { "Yorktown", specs+51, N_A, 3, 70, 7, 0 },
295: { "Hornet", specs+52, N_A, 6, 70, 7, 0 },
296: { "Akagi", specs+53, N_J, 6, 10, 4, 0 },
297: { "Kaga", specs+54, N_J, 4, 12, 4, 0 },
298: { "Soryu", specs+55, N_J, 2, 14, 4, 0 }
299: }
300: },
301: { 1, 3, 4, 8, "Star Trek",
302: {
303: { "Enterprise", specs+76, N_D,-10, 60, 7, 0 },
304: { "Yorktown", specs+77, N_D, 0, 70, 7, 0 },
305: { "Reliant", specs+78, N_D, 10, 70, 7, 0 },
306: { "Galileo", specs+79, N_D, 20, 60, 7, 0 },
307: { "Kobayashi Maru", specs+80, N_K, 0,120, 7, 0 },
308: { "Klingon II", specs+81, N_K, 10,120, 7, 0 },
309: { "Red Orion", specs+82, N_O, 0, 0, 3, 0 },
310: { "Blue Orion", specs+83, N_O, 10, 0, 3, 0 }
311: }
312: }
313: };
314: int nscene = sizeof scene / sizeof (struct scenario);
315:
316: struct shipspecs specs[] = {
317:
318:
319: { 4, 7, 3, 19, 5, 5, 4, 2, 2, 2, 2, 2, 0, 0, 4, 4, 4, 4, 7 },
320: { 4, 7, 3, 17, 5, 5, 4, 2, 2, 2, 0, 0, 4, 4, 3, 3, 3, 3, 6 },
321: { 3, 5, 2, 42, 4, 7, 4, 2, 2, 2, 2, 2, 0, 0, 5, 5, 5, -1, 11 },
322: { 4, 6, 3, 44, 3, 7, 4, 2, 2, 2, 3, 3, 0, 0, 5, 5, 5, 5, 12 },
323: { 3, 5, 2, 64, 2, 17, 4, 8, 6, 6, 12, 12, 2, 2, 7, 7, 7, -1, 20 },
324: { 3, 5, 2, 74, 2, 20, 4, 8, 8, 8, 16, 16, 2, 2, 7, 7, 7, -1, 26 },
325: { 3, 5, 2, 50, 2, 12, 4, 6, 4, 4, 8, 8, 2, 2, 6, 6, 6, -1, 17 },
326: { 3, 5, 1, 98, 1, 23, 4, 10, 10, 10, 18, 18, 2, 2, 8, 8, 8, -1, 28 },
327: { 3, 5, 2, 74, 2, 20, 4, 8, 8, 8, 16, 16, 2, 2, 7, 7, 7, -1, 26 },
328: { 3, 5, 2, 74, 2, 21, 3, 10, 10, 8, 20, 20, 0, 0, 7, 7, 7, -1, 24 },
329: { 3, 5, 1, 80, 1, 23, 3, 12, 12, 10, 22, 22, 0, 0, 7, 7, 7, -1, 27 },
330: { 3, 5, 2, 64, 2, 18, 3, 8, 8, 6, 12, 12, 0, 0, 7, 7, 7, -1, 18 },
331: { 3, 5, 2, 44, 2, 11, 3, 4, 4, 4, 6, 6, 2, 2, 5, 5, 5, -1, 10 },
332: { 3, 5, 2, 50, 2, 14, 3, 6, 6, 4, 8, 8, 0, 0, 6, 6, 6, -1, 14 },
333: { 4, 6, 3, 36, 3, 11, 4, 4, 4, 2, 4, 4, 2, 2, 5, 5, 5, 5, 11 },
334: { 4, 6, 3, 36, 3, 11, 3, 4, 4, 4, 4, 4, 2, 2, 5, 5, 5, 5, 10 },
335: { 3, 5, 2, 74, 2, 21, 4, 10, 8, 8, 18, 18, 2, 2, 7, 7, 7, -1, 26 },
336: { 3, 5, 2, 74, 2, 21, 3, 10, 10, 8, 20, 20, 2, 2, 7, 7, 7, -1, 23 },
337: { 4, 6, 3, 32, 3, 8, 3, 4, 2, 2, 4, 4, 2, 2, 5, 5, 5, 5, 9 },
338: { 4, 6, 3, 24, 4, 6, 3, 4, 4, 4, 2, 2, 0, 0, 4, 4, 4, 4, 9 },
339: { 4, 7, 3, 38, 4, 14, 5, 6, 4, 4, 4, 4, 6, 6, 5, 5, 5, 5, 17 },
340: { 4, 6, 3, 40, 3, 15, 3, 8, 6, 6, 6, 6, 4, 4, 5, 5, 5, 5, 15 },
341: { 4, 7, 3, 36, 4, 11, 3, 6, 6, 4, 4, 4, 2, 2, 5, 5, 5, 5, 11 },
342: { 4, 6, 3, 32, 3, 11, 5, 4, 4, 2, 4, 4, 2, 2, 5, 5, 5, 5, 13 },
343: { 4, 6, 3, 38, 3, 14, 5, 4, 4, 4, 6, 6, 4, 4, 5, 5, 5, 5, 18 },
344: { 4, 6, 3, 22, 3, 6, 5, 2, 2, 2, 0, 0, 8, 8, 4, 4, 4, 4, 11 },
345: { 4, 6, 3, 32, 3, 11, 5, 4, 4, 2, 4, 4, 2, 2, 5, 5, 5, 5, 13 },
346: { 4, 6, 3, 40, 3, 14, 3, 6, 6, 4, 6, 6, 4, 4, 5, 5, 5, 5, 15 },
347: { 4, 6, 3, 32, 3, 11, 2, 4, 4, 4, 4, 4, 0, 0, 5, 5, 5, 5, 9 },
348: { 4, 6, 3, 40, 3, 14, 2, 6, 6, 4, 6, 6, 4, 4, 5, 5, 5, 5, 12 },
349: { 4, 6, 3, 32, 3, 8, 2, 4, 4, 1, 2, 2, 0, 0, 4, 4, 4, 4, 7 },
350: { 4, 7, 3, 44, 4, 18, 5, 6, 6, 6, 8, 8, 6, 6, 6, 6, 6, 6, 24 },
351: { 4, 6, 3, 38, 3, 14, 4, 4, 4, 2, 6, 6, 4, 4, 5, 5, 5, 5, 15 },
352: { 4, 5, 3, 44, 3, 18, 5, 8, 6, 6, 8, 8, 8, 8, 6, 6, 6, 6, 24 },
353: { 4, 6, 3, 38, 3, 14, 4, 4, 4, 4, 6, 6, 4, 4, 5, 5, 5, 5, 16 },
354: { 4, 7, 3, 38, 4, 14, 4, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 19 },
355: { 4, 6, 3, 38, 3, 14, 3, 6, 6, 4, 6, 6, 6, 6, 5, 5, 5, 5, 14 },
356: { 4, 6, 3, 38, 3, 14, 5, 6, 4, 4, 6, 6, 6, 6, 5, 5, 5, 5, 17 },
357: { 4, 7, 3, 20, 5, 6, 4, 4, 2, 2, 0, 0, 6, 6, 4, 4, 4, 4, 9 },
358: { 4, 7, 3, 13, 6, 3, 4, 0, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 5 },
359: { 4, 7, 3, 19, 5, 5, 4, 2, 2, 2, 2, 2, 0, 0, 4, 4, 4, 4, 7 },
360: { 4, 7, 3, 17, 5, 5, 4, 2, 2, 2, 2, 2, 0, 0, 3,