minor cleanups for cray
[unix-history] / usr / src / games / sail / pl_6.c
CommitLineData
b5f0675e 1/*
1e008c14 2 * Copyright (c) 1983 Regents of the University of California.
c0ca48ec
KB
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms are permitted
65c7d3b6
KB
6 * provided that the above copyright notice and this paragraph are
7 * duplicated in all such forms and that any documentation,
8 * advertising materials, and other materials related to such
9 * distribution and use acknowledge that the software was developed
10 * by the University of California, Berkeley. The name of the
11 * University may not be used to endorse or promote products derived
12 * from this software without specific prior written permission.
13 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
b5f0675e
EW
16 */
17
7b487c4c 18#ifndef lint
65c7d3b6 19static char sccsid[] = "@(#)pl_6.c 5.3 (Berkeley) %G%";
c0ca48ec 20#endif /* not lint */
7b487c4c
EW
21
22#include "player.h"
23
24repair()
25{
26 char c;
586c712a
EW
27 register char *repairs;
28 register struct shipspecs *ptr = mc;
29 register int count;
30
31#define FIX(x, m) (m - ptr->x > count \
32 ? (ptr->x += count, count = 0) : (count -= m - ptr->x, ptr->x = m))
7b487c4c
EW
33
34 if (repaired || loaded || fired || changed || turned()) {
35 Signal("No hands free to repair", (struct ship *)0);
36 return;
37 }
7b487c4c
EW
38 c = sgetch("Repair (hull, guns, rigging)? ", (struct ship *)0, 1);
39 switch (c) {
40 case 'h':
41 repairs = &mf->RH;
42 break;
43 case 'g':
44 repairs = &mf->RG;
45 break;
46 case 'r':
47 repairs = &mf->RR;
48 break;
49 default:
50 Signal("Avast heaving!", (struct ship *)0);
51 return;
52 }
7b487c4c 53 if (++*repairs >= 3) {
586c712a 54 count = 2;
7b487c4c 55 switch (c) {
586c712a
EW
56 case 'h': {
57 int max = ptr->guns/4;
58 if (ptr->hull < max) {
59 FIX(hull, max);
60 Write(W_HULL, ms, 0, ptr->hull, 0, 0, 0);
61 }
7b487c4c 62 break;
586c712a 63 }
7b487c4c
EW
64 case 'g':
65 if (ptr->gunL < ptr->gunR) {
586c712a
EW
66 int max = ptr->guns/5 - ptr->carL;
67 if (ptr->gunL < max) {
68 FIX(gunL, max);
69 Write(W_GUNL, ms, 0, ptr->gunL,
70 ptr->carL, 0, 0);
71 }
72 } else {
73 int max = ptr->guns/5 - ptr->carR;
74 if (ptr->gunR < max) {
75 FIX(gunR, max);
76 Write(W_GUNR, ms, 0, ptr->gunR,
77 ptr->carR, 0, 0);
78 }
79 }
7b487c4c
EW
80 break;
81 case 'r':
586c712a
EW
82#define X 2
83 if (ptr->rig4 >= 0 && ptr->rig4 < X) {
84 FIX(rig4, X);
85 Write(W_RIG4, ms, 0, ptr->rig4, 0, 0, 0);
86 }
87 if (count && ptr->rig3 < X) {
88 FIX(rig3, X);
89 Write(W_RIG3, ms, 0, ptr->rig3, 0, 0, 0);
90 }
91 if (count && ptr->rig2 < X) {
92 FIX(rig2, X);
93 Write(W_RIG2, ms, 0, ptr->rig2, 0, 0, 0);
94 }
95 if (count && ptr->rig1 < X) {
96 FIX(rig1, X);
97 Write(W_RIG1, ms, 0, ptr->rig1, 0, 0, 0);
98 }
7b487c4c
EW
99 break;
100 }
586c712a 101 if (count == 2) {
7b487c4c 102 Signal("Repairs completed.", (struct ship *)0);
fcc6b1db
EW
103 *repairs = 2;
104 } else {
105 *repairs = 0;
490c485f 106 blockalarm();
fcc6b1db 107 draw_stat();
490c485f 108 unblockalarm();
fcc6b1db 109 }
7b487c4c 110 }
490c485f 111 blockalarm();
fcc6b1db 112 draw_slot();
490c485f 113 unblockalarm();
586c712a 114 repaired = 1;
7b487c4c
EW
115}
116
117turned()
118{
119 register char *p;
120
121 for (p = movebuf; *p; p++)
122 if (*p == 'r' || *p == 'l')
123 return 1;
124 return 0;
125}
126
127loadplayer()
128{
129 char c;
130 register loadL, loadR, ready, load;
131
132 if (!mc->crew3) {
133 Signal("Out of crew", (struct ship *)0);
134 return;
135 }
136 loadL = mf->loadL;
137 loadR = mf->loadR;
138 if (!loadL && !loadR) {
139 c = sgetch("Load which broadside (left or right)? ",
140 (struct ship *)0, 1);
141 if (c == 'r')
142 loadL = 1;
143 else
144 loadR = 1;
145 }
146 if (!loadL && loadR || loadL && !loadR) {
147 c = sgetch("Reload with (round, double, chain, grape)? ",
148 (struct ship *)0, 1);
149 switch (c) {
150 case 'r':
151 load = L_ROUND;
152 ready = 0;
153 break;
154 case 'd':
155 load = L_DOUBLE;
156 ready = R_DOUBLE;
157 break;
158 case 'c':
159 load = L_CHAIN;
160 ready = 0;
161 break;
162 case 'g':
163 load = L_GRAPE;
164 ready = 0;
165 break;
166 default:
167 Signal("Broadside not loaded.",
168 (struct ship *)0);
169 return;
170 }
171 if (!loadR) {
172 mf->loadR = load;
173 mf->readyR = ready|R_LOADING;
174 } else {
175 mf->loadL = load;
176 mf->readyL = ready|R_LOADING;
177 }
178 loaded = 1;
179 }
180}