A2osX/SYS/KERNEL.S.PWDX.txt
2019-04-24 17:34:11 +02:00

536 lines
7.5 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
AUTO 3,1
*--------------------------------------
X.PWD jmp (.1-SYS.GetPWUID,x)
.1 .DA PWD.GetPWUID
.DA PWD.GetPWName
.DA PWD.PutPW
*--------------------------------------
* ZPPtr1 : UID / pName
* ZPPtr2 : pPW
* ZPPtr3 : pDB
* USERNAME:PASSWORD:UID:GID:GECOS:HOME:SHELL\CR
* ....\CR
* \0
*--------------------------------------
PWD.GetPWUID lda PWD.hDB
beq .9
jsr K.GetmemPtr
>STYA ZPPtr3
.1 lda (ZPPtr3)
beq .99
ldy #0
.2 lda (ZPPtr3),y
iny
cmp #':'
bne .2
.3 lda (ZPPtr3),y
iny
cmp #':'
bne .3
jsr PWD.GetByte
cmp ZPPtr1+1
beq .8
.4 iny
lda (ZPPtr3),y
cmp #C.CR
bne .4
tya
sec
adc ZPPtr3
sta ZPPtr3
bcc .1
inc ZPPtr3+1
bra .1
.8 jmp PWD.Record2PW
.9 lda #E.IPWDDB
sec
rts
.99 lda #E.IUSR
sec
rts
*--------------------------------------
PWD.GetPWName lda PWD.hDB
beq .9
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
jsr MEM.TXTPTR.GetY
beq .4
cmp (ZPPtr3),y
beq .2
.3 iny
lda (ZPPtr3),y
cmp #C.CR
bne .3
tya
sec
adc ZPPtr3
sta ZPPtr3
bcc .1
inc ZPPtr3+1
bra .1
.4 lda (ZPPtr3),y
cmp #':'
bne .3
jmp PWD.Record2PW
.9 lda #E.IPWDDB
sec
rts
.99 lda #E.IUSR
sec
rts
*--------------------------------------
PWD.PutPW >LDYA ZPPtr2
>STYA TXTPTR
lda PWD.hDB
bne .1
ldy #S.PW.UID
jsr MEM.TXTPTR.GetY
bne .9 Must be ROOT user
jmp PWD.InitDB
.1 jsr K.GetmemPtr
>STYA PWD.DBPtr
jsr PWD.DeleteRecord
jsr PWD.GetRecordLen
clc
adc PWD.DBSize
sta PWD.DBSize
bcc .2
inc PWD.DBSize+1
.2 >LDYA PWD.DBPtr
>STYA ZPPtr4
>LDYA PWD.DBSize
jsr K.Getmem
bcs .99
>STYA ZPPtr3
>STYA PWD.DBPtr
ldy #0
.3 lda (ZPPtr4),y
sta (ZPPtr3),y
beq .4
iny
bne .3
inc ZPPtr4
inc ZPPtr3
bra .3
.4 tya
clc
adc ZPPtr3
sta ZPPtr3
bcc .5
inc ZPPtr3+1
.5 lda PWD.hDB
stx PWD.hDB
jsr K.Freemem
jsr PWD.StoreRecord
inc PWD.bDirty
clc
rts
.9 lda #E.IPWDDB
sec
.99 rts
*--------------------------------------
PWD.InitDB jsr PWD.GetRecordLen
tay
lda #0
>STYA PWD.DBSize
jsr K.getmem
bcs .9
>STYA ZPPtr3
>STYA PWD.DBPtr
stx PWD.hDB
jsr PWD.StoreRecord
inc PWD.bDirty
clc
.9 rts
*--------------------------------------
* ZPPtr2 = pPW
*--------------------------------------
PWD.DeleteRecord
jsr PWD.FindRecord
bcs .9
.1 iny
lda (ZPPtr3),y
cmp #C.CR
bne .1
sty .8+1
tya
sec
adc ZPPtr3
sta ZPPtr4
lda ZPPtr3+1
adc #0
sta ZPPtr4+1
ldy #$ff
.2 iny
lda (ZPPtr4),y
sta (ZPPtr3),y
bne .2
lda PWD.DBSize
sec
.8 sbc #$ff SELF MODIFIED
sta PWD.DBSize
bcs .9
dec PWD.DBSize+1
.9 rts
*--------------------------------------
PWD.FindRecord >LDYA PWD.DBPtr
>STYA ZPPtr3
>LDYA ZPPtr2
>STYA TXTPTR
.2 lda (ZPPtr3)
beq .9 End of DB
ldy #$ff
.3 iny
jsr MEM.TXTPTR.GetY
beq .4
cmp (ZPPtr3),y
beq .3
bra .5
.4 lda (ZPPtr3),y
beq .8
.5 iny
lda (ZPPtr3),y
cmp #C.CR
bne .5
tya
sec
adc ZPPtr3
sta ZPPtr3
bcc .2
inc ZPPtr3+1
bra .2
.8 clc
rts
.9 sec
rts
*--------------------------------------
PWD.Record2PW sta CLRWRITEAUX
ldy #0
ldx #0 NAME
.1 lda (ZPPtr3),y
iny
cmp #':'
beq .2
jsr MEM.PutCharPtr2
inx
bra .1
.2 lda #0
jsr MEM.PutCharPtr2
inx
cpx #S.PW.PASSWD
bne .2
.3 lda (ZPPtr3),y
iny
cmp #':'
beq .4
jsr MEM.PutCharPtr2
inx
bra .3
.4 lda #0
jsr MEM.PutCharPtr2
inx
cpx #S.PW.UID
bne .4
jsr PWD.GetByte UID
jsr MEM.PutCharPtr2
jsr PWD.GetByte GID
jsr MEM.PutCharPtr2
ldx #S.PW.GECOS
.5 lda (ZPPtr3),y
iny
cmp #':'
beq .6
jsr MEM.PutCharPtr2
inx
bra .5
.6 lda #0
jsr MEM.PutCharPtr2
inx
cpx #S.PW.DIR
bne .6
.7 lda (ZPPtr3),y
iny
cmp #':'
beq .8
jsr MEM.PutCharPtr2
inx
bra .7
.8 lda #0
jsr MEM.PutCharPtr2
inx
cpx #S.PW.SHELL
bne .8
.9 lda (ZPPtr3),y
iny
cmp #C.CR
beq .10
jsr MEM.PutCharPtr2
inx
bra .9
.10 lda #0
jsr MEM.PutCharPtr2
sta SETWRITEAUX
clc
rts
*--------------------------------------
PWD.GetByte stz .8+1
.1 lda (ZPPtr3),y
iny
cmp #':'
beq .8
and #$f
pha
lda .8+1
asl
asl
clc
adc .8+1
asl
sta .8+1
pla
clc
adc .8+1
sta .8+1
bra .1
.8 lda #$ff
rts
*--------------------------------------
PWD.StoreRecord sec
.HS 90 BCC
*--------------------------------------
PWD.GetRecordLen
clc
ldx #0
ldy #S.PW.NAME-1
jsr PWD.StoreString
lda #':'
jsr PWD.StoreChar
ldy #S.PW.PASSWD-1
jsr PWD.StoreString
lda #':'
jsr PWD.StoreChar
ldy #S.PW.UID
jsr MEM.TXTPTR.GetY
jsr PWD.StoreByte
lda #':'
jsr PWD.StoreChar
iny S.PW.UID
jsr MEM.TXTPTR.GetY
jsr PWD.StoreByte
lda #':'
jsr PWD.StoreChar
* iny S.PW.GECOS
jsr PWD.StoreString
lda #':'
jsr PWD.StoreChar
ldy #S.PW.DIR-1
jsr PWD.StoreString
lda #':'
jsr PWD.StoreChar
ldy #S.PW.SHELL-1
jsr PWD.StoreString
lda #C.CR
jsr PWD.StoreChar
txa
rts
*--------------------------------------
PWD.StoreString iny
jsr MEM.TXTPTR.GetY
beq .8
jsr PWD.StoreChar
bra PWD.StoreString
.8 rts
*--------------------------------------
PWD.StoreByte php
phx
stz .2+1
stz .3+1
ldx #8
sed
.1 asl
pha
.2 lda #$ff Self Modified
adc .2+1
sta .2+1
.3 lda #$ff Self Modified
adc .3+1
sta .3+1
pla
dex
bne .1
cld
plx
plp
lda .3+1
beq .4
jsr PWD.StoreChar30
.4 lda .2+1
beq PWD.StoreChar30
php
lsr
lsr
lsr
lsr
plp
and #$0f plp corrupt Z
beq .5
jsr PWD.StoreChar30
.5 lda .2+1
and #$0f
*--------------------------------------
PWD.StoreChar30 ora #$30
PWD.StoreChar inx
bcc .9 Dry run, no store
sta (ZPPtr3)
inc ZPPtr3
bne .9
inc ZPPtr3+1
.9 rts
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.PWDX
LOAD USR/SRC/SYS/KERNEL.S
ASM