506 lines
9.9 KiB
Plaintext
506 lines
9.9 KiB
Plaintext
|
|
.SEGMENT "HINTS"
|
|
|
|
|
|
.FUNCT DO-HINTS,Q,WIN,FCLR,WCLR,CHR,TMP,MAXC,?TMP1
|
|
HLIGHT H-NORMAL
|
|
CALL1 INIT-HINT-SCREEN >WIN
|
|
WINGET -3,WFSIZE
|
|
SHIFT STACK,-8 >Q
|
|
WINGET -3,WTOP
|
|
SUB STACK,1
|
|
DIV STACK,Q
|
|
ADD 1,STACK >TOP-HINT-LINE
|
|
WINGET -3,WHIGH
|
|
DIV STACK,Q
|
|
SUB STACK,1 >BOTTOM-HINT-NUM
|
|
WINGET -3,WFSIZE
|
|
BAND STACK,255 >Q
|
|
WINGET -3,WLEFT
|
|
SUB STACK,1
|
|
DIV STACK,Q
|
|
ADD 2,STACK >LEFT-HINT-COLUMN
|
|
?PRG1: CLEAR S-TEXT
|
|
SCREEN WIN
|
|
WINGET WIN,WCOLOR >WCLR
|
|
GET 0,0
|
|
BTST STACK,1 \?CCL5
|
|
ICALL CCURSET,2,9
|
|
COLOR 1,-1
|
|
JUMP ?CND3
|
|
?CCL5: COLOR 1,1
|
|
?CND3: ICALL HINT-TITLE,INVISICLUES,WIN
|
|
SCREEN S-FULL
|
|
WINGET S-FULL,WCOLOR >FCLR
|
|
WINGET S-TEXT,WCOLOR
|
|
BAND STACK,255 >?TMP1
|
|
WINGET S-TEXT,WCOLOR
|
|
SHIFT STACK,-8
|
|
COLOR ?TMP1,STACK
|
|
DIROUT D-TABLE-ON,SLINE
|
|
DIROUT D-TABLE-OFF
|
|
SET 'GET-HINT-ROUTINE,H-CHAPT-NAME
|
|
GET HINTS,0
|
|
ICALL2 H-PUT-UP-FROBS,STACK
|
|
ICALL2 H-NEW-CURSOR,H-CHAPT-NUM
|
|
GET HINTS,0 >MAXC
|
|
?PRG6: ZERO? DEMO-VERSION? /?CCL10
|
|
CALL2 INPUT-DEMO,1 >CHR
|
|
JUMP ?CND8
|
|
?CCL10: INPUT 1 >CHR
|
|
?CND8: EQUAL? CHR,CLICK1,CLICK2 \?CND11
|
|
CALL1 SELECT-HINT-BY-MOUSE >TMP
|
|
GRTR? TMP,0 /?CND11
|
|
EQUAL? TMP,-1 \?CCL17
|
|
SET 'CHR,78
|
|
JUMP ?CND11
|
|
?CCL17: EQUAL? TMP,-2 \?CCL19
|
|
SET 'CHR,80
|
|
JUMP ?CND11
|
|
?CCL19: EQUAL? TMP,-3 \?CCL21
|
|
SET 'CHR,13
|
|
JUMP ?CND11
|
|
?CCL21: EQUAL? TMP,-4 \?CCL23
|
|
SET 'CHR,81
|
|
?CND11: EQUAL? CHR,77,109,81 /?CTR25
|
|
EQUAL? CHR,113 \?CCL26
|
|
?CTR25: SET 'Q,TRUE-VALUE
|
|
JUMP ?REP7
|
|
?CCL23: SOUND S-BEEP
|
|
JUMP ?PRG6
|
|
?CCL26: EQUAL? CHR,78,110,DOWN-ARROW \?CCL30
|
|
ICALL H-NEW-CURSOR,H-CHAPT-NUM,TRUE-VALUE
|
|
EQUAL? H-CHAPT-NUM,MAXC \?CCL33
|
|
SET 'H-CHAPT-NUM,1
|
|
JUMP ?CND31
|
|
?CCL33: INC 'H-CHAPT-NUM
|
|
?CND31: SET 'H-QUEST-NUM,1
|
|
ICALL2 H-NEW-CURSOR,H-CHAPT-NUM
|
|
JUMP ?PRG6
|
|
?CCL30: EQUAL? CHR,80,112,UP-ARROW \?CCL35
|
|
ICALL H-NEW-CURSOR,H-CHAPT-NUM,TRUE-VALUE
|
|
EQUAL? H-CHAPT-NUM,1 \?CCL38
|
|
SET 'H-CHAPT-NUM,MAXC
|
|
JUMP ?CND36
|
|
?CCL38: DEC 'H-CHAPT-NUM
|
|
?CND36: SET 'H-QUEST-NUM,1
|
|
ICALL2 H-NEW-CURSOR,H-CHAPT-NUM
|
|
JUMP ?PRG6
|
|
?CCL35: EQUAL? CHR,13,10,32 \?CCL40
|
|
CALL1 H-PICK-QUESTION >Q
|
|
JUMP ?REP7
|
|
?CCL40: EQUAL? CHR,CLICK1,CLICK2 \?CCL42
|
|
GRTR? TMP,MAXC \?CCL45
|
|
SOUND S-BEEP
|
|
JUMP ?PRG6
|
|
?CCL45: ICALL H-NEW-CURSOR,H-CHAPT-NUM,TRUE-VALUE
|
|
SET 'H-CHAPT-NUM,TMP
|
|
SET 'H-QUEST-NUM,1
|
|
ICALL2 H-NEW-CURSOR,H-CHAPT-NUM
|
|
EQUAL? CHR,CLICK2 \?PRG6
|
|
CALL1 H-PICK-QUESTION >Q
|
|
?REP7: ZERO? Q /?PRG1
|
|
CLEAR -1
|
|
SCREEN WIN
|
|
BAND WCLR,255 >?TMP1
|
|
SHIFT WCLR,-8
|
|
COLOR ?TMP1,STACK
|
|
SCREEN S-FULL
|
|
BAND FCLR,255 >?TMP1
|
|
SHIFT FCLR,-8
|
|
COLOR ?TMP1,STACK
|
|
SCREEN S-TEXT
|
|
HLIGHT H-NORMAL
|
|
ICALL1 INIT-STATUS-LINE
|
|
PRINTI "Back to the story..."
|
|
CRLF
|
|
RETURN 2
|
|
?CCL42: SOUND S-BEEP
|
|
JUMP ?PRG6
|
|
|
|
|
|
.FUNCT H-PICK-QUESTION,CHR,MAXQ,Q,WID,TMP
|
|
?FCN: CATCH >PARSE-SENTENCE-ACTIVATION
|
|
HLIGHT H-NORMAL
|
|
CLEAR S-TEXT
|
|
GET HINTS,H-CHAPT-NUM
|
|
GET STACK,1
|
|
ICALL HINT-TITLE,STACK,S-WINDOW
|
|
CALL CENTER-LINE,M-MAIN-HINT-MENU,2 >WID
|
|
GET HINTS,H-CHAPT-NUM
|
|
GET STACK,0
|
|
SUB STACK,1 >MAXQ
|
|
SCREEN S-FULL
|
|
SET 'GET-HINT-ROUTINE,H-GET-QUEST
|
|
GET HINTS,H-CHAPT-NUM
|
|
GET STACK,0
|
|
SUB STACK,1
|
|
ICALL2 H-PUT-UP-FROBS,STACK
|
|
ICALL2 H-NEW-CURSOR,H-QUEST-NUM
|
|
?PRG1: ZERO? DEMO-VERSION? /?CCL5
|
|
CALL2 INPUT-DEMO,1 >CHR
|
|
JUMP ?CND3
|
|
?CCL5: INPUT 1 >CHR
|
|
?CND3: EQUAL? CHR,CLICK1,CLICK2 \?CND6
|
|
CALL2 SELECT-HINT-BY-MOUSE,WID >TMP
|
|
GRTR? TMP,0 /?CND6
|
|
EQUAL? TMP,-1 \?CCL12
|
|
SET 'CHR,78
|
|
JUMP ?CND6
|
|
?CCL12: EQUAL? TMP,-2 \?CCL14
|
|
SET 'CHR,80
|
|
JUMP ?CND6
|
|
?CCL14: EQUAL? TMP,-3 \?CCL16
|
|
SET 'CHR,13
|
|
JUMP ?CND6
|
|
?CCL16: EQUAL? TMP,-4 \?CCL18
|
|
SET 'CHR,81
|
|
JUMP ?CND6
|
|
?CCL18: EQUAL? TMP,-5 \?CCL20
|
|
SET 'CHR,77
|
|
?CND6: EQUAL? CHR,81,113 /TRUE
|
|
EQUAL? CHR,77,109 \?CCL25
|
|
SET 'Q,TRUE-VALUE
|
|
JUMP ?REP2
|
|
?CCL20: SOUND S-BEEP
|
|
JUMP ?PRG1
|
|
?CCL25: EQUAL? CHR,78,110,DOWN-ARROW \?CCL27
|
|
ICALL H-NEW-CURSOR,H-QUEST-NUM,TRUE-VALUE
|
|
EQUAL? H-QUEST-NUM,MAXQ \?CCL30
|
|
SET 'H-QUEST-NUM,1
|
|
JUMP ?CND28
|
|
?CCL30: INC 'H-QUEST-NUM
|
|
?CND28: ICALL2 H-NEW-CURSOR,H-QUEST-NUM
|
|
JUMP ?PRG1
|
|
?CCL27: EQUAL? CHR,80,112,UP-ARROW \?CCL32
|
|
ICALL H-NEW-CURSOR,H-QUEST-NUM,TRUE-VALUE
|
|
EQUAL? H-QUEST-NUM,1 \?CCL35
|
|
SET 'H-QUEST-NUM,MAXQ
|
|
JUMP ?CND33
|
|
?CCL35: DEC 'H-QUEST-NUM
|
|
?CND33: ICALL2 H-NEW-CURSOR,H-QUEST-NUM
|
|
JUMP ?PRG1
|
|
?CCL32: EQUAL? CHR,CLICK1,CLICK2 \?CCL37
|
|
GRTR? TMP,MAXQ \?CCL40
|
|
SOUND S-BEEP
|
|
JUMP ?PRG1
|
|
?CCL40: ICALL H-NEW-CURSOR,H-QUEST-NUM,TRUE-VALUE
|
|
SET 'H-QUEST-NUM,TMP
|
|
ICALL2 H-NEW-CURSOR,H-QUEST-NUM
|
|
EQUAL? CHR,CLICK2 \?PRG1
|
|
ICALL1 DISPLAY-HINT
|
|
JUMP ?REP2
|
|
?CCL37: EQUAL? CHR,13,10,32 \?CCL44
|
|
ICALL1 DISPLAY-HINT
|
|
?REP2: ZERO? Q /?FCN
|
|
RFALSE
|
|
?CCL44: SOUND S-BEEP
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT H-NEW-CURSOR,POS,OFF?,Y,X
|
|
ADD TOP-HINT-LINE,POS >Y
|
|
SET 'X,LEFT-HINT-COLUMN
|
|
GRTR? POS,BOTTOM-HINT-NUM \?CND1
|
|
SUB Y,BOTTOM-HINT-NUM >Y
|
|
GETB 0,33
|
|
DIV STACK,2 >X
|
|
?CND1: ICALL CCURSET,Y,X
|
|
ZERO? OFF? \?CCL5
|
|
HLIGHT H-INVERSE
|
|
JUMP ?CND3
|
|
?CCL5: HLIGHT H-NORMAL
|
|
?CND3: CALL GET-HINT-ROUTINE,POS
|
|
PRINT STACK
|
|
PRINTC 32
|
|
ZERO? OFF? \FALSE
|
|
HLIGHT H-NORMAL
|
|
RTRUE
|
|
|
|
|
|
.FUNCT SELECT-HINT-BY-MOUSE,WID,VAL,MID,X,Y,?TMP1
|
|
WINGET -3,WFSIZE
|
|
SHIFT STACK,-8 >VAL
|
|
GET 0,27
|
|
GET STACK,2 >Y
|
|
GET 0,27
|
|
GET STACK,1 >X
|
|
SUB Y,1
|
|
DIV STACK,VAL >VAL
|
|
GETB 0,33 >?TMP1
|
|
WINGET -3,WFSIZE
|
|
BAND STACK,255
|
|
MUL ?TMP1,STACK
|
|
DIV STACK,2 >MID
|
|
SUB TOP-HINT-LINE,1
|
|
LESS? VAL,STACK \?CCL3
|
|
EQUAL? VAL,1 \?CCL6
|
|
DIV WID,2 >VAL
|
|
ZERO? VAL /?CCL9
|
|
SUB MID,VAL
|
|
GRTR? X,STACK \?CCL9
|
|
ADD MID,VAL
|
|
LESS? X,STACK \?CCL9
|
|
RETURN -5
|
|
?CCL9: GRTR? X,MID /?CCL14
|
|
RETURN -1
|
|
?CCL14: RETURN -3
|
|
?CCL6: EQUAL? VAL,2 \FALSE
|
|
GRTR? X,MID /?CCL19
|
|
RETURN -2
|
|
?CCL19: RETURN -4
|
|
?CCL3: ADD 1,VAL
|
|
SUB STACK,TOP-HINT-LINE >VAL
|
|
GRTR? X,MID \?CND21
|
|
ADD VAL,BOTTOM-HINT-NUM >VAL
|
|
?CND21: RETURN VAL
|
|
|
|
|
|
.FUNCT INVERSE-LINE,LN,INV
|
|
ASSIGNED? 'INV /?CND1
|
|
SET 'INV,H-INVERSE
|
|
?CND1: ZERO? LN /?CND3
|
|
ICALL CCURSET,LN,1
|
|
?CND3: HLIGHT INV
|
|
ZERO? INV \?CCL7
|
|
ERASE 1
|
|
RTRUE
|
|
?CCL7: FONT 4
|
|
GETB 0,39 >LN
|
|
WINGET -3,WWIDE
|
|
ADD LN,STACK
|
|
DIV STACK,LN
|
|
ICALL2 PRINT-SPACES,STACK
|
|
FONT 1
|
|
HLIGHT H-NORMAL
|
|
RTRUE
|
|
|
|
|
|
.FUNCT DISPLAY-HINT,H,MX,CNT,CV,SHIFT?,COUNT-OFFS,WID,CURCX,CURC,FLG,?TMP1
|
|
SET 'CNT,2
|
|
HLIGHT H-NORMAL
|
|
CLEAR S-TEXT
|
|
SCREEN S-WINDOW
|
|
ICALL INVERSE-LINE,3,H-NORMAL
|
|
ICALL RIGHT-LINE,Q-RESUME-STORY,3
|
|
ICALL INVERSE-LINE,2,H-NORMAL
|
|
ICALL RIGHT-LINE,RETURN-SEE-NEW-HINT,2
|
|
GET 0,8
|
|
BTST STACK,32 \?CND1
|
|
ICALL CENTER-LINE,H-OR-USE-MOUSE,3
|
|
?CND1: ICALL INVERSE-LINE,1,H-NORMAL
|
|
HLIGHT H-BOLD
|
|
GET HINTS,H-CHAPT-NUM >?TMP1
|
|
ADD H-QUEST-NUM,1
|
|
GET ?TMP1,STACK >H
|
|
SUB H-CHAPT-NUM,1
|
|
GET HINT-COUNTS,STACK >CV
|
|
GET H,1
|
|
ICALL CENTER-LINE,STACK,1,H-INVERSE
|
|
HLIGHT H-NORMAL
|
|
CALL CENTER-LINE,M-SEE-HINT-MENU,2 >WID
|
|
GET H,0 >MX
|
|
SCREEN S-TEXT
|
|
CURSET 1,1
|
|
MOD H-QUEST-NUM,2 >SHIFT?
|
|
SUB H-QUEST-NUM,1
|
|
DIV STACK,2 >COUNT-OFFS
|
|
GETB CV,COUNT-OFFS >CURCX
|
|
ZERO? SHIFT? /?CCL5
|
|
SHIFT CURCX,-4
|
|
JUMP ?CND3
|
|
?CCL5: PUSH CURCX
|
|
?CND3: BAND STACK,15
|
|
ADD 2,STACK >CURC
|
|
?PRG6: EQUAL? CNT,CURC /?REP7
|
|
PRINTC 9
|
|
GET H,CNT
|
|
PRINT STACK
|
|
CRLF
|
|
INC 'CNT
|
|
JUMP ?PRG6
|
|
?REP7: SET 'FLG,TRUE-VALUE
|
|
?PRG11: ZERO? FLG /?CND13
|
|
SET 'FLG,FALSE-VALUE
|
|
GRTR? CNT,MX \?CCL17
|
|
PRINT NO-MORE-HINTS
|
|
CRLF
|
|
SCREEN S-WINDOW
|
|
ICALL INVERSE-LINE,2,H-NORMAL
|
|
ICALL CENTER-LINE,M-SEE-HINT-MENU,2
|
|
SCREEN S-TEXT
|
|
JUMP ?CND13
|
|
?CCL17: SUB MX,CNT
|
|
ADD STACK,1
|
|
PRINTN STACK
|
|
PRINTI "> "
|
|
?CND13: ZERO? DEMO-VERSION? /?CCL20
|
|
CALL2 INPUT-DEMO,1 >CURC
|
|
JUMP ?CND18
|
|
?CCL20: INPUT 1 >CURC
|
|
?CND18: EQUAL? CURC,CLICK1,CLICK2 \?CND21
|
|
CALL2 SELECT-HINT-BY-MOUSE,WID >CURCX
|
|
GRTR? CURCX,0 /?CND21
|
|
EQUAL? CURCX,-3 \?CCL27
|
|
SET 'CURC,13
|
|
JUMP ?CND21
|
|
?CCL27: EQUAL? CURCX,-4 \?CCL29
|
|
SET 'CURC,81
|
|
JUMP ?CND21
|
|
?CCL29: EQUAL? CURCX,-5 \?CCL31
|
|
SET 'CURC,77
|
|
?CND21: EQUAL? CURC,77,109,81 /?CTR33
|
|
EQUAL? CURC,113 \?CCL34
|
|
?CTR33: ZERO? SHIFT? /?CCL39
|
|
GETB CV,COUNT-OFFS
|
|
BAND STACK,15 >?TMP1
|
|
SUB CNT,2
|
|
SHIFT STACK,4
|
|
BOR ?TMP1,STACK
|
|
PUTB CV,COUNT-OFFS,STACK
|
|
JUMP ?CND37
|
|
?CCL31: SOUND S-BEEP
|
|
JUMP ?PRG11
|
|
?CCL39: GETB CV,COUNT-OFFS
|
|
BAND STACK,240 >?TMP1
|
|
SUB CNT,2
|
|
BOR ?TMP1,STACK
|
|
PUTB CV,COUNT-OFFS,STACK
|
|
?CND37: EQUAL? CURC,81,113 \TRUE
|
|
THROW TRUE-VALUE,PARSE-SENTENCE-ACTIVATION
|
|
JUMP ?PRG11
|
|
?CCL34: EQUAL? CURC,13,10 \?CCL44
|
|
GRTR? CNT,MX /?CCL47
|
|
SET 'FLG,TRUE-VALUE
|
|
GET H,CNT
|
|
PRINT STACK
|
|
CRLF
|
|
IGRTR? 'CNT,MX \?PRG11
|
|
SET 'FLG,FALSE-VALUE
|
|
PRINT NO-MORE-HINTS
|
|
CRLF
|
|
SCREEN S-WINDOW
|
|
ICALL INVERSE-LINE,2,H-NORMAL
|
|
ICALL CENTER-LINE,M-SEE-HINT-MENU,2
|
|
SCREEN S-TEXT
|
|
JUMP ?PRG11
|
|
?CCL47: SOUND S-BEEP
|
|
JUMP ?PRG11
|
|
?CCL44: SOUND S-BEEP
|
|
JUMP ?PRG11
|
|
|
|
|
|
.FUNCT H-CHAPT-NAME,N
|
|
GET HINTS,N
|
|
GET STACK,1
|
|
RSTACK
|
|
|
|
|
|
.FUNCT H-GET-QUEST,N,?TMP1
|
|
GET HINTS,H-CHAPT-NUM >?TMP1
|
|
ADD N,1
|
|
GET ?TMP1,STACK
|
|
GET STACK,1
|
|
RSTACK
|
|
|
|
|
|
.FUNCT H-PUT-UP-FROBS,MX,ST,X,Y
|
|
HLIGHT H-NORMAL
|
|
SET 'X,LEFT-HINT-COLUMN
|
|
SET 'Y,TOP-HINT-LINE
|
|
?PRG1: IGRTR? 'ST,MX /TRUE
|
|
INC 'Y
|
|
ICALL CCURSET,Y,X
|
|
CALL GET-HINT-ROUTINE,ST
|
|
PRINT STACK
|
|
EQUAL? ST,BOTTOM-HINT-NUM \?PRG1
|
|
SET 'Y,TOP-HINT-LINE
|
|
GETB 0,33
|
|
DIV STACK,2 >X
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT INIT-HINT-SCREEN
|
|
CLEAR -1
|
|
SCREEN S-FULL
|
|
ZERO? BORDER-ON /?CND1
|
|
DISPLAY HINT-BORDER,1,1
|
|
?CND1: ICALL2 SPLIT-BY-PICTURE,TEXT-WINDOW-PIC-LOC
|
|
SCREEN S-TEXT
|
|
RETURN S-WINDOW
|
|
|
|
|
|
.FUNCT HINT-TITLE,TITLE,WIN,THIRD
|
|
ASSIGNED? 'THIRD /?CND1
|
|
SET 'THIRD,TRUE-VALUE
|
|
?CND1: SCREEN WIN
|
|
ICALL INVERSE-LINE,1,H-NORMAL
|
|
ICALL INVERSE-LINE,2,H-NORMAL
|
|
ICALL INVERSE-LINE,3,H-NORMAL
|
|
HLIGHT H-BOLD
|
|
ICALL CENTER-LINE,TITLE,1,H-INVERSE
|
|
HLIGHT H-NORMAL
|
|
ICALL LEFT-LINE,2,NEXT-HINT
|
|
GET 0,8
|
|
BTST STACK,32 \?CND3
|
|
ICALL CENTER-LINE,H-OR-USE-MOUSE,3
|
|
?CND3: ICALL LEFT-LINE,3,PREVIOUS-HINT
|
|
ZERO? THIRD /FALSE
|
|
ICALL RIGHT-LINE,RETURN-SEE-HINT,2
|
|
CALL RIGHT-LINE,Q-RESUME-STORY,3
|
|
RSTACK
|
|
|
|
|
|
.FUNCT LEFT-LINE,LN,STR,INV
|
|
ICALL CCURSET,LN,1
|
|
ZERO? INV /?CND1
|
|
HLIGHT INV
|
|
?CND1: PRINT STR
|
|
ZERO? INV /FALSE
|
|
HLIGHT H-NORMAL
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RIGHT-LINE,STR,LN,INV,LEN
|
|
CALL JUSTIFIED-LINE,STR,LN,INV,LEN,1
|
|
RSTACK
|
|
|
|
|
|
.FUNCT CENTER-LINE,STR,LN,INV,LEN
|
|
CALL JUSTIFIED-LINE,STR,LN,INV,LEN,2
|
|
RSTACK
|
|
|
|
|
|
.FUNCT JUSTIFIED-LINE,STR,LN,INV,LEN,CTR
|
|
ZERO? LN \?CCL3
|
|
CURGET SLINE
|
|
GET SLINE,0 >LN
|
|
JUMP ?CND1
|
|
?CCL3: DEC 'LN
|
|
WINGET -3,WFSIZE
|
|
SHIFT STACK,-8
|
|
MUL LN,STACK
|
|
ADD 1,STACK >LN
|
|
?CND1: ZERO? LEN \?CND4
|
|
DIROUT D-TABLE-ON,SLINE
|
|
PRINT STR
|
|
PRINTC 32
|
|
DIROUT D-TABLE-OFF
|
|
GET 0,24 >LEN
|
|
?CND4: WINGET -3,WWIDE
|
|
SUB STACK,LEN
|
|
DIV STACK,CTR
|
|
CURSET LN,STACK
|
|
ZERO? INV /?CND6
|
|
HLIGHT INV
|
|
?CND6: PRINT STR
|
|
PRINTC 32
|
|
ZERO? INV \?CCL9
|
|
RETURN LEN
|
|
?CCL9: HLIGHT H-NORMAL
|
|
RETURN LEN
|
|
|
|
.ENDSEG
|
|
|
|
.ENDI
|