Kernel 0.9.2

This commit is contained in:
Rémy GIBERT 2018-11-10 15:30:09 +01:00
parent 580e7b625b
commit 51c45b2074
15 changed files with 869 additions and 720 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

67
BIN/MKDIR.S.txt Normal file
View File

@ -0,0 +1,67 @@
NEW
PREFIX /A2OSX.BUILD
AUTO 4,1
.LIST OFF
.OP 65C02
.OR $2000
.TF BIN/MKDIR
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START CS
.DA DS.END-DS.START DS
.DA #16 SS
.DA #0 ZP
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
.DA 0
*--------------------------------------
CS.INIT clc
rts
*--------------------------------------
CS.RUN lda #1
>SYSCALL ArgV
bcs .99
>SYSCALL MKDir
bcs .9
lda #0
sec
.9 rts
.99 lda #E.SYN
sec
rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT clc
rts
*--------------------------------------
CS.END
*--------------------------------------
.DUMMY
.OR 0
DS.START
DS.END
.ED
*--------------------------------------
MAN
SAVE /A2OSX.SRC/BIN/MKDIR.S
ASM

View File

@ -93,10 +93,14 @@ E.FTB .EQ $CC File Too Big Error
*-------------------------------------- *--------------------------------------
* A2osX.SYSCALL Constants * A2osX.SYSCALL Constants
*-------------------------------------- *--------------------------------------
C.ETX .EQ 3 Ctrl-C
C.EOF .EQ 4 Ctrl-D C.EOF .EQ 4 Ctrl-D
C.ENQ .EQ 5 C.ENQ .EQ 5
C.BEL .EQ 7 Ctrl.G
C.BS .EQ 8 C.BS .EQ 8
C.TAB .EQ 9
C.LF .EQ 10 C.LF .EQ 10
C.VT .EQ 11
C.FF .EQ 12 C.FF .EQ 12
C.CR .EQ 13 C.CR .EQ 13
C.FS .EQ 21 C.FS .EQ 21

View File

@ -258,6 +258,8 @@ OApple+1,OApple+2,OApple+3 to switch between screens : Kernel Log, text, DHGR.
| Name | Status | Comment | | Name | Status | Comment |
| ---- | ------ | ------- | | ---- | ------ | ------- |
| CD | Working | Improved syntax : now, 'CD ../BIN' works | | CD | Working | Improved syntax : now, 'CD ../BIN' works |
| MD | Working | Create a directory |
| RD | Working | Delete an empty directory |
| PWD | Working | | | PWD | Working | |
| DATE | Working | | | DATE | Working | |
| ECHO | Working | \b,\e,\f,\n,\\\ and \\% supported | | ECHO | Working | \b,\e,\f,\n,\\\ and \\% supported |
@ -324,7 +326,7 @@ note : '$VAR' does NOT expand Variable
| LSDEV | Working | Dump device Drivers | 0.92 | | LSDEV | Working | Dump device Drivers | 0.92 |
| LSOF | Working | List Open Files | 0.92 | | LSOF | Working | List Open Files | 0.92 |
| PS | Working | List Processes| 0.92 | | PS | Working | List Processes| 0.92 |
| MD | Working | Make Directory| 0.92 | | MKDIR | Working | Make Directory| 0.92 |
| LS | Working | -A : Do Not Print . & .. | 0.92 | | LS | Working | -A : Do Not Print . & .. | 0.92 |
| | | -L : long listing with size/date... | | | | | -L : long listing with size/date... | |
| | | -R : Recurse subdirectories | | | | | -R : Recurse subdirectories | |

View File

@ -3,11 +3,8 @@ PREFIX /A2OSX.BUILD
AUTO 4,1 AUTO 4,1
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
CSH.hBuf .BS 1
CSH.BufPtrSave .BS 2 CSH.BufPtrSave .BS 2
CSH.LineNum .BS 2
CSH.hSymbols .BS 1 CSH.hSymbols .BS 1
CSH.SymbolsPtr .BS 1 CSH.SymbolsPtr .BS 1

54
SBIN/SHELL.R.CSH.txt Normal file
View File

@ -0,0 +1,54 @@
NEW
PREFIX /A2OSX.BUILD
AUTO 4,1
.LIST OFF
*--------------------------------------
L.CSH.BOPS .DA CSH.BOPS
J.CSH.BOPS .DA CSH.BOPS.ADD
.DA CSH.BOPS.SUB
.DA CSH.BOPS.MUL
.DA CSH.BOPS.DIV
.DA CSH.BOPS.MOD
.DA CSH.BOPS.SHL
.DA CSH.BOPS.SHR
.DA CSH.BOPS.L
.DA CSH.BOPS.G
.DA CSH.BOPS.LE
.DA CSH.BOPS.GE
.DA CSH.BOPS.EQ
.DA CSH.BOPS.NE
.DA CSH.BOPS.AND
.DA CSH.BOPS.OR
.DA CSH.BOPS.EOR
.DA CSH.BOPS.LAND
.DA CSH.BOPS.LOR
L.CSH.FN .DA CSH.FN
L.CSH.KW .DA CSH.KW
L.CSH.STYPES .DA CSH.STYPES
J.CSH.KW .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
.DA CSH.FLOAT
.DA CSH.SIGNED
.DA CSH.UNSIGNED
J.CSH.STYPES .DA CSH.CHAR
.DA CSH.INT
.DA CSH.LONG
J.CSH.UTYPES .DA CSH.UCHAR
.DA CSH.UINT
.DA CSH.ULONG
J.CSH.KW.START .DA CSH.IF.START
.DA CSH.WHILE.START
J.CSH.KW.END .DA CSH.IF.END
.DA CSH.WHILE.END
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SBIN/SHELL.R.CSH
LOAD /A2OSX.SRC/SBIN/SHELL.S
ASM

View File

@ -68,15 +68,15 @@ CL.CHARIN.CTRL cpx #C.CR
>LDYA L.MSG.ECHOCRLF >LDYA L.MSG.ECHOCRLF
>SYSCALL printf >SYSCALL printf
>LDA.G CmdBufPtr >LDA.G CL.Ptr
tay tay
lda #0 lda #0
sta (ZPCMDBuf),y sta (ZPCMDBuf),y
tya tya
>STA.G CmdBuflen >STA.G CL.Len
lda #$ff lda #$ff
>STA.G bCmdBufexec >STA.G CL.bExec
clc clc
rts rts
@ -101,7 +101,7 @@ CL.CHARIN.CTRL cpx #C.CR
.13 clc .13 clc
rts rts
*-------------------------------------- *--------------------------------------
CL.Insert >LDA.G CmdBuflen CL.Insert >LDA.G CL.Len
cmp #CmdLine.MAX cmp #CmdLine.MAX
beq .9 Buffer full, discard... beq .9 Buffer full, discard...
@ -118,12 +118,12 @@ CL.Insert >LDA.G CmdBuflen
dey dey
phy phy
tya tya
>CMP.G CmdBufPtr >CMP.G CL.Ptr
bne .1 bne .1
ply Y=CmdBufPtr ply Y=CL.Ptr
* >LDA.G CmdBufPtr * >LDA.G CL.Ptr
txa txa
sta (ZPCMDBuf),y sta (ZPCMDBuf),y
@ -135,7 +135,7 @@ CL.Insert >LDA.G CmdBuflen
.2 txa .2 txa
>SYSCALL PutChar >SYSCALL PutChar
>INC.G CmdBufPtr >INC.G CL.Ptr
jmp CL.PrintEOL jmp CL.PrintEOL
@ -154,16 +154,16 @@ CL.CLR ldy #0
lda (ZPCMDBuf),y lda (ZPCMDBuf),y
bne .2 bne .2
jsr CL.PRINT jsr CL.PrintCmdBuf
*-------------------------------------- *--------------------------------------
CL.RESET lda #0 CL.RESET lda #0
sta (ZPCMDBuf) sta (ZPCMDBuf)
>STA.G bCmdBufexec >STA.G CL.bExec
>STA.G CmdBufPtr >STA.G CL.Ptr
>STA.G CmdBuflen >STA.G CL.Len
rts rts
*-------------------------------------- *--------------------------------------
CL.BS >LDA.G CmdBufPtr CL.BS >LDA.G CL.Ptr
beq .9 beq .9
dec dec
@ -173,12 +173,12 @@ CL.BS >LDA.G CmdBufPtr
>SYSCALL PutChar >SYSCALL PutChar
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CL.NAK >LDA.G CmdBufPtr CL.NAK >LDA.G CL.Ptr
>CMP.G CmdBuflen >CMP.G CL.Len
beq .9 beq .9
inc inc
>STA.G CmdBufPtr >STA.G CL.Ptr
lda #C.FS lda #C.FS
>SYSCALL PutChar >SYSCALL PutChar
@ -186,24 +186,24 @@ CL.NAK >LDA.G CmdBufPtr
*-------------------------------------- *--------------------------------------
* Erase char UNDER cursor * Erase char UNDER cursor
*-------------------------------------- *--------------------------------------
CL.SUPPR >LDA.G CmdBuflen CL.SUPPR >LDA.G CL.Len
beq CL.PrintEOL.8 beq CL.PrintEOL.8
>LDA.G CmdBufPtr >LDA.G CL.Ptr
bra CL.DEL.1 bra CL.DEL.1
*-------------------------------------- *--------------------------------------
* Erase char BEFORE cursor * Erase char BEFORE cursor
*-------------------------------------- *--------------------------------------
CL.DEL >LDA.G CmdBuflen CL.DEL >LDA.G CL.Len
beq CL.PrintEOL.8 beq CL.PrintEOL.8
>LDA.G CmdBufPtr >LDA.G CL.Ptr
beq CL.PrintEOL.8 beq CL.PrintEOL.8
lda #C.BS lda #C.BS
>SYSCALL PutChar >SYSCALL PutChar
>DEC.G CmdBufPtr >DEC.G CL.Ptr
CL.DEL.1 pha CL.DEL.1 pha
@ -216,16 +216,16 @@ CL.DEL.1 pha
phy phy
tya tya
>CMP.G CmdBufLen >CMP.G CL.Len
bne .1 bne .1
pla pla
>DEC.G CmdBuflen >DEC.G CL.Len
*-------------------------------------- *--------------------------------------
CL.PrintEOL >LDA.G CmdBufPtr CL.PrintEOL >LDA.G CL.Ptr
.1 >CMP.G CmdBuflen .1 >CMP.G CL.Len
beq .2 beq .2
pha pha
@ -239,9 +239,9 @@ CL.PrintEOL >LDA.G CmdBufPtr
.2 lda #' ' .2 lda #' '
>SYSCALL PutChar >SYSCALL PutChar
>LDA.G CmdBufPtr >LDA.G CL.Ptr
.3 >CMP.G CmdBuflen .3 >CMP.G CL.Len
beq .4 beq .4
pha pha
@ -258,10 +258,380 @@ CL.PrintEOL >LDA.G CmdBufPtr
CL.PrintEOL.8 clc CL.PrintEOL.8 clc
rts rts
*-------------------------------------- *--------------------------------------
CL.PRINT >LDYA ZPCMDBuf CL.PrintCmdBuf >LDYA ZPCMDBuf
>SYSCALL printf >SYSCALL printf
rts rts
*-------------------------------------- *--------------------------------------
CL.GetLine lda (ZPFileBufPtr)
beq .9
ldy #0
.1 lda (ZPFileBufPtr),y
beq .7
cmp #C.CR
beq .6
sta (ZPCMDBuf),y
iny
cpy #CmdLine.MAX
bne .1
lda #E.SYN Line Too long !!!
* sec
rts
.6 sec skip CR
.HS 90 BCC
.7 clc
tya
adc ZPFileBufPtr
sta ZPFileBufPtr
bcc .8
inc ZPFileBufPtr+1
.8 lda #0
sta (ZPCMDBuf),y
tya
>STA.G CL.Len
lda #$ff
>STA.G CL.bExec
clc
rts
.9 lda #C.EOF
sec
rts
*--------------------------------------
CL.Trace >LDA.G bSET.X
beq .8
>PUSHW ZPCMDBuf
>PUSHBI 2
>LDYA L.MSG.TRACE
>SYSCALL printf
.8 clc
rts
*--------------------------------------
* in:
* ZPCMDBuf : CString command line
* out:
* ZPArgVBuf :
* /path/excmd\0 arg1\0 arg2\0 ... \0
* - or -
* intcmd\0 arg1\0 arg2\0 ... \0
*--------------------------------------
CL.Parse >STZ.G CMD.IntCmd
lda #S.PS.F.HOLD+S.PS.F.DUPENV
>STA.G CMD.PSFlags
>PUSHW ZPCMDBuf
>LDYA ZPCMDBuf
>SYSCALL Args2ArgV
lda #0
sta (ZPArgVBuf)
lda (ZPCMDBuf)
beq .8
.1 cmp #'#' comment ?
beq .8 yes, ignore remaining
>LDA.G CMD.IntCmd
bne .6 we already have Cmd, go check args
ldy #2
lda (ZPCMDBuf),y only one char ?
bne .2
dey
lda (ZPCMDBuf),y
cmp #'.' leading dot ?
bne .2
>LDA.G CMD.PSFlags yes, child process will run in same ENV
and #$ff^S.PS.F.DUPENV
sta (pData),y
bra .7 and skip this token
.2 jsr CL.CheckCmd
bcc .7 success, skip token, already added by CheckCmd
rts
.6 jsr CL.CheckIO
bcc .7
tay
bne .9
jsr CL.AddCmdBufTokenToArgV
bcs .9
.7 jsr CL.NextCmdBufToken
lda (ZPCMDBuf)
bne .1
.8 clc
.9 rts
*--------------------------------------
* ZPCMDBuf-> argv[] (formatted & not empty)
*--------------------------------------
CL.CheckCmd ldy #$ff
.1 iny
lda (ZPCMDBuf),y
beq .2
cmp #'/'
bne .1
>LDYA ZPCMDBuf found /, some path specified, External, no search
>SYSCALL realpath
bcs .9
txa
>STA.G CMD.hCmdLine
bra .6 go check type...
.2 >PUSHW ZPCMDBuf
>LDYA L.CMD.INT
jsr Lookup no / found, search internal...
bcs .4 not internal, search PATH
phx
plx
bne .3
>LDA.G CMD.PSFlags if STARTPROC, skip keyword...
and #$ff^S.PS.F.HOLD
sta (pData),y ...and toggle S.PS.F.HOLD flag
clc
.9 rts
.3 jsr CL.AddYAToArgV X unmodified
bcs .9
txa
>STA.G CMD.IntCmd
clc
rts
.4 >LDYAI 256 Get a buffer for found path
>SYSCALL GetMem
bcs .9
txa
>STA.G CMD.hCmdLine
>LDYA L.ENV.PATH push ENVNAME=PATH for search
>SYSCALL GetEnv get value for ENV=PATH
bcs .5 no PATH, try workdir
jsr CL.SearchExt
bcc .6 found in PATH, go check Type
.5 ldy #S.PS.hPREFIX not found, try in CD
lda (pPs),y
>SYSCALL GetMemPtr
jsr CL.SearchExt
bcs CL.CheckCmd.90
.6 >PUSHEA.G CMD.Stat
>LDA.G CMD.hCmdLine
>SYSCALL GetMemPtr
>SYSCALL STAT
bcs CL.CheckCmd.90
lda #$ff
>STA.G CMD.IntCmd
ldy #CMD.Stat+S.STAT.P.TYPE
lda (pData),y
cmp #S.FI.T.TXT
beq CL.CheckCmd.TXT
cmp #S.FI.T.BIN
beq CL.CheckCmd.BIN
cmp #S.FI.T.SYS
beq CL.CheckCmd.SYS
lda #E.SYN
sec
CL.CheckCmd.90 php
pha
>LDA.G CMD.hCmdLine
>SYSCALL FreeMem
pla
plp
CL.CheckCmd.RTS
rts
*--------------------------------------
* TXT : add "/PATH/SHELL" "/PATH/CMD"
*--------------------------------------
CL.CheckCmd.TXT lda #0
>SYSCALL ArgV
jsr CL.AddYAToArgV
bcs CL.CheckCmd.90
*--------------------------------------
* BIN : add "/PATH/CMD"
*--------------------------------------
CL.CheckCmd.BIN >LDA.G CMD.hCmdLine
>SYSCALL GetMemPtr
jsr CL.AddYAToArgV
bra CL.CheckCmd.90
*--------------------------------------
CL.CheckCmd.SYS bra *
*--------------------------------------
CL.SearchExt pha
phy
>PUSHEA.G CMD.Stat
>LDA.G CMD.hCmdLine
>SYSCALL GetMemPtr
>PUSHYA push dest full path
ply
pla
>PUSHYA push search list
>LDYA ZPCMDBuf push CMD
>SYSCALL FileSearch
rts
*--------------------------------------
CL.CheckIO >PUSHW ZPCMDBuf
>LDYA L.CL.IO
jsr Lookup
bcs .9 not a IO token...should be an arg....
phx
jsr CL.NextCmdBufToken skip this IO token
plx
jmp (J.CL.IO,x)
.9 lda #0
rts
*--------------------------------------
CL.IO.AMP >LDA.G CMD.PSFlags
and #$ff^S.PS.F.HOLD
sta (pData),y
clc
rts
CL.IO.PIPE
clc
rts
CL.IO.IN lda #O.RDONLY+O.TEXT
jsr CL.IO.Open
bcs .9
jsr IO.Set.In
jsr CL.NextCmdBufToken skip arg
clc
.9 rts
CL.IO.OUTA
CL.IO.1OUTA lda #O.WRONLY+O.APPEND+O.CREATE+O.TEXT
bra CL.IO.OUT.1
CL.IO.OUT
CL.IO.1OUT lda #O.WRONLY+O.TRUNC+O.CREATE+O.TEXT
CL.IO.OUT.1 jsr CL.IO.Open
bcs .9
jsr IO.Set.Out
jsr CL.NextCmdBufToken skip arg
clc
.9 rts
CL.IO.2OUTA lda #O.WRONLY+O.APPEND+O.CREATE+O.TEXT
bra CL.IO.2OUT.1
CL.IO.2OUT lda #O.WRONLY+O.TRUNC+O.CREATE+O.TEXT
CL.IO.2OUT.1 jsr CL.IO.Open
bcs .9
jsr IO.Set.Err
jsr CL.NextCmdBufToken skip arg
clc
.9 rts
*--------------------------------------
CL.IO.Open pha
lda (ZPCMDBuf)
beq .9 no arg left....
>PUSHWI 0 Aux type
>PUSHBI S.FI.T.TXT ftype
pla
>PUSHA flags
>LDYA ZPCMDBuf
>SYSCALL fopen
rts
.9 pla
lda #E.SYN
sec
rts
*--------------------------------------
CL.NextCmdBufToken
lda (ZPCMDBuf)
inc ZPCMDBuf
bne .1
inc ZPCMDBuf+1
.1 tax
bne CL.NextCmdBufToken
rts
*--------------------------------------
CL.AddCmdBufTokenToArgV
>LDYA ZPCmdBuf
CL.AddYAToArgV >STYA ZPPtr1
>LDYA ZPArgVBuf
>STYA ZPPtr2
.1 lda (ZPPtr2) scan to end of argV
beq .6
.2 inc ZPPtr2
bne .3
inc ZPPtr2+1
.3 lda (ZPPtr2)
bne .2
inc ZPPtr2
bne .4
inc ZPPtr2+1
.4 lda (ZPPtr2)
bne .2
.6 ldy #$ff
.7 iny
* beq .9
lda (ZPPtr1),y
sta (ZPPtr2),y
bne .7 including str ending \0
iny
* beq .9
sta (ZPPtr2),y arg[] ending \0
clc
rts
.9 lda #E.BUF
sec
rts
*--------------------------------------
MAN MAN
SAVE /A2OSX.SRC/SBIN/SHELL.S.CL SAVE /A2OSX.SRC/SBIN/SHELL.S.CL
LOAD /A2OSX.SRC/SBIN/SHELL.S LOAD /A2OSX.SRC/SBIN/SHELL.S

View File

@ -28,274 +28,6 @@ CMD.Quit >LDA.G CMD.hArgVBuf
>SYSCALL FreeMem >SYSCALL FreeMem
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
* in:
* ZPCMDBuf : CString command line
* out:
* ZPArgVBuf :
* /path/excmd\0 arg1\0 arg2\0 ... \0
* - or -
* intcmd\0 arg1\0 arg2\0 ... \0
*--------------------------------------
Cmd.Parse >STZ.G CMD.IntCmd
lda #S.PS.F.HOLD+S.PS.F.DUPENV
>STA.G CMD.PSFlags
>PUSHW ZPCMDBuf
>LDYA ZPCMDBuf
>SYSCALL Args2ArgV
lda #0
sta (ZPArgVBuf)
lda (ZPCMDBuf)
beq .8
.1 cmp #'#' comment ?
beq .8 yes, ignore remaining
>LDA.G CMD.IntCmd
bne .6 we already have Cmd, go check args
ldy #2
lda (ZPCMDBuf),y only one char ?
bne .2
dey
lda (ZPCMDBuf),y
cmp #'.' leading dot ?
bne .2
>lda.G CMD.PSFlags yes, child process will run in same ENV
and #S.PS.F.DUPENV
sta (pData),y
bra .7 and skip this token
.2 jsr CMD.CheckCmd
bcc .7 success, skip token, already added by CheckCmd
rts
.6 jsr CMD.CheckIO
bcc .7
tay
bne .9
jsr CMD.AddCmdBufTokenToArgV
bcs .9
.7 jsr CMD.NextCmdBufToken
lda (ZPCMDBuf)
bne .1
.8 clc
.9 rts
*--------------------------------------
* ZPCMDBuf-> argv[] (formatted & not empty)
*--------------------------------------
Cmd.CheckCmd ldy #$ff
.1 iny
lda (ZPCMDBuf),y
beq .2
cmp #'/'
bne .1
>LDYA ZPCMDBuf found /, some path specified, External, no search
>SYSCALL realpath
bcs .9
txa
>STA.G CMD.hCmdLine
bra .6 go check type...
.2 >PUSHW ZPCMDBuf
>LDYA L.CMD.INT
jsr CMD.Search no / found, search internal...
bcs .4 not internal, search PATH
phx
plx
bne .3
>LDA.G CMD.PSFlags if STARTPROC, skip keyword...
and #$ff^S.PS.F.HOLD
sta (pData),y ...and toggle S.PS.F.HOLD flag
clc
.9 rts
.3 jsr CMD.AddYAToArgV X unmodified
bcs .9
txa
>STA.G CMD.IntCmd
clc
rts
.4 >LDYAI 256 Get a buffer for found path
>SYSCALL GetMem
bcs .9
txa
>STA.G CMD.hCmdLine
>LDYA L.ENV.PATH push ENVNAME=PATH for search
>SYSCALL GetEnv get value for ENV=PATH
bcs .5 no PATH, try workdir
jsr Cmd.SearchExt
bcc .6 found in PATH, go check Type
.5 ldy #S.PS.hPREFIX not found, try in CD
lda (pPs),y
>SYSCALL GetMemPtr
jsr Cmd.SearchExt
bcs Cmd.CheckCmd.90
.6 >PUSHEA.G CMD.Stat
>LDA.G CMD.hCmdLine
>SYSCALL GetMemPtr
>SYSCALL STAT
bcs Cmd.CheckCmd.90
lda #$ff
>STA.G CMD.IntCmd
ldy #CMD.Stat+S.STAT.P.TYPE
lda (pData),y
cmp #S.FI.T.TXT
beq Cmd.CheckCmd.TXT
cmp #S.FI.T.BIN
beq Cmd.CheckCmd.BIN
cmp #S.FI.T.SYS
beq Cmd.CheckCmd.SYS
lda #E.SYN
sec
Cmd.CheckCmd.90 php
pha
>LDA.G CMD.hCmdLine
>SYSCALL FreeMem
pla
plp
Cmd.CheckCmd.RTS
rts
*--------------------------------------
* TXT : add "/PATH/SHELL" "/PATH/CMD"
*--------------------------------------
Cmd.CheckCmd.TXT
lda #0
>SYSCALL ArgV
jsr CMD.AddYAToArgV
bcs Cmd.CheckCmd.90
*--------------------------------------
* BIN : add "/PATH/CMD"
*--------------------------------------
Cmd.CheckCmd.BIN
>LDA.G CMD.hCmdLine
>SYSCALL GetMemPtr
jsr CMD.AddYAToArgV
bra Cmd.CheckCmd.90
*--------------------------------------
Cmd.CheckCmd.SYS
*--------------------------------------
bra *
*--------------------------------------
Cmd.SearchExt pha
phy
>PUSHEA.G CMD.Stat
>LDA.G CMD.hCmdLine
>SYSCALL GetMemPtr
>PUSHYA push dest full path
ply
pla
>PUSHYA push search list
>LDYA ZPCMDBuf push CMD
>SYSCALL FileSearch
rts
*--------------------------------------
CMD.CheckIO >PUSHW ZPCMDBuf
>LDYA L.CMD.IO
jsr CMD.Search
bcs .9 not a IO token...should be an arg....
phx
jsr CMD.NextCmdBufToken skip this IO token
plx
jmp (J.CMD.IO,x)
.9 lda #0
rts
*--------------------------------------
CMD.IO.AMP >LDA.G CMD.PSFlags
and #$ff^S.PS.F.HOLD
sta (pData),y
clc
rts
CMD.IO.PIPE
clc
rts
CMD.IO.IN lda #O.RDONLY+O.TEXT
jsr CMD.IO.Open
bcs .9
jsr IO.Set.In
jsr CMD.NextCmdBufToken skip arg
clc
.9 rts
CMD.IO.OUTA
CMD.IO.1OUTA lda #O.WRONLY+O.APPEND+O.CREATE+O.TEXT
bra CMD.IO.OUT.1
CMD.IO.OUT
CMD.IO.1OUT lda #O.WRONLY+O.TRUNC+O.CREATE+O.TEXT
CMD.IO.OUT.1 jsr CMD.IO.Open
bcs .9
jsr IO.Set.Out
jsr CMD.NextCmdBufToken skip arg
clc
.9 rts
CMD.IO.2OUTA lda #O.WRONLY+O.APPEND+O.CREATE+O.TEXT
bra CMD.IO.2OUT.1
CMD.IO.2OUT lda #O.WRONLY+O.TRUNC+O.CREATE+O.TEXT
CMD.IO.2OUT.1 jsr CMD.IO.Open
bcs .9
jsr IO.Set.Err
jsr CMD.NextCmdBufToken skip arg
clc
.9 rts
*--------------------------------------
CMD.IO.Open pha
lda (ZPCMDBuf)
beq .9 no arg left....
>PUSHWI 0 Aux type
>PUSHBI S.FI.T.TXT ftype
pla
>PUSHA flags
>LDYA ZPCMDBuf
>SYSCALL fopen
rts
.9 pla
lda #E.SYN
sec
rts
*--------------------------------------
* Input : ZPArgVBuf * Input : ZPArgVBuf
*-------------------------------------- *--------------------------------------
Cmd.Exec >LDA.G CMD.IntCmd Cmd.Exec >LDA.G CMD.IntCmd
@ -681,7 +413,7 @@ Cmd.INT.SLEEP ldx #1
clc clc
rts rts
.9 jmp Cmd.Exec.ERRSYN .9 jmp Cmd.Exec.ERRSYN
*-------------------------------------- *--------------------------------------
Cmd.INT.PAUSE lda #$FF Cmd.INT.PAUSE lda #$FF
>STA.G bPause >STA.G bPause
@ -693,13 +425,44 @@ Cmd.INT.EXIT lda #$FF
clc clc
rts rts
*-------------------------------------- *--------------------------------------
Cmd.INT.MD ldx #1
jsr Cmd.GetArgX
bcs .9
>SYSCALL MKDir
rts
.9 jmp Cmd.Exec.ERRSYN
*--------------------------------------
Cmd.INT.RD ldx #1
jsr Cmd.GetArgX
bcs .9
phy
pha
>PUSHEA.G CMD.Stat
pla
ply
>SYSCALL STAT
bcs .99
>LDA.G CMD.Stat+S.STAT.P.TYPE
cmp #S.FI.T.DIR
bne .9
ldx #1
jsr Cmd.GetArgX
>SYSCALL Remove
.99 rts
.9 jmp Cmd.Exec.ERRSYN
*--------------------------------------
Cmd.INT.IF ldx #1 Cmd.INT.IF ldx #1
jsr Cmd.GetArgX jsr Cmd.GetArgX
beq .9 beq .9
>PUSHYA >PUSHYA
>LDYA L.CMD.IF.TOKEN1 >LDYA L.CMD.IF.TOKEN1
jsr CMD.Search jsr Lookup
bcs .9 bcs .9
@ -716,7 +479,7 @@ Cmd.INT.IF ldx #1
>PUSHYA >PUSHYA
>LDYA L.CMD.IF.TOKEN2 -d -e -f ? >LDYA L.CMD.IF.TOKEN2 -d -e -f ?
jsr CMD.Search jsr Lookup
bcs .1 bcs .1
jmp (J.CMD.IF.TOKEN2,x) jmp (J.CMD.IF.TOKEN2,x)
@ -734,94 +497,6 @@ CMD.IF.F
clc clc
rts rts
*-------------------------------------- *--------------------------------------
CMD.NextCmdBufToken
lda (ZPCMDBuf)
inc ZPCMDBuf
bne .1
inc ZPCMDBuf+1
.1 tax
bne CMD.NextCmdBufToken
rts
*--------------------------------------
CMD.AddCmdBufTokenToArgV
>LDYA ZPCmdBuf
CMD.AddYAToArgV >STYA ZPPtr1
>LDYA ZPArgVBuf
>STYA ZPPtr2
.1 lda (ZPPtr2) scan to end of argV
beq .6
.2 inc ZPPtr2
bne .3
inc ZPPtr2+1
.3 lda (ZPPtr2)
bne .2
inc ZPPtr2
bne .4
inc ZPPtr2+1
.4 lda (ZPPtr2)
bne .2
.6 ldy #$ff
.7 iny
* beq .9
lda (ZPPtr1),y
sta (ZPPtr2),y
bne .7 including str ending \0
iny
* beq .9
sta (ZPPtr2),y arg[] ending \0
clc
rts
.9 lda #E.BUF
sec
rts
*--------------------------------------
CMD.Search >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
*--------------------------------------
Cmd.GetArgX >LDYA ZPArgVBuf Cmd.GetArgX >LDYA ZPArgVBuf
dex dex

View File

@ -30,16 +30,6 @@ CSH.Init lda #$0
>STA.G CSH.DataPtr >STA.G CSH.DataPtr
>STA.G CSH.StackPtr >STA.G CSH.StackPtr
lda #1
>SYSCALL ArgV
>SYSCALL LoadTxtFile
bcs .9
txa
>STA.G CSH.hBuf
>SYSCALL GetMemPtr
>STYA ZPCSHBufPtr
>LDYAI 256 >LDYAI 256
>SYSCALL GetMem0 >SYSCALL GetMem0
bcs .9 bcs .9
@ -67,7 +57,7 @@ CSH.Init lda #$0
* clc * clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CSH.Quit >LDA.G CSH.hBuf CSH.Quit >LDA.G hFileBuf
beq .1 beq .1
>SYSCALL FreeMem >SYSCALL FreeMem
@ -85,9 +75,7 @@ CSH.Quit >LDA.G CSH.hBuf
.8 rts .8 rts
*-------------------------------------- *--------------------------------------
CSH.Run jsr CL.RESET CSH.Run jsr CSH.GetCharNB
jsr CSH.GetCharNB
bcs .9 bcs .9
cmp #'}' End of block ? cmp #'}' End of block ?
@ -158,42 +146,9 @@ CSH.Run jsr CL.RESET
jsr CSH.RestorePtr Restore ptr to get full cmd line to execute jsr CSH.RestorePtr Restore ptr to get full cmd line to execute
ldy #$0 jsr CL.GetLine
bcs .99
.6 lda (ZPCSHBufPtr),y
beq .7
cmp #C.CR
beq .7
sta (ZPCMDBuf),y
iny
cpy #CmdLine.MAX
bne .6
bra .99 Line Too long !!!
.7 lda #0
sta (ZPCMDBuf),y
tya
clc
adc ZPCSHBufPtr
sta ZPCSHBufPtr
bcc .8
inc ZPCSHBufPtr+1
.8 tya
>STA.G CmdBuflen
lda #$ff
>STA.G bCmdBufexec
>LDA.G bSET.X
beq .80
>PUSHW ZPCMDBuf
>PUSHBI 2
>LDYA L.MSG.ECHO
>SYSCALL printf
.80 clc .80 clc
rts rts
*-------------------------------------- *--------------------------------------
@ -279,9 +234,9 @@ CSH.IF.END jsr CSH.GetNextChar just skip ending '}'
rts rts
*-------------------------------------- *--------------------------------------
CSH.WHILE.END jsr CSH.Pop CSH.WHILE.END jsr CSH.Pop
sta ZPCSHBufPtr sta ZPFileBufPtr
jsr CSH.Pop jsr CSH.Pop
sta ZPCSHBufPtr+1 sta ZPFileBufPtr+1
clc clc
rts rts
*-------------------------------------- *--------------------------------------
@ -556,12 +511,12 @@ CSH.ExpEval jsr CSH.ZeroACC
.80 clc .80 clc
rts rts
*-------------------------------------- *--------------------------------------
CSH.SavePtr >LDYA ZPCSHBufPtr CSH.SavePtr >LDYA ZPFileBufPtr
>STYA.G CSH.BufPtrSave >STYA.G CSH.BufPtrSave
rts rts
*-------------------------------------- *--------------------------------------
CSH.RestorePtr >LDYA.G CSH.BufPtrSave CSH.RestorePtr >LDYA.G CSH.BufPtrSave
>STYA ZPCSHBufPtr >STYA ZPFileBufPtr
rts rts
*-------------------------------------- *--------------------------------------
CSH.LookupFN sec CSH.LookupFN sec
@ -596,7 +551,7 @@ CSH.Lookup phy Y = len
.2 lda (ZPPtr1),y .2 lda (ZPPtr1),y
.3 dey .3 dey
cmp (ZPCSHBufPtr),y cmp (ZPFileBufPtr),y
bne .4 bne .4
tya tya
@ -604,10 +559,10 @@ CSH.Lookup phy Y = len
pla Found keyword... pla Found keyword...
clc clc
adc ZPCSHBufPtr ..advance Ptr to char after it.. adc ZPFileBufPtr ..advance Ptr to char after it..
sta ZPCSHBufPtr sta ZPFileBufPtr
bcc .31 bcc .31
inc ZPCSHBufPtr+1 inc ZPFileBufPtr+1
.31 lda ZPPtr1 .31 lda ZPPtr1
sec sec
@ -653,8 +608,8 @@ CSH.GetNumInACC >LDA.G CSH.ACCT
cmp #CSH.T.FLOAT cmp #CSH.T.FLOAT
bcc .1 bcc .1
>PUSHWI ZPCSHBufPtr >PUSHWI ZPFileBufPtr
>LDYA ZPCSHBufPtr >LDYA ZPFileBufPtr
>SYSCALL StrToF >SYSCALL StrToF
bcs .9 bcs .9
@ -664,8 +619,8 @@ CSH.GetNumInACC >LDA.G CSH.ACCT
.1 >PUSHBI 10 .1 >PUSHBI 10
>PUSHWI ZPCSHBufPtr >PUSHWI ZPFileBufPtr
>LDYA ZPCSHBufPtr >LDYA ZPFileBufPtr
>SYSCALL StrToL >SYSCALL StrToL
bcs .9 bcs .9
@ -782,7 +737,7 @@ CSH.GetVar >LDYA ZPCSHSymbols
.2 lda (ZPPtr1),y .2 lda (ZPPtr1),y
dey dey
cmp (ZPCSHBufPtr),y cmp (ZPFileBufPtr),y
bne .3 bne .3
tya tya
@ -802,10 +757,10 @@ CSH.GetVar >LDYA ZPCSHSymbols
txa Get back len txa Get back len
clc clc
adc ZPCSHBufPtr adc ZPFileBufPtr
sta ZPCSHBufPtr sta ZPFileBufPtr
bcc .8 bcc .8
inc ZPCSHBufPtr+1 inc ZPFileBufPtr+1
clc clc
.8 rts .8 rts
@ -1037,7 +992,7 @@ CSH.CheckStack tax
CSH.GetOPLen ldy #0 CSH.GetOPLen ldy #0
.1 iny .1 iny
lda (ZPCSHBufPtr),y lda (ZPFileBufPtr),y
beq .8 beq .8
jsr CSH.IsOPChar jsr CSH.IsOPChar
@ -1049,7 +1004,7 @@ CSH.GetOPLen ldy #0
CSH.GetIDLen ldy #0 CSH.GetIDLen ldy #0
.1 iny .1 iny
lda (ZPCSHBufPtr),y lda (ZPFileBufPtr),y
beq .8 beq .8
jsr CSH.IsLetterOrDigit jsr CSH.IsLetterOrDigit
@ -1071,22 +1026,22 @@ CSH.GetNextCharNB
CSH.GetNextCharNB.RTS CSH.GetNextCharNB.RTS
rts rts
*-------------------------------------- *--------------------------------------
CSH.CheckCharNB cmp #32 SPACE CSH.CheckCharNB cmp #C.SPACE
beq .9 beq .9
cmp #13 CR cmp #C.CR
beq .9 beq .9
cmp #10 LF cmp #C.LF
beq .9 beq .9
cmp #8 TAB cmp #C.TAB
beq .9 beq .9
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CSH.GetNextChar inc ZPCSHBufPtr CSH.GetNextChar inc ZPFileBufPtr
bne CSH.GetChar bne CSH.GetChar
inc ZPCSHBufPtr+1 inc ZPFileBufPtr+1
*-------------------------------------- *--------------------------------------
CSH.GetChar lda (ZPCSHBufPtr) CSH.GetChar lda (ZPFileBufPtr)
beq .9 beq .9
clc clc
rts rts
@ -1139,75 +1094,6 @@ CSH.IsDigit10 cmp #'0'
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
CSH.ErrorMsg >LDA.G CSH.hBuf
>SYSCALL GetMemPtr
>STYA ZPPtr1
lda #0
>STA.G CSH.LineNum
iny
>STA.G CSH.LineNum+1
.1 >LDYA ZPPtr1
>STYA ZPPtr2 Save actual line start
>INCW.G CSH.LineNum
.2 lda (ZPPtr1)
beq .6 EoF
inc ZPPtr1
bne .3
inc ZPPtr1+1
.3 cmp #$0D
bne .2 Scan until EoL
ldx ZPPtr1
cpx ZPCSHBufPtr
lda ZPPtr1+1
sbc ZPCSHBufPtr+1
bcc .1 not this line....
.4 ldy #0
.5 lda (ZPPtr2),y
beq .6
iny
cmp #$0D
beq .6
phy
>SYSCALL PutChar
ply
bra .5
.6 lda #$0D
>SYSCALL PutChar
lda #$0A
>SYSCALL PutChar
lda ZPCSHBufPtr
sec
sbc ZPPtr2
beq .8
tay
.7 phy
lda #'-'
>SYSCALL PutChar
ply
dey
bne .7
.8 >PUSHW.G CSH.LineNum
>PUSHBI 2
>LDYA L.MSG.CSHERR
>SYSCALL printf
rts
*--------------------------------------
MAN MAN
SAVE /A2OSX.SRC/SBIN/SHELL.S.CSH SAVE /A2OSX.SRC/SBIN/SHELL.S.CSH
LOAD /A2OSX.SRC/SBIN/SHELL.S LOAD /A2OSX.SRC/SBIN/SHELL.S

View File

@ -27,7 +27,7 @@ HIS.Add >LDA.G HIS.hBuf
tya tya
sec add len+1 sec add len+1
>ADC.G CmdBuflen CmdBuffer length >ADC.G CL.Len CmdBuffer length
pla pla
bcc .2 enough room bcc .2 enough room
@ -142,10 +142,10 @@ HIS.SetA jsr HIS.GetA
bne .2 bne .2
tya tya
>STA.G CmdBufPtr >STA.G CL.Ptr
>STA.G CmdBuflen >STA.G CL.Len
jmp CL.PRINT jmp CL.PrintCmdBuf
*-------------------------------------- *--------------------------------------
HIS.GetA ldy #0 HIS.GetA ldy #0

View File

@ -86,6 +86,76 @@ IO.Reset.Err >LDA.G IO.hErr
>STZ.G IO.hErr >STZ.G IO.hErr
.8 rts .8 rts
*-------------------------------------- *--------------------------------------
IO.PrintBatchErrMsg
>LDA.G hFileBuf
>SYSCALL GetMemPtr
>STYA ZPPtr1
stz ZPPtr3
stz ZPPtr3+1
.1 >LDYA ZPPtr1
>STYA ZPPtr2 Save actual line start
inc ZPPtr3
bne .2
inc ZPPtr3+1
.2 lda (ZPPtr1)
beq .6 EoF
inc ZPPtr1
bne .3
inc ZPPtr1+1
.3 cmp #$0D
bne .2 Scan until EoL
ldx ZPPtr1
cpx ZPFileBufPtr
lda ZPPtr1+1
sbc ZPFileBufPtr+1
bcc .1 not this line....
.4 ldy #0
.5 lda (ZPPtr2),y
beq .6
iny
cmp #$0D
beq .6
phy
>SYSCALL PutChar
ply
bra .5
.6 lda #$0D
>SYSCALL PutChar
lda #$0A
>SYSCALL PutChar
lda ZPFileBufPtr
sec
sbc ZPPtr2
beq .8
tay
.7 phy
lda #'-'
>SYSCALL PutChar
ply
dey
bne .7
.8 >PUSHW ZPPtr3
>PUSHBI 2
>LDYA L.MSG.BATCHERR
>SYSCALL printf
rts
*--------------------------------------
IO.PrintErrMsg pha Save EC for PrintF IO.PrintErrMsg pha Save EC for PrintF
ldx L.ERR.Codes ldx L.ERR.Codes

View File

@ -5,6 +5,8 @@ AUTO 4,1
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF SBIN/SHELL .TF SBIN/SHELL
*--------------------------------------
CSH .EQ 0
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
@ -16,11 +18,13 @@ ZPPtr2 .EQ ZPBIN+2
ZPPtr3 .EQ ZPBIN+4 ZPPtr3 .EQ ZPBIN+4
ZPCMDBuf .EQ ZPBIN+6 ZPCMDBuf .EQ ZPBIN+6
ZPArgVBuf .EQ ZPBIN+8 ZPArgVBuf .EQ ZPBIN+8
ZPCSHBufPtr .EQ ZPBIN+10 ZPFileBufPtr .EQ ZPBIN+10
.DO CSH=1
ZPCSHSymbols .EQ ZPBIN+12 ZPCSHSymbols .EQ ZPBIN+12
ZPCSHData .EQ ZPBIN+14 ZPCSHData .EQ ZPBIN+14
ZPCSHValue .EQ ZPBIN+16 ZPCSHValue .EQ ZPBIN+16
ZPCSHStack .EQ ZPBIN+18 ZPCSHStack .EQ ZPBIN+18
.FIN
*-------------------------------------- *--------------------------------------
CmdLine.MAX .EQ 127 CmdLine.MAX .EQ 127
VarLen.MAX .EQ 15 VarLen.MAX .EQ 15
@ -50,11 +54,11 @@ CS.START cld
*-------------------------------------- *--------------------------------------
L.MSG.GREETINGS .DA MSG.GREETINGS L.MSG.GREETINGS .DA MSG.GREETINGS
L.MSG.PROMPT .DA MSG.PROMPT L.MSG.PROMPT .DA MSG.PROMPT
L.MSG.ECHO .DA MSG.ECHO L.MSG.TRACE .DA MSG.TRACE
L.MSG.ECHOCRLF .DA MSG.ECHOCRLF L.MSG.ECHOCRLF .DA MSG.ECHOCRLF
L.MSG.BATCHERR .DA MSG.BATCHERR
L.MSG.ERROR .DA MSG.ERROR L.MSG.ERROR .DA MSG.ERROR
L.MSG.PRINTENV .DA MSG.PRINTENV L.MSG.PRINTENV .DA MSG.PRINTENV
L.MSG.CSHERR .DA MSG.CSHERR
L.ENV.PATH .DA ENV.PATH L.ENV.PATH .DA ENV.PATH
L.ENV.PWD .DA ENV.PWD L.ENV.PWD .DA ENV.PWD
L.ENV.PS1 .DA ENV.PS1 L.ENV.PS1 .DA ENV.PS1
@ -65,6 +69,16 @@ J.ESC .DA CL.BS left arrow
.DA HIS.GetNext .DA HIS.GetNext
.DA HIS.GetPrev .DA HIS.GetPrev
.DA CL.NAK right arow .DA CL.NAK right arow
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
L.CMD.INT .DA CMD.INT L.CMD.INT .DA CMD.INT
J.CMD.INT .DA Cmd.INT.STARTPROC J.CMD.INT .DA Cmd.INT.STARTPROC
.DA Cmd.INT.CD .DA Cmd.INT.CD
@ -74,128 +88,94 @@ J.CMD.INT .DA Cmd.INT.STARTPROC
.DA Cmd.INT.EXIT .DA Cmd.INT.EXIT
.DA Cmd.INT.FI .DA Cmd.INT.FI
.DA Cmd.INT.IF .DA Cmd.INT.IF
.DA Cmd.INT.MD
.DA Cmd.INT.PAUSE .DA Cmd.INT.PAUSE
.DA Cmd.INT.PWD .DA Cmd.INT.PWD
.DA Cmd.INT.RD
.DA Cmd.INT.READ .DA Cmd.INT.READ
.DA Cmd.INT.SET .DA Cmd.INT.SET
.DA Cmd.INT.SLEEP .DA Cmd.INT.SLEEP
.DA Cmd.INT.TIME .DA Cmd.INT.TIME
L.CMD.IO .DA CMD.IO
J.CMD.IO .DA CMD.IO.AMP
.DA CMD.IO.PIPE
.DA CMD.IO.IN
.DA CMD.IO.OUTA
.DA CMD.IO.OUT
.DA CMD.IO.1OUTA
.DA CMD.IO.1OUT
.DA CMD.IO.2OUTA
.DA CMD.IO.2OUT
L.CMD.IF.TOKEN1 .DA CMD.IF.TOKEN1 L.CMD.IF.TOKEN1 .DA CMD.IF.TOKEN1
L.CMD.IF.TOKEN2 .DA CMD.IF.TOKEN2 L.CMD.IF.TOKEN2 .DA CMD.IF.TOKEN2
J.CMD.IF.TOKEN2 .DA CMD.IF.D J.CMD.IF.TOKEN2 .DA CMD.IF.D
.DA CMD.IF.E .DA CMD.IF.E
.DA CMD.IF.F .DA CMD.IF.F
L.CMD.IF.TOKEN3 .DA CMD.IF.TOKEN3 L.CMD.IF.TOKEN3 .DA CMD.IF.TOKEN3
L.CSH.BOPS .DA CSH.BOPS
J.CSH.BOPS .DA CSH.BOPS.ADD
.DA CSH.BOPS.SUB
.DA CSH.BOPS.MUL
.DA CSH.BOPS.DIV
.DA CSH.BOPS.MOD
.DA CSH.BOPS.SHL
.DA CSH.BOPS.SHR
.DA CSH.BOPS.L
.DA CSH.BOPS.G
.DA CSH.BOPS.LE
.DA CSH.BOPS.GE
.DA CSH.BOPS.EQ
.DA CSH.BOPS.NE
.DA CSH.BOPS.AND
.DA CSH.BOPS.OR
.DA CSH.BOPS.EOR
.DA CSH.BOPS.LAND
.DA CSH.BOPS.LOR
L.CSH.FN .DA CSH.FN
L.CSH.KW .DA CSH.KW
L.CSH.STYPES .DA CSH.STYPES
J.CSH.KW .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
.DA CSH.FLOAT
.DA CSH.SIGNED
.DA CSH.UNSIGNED
J.CSH.STYPES .DA CSH.CHAR
.DA CSH.INT
.DA CSH.LONG
J.CSH.UTYPES .DA CSH.UCHAR
.DA CSH.UINT
.DA CSH.ULONG
J.CSH.KW.START .DA CSH.IF.START
.DA CSH.WHILE.START
J.CSH.KW.END .DA CSH.IF.END
.DA CSH.WHILE.END
L.ERR.Codes .DA ERR.Codes L.ERR.Codes .DA ERR.Codes
L.ERR.Messages .DA ERR.Messages L.ERR.Messages .DA ERR.Messages
.DO CSH=1
.INB /A2OSX.SRC/SBIN/SHELL.R.CSH
.FIN
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
CS.INIT jsr SetPWD CS.INIT clc
CS.INIT.RTS rts
*--------------------------------------
CS.RUN jsr SetPWD
jsr CMD.Init jsr CMD.Init
bcs .9 bcs CS.INIT.RTS
ldy #S.PS.ARGC lda #1
lda (pPs),y >SYSCALL ArgV
cmp #1 bcs .1 no arg, continue starting interactive
>SYSCALL LoadTxtFile
bcs CS.INIT.RTS
beq .1 no arg, continue starting interactive txa
>STA.G hFileBuf
jmp CSH.Init >SYSCALL GetMemPtr
>STYA ZPFileBufPtr
.DO CSH=1
jsr CSH.Init
.FIN
bra CS.RUN.LOOP
.1 jsr HIS.Init .1 jsr HIS.Init
bcs .9 bcs CS.INIT.RTS
>PUSHWI K.VER >PUSHWI K.VER
>PUSHBI 2 >PUSHBI 2
>LDYA L.MSG.GREETINGS >LDYA L.MSG.GREETINGS
>SYSCALL printf >SYSCALL printf
bcs CS.INIT.RTS
.9 rts
*-------------------------------------- *--------------------------------------
CS.RUN >LDA.G bReadMode READ Command ? CS.RUN.LOOP jsr CL.Reset
beq .22 jsr IO.Reset
jmp CS.RUN.READ
.22 ldy #S.PS.RC
lda (pPs),y
beq .11
jsr IO.PrintErrMsg >LDA.G bReadMode READ Command ?
bcs .9 bne .7
.11 >LDA.G bPause
bpl .13
>LDA.G bPause
bpl .4
.2 >SLEEP
>SYSCALL GetChar >SYSCALL GetChar
bcs .8 bcc .3
tay
beq .2 no char
rts
.3 cmp #3 Ctrl-C
beq .9
bra .6
>STZ.G bPause >STZ.G bPause
.13 jsr CheckSleep .4 jsr CheckSleep
bne .8 bne .2
>LDA.G CSH.hBuf batch mode ? .6 >LDA.G hFileBuf batch mode ?
beq .10 beq CS.RUN.INTERCATIVE
jmp CS.RUN.BATCH jmp CS.RUN.BATCH
*-------------------------------------- .7 jmp CS.RUN.READ
.10 jsr CL.RESET reset CmdBuf
jsr IO.Reset
.9 sec
rts
*--------------------------------------
CS.RUN.INTERCATIVE
>STZ.G bSecureRead Clear password mode >STZ.G bSecureRead Clear password mode
jsr CL.PrintPrompt jsr CL.PrintPrompt
@ -203,60 +183,37 @@ CS.RUN >LDA.G bReadMode READ Command ?
.1 >SLEEP .1 >SLEEP
>SYSCALL GetChar >SYSCALL GetChar
bcc .21 no char bcc .21
tay tay
beq .1 beq .1 no char
rts rts I/O error
.21 cmp #C.EOF .21 cmp #C.EOF
beq .9 beq .9
jsr CL.CHARIN jsr CL.CHARIN
>LDA.G bCmdBufExec Something to execute ? >LDA.G CL.bExec Something to execute ?
bpl .1 bpl .1
lda (ZPCMDBuf) lda (ZPCMDBuf)
beq .10 Empty line beq CS.RUN.LOOP Empty line
jsr HIS.Add jsr HIS.Add
jsr CMD.Parse jmp CS.RUN.Exec
bcs .2 .9 rts
lda (ZPArgVBuf)
beq .10 Empty line
jsr CMD.Exec
bcs .2
lda #0
.2 ldy #S.PS.RC
sta (pPs),y
>LDA.G bExit
bne .80
.8 clc
rts
.80 lda #0
sec
.9 rts
*-------------------------------------- *--------------------------------------
CS.RUN.READ jsr CL.RESET reset CmdBuf CS.RUN.READ
jsr IO.Reset
.1 >SLEEP .1 >SLEEP
>SYSCALL GetChar >SYSCALL GetChar
bcs .1 no char bcs .1 no char
jsr CL.CHARIN jsr CL.CHARIN
>LDA.G bCmdBufExec >LDA.G CL.bExec
bpl .1 bpl .1
>STZ.G bReadMode >STZ.G bReadMode
@ -268,10 +225,8 @@ CS.RUN.READ jsr CL.RESET reset CmdBuf
>LEA.G CMD.VarName >LEA.G CMD.VarName
>SYSCALL SetEnv >SYSCALL SetEnv
rts
.8 clc .8 jmp CS.RUN.LOOP.END
rts
*-------------------------------------- *--------------------------------------
CS.RUN.BATCH >SYSCALL GetChar CS.RUN.BATCH >SYSCALL GetChar
bcs .2 bcs .2
@ -279,7 +234,7 @@ CS.RUN.BATCH >SYSCALL GetChar
cmp #3 test Ctrl-c cmp #3 test Ctrl-c
bne .1 bne .1
sec * sec
rts rts
.1 cmp #19 test Ctrl-s .1 cmp #19 test Ctrl-s
@ -290,48 +245,66 @@ CS.RUN.BATCH >SYSCALL GetChar
clc clc
rts rts
.2 jsr CSH.Run .2 .DO CSH=1
jsr CSH.Run
.ELSE
jsr CL.GetLine
.FIN
bcc .7 bcc .7
cmp #MLI.E.EOF cmp #C.EOF
beq .9 bne .3
pha lda #$ff
>STA.G bExit
jsr CSH.ErrorMsg inc
clc
bra CS.RUN.LOOP.END
pla .3 sec
bra CS.RUN.LOOP.END
ldy #S.PS.RC .7 >LDA.G CL.bExec
sta (pPs),y bpl CS.RUN.LOOP.80
sec
rts
.7 >LDA.G bCmdBufExec
bpl .8 Empty line....nothing to do....
lda (ZPCMDBuf) lda (ZPCMDBuf)
beq .8 beq CS.RUN.LOOP.80
jsr CMD.Parse jsr CL.Trace
bcs .8 *--------------------------------------
CS.RUN.Exec jsr CL.Parse
bcs CS.RUN.LOOP.8
lda (ZPArgVBuf) lda (ZPArgVBuf)
beq .8 beq CS.RUN.LOOP.8
jsr CMD.Exec jsr CMD.Exec
bcs .8 >SLEEP if S.PS.HOLD
*--------------------------------------
lda #0 CS.RUN.LOOP.END ldy #S.PS.RC
.8 ldy #S.PS.RC
sta (pPs),y sta (pPs),y
clc
rts
.9 lda #0 bcc CS.RUN.LOOP.8
>LDA.G hFileBuf batch mode ?
beq .1
jsr IO.PrintBatchErrMsg
bcs CS.RUN.LOOP.RTS
.1 ldy #S.PS.RC
lda (pPs),y
jsr IO.PrintErrMsg
bcs CS.RUN.LOOP.RTS
CS.RUN.LOOP.8 >LDA.G bExit
beq CS.RUN.LOOP.80
lda #0
sec sec
rts CS.RUN.LOOP.RTS rts
CS.RUN.LOOP.80 jmp CS.RUN.LOOP
*-------------------------------------- *--------------------------------------
CS.DOEVENT lda (pEvent) CS.DOEVENT lda (pEvent)
bpl .9 bpl .9
@ -341,20 +314,21 @@ CS.DOEVENT lda (pEvent)
* ldy #Sleep already set by CheckSleep * ldy #Sleep already set by CheckSleep
clc clc
ldx #4
.1 lda (pData),y .1 lda (pData),y
sbc #0 sbc #0
sta (pData),y sta (pData),y
iny iny
dex cpy #Sleep+4
bne .1 bne .1
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT jsr HIS.Quit CS.QUIT .DO CSH=1
jsr CSH.Quit jsr CSH.Quit
.FIN
jsr HIS.Quit
jsr CMD.Quit jsr CMD.Quit
clc clc
rts rts
@ -376,22 +350,62 @@ SetPWD.I >SYSCALL GetMemPtr
>LDYA L.ENV.PWD >LDYA L.ENV.PWD
>SYSCALL SetEnv >SYSCALL SetEnv
rts rts
*--------------------------------------
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.CL
.INB /A2OSX.SRC/SBIN/SHELL.S.CMD .INB /A2OSX.SRC/SBIN/SHELL.S.CMD
.INB /A2OSX.SRC/SBIN/SHELL.S.CSH
.INB /A2OSX.SRC/SBIN/SHELL.S.IO .INB /A2OSX.SRC/SBIN/SHELL.S.IO
.INB /A2OSX.SRC/SBIN/SHELL.S.HIS .INB /A2OSX.SRC/SBIN/SHELL.S.HIS
.DO CSH=1
.INB /A2OSX.SRC/SBIN/SHELL.S.CSH
.FIN
*-------------------------------------- *--------------------------------------
CS.END CS.END
*-------------------------------------- *--------------------------------------
MSG.GREETINGS .AZ "\r\nA2osX-Shell %d.%d\r\n\r\n" MSG.GREETINGS .AZ "\r\nA2osX-Shell %d.%d\r\n\r\n"
MSG.PROMPT .AZ "\e[7h$ " MSG.PROMPT .AZ "\e[7h$ "
MSG.ECHO .AS ">%s" MSG.TRACE .AS ">%s"
MSG.ECHOCRLF .AZ "\r\n" MSG.ECHOCRLF .AZ "\r\n"
MSG.BATCHERR .AZ "^\r\nLine #%D:"
MSG.ERROR .AZ "[$%h]:%S.\r\n" MSG.ERROR .AZ "[$%h]:%S.\r\n"
MSG.PRINTENV .AZ "%s=%s\r\n" MSG.PRINTENV .AZ "%s=%s\r\n"
MSG.CSHERR .AZ "^\r\nLine #%D:"
FMT.DATE .AZ "%A (%w), %B %d %Y" FMT.DATE .AZ "%A (%w), %B %d %Y"
FMT.TIME .AZ "%H:%M:%S (%I:%M:%S%p)" FMT.TIME .AZ "%H:%M:%S (%I:%M:%S%p)"
*-------------------------------------- *--------------------------------------
@ -402,23 +416,7 @@ ENV.HOME .AZ "HOME"
*-------------------------------------- *--------------------------------------
* https://www.tldp.org/LDP/abs/html/io-redirection.html * https://www.tldp.org/LDP/abs/html/io-redirection.html
*-------------------------------------- *--------------------------------------
CMD.INT .AZ "STARTPROC" CL.IO .AZ "&"
.AZ "CD"
.AZ "DATE"
.AZ "ECHO"
.AZ "ELSE"
.AZ "EXIT"
.AZ "FI"
.AZ "IF"
.AZ "PAUSE"
.AZ "PWD"
.AZ "READ"
.AZ "SET"
.AZ "SLEEP"
.AZ "TIME"
.HS 00
*--------------------------------------
CMD.IO .AZ "&"
.AZ "|" .AZ "|"
.AZ "<" .AZ "<"
.AZ ">>" .AZ ">>"
@ -429,6 +427,24 @@ CMD.IO .AZ "&"
.AZ "2>" .AZ "2>"
.HS 00 .HS 00
*-------------------------------------- *--------------------------------------
CMD.INT .AZ "STARTPROC"
.AZ "CD"
.AZ "DATE"
.AZ "ECHO"
.AZ "ELSE"
.AZ "EXIT"
.AZ "FI"
.AZ "IF"
.AZ "MD"
.AZ "PAUSE"
.AZ "PWD"
.AZ "RD"
.AZ "READ"
.AZ "SET"
.AZ "SLEEP"
.AZ "TIME"
.HS 00
*--------------------------------------
CMD.IF.TOKEN1 .AZ "[" CMD.IF.TOKEN1 .AZ "["
.AZ "![" .AZ "!["
.HS 00 .HS 00
@ -440,7 +456,9 @@ CMD.IF.TOKEN3 .AZ "-eq"
.AZ "-ne" .AZ "-ne"
.HS 00 .HS 00
*-------------------------------------- *--------------------------------------
.DO CSH=1
.INB /A2OSX.SRC/SBIN/SHELL.C.CSH .INB /A2OSX.SRC/SBIN/SHELL.C.CSH
.FIN
.INB /A2OSX.SRC/X.ERRORS.S .INB /A2OSX.SRC/X.ERRORS.S
*-------------------------------------- *--------------------------------------
EscChars .AS 'DBAC' EscChars .AS 'DBAC'
@ -449,9 +467,7 @@ EscChars.Cnt .EQ *-EscChars
.DUMMY .DUMMY
.OR 0 .OR 0
DS.START DS.START
CmdBufPtr .BS 1 hFileBuf .BS 1
CmdBuflen .BS 1
bCmdBufexec .BS 1
bEscMode .BS 1 bEscMode .BS 1
bPause .BS 1 bPause .BS 1
@ -463,6 +479,10 @@ bSecureRead .BS 1
Sleep .BS 4 Sleep .BS 4
CL.Ptr .BS 1
CL.Len .BS 1
CL.bExec .BS 1
CMD.IntCmd .BS 1 CMD.IntCmd .BS 1
CMD.hCmdLine .BS 1 CMD.hCmdLine .BS 1
CMD.hCmdBuf .BS 1 CMD.hCmdBuf .BS 1
@ -485,9 +505,9 @@ HIS.Index .BS 1
IO.hIn .BS 1 IO.hIn .BS 1
IO.hOut .BS 1 IO.hOut .BS 1
IO.hErr .BS 1 IO.hErr .BS 1
.DO CSH=1
.INB /A2OSX.SRC/SBIN/SHELL.G.CSH .INB /A2OSX.SRC/SBIN/SHELL.G.CSH
.FIN
DS.END .ED DS.END .ED
*-------------------------------------- *--------------------------------------
MAN MAN

View File

@ -140,7 +140,11 @@ K.Stat.DST .DA #S.STAT.P.TYPE
* CS : error * CS : error
* A = EC * A = EC
*\------------------------------------- *\-------------------------------------
K.MKDir jsr PFT.CheckPathYA K.MKDir jsr K.realpath.I
bcs K.MKDir.RTS
>LDYAI K.Buf256
jsr PFT.CheckPathYA
jsr STDIO.SetMLIPathYA jsr STDIO.SetMLIPathYA
lda #S.FI.A.FULL lda #S.FI.A.FULL