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
/
crdir
< prev
next >
Wrap
Text File
|
1984-05-02
|
4KB
|
212 lines
opt pag,nol
ttl Create Dir Utility
lib sysdef
lib syserrors
opt lis
pag
info UniFLEX crdir
info Version 1.05, Released March 27, 1984
info Copyright, (C) 1983, by
info Technical Systems Consultants, Inc.
info All rights reserved.
org 0
crd sys cpint,1,1
sys cpint,2,1
sys cpint,3,1
ldd 0,s get arg count
cmpd #1
lbls synerr if null, report error
leax 4,s point to arg list
leay 4,s point y to arg list too
clr q_opt
crd1 ldd 0,y check for end of args
beq crd2 skip if so
ldd [0,y++] get two chars from arg
cmpd #('+<<8)+('q) see if "+q"
bne crd1 loop if not
inc q_opt set quiet option if so
ldd 0,s re-check argument count
cmpd #2
lbls synerr
crd2 pshs x save ptr
ldd [0,s] get arg ptr
lbeq crd8 if null, we are done
std icdir2 set up os call
std ilnk2
std ichon2
ldx icdir2 get argument pointer
ldd 0,x check first two chars
cmpd #('+<<8)+('q) see if "+q"
bne crd3 continue if not
puls x else go to next argument
leax 2,x
bra crd2
crd3 jsr chdp check dir perms
bes prter error?
sys ind,icdir do ind call to create dir
bec crd35 skip if no error
cmpd #EFLX see if file already existed
bne prter
tst q_opt if file exists, is quiet option on?
beq prter if not quiet, report error
puls x else go to next argument
leax 2,x
bra crd2
crd35 sys guid get user's id
std ichon3 set in os call
sys ind,ichon change file owner
ldx [0,s] get arg ptr
ldy #buffer point to buffer
crd4 lda 0,x+ copy name to buffer
sta 0,y+
bne crd4 repeat til null char
leax -1,x back up one
pshs x save end position
leay -1,y
ldd #('/<<8)|'. set up '.' dir
std 0,y++ save in name
clr 0,y set null term
pshs y
sys ind,ilnk do ind link call
puls x get name end pointer
bes prter report errors
ldd #'.<<8 set up '..' name
std 0,x
puls x get name end
crd6 lda -1,x look for name begin
cmpa #'/ is it '/'?
beq crd7
leax -1,x
cmpx [0,s] hit begin?
bne crd6
crd7 clr 0,x set null end
sys ind,ilnk do ind link
puls x get end name ptr
bes prter report errors
leax 2,x bump to next arg
lbra crd2 repeat
crd8 ldd #0 set ok status
sys term return
pag
*
* prter
*
* Print error message.
*
prter std erno save error number
ldd #2 set file desc
sys write,ermsg1,ERSZ1
ldx icdir2 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
*
* Check for write permissions in dir
*
chdp ldy #tdbuf point to temp name buffer
chdp2 lda 0,x+ transfer file name to buffer
sta 0,y+
bne chdp2
leay -1,y eat null
chdp3 cmpy #tdbuf beginning of buffer
beq chdp4
lda 0,-y get character
cmpa #'/ is it slash?
bne chdp3
leay 1,y
chdp4 ldd #('.<<8)+0 put period and null terminator
std 0,y
sys guid get user id
pshs d
sys status,tdbuf,cpbuf get file status
puls d
bes chdp7 error?
cmpd cpbuf+7 check if this guy owns file
beq chdp5
cmpd #0 is it system man?
beq chdp55
lda cpbuf+5 get perms byte
bita #$10 check write perms - others
beq chdp6
bita #$20 check exec permission
beq chdp6
clc set ok status
rts return
chdp5 lda cpbuf+5 get perms byte
bita #2 check owner perms
beq chdp6
chdp55 clc set ok status
rts return
chdp6 ldd #10 set EPRM error
chdp7 sec set error status
rts return
synmsg fcc 'Command syntax error.',$d
SYSZ equ *-synmsg
pag
* indirection calls
icdir fcb crtsd
icdir2 fdb 0,$083F,0
ilnk fcb link
ilnk2 fdb 0,buffer
ichon fcb chown
ichon2 fdb 0
ichon3 fdb 0
iwrt fcb write
iwrt2 fdb 0
iwrt3 fdb 0
* strings
ermsg1 fcc "Can't create '"
ERSZ1 equ *-ermsg1
ermsg2 fcc "'.",$d
ERSZ2 equ *-ermsg2
* storage and buffers
q_opt rmb 1
cpbuf rmb 22 status buffer
tdbuf rmb 100 name buffer
buffer rmb 64 name buffer
erno rmb 1 error number
end crd