shogun/soft.zap

585 lines
11 KiB
Plaintext

.SEGMENT "0"
.FUNCT SLIDE-SHOW-HANDLER:ANY:0:0
SET 'DEMO-VERSION?,1
RTRUE
.FUNCT READ-DEMO:ANY:1:2,ARG1,ARG2,CHR
SET 'DEMO-VERSION?,-1
READ ARG1,ARG2,DEMO-TIMEOUT,SLIDE-SHOW-HANDLER >CHR
EQUAL? DEMO-VERSION?,1 \?CCL3
CALL1 END-DEMO
RSTACK
?CCL3: WINPUT S-TEXT,15,-999
RETURN CHR
.FUNCT INPUT-DEMO:ANY:1:1,ARG,CHR
SET 'DEMO-VERSION?,-1
INPUT ARG,DEMO-TIMEOUT,SLIDE-SHOW-HANDLER >CHR
EQUAL? DEMO-VERSION?,1 \?CCL3
CALL1 END-DEMO
RSTACK
?CCL3: WINPUT S-TEXT,15,-999
RETURN CHR
.FUNCT READ-INPUT:ANY:0:0,TRM,TMP,FDEF,?TMP1
PRINTC 62
PUTB P-INBUF,1,0
?PRG1: ZERO? DEMO-VERSION? /?CCL5
CALL2 READ-DEMO,P-INBUF >TRM
JUMP ?CND3
?CCL5: READ P-INBUF,FALSE-VALUE >TRM
?CND3: CALL2 CONVERT-KEYS,TRM >TRM
EQUAL? TRM,13,10 /?REP2
EQUAL? TRM,CLICK1,CLICK2 \?CCL10
CALL2 MOUSE-INPUT,TRM
ZERO? STACK \?REP2
SOUND S-BEEP
JUMP ?PRG1
?CCL10: ADD FKEYS,2 >?TMP1
GET FKEYS,0
INTBL? TRM,?TMP1,STACK >TMP \?CCL15
GET TMP,1 >FDEF
ZERO? FDEF /?CCL15
GETB FDEF,1
ZERO? STACK /?CCL15
ADD 1,FDEF
CALL ADD-TO-INPUT,STACK,TRM >TRM
EQUAL? TRM,13,10 /?REP2
JUMP ?PRG1
?CCL15: SOUND S-BEEP
JUMP ?PRG1
?REP2: ICALL1 SCRIPT-INBUF
LEX P-INBUF,P-LEXV
RTRUE
.FUNCT CONVERT-KEYS:ANY:1:1,TRM
EQUAL? TRM,PAD0 \?CCL3
SET 'TRM,F10
RETURN TRM
?CCL3: LESS? TRM,PAD1 /?CND1
GRTR? TRM,PAD9 /?CND1
SUB TRM,PAD1
ADD F1,STACK >TRM
?CND1: RETURN TRM
.FUNCT MOUSE-INPUT:ANY:1:1,TRM
GET 0,27
GET STACK,1 >MOUSE-LOC-X
GET 0,27
GET STACK,2 >MOUSE-LOC-Y
GETP HERE,P?MOUSE
CALL STACK,TRM
RSTACK
.FUNCT ADD-TO-INPUT:ANY:2:2,FDEF,TRM,M,N,TMP,?TMP1
GETB FDEF,0 >M
GETB P-INBUF,1 >N
GETB FDEF,M
EQUAL? STACK,13,10 \?CND1
SET 'TRM,13
DEC 'M
?CND1: ADD N,2
ADD P-INBUF,STACK >TMP
ADD M,N >?TMP1
GETB P-INBUF,0
SUB STACK,1
LESS? ?TMP1,STACK /?CND3
SOUND 1
GETB P-INBUF,0
SUB STACK,N
SUB STACK,2 >M
?CND3: INC 'FDEF
COPYT FDEF,TMP,M
PUTB TMP,M,0
WINATTR -3,A-SCRIPT,O-CLEAR
PRINTT FDEF,M
ADD N,M
PUTB P-INBUF,1,STACK
EQUAL? TRM,13,10 \?CND5
CRLF
?CND5: WINATTR -3,A-SCRIPT,O-SET
RETURN TRM
.FUNCT SCRIPT-INBUF:ANY:0:0,BUF,CNT,N,CHR
GETB P-INBUF,1 >N
DIROUT D-SCREEN-OFF
ADD 1,P-INBUF >BUF
?PRG1: IGRTR? 'CNT,N /?REP2
GETB BUF,CNT >CHR
LESS? CHR,97 /?CCL8
GRTR? CHR,122 /?CCL8
SUB CHR,32
PRINTC STACK
JUMP ?PRG1
?CCL8: PRINTC CHR
JUMP ?PRG1
?REP2: CRLF
DIROUT D-SCREEN-ON
RTRUE
.FUNCT YES?:ANY:0:0,TMP
?PRG1: PRINTI "?
(Y is affirmative): >"
ZERO? DEMO-VERSION? /?CCL5
CALL2 INPUT-DEMO,1
JUMP ?CND3
?CCL5: INPUT 1
?CND3: CALL2 CONVERT-KEYS,STACK >TMP
EQUAL? TMP,13,10 /?CND6
CRLF
?CND6: EQUAL? TMP,89,121,CLICK1 /TRUE
EQUAL? TMP,CLICK2 /TRUE
EQUAL? TMP,78,110 \?PRG1
RFALSE
.FUNCT PRINT-CENTER-TABLE:ANY:0:1,TMAX,L,?TMP1
DIROUT D-TABLE-OFF
GET 0,24 >L
ZERO? TMAX /?CND1
WINGET -3,WYPOS >?TMP1
WINGET -3,WWIDE
SUB STACK,TMAX
DIV STACK,2
ADD STACK,1
CURSET ?TMP1,STACK
ICALL2 XERASE,TMAX
?CND1: WINGET -3,WYPOS >?TMP1
WINGET -3,WWIDE
SUB STACK,L
DIV STACK,2
ADD STACK,1
CURSET ?TMP1,STACK
GET DIROUT-TABLE,0
PRINTT DIROUT-TABLE+2,STACK
RTRUE
.FUNCT XERASE:ANY:1:1,N,X,L,OX,OY,?TMP1
EQUAL? MACHINE,AMIGA \?CCL3
ZERO? SPACE-WIDTH \?CND4
DIROUT D-TABLE-ON,DIROUT-TABLE
PRINTC 32
DIROUT D-TABLE-OFF
GET 0,24 >SPACE-WIDTH
?CND4: EQUAL? N,1 \?CND6
WINGET -3,WWIDE >?TMP1
WINGET -3,WXPOS
SUB ?TMP1,STACK
SUB STACK,1 >N
?CND6: MOD N,SPACE-WIDTH >X
DIV N,SPACE-WIDTH >N
ZERO? X /?CND8
INC 'N
?CND8: GETB SPACE-TABLE,0 >L
WINGET -3,WXPOS >OX
WINGET -3,WYPOS >OY
?PRG10: LESS? N,L \?CCL14
ICALL PRINT-TABLE,SPACE-TABLE,N
CURSET OY,OX
RTRUE
?CCL14: SUB N,L >N
ICALL PRINT-TABLE,SPACE-TABLE,L
JUMP ?PRG10
?CCL3: ERASE N
RTRUE
.FUNCT INVERSE-COLOR:ANY:0:0
EQUAL? MACHINE,AMIGA \?CCL3
HLIGHT H-INVERSE
RTRUE
?CCL3: COLOR BG-COLOR,FG-COLOR
RTRUE
.FUNCT NORMAL-COLOR:ANY:0:0
EQUAL? MACHINE,AMIGA \?CND1
HLIGHT H-NORMAL
?CND1: COLOR FG-COLOR,BG-COLOR
RTRUE
.FUNCT TYPE-ANY-KEY:ANY:0:0,KEY
WINATTR -3,A-SCRIPT,O-CLEAR
PRINTI "[Type any key to continue]"
ZERO? DEMO-VERSION? /?CCL3
CALL2 INPUT-DEMO,1 >KEY
JUMP ?CND1
?CCL3: INPUT 1 >KEY
?CND1: WINATTR -3,A-SCRIPT,O-SET
RETURN KEY
.ENDSEG
.SEGMENT "SOFT-KEYS"
.FUNCT V-DEFINE:ANY:0:0,LINE,LINMAX,CHR,TMP,NLINE,FKEY,FDEF,LEFT,?TMP1
EQUAL? MACHINE,APPLE-2E,APPLE-2C,APPLE-2GS \?CND1
PICINF P-SOFT-KEY-SEG,YX-TBL /?CND1
?CND1: ZERO? DONE-DEFINE? \?CND4
PRINTI "Use the up-arrow and down-arrow keys"
GET 0,8
BTST STACK,32 \?CND6
PRINTI " or mouse"
?CND6: PRINTI " to move to the function key or operation you want. Double-click or carriage-return to perform operations."
CRLF
ICALL1 TYPE-ANY-KEY
ZERO? DONE-DEFINE? \?CND4
CALL1 MAX-SOFT-CMD >DONE-DEFINE?
?CND4: CLEAR -1
MUL 4,LINE
ADD 2,STACK
ADD FKEYS,STACK >FKEY
GET FKEY,1 >FDEF
GETB 0,33 >?TMP1
GETB FDEF,0
SUB ?TMP1,STACK
DIV STACK,2 >LEFT
GET FKEYS,0
DIV STACK,2 >LINMAX
SCREEN SOFT-WINDOW
FONT 4
WINGET SOFT-WINDOW,WFSIZE >TMP
BAND TMP,255 >MONO-X
GETB 0,32
SUB STACK,LINMAX
DIV STACK,2
MUL FONT-Y,STACK >?TMP1
MUL MONO-X,LEFT
WINPOS SOFT-WINDOW,?TMP1,STACK
ADD LINMAX,1
MUL FONT-Y,STACK >?TMP1
ADD FKEY-MAX-LEN,4
MUL MONO-X,STACK
ADD 1,STACK
WINSIZE SOFT-WINDOW,?TMP1,STACK
ICALL2 DISPLAY-SOFTS,LINE
ICALL DISPLAY-SOFT,FKEY,LINE,FALSE-VALUE
?PRG10: ZERO? DEMO-VERSION? /?CCL14
CALL2 INPUT-DEMO,1
JUMP ?CND12
?CCL14: INPUT 1
?CND12: CALL2 CONVERT-KEYS,STACK >CHR
SET 'NLINE,LINE
EQUAL? CHR,CLICK1,CLICK2 \?CND15
CALL2 IN-WINDOW?,SOFT-WINDOW >TMP
ZERO? TMP /?CND15
GRTR? TMP,1 \?CND15
SUB TMP,2 >NLINE
EQUAL? LINE,NLINE /?CND20
MUL 2,NLINE
ADD 2,STACK
GET FKEYS,STACK
ZERO? STACK \?CCL24
SET 'NLINE,LINE
SOUND S-BEEP
JUMP ?CND20
?CCL24: ICALL DISPLAY-SOFT,FKEY,LINE,TRUE-VALUE
MUL 4,NLINE
ADD 2,STACK
ADD FKEYS,STACK
ICALL DISPLAY-SOFT,STACK,NLINE,FALSE-VALUE
SET 'LINE,NLINE
MUL 4,LINE
ADD 2,STACK
ADD FKEYS,STACK >FKEY
GET FKEY,1 >FDEF
?CND20: EQUAL? CHR,CLICK2 \?CND15
GET FKEY,0
LESS? STACK,0 \?CND15
SET 'CHR,13
?CND15: EQUAL? CHR,CLICK1,CLICK2 /?CND29
EQUAL? CHR,13 \?CCL32
GET FKEY,0
LESS? STACK,0 \?CCL32
SET 'NLINE,0
GET FDEF,1
CALL STACK
ZERO? STACK \?REP11
SUB LINMAX,1 >NLINE
ICALL2 DISPLAY-SOFTS,LINE
JUMP ?CND29
?CCL32: EQUAL? CHR,DOWN-ARROW,13 \?CCL39
INC 'NLINE
LESS? NLINE,LINMAX \?CCL42
MUL 2,NLINE
ADD 2,STACK
GET FKEYS,STACK
ZERO? STACK \?CND29
INC 'NLINE
JUMP ?CND29
?CCL42: SET 'NLINE,0
JUMP ?CND29
?CCL39: EQUAL? CHR,UP-ARROW \?CCL46
DLESS? 'NLINE,0 /?CCL49
MUL 2,NLINE
ADD 2,STACK
GET FKEYS,STACK
ZERO? STACK \?CND29
DEC 'NLINE
JUMP ?CND29
?CCL49: SUB LINMAX,1 >NLINE
JUMP ?CND29
?CCL46: ADD FKEYS,2 >?TMP1
GET FKEYS,0
INTBL? CHR,?TMP1,STACK >TMP \?CCL53
SUB TMP,FKEYS
DIV STACK,4 >NLINE
JUMP ?CND29
?CCL53: GET FKEY,0
GRTR? STACK,0 \?CCL55
EQUAL? CHR,8,127 \?CCL58
GETB FDEF,1 >TMP
ZERO? TMP /?CCL61
DEC 'TMP
PUTB FDEF,1,TMP
ADD TMP,2
PUTB FDEF,STACK,32
ADD LINE,1
MUL STACK,FONT-Y
ADD 1,STACK >?TMP1
ADD TMP,4
MUL STACK,MONO-X
ADD 1,STACK
CURSET ?TMP1,STACK
ICALL2 XERASE,1
JUMP ?CND29
?CCL61: SOUND S-BEEP
JUMP ?CND29
?CCL58: LESS? CHR,32 /?CCL63
LESS? CHR,127 \?CCL63
GETB FDEF,1 >TMP
GETB FDEF,0
EQUAL? TMP,STACK \?CCL68
SOUND S-BEEP
JUMP ?CND29
?CCL68: ADD FDEF,2 >?TMP1
GETB FDEF,1
INTBL? 13,?TMP1,STACK,1 >LEFT \?CCL70
SOUND S-BEEP
JUMP ?CND29
?CCL70: EQUAL? CHR,124,33 \?CND71
SET 'CHR,13
?CND71: ADD TMP,1
PUTB FDEF,1,STACK
LESS? CHR,65 /?CND73
GRTR? CHR,90 /?CND73
ADD CHR,32 >CHR
?CND73: ADD TMP,2
PUTB FDEF,STACK,CHR
EQUAL? CHR,13 \?CCL79
PRINTC 124
JUMP ?CND29
?CCL79: PRINTC CHR
JUMP ?CND29
?CCL63: SOUND S-BEEP
JUMP ?CND29
?CCL55: SOUND S-BEEP
?CND29: EQUAL? LINE,NLINE /?PRG10
ICALL DISPLAY-SOFT,FKEY,LINE,TRUE-VALUE
MUL 4,NLINE
ADD 2,STACK
ADD FKEYS,STACK
ICALL DISPLAY-SOFT,STACK,NLINE,FALSE-VALUE
SET 'LINE,NLINE
MUL 4,LINE
ADD 2,STACK
ADD FKEYS,STACK >FKEY
GET FKEY,1 >FDEF
JUMP ?PRG10
?REP11: FONT 1
SCREEN S-TEXT
CLEAR S-TEXT
CALL1 V-$REFRESH
RSTACK
.FUNCT IN-WINDOW?:ANY:1:1,W,X,Y,TOP,LEFT
GET 0,27
GET STACK,2 >Y
GET 0,27
GET STACK,1 >X
WINGET W,WTOP >TOP
LESS? Y,TOP /FALSE
WINGET W,WLEFT >LEFT
LESS? X,LEFT /FALSE
SUB Y,TOP >Y
SUB X,LEFT >X
WINGET W,WHIGH
GRTR? Y,STACK /FALSE
WINGET W,WWIDE
GRTR? X,STACK /FALSE
DIV Y,FONT-Y
ADD 1,STACK >Y
RETURN Y
.FUNCT MAX-SOFT-CMD:ANY:0:0,L,FKEY,CNT,TMAX,FDEF
GET FKEYS,0 >L
DIV L,2 >L
ADD FKEYS,2 >FKEY
?PRG1: LESS? CNT,L /?CTR4
RETURN TMAX
?CTR4: GET FKEY,0
LESS? STACK,0 \?CND6
GET FKEY,1 >FDEF
ZERO? FDEF /?CND6
DIROUT D-TABLE-ON,DIROUT-TABLE
PRINTI " "
GET FDEF,0
PRINT STACK
PRINTI " "
DIROUT D-TABLE-OFF
GET 0,24
GRTR? STACK,TMAX \?CND6
GET 0,24 >TMAX
?CND6: ADD FKEY,4 >FKEY
INC 'CNT
JUMP ?PRG1
.FUNCT DISPLAY-SOFTS:ANY:1:1,LINE,L,F,N,FKEY,CNT
GET FKEYS,0 >L
DIV L,2 >L
SCREEN SOFT-WINDOW
CURSET 1,1
DIROUT D-TABLE-ON,DIROUT-TABLE
FONT 1
PRINTI "Function Keys"
ICALL1 PRINT-CENTER-TABLE
FONT 4
ADD FKEYS,2 >FKEY
?PRG1: LESS? CNT,L \TRUE
EQUAL? CNT,LINE \?CCL8
PUSH FALSE-VALUE
JUMP ?CND6
?CCL8: PUSH TRUE-VALUE
?CND6: ICALL DISPLAY-SOFT,FKEY,CNT,STACK
ADD FKEY,4 >FKEY
INC 'CNT
JUMP ?PRG1
.FUNCT DISPLAY-SOFT:ANY:3:3,FKEY,CNT,INV?,FDEF,S,N,M,TMP,Y,X,?TMP1
GET FKEY,1 >FDEF
ADD CNT,2 >Y
GET FKEY,0
LESS? STACK,0 \?CCL3
GET FKEY,1
ZERO? STACK /?CND1
ICALL CCURSET,Y,1
ZERO? INV? /?CND6
ICALL1 INVERSE-COLOR
?CND6: FONT 1
DIROUT D-TABLE-ON,DIROUT-TABLE
GET FDEF,0
PRINT STACK
ICALL2 PRINT-CENTER-TABLE,DONE-DEFINE?
FONT 4
JUMP ?CND1
?CCL3: GETB FDEF,0 >S
GETB FDEF,1 >N
ICALL CCURSET,Y,1
GET FKEY,0 >?TMP1
GET FNAMES,0
INTBL? ?TMP1,FNAMES+2,STACK >TMP \?CND8
ZERO? INV? /?CCL12
ICALL1 NORMAL-COLOR
JUMP ?CND10
?CCL12: ICALL1 INVERSE-COLOR
?CND10: GET TMP,1
PRINT STACK
ICALL1 NORMAL-COLOR
PRINTC 32
ZERO? INV? /?CCL15
ICALL1 INVERSE-COLOR
JUMP ?CND8
?CCL15: ICALL1 NORMAL-COLOR
?CND8: ADD FDEF,2 >FDEF
ZERO? N /?CND16
SUB N,1 >M
GETB FDEF,M
EQUAL? STACK,13 \?CND16
PRINTT FDEF,M
PRINTC 124
ADD FDEF,N >FDEF
SUB S,N >S
?CND16: PRINTT FDEF,S
ICALL2 XERASE,1
ZERO? INV? \?CND1
SUB Y,1
MUL STACK,FONT-Y
ADD 1,STACK >?TMP1
ADD N,4
MUL STACK,MONO-X
ADD 1,STACK
CURSET ?TMP1,STACK
?CND1: CALL1 NORMAL-COLOR
RSTACK
.FUNCT SOFT-RESET-DEFAULTS:ANY:0:0,K,L,KEYS,DEF,KL,TMP,?TMP1
GET FKEYS,0 >KL
SET 'DEF,DEFAULT-FKEYS
?PRG1: GETB DEF,0 >K
ZERO? K /FALSE
INC 'DEF
GETB DEF,0
ADD 1,STACK >L
ADD FKEYS,2
INTBL? K,STACK,KL >KEYS \?CND5
GET KEYS,1 >KEYS
ADD 1,KEYS >TMP
PUTB TMP,0,32
ADD 1,TMP >?TMP1
GETB KEYS,0
SUB 0,STACK
COPYT TMP,?TMP1,STACK
ADD 1,KEYS
COPYT DEF,STACK,L
?CND5: ADD DEF,L >DEF
JUMP ?PRG1
.FUNCT SOFT-SAVE-DEFS:ANY:0:0
CLEAR S-TEXT
SCREEN S-TEXT
SAVE FKEY-TBL,FKEYS-STRTABLE-LEN,DEFS-NAME
ZERO? STACK \?CND1
PRINTI "Failed."
?CND1: CLEAR S-TEXT
SCREEN SOFT-WINDOW
RFALSE
.FUNCT SOFT-RESTORE-DEFS:ANY:0:0
CLEAR S-TEXT
SCREEN S-TEXT
RESTORE FKEY-TBL,FKEYS-STRTABLE-LEN,DEFS-NAME
ZERO? STACK \?CND1
PRINTI "Failed."
?CND1: CLEAR S-TEXT
SCREEN SOFT-WINDOW
RFALSE
.FUNCT SOFT-EXIT:ANY:0:0
RTRUE
.ENDSEG
.ENDI