" | | Lisp startup program. | insert two new parameters on the argv[] list and re-exec lisp | .globl exece start: movl sp@, d1 | get argc (# of parameters on stack) lea sp@(4),a3 | save the address of argv[] asll #2,d1 | multiply argc by 4 to get # of bytes of argv ptrs on stack lea a3@(4,d1:l),a4 | save the address of arge[] (it's after all of the argv's) movl #flag,a3@- | insert (push) the address of the flag string on to top of argv stack movl #lisp,a3@- | insert (push) the address of the lisp string on to top of argv stack movl a3,sp | set the stack to point to the new stack head. | | Set up a call to exece pea a4@ | push the address of arge on the stack pea a3@ | push the address of argv on the stack movl #lisp,sp@- | push the name of the program on the stack jsr exece | now call exece, you've got the right parameters exece: moveq #0x3b,d0 movl a7@(4),d1 movl a7@(8),a0 movl a7@(12),a1 trap #0 movl #0,d0 movl d0,d1 trap #0 | exit if exec fails | | call exit on a exec failure without losing the return code. | we should NEVER return from _exit | flag: .asciz \"-f\" lisp: .asciz \"/usr/ucb/lisp\" .even "