/ nlist -- extract values from name list / / nlist(file, list); / .globl _nlist _nlist: mov r5,-(sp) mov sp,r5 mov 4(r5),0f mov 6(r5),r1 mov r2,-(sp) mov r1,r0 1: tst (r0) beq 1f add $8.,r0 clr (r0)+ clr (r0)+ / initialize to undefined br 1b 1: sys 0; 9f .data 9: sys open; 0:..; 0 .text bes done mov r0,r2 sys read; buf; 20 cmp r0,$20 bne cdone mov buf+4,count / assume older a.out mov buf+2,0f cmp buf,$405 beq 1f mov buf+8.,count / now assume newer mov buf+2,r0 / txt add buf+4,r0 / data cmp buf+16,$1 / relocation? beq 4f asl r0 / txt+data reloc 4: add $20,r0 / header mov r0,0f cmp buf,$411 beq 1f cmp buf,$410 beq 1f cmp buf,$407 bne cdone 1: mov r2,r0 sys 0; 9f .data 9: sys seek; 0:..; 0 .text 1: sub $12.,count blt cdone mov r2,r0 sys read; buf; 12. cmp r0,$12. bne cdone mov r1,r0 2: tst (r0) beq 1b cmp (r0),buf bne 1f cmp 2(r0),buf+2 bne 1f cmp 4(r0),buf+4 bne 1f cmp 6(r0),buf+6 bne 1f mov buf+8.,8.(r0) mov buf+10.,10.(r0) 1: add $12.,r0 br 2b cdone: mov r2,r0 sys close done: mov (sp)+,r2 mov (sp)+,r5 rts pc .bss buf: .=.+20 count: .=.+2