A2osX/SBIN/SHELL.S.txt

522 lines
9.7 KiB
Plaintext
Raw Normal View History

2017-12-22 21:24:30 +00:00
NEW
PREFIX /A2OSX.BUILD
2017-12-22 21:24:30 +00:00
AUTO 4,1
2015-10-19 20:35:00 +00:00
.LIST OFF
2015-03-14 21:48:35 +00:00
.OP 65C02
.OR $2000
2018-07-23 15:28:42 +00:00
.TF SBIN/SHELL
2018-11-10 14:30:09 +00:00
*--------------------------------------
CSH .EQ 0
2015-03-14 21:48:35 +00:00
*--------------------------------------
2018-07-23 15:28:42 +00:00
.INB INC/MACROS.I
.INB INC/A2OSX.I
2018-10-15 06:25:40 +00:00
.INB INC/MLI.I
2018-10-02 15:52:30 +00:00
.INB INC/MLI.E.I
2015-03-14 21:48:35 +00:00
*--------------------------------------
ZPPtr1 .EQ ZPBIN
ZPPtr2 .EQ ZPBIN+2
2018-10-15 06:25:40 +00:00
ZPPtr3 .EQ ZPBIN+4
2018-10-19 15:26:21 +00:00
ZPCMDBuf .EQ ZPBIN+6
ZPArgVBuf .EQ ZPBIN+8
2018-11-10 14:30:09 +00:00
ZPFileBufPtr .EQ ZPBIN+10
.DO CSH=1
2018-09-17 06:16:45 +00:00
ZPCSHSymbols .EQ ZPBIN+12
ZPCSHData .EQ ZPBIN+14
ZPCSHValue .EQ ZPBIN+16
ZPCSHStack .EQ ZPBIN+18
2018-11-10 14:30:09 +00:00
.FIN
2015-03-14 21:48:35 +00:00
*--------------------------------------
2018-10-19 15:26:21 +00:00
CmdLine.MAX .EQ 127
VarLen.MAX .EQ 15
History.MAX .EQ 256
2018-11-09 15:59:04 +00:00
CMD.IF.STACK.MAX .EQ 4
2015-03-14 21:48:35 +00:00
*--------------------------------------
2015-06-03 18:30:57 +00:00
* File Header (16 Bytes)
2015-03-14 21:48:35 +00:00
*--------------------------------------
CS.START cld
jmp (.1,x)
2015-06-03 18:30:57 +00:00
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
2018-09-17 06:16:45 +00:00
.DA #S.PS.F.EVENT S.PS.F
.DA #0
.DA CS.END-CS.START CS
.DA DS.END-DS.START DS
.DA #64 SS
2018-11-10 17:43:20 +00:00
.DO CSH=1
2018-09-17 06:16:45 +00:00
.DA #20 ZP
2018-11-10 17:43:20 +00:00
.ELSE
.DA #12 ZP
2015-06-03 18:30:57 +00:00
.DA 0
*--------------------------------------
* Relocation Table
2015-10-19 20:35:00 +00:00
*--------------------------------------
2015-03-14 21:48:35 +00:00
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
*--------------------------------------
L.MSG.GREETINGS .DA MSG.GREETINGS
L.MSG.PROMPT .DA MSG.PROMPT
2018-11-10 14:30:09 +00:00
L.MSG.TRACE .DA MSG.TRACE
2018-09-09 08:11:42 +00:00
L.MSG.ECHOCRLF .DA MSG.ECHOCRLF
2018-11-10 14:30:09 +00:00
L.MSG.BATCHERR .DA MSG.BATCHERR
L.MSG.ERROR .DA MSG.ERROR
L.MSG.PRINTENV .DA MSG.PRINTENV
2015-10-19 20:35:00 +00:00
L.ENV.PATH .DA ENV.PATH
L.ENV.PWD .DA ENV.PWD
L.ENV.PS1 .DA ENV.PS1
L.ENV.HOME .DA ENV.HOME
L.FMT.DATE .DA FMT.DATE
L.FMT.TIME .DA FMT.TIME
J.ESC .DA CL.BS left arrow
.DA HIS.GetNext
.DA HIS.GetPrev
.DA CL.NAK right arow
2018-11-10 14:30:09 +00:00
L.CL.IO .DA CL.IO
J.CL.IO .DA CL.IO.AMP
.DA CL.IO.PIPE
.DA CL.IO.IN
.DA CL.IO.OUTA
.DA CL.IO.OUT
.DA CL.IO.1OUTA
.DA CL.IO.1OUT
.DA CL.IO.2OUTA
.DA CL.IO.2OUT
2018-09-17 06:16:45 +00:00
L.CMD.INT .DA CMD.INT
2018-10-21 20:54:07 +00:00
J.CMD.INT .DA Cmd.INT.STARTPROC
.DA Cmd.INT.CD
2018-10-15 06:25:40 +00:00
.DA Cmd.INT.DATE
.DA Cmd.INT.ECHO
2018-11-09 15:59:04 +00:00
.DA Cmd.INT.ELSE
2018-10-15 06:25:40 +00:00
.DA Cmd.INT.EXIT
2018-11-09 15:59:04 +00:00
.DA Cmd.INT.FI
2018-10-15 06:25:40 +00:00
.DA Cmd.INT.IF
2018-11-10 14:30:09 +00:00
.DA Cmd.INT.MD
2018-10-15 06:25:40 +00:00
.DA Cmd.INT.PAUSE
.DA Cmd.INT.PWD
2018-11-10 14:30:09 +00:00
.DA Cmd.INT.RD
2018-10-15 06:25:40 +00:00
.DA Cmd.INT.READ
.DA Cmd.INT.SET
.DA Cmd.INT.SLEEP
.DA Cmd.INT.TIME
2018-11-09 15:59:04 +00:00
L.CMD.IF.TOKEN1 .DA CMD.IF.TOKEN1
L.CMD.IF.TOKEN2 .DA CMD.IF.TOKEN2
J.CMD.IF.TOKEN2 .DA CMD.IF.D
.DA CMD.IF.E
.DA CMD.IF.F
L.CMD.IF.TOKEN3 .DA CMD.IF.TOKEN3
L.ERR.Codes .DA ERR.Codes
L.ERR.Messages .DA ERR.Messages
2018-11-10 14:30:09 +00:00
.DO CSH=1
.INB /A2OSX.SRC/SBIN/SHELL.R.CSH
.FIN
2015-03-14 21:48:35 +00:00
.DA 0
*--------------------------------------
2018-11-10 14:30:09 +00:00
CS.INIT clc
CS.INIT.RTS rts
*--------------------------------------
CS.RUN jsr SetPWD
jsr CMD.Init
2018-11-10 14:30:09 +00:00
bcs CS.INIT.RTS
2018-11-10 14:30:09 +00:00
lda #1
>SYSCALL ArgV
bcs .1 no arg, continue starting interactive
>SYSCALL LoadTxtFile
bcs CS.INIT.RTS
txa
>STA.G hFileBuf
>SYSCALL GetMemPtr
>STYA ZPFileBufPtr
2018-11-10 17:43:20 +00:00
lda #CMD.IF.PTR
tay
sta (pData),y
2018-11-10 14:30:09 +00:00
.DO CSH=1
jsr CSH.Init
.FIN
bra CS.RUN.LOOP
2018-10-17 15:31:29 +00:00
.1 jsr HIS.Init
2018-11-10 14:30:09 +00:00
bcs CS.INIT.RTS
2018-08-25 11:23:59 +00:00
>PUSHWI K.VER
2018-08-22 15:23:27 +00:00
>PUSHBI 2
>LDYA L.MSG.GREETINGS
2018-06-21 15:12:10 +00:00
>SYSCALL printf
2018-11-10 14:30:09 +00:00
bcs CS.INIT.RTS
2015-03-14 21:48:35 +00:00
*--------------------------------------
2018-11-10 14:30:09 +00:00
CS.RUN.LOOP jsr CL.Reset
jsr IO.Reset
2018-11-10 14:30:09 +00:00
>LDA.G bReadMode READ Command ?
bne .7
2018-11-10 14:30:09 +00:00
>LDA.G bPause
bpl .4
2018-08-08 15:13:37 +00:00
2018-11-10 14:30:09 +00:00
.2 >SLEEP
>SYSCALL GetChar
bcc .3
tay
beq .2 no char
rts
.3 cmp #3 Ctrl-C
beq .9
bra .6
>STZ.G bPause
2018-11-10 14:30:09 +00:00
.4 jsr CheckSleep
bne .2
2018-11-10 14:30:09 +00:00
.6 >LDA.G hFileBuf batch mode ?
beq CS.RUN.INTERCATIVE
jmp CS.RUN.BATCH
2018-11-10 14:30:09 +00:00
.7 jmp CS.RUN.READ
2018-11-07 16:11:02 +00:00
2018-11-10 14:30:09 +00:00
.9 sec
rts
*--------------------------------------
CS.RUN.INTERCATIVE
2018-10-24 15:36:45 +00:00
>STZ.G bSecureRead Clear password mode
2018-09-17 06:16:45 +00:00
2018-09-25 06:25:32 +00:00
jsr CL.PrintPrompt
bcs .9
.1 >SLEEP
>SYSCALL GetChar
2018-11-10 14:30:09 +00:00
bcc .21
2018-07-18 15:30:42 +00:00
2018-09-19 15:25:42 +00:00
tay
2018-11-10 14:30:09 +00:00
beq .1 no char
2018-10-24 15:36:45 +00:00
2018-11-10 14:30:09 +00:00
rts I/O error
2018-09-19 15:25:42 +00:00
.21 cmp #C.EOF
beq .9
2018-07-19 15:33:55 +00:00
jsr CL.CHARIN
2017-01-12 17:43:45 +00:00
2018-11-10 14:30:09 +00:00
>LDA.G CL.bExec Something to execute ?
2015-06-24 20:41:38 +00:00
bpl .1
2018-10-29 08:41:10 +00:00
lda (ZPCMDBuf)
2018-11-10 14:30:09 +00:00
beq CS.RUN.LOOP Empty line
2018-10-29 08:41:10 +00:00
2018-10-23 15:36:57 +00:00
jsr HIS.Add
2018-11-10 14:30:09 +00:00
jmp CS.RUN.Exec
.9 rts
*--------------------------------------
2018-11-10 14:30:09 +00:00
CS.RUN.READ
.1 >SLEEP
>SYSCALL GetChar
bcs .1 no char
jsr CL.CHARIN
2018-11-10 14:30:09 +00:00
>LDA.G CL.bExec
bpl .1
2018-09-17 06:16:45 +00:00
>STZ.G bReadMode
lda (ZPCMDBuf)
beq .8
>PUSHW ZPCMDBuf
2018-09-06 15:36:44 +00:00
>LEA.G CMD.VarName
>SYSCALL SetEnv
2018-09-17 06:16:45 +00:00
2018-11-10 14:30:09 +00:00
.8 jmp CS.RUN.LOOP.END
*--------------------------------------
CS.RUN.BATCH >SYSCALL GetChar
bcs .2
cmp #3 test Ctrl-c
bne .1
2018-11-10 14:30:09 +00:00
* sec
rts
.1 cmp #19 test Ctrl-s
bne .2
lda #$80
>STA.G bPause
clc
rts
2018-11-10 14:30:09 +00:00
.2 .DO CSH=1
jsr CSH.Run
.ELSE
jsr CL.GetLine
.FIN
bcc .7
2018-11-10 14:30:09 +00:00
cmp #C.EOF
bne .3
2018-11-10 14:30:09 +00:00
lda #$ff
>STA.G bExit
inc
clc
bra CS.RUN.LOOP.END
2018-11-10 14:30:09 +00:00
.3 sec
bra CS.RUN.LOOP.END
2018-11-10 14:30:09 +00:00
.7 >LDA.G CL.bExec
bpl CS.RUN.LOOP.80
2018-10-29 08:41:10 +00:00
lda (ZPCMDBuf)
2018-11-10 14:30:09 +00:00
beq CS.RUN.LOOP.80
2018-10-29 08:41:10 +00:00
2018-11-10 14:30:09 +00:00
jsr CL.Trace
*--------------------------------------
CS.RUN.Exec jsr CL.Parse
2018-11-11 22:05:04 +00:00
bcs CS.RUN.LOOP.END
2018-10-23 15:36:57 +00:00
2018-10-21 20:54:07 +00:00
lda (ZPArgVBuf)
2018-11-10 14:30:09 +00:00
beq CS.RUN.LOOP.8
2018-09-17 06:16:45 +00:00
jsr CMD.Exec
2018-11-10 14:30:09 +00:00
>SLEEP if S.PS.HOLD
*--------------------------------------
CS.RUN.LOOP.END ldy #S.PS.RC
sta (pPs),y
bcc CS.RUN.LOOP.8
2018-11-10 14:30:09 +00:00
>LDA.G hFileBuf batch mode ?
beq .1
2018-11-10 14:30:09 +00:00
jsr IO.PrintBatchErrMsg
bcs CS.RUN.LOOP.RTS
.1 ldy #S.PS.RC
lda (pPs),y
2018-11-10 14:30:09 +00:00
jsr IO.PrintErrMsg
bcs CS.RUN.LOOP.RTS
CS.RUN.LOOP.8 >LDA.G bExit
beq CS.RUN.LOOP.80
lda #0
sec
2018-11-10 14:30:09 +00:00
CS.RUN.LOOP.RTS rts
CS.RUN.LOOP.80 jmp CS.RUN.LOOP
2015-03-14 21:48:35 +00:00
*--------------------------------------
CS.DOEVENT lda (pEvent)
bpl .9
jsr CheckSleep
beq .9
* ldy #Sleep already set by CheckSleep
clc
.1 lda (pData),y
sbc #0
sta (pData),y
iny
2018-11-10 14:30:09 +00:00
cpy #Sleep+4
bne .1
.9 sec
2015-12-13 21:29:51 +00:00
rts
2017-01-12 17:43:45 +00:00
*--------------------------------------
2018-11-10 14:30:09 +00:00
CS.QUIT .DO CSH=1
jsr CSH.Quit
2018-11-10 14:30:09 +00:00
.FIN
jsr HIS.Quit
jsr CMD.Quit
clc
2015-03-14 21:48:35 +00:00
rts
*--------------------------------------
CheckSleep ldy #Sleep+3
lda (pData),y
dey
ora (pData),y
dey
ora (pData),y
dey
ora (pData),y
rts
2015-03-14 21:48:35 +00:00
*--------------------------------------
SetPWD ldy #S.PS.hPREFIX
lda (pPs),y
2018-11-08 14:23:06 +00:00
SetPWD.I >SYSCALL GetMemPtr
>PUSHYA
2018-09-06 15:36:44 +00:00
>LDYA L.ENV.PWD
>SYSCALL SetEnv
rts
2018-11-10 14:30:09 +00:00
*--------------------------------------
Lookup >STYA ZPPtr2
>PULLW ZPPtr1
ldx #0
.1 phx
>PUSHW ZPPtr2
>LDYA ZPPtr1
>SYSCALL StrCaseCmp
bcs .2
plx
>LDYA ZPPtr2
clc
rts
.2 inc ZPPtr2
bne .3
inc ZPPtr2+1
.3 lda (ZPPtr2)
bne .2
inc ZPPtr2
bne .4
inc ZPPtr2+1
.4 plx
inx
inx
lda (ZPPtr2) Array Ending 0, must be an external Cmd....
bne .1
sec
rts
*--------------------------------------
.INB /A2OSX.SRC/SBIN/SHELL.S.CL
.INB /A2OSX.SRC/SBIN/SHELL.S.CMD
.INB /A2OSX.SRC/SBIN/SHELL.S.IO
.INB /A2OSX.SRC/SBIN/SHELL.S.HIS
2018-11-10 14:30:09 +00:00
.DO CSH=1
.INB /A2OSX.SRC/SBIN/SHELL.S.CSH
.FIN
2015-03-14 21:48:35 +00:00
*--------------------------------------
CS.END
*--------------------------------------
2018-09-17 06:16:45 +00:00
MSG.GREETINGS .AZ "\r\nA2osX-Shell %d.%d\r\n\r\n"
MSG.PROMPT .AZ "\e[7h$ "
2018-11-10 14:30:09 +00:00
MSG.TRACE .AS ">%s"
2018-09-17 06:16:45 +00:00
MSG.ECHOCRLF .AZ "\r\n"
2018-11-10 14:30:09 +00:00
MSG.BATCHERR .AZ "^\r\nLine #%D:"
2018-09-17 06:16:45 +00:00
MSG.ERROR .AZ "[$%h]:%S.\r\n"
MSG.PRINTENV .AZ "%s=%s\r\n"
FMT.DATE .AZ "%A (%w), %B %d %Y"
FMT.TIME .AZ "%H:%M:%S (%I:%M:%S%p)"
*--------------------------------------
ENV.PATH .AZ "PATH"
ENV.PWD .AZ "PWD"
ENV.PS1 .AZ "PS1"
ENV.HOME .AZ "HOME"
*--------------------------------------
2018-09-14 14:29:47 +00:00
* https://www.tldp.org/LDP/abs/html/io-redirection.html
*--------------------------------------
2018-11-10 14:30:09 +00:00
CL.IO .AZ "&"
.AZ "|"
.AZ "<"
.AZ ">>"
.AZ ">"
.AZ "1>>"
.AZ "1>"
.AZ "2>>"
.AZ "2>"
.HS 00
*--------------------------------------
2018-10-21 20:54:07 +00:00
CMD.INT .AZ "STARTPROC"
.AZ "CD"
.AZ "DATE"
.AZ "ECHO"
2018-11-09 15:59:04 +00:00
.AZ "ELSE"
.AZ "EXIT"
2018-11-09 15:59:04 +00:00
.AZ "FI"
2018-09-17 06:16:45 +00:00
.AZ "IF"
2018-11-10 14:30:09 +00:00
.AZ "MD"
.AZ "PAUSE"
.AZ "PWD"
2018-11-10 14:30:09 +00:00
.AZ "RD"
.AZ "READ"
.AZ "SET"
.AZ "SLEEP"
.AZ "TIME"
2015-10-19 20:35:00 +00:00
.HS 00
*--------------------------------------
2018-11-09 15:59:04 +00:00
CMD.IF.TOKEN1 .AZ "["
.AZ "!["
.HS 00
CMD.IF.TOKEN2 .AZ "-d"
.AZ "-e"
.AZ "-f"
.HS 00
CMD.IF.TOKEN3 .AZ "-eq"
.AZ "-ne"
.HS 00
*--------------------------------------
2018-11-10 14:30:09 +00:00
.DO CSH=1
.INB /A2OSX.SRC/SBIN/SHELL.C.CSH
2018-11-10 14:30:09 +00:00
.FIN
.INB /A2OSX.SRC/X.ERRORS.S
*--------------------------------------
EscChars .AS 'DBAC'
2018-09-14 13:08:30 +00:00
EscChars.Cnt .EQ *-EscChars
2015-03-14 21:48:35 +00:00
*--------------------------------------
2015-06-03 18:30:57 +00:00
.DUMMY
.OR 0
2015-03-14 21:48:35 +00:00
DS.START
2018-11-10 14:30:09 +00:00
hFileBuf .BS 1
2015-12-13 21:29:51 +00:00
bEscMode .BS 1
bPause .BS 1
bExit .BS 1
2018-10-16 15:48:03 +00:00
bSET.X .BS 1
bECHO.N .BS 1
bReadMode .BS 1
bSecureRead .BS 1
Sleep .BS 4
2018-11-10 14:30:09 +00:00
CL.Ptr .BS 1
CL.Len .BS 1
CL.bExec .BS 1
2018-10-29 08:41:10 +00:00
CMD.IntCmd .BS 1
CMD.hCmdLine .BS 1
2018-10-29 08:41:10 +00:00
CMD.hCmdBuf .BS 1
2018-10-19 15:26:21 +00:00
CMD.hArgVBuf .BS 1
2018-10-15 06:25:40 +00:00
CMD.PSFlags .BS 1
2018-09-17 06:16:45 +00:00
CMD.VarName.LEN .BS 1
CMD.VarName .BS VarLen.MAX+1
CMD.Stat .BS S.STAT
CMD.Time .BS S.TIME
2018-11-09 15:59:04 +00:00
CMD.IF.PTR .BS 1
CMD.IF.STACK .BS CMD.IF.STACK.MAX
HIS.hBuf .BS 1
HIS.Count .BS 1
HIS.Index .BS 1
IO.hIn .BS 1
IO.hOut .BS 1
IO.hErr .BS 1
2018-11-10 14:30:09 +00:00
.DO CSH=1
.INB /A2OSX.SRC/SBIN/SHELL.G.CSH
2018-11-10 14:30:09 +00:00
.FIN
DS.END .ED
2015-03-14 21:48:35 +00:00
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SBIN/SHELL.S
2015-03-14 21:48:35 +00:00
ASM