321 lines
5.9 KiB
Plaintext
321 lines
5.9 KiB
Plaintext
|
|
|
|
.FUNCT V-HINTS-NO
|
|
EQUAL? PRSO,ROOMS /?CCL3
|
|
PRINTI "I don't understand what you mean."
|
|
CRLF
|
|
RETURN 2
|
|
?CCL3: SET 'HINTS-OFF,TRUE-VALUE
|
|
PRINTI "[Hints have been disallowed for this session.]"
|
|
CRLF
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT V-HINTS,CHR,MAXC,C,Q,WHO
|
|
?FCN: ZERO? HINTS-OFF /?CCL3
|
|
ICALL PERFORM,V?HINTS-NO,ROOMS
|
|
RETURN 2
|
|
?CCL3: ZERO? HINT-WARNING \?CND1
|
|
SET 'HINT-WARNING,TRUE-VALUE
|
|
PRINTI "[Warning: It is recognized that the temptation for help may at times be so exceedingly strong that you might fetch hints prematurely. Therefore, you may at any time during the story type HINTS OFF, and this will disallow the seeking out of help for the present session of the story. If you still want a hint now, indicate HINT.]"
|
|
CRLF
|
|
RETURN 2
|
|
?CND1: GET HINTS,0 >MAXC
|
|
ICALL1 INIT-HINT-SCREEN
|
|
CURSET 5,1
|
|
ICALL1 PUT-UP-CHAPTERS
|
|
SUB CHAPT-NUM,1 >CUR-POS
|
|
ICALL1 NEW-CURSOR
|
|
?PRG11: INPUT 1 >CHR
|
|
EQUAL? CHR,81,113 \?CCL15
|
|
SET 'Q,TRUE-VALUE
|
|
JUMP ?REP12
|
|
?CCL15: EQUAL? CHR,78,110 \?CCL17
|
|
ICALL1 ERASE-CURSOR
|
|
EQUAL? CHAPT-NUM,MAXC \?CCL20
|
|
SET 'CUR-POS,0
|
|
SET 'CHAPT-NUM,1
|
|
SET 'QUEST-NUM,1
|
|
JUMP ?CND18
|
|
?CCL20: INC 'CUR-POS
|
|
INC 'CHAPT-NUM
|
|
SET 'QUEST-NUM,1
|
|
?CND18: ICALL1 NEW-CURSOR
|
|
JUMP ?PRG11
|
|
?CCL17: EQUAL? CHR,80,112 \?CCL22
|
|
ICALL1 ERASE-CURSOR
|
|
EQUAL? CHAPT-NUM,1 \?CCL25
|
|
SET 'CHAPT-NUM,MAXC
|
|
SUB CHAPT-NUM,1 >CUR-POS
|
|
SET 'QUEST-NUM,1
|
|
JUMP ?CND23
|
|
?CCL25: DEC 'CUR-POS
|
|
DEC 'CHAPT-NUM
|
|
SET 'QUEST-NUM,1
|
|
?CND23: ICALL1 NEW-CURSOR
|
|
JUMP ?PRG11
|
|
?CCL22: EQUAL? CHR,13,10 \?PRG11
|
|
ICALL1 PICK-QUESTION
|
|
?REP12: ZERO? Q /?FCN
|
|
CLEAR -1
|
|
ICALL1 INIT-STATUS-LINE
|
|
CRLF
|
|
PRINTI "Back to the story..."
|
|
CRLF
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT PICK-QUESTION,CHR,MAXQ,Q
|
|
?FCN: ICALL2 INIT-HINT-SCREEN,FALSE-VALUE
|
|
ICALL LEFT-LINE,3,STR?237
|
|
ICALL RIGHT-LINE,3,STR?238,13
|
|
GET HINTS,CHAPT-NUM
|
|
GET STACK,0
|
|
SUB STACK,1 >MAXQ
|
|
CURSET 5,1
|
|
ICALL1 PUT-UP-QUESTIONS
|
|
SUB QUEST-NUM,1 >CUR-POS
|
|
ICALL1 NEW-CURSOR
|
|
?PRG1: INPUT 1 >CHR
|
|
EQUAL? CHR,81,113 \?CCL5
|
|
SET 'Q,TRUE-VALUE
|
|
JUMP ?REP2
|
|
?CCL5: EQUAL? CHR,78,110 \?CCL7
|
|
ICALL1 ERASE-CURSOR
|
|
EQUAL? QUEST-NUM,MAXQ \?CCL10
|
|
SET 'CUR-POS,0
|
|
SET 'QUEST-NUM,1
|
|
JUMP ?CND8
|
|
?CCL10: INC 'CUR-POS
|
|
INC 'QUEST-NUM
|
|
?CND8: ICALL1 NEW-CURSOR
|
|
JUMP ?PRG1
|
|
?CCL7: EQUAL? CHR,80,112 \?CCL12
|
|
ICALL1 ERASE-CURSOR
|
|
EQUAL? QUEST-NUM,1 \?CCL15
|
|
SET 'QUEST-NUM,MAXQ
|
|
SUB QUEST-NUM,1 >CUR-POS
|
|
JUMP ?CND13
|
|
?CCL15: DEC 'CUR-POS
|
|
DEC 'QUEST-NUM
|
|
?CND13: ICALL1 NEW-CURSOR
|
|
JUMP ?PRG1
|
|
?CCL12: EQUAL? CHR,13,10 \?PRG1
|
|
ICALL1 DISPLAY-HINT
|
|
?REP2: ZERO? Q /?FCN
|
|
RFALSE
|
|
|
|
|
|
.FUNCT ERASE-CURSOR,?TMP1
|
|
GET LINE-TABLE,CUR-POS >?TMP1
|
|
GET COLUMN-TABLE,CUR-POS
|
|
SUB STACK,2
|
|
CURSET ?TMP1,STACK
|
|
PRINTC 32
|
|
RTRUE
|
|
|
|
|
|
.FUNCT NEW-CURSOR,?TMP1
|
|
GET LINE-TABLE,CUR-POS >?TMP1
|
|
GET COLUMN-TABLE,CUR-POS
|
|
SUB STACK,2
|
|
CURSET ?TMP1,STACK
|
|
PRINTC 62
|
|
RTRUE
|
|
|
|
|
|
.FUNCT INVERSE-LINE,CENTER-HALF
|
|
HLIGHT H-INVERSE
|
|
GETB 0,33
|
|
ICALL2 PRINT-SPACES,STACK
|
|
HLIGHT H-NORMAL
|
|
RTRUE
|
|
|
|
|
|
.FUNCT DISPLAY-HINT,H,MX,MXC,CNT,CHR,FLG,N,?TMP1
|
|
SET 'CNT,2
|
|
SET 'FLG,TRUE-VALUE
|
|
CLEAR -1
|
|
SPLIT 3
|
|
SCREEN S-WINDOW
|
|
CURSET 1,1
|
|
ICALL1 INVERSE-LINE
|
|
ICALL CENTER-LINE,1,STR?239,16
|
|
CURSET 3,1
|
|
ICALL1 INVERSE-LINE
|
|
ICALL LEFT-LINE,3,STR?237
|
|
ICALL RIGHT-LINE,3,STR?240,17
|
|
CURSET 2,1
|
|
ICALL1 INVERSE-LINE
|
|
HLIGHT H-BOLD
|
|
GET HINTS,CHAPT-NUM >?TMP1
|
|
ADD QUEST-NUM,1
|
|
GET ?TMP1,STACK >H
|
|
GET H,2
|
|
ICALL CENTER-LINE,2,STACK
|
|
HLIGHT H-NORMAL
|
|
GET H,0 >MX
|
|
GET HINTS,0 >MXC
|
|
SCREEN S-TEXT
|
|
CRLF
|
|
?PRG1: GET H,1
|
|
EQUAL? CNT,STACK /?PRG8
|
|
GET H,CNT
|
|
PRINT STACK
|
|
CRLF
|
|
INC 'CNT
|
|
JUMP ?PRG1
|
|
?PRG8: ZERO? FLG /?CCL12
|
|
GRTR? CNT,MX \?CCL12
|
|
SET 'FLG,FALSE-VALUE
|
|
PRINTI "[That's all.]"
|
|
CRLF
|
|
JUMP ?CND10
|
|
?CCL12: ZERO? FLG /?CND10
|
|
SUB MX,CNT
|
|
ADD STACK,1 >N
|
|
EQUAL? CHAPT-NUM,MXC /?PRG28
|
|
PRINTN N
|
|
PRINTI " hint"
|
|
EQUAL? N,1 /?PRG26
|
|
PRINTC 115
|
|
?PRG26: PRINTI " left "
|
|
?PRG28: PRINTI "-> "
|
|
SET 'FLG,FALSE-VALUE
|
|
?CND10: INPUT 1 >CHR
|
|
EQUAL? CHR,81,113 \?CCL32
|
|
PUT H,1,CNT
|
|
RTRUE
|
|
?CCL32: EQUAL? CHR,13,10 \?PRG8
|
|
GRTR? CNT,MX /?PRG8
|
|
SET 'FLG,TRUE-VALUE
|
|
GET H,CNT
|
|
PRINT STACK
|
|
CRLF
|
|
IGRTR? 'CNT,MX \?PRG8
|
|
SET 'FLG,FALSE-VALUE
|
|
PRINTI "[That's all.]"
|
|
CRLF
|
|
JUMP ?PRG8
|
|
|
|
|
|
.FUNCT PUT-UP-QUESTIONS,ST,MXQ,MXL,?TMP1
|
|
SET 'ST,1
|
|
GET HINTS,CHAPT-NUM
|
|
GET STACK,0
|
|
SUB STACK,1 >MXQ
|
|
GETB 0,32
|
|
SUB STACK,1 >MXL
|
|
?PRG1: GRTR? ST,MXQ /TRUE
|
|
SUB ST,1
|
|
GET LINE-TABLE,STACK >?TMP1
|
|
SUB ST,1
|
|
GET COLUMN-TABLE,STACK
|
|
SUB STACK,1
|
|
CURSET ?TMP1,STACK
|
|
PRINTC 32
|
|
GET HINTS,CHAPT-NUM >?TMP1
|
|
ADD ST,1
|
|
GET ?TMP1,STACK
|
|
GET STACK,2
|
|
PRINT STACK
|
|
INC 'ST
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT PUT-UP-CHAPTERS,ST,MXC,MXL,?TMP1
|
|
SET 'ST,1
|
|
GET HINTS,0 >MXC
|
|
GETB 0,32
|
|
SUB STACK,1 >MXL
|
|
?PRG1: GRTR? ST,MXC /TRUE
|
|
SUB ST,1
|
|
GET LINE-TABLE,STACK >?TMP1
|
|
SUB ST,1
|
|
GET COLUMN-TABLE,STACK
|
|
SUB STACK,1
|
|
CURSET ?TMP1,STACK
|
|
PRINTC 32
|
|
GET HINTS,ST
|
|
GET STACK,1
|
|
PRINT STACK
|
|
INC 'ST
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT INIT-HINT-SCREEN,THIRD
|
|
ASSIGNED? 'THIRD /?CND1
|
|
SET 'THIRD,TRUE-VALUE
|
|
?CND1: CLEAR -1
|
|
GETB 0,32
|
|
SUB STACK,1
|
|
SPLIT STACK
|
|
SCREEN S-WINDOW
|
|
CURSET 1,1
|
|
ICALL1 INVERSE-LINE
|
|
CURSET 2,1
|
|
ICALL1 INVERSE-LINE
|
|
CURSET 3,1
|
|
ICALL1 INVERSE-LINE
|
|
ICALL CENTER-LINE,1,STR?239,16
|
|
ICALL LEFT-LINE,2,STR?241
|
|
ICALL RIGHT-LINE,2,STR?242,12
|
|
ZERO? THIRD /FALSE
|
|
ICALL LEFT-LINE,3,STR?243
|
|
CALL RIGHT-LINE,3,STR?244,16
|
|
RSTACK
|
|
|
|
|
|
.FUNCT CENTER-LINE,LN,STR,LEN,INV
|
|
ASSIGNED? 'INV /?CND1
|
|
SET 'INV,TRUE-VALUE
|
|
?CND1: ZERO? LEN \?CND3
|
|
DIROUT D-TABLE-ON,DIROUT-TBL
|
|
PRINT STR
|
|
DIROUT D-TABLE-OFF
|
|
GET DIROUT-TBL,0 >LEN
|
|
?CND3: GETB 0,33
|
|
SUB STACK,LEN
|
|
DIV STACK,2
|
|
ADD STACK,1
|
|
CURSET LN,STACK
|
|
ZERO? INV /?PRG9
|
|
HLIGHT H-INVERSE
|
|
?PRG9: PRINT STR
|
|
ZERO? INV /FALSE
|
|
HLIGHT H-NORMAL
|
|
RTRUE
|
|
|
|
|
|
.FUNCT LEFT-LINE,LN,STR,INV
|
|
ASSIGNED? 'INV /?CND1
|
|
SET 'INV,TRUE-VALUE
|
|
?CND1: CURSET LN,1
|
|
ZERO? INV /?PRG5
|
|
HLIGHT H-INVERSE
|
|
?PRG5: PRINT STR
|
|
ZERO? INV /FALSE
|
|
HLIGHT H-NORMAL
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RIGHT-LINE,LN,STR,LEN,INV
|
|
ASSIGNED? 'INV /?CND1
|
|
SET 'INV,TRUE-VALUE
|
|
?CND1: ZERO? LEN \?CND3
|
|
DIROUT 3,DIROUT-TBL
|
|
PRINT STR
|
|
DIROUT -3
|
|
GET DIROUT-TBL,0 >LEN
|
|
?CND3: GETB 0,33
|
|
SUB STACK,LEN
|
|
CURSET LN,STACK
|
|
ZERO? INV /?PRG9
|
|
HLIGHT H-INVERSE
|
|
?PRG9: PRINT STR
|
|
ZERO? INV /FALSE
|
|
HLIGHT H-NORMAL
|
|
RTRUE
|
|
|
|
.ENDI
|