|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T x
Length: 12525 (0x30ed)
Types: TextFile
Names: »x_buf.asm«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
└─⟦526ad3590⟧ »EUUGD11/gnu-31mar87/X.V10.R4.tar.Z«
└─⟦2109abc41⟧
└─⟦this⟧ »./X.V10R4/CLUlib/sun/x_buf.asm«
; Copyright Barbara Liskov 1986
x_buf = cluster is init, setup,
set_s0, set_s01, set_s01l1, set_s0123,
set_l0, set_l01, set_l0s23,
set_s45l3, set_s4567, set_l23, set_l2s67,
send_data, send_array, flush, receive, receive_data,
events,
get_lp0, get_lp1, get_lp2, get_lp3,
get_sp0, get_sp1, get_sp2, get_sp3, get_sp4, get_sp5,
get_bp10, get_bp11
rep = null
bufsize = 2048
rsize = 24
x_err = -1
x_reply = 0
ExposeWindow = #0080
ExposeRegion = #0100
ExposeCopy = #0200
UnmapWindow = #2000
FocusChange = #4000
args = -12
parms = 4
sock_stream = 1
%fionread = #4004,,#667f
wvec ev {11}
wvec obuf {513}
wvec ibuf {6}
wvec padbuf {1}
wvec reqcount {1}
own fdesc
own bufptr
own bufmin
own bufmax
init = proc (addr: _wordvec) signals (error(string))
clr -(sp)
moveq sock_stream,n1
move n1,-(sp)
movew 4(rr),n1
move n1,-(sp)
clr -(sp)
moveq %socket,n0
move n0,-(sp)
trap 0
bcs death
move n0,fdesc
move n0,4(sp)
move rr,n1
addq 4,n1
move n1,8(sp)
move (rr),n1
asr 1,n1
move n1,12(sp)
moveq %connect,n0
move n0,-(sp)
trap 0
ifcs
then move n0,n2
move fdesc,4(sp)
moveq %close,n0
move n0,-(sp)
trap 0
move n2,n0
death: lea 16(sp),sp
movea n0,rr
moveq 1,n0
lea 1(rr,rr),rr
_erstr(rr)
signal error(rr)
end
lea 16(sp),sp
clr -12(sp)
moveq 1,n0
clr reqcount
lea obuf,r1
subq 4,r1
move r1,bufmin
move r1,bufptr
adda bufsize,r1
move r1,bufmax
moveq 42,n1
move n1,ev
end init
setup = qproc (code, func, mask, win: int)
movea bufptr,r1
moveq rsize,n2
add n2,bufptr
move bufmax,n3
iflt cmp bufptr,n3
then suba bufmin,r1
move r1,-(sp)
pea obuf
move fdesc,-(sp)
clr -(sp)
qloop
moveq %write,n0
move n0,-(sp)
trap 0
bcs oops
add n0,8(sp)
sub n0,12(sp)
bne this
end
lea 16(sp),sp
moveq 1,n0
movea bufmin,r1
move r1,bufptr
add n2,bufptr
end
addq 4,r1
move code,n1
asrw 1,n1
moveb n1,(r1)+
move func,n1
asrw 1,n1
moveb n1,(r1)+
move mask,n1
asr 1,n1
movew n1,(r1)+
move rr,n1
asr 1,n1
move n1,(r1)
addq 1,reqcount
return
oops: lea 16(sp),sp
movea n0,rr
moveq 1,n0
lea 1(rr,rr),rr
move ep,-(sp)
movea sp,ep
_erstr(rr)
movea (sp)+,ep
signal failure(rr)
end setup
send_data = qproc (b: _bytevec, strt, z: int)
movea b,r1
move strt,n3
move (r1),n2
ifgt subq 3,n3
blt this
cmp n2,n3
then
bnds: signal failure("unhandled exception: bounds")
end
move rr,n1
blt bnds
move n1,n4
add n3,n4
cmp n2,n4
bhi bnds
ifeq asr 1,n1
then return
end
addq 3,n1
andib -4,n1
movea bufptr,r2
lea (r2,n1),r3
move bufmax,n4
asr 1,n3
lea 4(r1,n3),r1
ifge cmp r3,n4
then subq 1,n1
addq 4,r2
qloop
moveb (r1)+,(r2)+
dbra n1,this
end
movea n0,r1
move r3,bufptr
return
end
move r2,n3
sub bufmin,n3
move n3,-(sp)
pea obuf
move fdesc,-(sp)
clr -(sp)
qloop
moveq %write,n0
move n0,-(sp)
trap 0
bcs oops
add n0,8(sp)
sub n0,12(sp)
bne this
end
move bufmin,bufptr
move r1,8(sp)
move n1,12(sp)
qloop
moveq %write,n0
move n0,-(sp)
trap 0
bcs oops
add n0,8(sp)
sub n0,12(sp)
bne this
end
lea 16(sp),sp
clr -12(sp)
moveq 1,n0
movea n0,r1
return
oops: lea 16(sp),sp
clr -12(sp)
movea n0,rr
moveq 1,n0
movea n0,r1
lea 1(rr,rr),rr
move ep,-(sp)
movea sp,ep
_erstr(rr)
movea (sp)+,ep
signal failure(rr)
end send_data
send_array = qproc (a: array[char], strt, z: int)
move rr,n1
iflt subq 3,n1
then ifeq addq 2,n1
then return
end
bnds: signal failure("unhandled exception: bounds")
end
movea a,r1
move strt,n2
sub dv%low(r1),n2
blt bnds
cmp dv%max(r1),n2
bgt bnds
add n2,n1
cmp dv%max(r1),n1
bgt bnds
move rr,n1
asr 1,n1
addq 3,n1
andib -4,n1
add n2,n2
movea dv%rel(r1),r1
lea 1(r1,n2),r1
movea bufptr,r2
lea (r2,n1),r3
move bufmax,n4
iflt cmp r3,n4
then move r2,n3
sub bufmin,n3
move n3,-(sp)
pea obuf
move fdesc,-(sp)
clr -(sp)
qloop
moveq %write,n0
move n0,-(sp)
trap 0
bcs oops
add n0,8(sp)
sub n0,12(sp)
bne this
end
lea 16(sp),sp
moveq 1,n0
movea bufmin,r2
lea (r2,n1),r3
end
addq 4,r2
subq 1,n1
qloop
move (r1)+,n4
moveb n4,(r2)+
dbra n1,this
end
move r3,bufptr
movea n0,r1
return
oops: lea 16(sp),sp
clr -12(sp)
movea n0,rr
moveq 1,n0
movea n0,r1
lea 1(rr,rr),rr
move ep,-(sp)
movea sp,ep
_erstr(rr)
movea (sp)+,ep
signal failure(rr)
end send_array
set_s0 = qproc (s0: int)
movea bufptr,r1
move rr,n1
asr 1,n1
movew n1,args+0(r1)
end set_s0
set_s01 = qproc (s0, s1: int)
movea bufptr,r1
move rr,n1
asr 1,n1
movew n1,args+2(r1)
move s0,n1
asr 1,n1
movew n1,args+0(r1)
end set_s01
set_s01l1 = qproc (s0, s1, l1: int)
movea bufptr,r1
move rr,n1
asr 1,n1
move n1,args+4(r1)
move s1,n1
asr 1,n1
movew n1,args+2(r1)
move s0,n1
asr 1,n1
movew n1,args+0(r1)
end set_s01l1
set_s0123 = qproc (s0, s1, s2, s3: int)
movea bufptr,r1
move rr,n1
asr 1,n1
movew n1,args+6(r1)
move s2,n1
asr 1,n1
movew n1,args+4(r1)
move s1,n1
asr 1,n1
movew n1,args+2(r1)
move s0,n1
asr 1,n1
movew n1,args+0(r1)
end set_s0123
set_l0 = qproc (l0: int)
movea bufptr,r1
move rr,n1
asr 1,n1
move n1,args+0(r1)
end set_l0
set_l01 = qproc (l0, l1: int)
movea bufptr,r1
move rr,n1
asr 1,n1
move n1,args+4(r1)
move l0,n1
asr 1,n1
move n1,args+0(r1)
end set_l01
set_l0s23 = qproc (l0, s2, s3: int)
movea bufptr,r1
move rr,n1
asr 1,n1
movew n1,args+6(r1)
move s2,n1
asr 1,n1
movew n1,args+4(r1)
move l0,n1
asr 1,n1
move n1,args+0(r1)
end set_l0s23
set_s45l3 = qproc (s4, s5, l3: int)
movea bufptr,r1
move rr,n1
asr 1,n1
move n1,args+12(r1)
move s5,n1
asr 1,n1
movew n1,args+10(r1)
move s4,n1
asr 1,n1
movew n1,args+8(r1)
end set_s45l3
set_s4567 = qproc (s4, s5, s6, s7: int)
movea bufptr,r1
move rr,n1
asr 1,n1
movew n1,args+14(r1)
move s6,n1
asr 1,n1
movew n1,args+12(r1)
move s5,n1
asr 1,n1
movew n1,args+10(r1)
move s4,n1
asr 1,n1
movew n1,args+8(r1)
end set_s4567
set_l23 = qproc (l2, l3: int)
movea bufptr,r1
move rr,n1
asr 1,n1
move n1,args+12(r1)
move l2,n1
asr 1,n1
move n1,args+8(r1)
end set_l23
set_l2s67 = qproc (l2, s6, s7: int)
movea bufptr,r1
move rr,n1
asr 1,n1
movew n1,args+14(r1)
move s6,n1
asr 1,n1
movew n1,args+12(r1)
move l2,n1
asr 1,n1
move n1,args+8(r1)
end set_l2s67
flush = qproc ()
move bufptr,n2
lea obuf,r2
ifgt cmp r2,n2
then sub bufmin,n2
move n2,-(sp)
move r2,-(sp)
move fdesc,-(sp)
clr -(sp)
qloop
moveq %write,n0
move n0,-(sp)
trap 0
bcs oops
add n0,8(sp)
sub n0,12(sp)
bne this
end
lea 16(sp),sp
moveq 1,n0
move bufmin,bufptr
end
return
oops: lea 16(sp),sp
movea n0,rr
moveq 1,n0
lea 1(rr,rr),rr
move ep,-(sp)
movea sp,ep
_erstr(rr)
movea (sp)+,ep
signal failure(rr)
end flush
receive = proc () signals (error(string))
move bufptr,n2
lea obuf,r2
ifgt cmp r2,n2
then sub bufmin,n2
move n2,-(sp)
move r2,-(sp)
move fdesc,-(sp)
clr -(sp)
qloop
moveq %write,n0
move n0,-(sp)
trap 0
bcs oops
add n0,8(sp)
sub n0,12(sp)
bne this
end
lea 16(sp),sp
moveq 1,n0
move bufmin,bufptr
end
loop
moveq rsize,n2
lea ibuf,r1
move n2,-(sp)
move r1,-(sp)
move fdesc,-(sp)
clr -(sp)
moveq %read,n0
move n0,-(sp)
trap 0
bcs oops
cmp n0,n2
bne bad
lea 16(sp),sp
moveq 1,n0
ifeq tst (r1)
then return
end
ifne cmpi x_err,(r1)
then x_buf$%enq()
continue
end
moveq 0,n1
moveb parms+4(r1),n1
movea n1,rr
pea 1(rr,rr)
movea parms+0(r1),rr
pea 1(rr,rr)
moveb parms+5(r1),n1
movea n1,rr
pea 1(rr,rr)
moveb parms+6(r1),n1
movea n1,rr
pea 1(rr,rr)
movea parms+8(r1),rr
lea 1(rr,rr),rr
move parms+0(r1),n1
ifeq cmp reqcount,n1
then x_erstr(*, *, *, *, *)
signal error(rr)
end
x_erstr(*, *, *, *, *)
x_error(rr)
end
oops: lea 16(sp),sp
movea n0,rr
moveq 1,n0
lea 1(rr,rr),rr
_erstr(rr)
signal failure(rr)
bad: lea 16(sp),sp
moveq 1,n0
signal failure("incomplete message received")
end receive
receive_data = proc (b: _bytevec)
move (rr),n2
asr 1,n2
move n2,-(sp)
pea 4(rr)
move fdesc,-(sp)
clr -(sp)
qloop
moveq %read,n0
move n0,-(sp)
trap 0
bcs oops
add n0,8(sp)
sub n0,12(sp)
bne this
end
ifne andib 3,n2
then move n2,12(sp)
move rr,8(sp)
qloop
moveq %read,n0
move n0,-(sp)
trap 0
bcs oops
add n0,8(sp)
sub n0,12(sp)
bne this
end
end
lea 16(sp),sp
clr -12(sp)
moveq 1,n0
return
oops: lea 16(sp),sp
clr -12(sp)
movea n0,rr
moveq 1,n0
lea 1(rr,rr),rr
_erstr(rr)
signal failure(rr)
end receive_data
events = proc (need: bool)
var cnt
move bufptr,n2
lea obuf,r2
ifgt cmp r2,n2
then sub bufmin,n2
move n2,-(sp)
move r2,-(sp)
move fdesc,-(sp)
clr -(sp)
qloop
moveq %write,n0
move n0,-(sp)
trap 0
bcs oops
add n0,8(sp)
sub n0,12(sp)
bne this
end
lea 16(sp),sp
moveq 1,n0
move bufmin,bufptr
end
loop
again: pea cnt
move %fionread,-(sp)
move fdesc,-(sp)
clr -(sp)
moveq %ioctl,n0
move n0,-(sp)
trap 0
bcs oops
lea 16(sp),sp
ifeq tst cnt
then tst need
beq next
addq 1,cnt
end
clr need
moveq rsize,n2
qloop
move n2,-(sp)
lea ibuf,r1
move r1,-(sp)
move fdesc,-(sp)
clr -(sp)
moveq %read,n0
move n0,-(sp)
trap 0
bcs oops
lea 16(sp),sp
ifne cmp n0,n2
then moveq 1,n0
signal failure("incomplete message received")
end
moveq 1,n0
ifeq tst (r1)
then signal failure("protocol screwup")
end
ifeq cmpi x_err,(r1)
then moveq 0,n1
moveb parms+4(r1),n1
movea n1,rr
pea 1(rr,rr)
movea parms+0(r1),rr
pea 1(rr,rr)
moveb parms+5(r1),n1
movea n1,rr
pea 1(rr,rr)
moveb parms+6(r1),n1
movea n1,rr
pea 1(rr,rr)
movea parms+8(r1),rr
lea 1(rr,rr),rr
x_erstr(*, *, *, *, *)
x_error(rr)
bra again
end
x_buf$%enq()
moveq rsize,n2
sub n2,cnt
bgt this
end
end
lea 16(sp),sp
moveq 1,n0
return
oops: lea 16(sp),sp
movea n0,rr
moveq 1,n0
lea 1(rr,rr),rr
_erstr(rr)
signal failure(rr)
end events
%enq = proc ()
lea ibuf,r1
lea ev,rr
move (r1),n1
add n1,n1
addq 1,n1
move n1,4(rr)
move parms(r1),n1
add n1,n1
addq 1,n1
move n1,24(rr)
move parms+12(r1),n1
add n1,n1
addq 1,n1
move n1,12(rr)
moveaw parms+6(r1),r2
lea 1(r2,r2),r2
move r2,20(rr)
move (r1),n1
ifne andiw ExposeWindow+ExposeRegion,n1
then moveaw parms+8(r1),r2
lea 1(r2,r2),r2
move r2,32(rr)
moveaw parms+10(r1),r2
lea 1(r2,r2),r2
move r2,40(rr)
moveaw parms+16(r1),r2
lea 1(r2,r2),r2
move r2,36(rr)
moveaw parms+18(r1),r2
lea 1(r2,r2),r2
move r2,28(rr)
elfeq move (r1),n1
andiw UnmapWindow+FocusChange+ExposeCopy,n1
then clrb 21(rr)
andib 1,22(rr)
moveaw parms+4(r1),r2
lea 1(r2,r2),r2
move r2,16(rr)
moveq 0,n2
movew parms+6(r1),n2
clrb n2
add n2,n2
addq 1,n2
move n2,8(rr)
moveaw parms+8(r1),r2
lea 1(r2,r2),r2
move r2,28(rr)
moveaw parms+10(r1),r2
lea 1(r2,r2),r2
move r2,36(rr)
moveaw parms+16(r1),r2
lea 1(r2,r2),r2
move r2,40(rr)
moveaw parms+18(r1),r2
lea 1(r2,r2),r2
move r2,32(rr)
end
x_input$enq(rr)
end %enq
get_lp0 = qproc () returns (int)
lea ibuf,rr
movea parms+0(rr),rr
lea 1(rr,rr),rr
return(rr)
end get_lp0
get_lp1 = qproc () returns (int)
lea ibuf,rr
movea parms+4(rr),rr
lea 1(rr,rr),rr
return(rr)
end get_lp1
get_lp2 = qproc () returns (int)
lea ibuf,rr
movea parms+8(rr),rr
lea 1(rr,rr),rr
return(rr)
end get_lp2
get_lp3 = qproc () returns (int)
lea ibuf,rr
movea parms+12(rr),rr
lea 1(rr,rr),rr
return(rr)
end get_lp3
get_sp0 = qproc () returns (int)
lea ibuf,rr
moveaw parms+0(rr),rr
lea 1(rr,rr),rr
return(rr)
end get_sp0
get_sp1 = qproc () returns (int)
lea ibuf,rr
moveaw parms+2(rr),rr
lea 1(rr,rr),rr
return(rr)
end get_sp1
get_sp2 = qproc () returns (int)
lea ibuf,rr
moveaw parms+4(rr),rr
lea 1(rr,rr),rr
return(rr)
end get_sp2
get_sp3 = qproc () returns (int)
lea ibuf,rr
moveaw parms+6(rr),rr
lea 1(rr,rr),rr
return(rr)
end get_sp3
get_sp4 = qproc () returns (int)
lea ibuf,rr
moveaw parms+8(rr),rr
lea 1(rr,rr),rr
return(rr)
end get_sp4
get_sp5 = qproc () returns (int)
lea ibuf,rr
moveaw parms+10(rr),rr
lea 1(rr,rr),rr
return(rr)
end get_sp5
get_bp10 = qproc () returns (int)
lea ibuf,rr
moveq 0,n1
moveb parms+10(rr),n1
add n1,n1
addqb 1,n1
return(n1)
end get_bp10
get_bp11 = qproc () returns (int)
lea ibuf,rr
moveq 0,n1
moveb parms+11(rr),n1
add n1,n1
addqb 1,n1
return(n1)
end get_bp11
end x_buf