diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index fc73ec58..a4b10051 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index 9242edf1..80633159 100644 Binary files a/.Floppies/A2OSX.SRC.po and b/.Floppies/A2OSX.SRC.po differ diff --git a/BIN/CAT.S.txt b/BIN/CAT.S.txt index a037e155..da3f54fe 100644 --- a/BIN/CAT.S.txt +++ b/BIN/CAT.S.txt @@ -245,10 +245,7 @@ CS.RUN.PRINTNUM clc >SYSCALL printf .8 rts *-------------------------------------- -CS.RUN.OPEN >SYSCALL RealPath - bcs .9 - stx hFullPath - pha +CS.RUN.OPEN pha >PUSHWI 0 Aux type >PUSHBI S.FI.T.TXT @@ -257,10 +254,8 @@ CS.RUN.OPEN >SYSCALL RealPath pla >SYSCALL FOpen - bcs .99 + bcs .9 - jsr .99 - pha lda #0 @@ -268,14 +263,7 @@ CS.RUN.OPEN >SYSCALL RealPath pla clc - rts - -.99 pha - lda hFullPath - >SYSCALL FreeMem - pla -.9 sec - rts +.9 rts *-------------------------------------- CS.QUIT >LDA.G hBuf beq CS.RUN.CLOSE @@ -339,7 +327,6 @@ ASCII >PSTR "NULL" >PSTR "RS" >PSTR "US" *-------------------------------------- -hFullPath .BS 1 BytesRead .BS 1 ByteIndex .BS 1 *-------------------------------------- diff --git a/BIN/MEMDUMP.S.txt b/BIN/MEMDUMP.S.txt index 7a3fafc2..b9fb2b27 100644 --- a/BIN/MEMDUMP.S.txt +++ b/BIN/MEMDUMP.S.txt @@ -274,7 +274,7 @@ CS.QUIT clc CS.END MSG0 .AZ " # Flags PID REF PTR LEN BINPATH/DATA" MSG1.INV .AZ "\e[7m" -MSG1 .AZ "%03d %s %03d %03d $%H %05D " +MSG1 .AZ "%03d %s %03d %03d $%H %5D " MSG1.BIN .AZ "{%s}\e[0m\r\n" MSG1.STR .AZ "[%03d:%s]\e[0m\r\n" MSG1.HEX .AZ "?HEX:%h%h.%h%h.%h%h.%h%h.%h%h.%h%h.%h%h.%h%h\e[0m\r\n" diff --git a/BIN/MORE.S.txt b/BIN/MORE.S.txt index 5af87132..23d541fd 100644 --- a/BIN/MORE.S.txt +++ b/BIN/MORE.S.txt @@ -175,19 +175,13 @@ CS.RUN.LOOP >SLEEP .9 sec rts *-------------------------------------- -CS.RUN.OPEN >SYSCALL RealPath - bcs .9 - phy - pha - txa - >STA.G hFullPath +CS.RUN.OPEN pha >PUSHWI 0 Aux type >PUSHBI S.FI.T.TXT >PUSHBI O.RDONLY+O.TEXT pla - ply >SYSCALL FOpen bcs .9 >STA.G hFile @@ -215,11 +209,7 @@ CS.QUIT >LDA.G hBuf >SYSCALL FClose -.2 >LDA.G hFullPath - beq .8 - - >SYSCALL FreeMem - +.2 .8 clc rts *-------------------------------------- @@ -242,7 +232,6 @@ MSG.Pause .AZ "\e[7m --- More --- \e[0m\r" .OR 0 DS.START ArgCount .BS 1 -hFullPath .BS 1 hFile .BS 1 LineCount .BS 1 LineNum .BS 2 diff --git a/README.md b/README.md index 9fdb4390..0ccb85d2 100644 --- a/README.md +++ b/README.md @@ -286,6 +286,21 @@ OApple+1,OApple+2,OApple+3 to switch between screens : Kernel Log, text, DHGR. note : '$VAR' does NOT expand Variable +## Shell I/O control/redirection: + +| Token | Status | Comment | +| ---- | ------ | ------- | +| . | Working | use same env | +| & | Working | start proc | +| \| | | pipe | +| < | Working | StdIn redirection | +| >> | Working | StdOut redirection | +| > | Working | | +| 1>> | Working | | +| 1> | Working | | +| 2>> | Working | StdErr redirection | +| 2>> | Working | | + ## DRV,Drivers: | Name | Status | Comment | K.Ver | diff --git a/SBIN/SHELL.S.CMD.txt b/SBIN/SHELL.S.CMD.txt index cb2aa975..4989deff 100644 --- a/SBIN/SHELL.S.CMD.txt +++ b/SBIN/SHELL.S.CMD.txt @@ -657,46 +657,72 @@ CMD.CheckIO >LDYA L.CMD.IO jsr CMD.NextCmdBufToken skip this IO token plx - jmp (J.CMD.IO,x) .9 lda #0 rts *-------------------------------------- -CMD.IO.AMP +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 - clc - rts -CMD.IO.OUTA -CMD.IO.1OUTA lda #O.WRONLY+O.APPEND+O.CREATE -CMD.IO.OUT -CMD.IO.1OUT lda #O.WRONLY+O.TRUNC+O.CREATE - - lda (ZPCMDBuf) - beq .99 no arg left.... - - >LDYA ZPCMDBuf - >SYSCALL realpath +CMD.IO.IN lda #O.RDONLY+O.TEXT + jsr CMD.IO.Open bcs .9 - + jsr IO.Set.In + jsr CMD.NextCmdBufToken skip arg clc - rts +.9 rts -.99 lda #E.SYN - sec +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 -CMD.IO.2OUT lda #O.WRONLY+O.TRUNC+O.CREATE +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 *-------------------------------------- CMD.NextCmdBufToken lda (ZPCMDBuf) diff --git a/SBIN/SHELL.S.IO.txt b/SBIN/SHELL.S.IO.txt index 95daed2b..3344bd7d 100644 --- a/SBIN/SHELL.S.IO.txt +++ b/SBIN/SHELL.S.IO.txt @@ -3,6 +3,89 @@ PREFIX /A2OSX.BUILD AUTO 4,1 .LIST OFF *-------------------------------------- +IO.Reset jsr IO.Reset.In + jsr IO.Reset.Out + jsr IO.Reset.Err + rts +*-------------------------------------- +IO.Set.In pha + jsr IO.Reset.In + ldy #S.PS.hStdIn + lda (pPS),y + >STA.G IO.hIn + pla + ldy #S.PS.hStdIn + sta (pPS),y + rts +*-------------------------------------- +IO.Reset.In >LDA.G IO.hIn + beq .8 + + pha + + ldy #S.PS.hStdIn + lda (pPS),y + >SYSCALL fclose + + pla + ldy #S.PS.hStdIn + sta (pPS),y + + >STZ.G IO.hIn +.8 rts +*-------------------------------------- +IO.Set.Out pha + jsr IO.Reset.Out + ldy #S.PS.hStdOut + lda (pPS),y + >STA.G IO.hOut + pla + ldy #S.PS.hStdOut + sta (pPS),y + rts +*-------------------------------------- +IO.Reset.Out >LDA.G IO.hOut + beq .8 + + pha + + ldy #S.PS.hStdOut + lda (pPS),y + >SYSCALL fclose + + pla + ldy #S.PS.hStdOut + sta (pPS),y + + >STZ.G IO.hOut +.8 rts +*-------------------------------------- +IO.Set.Err pha + jsr IO.Reset.Err + ldy #S.PS.hStdErr + lda (pPS),y + >STA.G IO.hErr + pla + ldy #S.PS.hStdErr + sta (pPS),y + rts +*-------------------------------------- +IO.Reset.Err >LDA.G IO.hErr + beq .8 + + pha + + ldy #S.PS.hStdErr + lda (pPS),y + >SYSCALL fclose + + pla + ldy #S.PS.hStdErr + sta (pPS),y + + >STZ.G IO.hErr +.8 rts +*-------------------------------------- IO.PrintErrMsg pha Save EC for PrintF ldx L.ERR.Codes diff --git a/SBIN/SHELL.S.txt b/SBIN/SHELL.S.txt index fe5cbb1f..66560366 100644 --- a/SBIN/SHELL.S.txt +++ b/SBIN/SHELL.S.txt @@ -185,6 +185,8 @@ CS.RUN >LDA.G bReadMode READ Command ? jmp CS.RUN.BATCH *-------------------------------------- .10 jsr CL.RESET reset CmdBuf + jsr IO.Reset + >STZ.G bSecureRead Clear password mode jsr CL.PrintPrompt @@ -237,6 +239,7 @@ CS.RUN >LDA.G bReadMode READ Command ? .9 rts *-------------------------------------- CS.RUN.READ jsr CL.RESET reset CmdBuf + jsr IO.Reset .1 >SLEEP >SYSCALL GetChar diff --git a/SYS/KERNEL.S.IO.txt b/SYS/KERNEL.S.IO.txt index 0b4891bf..86e77141 100644 --- a/SYS/KERNEL.S.IO.txt +++ b/SYS/KERNEL.S.IO.txt @@ -102,19 +102,23 @@ IO.OPEN.REG >MLICALL MLIGETFILEINFO lda #S.FI.A.FULL Yes, Create... sta K.MLI.PARAMS+3 Access - lda K.Open.TYPE - sta K.MLI.PARAMS+4 File type - >LDYA K.Open.AUXTYPE - >STYA K.MLI.PARAMS+5 Aux type + + ldx #2 + +.1 lda K.Open.TYPE,x + sta K.MLI.PARAMS+4,x File type,Aux type + dex + bpl .1 + lda #S.FI.ST.STD sta K.MLI.PARAMS+7 ldx #3 -.1 lda DATELO,x +.2 lda DATELO,x sta K.MLI.PARAMS+8,x dex - bpl .1 + bpl .2 >MLICALL MLICREATE bcs IO.OPEN.RTS @@ -173,13 +177,12 @@ K.IO.OPEN.REG.E >LDYAI S.FD.REG >MLICALL MLINEWLINE bcs .9 -.8 lda #$ff +.8 lda #$ff SELF MODIFIED rts -.9 pha +.9 pha Save Error Code lda .8+1 - pha - jsr IO.Close.I + jsr K.Close pla sec rts @@ -217,7 +220,7 @@ K.Close pha save hFD jsr K.GetMemPtr >STYA pFD -IO.Close.I lda (pFD) #S.FD.T + lda (pFD) #S.FD.T tax pla jmp (.1,x) diff --git a/SYS/KERNEL.S.STAT.txt b/SYS/KERNEL.S.STAT.txt index 5685fec7..bfe8dfa7 100644 --- a/SYS/KERNEL.S.STAT.txt +++ b/SYS/KERNEL.S.STAT.txt @@ -19,7 +19,29 @@ K.FStat jsr PFT.CheckNodeA lda Nod.Table.hPath,x jsr K.GetMemPtr - bra K.Stat.I + jsr K.Stat.I + bcs K.Stat.9 + + jsr STDIO.GetHFileREG.I + bcs K.Stat.BLK2SIZE + + >MLICALL MLIGETEOF + bcs K.Stat.BLK2SIZE + + ldy #S.STAT.SIZE+3 + lda #0 + sta (ZPPtr1),y + + ldx #2 + +.1 lda K.MLI.PARAMS+2,x + dey + sta (ZPPtr1),y + dex + bpl .1 + +* clc + rts .9 >RET 2 discard statbuf */-------------------------------------- @@ -35,6 +57,34 @@ K.FStat jsr PFT.CheckNodeA * ## RETURN VALUE *\-------------------------------------- K.Stat jsr PFT.CheckPathYA + jsr K.Stat.I + bcs K.Stat.9 +K.Stat.BLK2SIZE + ldy #S.STAT.SIZE + lda #0 + sta (ZPPtr1),y + + iny + + lda K.MLI.PARAMS+S.FI.UBLKS + asl + sta (ZPPtr1),y + + iny + + lda K.MLI.PARAMS+S.FI.UBLKS+1 + rol + sta (ZPPtr1),y + + iny + + lda #0 + rol + sta (ZPPtr1),y + +* clc +K.Stat.9 rts + K.Stat.I jsr STDIO.SetMLIPathYA >PULLW ZPPtr1 @@ -66,28 +116,6 @@ K.Stat.I jsr STDIO.SetMLIPathYA dex bne .3 - ldy #S.STAT.SIZE - lda #0 - sta (ZPPtr1),y - - iny - - lda K.MLI.PARAMS+S.FI.UBLKS - asl - sta (ZPPtr1),y - - iny - - lda K.MLI.PARAMS+S.FI.UBLKS+1 - rol - sta (ZPPtr1),y - - iny - - lda #0 - rol - sta (ZPPtr1),y - clc .9 rts *-------------------------------------- diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 4ff64e1d..675d251f 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -970,30 +970,32 @@ K.SScanF.Fwd tya Y=char count parsed * CC : A = hFILE * CS : A = EC *\-------------------------------------- -K.FOpen.PATH .BS 2 -*-------------------------------------- -K.FOpen jsr PFT.CheckPathYA +K.FOpen jsr K.realpath.I + bcc .1 + + >RET 4 + +.1 >LDYAI K.Buf256 + jsr PFT.CheckPathYA - >STYA K.FOpen.PATH - pha >PULLB K.Open.FLAGS >PULLB K.Open.TYPE >PULLW K.Open.AUXTYPE - pla + >LDYAI K.Buf256 jsr IO.Open.I bcs K.FOpen.RTS - sta .1+1 save hFD + sta .2+1 save hFD tax - >LDYA K.FOpen.PATH + >LDYAI K.Buf256 jsr STDIO.NewHFileYAX bcc K.FOpen.RTS pha save MLI error -.1 lda #$ff SELF MODIFIED +.2 lda #$ff SELF MODIFIED jsr K.Close pla get back MLI error sec @@ -1308,15 +1310,16 @@ STDIO.NewHFileYAX *-------------------------------------- STDIO.GetHFileREG jsr STDIO.GetHFile - bcs .9 - + bcs STDIO.GetHFileREG.9 +STDIO.GetHFileREG.I lda (pFD) #S.FD.T bne STDIO.GetHFile.9 ldy #S.FD.REG.REF lda (pFD),y sta K.MLI.PARAMS+1 -.9 rts +STDIO.GetHFileREG.9 + rts *-------------------------------------- STDIO.GetHFile tay lda Nod.Table.hFD,y diff --git a/SYS/KERNEL.S.STDLIB.txt b/SYS/KERNEL.S.STDLIB.txt index 603e84fb..26ff87ea 100644 --- a/SYS/KERNEL.S.STDLIB.txt +++ b/SYS/KERNEL.S.STDLIB.txt @@ -292,7 +292,12 @@ STDLIB.32.Clear ldx #3 * X = hMem of Full Path * CS : A = Error Code *\-------------------------------------- -K.realpath >STYA ZPPtr1 +K.realpath sec + .HS 90 BCC +K.realpath.I clc + ror .89+1 + + >STYA ZPPtr1 ldx #$ff @@ -384,12 +389,17 @@ K.realpath >STYA ZPPtr1 dex bra .5 -.89 >LDYAI K.Buf256 +.89 lda #$ff SELF MODIFIED + bpl .98 + >LDYAI K.Buf256 jmp K.NewStr .90 lda #E.SYN sec rts + +.98 clc + rts *-------------------------------------- K.RealPath.RemoveAtX txa X = "/something" diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index f2fb6ff6..50f906d2 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -53,8 +53,8 @@ A2osX.E0 .PH $E000 .INB /A2OSX.SRC/SYS/KERNEL.S.IRQ .INB /A2OSX.SRC/SYS/KERNEL.S.MEM ********* TMP ***** go to A2osX.D1 - .INB /A2OSX.SRC/SYS/KERNEL.S.IO .INB /A2OSX.SRC/SYS/KERNEL.S.FIO + .INB /A2OSX.SRC/SYS/KERNEL.S.IO DevMgr.FreeMem .EQ * .EP A2osX.E0.E .EQ *