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
/
perms
< prev
next >
Wrap
Text File
|
1982-07-22
|
4KB
|
233 lines
opt pag,nol
ttl Set Permissions Utility
lib sysdef
opt lis
pag
info UniFLEX perms
info Version 1.01, Released July 20, 1982
info Copyright, (C) 1980, by
info Technical Systems Consultants, Inc.
info All rights reserved.
*
* Set permissions in specified files.
*
org 0
perms clr filec clear out file count
clr permc clear out perms count
leax 4,s point to arg list
stx argpt save arg pointer
perms2 ldy argpt get arg pointer
ldx 0,y++ get next arg
beq perms6 end of args?
sty argpt save the pointer
ldd 0,x get 1st two chars of arg
lbsr chkarg see if valid perms
beq setp set perms if valid
inc filec bump the file counter
stx iprm2 save pointer to file name
stx istat2
sys ind,istat get file status
bes perms8 error?
lda stb+5 get file perms
tst slot+2 check equals mode
beq perms4
lda slot+2 get equals modes
perms4 ora slot or in '+' params
ldb slot+1 get '-' params
comb
pshs b
anda 0,s+ clear out the '-' bits
sta iprm3 set in ind call
sys ind,iprm set perm bits
bec perms2 errors?
bra perms8 if so, report
perms6 tst filec any files processed?
lbeq synerr if not, error
tst permc any perms processed?
lbeq synerr if not, error
ldd #0 set term status
sys term term task
perms8 std erno save error number
ldd #2 set file desc
sys write,ermsg1,ERSZ1 output err message
ldx istat2 get file name
stx iwrt2 save for write
clrb clear counter
perm85 lda 0,x+ get char
beq perms9 look for null
incb bump count
bra perm85
perms9 std iwrt3 set count
ldd #2 set file desc
sys ind,iwrt write out file name
ldd #2 set file desc
sys write,ermsg2,ERSZ2
ldd erno set term status
sys term
pag
*
* setp
*
* Set up perm bit masks
*
setp tst filec files yet?
lbne synerr if so - error
std type save type
leax 2,x advance arg pointer
bsr getp get perm bits
lda type get type
cmpa #'o is it 'other'
beq setp2
cmpa #'u is it 'user'
beq setp3
cmpa #'s is it 'exec set'
lbne synerr error?
tstb bits specd?
lbne synerr if so - error
ldb #$40 set x bit
bra setp3
setp2 aslb shift to 'other'
aslb
aslb
setp3 ldx #slot point to perm slots
lda type+1 get type
cmpa #'+ is it '+'?
beq setp6
leax 1,x bump to next slot
cmpa #'- is it '-'
beq setp6
leax 1,x
setp6 orb 0,x or in old bits
stb 0,x save new
lbra perms2 repeat
pag
*
* getp
*
* Get perm bits from arg - return bit mask
* in reg B.
*
getp clr 0,-s set zero mask
getp2 clrb
lda 0,x+ get next char
beq getp6 end of arg?
incb set r bit
cmpa #'r is ir 'r'
beq getp4
aslb set w bit
cmpa #'w is it 'w'
beq getp4
aslb set x bit
cmpa #'x is it 'x'
lbne synerr syntax error
getp4 orb 0,s or in new bit
stb 0,s save new mask
bra getp2 repeat
getp6 puls b,pc return mask
*
* chkarg
*
* Checks for valid argument
*
chkarg std type save 1st 2 bytes
cmpa #'u is it user (owner)?
beq uoro skip if so
cmpa #'o is it others?
beq uoro skip if so
cmpa #'s is it "exec set" bit?
bne nvalid not valid perms
cmpb #'+
beq ckarg2
cmpb #'-
bne nvalid invalid if neither
ckarg2 tst 2,x any more to arg?
bne nvalid invalid if more chars
valid ldd type
inc permc show another valid perm
sez show valid perms
rts
uoro cmpb #'+ check 2nd char
beq ckarg4
cmpb #'-
beq ckarg4
cmpb #'=
bne nvalid must be one of three
ckarg4 tst 2,x more to argument?
beq nvalid should be more
ldb #2 set pointer
ckarg6 lda b,x get next character
beq valid valid if end of arg
cmpa #'r must be r, w, or x
beq ckarg8
cmpa #'w
beq ckarg8
cmpa #'x
bne nvalid must be one of three
ckarg8 incb
cmpb #5
bne ckarg6
tst b,x more to argument?
beq valid shouldn't be
nvalid ldd type
clz show not valid
rts
*
* synerr
*
* Report syntax error
*
synerr ldd #2 set file desc
sys write,synmsg,SYSZ
ldd #$ff set status
sys term term task
pag
* ind sys calls
iwrt fcb write
iwrt2 fdb 0
iwrt3 fdb 0
istat fcb status
istat2 fdb 0,stb
iprm fcb chprm
iprm2 fdb 0
fcb 0
iprm3 fcb 0
* error messages
ermsg1 fcc "Can't set perms for '"
ERSZ1 equ *-ermsg1
ermsg2 fcc "'.",$d
ERSZ2 equ *-ermsg2
synmsg fcc 'Command syntax error.',$d
SYSZ equ *-synmsg
* global storage
argpt fdb 0 arg pointer
filec fcb 0 processed file counter
permc fcb 0 valid perms arg count
erno fdb 0 error number
type fdb 0 perm type
slot fdb 0,0 perm slots (masks)
stb rmb 24 status buffer
end perms