File: patch-1.fix

package info (click to toggle)
infocom 4.01pl2-8
  • links: PTS
  • area: non-free
  • in suites: potato
  • size: 464 kB
  • ctags: 990
  • sloc: ansic: 8,232; perl: 961; makefile: 86
file content (354 lines) | stat: -rw-r--r-- 9,785 bytes parent folder | download | duplicates (3)
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
Newsgroups: rec.games.int-fiction
Path: raven.alaska.edu!news.u.washington.edu!usenet.coe.montana.edu!uakari.primate.wisc.edu!caen!spool.mu.edu!sgiblab!munnari.oz.au!metro!extro.ucc.su.OZ.AU!peril
From: peril@extro.ucc.su.OZ.AU (Peter Lisle)
Subject: Patch for ITF V4.01 Interpreter
Message-ID: <peril.718383994@extro.ucc.su.OZ.AU>
Keywords: ITF V4.01 Interpreter Patch
Sender: news@ucc.su.OZ.AU
Nntp-Posting-Host: extro.ucc.su.oz.au
Organization: Sydney University Computing Service, Sydney, NSW, Australia
Date: Tue, 6 Oct 1992 15:06:34 GMT
Lines: 342
 
 
Oops, umm, well, err .... thars bugs in them thar sources ...
 
There were a few bugs in our version 4.01 sources. We will be modifying our
ftp site shortly (it may take a few days). In the mean time, either call us all
silly wombats, or try the following patches. They should fix most of the bugs
that were reported (and at least one that wasn't).
 
They affect the following files: infocom.c, init.c and object.c
 
They fix the -hovr option problems for unix machines (INIT_IO() should have
been called before init()) - this bug does not affect MSDOS machines and hence
wasn't picked up in this version.
 
Thanks to Mike Kienenberger for pointing us to the problem with the
script_status_ptr variable. The following patches also fix this problem.
However, Mike's patch is not quite correct - data_head is a local copy of
the game file's header, but it isn't updated when the interpreter uses a
save_byte_array instruction to change the header variables during the game.
So script_status_ptr should actually point to the region pointed to by base_ptr.
The init_script() code is actually correct. Our mistake was to use base_ptr
before it was given a proper value by malloc. The following patches fix this
problem correctly.
 
In beyond zork, the arrow keys will not work. If you notice, we have set the
interpreter to be an APPLE2 which didn't have up and down arrows in the
early versions - setting this in the header allows the use of the space bar
to make selections instead - its a bit yuckier, but it works for us.
Arrow support may be added later ...
 
It has also been reported that some people's backspace keys don't work
properly. We think (though are not sure) that it isn't our code, but
your termcap entries that are not quite right. We have come across many
machines with brain-damaged termcap definition files. Please check that
your termcap files are correct for your terminal type. If the bug persists,
see your doctor ... or mail us with the specifics. I hope this helps ...
 
 
Sorry for the inconvenience. Please continue sending those bug reports.
 
							The ITF.
 
################################################################################
 
The following list were made using "diff -c" for the file infocom.c:
 
*** infocom.old Tue Jul 28 06:01:54 199207/28/92
--- infocom.c Tue Oct 06 19:36:54 199210/06/92
***************
*** 85,94 ****
  		{
  			if ( stop == FALSE )
  			{
  				if ( opt )
  				{
- 					init_script () ;
- 					init () ;
  					sig_async = SH_NO_IO ;
  					if ( sig_action != SH_NO_SIGNAL )
  						SIGNAL_QUIT ( sig_action ) ;
--- 85,95 ----
  		{
  			if ( stop == FALSE )
  			{
+ 				INIT_IO () ;
+ 				init () ;
+ 				init_script () ;
  				if ( opt )
  				{
  					sig_async = SH_NO_IO ;
  					if ( sig_action != SH_NO_SIGNAL )
  						SIGNAL_QUIT ( sig_action ) ;
***************
*** 98,106 ****
  				}
  				else
  				{
- 					init_script () ;
- 					INIT_IO () ;
- 					init () ;
  					if ( stop == FALSE )
  					{
  						init_interpreter ( TRUE ) ;
--- 99,104 ----
***************
 
################################################################################
 
After modification, the file should look like:
 
			if ( stop == FALSE )
			{
				INIT_IO () ;
				init () ;
				init_script () ;
				if ( opt )
				{
					sig_async = SH_NO_IO ;
					if ( sig_action != SH_NO_SIGNAL )
						SIGNAL_QUIT ( sig_action ) ;
					options ( opt ) ;
					sig_async = SH_EXIT ;
					deallocate () ;
				}
				else
				{
					if ( stop == FALSE )
					{
						init_interpreter ( TRUE ) ;
						sig_async = SH_NORMAL ;
						if ( sig_action != SH_NO_SIGNAL )
							SIGNAL_QUIT ( sig_action ) ;
						execute_opcode () ;
					}
					sig_async = SH_EXIT ;
					deallocate () ;
					EXIT_IO () ;
				}
			}
 
################################################################################
 
The following list were made using "diff -c" for the file init.c:
 
*** init.old Tue Jul 28 06:01:54 199207/28/92
--- init.c Tue Oct 06 19:48:06 199210/06/92
***************
*** 139,144 ****
--- 139,147 ----
  
  			jmp_op2[0x2A] = split_screen ;
  			jmp_op2[0x2B] = set_current_window ;
+ 
+ 			operands[0x2A] = 1 ;			/* split_screen           */
+ 			operands[0x2B] = 1 ;			/* set_current_window     */
  		}
  	}
***************
 
################################################################################
 
After modification, the file should look like:
 
	if ( version == VERSION_3 )
	{
		jmp_op0[0x0C] = prt_status ;
		jmp_op0[0x0D] = verify ;
		if ( enhanced )
		{
			/*
			**	In the Standard Series Executor, two extra opcodes can
			**	be enabled for screen formatting. Some machines may not
			**	be able to support these extra commands ( opcodes $EA &
			**	$EB - corresponding to entries "split_screen" ($2A) &
			**	"set_current_screen" ($2B) in the array "(*jmp_op2[])()" ).
			*/
 
			jmp_op2[0x2A] = split_screen ;
			jmp_op2[0x2B] = set_current_window ;
 
			operands[0x2A] = 1 ;			/* split_screen           */
			operands[0x2B] = 1 ;			/* set_current_window     */
		}
	}
 
################################################################################
 
The following list were made using "diff -c" for the file object.c:
 
*** object.old Tue Jul 28 06:02:00 199207/28/92
--- object.c Tue Oct 06 20:22:12 199210/06/92
***************
*** 27,33 ****
  	if ( xfer )
  	{
  		print_char ( (word)'[' ) ;
! 		p_obj ( o1 ) ;
  		print_char ( (word)' ' ) ;
  		print_char ( (word)'-' ) ;
  		print_char ( (word)'>' ) ;
--- 27,33 ----
  	if ( xfer )
  	{
  		print_char ( (word)'[' ) ;
! 		std_p_obj ( o1 ) ;
  		print_char ( (word)' ' ) ;
  		print_char ( (word)'-' ) ;
  		print_char ( (word)'>' ) ;
***************
*** 32,38 ****
  		print_char ( (word)'-' ) ;
  		print_char ( (word)'>' ) ;
  		print_char ( (word)' ' ) ;
! 		p_obj ( o2 ) ;
  		print_char ( (word)']' ) ;
  		new_line () ;
  	}
--- 32,38 ----
  		print_char ( (word)'-' ) ;
  		print_char ( (word)'>' ) ;
  		print_char ( (word)' ' ) ;
! 		std_p_obj ( o2 ) ;
  		print_char ( (word)']' ) ;
  		new_line () ;
  	}
***************
*** 63,69 ****
  	if ( xfer )
  	{
  		print_char ( (word)'[' ) ;
! 		p_obj ( o1 ) ;
  		print_char ( (word)' ' ) ;
  		print_char ( (word)'-' ) ;
  		print_char ( (word)'>' ) ;
--- 63,69 ----
  	if ( xfer )
  	{
  		print_char ( (word)'[' ) ;
! 		plus_p_obj ( o1 ) ;
  		print_char ( (word)' ' ) ;
  		print_char ( (word)'-' ) ;
  		print_char ( (word)'>' ) ;
***************
*** 68,74 ****
  		print_char ( (word)'-' ) ;
  		print_char ( (word)'>' ) ;
  		print_char ( (word)' ' ) ;
! 		p_obj ( o2 ) ;
  		print_char ( (word)']' ) ;
  		new_line () ;
  	}
--- 68,74 ----
  		print_char ( (word)'-' ) ;
  		print_char ( (word)'>' ) ;
  		print_char ( (word)' ' ) ;
! 		plus_p_obj ( o2 ) ;
  		print_char ( (word)']' ) ;
  		new_line () ;
  	}
***************
*** 163,169 ****
  	if ( attribute )
  	{
  		print_char ( (word)'[' ) ;
! 		p_obj ( obj_num ) ;
  		print_char ( (word)'(' ) ;
  		print_num ( attr ) ;
  		print_char ( (word)')' ) ;
--- 163,169 ----
  	if ( attribute )
  	{
  		print_char ( (word)'[' ) ;
! 		std_p_obj ( obj_num ) ;
  		print_char ( (word)'(' ) ;
  		print_num ( attr ) ;
  		print_char ( (word)')' ) ;
***************
*** 205,211 ****
  	if ( attribute )
  	{
  		print_char ( (word)'[' ) ;
! 		p_obj ( obj_num ) ;
  		print_char ( (word)'(' ) ;
  		print_num ( attr ) ;
  		print_char ( (word)')' ) ;
--- 205,211 ----
  	if ( attribute )
  	{
  		print_char ( (word)'[' ) ;
! 		plus_p_obj ( obj_num ) ;
  		print_char ( (word)'(' ) ;
  		print_num ( attr ) ;
  		print_char ( (word)')' ) ;
***************
*** 248,254 ****
  	if ( attribute )
  	{
  		print_char ( (word)'[' ) ;
! 		p_obj ( obj_num ) ;
  		print_char ( (word)'(' ) ;
  		print_num ( attr ) ;
  		print_char ( (word)')' ) ;
--- 248,254 ----
  	if ( attribute )
  	{
  		print_char ( (word)'[' ) ;
! 		std_p_obj ( obj_num ) ;
  		print_char ( (word)'(' ) ;
  		print_num ( attr ) ;
  		print_char ( (word)')' ) ;
***************
*** 284,290 ****
  	if ( attribute )
  	{
  		print_char ( (word)'[' ) ;
! 		p_obj ( obj_num ) ;
  		print_char ( (word)'(' ) ;
  		print_num ( attr ) ;
  		print_char ( (word)')' ) ;
--- 284,290 ----
  	if ( attribute )
  	{
  		print_char ( (word)'[' ) ;
! 		plus_p_obj ( obj_num ) ;
  		print_char ( (word)'(' ) ;
  		print_num ( attr ) ;
  		print_char ( (word)')' ) ;
***************
*** 320,326 ****
  	if ( attribute )
  	{
  		print_char ( (word)'[' ) ;
! 		p_obj ( obj_num ) ;
  		print_char ( (word)'(' ) ;
  		print_num ( attr ) ;
  		print_char ( (word)')' ) ;
--- 320,326 ----
  	if ( attribute )
  	{
  		print_char ( (word)'[' ) ;
! 		std_p_obj ( obj_num ) ;
  		print_char ( (word)'(' ) ;
  		print_num ( attr ) ;
  		print_char ( (word)')' ) ;
***************
*** 356,362 ****
  	if ( attribute )
  	{
  		print_char ( (word)'[' ) ;
! 		p_obj ( obj_num ) ;
  		print_char ( (word)'(' ) ;
  		print_num ( attr ) ;
  		print_char ( (word)')' ) ;
--- 356,362 ----
  	if ( attribute )
  	{
  		print_char ( (word)'[' ) ;
! 		plus_p_obj ( obj_num ) ;
  		print_char ( (word)'(' ) ;
  		print_num ( attr ) ;
  		print_char ( (word)')' ) ;
################################################################################