Kernel 0.9.1 : SHELL, CSH style scripting.....(wip)

This commit is contained in:
Rémy GIBERT 2017-10-23 17:39:19 +02:00
parent a4d5f42fda
commit b028f95781
8 changed files with 278 additions and 206 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -40,31 +40,18 @@ L.MSG.CTRLCHAR .DA MSG.CTRLCHAR
L.ASCII .DA ASCII
.DA 0
*--------------------------------------
CS.INIT ldy #S.PS.ARGC
lda (pPs),y
beq .99
>STA.G ArgCount
.1 >LDA.G ArgCount
dec
bmi .5
sta (pData),y
CS.INIT
.1 >INC.G ArgCount
>SYSCALL GetArg.A
bcs .7
>STYA ZPPtr1
ldy #1
lda (ZPPtr1),y
lda (ZPPtr1)
cmp #'-'
bne .4
lda (ZPPtr1)
cmp #2
bne .4
iny
ldy #1
lda (ZPPtr1),y
ldx OptionList
@ -85,12 +72,10 @@ CS.INIT ldy #S.PS.ARGC
sta (pData),y
bra .1
.4 >LDA.G FileCount
inc
sta (pData),y
.4 >INC.G FileCount
bra .1 scan for any other args
.5 >LDA.G FileCount
.7 >LDA.G FileCount
beq .99
>LDYAI 256
@ -128,16 +113,13 @@ CS.RUN >SYSCALL GetChar
>LDA.G hFILE
bne .2
.1 >LDA.G ArgIndex
inc
sta (pData),y
.1 >INC.G ArgIndex
>SYSCALL GetArg.A
bcs .99 No more arg...the end!
>STYA ZPPtr1
ldy #1
lda (ZPPtr1),y
lda (ZPPtr1)
cmp #'-'
beq .1 An option, skip...

View File

@ -87,7 +87,8 @@ CS.RUN >SYSCALL Sleep
>SYSCALL GetChar
bcs CS.RUN
.11 jsr PRINTA2
.11
* jsr PRINTA2
>SYSCALL Sleep
>SYSCALL GetChar
@ -115,7 +116,7 @@ CS.RUN.LOOP
>SYSCALL GetChar
bcs .4
jsr PRINTA
* jsr PRINTA
cmp #IAC
beq CS.RUN.IACMODE
@ -144,22 +145,22 @@ CS.RUN.IACMODE >SYSCALL Sleep Wait for IAC VERB (or SB)
bcs CS.RUN.IACMODE
>STA.G IAC.VERB
jsr PRINTA
* jsr PRINTA
.1 >SYSCALL Sleep Wait for IAC OPT
>SYSCALL GetChar
bcs .1
>STA.G IAC.OPT
jsr PRINTA
* jsr PRINTA
>LDA.G IAC.VERB
cmp #SB
beq CS.RUN.IACSB
*--------------------------------------
CS.RUN.IACVERB
lda #'.'
>SYSCALL PutChar.A
* lda #'.'
* >SYSCALL PutChar.A
jmp CS.RUN.LOOP
*--------------------------------------
CS.RUN.IACSB
@ -169,7 +170,7 @@ CS.RUN.IACSB
>STA.G IAC.SB
jsr PRINTA
* jsr PRINTA
lda #0
sta (pData) reset IAC.SB.DATA
@ -182,7 +183,7 @@ CS.RUN.IACSB
beq .4 end of DATA, go wait SE
pha
jsr PRINTA
* jsr PRINTA
ldy #IAC.SB.DATA-1
@ -216,8 +217,9 @@ CS.RUN.IACSB
>PUSHW L.ENV.TERM
>SYSCALL SetEnv
.8 lda #':'
>SYSCALL PutChar.A
.8
* lda #':'
* >SYSCALL PutChar.A
jmp CS.RUN.LOOP
*--------------------------------------
CS.DOEVENT lda (pEvent)

View File

@ -69,7 +69,7 @@ CSH.Run lda #0
jsr CSH.Pop was expected, get stacked Cmd...
tax
jmp (J.CSHCMDS.END,x)
jmp (J.CSH.KEYWORDS.END,x)
.1 cmp #$0D
bne .2
@ -87,14 +87,14 @@ CSH.Run lda #0
bra .9 error, todo : PREOPS ++ --.....
.3 >LDYA L.CSHCMDS
.3 >LDYA L.CSH.KEYWORDS
jsr CSH.IsKeyword
bcs .4 not an internal CSH keyword....
txa
>STA.G CSH.CmdSave
jmp (J.CSHCMDS,x)
jmp (J.CSH.KEYWORDS,x)
.4 jsr CSH.GetVar Y=Ptr To Value
bcs .5
@ -113,7 +113,7 @@ CSH.Run lda #0
ply
bcs .9
jsr CSH.SetVarValueAtY
jsr CSH.SetVarValue
bcs .9
cmp #';'
bne .99
@ -126,28 +126,31 @@ CSH.Run lda #0
.5
jsr CSH.RestorePtr Restore ptr to get full cmd line to execute
jsr CSH.GetCharNB
ldy #$0
ldy #0
.6 lda (ZPCSHBufPtr),y
beq .7
.6 cmp #13
cmp #13
beq .7
sta (ZPCMDBuf),y
iny
cpy #CmdLine.MAX
beq .8
bne .6
bra .99 Line Too long !!!
jsr CSH.GetNextChar
bcc .6
bra .8
.7 jsr CSH.GetNextCharNB Skip CR
.7 tya
clc
adc ZPCSHBufPtr
sta ZPCSHBufPtr
bcc .8
inc ZPCSHBufPtr+1
.8 lda #0
sta (ZPCMDBuf),y
tya
>STA.G CmdBuflen
lda #$ff
@ -181,16 +184,12 @@ CSH.Quit >LDA.G CSH.hBuf
.8 rts
*--------------------------------------
CSH.SavePtr phy
>LDYA ZPCSHBufPtr
CSH.SavePtr >LDYA ZPCSHBufPtr
>STYA.G CSH.BufPtrSave
ply
rts
*--------------------------------------
CSH.RestorePtr phy
>LDYA.G CSH.BufPtrSave
CSH.RestorePtr >LDYA.G CSH.BufPtrSave
>STYA ZPCSHBufPtr
ply
rts
*--------------------------------------
CSH.IsKeyword >STYA ZPPtr1
@ -245,6 +244,69 @@ CSH.IsKeyword >STYA ZPPtr1
sec
rts
*--------------------------------------
CSH.CHAR lda #CSH.TYPE.CHAR
bra CSH.TYPE
CSH.INT lda #CSH.TYPE.INT
bra CSH.TYPE
CSH.LONG lda #CSH.TYPE.LONG
bra CSH.TYPE
CSH.FLOAT lda #CSH.TYPE.FLOAT
CSH.TYPE >STA.G CSH.ACCT
jsr CSH.GetChar
bcs .9
cmp #' '
bne .9
jsr CSH.GetNextCharNB
bcs .9
jsr CSH.IsLetter
bcs .9
jsr CSH.GetVar Already exists ?
bcc .90
jsr CSH.AddVar No, add with undefined value...
bcs .99
jsr CSH.GetCharNB
bcs .9
cmp #';'
beq .8 end of declaration, no value...
cmp #'='
bne .9
jsr CSH.GetNextCharNB
bcs .9
phy Save Ptr To Value
jsr CSH.ExpEval
ply
bcs .9
jsr CSH.SetVarValue Update value to this var
jsr CSH.GetChar
bcs .9
cmp #';'
bne .9
.8 jsr CSH.GetNextCharNB Skip ;
clc
rts
.90 lda #CSH.E.DUP
sec
rts
.9 lda #CSH.E.SYNTAX
sec
.99 rts
*--------------------------------------
CSH.WHILE
CSH.IF jsr CSH.GetCharNB
bcs .9
@ -333,78 +395,18 @@ CSH.WHILE.END jsr CSH.Pop
clc
rts
*--------------------------------------
CSH.ELSE
CSH.DO
CSH.FOR
CSH.SWITCH
CSH.CASE
CSH.BREAK
*--------------------------------------
CSH.CONTINUE
lda #CSH.E.SYNTAX
sec
rts
*--------------------------------------
CSH.CHAR lda #CSH.TYPE.CHAR
bra CSH.TYPE
CSH.INT lda #CSH.TYPE.INT
bra CSH.TYPE
CSH.LONG lda #CSH.TYPE.LONG
bra CSH.TYPE
CSH.FLOAT lda #CSH.TYPE.FLOAT
CSH.TYPE >STA.G CSH.ACCT
jsr CSH.GetChar
bcs .9
cmp #' '
bne .9
jsr CSH.GetNextCharNB
bcs .9
jsr CSH.IsLetter
bcs .9
jsr CSH.GetVar Already exists ?
bcc .90
jsr CSH.AddVar No, add with undefined value...
bcs .99
* Y=Ptr in DATA to Value
jsr CSH.GetCharNB
bcs .9
cmp #';'
beq .8 end of declaration, no value...
cmp #'='
bne .9
jsr CSH.GetNextCharNB
bcs .9
phy Save Ptr To Value
jsr CSH.ExpEval
ply
bcs .9
jsr CSH.SetVarValueAtY Update value to this var
jsr CSH.GetChar
bcs .9
cmp #';'
bne .9
.8 jsr CSH.GetNextCharNB Skip ;
clc
rts
.90 lda #CSH.E.DUP
sec
rts
.9 lda #CSH.E.SYNTAX
sec
.99 rts
*--------------------------------------
CSH.ExpEval jsr CSH.ZeroACC
jsr CSH.GetCharNB
@ -449,7 +451,7 @@ CSH.GetNumInACC >LDA.G CSH.ACCT
>PUSHWI ZPCSHBufPtr
>PUSHW ZPCSHBufPtr
>PUSHEA.G CSH.ACC
>DEBUG
>SYSCALL StrToL
rts
*--------------------------------------
@ -467,13 +469,14 @@ CSH.ZeroACC lda #0
* Vars...
*--------------------------------------
CSH.AddVar jsr CSH.GetIdentLen
sec
>ADC.G CSH.SymbolsPtr
>ADC.G CSH.SymbolsPtr Enough room to store this symbol ?
bcs .99
adc #1 OFS
bcs .99
adc #1 Add One Byte for storing Ptr to DATA
bcs .99 Out of Symbols space
>LDA.G CSH.DataPtr
pha
@ -482,58 +485,44 @@ CSH.AddVar jsr CSH.GetIdentLen
tax
sec +1 for Type
adc CSH.TSIZE,x
bcs .98 Out of memory
bcs .98 Out of Data Space
>LDA.G CSH.SymbolsPtr
tay
pha
jsr CSH.GetIdentLen
ply
sta (ZPCSHSymbols),y
iny
jsr CSH.GetChar
.1 sta (ZPCSHSymbols),y
.1 sta (ZPCSHSymbols),y Store this symbol....
iny
jsr CSH.GetNextChar
jsr CSH.IsLetterOrDigit
bcc .1
pla Get Back Data OFS
pla Get Back Data Ptr
pha
sta (ZPCSHSymbols),y
iny
tya
>STA.G CSH.SymbolsPtr
>STA.G CSH.SymbolsPtr Mark new end of Symbols
>LEA.G CSH.ACCT
>STYA ZPPtr1 ACCT/ACC in ZPPtr1
ply Get Back Data OFS again
phy
lda (ZPPtr1)
sta (ZPCSHSymbols),y Add Type to Data
iny
tax
lda CSH.TSIZE,x A = byte count to store
tax
.2 inc ZPPtr1
bne .3
inc ZPPtr1+1
.3 lda (ZPPtr1)
sta (ZPCSHData),y
iny
dex
bne .2
tya
>STA.G CSH.DataPtr
ply Exit with Y=Data Offset
pla Get again Data Ptr
clc
adc ZPCSHData
sta ZPCSHValue
lda #0
adc ZPCSHData+1
sta ZPCSHValue+1
* clc
rts
.98 pla
@ -541,8 +530,19 @@ CSH.AddVar jsr CSH.GetIdentLen
sec
rts
*--------------------------------------
CSH.SetVarValueAtY
CSH.SetVarValue >LDA.G CSH.ACCT
tax
lda CSH.TSIZE,x
tax
>LDA.G CSH.ACCT
tay
.1 lda (pData),y
sta (ZPCSHValue),y
iny
dex
bpl .1 +1 for ACCT
clc
rts
*--------------------------------------
@ -550,8 +550,8 @@ CSH.GetVar >LDYA ZPCSHSymbols
>STYA ZPPtr1
jsr CSH.GetIdentLen
phy
pha
.1 lda (ZPPtr1)
beq .9
@ -570,16 +570,36 @@ CSH.GetVar >LDYA ZPCSHSymbols
tya
bne .2
lda (ZPPtr1)
inc
tay
lda (ZPPtr1),y Get Ptr to DATA
clc
adc ZPCSHData
sta ZPCSHValue
lda #0
adc ZPCSHData+1
sta ZPCSHValue+1
pla
jsr CSH.VarSkipName
clc
adc ZPCSHBufPtr
sta ZPCSHBufPtr
bcc .8
inc ZPCSHBufPtr+1
clc
.8 rts
.3 jsr CSH.VarSkipName
.3 lda (ZPPtr1)
sec
adc ZPPtr1
sta ZPPtr1
bcc .4
inc ZPPtr1+1
.5 inc ZPPtr1 Skip Pointer to TYPE/DATA
.4 inc ZPPtr1 Skip Pointer to TYPE/DATA
bne .1
inc ZPPtr1+1
bra .1
@ -588,14 +608,6 @@ CSH.GetVar >LDYA ZPCSHSymbols
sec
rts
*--------------------------------------
CSH.VarSkipName lda (ZPPtr1)
sec
adc ZPPtr1
sta ZPPtr1
bcc .8
inc ZPPtr1+1
.8 rts
*--------------------------------------
* Stack
*--------------------------------------
CSH.Push pha
@ -658,7 +670,9 @@ CSH.GetIdentLen ldy #0
jsr CSH.IsLetterOrDigit
bcc .1
.8 rts
.8 tya
rts
*--------------------------------------
CSH.GetCharNB jsr CSH.GetChar
bcs CSH.GetNextCharNB.RTS
@ -737,7 +751,7 @@ CSH.ErrorMsg >LDA.G CSH.hBuf
>STA.G CSH.LineNum
iny
>STA.G CSH.LineNum+1
.1 >LDYA ZPPtr1
>STYA ZPPtr2 Save actual line start
@ -775,12 +789,14 @@ CSH.ErrorMsg >LDA.G CSH.hBuf
lda #$0A
>SYSCALL PutChar.A
lda ZPCSHBufPtr
sec
sbc ZPPtr2
beq .8
tay
.7 phy
lda #'-'
>SYSCALL PutChar.A

View File

@ -12,13 +12,13 @@ AUTO 6
.INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/MLI.ERR.I
*--------------------------------------
ZPPTR1 .EQ ZPBIN
ZPPTR2 .EQ ZPBIN+2
ZPPtr1 .EQ ZPBIN
ZPPtr2 .EQ ZPBIN+2
ZPCMDBuf .EQ ZPBIN+4
*ZPCSHBufBase .EQ ZPBIN+6
ZPCSHBufPtr .EQ ZPBIN+8
ZPCSHSymbols .EQ ZPBIN+10
ZPCSHData .EQ ZPBIN+12
ZPCSHBufPtr .EQ ZPBIN+6
ZPCSHSymbols .EQ ZPBIN+8
ZPCSHData .EQ ZPBIN+10
ZPCSHValue .EQ ZPBIN+12
ZPCSHStack .EQ ZPBIN+14
*--------------------------------------
CmdLine.MAX .EQ 255
@ -83,16 +83,22 @@ J.INTCMDS .DA Cmd.Exec.CD
.DA Cmd.Exec.SLEEP
.DA Cmd.Exec.STARTPROC
.DA Cmd.Exec.TIME
L.CSHCMDS .DA CSHCMDS
J.CSHCMDS .DA CSH.IF
.DA CSH.WHILE
.DA CSH.BREAK
.DA CSH.CONTINUE
.DA CSH.CHAR
L.CSH.KEYWORDS .DA CSH.KEYWORDS
J.CSH.KEYWORDS .DA CSH.CHAR
.DA CSH.INT
.DA CSH.LONG
.DA CSH.FLOAT
J.CSHCMDS.END .DA CSH.IF.END
.DA CSH.IF
.DA CSH.WHILE
.DA CSH.ELSE
.DA CSH.DO
.DA CSH.FOR
.DA CSH.SWITCH
.DA CSH.CASE
.DA CSH.BREAK
.DA CSH.CONTINUE
J.CSH.KEYWORDS.END
.DA CSH.IF.END
.DA CSH.WHILE.END
L.ERR.Codes .DA ERR.Codes
L.ERR.Messages .DA ERR.Messages
@ -470,16 +476,81 @@ INTCMDS >CSTR "CD"
>CSTR "STARTPROC"
>CSTR "TIME"
.HS 00
CSHCMDS >PSTR "IF"
>PSTR "WHILE"
>PSTR "BREAK"
>PSTR "CONTINUE"
>PSTR "CHAR"
>PSTR "INT"
>PSTR "LONG"
>PSTR "FLOAT"
*--------------------------------------
* Pre Operators: + - ! ~ ++ --
*--------------------------------------
CSH.PREOOPS >PSTR "+"
>PSTR "-"
>PSTR "!"
>PSTR "~"
*--------------------------------------
* Post Operators: ++ --
*--------------------------------------
CSH.POSTOPS >PSTR "++"
>PSTR "--"
.HS 00
*-- Binary ---- H to L prececence -----
* Arithmetic Operators: * / %
* Arithmetic Operators: + -
* Shift Operators: << >>
* Relational Operators: < > >= < >= == !=
* Bitwise Operators: & | ^ ~
* Logical Operators: && ||
*--------------------------------------
CSH.BOPS >PSTR "+"
>PSTR "-"
>PSTR "*"
>PSTR "/"
>PSTR "%"
>PSTR "<<"
>PSTR ">>"
>PSTR "<"
>PSTR ">"
>PSTR ">="
>PSTR "<"
>PSTR ">="
>PSTR "=="
>PSTR "!="
>PSTR "&"
>PSTR "|"
>PSTR "^"
>PSTR "~"
>PSTR "&&"
>PSTR "||"
.HS 00
*--------------------------------------
* Assignment Operators: = += -= *= /= %= <<= >>= &= ^= |=
*--------------------------------------
CSH.AOPS >PSTR "="
>PSTR "+="
>PSTR "-="
>PSTR "*="
>PSTR "/="
>PSTR "%="
>PSTR "<<="
>PSTR ">>="
>PSTR "&="
>PSTR "^="
>PSTR "!="
.HS 00
*--------------------------------------
* Reserved Keywords:
*--------------------------------------
CSH.KEYWORDS >PSTR "char"
>PSTR "int"
>PSTR "long"
>PSTR "float"
>PSTR "if"
>PSTR "while"
>PSTR "else"
>PSTR "do"
>PSTR "for"
>PSTR "switch"
>PSTR "case"
.HS 00
*--------------------------------------
CSH.OPChars >PSTR "!~+-*/%=&|^&<>"
*--------------------------------------
MSG.GREETINGS >CSTR "\r\nA2osX-Shell 0.9.1\r\n\r\n"
MSG.PROMPT >CSTR "$ "
MSG.ECHO >CSTR ">%s\r\n"

View File

@ -62,9 +62,9 @@ K.StrToL sec Signed
K.StrToUL clc Unsigned
jsr PullPtr1Ptr2Ptr3
>PULLA Base
jsr K.AToL.I
bcs K.StrToUL.rts
* clc
K.StrToUL.Exit adc ZPPtr2
@ -91,6 +91,7 @@ K.AToL jsr PullPtr1Ptr2 C-String in Ptr2, Dst buffer in Ptr1
K.AToL.I jsr STDLIB.Dec2Hex
bcs .9
phy Save Count processed
ldy #3
.3 lda STDLIB.32,y
@ -161,10 +162,10 @@ STDLIB.32.T10 ldx #3
dex
bpl .1
jsr STDLIB.32.ROL STDLIB.32 * 2 -> STDLIB.32
jsr STDLIB.32.ROL STDLIB.32 * 2 -> STDLIB.32
bcs .9 overflow!!!
jsr STDLIB.32.ROL STDLIB.32 * 4 -> STDLIB.32
jsr STDLIB.32.ROL STDLIB.32 * 4 -> STDLIB.32
bcs .9 overflow!!!
ldx #0
@ -181,8 +182,8 @@ STDLIB.32.T10 ldx #3
bcs .99 overflow!!!
jsr STDLIB.32.ROL STDLIB.32 * 10 -> STDLIB.32
bcs .99 overflow!!!
jsr STDLIB.32.ROL STDLIB.32 * 10 -> STDLIB.32
rts if CS, overflow!!!
.9 pla discard saved STDLIB.32
pla