-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathparser.zap
2588 lines (2461 loc) · 60.2 KB
/
parser.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
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
.FUNCT RT-CAPITALIZE,PTR,?TMP1
ZERO? GL-P-ORPH \?CTR2
ZERO? GL-P-MERGED /?CCL3
?CTR2: GET PTR,0
PRINTB STACK
RTRUE
?CCL3: GETB PTR,3
GETB GL-P-PIBUF,STACK
SUB STACK,32
PRINTC STACK
GETB PTR,2
SUB STACK,1 >?TMP1
GETB PTR,3
ADD STACK,1
CALL RT-WORD-PRINT,?TMP1,STACK
RSTACK
.FUNCT RT-WORD-PRINT,CNT,BUF
ADD GL-P-PIBUF,BUF
PRINTT STACK,CNT
RTRUE
.FUNCT RT-VERB-PRINT,TMP,?TMP1
GET GL-P-ITBL,K-P-VERBN >TMP
ZERO? TMP \?CCL3
PRINTI "tell"
RTRUE
?CCL3: GETB GL-P-VTBL,2
ZERO? STACK \?CCL5
GET TMP,0
PRINTB STACK
RTRUE
?CCL5: GETB TMP,2 >?TMP1
GETB TMP,3
ICALL RT-WORD-PRINT,?TMP1,STACK
PUTB GL-P-VTBL,2,0
RTRUE
.FUNCT RT-PREP-PRINT,PREP,SP?,WRD
ASSIGNED? 'SP? /?CND1
SET 'SP?,TRUE-VALUE
?CND1: ZERO? PREP /FALSE
ZERO? GL-P-END-ON-PREP \FALSE
ZERO? SP? /?CND8
PRINTC 32
?CND8: CALL2 RT-PREP-FIND,PREP >WRD
PRINTB WRD
GET GL-P-ITBL,K-P-VERBN
GET STACK,0
EQUAL? W?SIT,STACK \?CND10
EQUAL? W?DOWN,WRD \?CND10
PRINTI " on"
?CND10: GET GL-P-ITBL,K-P-VERBN
GET STACK,0
EQUAL? W?GET,STACK \TRUE
EQUAL? W?OUT,WRD \TRUE
PRINTI " of"
RTRUE
.FUNCT RT-CLAUSE-PRINT,BPTR,EPTR,THE?,?TMP1
ASSIGNED? 'THE? /?CND1
SET 'THE?,TRUE-VALUE
?CND1: GET GL-P-ITBL,BPTR >?TMP1
GET GL-P-ITBL,EPTR
CALL RT-BUFFER-PRINT,?TMP1,STACK,THE?
RSTACK
.FUNCT RT-BUFFER-PRINT,BEG,END,CP,NOSP,WRD,FIRST??,PN,?TMP1
SET 'FIRST??,TRUE-VALUE
?PRG1: EQUAL? BEG,END /TRUE
ZERO? NOSP /?CCL8
SET 'NOSP,FALSE-VALUE
JUMP ?CND6
?CCL8: PRINTC 32
?CND6: GET BEG,0 >WRD
EQUAL? WRD,W?HIM \?PRD12
CALL2 RT-VISIBLE?,GL-P-HIM-OBJECT
ZERO? STACK /?CCL10
?PRD12: EQUAL? WRD,W?HER \?PRD15
CALL2 RT-VISIBLE?,GL-P-HER-OBJECT
ZERO? STACK /?CCL10
?PRD15: EQUAL? WRD,W?THEM \?CND9
CALL2 RT-VISIBLE?,GL-P-THEM-OBJECT
ZERO? STACK \?CND9
?CCL10: SET 'PN,TRUE-VALUE
?CND9: EQUAL? WRD,W?PERIOD \?CCL22
SET 'NOSP,TRUE-VALUE
JUMP ?CND3
?CCL22: EQUAL? WRD,W?ALL,W?OF /?CCL24
GETB WRD,6
BAND STACK,12
ZERO? STACK /?CCL24
GETB WRD,6
BAND STACK,160
ZERO? STACK \?CCL24
SET 'NOSP,TRUE-VALUE
JUMP ?CND3
?CCL24: EQUAL? WRD,W?ME \?CCL29
ICALL2 DPRINT,CH-PLAYER
SET 'PN,TRUE-VALUE
JUMP ?CND3
?CCL29: INTBL? WRD,K-CAPS+2,18 \?CCL31
ICALL2 RT-CAPITALIZE,BEG
SET 'PN,TRUE-VALUE
JUMP ?CND3
?CCL31: ZERO? FIRST?? /?CND32
ZERO? PN \?CND32
ZERO? CP /?CND32
PRINTI "the "
?CND32: ZERO? GL-P-ORPH \?CTR38
ZERO? GL-P-MERGED /?CCL39
?CTR38: PRINTB WRD
JUMP ?CND37
?CCL39: EQUAL? WRD,W?IT \?CCL43
CALL2 RT-VISIBLE?,GL-P-IT-OBJECT
ZERO? STACK /?CCL43
ICALL2 DPRINT,GL-P-IT-OBJECT
JUMP ?CND37
?CCL43: EQUAL? WRD,W?HER \?CCL47
ZERO? PN \?CCL47
ICALL2 DPRINT,GL-P-HER-OBJECT
JUMP ?CND37
?CCL47: EQUAL? WRD,W?THEM \?CCL51
ZERO? PN \?CCL51
ICALL2 DPRINT,GL-P-THEM-OBJECT
JUMP ?CND37
?CCL51: EQUAL? WRD,W?HIM \?CCL55
ZERO? PN \?CCL55
ICALL2 DPRINT,GL-P-HIM-OBJECT
JUMP ?CND37
?CCL55: GETB BEG,2 >?TMP1
GETB BEG,3
ICALL RT-WORD-PRINT,?TMP1,STACK
?CND37: SET 'FIRST??,FALSE-VALUE
?CND3: ADD BEG,K-P-WORDLEN >BEG
JUMP ?PRG1
.FUNCT RT-DONT-KNOW-WORD-MSG,PTR,BUF,MSG,?TMP1
ZERO? GL-LONG-OOPS \?CCL3
PRINTI "[You don't need to use the word """
JUMP ?CND1
?CCL3: DEC 'GL-LONG-OOPS
PRINTI "[You can play the game from start to finish, solve all the puzzles, get all the points, and STILL never need to use the word """
?CND1: MUL PTR,2 >BUF
ADD GL-P-P-LEX,BUF
GETB STACK,2 >?TMP1
ADD GL-P-P-LEX,BUF
GETB STACK,3
ICALL RT-WORD-PRINT,?TMP1,STACK
PRINTI """.]"
CRLF
PUT GL-OOPS-TABLE,K-O-PTR,PTR
SET 'GL-P-QUOT,FALSE-VALUE
SET 'GL-P-ORPH,FALSE-VALUE
RTRUE
.FUNCT RT-DONT-KNOW-WORD-USE-MSG,PTR,BUF,?TMP1
PRINTI "[This story cannot understand the word """
MUL PTR,2 >BUF
ADD GL-P-P-LEX,BUF
GETB STACK,2 >?TMP1
ADD GL-P-P-LEX,BUF
GETB STACK,3
ICALL RT-WORD-PRINT,?TMP1,STACK
PRINTI """ when you use it that way.]"
CRLF
SET 'GL-P-QUOT,FALSE-VALUE
SET 'GL-P-ORPH,FALSE-VALUE
RTRUE
.FUNCT RT-CANT-SEE-ANY-MSG,THING,STRING?,PRSO?,WRD
ASSIGNED? 'PRSO? /?CND1
SET 'PRSO?,TRUE-VALUE
?CND1: ICALL1 RT-CYOU-MSG
PRINTI "cannot "
EQUAL? GL-PRSA,V?LISTEN \?CCL5
PRINTI "hear"
JUMP ?CND3
?CCL5: EQUAL? GL-PRSA,V?SMELL \?CCL7
PRINTI "smell"
JUMP ?CND3
?CCL7: PRINTI "see"
?CND3: ZERO? STRING? /?CCL10
PRINT STRING?
JUMP ?CND8
?CCL10: ZERO? THING /?CCL12
EQUAL? THING,TH-NOT-HERE-OBJECT /?CCL12
PRINTC 32
ICALL RT-THEO-PRINT,THING,FALSE-VALUE,K-DESC-ANY
JUMP ?CND8
?CCL12: ZERO? THING /?CND15
EQUAL? GL-PRSI,TH-NOT-HERE-OBJECT \?CND15
SET 'PRSO?,FALSE-VALUE
?CND15: ZERO? PRSO? /?CCL21
PUSH 0
JUMP ?CND19
?CCL21: PUSH 1
?CND19: GET GL-P-NAMW,STACK >WRD
INTBL? WRD,K-CAPS+2,18 /?CND22
PRINTI " any"
?CND22: ICALL2 RT-NOT-HERE-PRINT,PRSO?
?CND8: PRINTI " here."
CRLF
SET 'GL-P-IT-OBJECT,TH-NOT-HERE-OBJECT
ICALL1 RT-P-CLEAR
RTRUE
.FUNCT RT-TH-NOT-HERE-OBJECT,TBL,PRSO?,OBJ
SET 'PRSO?,TRUE-VALUE
EQUAL? GL-PRSO,TH-NOT-HERE-OBJECT \?CCL3
EQUAL? GL-PRSI,TH-NOT-HERE-OBJECT \?CCL3
PRINTR "Those things aren't here."
?CCL3: EQUAL? GL-PRSO,TH-NOT-HERE-OBJECT \?CCL7
SET 'TBL,GL-P-PRSO
JUMP ?CND1
?CCL7: SET 'TBL,GL-P-PRSI
SET 'PRSO?,FALSE-VALUE
?CND1: ZERO? PRSO? /?CCL10
EQUAL? GL-PRSA,V?FIND,V?WHO,V?WHAT /?CCL12
EQUAL? GL-PRSA,V?WHERE,V?WAIT-FOR,V?WAIT /?CCL12
EQUAL? GL-PRSA,V?SAY,V?DRIVE,V?CALL /?CCL12
EQUAL? GL-PRSA,V?MAKE,V?PASSWORD,V?WALK-TO /?CCL12
EQUAL? GL-PRSA,V?TAKE \?CND8
EQUAL? GL-PLACE-CUR,RM-DIOGENES-CLUB \?PRD21
EQUAL? GL-WINNER,CH-BUTLER /?CCL12
?PRD21: EQUAL? GL-PLACE-CUR,RM-SHERMANS-HOUSE \?CND8
EQUAL? GL-WINNER,CH-SHERMAN \?CND8
?CCL12: CALL RT-FIND-NOT-HERE,TBL,PRSO? >OBJ
ZERO? OBJ /FALSE
EQUAL? OBJ,TH-NOT-HERE-OBJECT /?CND8
RETURN 2
?CCL10: EQUAL? GL-PRSA,V?TELL-ABOUT,V?ASK-ABOUT,V?ASK-FOR \?CND8
CALL RT-FIND-NOT-HERE,TBL,PRSO? >OBJ
ZERO? OBJ /FALSE
EQUAL? OBJ,TH-NOT-HERE-OBJECT /?CND8
RETURN 2
?CND8: PRINTC 91
ICALL1 RT-CYOU-MSG
PRINTI "cannot "
EQUAL? GL-PRSA,V?LISTEN \?CCL40
PRINTI "hear"
JUMP ?CND38
?CCL40: EQUAL? GL-PRSA,V?SMELL \?CCL42
PRINTI "smell"
JUMP ?CND38
?CCL42: PRINTI "see"
?CND38: INTBL? GL-P-XNAM,K-CAPS+2,18 /?CND43
PRINTI " any"
?CND43: ICALL2 RT-NOT-HERE-PRINT,PRSO?
PRINTI " here.]"
CRLF
ICALL1 RT-P-CLEAR
RETURN 2
.FUNCT RT-FAKE-ORPHAN-MSG,TMP,?TMP1
ICALL RT-ORPHAN,GL-P-SYNTAX,FALSE-VALUE
PRINT K-BE-SPECIFIC-MSG
GET GL-P-OTBL,K-P-VERBN >TMP
ZERO? TMP \?CCL3
PRINTI "tell"
JUMP ?CND1
?CCL3: GETB GL-P-VTBL,2
ZERO? STACK \?CCL5
GET TMP,0
PRINTB STACK
JUMP ?CND1
?CCL5: GETB TMP,2 >?TMP1
GETB TMP,3
ICALL RT-WORD-PRINT,?TMP1,STACK
PUTB GL-P-VTBL,2,0
?CND1: PRINTI "?]"
CRLF
SET 'GL-P-ORPH,TRUE-VALUE
SET 'GL-P-GOOD,FALSE-VALUE
RTRUE
.FUNCT RT-TIME-OF-DAY-MSG,WAIT?,TOD
CALL1 RT-TIME-OF-DAY >TOD
FSET? GL-PLACE-CUR,FL-INDOORS /FALSE
EQUAL? GL-LAST-OUT-TOD,TOD /FALSE
ZERO? WAIT? /?CCL9
ICALL2 RT-WAIT-TOD-MSG,TOD
JUMP ?CND7
?CCL9: CRLF
ICALL RT-CYOU-MSG,STR?223,STR?224
PRINTI "that "
EQUAL? TOD,1 \?CCL12
PRINTI "the sky is lighter. Soon it will be sunrise."
CRLF
JUMP ?CND7
?CCL12: EQUAL? TOD,2 \?CCL14
PRINTI "the sun has risen... as much as it ever does in England."
CRLF
JUMP ?CND7
?CCL14: EQUAL? TOD,3 \?CCL16
PRINTI "the setting sun marks the end of another day. Soon it will be dark."
CRLF
JUMP ?CND7
?CCL16: PRINTI "the sun has set and the mists have rolled in."
CRLF
?CND7: SET 'GL-LAST-OUT-TOD,TOD
RETURN GL-LAST-OUT-TOD
.FUNCT RT-TIME-OF-DAY,TOD
CALL RT-CLOCK-CMP,6,30,0
EQUAL? STACK,1 \?CCL3
SET 'TOD,0
RETURN TOD
?CCL3: CALL RT-CLOCK-CMP,7,0,0
EQUAL? STACK,1 \?CCL5
SET 'TOD,1
RETURN TOD
?CCL5: CALL RT-CLOCK-CMP,19,30,0
EQUAL? STACK,1 \?CCL7
SET 'TOD,2
RETURN TOD
?CCL7: CALL RT-CLOCK-CMP,20,0,0
EQUAL? STACK,1 \?CCL9
SET 'TOD,3
RETURN TOD
?CCL9: SET 'TOD,0
RETURN TOD
.FUNCT RT-SPOKEN-TO-MSG,WHO
EQUAL? WHO,GL-P-QCONTEXT-TH \?CCL2
EQUAL? GL-PLACE-CUR,GL-P-QCONTEXT-RM /TRUE
?CCL2: SET 'GL-P-QCONTEXT-TH,WHO
LOC WHO >GL-P-QCONTEXT-RM
ICALL2 RT-THIS-IS-IT,WHO
PRINTI "[spoken to "
ICALL2 RT-THEO-PRINT,WHO
PRINTR "]"
.FUNCT RT-GET-PREP,SYN,WHICH,PREP
EQUAL? WHICH,1 \?CCL3
GETB SYN,K-P-SPREP1 >PREP
JUMP ?CND1
?CCL3: GETB SYN,K-P-SPREP2 >PREP
?CND1: BAND PREP,63 >PREP
ZERO? PREP /FALSE
ADD PREP,192
RSTACK
.FUNCT RT-SYNTAX-CHECK,SYN,LEN,NUM,OBJ,DRIVE1,DRIVE2,PREP,VERB,TPREP,?TMP2,?TMP1
GET GL-P-ITBL,K-P-VERB >VERB
ZERO? VERB \?CND1
ICALL2 RT-NOT-IN-SENTENCE-MSG,STR?225
RFALSE
?CND1: SUB 255,VERB
GET VERBS,STACK >SYN
GETB SYN,0 >LEN
INC 'SYN
?PRG3: GETB SYN,0
SHIFT STACK,-6 >NUM
GRTR? GL-P-NCN,NUM /?CND5
LESS? NUM,1 /?CCL9
ZERO? GL-P-NCN \?CCL9
GET GL-P-ITBL,K-P-PREP1 >PREP
ZERO? PREP /?CTR8
CALL RT-GET-PREP,SYN,1
EQUAL? PREP,STACK \?CCL9
?CTR8: SET 'DRIVE1,SYN
JUMP ?CND5
?CCL9: CALL RT-GET-PREP,SYN,1 >?TMP1
GET GL-P-ITBL,K-P-PREP1
EQUAL? ?TMP1,STACK \?CND5
EQUAL? NUM,2 \?CCL18
EQUAL? GL-P-NCN,1 \?CCL18
SET 'DRIVE2,SYN
JUMP ?CND5
?CCL18: GRTR? NUM,1 /?CCL22
GET GL-P-ITBL,K-P-PREP2
ZERO? STACK \?CND5
?CCL22: GRTR? NUM,1 \?CCL25
CALL RT-GET-PREP,SYN,2 >?TMP1
GET GL-P-ITBL,K-P-PREP2
EQUAL? ?TMP1,STACK \?CND5
?CCL25: ICALL2 RT-SYNTAX-FOUND,SYN
RTRUE
?CND5: DLESS? 'LEN,1 \?CCL30
ZERO? DRIVE1 \?REP4
ZERO? DRIVE2 \?REP4
EQUAL? GL-P-NCN,2 \?CCL37
ZERO? GL-FUNNY-CLAUSE? /?CCL37
SET 'GL-P-NCN,1
SET 'GL-FUNNY-CLAUSE?,FALSE-VALUE
GET GL-P-ITBL,K-P-NC2L
PUT GL-P-ITBL,K-P-NC1L,STACK
CALL1 RT-SYNTAX-CHECK
RSTACK
?CCL37: PRINT K-DONT-UNDERSTAND-MSG
CRLF
RFALSE
?CCL30: ZERO? NUM \?CCL42
ADD SYN,K-P-SLEN-0 >SYN
JUMP ?PRG3
?CCL42: EQUAL? NUM,1 \?CCL44
ADD SYN,K-P-SLEN-1 >SYN
JUMP ?PRG3
?CCL44: ADD SYN,K-P-SLEN-2 >SYN
JUMP ?PRG3
?REP4: ZERO? DRIVE1 /?CCL47
GETB DRIVE1,K-P-SFWIM1 >?TMP2
GETB DRIVE1,K-P-SLOC1 >?TMP1
CALL RT-GET-PREP,DRIVE1,1
CALL RT-GET-WHAT-I-MEAN,?TMP2,?TMP1,STACK >OBJ
ZERO? OBJ /?CCL47
PUT GL-P-PRSO,K-P-MATCHLEN,1
PUT GL-P-PRSO,1,OBJ
ICALL2 RT-SYNTAX-FOUND,DRIVE1
RTRUE
?CCL47: ZERO? DRIVE2 /?CCL51
GETB DRIVE2,K-P-SFWIM2 >?TMP2
GETB DRIVE2,K-P-SLOC2 >?TMP1
CALL RT-GET-PREP,DRIVE2,2
CALL RT-GET-WHAT-I-MEAN,?TMP2,?TMP1,STACK >OBJ
ZERO? OBJ /?CCL51
PUT GL-P-PRSI,K-P-MATCHLEN,1
PUT GL-P-PRSI,1,OBJ
ICALL2 RT-SYNTAX-FOUND,DRIVE2
RTRUE
?CCL51: EQUAL? VERB,ACT?FIND \?CCL55
PRINT K-DO-IT-YOURSELF-MSG
CRLF
RFALSE
?CCL55: EQUAL? GL-WINNER,CH-PLAYER \?CCL58
ICALL RT-ORPHAN,DRIVE1,DRIVE2
PRINTI "[Wh"
JUMP ?CND56
?CCL58: PRINTI "[Your command was not complete. Type wh"
?CND56: EQUAL? VERB,ACT?WALK,ACT?GO \?CCL61
PRINTI "ere"
JUMP ?CND59
?CCL61: ZERO? DRIVE1 /?PRD65
GETB DRIVE1,K-P-SFWIM1
EQUAL? STACK,FL-PERSON /?CTR62
?PRD65: ZERO? DRIVE2 /?CCL63
GETB DRIVE2,K-P-SFWIM2
EQUAL? STACK,FL-PERSON \?CCL63
?CTR62: PRINTI "om"
JUMP ?CND59
?CCL63: PRINTI "at"
?CND59: EQUAL? GL-WINNER,CH-PLAYER \?CCL72
PRINTI " do you want to "
JUMP ?CND70
?CCL72: PRINTI " you want "
ICALL2 RT-THEO-PRINT,GL-WINNER
PRINTI " to "
?CND70: ICALL1 RT-VERB-PRINT
ZERO? DRIVE2 /?CND73
ICALL RT-CLAUSE-PRINT,K-P-NC1,K-P-NC1L
?CND73: SET 'GL-P-END-ON-PREP,FALSE-VALUE
ZERO? DRIVE1 /?CCL77
CALL RT-GET-PREP,DRIVE1,1
JUMP ?CND75
?CCL77: CALL RT-GET-PREP,DRIVE2,2
?CND75: ICALL2 RT-PREP-PRINT,STACK
EQUAL? GL-WINNER,CH-PLAYER \?CCL80
SET 'GL-P-ORPH,TRUE-VALUE
PRINTI "?]"
CRLF
RFALSE
?CCL80: SET 'GL-P-ORPH,FALSE-VALUE
PRINTI ".]"
CRLF
RFALSE
.FUNCT RT-CLAUSE,PTR,VAL,WRD,OFF,NUM,ANDFLG,FIRST??,NW,LW,TPTR,TMP,?TMP1
SET 'FIRST??,TRUE-VALUE
SUB GL-P-NCN,1
MUL STACK,2 >OFF
ZERO? VAL /?CCL3
ADD K-P-PREP1,OFF >NUM
PUT GL-P-ITBL,NUM,VAL
ADD NUM,1
PUT GL-P-ITBL,STACK,WRD
ADD PTR,K-P-LEXELEN >PTR
JUMP ?CND1
?CCL3: INC 'GL-P-LEN
?CND1: ZERO? GL-P-LEN \?CND4
DEC 'GL-P-NCN
RETURN -1
?CND4: ADD K-P-NC1,OFF >NUM
MUL PTR,2
ADD GL-P-P-LEX,STACK
PUT GL-P-ITBL,NUM,STACK
GET GL-P-P-LEX,PTR
EQUAL? STACK,W?THE,W?A,W?AN \?PRG8
GET GL-P-ITBL,NUM
ADD STACK,4
PUT GL-P-ITBL,NUM,STACK
?PRG8: DLESS? 'GL-P-LEN,0 \?CND10
ADD NUM,1 >?TMP1
MUL PTR,2
ADD GL-P-P-LEX,STACK
PUT GL-P-ITBL,?TMP1,STACK
RETURN -1
?CND10: GET GL-P-P-LEX,PTR >WRD
ZERO? WRD \?CTR13
CALL2 RT-NUMBER?,PTR >WRD
ZERO? WRD /?CCL14
?CTR13: ZERO? GL-P-LEN \?CCL19
SET 'NW,0
JUMP ?CND17
?CCL19: ADD PTR,K-P-LEXELEN >TPTR
GET GL-P-P-LEX,TPTR >NW
ZERO? NW \?CND17
EQUAL? WRD,W?INTNUM /?CND17
CALL2 RT-NUMBER?,TPTR >NW
PUT GL-P-P-LEX,TPTR,NW
?CND17: EQUAL? WRD,W?PERIOD \?CCL26
EQUAL? LW,W?MR,W?MRS,W?MISS /?CTR25
EQUAL? LW,W?DR \?CCL26
?CTR25: SET 'LW,0
JUMP ?CND12
?CCL26: EQUAL? WRD,W?AND,W?COMMA \?CCL32
SET 'ANDFLG,TRUE-VALUE
JUMP ?CND12
?CCL32: EQUAL? WRD,W?ALL,W?BOTH,W?EVERYTHING \?CCL34
EQUAL? NW,W?OF \?CND12
DEC 'GL-P-LEN
ADD PTR,K-P-LEXELEN >PTR
JUMP ?CND12
?CCL34: EQUAL? WRD,W?THEN,W?PERIOD /?CTR37
GETB WRD,6
BTST STACK,8 \?CCL38
GET GL-P-ITBL,K-P-VERB
ZERO? STACK /?CCL38
ZERO? FIRST?? \?CCL38
?CTR37: INC 'GL-P-LEN
ADD NUM,1 >?TMP1
MUL PTR,2
ADD GL-P-P-LEX,STACK
PUT GL-P-ITBL,?TMP1,STACK
SUB PTR,K-P-LEXELEN
RSTACK
?CCL38: ZERO? ANDFLG /?CCL45
GET GL-P-ITBL,K-P-VERBN
ZERO? STACK /?CTR44
CALL2 RT-VERB-DIR-ONLY?,WRD
ZERO? STACK /?CCL45
?CTR44: SUB PTR,4 >PTR
ADD PTR,2
ICALL RT-CHANGE-LEXV,STACK,W?THEN
ADD GL-P-LEN,2 >GL-P-LEN
JUMP ?CND12
?CCL45: GETB WRD,6
BTST STACK,128 \?CCL51
GRTR? GL-P-LEN,0 \?CCL54
EQUAL? NW,W?OF \?CCL54
EQUAL? WRD,W?ALL,W?EVERYTHING /?CCL54
SUB GL-P-NCN,1
PUT GL-P-OFW,STACK,WRD
JUMP ?CND12
?CCL54: GETB WRD,6
BTST STACK,32 \?CCL59
ZERO? NW /?CCL59
GETB NW,6
BTST STACK,128 \?CCL59
EQUAL? WRD,W?INTNUM \?CCL65
EQUAL? NW,W?HOUR,W?HOURS,W?MINUTE /?CND12
EQUAL? NW,W?MINUTES /?CND12
?CCL65: EQUAL? NW,W?TOMB /?CND12
EQUAL? WRD,W?BOX \?CCL74
EQUAL? NW,W?INTNUM /?CND72
SET 'TMP,TRUE-VALUE
JUMP ?CND72
?CCL74: EQUAL? WRD,W?TOMB \?CND72
SET 'TMP,TRUE-VALUE
?CND72: ZERO? TMP /?CND12
SET 'GL-FUNNY-CLAUSE?,TRUE-VALUE
INC 'NUM
SET '?TMP1,1
ADD PTR,2
MUL STACK,2
ADD GL-P-P-LEX,STACK
PUT GL-P-ITBL,?TMP1,STACK
RETURN PTR
?CCL59: ZERO? ANDFLG \?CCL81
EQUAL? NW,W?BUT,W?EXCEPT /?CCL81
EQUAL? NW,W?AND,W?COMMA /?CCL81
ADD NUM,1 >?TMP1
ADD PTR,2
MUL STACK,2
ADD GL-P-P-LEX,STACK
PUT GL-P-ITBL,?TMP1,STACK
RETURN PTR
?CCL81: SET 'ANDFLG,FALSE-VALUE
JUMP ?CND12
?CCL51: ZERO? GL-P-MERGED \?PRD87
ZERO? GL-P-ORPH \?PRD87
GET GL-P-ITBL,K-P-VERB
ZERO? STACK /?CCL85
?PRD87: GETB WRD,6
BAND STACK,36
ZERO? STACK \?CND12
?CCL85: ZERO? ANDFLG /?CCL92
GET GL-P-ITBL,K-P-VERB
ZERO? STACK \?CCL92
SUB PTR,4 >PTR
ADD PTR,2
ICALL RT-CHANGE-LEXV,STACK,W?THEN
ADD GL-P-LEN,2 >GL-P-LEN
?CND12: SET 'LW,WRD
SET 'FIRST??,FALSE-VALUE
ADD PTR,K-P-LEXELEN >PTR
JUMP ?PRG8
?CCL92: GETB WRD,6
BTST STACK,8 /?CND12
ICALL2 RT-DONT-KNOW-WORD-USE-MSG,PTR
RFALSE
?CCL14: ICALL2 RT-DONT-KNOW-WORD-MSG,PTR
RFALSE
.FUNCT RT-GET-WHAT-I-MEAN,GBIT,LBIT,PREP,NO-ROOMS?,SILENT?,OBJ
EQUAL? GBIT,FL-LOCATION \?CCL3
RETURN ROOMS
?CCL3: ZERO? GL-P-IT-OBJECT /?CND1
FSET? GL-P-IT-OBJECT,GBIT \?CND1
ZERO? SILENT? /?CCL8
RETURN GL-P-IT-OBJECT
?CCL8: PRINTC 91
ICALL2 RT-THEO-PRINT,GL-P-IT-OBJECT
PRINTC 93
CRLF
RETURN GL-P-IT-OBJECT
?CND1: SET 'INHIBIT-ROOMS,NO-ROOMS?
SET 'GL-P-GWIMBIT,GBIT
SET 'GL-P-SLOCBITS,LBIT
PUT GL-P-MERGE,K-P-MATCHLEN,0
CALL RT-GET-OBJECT,GL-P-MERGE,FALSE-VALUE
ZERO? STACK /?CCL11
SET 'GL-P-GWIMBIT,0
GET GL-P-MERGE,K-P-MATCHLEN
EQUAL? STACK,1 \FALSE
GET GL-P-MERGE,1 >OBJ
EQUAL? GL-WINNER,CH-PLAYER \?CND15
EQUAL? OBJ,TH-HANDS /?CND15
ZERO? SILENT? \?CND15
PRINTC 91
CALL RT-PREP-PRINT,PREP,FALSE-VALUE
ZERO? STACK /?CND20
PRINTC 32
?CND20: ICALL2 RT-THEO-PRINT,OBJ
PRINTC 93
CRLF
?CND15: SET 'INHIBIT-ROOMS,FALSE-VALUE
RETURN OBJ
?CCL11: SET 'GL-P-GWIMBIT,0
SET 'INHIBIT-ROOMS,FALSE-VALUE
RFALSE
.FUNCT RT-P-CLEAR
SET 'GL-P-CONT,FALSE-VALUE
SET 'GL-P-QUOT,FALSE-VALUE
RTRUE
.FUNCT RT-PICK-NEXT,TBL,CNT,STR,NT
GETB TBL,0 >CNT
ADD TBL,1
GET STACK,0 >NT
GET NT,CNT >STR
GET NT,0
IGRTR? 'CNT,STACK \?CND1
SET 'CNT,1
?CND1: PUTB TBL,0,CNT
RETURN STR
.FUNCT RT-QCONTEXT-GOOD?
ZERO? GL-WHERE-TO-ORPH? \FALSE
ZERO? GL-P-QCONTEXT-TH /FALSE
FSET? GL-P-QCONTEXT-TH,FL-PERSON \FALSE
EQUAL? GL-PLACE-CUR,GL-P-QCONTEXT-RM \FALSE
CALL2 RT-VISIBLE?,GL-P-QCONTEXT-TH
ZERO? STACK /FALSE
RTRUE
.FUNCT RT-FIND-PERSON,THING,OBJ,OBJ1,WHO-P,WHO-A
FIRST? THING >OBJ /?PRG2
?PRG2: ZERO? OBJ /?REP3
FSET? OBJ,FL-PERSON \?CCL8
FSET? OBJ,FL-PLURAL /?CND4
EQUAL? OBJ,CH-PLAYER,GL-WINNER /?CND4
FSET? OBJ,FL-ASLEEP /?CND4
EQUAL? OBJ,GL-PUPPY \?REP3
SET 'WHO-P,OBJ
JUMP ?CND4
?CCL8: FSET? OBJ,FL-SURFACE /?CCL17
FSET? OBJ,FL-CONTAINER \?CND4
FSET? OBJ,FL-OPENED \?CND4
?CCL17: SET 'OBJ1,OBJ
CALL2 RT-FIND-PERSON,OBJ >OBJ
ZERO? OBJ /?CND22
FSET? OBJ,FL-ASLEEP /?CND22
EQUAL? OBJ,GL-PUPPY \?REP3
SET 'WHO-P,OBJ
?CND22: SET 'OBJ,OBJ1
?CND4: NEXT? OBJ >OBJ /?PRG2
JUMP ?PRG2
?REP3: ZERO? OBJ /?CCL31
RETURN OBJ
?CCL31: ZERO? WHO-P /FALSE
RETURN WHO-P
.FUNCT RT-ANYONE-HERE?
CALL1 RT-QCONTEXT-GOOD?
ZERO? STACK /?CCL3
RETURN GL-P-QCONTEXT-TH
?CCL3: CALL2 RT-FIND-PERSON,GL-PLACE-CUR
RSTACK
.FUNCT RT-MOVE-ALL,FROM,TO,OBJ,NXT
FIRST? FROM >OBJ /?PRG2
?PRG2: ZERO? OBJ /TRUE
NEXT? OBJ >NXT /?BOGUS6
?BOGUS6: MOVE OBJ,TO
SET 'OBJ,NXT
JUMP ?PRG2
.FUNCT RT-GOT?,OBJ
ZERO? OBJ /FALSE
EQUAL? GL-WINNER,CH-PLAYER \?CCL5
IN? OBJ,TH-POCKET /TRUE
?CCL5: CALL2 RT-HELD?,OBJ
ZERO? STACK /FALSE
RTRUE
.FUNCT RT-HELD?,OBJ,L
ZERO? OBJ /FALSE
FSET? OBJ,FL-TAKEABLE /?CND1
FSET? OBJ,FL-TRYTAKE \FALSE
?CND1: LOC OBJ >L
EQUAL? L,FALSE-VALUE,ROOMS,GLOBAL-OBJECTS /FALSE
EQUAL? L,GL-WINNER /TRUE
EQUAL? GL-WINNER,CH-PLAYER \?CCL13
EQUAL? L,TH-POCKET /FALSE
?CCL13: CALL2 RT-HELD?,L
RSTACK
.FUNCT RT-THIS-IS-IT,OBJ
EQUAL? OBJ,FALSE-VALUE,CH-PLAYER,TH-NOT-HERE-OBJECT /TRUE
EQUAL? OBJ,TH-INTDIR,TH-INTNUM /TRUE
EQUAL? OBJ,TH-LEFT,TH-RIGHT /TRUE
EQUAL? GL-PRSA,V?WALK,V?WALK-TO \?CCL8
EQUAL? OBJ,GL-PRSO /TRUE
?CCL8: FSET? OBJ,FL-PERSON \?CCL12
FSET? OBJ,FL-FEMALE \?CCL12
SET 'GL-P-HER-OBJECT,OBJ
RTRUE
?CCL12: FSET? OBJ,FL-PERSON \?CCL16
FSET? OBJ,FL-FEMALE /?CCL16
SET 'GL-P-HIM-OBJECT,OBJ
RTRUE
?CCL16: FSET? OBJ,FL-COLLECTIVE \?CCL20
SET 'GL-P-THEM-OBJECT,OBJ
SET 'GL-P-IT-OBJECT,OBJ
RTRUE
?CCL20: FSET? OBJ,FL-PLURAL \?CCL22
SET 'GL-P-THEM-OBJECT,OBJ
RTRUE
?CCL22: FSET? OBJ,FL-NEEDS-IDENTITY \?CCL25
GETP OBJ,P?OBJ-NOUN
PUTP TH-IT,P?OBJ-NOUN,STACK
GETP OBJ,P?OBJ-ADJ
PUTP TH-IT,P?OBJ-ADJ,STACK
JUMP ?CND23
?CCL25: PUTP TH-IT,P?OBJ-NOUN,0
PUTP TH-IT,P?OBJ-ADJ,0
?CND23: SET 'GL-P-IT-OBJECT,OBJ
RTRUE
.FUNCT RT-CHANGE-LEXV,PTR,WRD,PTRS?,X,Y,Z
ZERO? PTRS? /?CND1
SUB PTR,K-P-LEXELEN
MUL 2,STACK
ADD 2,STACK >X
GETB GL-P-P-LEX,X >Y
MUL 2,PTR
ADD 2,STACK >Z
PUTB GL-P-P-LEX,Z,Y
PUTB GL-P-S-LEX,Z,Y
ADD 1,X
GETB GL-P-P-LEX,STACK >Y
MUL 2,PTR
ADD 3,STACK >Z
PUTB GL-P-P-LEX,Z,Y
PUTB GL-P-S-LEX,Z,Y
?CND1: PUT GL-P-P-LEX,PTR,WRD
PUT GL-P-S-LEX,PTR,WRD
RTRUE
.FUNCT RT-WT?,PTR,BIT,B1,OFFS,TYP,TBL,?TMP1
ASSIGNED? 'B1 /?CND1
SET 'B1,5
?CND1: SET 'OFFS,K-P-P1OFF
GETB PTR,K-P-PSOFF >TYP
BTST TYP,BIT \FALSE
GRTR? B1,4 /TRUE
EQUAL? BIT,8 \?CCL10
ADD PREPOSITIONS,2 >?TMP1
GET PREPOSITIONS,0
INTBL? PTR,?TMP1,STACK,131 >TBL \FALSE
GETB TBL,2
RSTACK
?CCL10: BAND TYP,K-P-P1BITS >TYP
GETB PTR,OFFS
RSTACK
.FUNCT RT-VERB-DIR-ONLY?,WRD
GETB WRD,6
BAND STACK,160
ZERO? STACK \FALSE
GETB WRD,6
BAND STACK,80
ZERO? STACK /FALSE
RTRUE
.FUNCT RT-STUFF,DEST,SRC,MAX
ASSIGNED? 'MAX /?CND1
SET 'MAX,29
?CND1: MUL MAX,K-P-WORDLEN
ADD K-P-LEXSTART,STACK
COPYT SRC,DEST,STACK
RTRUE
.FUNCT RT-INBUF-ADD,LEN,BEG,SLOT,DBEG,CTR,TMP,?TMP1
GET GL-OOPS-TABLE,K-O-END >TMP
ZERO? TMP /?CCL3
SET 'DBEG,TMP
JUMP ?CND1
?CCL3: GET GL-OOPS-TABLE,K-O-LENGTH >TMP
GETB GL-P-S-LEX,TMP >?TMP1
ADD TMP,1
GETB GL-P-S-LEX,STACK
ADD ?TMP1,STACK >DBEG
?CND1: ADD DBEG,LEN
PUT GL-OOPS-TABLE,K-O-END,STACK
ADD GL-P-PIBUF,BEG >?TMP1
ADD GL-OOPS-INBUF,DBEG
COPYT ?TMP1,STACK,LEN
PUTB GL-P-S-LEX,SLOT,DBEG
SUB SLOT,1
PUTB GL-P-S-LEX,STACK,LEN
RTRUE
.FUNCT RT-ACLAUSE-WIN,ADJ,X
GET GL-P-OTBL,K-P-VERB
PUT GL-P-ITBL,K-P-VERB,STACK
ADD GL-P-ACLAUSE,1 >X
ICALL RT-CLAUSE-COPY,GL-P-OTBL,GL-P-OTBL,GL-P-ACLAUSE,X,GL-P-ACLAUSE,X,ADJ
GET GL-P-OTBL,K-P-NC2
ZERO? STACK /?PEN1
SET 'GL-P-NCN,2
?PEN1: SET 'GL-P-ACLAUSE,FALSE-VALUE
RTRUE
.FUNCT RT-NCLAUSE-WIN
ADD GL-P-ACLAUSE,1
ICALL RT-CLAUSE-COPY,GL-P-ITBL,GL-P-OTBL,K-P-NC1,K-P-NC1L,GL-P-ACLAUSE,STACK
GET GL-P-OTBL,K-P-NC2
ZERO? STACK /?PEN1
SET 'GL-P-NCN,2
?PEN1: SET 'GL-P-ACLAUSE,FALSE-VALUE
RTRUE
.FUNCT RT-ORPHAN-VERB,VERB,PREVERB
PUT GL-P-VTBL,0,VERB
PUT GL-P-OTBL,K-P-VERB,PREVERB
PUT GL-P-OTBL,K-P-VERBN,GL-P-VTBL
PUT GL-P-OTBL,K-P-PREP1,0
PUT GL-P-OTBL,K-P-PREP1N,0
PUT GL-P-OTBL,K-P-PREP2,0
PUT GL-P-OTBL,5,0
PUT GL-P-OTBL,K-P-NC1,1
PUT GL-P-OTBL,K-P-NC1L,0
PUT GL-P-OTBL,K-P-NC2,0
PUT GL-P-OTBL,K-P-NC2L,0
SET 'GL-P-ORPH,TRUE-VALUE
RETURN GL-P-ORPH
.FUNCT RT-ORPHAN,D1,D2,CNT
SET 'CNT,-1
ZERO? GL-P-MERGED \?CND1
PUT GL-P-OCLAUSE,K-P-MATCHLEN,0
?CND1: GET GL-P-VTBL,0
PUT GL-P-OVTBL,0,STACK
GETB GL-P-VTBL,2
PUTB GL-P-OVTBL,2,STACK
GETB GL-P-VTBL,3
PUTB GL-P-OVTBL,3,STACK
COPYT GL-P-ITBL,GL-P-OTBL,20
EQUAL? GL-P-NCN,2 \?CND3
ICALL RT-CLAUSE-COPY,GL-P-ITBL,GL-P-OTBL,K-P-NC2,K-P-NC2L,K-P-NC2,K-P-NC2L
?CND3: LESS? GL-P-NCN,1 /?CND5
ICALL RT-CLAUSE-COPY,GL-P-ITBL,GL-P-OTBL,K-P-NC1,K-P-NC1L,K-P-NC1,K-P-NC1L
?CND5: ZERO? D1 /?CCL9
CALL RT-GET-PREP,D1,1
PUT GL-P-OTBL,K-P-PREP1,STACK
PUT GL-P-OTBL,K-P-NC1,1
RTRUE
?CCL9: ZERO? D2 /FALSE
CALL RT-GET-PREP,D2,2
PUT GL-P-OTBL,K-P-PREP2,STACK
PUT GL-P-OTBL,K-P-NC2,1
RTRUE
.FUNCT RT-ORPHAN-MERGE,CNT,TEMP,VERB,BEG,END,ADJ,WRD,?TMP1
SET 'CNT,-1
SET 'GL-P-ORPH,FALSE-VALUE
GET GL-P-ITBL,K-P-VERBN >WRD
ZERO? WRD /?CND1
GET WRD,0 >WRD
ZERO? WRD /?CND1
GET GL-P-ITBL,K-P-VERBN
GET STACK,0 >WRD
CALL RT-WT?,WRD,64,1 >?TMP1
GET GL-P-OTBL,K-P-VERB
EQUAL? ?TMP1,STACK /?CTR6
GETB WRD,6
BTST STACK,32 \?CCL7
?CTR6: SET 'ADJ,TRUE-VALUE
JUMP ?CND1
?CCL7: GET GL-P-ITBL,K-P-VERBN
GET STACK,0 >WRD
GETB WRD,6
BTST STACK,32 \?CCL11
SET 'ADJ,TRUE-VALUE
JUMP ?CND1
?CCL11: GETB WRD,6
BTST STACK,128 \?CND1
ZERO? GL-P-NCN \?CND1
GET GL-P-ITBL,K-P-VERB >VERB
ZERO? VERB /?CND1
PUT GL-P-ITBL,K-P-VERB,0
PUT GL-P-ITBL,K-P-VERBN,0
PUT GL-P-ITBL,K-P-NC1,T?GL-P-P-LEX+2
PUT GL-P-ITBL,K-P-NC1L,T?GL-P-P-LEX+6
SET 'GL-P-NCN,1
?CND1: GET GL-P-ITBL,K-P-VERB >VERB
ZERO? VERB /?CCL18
ZERO? ADJ \?CCL18
GET GL-P-OTBL,K-P-VERB
EQUAL? VERB,STACK \FALSE
?CCL18: EQUAL? GL-P-NCN,2 \?CCL23
ZERO? GL-FUNNY-CLAUSE? /FALSE
SET 'GL-P-NCN,1
SET 'GL-FUNNY-CLAUSE?,FALSE-VALUE
GET GL-P-ITBL,K-P-NC2L
PUT GL-P-ITBL,K-P-NC1L,STACK
CALL1 RT-ORPHAN-MERGE
RSTACK
?CCL23: GET GL-P-OTBL,K-P-NC1
EQUAL? STACK,1 \?CCL27
GET GL-P-ITBL,K-P-PREP1 >TEMP
GET GL-P-OTBL,K-P-PREP1
EQUAL? TEMP,STACK /?CTR29
ZERO? TEMP \FALSE
?CTR29: ZERO? ADJ /?CCL35
PUT GL-P-OTBL,K-P-NC1,T?GL-P-P-LEX+2
GET GL-P-ITBL,K-P-NC1L
ZERO? STACK \?CND36
PUT GL-P-ITBL,K-P-NC1L,T?GL-P-P-LEX+6