Research V2 release
[unix-history] / cmd / ls.s
CommitLineData
10577efa
KT
1/ ls -- list file or directory
2
3.globl flush
4.globl fopen
5.globl getw
6.globl getc
7.globl putc
8.globl ctime
9.globl end
10
11 sys break; end+512.
12 mov $1,obuf
13 mov sp,r5
14 mov (r5)+,count
15 tst (r5)+
16 dec count
17 mov count,ocount
18 bgt loop
19 mov $dotp,r5
20loop:
21 mov (r5)+,r4
22 cmpb (r4)+,$'-
23 bne 1f
24 dec ocount
253:
26 movb (r4)+,r0
27 beq eloop
28 cmp r0,$'l
29 bne 4f
30 inc longf
31 br 3b
324:
33 cmpb r0,$'t
34 bne 4f
35 mov $14.,sortoff
36 br 3b
374:
38 cmpb r0,$'a
39 bne 4f
40 inc allflg
41 br 3b
424:
43 cmpb r0,$'s
44 bne 4f
45 incb longf+1
46 br 3b
474:
48 cmpb r0,$'d
49 bne 3b
50 inc dirflg
51 br 3b
521:
53 dec r4
54 jsr pc,do
55eloop:
56 dec count
57 bgt loop
58 tst dnp
59 bne 1f
60 mov $dotp,r5
61 br loop
621:
63 jsr r5,flush; obuf
64 sys exit
65
66do:
67 clr tblocks
68 mov $end,r1
69 mov $filnam,r3
70 mov r4,dnp
71 clr isadir
72 tst dirflg
73 bne nondir
74 sys stat; dnp: 0; statb
75 bec 1f
76 jsr r5,questf; < nonexistent\n\0>; .even
77 rts pc
781:
79 bit $40000,statb+2 /test directory
80 beq nondir
81 inc isadir
82 mov r4,r0
83 jsr r5,fopen; dbuf
84 bcc 1f
85 jsr r5,questf; < unreadable\n\0>; .even
86 rts pc
871:
88 movb (r4)+,(r3)+
89 bne 1b
90 dec r3
91 cmpb -1(r3),$'/
92 beq 1f
93 movb $'/,(r3)+
941:
95 jsr r5,getw; dbuf
96 bcs pass2
97 mov $4,-(sp)
98 tst r0
99 bne 2f
1003:
101 jsr r5,getw; dbuf
102 dec (sp)
103 bne 3b
104 tst (sp)+
105 br 1b
1062:
107 mov r3,r2
1082:
109 jsr r5,getw; dbuf
110 mov r0,(r1)+
111 movb r0,(r2)+
112 swab r0
113 movb r0,(r2)+
114 dec (sp)
115 bne 2b
116 tst (sp)+
117 clrb (r2)+
118 tst allflg
119 bne 2f
120 cmpb (r3),$'.
121 bne 2f
122 sub $8.,r1
123 br 1b
1242:
125 jsr r5,gstat
126 br 1b
127nondir:
128 mov r3,r2
1291:
130 movb (r4)+,(r2)+
131 bne 1b
1321:
133 cmp r2,r3
134 blos 1f
135 cmpb -(r2),$'/
136 bne 1b
137 inc r2
1381:
139 mov $8.,-(sp)
1401:
141 movb (r2)+,(r1)+
142 bne 2f
143 dec r2
1442:
145 dec (sp)
146 bne 1b
147 jsr r5,gstat
148 tst (sp)+
149
150pass2:
151 mov dbuf,r0
152 sys close
153 mov $end,r2
154 cmp r1,r2
155 bne 1f
156 rts pc
1571:
158 mov r5,-(sp)
159 mov r1,-(sp)
160 add sortoff,r2
1611:
162 mov r2,(r1)+
163 add $20.,r2
164 cmp r2,(sp)
165 blo 1b
166 mov (sp),r2
167 tst -(r1)
1681:
169 mov r2,r3
1702:
171 tst (r3)+
172 cmp r3,r1
173 bhi 2f
174 mov (r2),r4
175 mov (r3),r5
176 tst sortoff
177 beq 4f
178 cmp (r4)+,(r5)+
179 blo 3f
180 bhi 2b
181 cmp (r4)+,(r5)+
182 blo 3f
183 br 2b
1844:
1854:
186 cmpb (r4)+,(r5)+
187 bhi 3f
188 blo 2b
189 dec r0
190 br 4b
1913:
192 mov (r2),-(sp)
193 mov (r3),(r2)
194 mov (sp)+,(r3)
195 br 2b
1962:
197 tst (r2)+
198 cmp r2,r1
199 blo 1b
2001:
201 mov (sp)+,r2
202 mov (sp)+,r5
203
204pass3:
205 cmp ocount,$1
206 ble 1f
207 tst isadir
208 beq 2f
209 mov dnp,0f
210 jsr r5,pstring; 0:..
211 jsr r5,pstring; colon
2121:
213 tst longf
214 beq 1f
215 jsr r5,pstring; totmes
216 mov tblocks,r0
217 jsr r5,decimal; 4
218 jsr r5,pstring; nl
2192:
220 tstb longf
221 beq 1f
222 mov $passwd,r0
223 jsr r5,fopen; iobuf
224 bes 1f
225 mov $uidbuf,r3
2263:
2272:
228 jsr r5,getc; iobuf
229 bes 3f
230 movb r0,(r3)+
231 cmpb r0,$':
232 bne 2b
2332:
234 jsr r5,getc; iobuf
235 cmpb r0,$':
236 bne 2b
2372:
238 jsr r5,getc; iobuf
239 cmpb r0,$':
240 beq 2f
241 movb r0,(r3)+
242 br 2b
2432:
244 movb $'\n,(r3)+
245 cmp r3,$euidbuf
246 bhis 3f
2472:
248 jsr r5,getc; iobuf
249 cmpb r0,$'\n
250 bne 2b
251 br 3b
2523:
253 mov r3,euids
254 sys close
2551:
256 cmp r2,r1
257 bhi 1f
258 mov (r2)+,r3
259 sub sortoff,r3
260 jsr r5,pentry
261 mov $8.,-(sp)
2622:
263 movb (r3)+,r0
264 beq 2f
265 jsr r5,putc; obuf
266 dec (sp)
267 bne 2b
2682:
269 tst (sp)+
270 jsr r5,pstring; nl
271 br 1b
2721:
273 cmp ocount,$1
274 ble 1f
275 tst isadir
276 beq 1f
277 jsr r5,pstring; nl
2781:
279 rts pc
280
281pentry:
282 mov r2,-(sp)
283 tstb longf
284 bne listl
285 tstb longf+1
286 bne 2f
287 mov (sp)+,r2
288 rts r5
2892:
290 mov 12.(r3),r0
291 jsr r5,calcb
292 jsr r5,decimal; 3
293 jsr r5,pstring; space
294 mov (sp)+,r2
295 rts r5
296pstring:
297 mov r5,-(sp)
298 mov (r5),r5
2991:
300 movb (r5)+,r0
301 beq 1f
302 jsr r5,putc; obuf
303 br 1b
3041:
305 mov (sp)+,r5
306 tst (r5)+
307 rts r5
308
309questf:
310 mov r4,0f
311 jsr r5,pstring; 0:..
312 mov r5,0f
313 jsr r5,pstring; 0:..
3141:
315 tstb (r5)+
316 bne 1b
317 inc r5
318 bic $1,r5
319 rts r5
320listl:
321 mov 18.(r3),r0 / inode
322 jsr r5,decimal; 4
323 jsr r5,pstring; space
324 mov r3,r4
325 add $8.,r4 / get to flags
326 bit $10000,(r4) /large
327 beq 2f
328 jsr r5,mode; 'l
329 br 3f
3302:
331 jsr r5,mode; 's
3323:
333 bit $40000,(r4) /directory
334 beq 2f
335 jsr r5,mode; 'd
336 br 3f
3372:
338 bit $40,(r4) /set uid
339 beq 2f
340 jsr r5,mode; 'u
341 br 3f
3422:
343 bit $20,(r4) /executable
344 beq 2f
345 jsr r5,mode; 'x
346 br 3f
3472:
348 jsr r5,mode; '-
3493:
350 bit $10,(r4) /read owner
351 beq 2f
352 jsr r5,mode; 'r
353 br 3f
3542:
355 jsr r5, mode; '-
3563:
357 bit $4,(r4) /write owner
358 beq 2f
359 jsr r5,mode; 'w
360 br 3f
3612:
362 jsr r5,mode; '-
3633:
364 bit $2,(r4) /read non-owner
365 beq 2f
366 jsr r5,mode; 'r
367 br 3f
3682:
369 jsr r5,mode; '-
3703:
371 bit $1,(r4)+ /write non-owner
372 beq 2f
373 jsr r5,mode; 'w
374 br 3f
3752:
376 jsr r5,mode; '-
3773:
378 jsr r5,pstring; space
379 movb (r4)+,r0
380 jsr r5,decimal; 2
381 movb (r4)+,r2
382 jsr pc,puid
383 mov (r4)+,r0
384 jsr r5,decimal; 5
385 jsr r5,pstring; space
386 mov r1,-(sp)
387 mov (r4)+,r0
388 mov (r4)+,r1
389 sub $16.,sp
390 mov sp,r2
391 jsr pc,ctime
392 mov sp,r2
393 mov $15.,-(sp)
3941:
395 movb (r2)+,r0
396 jsr r5,putc; obuf
397 dec (sp)
398 bne 1b
399 add $18.,sp
400 mov (sp)+,r1
401 jsr r5,pstring; space
402 mov (sp)+,r2
403 rts r5
404
405puid:
406 mov r1,-(sp)
407 mov $uidbuf,r1
4081:
409 cmp r1,euids
410 bhis 1f
411 mov r1,0f
4122:
413 tstb (r1)+
414 beq 3f
415 cmpb -1(r1),$':
416 bne 2b
417 clrb -1(r1)
4183:
419 clr -(sp)
4203:
421 movb (r1)+,r0
422 sub $'0,r0
423 cmp r0,$9.
424 bhi 3f
425 mov r1,-(sp)
426 mov 2(sp),r1
427 mpy $10.,r1
428 add r0,r1
429 mov r1,2(sp)
430 mov (sp)+,r1
431 br 3b
4323:
433 mov (sp)+,r0
434 cmp r0,r2
435 bne 1b
436 jsr r5,pstring; space
437 jsr r5,pstring; 0:..
438 mov 0b,r1
439 mov $6,-(sp)
4403:
441 tstb (r1)+
442 beq 3f
443 dec (sp)
444 br 3b
4453:
446 jsr r5,pstring; space
447 dec (sp)
448 bgt 3b
449 tst (sp)+
450 mov (sp)+,r1
451 rts pc
4521:
453 jsr r5,pstring; space
454 mov r2,r0
455 jsr r5,decimal; 3
456 jsr r5,pstring; space3
457 mov (sp)+,r1
458 rts pc
459
460mode:
461 mov (r5)+,r0
462 jsr r5,putc; obuf
463 rts r5
464
465
466gstat:
467 mov r1,-(sp)
468 add $512.,r1
469 cmp r1,0f
470 blo 1f
471 mov r1,0f
472 sys break; 0: end+512.
4731:
474 mov (sp)+,r1
475 tst longf
476 bne 2f
477 tst sortoff
478 beq 1f
4792:
480 sys stat; filnam; statb
481 bec 2f
482 mov r4,-(sp)
483 mov $filnam,r4
484 jsr r5,questf; < unstatable\n\0>; .even
485 mov (sp)+,r4
486 add $12.,r1
487 rts r5
4882:
489 mov $statb+2,r0
490 mov (r0)+,(r1)+ /flags
491 mov (r0)+,(r1)+ /nlinks, uid
492 mov r0,-(sp)
493 mov (r0),r0
494 jsr r5,calcb
495 add r0,tblocks
496 mov (sp)+,r0
497 mov (r0)+,(r1)+ /size
498 add $20.,r0 /dska, ctim
499 mov (r0)+,(r1)+ /mtim
500 mov (r0)+,(r1)+
501 mov statb,(r1)+ /inode
502 rts r5
5031:
504 add $12.,r1
505 rts r5
506
507decimal:
508 mov r1,-(sp)
509 mov r2,-(sp)
510 mov r3,-(sp)
511 mov $6,r2
512 mov $numbuf+6,r3
5131:
514 mov r0,r1
515 clr r0
516 dvd $10.,r0
517 add $'0,r1
518 movb r1,-(r3)
519 sob r2,1b
5201:
521 cmp r3,$numbuf+5
522 beq 1f
523 cmpb (r3),$'0
524 bne 1f
525 movb $' ,(r3)+
526 br 1b
5271:
528 mov $numbuf+6,r1
529 sub (r5),r1
530 mov (r5)+,-(sp)
5311:
532 movb (r1)+,r0
533 jsr r5,putc; obuf
534 dec (sp)
535 bne 1b
536 tst (sp)+
537 mov (sp)+,r3
538 mov (sp)+,r2
539 mov (sp)+,r1
540 rts r5
541
542calcb:
543 add $511.,r0
544 clrb r0
545 swab r0
546 asr r0
547 cmp r0,$8
548 blo 1f
549 inc r0
5501:
5511:
552 rts r5
553
554
555dotp: dot
556euids: uidbuf
557
558dot: <.\0>
559nl: <\n\0>
560totmes: <total \0>
561space3: < >
562space: < \0>
563passwd: </etc/passwd\0>
564colon: <:\n\0>
565 .even
566
567.bss
568
569count: .=.+2
570ocount: .=.+2
571longf: .=.+2
572sortoff: .=.+2
573allflg: .=.+2
574dirflg: .=.+2
575isadir: .=.+2
576filnam: .=.+32.
577statb: .=.+34.
578dbuf: .=.+518.
579obuf: .=.+518.
580numbuf: .=.+6
581tblocks: .=.+2
582uidbuf: .=.+1024.
583euidbuf:
584iobuf: .=.+518.
585
586(sp)+,r3
587 mov (sp)+,r2
588 mov (sp)+,r1
589 rts r5
590
591calcb:
592 add $511.,r0
593 clrb r0
594 swab r0
595 asr r0
596 cmp r0,$8
597 blo 1f
598 inc r0
5991:
6001:
601 rts r5
602
603
604dotp: dot
605euids: uidbuf
606
607dot: <.\0>
608nl: <\n\0>
609totmes: <total \0>
610space3: < >
611space: < \0>
612passwd: </etc/passwd\0>
613colon: <:\n\0>
614 .even
615
616.bss
617
618count: .=.+2
619ocount: .=.+2
620longf: .=.+2
621sortoff: .=.+2
622allflg: .=.+2
623dirflg: .=.+2
624isadir: .=.+2
625filnam: .=.+32.
626statb: .=.+34.
627dbuf: .=.+518.
628obuf: .=.+518.
629numbuf: .=.+6
630tblocks: .=.+2
631uidbuf: .=.+1024.
632euidbuf:
633iobuf: .=.+518.