135 lines
1.4 KiB
ArmAsm
135 lines
1.4 KiB
ArmAsm
/
|
|
/
|
|
|
|
/ fx2 -- error setting and printing
|
|
|
|
.globl error
|
|
.globl perror
|
|
|
|
.globl tput
|
|
.globl tdecml
|
|
|
|
error:
|
|
inc nerror
|
|
mov r0,-(sp)
|
|
mov r2,-(sp)
|
|
mov (r5)+,r0
|
|
mov $errb,r2
|
|
1:
|
|
cmp r2,errp
|
|
bhis 1f
|
|
cmp r0,(r2)+
|
|
beq 2f
|
|
tst (r2)+
|
|
br 1b
|
|
1:
|
|
cmp r2,$eerrb
|
|
bhis 2f
|
|
mov r0,(r2)+
|
|
mov r1,(r2)
|
|
dec (r2)+ / r1 is often 1 too far
|
|
mov r2,errp
|
|
2:
|
|
mov (sp)+,r2
|
|
mov (sp)+,r0
|
|
rts r5
|
|
|
|
perror:
|
|
cmp errp,$errb
|
|
beq 1f
|
|
mov r1,-(sp)
|
|
mov r2,-(sp)
|
|
mov ifno,r0
|
|
jsr r5,tdecml
|
|
mov $'\t,r0
|
|
jsr r5,tput
|
|
mov $line,r1
|
|
2:
|
|
movb (r1),r0
|
|
beq 2f
|
|
jsr r5,tput
|
|
mov $errb+2,r2
|
|
3:
|
|
cmp r1,(r2)+
|
|
bne 4f
|
|
mov $1,r0
|
|
sys write; mes2; 2 / bs, _
|
|
br 3f
|
|
4:
|
|
cmp r2,errp
|
|
blo 3b
|
|
3:
|
|
inc r1
|
|
br 2b
|
|
2:
|
|
mov $errb,r1
|
|
2:
|
|
mov $1,r0
|
|
sys write; mes1; 4
|
|
3:
|
|
sys open; errfil; 0
|
|
bec 3f
|
|
mov (r1)+,r0
|
|
tst (r1)+
|
|
jsr r5,tdecml
|
|
cmp r1,errp
|
|
bhis 2f
|
|
mov $',,r0
|
|
jsr r5,tput
|
|
br 3b
|
|
3:
|
|
mov r0,-(sp)
|
|
mov (r1)+,r2
|
|
tst (r1)+
|
|
3:
|
|
dec r2
|
|
ble 3f
|
|
4:
|
|
mov (sp),r0
|
|
sys read; ich; 1
|
|
bes 4f
|
|
tst r0
|
|
beq 4f
|
|
cmpb ich,$'\n
|
|
bne 4b
|
|
br 3b
|
|
3:
|
|
mov (sp),r0
|
|
sys read; ich; 1
|
|
bes 4f
|
|
tst r0
|
|
beq 4f
|
|
movb ich,r0
|
|
cmp r0,$'\n
|
|
beq 3f
|
|
jsr r5,tput
|
|
br 3b
|
|
4:
|
|
mov $1,r0
|
|
sys write; mes3; 18.
|
|
3:
|
|
mov (sp)+,r0
|
|
sys close
|
|
cmp r1,$errp
|
|
blo 2b
|
|
2:
|
|
mov $'\n,r0
|
|
jsr r5,tput
|
|
mov $errb,errp
|
|
mov (sp)+,r2
|
|
mov (sp)+,r1
|
|
1:
|
|
rts r5
|
|
|
|
mes1:
|
|
<\n** >
|
|
mes2:
|
|
.byte 010, '_
|
|
mes3:
|
|
<Unknown diagnostic>
|
|
errfil:
|
|
</usr/fort/errors\0>
|
|
.even
|
|
.bss
|
|
ich: .=.+2
|