A2osX/BIN/CSH.S.KW.txt
2021-05-30 22:34:03 +02:00

271 lines
4.3 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
* Built in Keywords
*--------------------------------------
CSH.KW.JMP txa
>STA.G CSH.CmdSave
jmp (J.CSH.KW,x)
*--------------------------------------
CSH.WHILE
CSH.IF jsr CSH.GetCharNB
bcs .9
cmp #'('
bne .9
jsr CSH.GetNextCharNB
bcs .9
ldy #0 Any var type
lda #0
jsr CSH.ExpEval
bcs .99
jsr CSH.IsValue0 result in X
jsr CSH.GetCharNB
bcs .99
cmp #')'
bne .9
jsr CSH.GetNextCharNB skip ')'
bcs .9
cmp #'{'
bne .9
jsr CSH.GetNextCharNB Skip '{'
bcs .9
txa
beq .6 Value=0, skip {{....}}
>LDA.G CSH.CmdSave
beq .1 IF
pha
>LDA.G CSH.BufPtrSave+1 WHILE : push loop address...
jsr CSH.Push
>LDA.G CSH.BufPtrSave
jsr CSH.Push
pla
.1 jsr CSH.Push
bcs .99
lda #'}' Tell '}' is expected at the end of block
jsr CSH.Push
.99 rts
.6 jsr CSH.SkipBlock
bcc .99
.9 lda #E.CSYN
sec
rts
*--------------------------------------
CSH.IF.END clc
rts
*--------------------------------------
CSH.WHILE.END jsr CSH.Pop
sta ZPInputBufPtr
jsr CSH.Pop
sta ZPInputBufPtr+1
clc
rts
*--------------------------------------
CSH.ELSE
*--------------------------------------
CSH.DO
CSH.FOR
CSH.SWITCH
CSH.CASE
CSH.BREAK
CSH.CONTINUE
CSH.SIZEOF
*--------------------------------------
CSH.TYPEDEF lda #E.CSYN
sec
rts
*--------------------------------------
CSH.STRUCT >ENTER 4
jsr CSH.GetCharNB
bcs .99
>LDA.G CSH.hTags
jsr CSH.NewKey
bcs .99
sta (pStack) Y,A = KeyID
tya
ldy #1
sta (pStack),y
jsr CSH.GetNextCharNB
bcs .99
cmp #'{'
bne .99
.1 jsr CSH.GetNextCharNB
bcs .99
cmp #'}'
bne .1
jsr CSH.GetNextCharNB skip }
clc
.99 >LEAVE
rts
*--------------------------------------
* Type Declaration keywords
*--------------------------------------
CSH.CONST ldy #1
lda (pStack),y
ora #CSH.Q.CONST
sta (pStack),y
jsr CSH.CheckSpace
bcs .9
>LDYA L.CSH.TMODS2
jsr CSH.LookupID
bcs .9
jmp (J.CSH.TMODS2,x)
.9 lda #E.CSYN
sec
rts
*--------------------------------------
CSH.SIGNED sec
.HS 90 BCC
*--------------------------------------
CSH.UNSIGNED clc
php
jsr CSH.CheckSpace
bcs .9
>LDYA L.CSH.TYPES
jsr CSH.LookupID
bcs .9
cpx #CSH.T.UCHAR
bcc .9 void
cpx #CSH.T.SLONG+1 only char int long allowed
bcs .9
plp
bcs .8
jmp (J.CSH.UTYPES-2,x)
.8 jmp (J.CSH.STYPES-2,x)
.9 plp
lda #E.CSYN
sec
rts
*--------------------------------------
CSH.SHORT jsr CSH.CheckSpace
bcs .9
>LDYA L.CSH.TYPES
jsr CSH.LookupID
bcs CSH.UCHAR
cpx #4 only int allowed
beq CSH.SCHAR
.9 lda #E.CSYN
sec
rts
*--------------------------------------
CSH.VOID lda #CSH.T.VOID
bra CSH.TYPE
CSH.CHAR
CSH.UCHAR lda #CSH.T.UCHAR
bra CSH.TYPE
CSH.SCHAR lda #CSH.T.SCHAR
bra CSH.TYPE
CSH.UINT lda #CSH.T.UINT
bra CSH.TYPE
CSH.INT
CSH.SINT lda #CSH.T.SINT
bra CSH.TYPE
CSH.ULONG lda #CSH.T.ULONG
bra CSH.TYPE
CSH.LONG
CSH.SLONG lda #CSH.T.SLONG
bra CSH.TYPE
CSH.FLOAT lda #CSH.T.FLOAT
CSH.TYPE sta (pStack)
jsr CSH.GetCharNB
bcs .9
ldy #1
.1 cmp #'*'
bne .10
lda (pStack),y
clc
adc #CSH.Q.POINTER
bcs .9 more than ***
sta (pStack),y
jsr CSH.GetNextCharNB
bcc .1
.9 lda #E.CSYN
sec
.99 rts
.10 jsr CSH.IsLetter
bcs .8
>LDYA L.CSH.FTYPES
jsr CSH.LookupID
bcs .8 next char is an identifier
sec
ror bFastCall
ldy #1
lda (pStack),y
ora #CSH.Q.FUNC
sta (pStack),y
jsr CSH.GetNextCharNB
bcs .9 next char is an identifier, ",", "(",")"
.8 clc
rts
*--------------------------------------
MAN
SAVE usr/src/bin/csh.s.kw
LOAD usr/src/bin/csh.s
ASM