MiniUnix/usr/source/s2/time.s
/ time -- prints out system times
times = 43.
cmp (sp),$1
bgt 1f
sys exit
1:
sys time
mov r1,ltbuf
jsr pc,execarg
sys time
sub ltbuf,r1
sys times; ltbuf
mov r1,r0
mul $60.,r0
mov r0,ltbuf
mov r1,ltbuf+2
jsr r5,mesg; <\nreal\0>; .even
mov $ltbuf,r2
jsr r5,ptime
jsr r5,mesg; <user\0>; .even
jsr r5,ptime
jsr r5,mesg; <sys \0>; .even
jsr r5,ptime
sys exit
execarg:
sys fork
br newproc
bec 2f
jsr r5,mesg; <Try again.\n\0>; .even
sys exit
2:
mov r0,r2
sys signal; 2; 1
2:
sys wait
cmp r0,r2
bne 2b
bit $377,r1
beq 1f
jsr r5,mesg; <Command terminated abnormally.\n\0>; .even
clr r0
sys seek; 0; 2
1:
rts pc
newproc:
tst (sp)+
mov (sp)+,r0
tst (sp)+
mov $ibuf,r1
mov $end,r2
1:
mov (sp)+,r3
mov r2,(r1)+
2:
movb (r3)+,(r2)+
bne 2b
dec r0
cmp r0,$1
bgt 1b
clr (r1)+
mov $end,r1
sys exec; end; ibuf
cmp $8,r0
beq rcom
mov $end-10.,r0
mov $"x/,(r0)+
mov $"us,(r0)+
mov $"r/,(r0)+
mov $"bi,(r0)+
mov $"n/,(r0)+
mov $end-5,r1
sys exec; end-5; ibuf
cmp $8,r0
beq rcom
mov $end-9,r1
sys exec; end-9.; ibuf
cmp $8,r0
bne 1f
rcom:
mov r1,ibuf
mov $shname+5,ibuf-2
sys exec ; shname ; ibuf-2
1:
jsr r5,mesg; <Command not found.\n\0>; .even
clr r0
sys seek; 0; 2
sys exit
printd:
mov $tbuf+4,r4
jsr r5,tdiv; 10.
jsr r5,tdiv; 10.
jsr r5,tdiv; 10.
jsr r5,tdiv; 10.
1:
cmpb (r4),$'0
bne 1f
movb $' ,(r4)+
cmp r4,$tbuf+3
bne 1b
1:
mov $2,r0
sys write; tbuf; 4
rts pc
ptime:
mov (r2)+,r0
mov (r2)+,r1
div $3600.,r0
mov r0,-(sp)
clr r0
div $60.,r0
mov r1,clicks
mov $tbuf+9.,r4
jsr r5,tdiv; 10.
jsr r5,tdiv; 6.
movb $':,-(r4)
mov (sp)+,r0
jsr r5,tdiv; 10.
jsr r5,tdiv; 6.
movb $':,-(r4)
jsr r5,tdiv; 10.
jsr r5,tdiv; 10.
jsr r5,tdiv; 10.
1:
cmpb (r4),$'0
beq 2f
cmpb (r4),$':
bne 1f
2:
movb $' ,(r4)+
cmp r4,$tbuf+8.
bne 1b
1:
mov $2,r0
sys write; tbuf; 9.
jsr r5,mesg; <.\0>; .even
mov clicks,r1
clr r0
div $6,r0
add $'0,r0
mov r0,ch
mov $2,r0
sys write; ch; 1
jsr r5,mesg; <\n\0>; .even
rts r5
tdiv:
mov r1,-(sp)
mov r0,r1
clr r0
div (r5)+,r0
add $'0,r1
movb r1,-(r4)
mov (sp)+,r1
rts r5
mesg:
movb (r5)+,ch
beq 2f
mov $2,r0
sys write; ch; 1
br mesg
2:
inc r5
bic $1,r5
rts r5
ch: .=.+1
.even
.bss
clicks: .=.+2
.=.+2
ibuf: .=.+50.
tbuf: .=.+10.
ltbuf: .=.+16.
end: .=.+1000.
.data
shname: </bin/sh\0>
.even