MiniUnix/usr/source/fort/rt2/plot.s
/
/
/ move, line
sct = 2
/ fortran vt0 interfaces
/ erase screen
erase.: temp
.+2
jsr pc,setfil
mov f,r0
sys write; erase; 2
jmp retrn
/ move(x, y)
/
/ sets current x,y to arguments
/
.globl move.
.globl line.
.globl erase.
.globl frame.
.globl arc.
.globl circle.
.globl temp
.globl retrn
frame.: temp
.+2
jsr pc,setfil
mov 2(r3),r0
movb 2(r0),frame+1
mov f,r0
sys write; frame; 2
jmp retrn
move.: temp
.+2
jsr pc,garg
mov r0,x
mov r1,y
jmp retrn
/ line(x, y)
/
/ plot vector from current x,y
/ to arguments, setting current
/ x,y when done to arguments
/
line.: temp
.+2
jsr pc,garg
mov r0,x1
mov r1,y1
movb $3,command
mov f,r0
sys write; command; 9
mov x1,x
mov y1,y
jmp retrn
/ call circle(x, y, radius)
/ circle's center at x, y
circle.:temp
.+2
jsr pc,garg
mov r0,x
mov r1,y
mov 6(r3),r0
mov 2(r0),r0
ash $2,r0
mov r0,x1
movb $5,command
mov f,r0
sys write; command; 7
jmp retrn
/ call arc(xo, yo, x1, y1, x2, y2)
/ plot circle arc: origin xo,yo;
/ counterclockwise from x1,y1 to x2,y2
arc.: temp
.+2
jsr pc,garg
mov r0,x
mov r1,y
cmp (r3)+,(r3)+
jsr pc,garg
mov r0,x1
mov r1,y1
cmp (r3)+,(r3)+
jsr pc,garg
mov r0,x2
mov r1,y2
movb $6,command
mov f,r0
sys write; command; 13.
sub $8.,r3
jmp retrn
setfil:
tst f
bne 1f
sys creat; vt; 17
bes 9f
mov r0,f
1:
rts pc
garg:
jsr pc,setfil
mov 2(r3),r0
mov 2(r0),r0
mov 4(r3),r1
mov 2(r1),r1
ash $2,r0
ash $2,r1
sub $2048.,r0
sub $2048.,r1
rts pc
9:
mov $1,r0
sys write; bmes; emes-bmes
sys exit
frame: .byte 4,0
erase: .byte 1,1
.byte 0
vt: </dev/vt0\0>
bmes: <VT unwritable.\n>; emes:
.bss
.=.+1
command:.=.+1
x: .=.+2
y: .=.+2
x1: .=.+2
y1: .=.+2
x2: .=.+2
y2: .=.+2
f: .=.+2