shogun/menu.zap
2019-04-16 09:37:36 -04:00

246 lines
4.8 KiB
Plaintext

.SEGMENT "0"
.FUNCT GET-FROM-MENU:ANY:3:4,MSG,MENU,FCN,DEF,YFULL,Y,TMP,N,WHICH,L,WID,CNT,LL,?TMP1,?TMP2
ASSIGNED? 'DEF /?CND1
SET 'DEF,1
?CND1: GET MENU,0 >L
EQUAL? MACHINE,APPLE-2E,APPLE-2C,APPLE-2GS /?CCL4
EQUAL? MACHINE,AMIGA \?CND3
?CCL4: INC 'L
?CND3: WINGET S-TEXT,WCRCNT >Y
ZERO? Y /?CND7
ICALL2 N-CRLF,Y
ICALL1 RESET-MARGIN
?CND7: WINGET 0,WHIGH
DIV STACK,FONT-Y >TMP
WINGET 0,WLCNT
SUB TMP,STACK
GRTR? L,STACK \?CND9
WINPUT 0,WLCNT,TMP
?CND9: GET MENU,0 >LL
?PRG11: IGRTR? 'CNT,LL \?CCL15
INC 'WID
SET 'RESTORED?,TRUE-VALUE
?PRG18: ZERO? RESTORED? /?CND20
MUL L,FONT-Y
ICALL2 MAKE-ROOM-FOR,STACK
WINGET 0,WYPOS >Y
WINGET 0,WTOP
ADD STACK,Y
ADD STACK,-1 >YFULL
?CND20: CURSET Y,1
WINGET 0,WLEFT >?TMP2
MUL L,FONT-Y >?TMP1
WINGET 0,WWIDE
ICALL WINDEF,MENU-WINDOW,YFULL,?TMP2,?TMP1,STACK
SCREEN MENU-WINDOW
EQUAL? MACHINE,AMIGA /?CND22
WINGET S-TEXT,WCOLOR >LL
BAND LL,255 >?TMP1
SHIFT LL,-8
COLOR ?TMP1,STACK
?CND22: CLEAR MENU-WINDOW
SCREEN S-TEXT
PRINT MSG
EQUAL? MACHINE,APPLE-2E,APPLE-2C,APPLE-2GS /?CTR25
EQUAL? MACHINE,AMIGA \?CCL26
?CTR25: SET 'LL,FONT-Y
CRLF
JUMP ?CND24
?CCL15: DIROUT D-TABLE-ON,DIROUT-TABLE
GET MENU,CNT
ICALL2 PRINT-TABLE,STACK
DIROUT D-TABLE-OFF
GET 0,24 >TMP
GRTR? TMP,WID \?PRG11
SET 'WID,TMP
JUMP ?PRG11
?CCL26: SET 'LL,0
?CND24: ADD YFULL,LL
CALL MENU-SELECT,MENU,STACK,WID,DEF >WHICH
LESS? WHICH,0 \?CCL31
RETURN WHICH
?CCL31: GET 0,8
BTST STACK,1 \?CND29
DIROUT D-SCREEN-OFF
PRINTC 32
GET MENU,WHICH
ICALL2 PRINT-TABLE,STACK
CRLF
CRLF
DIROUT D-SCREEN-ON
?CND29: CRLF
SET 'RESTORED?,FALSE-VALUE
CALL FCN,WHICH,MENU >LL
ZERO? LL /?PRG18
RETURN LL
.FUNCT MENU-SELECT:ANY:3:4,M,Y,WID,S,X,CNT,CHR,?PR-Y,OS,OICNT,ITEM,TMP,?TMP1
ASSIGNED? 'S /?CND1
SET 'S,1
?CND1: GET M,0 >CNT
GET 0,17
SUB STACK,WID
DIV STACK,2 >X
MUL CNT,FONT-Y
ICALL WINDEF,MENU-WINDOW,Y,X,STACK,WID
SCREEN MENU-WINDOW
EQUAL? MACHINE,AMIGA /?CND3
WINGET S-TEXT,WCOLOR >CHR
BAND CHR,255 >?TMP1
SHIFT CHR,-8
COLOR ?TMP1,STACK
?CND3: CLEAR MENU-WINDOW
ICALL1 CURSOR-OFF
?PRG5: IGRTR? '?PR-Y,CNT /?REP6
ICALL CCURSET,?PR-Y,1
EQUAL? ?PR-Y,S \?CND10
HLIGHT H-INVERSE
?CND10: GET M,?PR-Y
ICALL2 PRINT-TABLE,STACK
EQUAL? ?PR-Y,S \?PRG5
HLIGHT H-NORMAL
JUMP ?PRG5
?REP6: ICALL CCURSET,S,1
SET '?PR-Y,0
GET M,S >ITEM
?PRG14: ZERO? DEMO-VERSION? /?CCL18
CALL2 INPUT-DEMO,1
JUMP ?CND16
?CCL18: INPUT 1
?CND16: CALL2 CONVERT-KEYS,STACK
CALL2 LC,STACK >CHR
SET 'OS,S
SET 'OICNT,?PR-Y
EQUAL? CHR,CLICK1,CLICK2 \?CCL21
CALL2 IN-WINDOW?,SOFT-WINDOW >TMP
ZERO? TMP /?CCL21
SET 'S,TMP
EQUAL? OS,S /?CND24
ICALL CCURSET,OS,1
GET M,OS
ICALL2 PRINT-TABLE,STACK
ICALL CCURSET,S,1
HLIGHT H-INVERSE
GET M,S >ITEM
ICALL2 PRINT-TABLE,ITEM
HLIGHT H-NORMAL
CALL2 L-PIXELS,S >?TMP1
CALL STRWIDTH,ITEM,?PR-Y
ADD STACK,1
CURSET ?TMP1,STACK
?CND24: EQUAL? CHR,CLICK2 \?CCL28
CLEAR MENU-WINDOW
ICALL1 CURSOR-ON
SCREEN S-TEXT
RETURN S
?CCL28: SET 'OS,S
JUMP ?CND19
?CCL21: EQUAL? CHR,8,127 \?CCL30
GRTR? ?PR-Y,0 \?CCL30
DEC '?PR-Y
JUMP ?CND19
?CCL30: EQUAL? CHR,UP-ARROW,LEFT-ARROW,DOWN-ARROW /?CTR33
EQUAL? CHR,RIGHT-ARROW,32 \?CCL34
?CTR33: SET 'ITEM,FALSE-VALUE
SET '?PR-Y,FALSE-VALUE
EQUAL? CHR,UP-ARROW,LEFT-ARROW \?CCL39
GRTR? S,1 \?CCL42
DEC 'S
JUMP ?CND19
?CCL42: SET 'S,CNT
JUMP ?CND19
?CCL39: LESS? S,CNT \?CCL45
INC 'S
JUMP ?CND19
?CCL45: SET 'S,1
JUMP ?CND19
?CCL34: EQUAL? CHR,13 \?CCL47
CLEAR MENU-WINDOW
ICALL1 CURSOR-ON
SCREEN S-TEXT
RETURN S
?CCL47: GETB ITEM,0
LESS? ?PR-Y,STACK \?CCL49
ADD ?PR-Y,1
GETB ITEM,STACK
CALL2 LC,STACK
EQUAL? CHR,STACK \?CCL49
INC '?PR-Y
JUMP ?CND19
?CCL49: CALL FIND-ITEM,ITEM,CHR,?PR-Y,M >TMP
ZERO? TMP /?CCL53
SET 'S,TMP
INC '?PR-Y
JUMP ?CND19
?CCL53: SOUND S-BEEP
?CND19: GET M,S >ITEM
EQUAL? S,OS \?CCL55
EQUAL? ?PR-Y,OICNT /?PRG14
?CCL55: EQUAL? S,OS /?CND58
ICALL CCURSET,OS,1
GET M,OS
ICALL2 PRINT-TABLE,STACK
ICALL CCURSET,S,1
HLIGHT H-INVERSE
ICALL2 PRINT-TABLE,ITEM
HLIGHT H-NORMAL
?CND58: CALL2 L-PIXELS,S >?TMP1
CALL STRWIDTH,ITEM,?PR-Y
ADD STACK,1
CURSET ?TMP1,STACK
JUMP ?PRG14
.FUNCT PRINT-TABLE:ANY:1:2,TBL,L
ASSIGNED? 'L /?CND1
GETB TBL,0 >L
?CND1: ADD 1,TBL
PRINTT STACK,L
RTRUE
.FUNCT STRWIDTH:ANY:2:2,ITEM,ICNT
GRTR? ICNT,1 \FALSE
DIROUT D-TABLE-ON,DIROUT-TABLE
ICALL PRINT-TABLE,ITEM,ICNT
DIROUT D-TABLE-OFF
GET 0,24
RSTACK
.FUNCT LC:ANY:1:1,CHR
LESS? CHR,65 /?CCL3
GRTR? CHR,90 /?CCL3
ADD CHR,32
RSTACK
?CCL3: RETURN CHR
.FUNCT FIND-ITEM:ANY:4:4,ITEM,CHR,ICNT,MENU,S,NITEM,CCNT,C1,C2
?PRG1: GET MENU,0
IGRTR? 'S,STACK /FALSE
GET MENU,S >NITEM
GETB NITEM,0
LESS? ICNT,STACK \?PRG1
ADD ICNT,1
GETB NITEM,STACK
CALL2 LC,STACK
EQUAL? CHR,STACK \?PRG1
SET 'CCNT,0
?PRG9: IGRTR? 'CCNT,ICNT \?CND11
RETURN S
?CND11: GETB NITEM,CCNT
CALL2 LC,STACK >C1
GETB ITEM,CCNT
CALL2 LC,STACK >C2
EQUAL? C1,C2 /?PRG9
JUMP ?PRG1
.ENDSEG
.ENDI