mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-19 12:31:56 +00:00
320 lines
6.0 KiB
Plaintext
320 lines
6.0 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
.LIST OFF
|
||
*--------------------------------------
|
||
EXP.GET jsr CORE.ArgV.Next
|
||
bne .1
|
||
>LDYA ZPArgVBufPrev no op, return text value
|
||
clc
|
||
rts
|
||
|
||
.1 >LDYA ZPArgVBufPrev
|
||
jsr EXP.GetInt32YA To Int32 on stack
|
||
bcs .9
|
||
|
||
.2 >LDYA L.EXP.OP.MATH + - .... ?
|
||
jsr CORE.LookupArgVBuf
|
||
bcs .94
|
||
|
||
stx CORE.Operator
|
||
jsr CORE.ArgV.Next get next argument
|
||
beq .94
|
||
|
||
jsr EXP.GetInt32Arg To Int32 on stack
|
||
bcs .94
|
||
|
||
jsr EXP.FPU.EXEC
|
||
jsr CORE.ArgV.Next another op ?
|
||
bne .2
|
||
|
||
>PULLL M32.ACC Value on stack
|
||
|
||
>PUSHEA.G M32.BUF
|
||
>PUSHW L.FMT.Long
|
||
>PUSHL M32.ACC
|
||
>PUSHBI 4
|
||
>SYSCALL SPrintF
|
||
bcs .9
|
||
|
||
>LEA.G M32.BUF
|
||
rts
|
||
|
||
.94 jsr IncPStack4
|
||
.9 jmp EXP.E.ESYN
|
||
|
||
EXP.FPU.EXEC ldy CORE.Operator
|
||
ldx EXP.OP.MATH.FPU,y
|
||
|
||
jmp A2osX.FPUCALL
|
||
*--------------------------------------
|
||
EXP.TEST lda (ZPArgVBufPtr)
|
||
beq .9
|
||
|
||
lda #$80
|
||
sta CORE.LogicOp No Op
|
||
.10 >LDYA L.EXP.BEGIN
|
||
jsr CORE.LookupArgVBuf
|
||
|
||
bcs .9
|
||
|
||
dex 0=[ or 1=![ , $ff or 0
|
||
txa
|
||
asl in C
|
||
php
|
||
lda CORE.TestResult get parent
|
||
asl discard true/false
|
||
plp get new
|
||
ror set ctx and parent
|
||
sta CORE.TestResult
|
||
jsr CORE.ArgV.Next
|
||
beq .9
|
||
|
||
>LDYA L.EXP.OP.UNARY -d -e -f -n -z ?
|
||
jsr CORE.LookupArgVBuf
|
||
|
||
bcs .1
|
||
|
||
stx CORE.Operator
|
||
|
||
jsr EXP.TEST.UNARY
|
||
bcs .9
|
||
eor CORE.TestResult
|
||
sta CORE.TestResult
|
||
lda (ZPArgVBufPtr)
|
||
bra .8 go check ]
|
||
|
||
.9 jmp EXP.E.ESYN
|
||
|
||
.1 jsr CORE.ArgV.Next
|
||
beq .9
|
||
>LDYA L.EXP.OP.BINARY -eq -ne .... ?
|
||
jsr CORE.LookupArgVBuf
|
||
bcs .9
|
||
stx CORE.Operator
|
||
jsr EXP.TEST.BINARY
|
||
bcs .9
|
||
|
||
eor CORE.TestResult
|
||
sta CORE.TestResult
|
||
|
||
jsr CORE.ArgV.Next
|
||
beq .9
|
||
|
||
.8 cmp #']'
|
||
bne .9
|
||
|
||
ldy #1
|
||
lda (ZPArgVBufPtr),y
|
||
bne .9
|
||
|
||
jsr CORE.ArgV.Next
|
||
beq .80
|
||
|
||
>LDYA L.EXP.OP.LOGIC
|
||
jsr CORE.LookupArgVBuf
|
||
bcs .9
|
||
|
||
stx CORE.LogicOp 0 = AND, 1 = OR
|
||
txa
|
||
beq .84
|
||
|
||
lda CORE.TestResult OR : prev test is true, exit
|
||
bmi .88
|
||
|
||
bra .85
|
||
|
||
.84 lda CORE.TestResult AND : prev test is false, exit
|
||
bpl .88
|
||
|
||
.85 lda CORE.TestResult
|
||
sta CORE.PrevTestResult
|
||
jsr CORE.ArgV.Next
|
||
beq .9
|
||
|
||
jmp .10
|
||
|
||
.80 lda CORE.LogicOp
|
||
bne .88 NONE, or OR : exit with last result
|
||
|
||
lda CORE.PrevTestResult AND : stop if false
|
||
and CORE.TestResult
|
||
sta CORE.TestResult
|
||
|
||
.88 clc
|
||
rts
|
||
*--------------------------------------
|
||
EXP.TEST.UNARY jsr CORE.ArgV.Next
|
||
beq EXP.OP.UNARY.ESYN we need one arg or ]
|
||
|
||
lda CORE.Operator
|
||
asl
|
||
tax
|
||
jmp (J.EXP.OP.UNARY,x)
|
||
|
||
EXP.OP.UNARY.ESYN
|
||
jmp EXP.E.ESYN
|
||
|
||
EXP.OP.UNARY.D jsr IO.StatArgVBufPtr
|
||
bcs EXP.OP.UNARY.DEF.9
|
||
|
||
cmp #S.FI.T.DIR
|
||
bne EXP.OP.UNARY.DEF.9
|
||
bra EXP.OP.UNARY.DEF.8
|
||
|
||
EXP.OP.UNARY.E jsr IO.StatArgVBufPtr
|
||
bcs EXP.OP.UNARY.DEF.9
|
||
bra EXP.OP.UNARY.DEF.8 DIR or FILE exist
|
||
|
||
EXP.OP.UNARY.F jsr IO.StatArgVBufPtr
|
||
bcs EXP.OP.UNARY.DEF.9
|
||
|
||
cmp #S.FI.T.DIR
|
||
beq EXP.OP.UNARY.DEF.9
|
||
|
||
EXP.OP.UNARY.DEF.8
|
||
sec true
|
||
.HS 90 BCC
|
||
EXP.OP.UNARY.DEF.9
|
||
clc false
|
||
|
||
jsr CORE.ArgV.Next
|
||
|
||
lda #0
|
||
ror
|
||
|
||
* clc
|
||
EXP.OP.UNARY.DEF.RTS
|
||
rts
|
||
*--------------------------------------
|
||
EXP.OP.UNARY.I jsr EXP.GetInt32Arg
|
||
bcs EXP.OP.UNARY.DEF.9
|
||
|
||
jsr IncPStack4 Discard Long
|
||
|
||
bra EXP.OP.UNARY.DEF.8
|
||
*--------------------------------------
|
||
EXP.OP.UNARY.N jsr EXP.OP.UNARY.Z
|
||
bcs EXP.OP.UNARY.DEF.RTS
|
||
eor #$80
|
||
* clc
|
||
rts
|
||
|
||
EXP.OP.UNARY.Z lda (ZPArgVBufPtr) [ -Z ] ?
|
||
cmp #']'
|
||
bne .1
|
||
lda #$80 TRUE
|
||
clc
|
||
rts
|
||
|
||
.1 jsr CORE.ArgV.Next
|
||
beq EXP.TEST.BINARY.ESYN
|
||
|
||
eor #']'
|
||
bne EXP.TEST.BINARY.ESYN
|
||
|
||
clc FALSE
|
||
rts
|
||
*--------------------------------------
|
||
EXP.OP.UNARY.X jsr CMD.CALL.GETFUNC
|
||
bcs EXP.OP.UNARY.DEF.9 FALSE
|
||
bra EXP.OP.UNARY.DEF.8 TRUE
|
||
*--------------------------------------
|
||
EXP.TEST.BINARY lda CORE.Operator
|
||
cmp #6 =, !=, <= <, >=, >
|
||
bcs EXP.TEST.BINARY.NUM
|
||
>LDYA ZPArgVBufPrev
|
||
>STYA ZPPtr1
|
||
jsr CORE.ArgV.Next
|
||
beq EXP.TEST.BINARY.ESYN
|
||
|
||
>PUSHW ZPPtr1
|
||
>LDYA ZPArgVBufPtr
|
||
>SYSCALL StrCmp
|
||
bcs .1 CS if !=
|
||
|
||
lda #%010 010 str1 = str2
|
||
bra EXP.TEST.BINARY.END
|
||
|
||
.1 asl CS if <
|
||
bcs .2
|
||
|
||
lda #%100 010 str1 < str2
|
||
bra EXP.TEST.BINARY.END
|
||
|
||
.2 lda #%001 010 str1 > str2
|
||
bra EXP.TEST.BINARY.END
|
||
|
||
EXP.TEST.BINARY.ESYN4
|
||
jsr IncPStack4
|
||
EXP.TEST.BINARY.ESYN
|
||
jmp EXP.E.ESYN
|
||
*--------------------------------------
|
||
EXP.TEST.BINARY.NUM
|
||
>LDYA ZPArgVBufPrev
|
||
jsr EXP.GetInt32YA
|
||
bcs EXP.TEST.BINARY.ESYN
|
||
|
||
jsr CORE.ArgV.Next
|
||
beq EXP.TEST.BINARY.ESYN4
|
||
|
||
jsr EXP.GetInt32Arg
|
||
bcs EXP.TEST.BINARY.ESYN4
|
||
|
||
>FPU CMP32
|
||
tax
|
||
bmi .4 ACC < ARG
|
||
|
||
bne .5
|
||
lda #%010 010 ACC = ARG
|
||
bra EXP.TEST.BINARY.END
|
||
.4 lda #%100 100 ACC > ARG
|
||
bra EXP.TEST.BINARY.END
|
||
.5 lda #%001 001 ACC < ARG
|
||
|
||
EXP.TEST.BINARY.END
|
||
clc
|
||
ldx CORE.Operator
|
||
and EXP.OP.BINARY.BITS,x
|
||
beq .8 false
|
||
|
||
lda #$80 true
|
||
|
||
.8 rts
|
||
*--------------------------------------
|
||
EXP.GetInt8Exp jsr EXP.GET
|
||
bcc EXP.GetInt8YA
|
||
rts
|
||
|
||
EXP.GetInt8Arg >LDYA ZPArgVBufPtr
|
||
|
||
EXP.GetInt8YA jsr EXP.GetInt32YA
|
||
bcs .9
|
||
|
||
>PULLA
|
||
|
||
jsr IncPStack3
|
||
* clc
|
||
|
||
.9 rts
|
||
*--------------------------------------
|
||
EXP.GetInt32Arg >LDYA ZPArgVBufPtr
|
||
|
||
EXP.GetInt32YA >PUSHYA
|
||
>PUSHWI ZPPtr1
|
||
>PUSHBI 10
|
||
>SYSCALL StrToL
|
||
bcs EXP.E.ESYN
|
||
|
||
lda (ZPPtr1)
|
||
beq EXP.GetInt32YA.RTS
|
||
|
||
EXP.E.ESYN lda #E.ESYN
|
||
sec
|
||
EXP.GetInt32YA.RTS
|
||
rts
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE usr/src/bin/sh.s.exp
|
||
LOAD usr/src/bin/sh.s
|
||
ASM
|