-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathmisc.zap
698 lines (581 loc) · 13.3 KB
/
misc.zap
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
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
.SEGMENT "0"
.FUNCT PRINT-HIM/HER:ANY:1:1,X
FSET? X,PLURAL \?CCL3
PRINTI "them"
RTRUE
?CCL3: FSET? X,PERSON \?CCL5
EQUAL? X,ME,WINNER \?CCL8
PRINTI "yourself"
RTRUE
?CCL8: FSET? X,FEMALE \?CCL10
PRINTI "her"
RTRUE
?CCL10: PRINTI "him"
RTRUE
?CCL5: PRINTI "it"
RTRUE
.FUNCT CPRINT-HE/SHE:ANY:1:1,X
FSET? X,PLURAL \?CCL3
PRINTI "They"
RTRUE
?CCL3: FSET? X,PERSON \?CCL5
EQUAL? X,ME,WINNER \?CCL8
PRINTI "You"
RTRUE
?CCL8: FSET? X,FEMALE \?CCL10
PRINTI "She"
RTRUE
?CCL10: PRINTI "He"
RTRUE
?CCL5: PRINTI "It"
RTRUE
.FUNCT PRINT-HE/SHE:ANY:1:1,X
FSET? X,PLURAL \?CCL3
PRINTI "they"
RTRUE
?CCL3: FSET? X,PERSON \?CCL5
EQUAL? X,ME,WINNER \?CCL8
PRINTI "yourself"
RTRUE
?CCL8: FSET? X,FEMALE \?CCL10
PRINTI "she"
RTRUE
?CCL10: PRINTI "he"
RTRUE
?CCL5: PRINTI "it"
RTRUE
.FUNCT PRINT-HIS/HER:ANY:1:1,X
FSET? X,PLURAL \?CCL3
PRINTI "their"
RTRUE
?CCL3: FSET? X,PERSON \?CCL5
EQUAL? X,ME,WINNER \?CCL8
PRINTI "your"
RTRUE
?CCL8: FSET? X,FEMALE \?CCL10
PRINTI "her"
RTRUE
?CCL10: PRINTI "his"
RTRUE
?CCL5: PRINTI "its"
RTRUE
.FUNCT PRINT-PLURAL:ANY:1:1,OBJ
FSET? OBJ,PLURAL /FALSE
PRINTC 115
RTRUE
.FUNCT PRINTUNDER:ANY:1:1,X
HLIGHT H-UNDER
PRINT X
HLIGHT H-NORMAL
RTRUE
.FUNCT CTHE-PRINT-PRSO:ANY:0:0
CALL THE-PRINT,PRSO,TRUE-VALUE
RSTACK
.FUNCT CTHE-PRINT-PRSI:ANY:0:0
CALL THE-PRINT,PRSI,TRUE-VALUE
RSTACK
.FUNCT CTHE-PRINT:ANY:1:1,O
CALL THE-PRINT,O,TRUE-VALUE
RSTACK
.FUNCT THE-PRINT-PRSO:ANY:0:0
CALL2 THE-PRINT,PRSO
RSTACK
.FUNCT THE-PRINT-PRSI:ANY:0:0
CALL2 THE-PRINT,PRSI
RSTACK
.FUNCT THE-PRINT:ANY:1:2,O,CAP?
FSET? O,NOTHEBIT /?PRD2
PUSH 1
JUMP ?PEN1
?PRD2: PUSH 0
?PEN1: CALL DPRINT,O,CAP?,STACK
RSTACK
.FUNCT CPRINTA-PRSO:ANY:0:0
CALL PRINTA,PRSO,TRUE-VALUE
RSTACK
.FUNCT PRINTA-PRSO:ANY:0:0
CALL2 PRINTA,PRSO
RSTACK
.FUNCT PRINTA-PRSI:ANY:0:0
CALL2 PRINTA,PRSI
RSTACK
.FUNCT PRINTA:ANY:1:2,O,CAP?
FSET? O,THE \?CCL3
ZERO? CAP? /?CCL6
PRINTI "The "
JUMP ?CND1
?CCL6: PRINTI "the "
JUMP ?CND1
?CCL3: FSET? O,NOABIT /?CND1
FSET? O,AN \?CCL10
ZERO? CAP? /?CCL13
PRINTI "An "
JUMP ?CND1
?CCL13: PRINTI "an "
JUMP ?CND1
?CCL10: ZERO? CAP? /?CCL15
PRINTI "A "
JUMP ?CND1
?CCL15: PRINTI "a "
?CND1: CALL2 IPRINT,O
RSTACK
.FUNCT DPRINT-PRSO:ANY:0:0
CALL2 DPRINT,PRSO
RSTACK
.FUNCT DPRINT-PRSI:ANY:0:0
CALL2 DPRINT,PRSI
RSTACK
.FUNCT DPRINT:ANY:1:3,O,CAP?,THE?,S
EQUAL? O,PLAYER,ME \?CCL3
ZERO? CAP? /?CCL6
PRINTI "You"
RTRUE
?CCL6: PRINTI "you"
RTRUE
?CCL3: EQUAL? O,RUTTER \?CCL8
ZERO? CAP? /?CCL8
PRINTI "Your rutter"
RTRUE
?CCL8: CALL2 GET-OWNER,O >S
ZERO? S /?CCL13
GETP O,P?OWNER
EQUAL? S,STACK /?CCL13
EQUAL? S,PLAYER \?CCL18
ZERO? CAP? /?CCL21
PRINTI "Your "
JUMP ?CND11
?CCL21: PRINTI "your "
JUMP ?CND11
?CCL18: ICALL DPRINT,S,CAP?
PRINTI "'s "
JUMP ?CND11
?CCL13: ZERO? THE? \?CCL22
FSET? O,THE \?CND11
?CCL22: ZERO? CAP? /?CCL27
PRINTI "The "
JUMP ?CND11
?CCL27: PRINTI "the "
?CND11: CALL2 IPRINT,O
RSTACK
.FUNCT IPRINT:ANY:1:1,O,TMP
GETP O,P?SDESC >TMP
ZERO? TMP /?CCL3
PRINT TMP
RTRUE
?CCL3: PRINTD O
RTRUE
.FUNCT PICK-ONE:ANY:1:1,FROB,L,CNT,RND,MSG,RFROB
GET FROB,0 >L
GET FROB,1 >CNT
DEC 'L
ADD FROB,2 >FROB
MUL CNT,2
ADD FROB,STACK >RFROB
SUB L,CNT
RANDOM STACK >RND
GET RFROB,RND >MSG
GET RFROB,1
PUT RFROB,RND,STACK
PUT RFROB,1,MSG
INC 'CNT
EQUAL? CNT,L \?CND1
SET 'CNT,0
?CND1: PUT FROB,0,CNT
RETURN MSG
.FUNCT SCENE-SELECT:ANY:0:1,FULL?,TMP,M,WID,WHICH,L,Y,END,?TMP1
GET PART-MENU,0
ADD STACK,1 >L
WINGET S-FULL,WHIGH
ADD 1,STACK >END
EQUAL? MACHINE,APPLE-2E,APPLE-2C,APPLE-2GS \?CND1
ADD L,2 >L
?CND1: MUL L,FONT-Y >TMP
SUB END,TMP >Y
EQUAL? MACHINE,APPLE-2E,APPLE-2C,APPLE-2GS \?CND3
MUL 2,FONT-Y
SUB Y,STACK >Y
?CND3: WINGET S-TEXT,WLEFT >?TMP1
WINGET S-TEXT,WWIDE
ICALL WINDEF,S-TEXT,Y,?TMP1,TMP,STACK
ICALL1 RESET-MARGIN
?PRG5: CLEAR S-TEXT
SCREEN S-TEXT
CALL GET-FROM-MENU,STR?6,PART-MENU,SCENE-SELECT-F,1 >WHICH
ZERO? WHICH /?PRG5
RTRUE
.FUNCT SCENE-SELECT-F:ANY:2:2,TMP,M
EQUAL? TMP,1 \?CCL3
ICALL1 SETUP-TEXT-AND-STATUS
GET SCENES,1 >SCENE
RETURN SCENE
?CCL3: EQUAL? TMP,2 \?CCL5
CLEAR S-TEXT
ICALL1 V-RESTORE
ICALL1 RESET-MARGIN
CLEAR S-TEXT
RFALSE
?CCL5: EQUAL? TMP,3 \FALSE
CLEAR S-TEXT
ICALL V-QUIT,TRUE-VALUE,FALSE-VALUE
ICALL1 RESET-MARGIN
CLEAR S-TEXT
RFALSE
.ENDSEG
.SEGMENT "STARTUP"
.FUNCT GO:ANY:0:0
?FCN: MOUSE-LIMIT -1
GETB 0,30 >MACHINE
GETB 0,45 >FG-COLOR
GETB 0,44 >BG-COLOR
EQUAL? MACHINE,APPLE-2E,APPLE-2C,APPLE-2GS \?CCL4
SET 'TEXT-MARGIN,0
PICINF P-BORDER,YX-TBL \?CND2
GET YX-TBL,0 >BORDER-HEIGHT
JUMP ?CND2
?CCL4: SET 'TEXT-MARGIN,2
?CND2: SET 'LIT,TRUE-VALUE
ADD C-TABLE,C-TABLELEN >CLOCK-HAND
SET 'PLAYER,BLACKTHORNE
ICALL1 SETUP-FULL
ICALL1 TITLE-SCREEN
ZERO? DEMO-VERSION? /?CND7
ICALL1 SLIDE-SHOW
JUMP ?FCN
?CND7: ICALL1 SETUP-DISPLAY
ICALL1 SCENE-SELECT
ICALL GOTO-SCENE,SCENE,FALSE-VALUE
CALL1 MAIN-LOOP
RSTACK
.FUNCT SLIDE-SHOW:ANY:0:0
CLEAR -1
PRINTI "This is a demonstration version of SHOGUN.
First you will see a few samples of the graphic screens that await you in SHOGUN.We've used graphics in surprising new ways to enhance the story without detracting from Infocom's traditional richness and depth.
Then you will be able to interact with a small section of SHOGUN.Feel free to try the new friendlier parser, the optional mouse interface, and the on-screen hints.
SHOGUN is an adaptation of James Clavell's novel, which has sold over 7 million copies and inspired the popular T.V. mini-series.Dave Lebling, while collaborating with Clavell, has incorporated the creative style and rich prose that have made his earlier ZORK titles so popular.
In SHOGUN you are transcended into the world of Clavell's saga, which combines all of the mystery and action of a great adventure story with the intensity and romance of a classic love story.Whether you find yourself matching wits with tyrannical Japanese aristocrats or fighting off attacks by Ninja assassins, you are sure to be both challenged and entertained.Both the action and the intriguing, historical locale set the stage for unparalleled fun and excitement.
"
ICALL1 TYPE-ANY-KEY
CALL1 END-DEMO
RSTACK
.FUNCT END-DEMO:ANY:0:0
?FCN: CLEAR -1
PRINTI "
You have reached the end of this demonstration version of
"
ICALL1 V-VERSION
PRINTI "
"
ICALL1 TYPE-ANY-KEY
SCREEN S-TEXT
RESTART
PRINT FAILED
JUMP ?FCN
.ENDSEG
.SEGMENT "0"
.FUNCT SETUP-FULL:ANY:0:0,HIGH,WIDE,X
GET 0,18 >HIGH
GET 0,17 >WIDE
ICALL WINDEF,S-FULL,1,1,HIGH,WIDE
WINGET S-TEXT,WFSIZE >X
SHIFT X,-8 >FONT-Y
BAND X,255 >FONT-X
RETURN FONT-X
.FUNCT SETUP-DISPLAY:ANY:0:0,HIGH,WIDE
GET 0,18 >HIGH
GET 0,17 >WIDE
MOUSE-LIMIT -1
ICALL1 SETUP-FULL
ICALL1 SETUP-TEXT-AND-STATUS
WINGET S-TEXT,WWIDE >WIDE
MARGIN TEXT-MARGIN,TEXT-MARGIN,S-TEXT
MUL 2,TEXT-MARGIN
SUB WIDE,STACK >WIDE
GETB P-INBUF,0 >WIDTH
DIV WIDE,FONT-X >WIDE
LESS? WIDE,WIDTH \FALSE
SET 'WIDTH,WIDE
GRTR? WIDE,INBUF-LENGTH \?CCL6
PUSH INBUF-LENGTH
JUMP ?CND4
?CCL6: PUSH WIDE
?CND4: PUTB P-INBUF,0,STACK
RTRUE
.FUNCT REPAINT-DISPLAY:ANY:0:1,NO-BORDER?
ICALL1 RESET-MARGIN
ICALL1 NORMAL-COLOR
ICALL1 SETUP-DISPLAY
EQUAL? MACHINE,APPLE-2E,APPLE-2C,APPLE-2GS /?CCL2
ZERO? NO-BORDER? \?CND1
?CCL2: ICALL1 DISPLAY-BORDER
?CND1: ICALL2 INIT-STATUS-LINE,TRUE-VALUE
EQUAL? HERE,MAZE \FALSE
CALL1 DISPLAY-MAZE
RSTACK
.FUNCT GOTO-SCENE:ANY:1:2,SC,OSC
ASSIGNED? 'OSC /?CND1
SET 'OSC,SCENE
?CND1: CLEAR S-TEXT
EQUAL? MACHINE,APPLE-2E,APPLE-2C,APPLE-2GS \?CCL5
ZERO? OSC \?CCL5
SCREEN S-STATUS
CLEAR S-STATUS
ICALL2 DISPLAY-BORDER,P-EBORDER
JUMP ?CND3
?CCL5: EQUAL? CURRENT-BORDER,P-BORDER /?CND3
ICALL2 DISPLAY-BORDER,P-BORDER
?CND3: ICALL1 END-QUOTE
ICALL1 RESET-MARGIN
ICALL1 DEQUEUE-ALL
SET 'ORPHAN-ANSWER,FALSE-VALUE
SET 'SCENE,SC
GET SCENE-LOCS,SCENE >HERE
GETB SCENE-PICS,SCENE
ICALL2 TOUCH-SEG,STACK
FCLEAR HERE,TOUCHBIT
SET 'QCONTEXT,FALSE-VALUE
ICALL2 MOVE-ALL,BLACKTHORNE
MOVE BLACKTHORNE,HERE
FCLEAR BLACKTHORNE,RMUNGBIT
SET 'P-IT-OBJECT,FALSE-VALUE
SET 'P-HIM-OBJECT,FALSE-VALUE
SET 'P-HER-OBJECT,FALSE-VALUE
SET 'P-THEM-OBJECT,FALSE-VALUE
ICALL1 B-STAND
SET 'OPPONENT,FALSE-VALUE
GETP HERE,P?ACTION
ICALL STACK,M-SCENE-SETUP
SET 'WINNER,PLAYER
CLEAR S-TEXT
ZERO? OSC \?CCL11
CLEAR S-STATUS
ICALL1 INIT-STATUS-LINE
JUMP ?CND9
?CCL11: ICALL2 UPDATE-STATUS-LINE,TRUE-VALUE
?CND9: ICALL2 GOTO,HERE
ZERO? OSC \TRUE
ICALL1 CLOCKER
SET 'MOVES,0
RTRUE
.FUNCT TOUCH-SEG:ANY:1:1,S
EQUAL? MACHINE,APPLE-2E,APPLE-2C,APPLE-2GS /?CCL3
EQUAL? MACHINE,IBM \FALSE
?CCL3: PICINF S,YX-TBL /TRUE
RFALSE
.FUNCT GAME-VERB?:ANY:0:0
EQUAL? PRSA,V?TELL \?CCL3
ZERO? P-CONT \TRUE
?CCL3: EQUAL? PRSA,V?HELP \?CCL7
ZERO? PRSO /TRUE
?CCL7: EQUAL? PRSA,V?QUIT,V?VERSION,V?BRIEF /TRUE
EQUAL? PRSA,V?SUPER-BRIEF,V?VERBOSE,V?COLOR /TRUE
EQUAL? PRSA,V?$VERIFY,V?RESTART,V?SAVE /TRUE
EQUAL? PRSA,V?RESTORE,V?SCRIPT,V?UNSCRIPT /TRUE
EQUAL? PRSA,V?UNDO,V?SCORE,V?TIME /TRUE
EQUAL? PRSA,V?DEFINE,V?$REFRESH,V?NOTIFY /TRUE
EQUAL? PRSA,V?HINT,V?HINTS-OFF,V?CREDITS /TRUE
EQUAL? PRSA,V?$RANDOM,V?$COMMAND,V?$RECORD /TRUE
EQUAL? PRSA,V?$UNRECORD /TRUE
RFALSE
.FUNCT END-QUOTE:ANY:0:0
SET 'P-CONT,FALSE-VALUE
RETURN M-FATAL
.FUNCT DEQUEUE:ANY:1:1,RTN,TIM
CALL2 QUEUED?,RTN >RTN
ZERO? RTN /FALSE
GET RTN,C-TICK >TIM
PUT RTN,C-RTN,0
RETURN TIM
.FUNCT QUEUED?:ANY:1:1,RTN,C,E
ADD C-TABLE,C-TABLELEN >E
ADD C-TABLE,C-INTS >C
?PRG1: EQUAL? C,E /FALSE
GET C,C-RTN
EQUAL? STACK,RTN \?CND3
GET C,C-TICK
ZERO? STACK /FALSE
RETURN C
?CND3: ADD C,C-INTLEN >C
JUMP ?PRG1
.FUNCT QUEUE:ANY:2:3,RTN,TICK,I?,C,E,INT
ADD C-TABLE,C-TABLELEN >E
ADD C-TABLE,C-INTS >C
?PRG1: EQUAL? C,E \?CCL5
ZERO? INT /?CCL8
SET 'C,INT
JUMP ?CND6
?CCL8: SUB C-INTS,C-INTLEN >C-INTS
ADD C-TABLE,C-INTS >INT
?CND6: PUT INT,C-RTN,RTN
JUMP ?REP2
?CCL5: GET C,C-RTN
EQUAL? STACK,RTN \?CCL10
ZERO? I? \FALSE
SET 'INT,C
?REP2: GRTR? INT,CLOCK-HAND \?CND15
ADD TICK,3
SUB 0,STACK >TICK
?CND15: PUT INT,C-TICK,TICK
RETURN INT
?CCL10: GET C,C-RTN
ZERO? STACK \?CND3
SET 'INT,C
?CND3: ADD C,C-INTLEN >C
JUMP ?PRG1
.FUNCT CLOCKER:ANY:0:0,E,TICK,RTN,FLG,Q?,OWINNER,TMP
ZERO? CLOCK-WAIT /?CND1
SET 'CLOCK-WAIT,FALSE-VALUE
RFALSE
?CND1: EQUAL? HERE,STATIONARY? \?CCL5
INC 'STATIONARY-CNT
JUMP ?CND3
?CCL5: SET 'STATIONARY?,HERE
SET 'STATIONARY-CNT,0
?CND3: ADD C-TABLE,C-INTS >CLOCK-HAND
ADD C-TABLE,C-TABLELEN >E
SET 'OWINNER,WINNER
SET 'WINNER,PLAYER
?PRG6: ZERO? NEW-SCENE-NUMBER /?CND8
ICALL1 I-NEW-SCENE
ADD C-TABLE,C-INTS >CLOCK-HAND
SET 'FLG,TRUE-VALUE
?CND8: EQUAL? CLOCK-HAND,E \?CCL12
INC 'MOVES
SET 'WINNER,OWINNER
RETURN FLG
?CCL12: GET CLOCK-HAND,C-RTN
ZERO? STACK /?CND10
GET CLOCK-HAND,C-TICK >TICK
LESS? TICK,-1 \?CCL16
SUB 0,TICK
SUB STACK,3
PUT CLOCK-HAND,C-TICK,STACK
SET 'Q?,CLOCK-HAND
JUMP ?CND10
?CCL16: ZERO? TICK /?CND10
GRTR? TICK,0 \?CND18
DEC 'TICK
PUT CLOCK-HAND,C-TICK,TICK
?CND18: ZERO? TICK /?CND20
SET 'Q?,CLOCK-HAND
?CND20: GRTR? TICK,0 /?CND10
GET CLOCK-HAND,C-RTN >RTN
ZERO? TICK \?CND24
PUT CLOCK-HAND,C-RTN,0
?CND24: CALL RTN >TMP
ZERO? TMP /?CND26
SET 'FLG,TMP
?CND26: ZERO? Q? \?CND10
GET CLOCK-HAND,C-RTN
ZERO? STACK /?CND10
SET 'Q?,TRUE-VALUE
?CND10: ZERO? NEW-SCENE-NUMBER /?CCL34
ADD C-TABLE,C-INTS >CLOCK-HAND
JUMP ?PRG6
?CCL34: EQUAL? FLG,M-FATAL \?CCL36
SET 'CLOCK-HAND,E
JUMP ?PRG6
?CCL36: EQUAL? CLOCK-HAND,E /?PRG6
ADD CLOCK-HAND,C-INTLEN >CLOCK-HAND
ZERO? Q? \?PRG6
ADD C-INTS,C-INTLEN >C-INTS
JUMP ?PRG6
.FUNCT DEQUEUE-ALL:ANY:0:0,E,TICK,RTN,FLG,Q?
ZERO? CLOCK-WAIT /?CND1
SET 'CLOCK-WAIT,FALSE-VALUE
RFALSE
?CND1: ADD C-TABLE,C-INTS >CLOCK-HAND
ADD C-TABLE,C-TABLELEN >E
?PRG3: EQUAL? CLOCK-HAND,E \?CCL7
SET 'CLOCK-HAND,E
RTRUE
?CCL7: PUT CLOCK-HAND,C-TICK,0
PUT CLOCK-HAND,C-RTN,0
ADD CLOCK-HAND,C-INTLEN >CLOCK-HAND
ADD C-INTS,C-INTLEN >C-INTS
JUMP ?PRG3
.FUNCT PERFORM-PRSA:ANY:0:2,O,I
CALL PERFORM,PRSA,O,I
RSTACK
.FUNCT NEW-VERB:ANY:1:1,V
CALL PERFORM,V,PRSO,PRSI
RSTACK
.FUNCT SWAP-VERB:ANY:1:1,V
CALL PERFORM,V,PRSI,PRSO
RSTACK
.FUNCT NEW-PRSO:ANY:1:1,O
CALL PERFORM-PRSA,O,PRSI
RSTACK
.FUNCT NEW-WINNER-PRSO:ANY:1:3,A,O,I,OW
SET 'OW,WINNER
SET 'WINNER,PRSO
ICALL PERFORM,A,O,I
SET 'WINNER,OW
RTRUE
.FUNCT REDIRECT:ANY:2:2,FROM,TO,O,I
EQUAL? PRSO,FROM \?CCL3
SET 'O,TO
JUMP ?CND1
?CCL3: SET 'O,PRSO
?CND1: EQUAL? PRSI,FROM \?CCL6
SET 'I,TO
JUMP ?CND4
?CCL6: SET 'I,PRSI
?CND4: ICALL PERFORM-PRSA,O,I
RTRUE
.FUNCT CREWMAN?:ANY:1:1,OBJ
EQUAL? OBJ,CREWMEN,LG-CREWMEN /FALSE
FSET? OBJ,DUTCHBIT /TRUE
RFALSE
.FUNCT WINDEF:ANY:5:5,W,TOP,LEFT,HIGH,WIDE
WINPOS W,TOP,LEFT
WINSIZE W,HIGH,WIDE
RTRUE
.FUNCT C-PIXELS:ANY:1:1,X
SUB X,1
MUL STACK,FONT-X
ADD STACK,1
RSTACK
.FUNCT L-PIXELS:ANY:1:1,Y
SUB Y,1
MUL STACK,FONT-Y
ADD STACK,1
RSTACK
.FUNCT CCURSET:ANY:2:2,Y,X,?TMP1
CALL2 L-PIXELS,Y >?TMP1
CALL2 C-PIXELS,X
CURSET ?TMP1,STACK
RTRUE
.FUNCT IN-SCENE?:ANY:1:1,OBJ,SC,PT
GETPT OBJ,P?SCENE >SC
ZERO? SC /TRUE
PTSIZE SC >PT
INTBL? SCENE,SC,PT,1 /TRUE
RFALSE
.FUNCT REPLACE-SYNONYM:ANY:3:4,OBJ,OLD,NEW,DUP?,TMP,S,L
GETPT OBJ,P?SYNONYM >S
ZERO? S /FALSE
PTSIZE S
DIV STACK,2 >L
ZERO? DUP? \?CCL6
INTBL? NEW,S,L /TRUE
?CCL6: INTBL? OLD,S,L >TMP \FALSE
PUT TMP,0,NEW
RTRUE
.FUNCT REPLACE-ADJECTIVE:ANY:3:4,OBJ,OLD,NEW,DUP?,TMP,S,L
GETPT OBJ,P?ADJECTIVE >S
ZERO? S /FALSE
PTSIZE S
DIV STACK,2 >L
ZERO? DUP? \?CCL6
INTBL? NEW,S,L /TRUE
?CCL6: INTBL? OLD,S,L >TMP \FALSE
PUT TMP,0,NEW
RTRUE
.FUNCT CURSOR-OFF:ANY:0:0
CURSET -1
RTRUE
.FUNCT CURSOR-ON:ANY:0:0
CURSET -2
RTRUE
.ENDSEG
.ENDI