diff --git a/BIN/CAT.S.txt b/BIN/CAT.S.txt index 7228fea1..679d16ff 100644 --- a/BIN/CAT.S.txt +++ b/BIN/CAT.S.txt @@ -40,7 +40,7 @@ CS.START cld .DA #0 .DA CS.END-CS.START CS .DA DS.END-DS.START DS - .DA #16 SS + .DA #64 SS .DA #ZS.END-ZS.START Zero Page Size .DA 0 *-------------------------------------- diff --git a/BIN/LS.S.txt b/BIN/LS.S.txt index 1d4410cc..56c06ec0 100644 --- a/BIN/LS.S.txt +++ b/BIN/LS.S.txt @@ -533,7 +533,7 @@ Mod2CSTR ldy #S.STAT.MODE+1 ldy #S.STAT.MODE lda (ZPFileStat),y - + ldy #MOD+1 .1 lsr diff --git a/BIN/PS.S.txt b/BIN/PS.S.txt index 298bbb87..e7d23509 100644 --- a/BIN/PS.S.txt +++ b/BIN/PS.S.txt @@ -1,6 +1,5 @@ NEW -PREFIX -AUTO 4,1 + AUTO 3,1 .LIST OFF .OP 65C02 .OR $2000 @@ -114,7 +113,7 @@ CS.RUN.DUMP phx lda (ZPPSPtr),y >PUSHA Parent PID - ldy #S.PS.UID + ldy #S.PS.hUsr lda (ZPPSPtr),y >PUSHA @@ -205,7 +204,7 @@ MSG0 .AZ "\e[7lID CPU\% Flags UID PID Command Line\r\n" MSG1 .AZ "%03d %3d\% %s %03d %03d" MSG2 .AZ " %s" MSG3 .AZ "\r\n" -MSG.FLAGS .AS "IRQDHSed" +MSG.FLAGS .AS "IRQDHSEN" *-------------------------------------- .DUMMY .OR 0 diff --git a/BIN/SH.S.CMD.txt b/BIN/SH.S.CMD.txt index 19e01728..10a0cc8c 100644 --- a/BIN/SH.S.CMD.txt +++ b/BIN/SH.S.CMD.txt @@ -1,6 +1,5 @@ NEW -PREFIX -AUTO 4,1 + AUTO 3,1 .LIST OFF *-------------------------------------- CMD.NOHUP >LDA.G CORE.PSFlags @@ -319,7 +318,7 @@ CMD.SET.EXEC jsr CORE.ArgV.NextChar skip "`" jsr IO.Pipe.Out bcs .9 - >PUSHBI S.PS.F.DUPENV + >PUSHBI 0 >LDYA ZPArgVBufPtr >SYSCALL execl bcs .9 @@ -1027,7 +1026,7 @@ FOR.EXEC jsr CORE.ArgV.NextChar skip "`" jsr IO.Pipe.Out bcs .9 - >PUSHBI S.PS.F.DUPENV + >PUSHBI 0 >LDYA ZPArgVBufPtr >SYSCALL execl bcs .9 diff --git a/BIN/SH.S.CORE.txt b/BIN/SH.S.CORE.txt index 3a2556ba..882ea298 100644 --- a/BIN/SH.S.CORE.txt +++ b/BIN/SH.S.CORE.txt @@ -1,6 +1,5 @@ NEW -PREFIX -AUTO 4,1 + AUTO 3,1 .LIST OFF *-------------------------------------- CORE.Init >LDYAI 256 @@ -61,7 +60,7 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping lda #0 Reset ArgV Buffer sta (ZPArgVBuf) - lda #S.PS.F.HOLD+S.PS.F.DUPENV + lda #S.PS.F.HOLD >STA.G CORE.PSFlags lda #$ff diff --git a/BIN/WHO.S.txt b/BIN/WHO.S.txt new file mode 100644 index 00000000..f0bbdee1 --- /dev/null +++ b/BIN/WHO.S.txt @@ -0,0 +1,112 @@ +NEW + AUTO 3,1 + .LIST OFF + .OP 65C02 + .OR $2000 + .TF BIN/WHO +*-------------------------------------- + .INB INC/MACROS.I + .INB INC/MLI.I + .INB INC/A2OSX.I + .INB INC/KERNEL.I +*-------------------------------------- + .DUMMY + .OR ZPBIN +ZS.START +USRID .BS 1 +ZPPWPtr .BS 2 +ZS.END + .ED +*-------------------------------------- +* 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 Code Size (without Constants) + .DA DS.END-DS.START Data SegmentSize + .DA #64 Stack Size + .DA #ZS.END-ZS.START Zero Page Size + .DA 0 +*-------------------------------------- +* Relocation Table +*-------------------------------------- +.1 .DA CS.INIT + .DA CS.RUN + .DA CS.EVENT + .DA CS.QUIT +L.MSG0 .DA MSG0 +L.MSG1 .DA MSG1 + .DA 0 +*-------------------------------------- +CS.INIT clc + rts +*-------------------------------------- +CS.RUN >LDYA L.MSG0 + >SYSCALL puts + + ldx #1 + stx USRID + + >DEBUG + +.1 lda USR.Table.hPW-1,x + beq .7 + + lda USR.Table.hFile-1,x + tax + lda OF.Table.hPath-1,x + + >SYSCALL GetMemPtr + >PUSHYA + + ldx USRID + lda USR.Table.hPW-1,x + >SYSCALL GetMemPtr + >STYA ZPPWPtr + + lda ZPPWPtr + clc + adc #19 + tay + lda ZPPWPtr+1 + adc #0 + >PUSHYA + + + >PUSHB USRID + + >PUSHBI 5 + >LDYA L.MSG1 + >SYSCALL printf + +.7 inc USRID + ldx USRID + cpx #K.USR.MAX+1 + bne .1 + +.8 lda #0 tell TSKMGR that all done ok, but + sec we do not want to stay in memory +.9 rts +*-------------------------------------- +CS.EVENT sec + rts +*-------------------------------------- +CS.QUIT clc + rts +*-------------------------------------- +CS.END +MSG0 .AZ "Usr Name Dev" +MSG1 .AZ "%3d %16s %16s\r\n" +*-------------------------------------- + .DUMMY + .OR 0 +DS.START +DS.END + .ED +*-------------------------------------- +MAN +SAVE USR/SRC/BIN/WHO.S +ASM diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 9dc3c0f9..235fdc7d 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -1,6 +1,5 @@ NEW -PREFIX -AUTO 4,1 + AUTO 3,1 *-------------------------------------- K.VER .EQ $5D00 93.0 K.ENV.SIZE .EQ 256 @@ -20,17 +19,17 @@ K.OF.MAX .EQ 32 K.EVT.MAX .EQ 4 K.SCR.MAX .EQ 6 K.TTY.MAX .EQ 4 +K.USR.MAX .EQ 16 *-------------------------------------- ZPDRV .EQ $20 32 bytes ZPLIB .EQ $40 32 bytes *-------------------------------------- * PS Context : 48 bytes MAX *-------------------------------------- -CORE.EvtIndex .EQ $D0 -CORE.EvtCount .EQ $D1 -CORE.PSIndex .EQ $D2 -CORE.PSCount .EQ $D3 +CORE.PSIndex .EQ $D0 +CORE.PSCount .EQ $D1 +pUser .EQ $D2 pEvent .EQ $D4 pPs .EQ $D6 *-------------------------------------- @@ -491,7 +490,6 @@ S.FD.PIPE .EQ 10 * PS STRUCT *-------------------------------------- S.PS.F .EQ 0 -S.PS.F.NOHUP .EQ %10000000 S.PS.F.INIT .EQ %10000000 S.PS.F.RUN .EQ %01000000 S.PS.F.QUIT .EQ %00100000 @@ -499,7 +497,7 @@ S.PS.F.DOEVENT .EQ %00010000 S.PS.F.HOLD .EQ %00001000 S.PS.F.SLEEP .EQ %00000100 S.PS.F.EVENT .EQ %00000010 -S.PS.F.DUPENV .EQ %00000001 +S.PS.F.NOHUP .EQ %00000001 S.PS.PPID .EQ 1 S.PS.PID .EQ 2 S.PS.CPID .EQ 3 @@ -516,7 +514,7 @@ S.PS.RC .EQ 13 S.PS.ARGC .EQ 14 S.PS.hARGV .EQ 15 -S.PS.UID .EQ 16 +S.PS.hUsr .EQ 16 S.PS.A .EQ 17 S.PS.X .EQ 18 @@ -580,12 +578,15 @@ S.STAT.MODE .EQ 0 S.STAT.MODE.XO .EQ $0001 S.STAT.MODE.WO .EQ $0002 S.STAT.MODE.RO .EQ $0004 +S.STAT.MODE.FO .EQ $0007 S.STAT.MODE.XG .EQ $0008 S.STAT.MODE.WG .EQ $0010 S.STAT.MODE.RG .EQ $0020 +S.STAT.MODE.FG .EQ $0038 S.STAT.MODE.XU .EQ $0040 S.STAT.MODE.WU .EQ $0080 S.STAT.MODE.RU .EQ $0100 +S.STAT.MODE.FU .EQ $01C0 *S.STAT.MODE.SST .EQ $0200 *S.STAT.MODE.SGID .EQ $0400 *S.STAT.MODE.SUID .EQ $0800 diff --git a/INC/KERNEL.I.txt b/INC/KERNEL.I.txt index 1a3a9c2c..812f8e04 100644 --- a/INC/KERNEL.I.txt +++ b/INC/KERNEL.I.txt @@ -21,7 +21,10 @@ PS.Table.Stats .EQ $13E0 K.PS.MAX OF.Table.hPath .EQ $1400 K.OF.MAX OF.Table.hFD .EQ $1420 K.OF.MAX *-------------------------------------- -A2osX.EndTables .EQ $1440 +USR.Table.hPW .EQ $1440 K.USR.MAX +USR.Table.hFile .EQ $1450 K.USR.MAX +*-------------------------------------- +A2osX.EndTables .EQ $1460 *-------------------------------------- MAN SAVE INC/KERNEL.I diff --git a/SBIN/LOGIN.S.txt b/SBIN/LOGIN.S.txt index f32daf49..568bc14c 100644 --- a/SBIN/LOGIN.S.txt +++ b/SBIN/LOGIN.S.txt @@ -1,6 +1,5 @@ NEW -PREFIX -AUTO 4,1 + AUTO 3,1 .LIST OFF .OP 65C02 .OR $2000 @@ -8,11 +7,19 @@ AUTO 4,1 *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I + .INB INC/LIBCRYPT.I *-------------------------------------- .DUMMY .OR ZPBIN ZS.START -ZPPTR1 .BS 2 +ZPRetryCnt .BS 1 +ZPbValidUser .BS 1 + +ZPhGetLine .BS 1 +ZPGetLinePtr .BS 2 +ZPbGetLineSecret .BS 1 +ZPGetLineLen .BS 1 +ZPGetLineMax .BS 1 ZS.END .ED *-------------------------------------- @@ -28,7 +35,7 @@ CS.START cld .DA #0 .DA CS.END-CS.START Code Size (without Constants) .DA DS.END-DS.START Data SegmentSize - .DA #16 Stack Size + .DA #64 Stack Size .DA #ZS.END-ZS.START Zero Page Size .DA 0 *-------------------------------------- @@ -42,8 +49,9 @@ L.MSG.NOPASSWD .DA MSG.NOPASSWD L.LIBCRYPT .DA LIBCRYPT L.MSG.LOGIN .DA MSG.LOGIN L.MSG.PASSWORD .DA MSG.PASSWORD -L.MSG.ECHOCRLF .DA MSG.ECHOCRLF -L.MSG.ECHODEL .DA MSG.ECHODEL +L.MSG.BAD .DA MSG.BAD +L.MSG.CRLF .DA MSG.CRLF +L.MSG.BS .DA MSG.BS L.ENV.SHELL .DA ENV.SHELL L.SHELL .DA SHELL L.ENV.HOME .DA ENV.HOME @@ -53,7 +61,7 @@ L.HOME .DA HOME CS.INIT clc rts *-------------------------------------- -CS.RUN >PUSHEA.G PW +CS.RUN >PUSHW pData PW lda #0 >SYSCALL GetPWUID bcc CS.RUN.AUTH @@ -66,7 +74,7 @@ CS.RUN >PUSHEA.G PW jsr CS.RUN.SETENV bcs CS.RUN.9 - >PUSHBI S.PS.F.HOLD+S.PS.F.DUPENV + >PUSHBI S.PS.F.HOLD >LDYA L.SHELL >SYSCALL ExecL CS.RUN.9 rts @@ -77,51 +85,82 @@ CS.RUN.AUTH >LDYA L.LIBCRYPT sta hLIBCRYPT - >STZ.G INPUT.PrevCR + >LDYAI 256 + >SYSCALL getmem + bcs CS.RUN.9 - >PUSHBI 0 + >STYA ZPGetLinePtr + stx ZPhGetLine + + lda #3 + sta ZPRetryCnt + +.1 >PUSHBI 0 >LDYA L.MSG.LOGIN >SYSCALL printf bcs .9 - lda #0 Echo all caracters - jsr INPUT.RESET - -.1 >SYSCALL GetChar + lda #16 + clc + jsr CS.RUN.GetLine bcs .9 - jsr INPUT.CHARIN - jsr INPUT.LINEIN - bcc .1 + >PUSHW pData + >LDYA ZPGetLinePtr + >SYSCALL GetPWName + ror ZPbValidUser >PUSHBI 0 >LDYA L.MSG.PASSWORD >SYSCALL printf bcs .9 - lda #'*' - jsr INPUT.RESET - -.2 >SYSCALL GetChar + lda #128 + sec + jsr CS.RUN.GetLine bcs .9 - jsr INPUT.CHARIN - jsr INPUT.LINEIN - bcc .2 - >PUSHBI 0 - >LDYA L.MSG.ECHOCRLF + >LDYA L.MSG.CRLF >SYSCALL printf bcs .9 - jsr CS.RUN.SETENV + jsr CS.RUN.CHECK + bcc CS.RUN.LOGIN + + >PUSHBI 0 + >LDYA L.MSG.BAD + >SYSCALL printf bcs .9 - >PUSHBI S.PS.F.HOLD+S.PS.F.DUPENV + dec ZPRetryCnt + bne .1 + + lda #E.IUSR +* sec +.9 rts +*-------------------------------------- +CS.RUN.LOGIN jsr CS.RUN.SETENV + bcs .9 + + >PUSHBI S.PS.F.HOLD >LDYA L.SHELL >SYSCALL ExecL .9 rts *-------------------------------------- +CS.RUN.CHECK rol ZPbValidUser + bcs .9 + + >PUSHW ZPGetlinePtr + >PUSHW ZPGetlinePtr + >LIBCALL hLIBCRYPT,LIBCRYPT.MD5 + + >PUSHEA.G PW+S.PW.PASSWD + >LDYA ZPGetlinePtr + >SYSCALL strcmp + +.9 rts +*-------------------------------------- CS.RUN.SETENV >PUSHW L.HOME >LDYA L.ENV.HOME >SYSCALL setenv @@ -140,7 +179,12 @@ CS.DOEVENT sec rts *-------------------------------------- -CS.QUIT lda hLIBCRYPT +CS.QUIT lda ZPhGetLine + beq .1 + + >SYSCALL freemem + +.1 lda hLIBCRYPT beq .8 >SYSCALL UnloadLib @@ -148,105 +192,70 @@ CS.QUIT lda hLIBCRYPT .8 clc rts *-------------------------------------- -* PRIVATE -*-------------------------------------- -INPUT.RESET >STA.G INPUT.PassChar - - >STZ.G INPUT.BUF - >STA.G INPUT.Status - rts -*-------------------------------------- -INPUT.CHARIN tax save char... - - >LDA.G INPUT.Status - bmi .9 +CS.RUN.GetLine sta ZPGetLineMax + ror ZPbGetLineSecret + stz ZPGetLineLen - lda #INPUT.BUF - clc - adc pData - sta ZPPTR1 - lda pData+1 - adc /INPUT.BUF - sta ZPPTR1+1 - - cpx #$20 Control Char? - bcc .2 - - cpx #C.DEL - beq INPUT.CHARIN.DEL - - lda (ZPPTR1) - - cmp #INPUT.BUF.SIZE Buffer full? - beq .9 - - inc - sta (ZPPTR1) - tay - - txa - sta (ZPPTR1),y - - >LDA.G INPUT.PassChar - bne .1 - - txa - -.1 >SYSCALL PutChar +.1 >SYSCALL getchar bcs .9 - >STZ.G INPUT.PrevCR - rts + cmp #C.SPACE + bcc .2 -.2 cpx #C.CR - bne .3 - - txa - >STA.G INPUT.PrevCR - - lda #$80 - >STA.G INPUT.Status - rts - -.3 cpx #C.LF - bne .4 - - >LDA.G INPUT.PrevCR + ldy ZPGetLineLen + cpy ZPGetLineMax beq .1 -.4 >STZ.G INPUT.PrevCR + sta (ZPGetLinePtr),y + iny + sty ZPGetLineLen -.9 rts -*-------------------------------------- -INPUT.CHARIN.DEL - lda (ZPPTR1) + bit ZPbGetLineSecret + bmi .1 + + >SYSCALL putchar + bra .1 + +.2 cmp #3 Ctrl-C + beq .9 + + cmp #C.CR beq .8 - dec - sta (ZPPTR1) + cmp #C.BS + bne .1 + + ldy ZPGetLineLen + beq .1 + dec ZPGetLineLen + + bit ZPbGetLineSecret + bmi .1 >PUSHBI 0 - >LDYA L.MSG.ECHODEL + >LDYA L.MSG.BS >SYSCALL printf + bra .1 -.8 clc - rts -*-------------------------------------- -INPUT.LINEIN ldy #INPUT.Status - lda (pData),y - asl CS if a line is in the buffer - rts +.8 ldy ZPGetLineLen + lda #0 + sta (ZPGetLinePtr),y + + clc + +.9 rts *-------------------------------------- CS.END *-------------------------------------- LIBCRYPT .AZ "libcrypt" hLIBCRYPT .BS 1 MSG.NOPASSWD .AS "\r\n\r\nA2osX-Login:No ETC/PASSWD file present, Logged as ROOT.\r\n" - .AZ "Consider adding ROOT password with USERADD command.\r\n\r\n" + .AS "Consider adding ROOT password with USERADD command.\r\n" +MSG.CRLF .AZ "\r\n" MSG.LOGIN .AZ "\r\nlogin:" MSG.PASSWORD .AZ "\r\npassword:" -MSG.ECHOCRLF .AZ "\r\n" -MSG.ECHODEL .DA #C.BS,#C.SPACE,#C.BS,#0 +MSG.BAD .AZ "Bad user or password\r\n" +MSG.BS .DA #C.BS,#C.SPACE,#C.BS,#0 ENV.SHELL .AZ "SHELL" ENV.HOME .AZ "HOME" SHELL .AZ "${ROOT}BIN/SH" @@ -256,10 +265,6 @@ HOME .AZ "${ROOT}ROOT/" .DUMMY .OR 0 DS.START -INPUT.BUF .BS INPUT.BUF.SIZE+1 -INPUT.Status .BS 1 -INPUT.PassChar .BS 1 -INPUT.PrevCR .BS 1 PW .BS S.PW DS.END .ED diff --git a/SBIN/TELNETD.S.txt b/SBIN/TELNETD.S.txt index 65c8fcec..c634d6b6 100644 --- a/SBIN/TELNETD.S.txt +++ b/SBIN/TELNETD.S.txt @@ -1,6 +1,5 @@ NEW -PREFIX -AUTO 4,1 + AUTO 3,1 .LIST OFF .OP 65C02 .OR $2000 @@ -214,7 +213,7 @@ CS.RUN.CLIENT >SLEEP give some time for TCPIP SYN/ACK >LEA.G CmdBuf >SYSCALL sprintf - >PUSHBI S.PS.F.DUPENV + >PUSHBI 0 >LEA.G CmdBuf >SYSCALL execl bcc .8 diff --git a/SYS/KERNEL.S.CORE.txt b/SYS/KERNEL.S.CORE.txt index b2fda2c1..5621dc75 100644 --- a/SYS/KERNEL.S.CORE.txt +++ b/SYS/KERNEL.S.CORE.txt @@ -145,37 +145,6 @@ CORE.UpdateParentPS eor #S.PS.F.HOLD release Parent PS HOLD... sta (ZPPtr1) - lda (pPs) - bit #S.PS.F.DUPENV - bne .8 - - ldy #S.PS.hENV no dup, check if updating Parent PS - - jsr .1 - - ldy #S.PS.hPREFIX -*-------------------------------------- -.1 lda (pPs),y hMEM... - cmp (ZPPtr1),y - beq .8 same, no update - - tax save new hMEM - lda #0 - sta (pPs),y reset - - lda (ZPPtr1),y get parent hMEM - phy - jsr K.freemem discard.... - ply - txa put new hMEM in parent - sta (ZPPtr1),y - cpy #S.PS.hENV - bne .8 - - dey #S.PS.ENVPAGECNT - lda (pPs),y - sta (ZPPtr1),y update page count - .8 rts *-------------------------------------- * CORE.GetEvents : @@ -537,14 +506,10 @@ CORE.PSFree sta .10+1 Save PS ID ldy #S.PS.hARGV jsr .8 - lda (ZPPtr1) get S.PS.F - and #S.PS.F.DUPENV do we have to discard duplicated env ? - beq .1 - ldy #S.PS.hENV jsr .8 -.1 ldy #S.PS.hPREFIX + ldy #S.PS.hPREFIX jsr .8 ldy #S.PS.hStdOut @@ -583,6 +548,9 @@ CORE.PSFree sta .10+1 Save PS ID bne .4 .9 rts *-------------------------------------- +CORE.EvtIndex .BS 1 +CORE.EvtCount .BS 1 +*-------------------------------------- MAN SAVE USR/SRC/SYS/KERNEL.S.CORE LOAD USR/SRC/SYS/KERNEL.S diff --git a/SYS/KERNEL.S.DIRENT.txt b/SYS/KERNEL.S.DIRENT.txt index e023fe69..bd6dd146 100644 --- a/SYS/KERNEL.S.DIRENT.txt +++ b/SYS/KERNEL.S.DIRENT.txt @@ -468,20 +468,11 @@ K.ReadDir.ADDF K.ReadDir.AddAccess ldy #$1E ProDOS Access lda (ZPPtr3),y + + jsr STAT.Access2Mode - ldx #0 - bit #$01 ProDOS R - beq .2 - ldx #S.STAT.MODE.RO - -.2 bit #$C2 ProDOS D,Rn,W - beq .3 - txa - ora #S.STAT.MODE.XO+S.STAT.MODE.WO - .HS 89 bit imm to skip txa - -.3 txa - sta K.S.STAT+S.STAT.MODE + sty K.S.STAT+S.STAT.MODE + sta K.S.STAT+S.STAT.MODE+1 *-------------------------------------- K.ReadDir.AddTime >PUSHWI K.S.STAT+S.STAT.CTIME diff --git a/SYS/KERNEL.S.ENV.txt b/SYS/KERNEL.S.ENV.txt index 365057b3..62944093 100644 --- a/SYS/KERNEL.S.ENV.txt +++ b/SYS/KERNEL.S.ENV.txt @@ -544,7 +544,7 @@ ENV.StrVarsPWD ldy #S.PS.hPREFIX jsr K.GetMemPtr jmp ENV.AddYAToBuf *-------------------------------------- -ENV.StrVarsUID ldy #S.PS.UID +ENV.StrVarsUID ldy #S.PS.hUsr .HS 2C *-------------------------------------- ENV.SysVarsArgC ldy #S.PS.ARGC diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 00d05c66..58e9e4aa 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -334,6 +334,12 @@ MemMgrInit >LDYAI Mem.MHiMem dex bpl .5 + ldx #K.USR.MAX*2-1 + +.6 stz USR.Table.hPW,x + dex + bpl .6 + rts *-------------------------------------- SysScrInit lda #"S" @@ -1075,11 +1081,38 @@ PwdMgrInit >LDYAI MSG.PWD >PUSHBI O.RDONLY >LDYAI ETCPASSWD >SYSCALL LoadStkObj - bcs .9 + bcs .1 stx PWD.hDB >STYA PWD.DBSize .9 rts *-------------------------------------- +.1 >LDYAI PwdMgr.ROOT.Size + jsr K.Getmem + >STYA pUser + stx USR.Table.hPW + + ldy #PwdMgr.ROOT.Size-1 + +.2 lda PwdMgr.ROOT,y + sta (pUser),y + dey + bpl .2 + + ldy #S.PS.hStdIn + lda (pPS),y + + sta USR.Table.hFile + rts +*-------------------------------------- +PwdMgr.ROOT .DA #0 UID + .DA #0 GID + .BS 17 PASSWD + .AZ "ROOT" NAME + .AZ "Root User" GECOS + .AZ "${ROOT}ROOT/" DIR + .AZ "${ROOT}BIN/SH" SHELL +PwdMgr.ROOT.Size .EQ *-PwdMgr.ROOT +*-------------------------------------- * Modified CHARGET/CHARGOT for ROM CALL * CHRGET .EQ $B1 - C8 *-------------------------------------- diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index d8841632..6165ca94 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -537,7 +537,7 @@ MEM.Kernel.JMP jmp (SYS.Kernel.JMP,x) * Y,A = File Length * X = hMem of Loaded Object in AUX mem *\-------------------------------------- -K.LoadStkObj >SYSCALL LoadFile +K.LoadStkObj >SYSCALL LoadTxtFile To get ending \0 bcs .99 sty .81+1 sta .82+1 @@ -569,11 +569,6 @@ K.LoadStkObj >SYSCALL LoadFile sec Main To Aux jsr AuxMove - - lda #0 - sta SETWRITEAUX - sta (A2L) - sta CLRWRITEAUX .8 lda #$ff SELF MODIFIED jsr K.FreeMem release MAIN memory diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index af091f1a..52bc9dd8 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -151,26 +151,12 @@ PS.CreateChild ldx #0 ldy #S.PS.hPREFIX sta (PS.NewPSPtr),y - lda #S.PS.F.DUPENV - bit PS.Flags need to create ENV ? - beq .6 no... - - sta (PS.NewPSPtr) Mark this PS with DUPENV flag - jsr ENV.Dup dup hENV from parent PS bcs .9 ldy #S.PS.hENV - bra .8 A = hMem, X = PageCnt - -.6 ldy #S.PS.ENVPAGECNT reuse hENV/pageCnt from parent PS - lda (pPs),y - tax - iny - lda (pPs),y - -.8 sta (PS.NewPSPtr),y + sta (PS.NewPSPtr),y txa dey sta (PS.NewPSPtr),y @@ -183,8 +169,9 @@ PS.CreateChild ldx #0 cpy #S.PS.hStdErr+1 bne .81 - bit PS.Flags S.PS.F.NOHUP - bmi .5 + lda #S.PS.F.NOHUP + bit PS.Flags + bne .5 ldy #S.PS.PID lda (pPs),y diff --git a/SYS/KERNEL.S.PWDX.txt b/SYS/KERNEL.S.PWDX.txt index df871c9d..55eaec1a 100644 --- a/SYS/KERNEL.S.PWDX.txt +++ b/SYS/KERNEL.S.PWDX.txt @@ -66,14 +66,21 @@ PWD.GetPWName lda PWD.hDB jsr K.GetmemPtr >STYA ZPPtr3 + + >LDYA ZPPtr1 + >STYA TXTPTR + + ldy #0 + jsr MEM.TXTPTR.GetY + beq .99 .1 lda (ZPPtr3) beq .99 - + ldy #$ff .2 iny - lda (ZPPtr1),y + jsr MEM.TXTPTR.GetY beq .4 cmp (ZPPtr3),y @@ -140,7 +147,9 @@ PWD.InitDB jsr PWD.GetRecordLen clc .9 rts *-------------------------------------- -PWD.Record2PM ldy #0 +PWD.Record2PM sta CLRWRITEAUX + + ldy #0 ldx #0 NAME @@ -223,6 +232,9 @@ PWD.Record2PM ldy #0 .10 lda #0 jsr MEM.PutCharPtr2 + + sta SETWRITEAUX + clc rts *-------------------------------------- diff --git a/SYS/KERNEL.S.STAT.txt b/SYS/KERNEL.S.STAT.txt index b9537ff8..af70cd83 100644 --- a/SYS/KERNEL.S.STAT.txt +++ b/SYS/KERNEL.S.STAT.txt @@ -131,22 +131,17 @@ K.Stat.I >PULLW ZPPtr1 Get StatBuf >MLICALL MLIGETFILEINFO bcs .9 + + lda K.MLI.PARAMS+S.FI.A + jsr STAT.Access2Mode - ldx K.MLI.PARAMS+S.FI.A - - lda #S.STAT.MODE.XO+S.STAT.MODE.WO+S.STAT.MODE.RO - cpx #S.FI.A.FULL - beq .2 - - lda #S.STAT.MODE.XO+S.STAT.MODE.RO - cpx #S.FI.A.R - beq .2 - - lda #0 - -.2 ldy #S.STAT.MODE +.2 phy + ldy #S.STAT.MODE+1 sta (ZPPtr1),y - + dey + pla + sta (ZPPtr1),y + ldx #K.Stat.DST-K.Stat.SRC .3 ldy K.Stat.SRC-1,x @@ -165,6 +160,18 @@ K.Stat.SRC .DA #S.FI.T K.Stat.DST .DA #S.STAT.P.TYPE .DA #S.STAT.P.AUXTYPE,#S.STAT.P.AUXTYPE+1 .DA #S.STAT.BLOCKS,#S.STAT.BLOCKS+1 +*-------------------------------------- +STAT.Access2Mode + and #S.FI.A.FULL + cmp #S.FI.A.FULL + bne .1 + ldy #S.STAT.MODE.FO+S.STAT.MODE.FG+S.STAT.MODE.FU + lda /S.STAT.MODE.FO+S.STAT.MODE.FG+S.STAT.MODE.FU + rts + +.1 ldy #S.STAT.MODE.FO+S.STAT.MODE.FG+S.STAT.MODE.XU+S.STAT.MODE.RU + lda /S.STAT.MODE.FO+S.STAT.MODE.FG+S.STAT.MODE.XU+S.STAT.MODE.RU + rts */------------------------------------- * # MKDir * create a directory