hitchhikersguide-gold/hints.zap

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