1 /* LIGHTP- LIGHT PROCESSOR */
2
3 /*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/
4 /* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */
5 /* WRITTEN BY R. M. SUPNIK */
6
7 #include "funcs.h"
8 #include "vars.h"
9
lightp_(obj)10 logical lightp_(obj)
11 integer obj;
12 {
13 /* System generated locals */
14 logical ret_val;
15
16 /* Local variables */
17 integer flobts;
18 integer i;
19
20 ret_val = TRUE_;
21 /* !ASSUME WINS */
22 flobts = FLAMBT + LITEBT + ONBT;
23 if (obj != oindex_1.candl) {
24 goto L20000;
25 }
26 /* !CANDLE? */
27 if (findex_1.orcand != 0) {
28 goto L19100;
29 }
30 /* !FIRST REF? */
31 findex_1.orcand = 1;
32 /* !YES, CANDLES ARE */
33 cevent_1.ctick[cindex_1.cevcnd - 1] = 50;
34 /* !BURNING WHEN SEEN. */
35
36 L19100:
37 if (prsvec_1.prsi == oindex_1.candl) {
38 goto L10;
39 }
40 /* !IGNORE IND REFS. */
41 if (prsvec_1.prsa != vindex_1.trnofw) {
42 goto L19200;
43 }
44 /* !TURN OFF? */
45 i = 513;
46 /* !ASSUME OFF. */
47 if ((objcts_1.oflag1[oindex_1.candl - 1] & ONBT) != 0) {
48 i = 514;
49 }
50 /* !IF ON, DIFFERENT. */
51 cevent_1.cflag[cindex_1.cevcnd - 1] = FALSE_;
52 /* !DISABLE COUNTDOWN. */
53 objcts_1.oflag1[oindex_1.candl - 1] &= ~ ONBT;
54 rspeak_(i);
55 return ret_val;
56
57 L19200:
58 if (prsvec_1.prsa != vindex_1.burnw && prsvec_1.prsa != vindex_1.trnonw) {
59
60 goto L10;
61 }
62 if ((objcts_1.oflag1[oindex_1.candl - 1] & LITEBT) != 0) {
63 goto L19300;
64 }
65 rspeak_(515);
66 /* !CANDLES TOO SHORT. */
67 return ret_val;
68
69 L19300:
70 if (prsvec_1.prsi != 0) {
71 goto L19400;
72 }
73 /* !ANY FLAME? */
74 rspeak_(516);
75 /* !NO, LOSE. */
76 prsvec_1.prswon = FALSE_;
77 return ret_val;
78
79 L19400:
80 if (prsvec_1.prsi != oindex_1.match || ! ((objcts_1.oflag1[oindex_1.match
81 - 1] & ONBT) != 0)) {
82 goto L19500;
83 }
84 i = 517;
85 /* !ASSUME OFF. */
86 if ((objcts_1.oflag1[oindex_1.candl - 1] & ONBT) != 0) {
87 i = 518;
88 }
89 /* !IF ON, JOKE. */
90 objcts_1.oflag1[oindex_1.candl - 1] |= ONBT;
91 cevent_1.cflag[cindex_1.cevcnd - 1] = TRUE_;
92 /* !RESUME COUNTDOWN. */
93 rspeak_(i);
94 return ret_val;
95
96 L19500:
97 if (prsvec_1.prsi != oindex_1.torch || ! ((objcts_1.oflag1[oindex_1.torch
98 - 1] & ONBT) != 0)) {
99 goto L19600;
100 }
101 if ((objcts_1.oflag1[oindex_1.candl - 1] & ONBT) != 0) {
102 goto L19700;
103 }
104 /* !ALREADY ON? */
105 newsta_(oindex_1.candl, 521, 0, 0, 0);
106 /* !NO, VAPORIZE. */
107 return ret_val;
108
109 L19600:
110 rspeak_(519);
111 /* !CANT LIGHT WITH THAT. */
112 return ret_val;
113
114 L19700:
115 rspeak_(520);
116 /* !ALREADY ON. */
117 return ret_val;
118
119 L20000:
120 if (obj != oindex_1.match) {
121 bug_(6, obj);
122 }
123 if (prsvec_1.prsa != vindex_1.trnonw || prsvec_1.prso != oindex_1.match) {
124
125 goto L20500;
126 }
127 if (findex_1.ormtch != 0) {
128 goto L20100;
129 }
130 /* !ANY MATCHES LEFT? */
131 rspeak_(183);
132 /* !NO, LOSE. */
133 return ret_val;
134
135 L20100:
136 --findex_1.ormtch;
137 /* !DECREMENT NO MATCHES. */
138 objcts_1.oflag1[oindex_1.match - 1] |= flobts;
139 cevent_1.ctick[cindex_1.cevmat - 1] = 2;
140 /* !COUNTDOWN. */
141 rspeak_(184);
142 return ret_val;
143
144 L20500:
145 if (prsvec_1.prsa != vindex_1.trnofw || (objcts_1.oflag1[oindex_1.match -
146 1] & ONBT) == 0) {
147 goto L10;
148 }
149 objcts_1.oflag1[oindex_1.match - 1] &= ~ flobts;
150 cevent_1.ctick[cindex_1.cevmat - 1] = 0;
151 rspeak_(185);
152 return ret_val;
153
154 /* HERE FOR FALSE RETURN */
155
156 L10:
157 ret_val = FALSE_;
158 return ret_val;
159 } /* lightp_ */
160