1869
|
1
|
|
2 * Attr - Modify file attributes
|
|
3 *
|
|
4 * $Id$
|
|
5 *
|
|
6 * Edt/Rev YYYY/MM/DD Modified by
|
|
7 * Comment
|
|
8 * ------------------------------------------------------------------
|
|
9 * 11 ????/??/??
|
|
10 * From Tandy OS-9 Level Two VR 02.00.01.
|
|
11
|
|
12 nam Attr
|
|
13 ttl Modify file attributes
|
|
14
|
|
15 * Disassembled 98/09/11 11:44:51 by Disasm v1.6 (C) 1988 by RML
|
|
16
|
|
17 use defsfile.d
|
|
18
|
|
19 DOHELP set 0
|
|
20
|
|
21 tylg set Prgrm+Objct
|
|
22 atrv set ReEnt+rev
|
|
23 rev set $00
|
|
24 edition set 11
|
|
25
|
|
26
|
|
27 psect tee_a,Prgrm+Objct,ReEnt+rev,edition,200,start
|
|
28
|
|
29 vsect dp
|
|
30 fpath rmb 1
|
|
31 rawpath rmb 1
|
|
32 parmptr rmb 2
|
|
33 cmdperms rmb 2
|
|
34 u0006 rmb 1
|
|
35 u0007 rmb 1
|
|
36 pathopts rmb 20
|
|
37 u001C rmb 2
|
|
38 u001E rmb 1
|
|
39 u001F rmb 9
|
|
40 u0028 rmb 32
|
|
41 filename rmb 32
|
|
42 fdesc rmb 16
|
|
43 u0078 rmb 46
|
|
44 endsect
|
|
45
|
|
46 IFNE DOHELP
|
|
47 HelpMsg fcb C$LF
|
|
48 fcc "Use: Attr <pathname> {[-]<opts>}"
|
|
49 fcb C$LF
|
|
50 fcc " opts: -d s r w e pr pw pe -a"
|
|
51 fcb C$CR
|
|
52 ENDC
|
|
53 NotOwner fcb C$LF
|
|
54 fcc "You do not own that file."
|
|
55 fcb C$CR
|
|
56 UseMkDir fcb C$LF
|
|
57 fcc "Use Makdir to create a directory"
|
|
58 fcb C$CR
|
|
59 DirNtEmt fcb C$LF
|
|
60 fcc "ERROR; the directory is not empty"
|
|
61 fcb C$CR
|
|
62 Attrs fcc "dsewrewr"
|
|
63 fcb $FF
|
|
64
|
|
65 start stx parmptr save param ptr
|
|
66 clr u0007
|
|
67 com u0007
|
|
68 * Open file at X as file
|
|
69 clra
|
|
70 os9 I$Open open file on commandline
|
|
71 bcc L00D9 branch if ok
|
|
72 * If error, try to open as directory with read permission
|
|
73 ldx parmptr get saved param ptr
|
|
74 lda #DIR.+READ. load perms
|
|
75 os9 I$Open open as directory
|
|
76 bcc L00D9 branch if ok
|
|
77 * One last time, try open as directory only
|
|
78 ldx parmptr get param ptr
|
|
79 lda #DIR. load different perms
|
|
80 os9 I$Open try one more time
|
|
81 bcs L0114 branch if error
|
|
82 L00D9 sta fpath save off path
|
|
83 stx cmdperms save updated parm ptr
|
|
84 leax pathopts point X to buffer
|
|
85 ldb #SS.Opt load with status code
|
|
86 os9 I$GetStt get status
|
|
87 bcs L0114 branch if error
|
|
88 clrb
|
|
89 lda ,x get path type
|
|
90 cmpa #DT.RBF check if rbf path
|
|
91 lbne ShowHelp branch if not
|
|
92 ldx parmptr else get parm ptr
|
|
93 leay filename point to buffer
|
|
94 lda ,x+ get file name character
|
|
95 cmpa #PDELIM path delimiter?
|
|
96 bne L0106 no
|
|
97 L00FA sta ,y+ else save char in Y
|
|
98 lda ,x+ get next file name char
|
|
99 cmpa #C$PERD period?
|
|
100 bcs L0106 branch if not
|
|
101 cmpa #PDELIM path delimiter?
|
|
102 bne L00FA branch if not
|
|
103 L0106 lda #PENTIR
|
|
104 ldb #C$SPAC
|
|
105 std ,y++
|
|
106 leax filename point X to filename
|
|
107 lda #READ.+WRITE. load perms
|
|
108 os9 I$Open open in raw mode
|
|
109 L0114 lbcs ShowHelp branch if error
|
|
110 sta rawpath
|
|
111 lda fpath
|
|
112 clr u001F
|
|
113 pshs u
|
|
114 ldx u001C get MS 16 bits
|
|
115 ldu u001E get LS 16 bits
|
|
116 lda rawpath get path
|
|
117 os9 I$Seek seek
|
|
118 puls u
|
|
119 bcs ShowHelp branch if error
|
|
120 leax fdesc point to buffer
|
|
121 ldy #FD.SEG
|
|
122 os9 I$Read
|
|
123 bcs ShowHelp
|
|
124 os9 F$ID get ID
|
|
125 cmpy #$0000 super user?
|
|
126 beq L014B branch if so
|
|
127 cmpy fdesc+FD.OWN is user same as file's owner?
|
|
128 bne L01C1 branch if not
|
|
129 L014B ldx cmdperms point to perms on cmd line
|
|
130 lbsr L021D
|
|
131 bcs L018B
|
|
132 L0152 lbsr L021D
|
|
133 bcc L0152
|
|
134 clrb
|
|
135 lda ,x
|
|
136 cmpa #C$CR
|
|
137 bne ShowHelp
|
|
138 pshs u
|
|
139 ldx u001C
|
|
140 ldu u001E
|
|
141 lda rawpath
|
|
142 os9 I$Seek seek
|
|
143 puls u
|
|
144 bcs ShowHelp branch if error
|
|
145 leax fdesc point to file desc
|
|
146 ldy #1 only 1 byte
|
|
147 os9 I$Write write out new attributes
|
|
148 bcs ShowHelp branch if error
|
|
149 os9 I$Close close file
|
|
150 bcs ShowHelp branch if error
|
|
151 lda fpath get file path
|
|
152 os9 I$Close close file
|
|
153 bcs ShowHelp branch if error
|
|
154 ldb u0007
|
|
155 beq L01BE
|
|
156 L018B ldb fdesc get attribute
|
|
157 leax >Attrs,pcr
|
|
158 leay u0078
|
|
159 lda ,x+
|
|
160 L0197 lslb
|
|
161 bcs L019C
|
|
162 lda #'-
|
|
163 L019C sta ,y+
|
|
164 lda ,x+
|
|
165 bpl L0197
|
|
166 lda #C$CR
|
|
167 sta ,y+
|
|
168 leax u0078
|
|
169 clrb
|
|
170 bra L01B0
|
|
171 ShowHelp equ *
|
|
172 IFNE DOHELP
|
|
173 leax >HelpMsg,pcr
|
|
174 ELSE
|
|
175 clrb
|
|
176 bra L01BE
|
|
177 ENDC
|
|
178 L01B0 pshs b
|
|
179 lda #2
|
|
180 ldy #256
|
|
181 os9 I$WritLn
|
|
182 comb
|
|
183 puls b
|
|
184 L01BE os9 F$Exit
|
|
185 L01C1 clrb
|
|
186 leax >NotOwner,pcr
|
|
187 bra L01B0
|
|
188 L01C8 leax >UseMkDir,pcr
|
|
189 clrb
|
|
190 bra L01B0
|
|
191 L01CF pshs u,y,x
|
|
192 lda fpath
|
|
193 ldx #$0000
|
|
194 ldu #DIR.SZ*2
|
|
195 os9 I$Seek
|
|
196 ldu $04,s
|
|
197 bcs L01BE
|
|
198 L01E0 leax u0028
|
|
199 ldy #DIR.SZ
|
|
200 os9 I$Read
|
|
201 bcs L01F7
|
|
202 tst ,x
|
|
203 beq L01E0
|
|
204 leax >DirNtEmt,pcr
|
|
205 clrb
|
|
206 bra L01B0
|
|
207 L01F7 puls u,y,x
|
|
208 cmpb #E$EOF
|
|
209 bne ShowHelp
|
|
210 rts
|
|
211 L01FE fdb $ff41
|
|
212 fdb $ff80,$44ff,$4053,$ff01,$52ff,$0257,$ff04,$45ff
|
|
213 fdb $0850,$52ff,$1050,$57ff,$2050,$45ff
|
|
214 fcb $00
|
|
215 L021D clr u0006
|
|
216 L021F lda ,x+
|
|
217 cmpa #C$SPAC
|
|
218 beq L021F
|
|
219 cmpa #C$COMA
|
|
220 beq L021F
|
|
221 cmpa #'-
|
|
222 bne L0231
|
|
223 com u0006
|
|
224 lda ,x+
|
|
225 L0231 leax -1,x
|
|
226 leay >L01FE,pcr
|
|
227 L0237 ldb ,y+
|
|
228 pshs y,x
|
|
229 beq L027F
|
|
230 L023D lda ,x+
|
|
231 eora ,y+
|
|
232 anda #$DF
|
|
233 beq L023D
|
|
234 lda -1,y
|
|
235 bmi L0251
|
|
236 puls y,x
|
|
237 L024B lda ,y+
|
|
238 bpl L024B
|
|
239 bra L0237
|
|
240 L0251 lda ,-x
|
|
241 cmpa #$30
|
|
242 bcc L027F
|
|
243 cmpb #$FF
|
|
244 beq L0278
|
|
245 bitb #$80
|
|
246 beq L0268
|
|
247 tst u0006
|
|
248 lbeq L01C8
|
|
249 lbsr L01CF
|
|
250 L0268 puls y,b,a
|
|
251 lda fdesc
|
|
252 eora u0006
|
|
253 ora -$01,y
|
|
254 eora u0006
|
|
255 sta fdesc
|
|
256 clrb
|
|
257 rts
|
|
258 L0278 eorb u0006
|
|
259 stb u0007
|
|
260 clrb
|
|
261 puls pc,y,b,a
|
|
262 L027F coma
|
|
263 puls pc,y,x
|
|
264
|
|
265 endsect
|