home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
rtsi.com
/
2014.01.www.rtsi.com.tar
/
www.rtsi.com
/
UNIFLEX
/
UNIFLEX
/
UniFLEX_Std.Utils1.tar.Z
/
UniFLEX_Std.Utils1.tar
/
utils1
/
owner
< prev
next >
Wrap
Text File
|
1981-09-01
|
5KB
|
262 lines
opt pag,nol
ttl Set Owner Utility
lib sysdef
opt lis
pag
info UniFLEX owner
info Version 1, Released August 25, 1980
info Copyright, (C) 1980, by
info Technical Systems Consultants, Inc.
info All rights reserved.
* program starts here
org 0
own ldd 0,s get arg count
cmpd #3 must be at least 3!
lblo synerr or error
leay 4,s get arg pointer
ldx 0,y++ get arg 1
sty argpt save position
lda 0,x get 1st char
cmpa #'9 is it digit?
bls own3
stx bufpt save position
lbsr fndnam find name in password file
bes own8 no name?
ldx nxtfld get line pointer
own2 lda 0,x+ look for next field
cmpa #': is it ':'?
bne own2
pshs x save start pos
own25 lda 0,x+ look for end
cmpa #':
bne own25
clr -1,x set null term
puls x
own3 lbsr decvt do number conversion (uid)
lbne synerr bad number?
std icho3 save user id
own4 ldx argpt get arg pointer
ldd 0,x++ get next arg
beq own6 all done?
stx argpt save arg pointer
std icho2 save file name ptr
sys ind,icho do chown call
bec own4
lbra prter report error
own6 ldd #0 set ok status
sys term term task
own8 ldd #2 set file desc
sys write,noums,NOSZ output error
ldd #$ff set status
sys term term task
pag
*
* fndnam
*
* Find name in password file. Return error set
* if error.
*
fndnam ldx #fbuf point to file buffer
stx linpt init buf ptrs
stx linend
sys open,nfile,0 open password file
bes fndna4 error?
std namfd save file desc
fndna2 bsr getlin get a line from the file
beq fndna5 eof?
ldx bufpt point to name
ldy #linbuf point to line
bsr cmpnam compare names
bne fndna2 if no compare, repeat
sty nxtfld save field pointer
ldd namfd get file desc
sys close close the file
clc clear error
fndna4 rts return
fndna5 ldd namfd get file desc
sys close close the file
sec set error
rts return
*
* getlin
*
* Get a line from the password file. Put it
* in the linbuf.
*
getlin ldx #linbuf point to line buffer
getli2 bsr gtch get a character
beq getli4 eof?
sta 0,x+ save character in buffer
cmpa #$d end of line?
bne getli2
clz set ok status
getli4 rts return
pag
*
* gtch
*
* Get a character from the password file. Return
* eq status if eof.
*
gtch pshs x save x
gtch2 ldx linpt get line pointer
cmpx linend end of buffer?
bne gtch4
ldd namfd get file desc
sys read,fbuf,512 read in some file
bes gtch6 error?
cmpd #0 eof?
beq gtch6
ldx #fbuf point to buffer begin
stx linpt save pointer
leax d,x mark end of buffer
stx linend
ldx linpt reset pointer
gtch4 lda 0,x+ get next character
stx linpt save pointer
clz set ok status
puls x,pc return
gtch6 sez set error
puls x,pc return
*
* cmpnam
*
* Compare name pointed at by X to name pointed
* at by Y. Return eq or ne status.
*
cmpnam lda 0,x+ get a character
beq cmpna4 end of name?
cmpa 0,y+ compare chars
beq cmpnam repeat?
rts return ne
cmpna4 lda 0,y+ get next
beq cmpna6 null?
cmpa #': end of field?
cmpna6 rts return
pag
*
* decvt
*
* Decimal convert routine. Convert ascii string
* pointed at by x and null terminated.
* Return number in D and ne if error.
*
decvt ldd #0 set up zero
pshs d
decvt2 lda 0,x+ get character
beq decvt4 end of list?
cmpa #'0 check for valid number
blo decvt3 error?
cmpa #'9
bhi decvt3
anda #$F mask character
pshs a save digit
ldd 1,s get number
aslb multiply by 8
rola
aslb
rola
aslb
rola
addd 1,s add in original twice
addd 1,s
addb 0,s+ add in new digit
adca #0
std 0,s save result
bra decvt2 repeat
decvt3 clz set error
decvt4 puls d,pc return
pag
*
* prter
*
* Print error message.
*
prter std erno save error number
ldd #2 set file desc
sys write,ermsg1,ERSZ1
ldx icho2 get file name
stx iwrt2 set in os call
clrb set count to 0
prter2 lda 0,x+ look for name end
beq prter4
incb bump char count
bra prter2
prter4 std iwrt3 save count in call
ldd #2 set up file desc
sys ind,iwrt output file name
ldd #2 set file desc
sys write,ermsg2,ERSZ2 output rest of message
ldd erno get error status
sys term task
*
* synerr
*
* Report syntax error.
*
synerr ldd #2 set file desc
sys write,synmsg,SYSZ output message
ldd #$ff set status
sys term term task
pag
* strings and storage
synmsg fcc 'Command syntax error.',$d
SYSZ equ *-synmsg
noums fcc 'Invalid user name.',$d
NOSZ equ *-noums
ermsg1 fcc "Can't set owner for '"
ERSZ1 equ *-ermsg1
ermsg2 fcc "'.",$d
ERSZ2 equ *-ermsg2
nfile fcc '/etc/log/password',0
icho fcb chown change owner sys call
icho2 fdb 0
icho3 fdb 0
iwrt fcb write write sys call
iwrt2 fdb 0
iwrt3 fdb 0
argpt fdb 0 arg pointer
bufpt fdb 0 buffer pointer
linpt fdb 0 line pointer
linend fdb 0 line end marker
namfd fdb 0 name file descriptor
nxtfld fdb 0 field pointer for name file
erno fdb 0 error number
linbuf rmb 256 line buffer
org $e00
fbuf rmb 512 file buffer
end own