head     56.3;
access   paws bayes jws quist brad dew jwh;
symbols  ;
locks    ; strict;
comment  @# @;


56.3
date     93.01.27.13.17.19;  author jwh;  state Exp;
branches ;
next     56.2;

56.2
date     93.01.27.11.58.39;  author jwh;  state Exp;
branches ;
next     56.1;

56.1
date     91.11.05.09.54.26;  author jwh;  state Exp;
branches ;
next     55.1;

55.1
date     91.08.25.10.29.49;  author jwh;  state Exp;
branches ;
next     54.3;

54.3
date     91.08.21.10.34.04;  author jwh;  state Exp;
branches ;
next     54.2;

54.2
date     91.08.21.09.38.48;  author jwh;  state Exp;
branches ;
next     54.1;

54.1
date     91.03.18.15.31.51;  author jwh;  state Exp;
branches ;
next     53.1;

53.1
date     91.03.11.19.31.44;  author jwh;  state Exp;
branches ;
next     52.1;

52.1
date     91.02.19.09.16.19;  author jwh;  state Exp;
branches ;
next     51.1;

51.1
date     91.01.30.16.15.57;  author jwh;  state Exp;
branches ;
next     50.1;

50.1
date     90.10.29.16.30.24;  author jwh;  state Exp;
branches ;
next     49.1;

49.1
date     90.08.14.14.14.12;  author jwh;  state Exp;
branches ;
next     48.1;

48.1
date     90.07.26.11.20.29;  author jwh;  state Exp;
branches ;
next     47.1;

47.1
date     90.05.14.11.04.59;  author dew;  state Exp;
branches ;
next     46.1;

46.1
date     90.05.07.08.51.59;  author jwh;  state Exp;
branches ;
next     45.1;

45.1
date     90.04.19.15.59.57;  author jwh;  state Exp;
branches ;
next     44.1;

44.1
date     90.04.01.22.17.05;  author jwh;  state Exp;
branches ;
next     43.1;

43.1
date     90.03.20.14.09.32;  author jwh;  state Exp;
branches ;
next     42.1;

42.1
date     90.01.23.17.53.59;  author jwh;  state Exp;
branches ;
next     41.1;

41.1
date     89.12.22.11.36.13;  author jwh;  state Exp;
branches ;
next     40.1;

40.1
date     89.09.29.11.57.22;  author jwh;  state Exp;
branches ;
next     39.1;

39.1
date     89.09.26.16.42.07;  author dew;  state Exp;
branches ;
next     38.1;

38.1
date     89.08.29.11.34.01;  author jwh;  state Exp;
branches ;
next     37.1;

37.1
date     89.05.12.11.47.44;  author dew;  state Exp;
branches ;
next     36.1;

36.1
date     89.02.06.10.25.25;  author dew;  state Exp;
branches ;
next     35.1;

35.1
date     89.02.02.13.40.46;  author dew;  state Exp;
branches ;
next     34.1;

34.1
date     89.01.23.16.16.03;  author jwh;  state Exp;
branches ;
next     33.1;

33.1
date     89.01.16.11.47.34;  author dew;  state Exp;
branches ;
next     32.1;

32.1
date     89.01.10.11.56.36;  author bayes;  state Exp;
branches ;
next     31.1;

31.1
date     88.12.14.18.17.37;  author bayes;  state Exp;
branches ;
next     30.1;

30.1
date     88.12.09.13.54.37;  author dew;  state Exp;
branches ;
next     29.1;

29.1
date     88.10.31.15.39.17;  author bayes;  state Exp;
branches ;
next     28.1;

28.1
date     88.10.06.11.05.38;  author dew;  state Exp;
branches ;
next     27.1;

27.1
date     88.09.29.11.48.16;  author bayes;  state Exp;
branches ;
next     26.1;

26.1
date     88.09.28.13.29.42;  author bayes;  state Exp;
branches ;
next     25.1;

25.1
date     88.03.02.09.41.38;  author bayes;  state Exp;
branches ;
next     24.1;

24.1
date     87.08.31.10.10.43;  author jws;  state Exp;
branches ;
next     23.1;

23.1
date     87.08.26.10.53.31;  author bayes;  state Exp;
branches ;
next     22.1;

22.1
date     87.08.17.11.35.11;  author bayes;  state Exp;
branches ;
next     21.1;

21.1
date     87.08.12.14.19.06;  author bayes;  state Exp;
branches ;
next     20.1;

20.1
date     87.07.30.11.30.54;  author bayes;  state Exp;
branches ;
next     19.1;

19.1
date     87.06.01.08.43.25;  author jws;  state Exp;
branches ;
next     18.1;

18.1
date     87.05.20.15.49.24;  author bayes;  state Exp;
branches ;
next     17.1;

17.1
date     87.04.30.10.54.56;  author jws;  state Exp;
branches ;
next     16.1;

16.1
date     87.04.26.16.05.34;  author jws;  state Exp;
branches ;
next     15.1;

15.1
date     87.04.13.09.45.00;  author jws;  state Exp;
branches ;
next     14.1;

14.1
date     87.04.01.15.53.39;  author jws;  state Exp;
branches ;
next     13.1;

13.1
date     87.02.28.18.49.03;  author jws;  state Exp;
branches ;
next     12.1;

12.1
date     87.02.02.13.41.35;  author jws;  state Exp;
branches ;
next     11.1;

11.1
date     87.01.19.10.08.16;  author jws;  state Exp;
branches ;
next     10.1;

10.1
date     86.12.24.11.22.56;  author jws;  state Exp;
branches ;
next     9.1;

9.1
date     86.12.12.15.05.43;  author bayes;  state Exp;
branches ;
next     8.1;

8.1
date     86.11.27.12.16.57;  author jws;  state Exp;
branches ;
next     7.1;

7.1
date     86.11.20.14.25.47;  author hal;  state Exp;
branches ;
next     6.1;

6.1
date     86.11.04.18.21.36;  author paws;  state Exp;
branches ;
next     5.1;

5.1
date     86.10.28.17.09.19;  author hal;  state Exp;
branches ;
next     4.1;

4.1
date     86.09.30.20.05.49;  author hal;  state Exp;
branches ;
next     3.1;

3.1
date     86.09.01.12.16.04;  author hal;  state Exp;
branches ;
next     2.1;

2.1
date     86.07.30.15.05.04;  author hal;  state Exp;
branches ;
next     1.1;

1.1
date     86.06.30.16.28.28;  author danm;  state tmp;
branches ;
next     ;


desc
@Base file for PWS 3.2 release.

@


56.3
log
@
pws2rcs automatic delta on Wed Jan 27 13:14:25 MST 1993
@
text
@	rorg 0
	nosyms

	def     evalgvr,relocate
	refa    sysglobals,loader

escapecode      equ sysglobals-2          globals:
newmods         equ loader-28

defaddr         equ 6           fields of mdb
defsize         equ 10
extaddr         equ 16
relocdelta      equ 38
globaldelta     equ 42

op              equ 1           fields in gvr
done            equ 0

longoffset      equ 8           fields in a gvr:
valueextend     equ 9
patchable       equ 10
datasize        equ 11
primarytype     equ 14

sbyteerr        equ 100         arithmetic errors
sworderr        equ 101
sinterr         equ 102
ubyteerr        equ 104
uworderr        equ 105

deptherr        equ 110
formaterr       equ 111

maxdepth        equ 10

gvalue  equ d0
sub     equ d1
gvr     equ d2
field   equ d3
dtemp   equ d4
depth   equ d5

gvrptr  equ a0
modptr  equ a1
*above used by runlist
aobject equ d6
atemp   equ a2
return  equ a3
object  equ a4

*proc relocate(refbuftop, refindex: address;
*              var object:  address;
*              modptr:  moddescptr);

jtable  dc.w    sbyte-jtable
	dc.w    sword-jtable
	dc.w    sint-jtable
	dc.w    ferror-jtable   reserved
	dc.w    ubyte-jtable
	dc.w    uword-jtable
	dc.w    ferror-jtable   reserved
	dc.w    ferror-jtable   reserved

ferror  move.w  #formaterr,escapecode(a5)
	trap    #10

relocate movea.l (sp)+,return
	movea.l (sp)+,modptr
	movea.l (sp)+,object
	move.l  (object),aobject
	exg     object,aobject
	movea.l (sp)+,gvrptr    refindex
	movea.l (sp)+,atemp     refbuftop
	clr.b   sub
	moveq   #maxdepth,depth
	bra     nextref

refloop move.w  (gvrptr)+,gvr   get ref record
	clr.l   field
	move.b  gvr,field       short offset
	btst    #longoffset,gvr
	beq.s   short
	swap    field           shift left 16
	move.w  (gvrptr)+,field
short   adda.l  field,object
	move    gvr,field       get data size
	rol.w   #16-datasize+1,field
	and     #7+7,field      3 bits
	move.w  jtable(field.w),dtemp
	jmp     jtable(dtemp.w)

sbyte   move.b  (object),gvalue
	ext.w   gvalue
	ext.l   gvalue
	bsr.s   runref
	move.b  gvalue,(object)
	moveq   #32-8,dtemp
	asl.l   dtemp,gvalue
	bvc.s   nextref
	move.w  #sbyteerr,escapecode(a5)
	bra.s   linkerr

sword   move.w  (object),gvalue
	ext.l   gvalue
	bsr.s   runref
	move.w  gvalue,(object)
	moveq   #32-16,dtemp
	asl.l   dtemp,gvalue
	bvc.s   nextref
	move.w  #sworderr,escapecode(a5)
	bra.s   linkerr

sint    move.l  (object),gvalue
	bsr.s   runref
	move.l  gvalue,(object)
	bra.s   nextref

ubyte   clr.l   gvalue
	move.b  (object),gvalue
	bsr.s   runref
	move.b  gvalue,(object)
	asr.l   #8,gvalue
	beq.s   nextref
	move.w  #ubyteerr,escapecode(a5)
	bra.s   linkerr

uword   clr.l   gvalue
	move.w  (object),gvalue
	bsr.s   runref
	move.w  gvalue,(object)
	and.l   #$FFFF0000,gvalue
	beq.s   nextref
	move.w  #uworderr,escapecode(a5)
	bra.s   linkerr

nextref cmpa.l  atemp,gvrptr
	blt     refloop

	jmp     (return)

runlist move.w  (gvrptr)+,gvr   get gvr record
runref  btst    #valueextend,gvr
	beq.s   pt
	tst.b   sub
	bpl.s   addit
	sub.l   (gvrptr)+,gvalue
	bvc.s   pt
intover move.w  #sinterr,escapecode(a5)
linkerr exg     object,aobject
	move.l  aobject,(object)
	trap    #10
addit   add.l   (gvrptr)+,gvalue
	bvs     intover
pt      rol.w   #16-primarytype,gvr     type
	and     #3,gvr                  2 bits
	beq.s   endrun          done if abs
	move.l  modptr,dtemp    find module
	bne.s   notnil
	movea.l newmods(a5),modptr
	bra.s   mstart
mloop   movea.l (modptr),modptr         link
mstart  move.l  defaddr(modptr),dtemp
	cmpa.l  dtemp,gvrptr
	ble.s   mloop
	add.l   defsize(modptr),dtemp
	cmpa.l  dtemp,gvrptr
	bgt.s   mloop
notnil  subq    #2,gvr          primary type
	ble.s   addref          reloc or global
	dbra    depth,rloop     limit recursion
	move.w  #deptherr,escapecode(a5)
	trap    #10
rloop   move.w  (gvrptr)+,gvr
	move    sub,dtemp       save for later
	btst    #op,gvr
	beq.s   nosub
	not.b   sub
nosub   move    gvr,field
	and     #$FFFC,field    adr field
	cmp     #4,field
	bgt.s   defref
	bsr.s   addref
	move    dtemp,sub
	bra.s   nextr
defref  move.l  modptr,-(sp)    save modptr
	move.l  gvrptr,-(sp)    save gvrptr
	move.w  gvr,-(sp)       save done
	move.b  dtemp,-(sp)     save sub
	movea.l extaddr(modptr),gvrptr
	movea.l 0(gvrptr,field.w),gvrptr
	clr     dtemp
	movea.w dtemp,modptr    modptr := NIL
	move.b  (gvrptr),dtemp  length of symbol
	addq    #2,dtemp        skip symbol
	bclr    #0,dtemp
	adda.w  dtemp,gvrptr
	bsr     runlist
	move.b  (sp)+,sub       restore sub
	move.w  (sp)+,gvr       restore done
	movea.l (sp)+,gvrptr    restore gvrptr
	movea.l (sp)+,modptr    save modptr
nextr   btst    #done,gvr
	beq     rloop
	addq    #1,depth
endrun  rts

addref  blt.s   reloc

global  tst.b   sub
	bpl.s   addglobal
	sub.l   globaldelta(modptr),gvalue
	bvs     intover
	rts
addglobal add.l globaldelta(modptr),gvalue
	bvs     intover
	rts

reloc   tst.b   sub
	bpl.s   addreloc
	sub.l   relocdelta(modptr),gvalue
	bvs     intover
	rts
addreloc add.l  relocdelta(modptr),gvalue
	bvs     intover
	rts

*proc evalgvr(var gvalue, gvrptr:  address;
*                 modptr: moddescptr);

evalgvr movea.l (sp)+,return    return address
	movea.l (sp)+,modptr
	movea.l (sp)+,atemp     var gvrptr
	movea.l (atemp),gvrptr
	clr.l   gvalue
	clr.b   sub
	moveq   #maxdepth,depth        allow nesting
	bsr     runlist
	move.l  gvrptr,(atemp)
	movea.l (sp)+,atemp     var gvalue
	move.l  gvalue,(atemp)
	jmp     (return)


	end

@


56.2
log
@
pws2rcs automatic delta on Wed Jan 27 11:57:27 MST 1993
@
text
@d1 245
@


56.1
log
@Automatic bump of revision number for PWS version 3.25
@
text
@a0 245
	rorg 0
	nosyms

	def     evalgvr,relocate
	refa    sysglobals,loader

escapecode      equ sysglobals-2          globals:
newmods         equ loader-28

defaddr         equ 6           fields of mdb
defsize         equ 10
extaddr         equ 16
relocdelta      equ 38
globaldelta     equ 42

op              equ 1           fields in gvr
done            equ 0

longoffset      equ 8           fields in a gvr:
valueextend     equ 9
patchable       equ 10
datasize        equ 11
primarytype     equ 14

sbyteerr        equ 100         arithmetic errors
sworderr        equ 101
sinterr         equ 102
ubyteerr        equ 104
uworderr        equ 105

deptherr        equ 110
formaterr       equ 111

maxdepth        equ 10

gvalue  equ d0
sub     equ d1
gvr     equ d2
field   equ d3
dtemp   equ d4
depth   equ d5

gvrptr  equ a0
modptr  equ a1
*above used by runlist
aobject equ d6
atemp   equ a2
return  equ a3
object  equ a4

*proc relocate(refbuftop, refindex: address;
*              var object:  address;
*              modptr:  moddescptr);

jtable  dc.w    sbyte-jtable
	dc.w    sword-jtable
	dc.w    sint-jtable
	dc.w    ferror-jtable   reserved
	dc.w    ubyte-jtable
	dc.w    uword-jtable
	dc.w    ferror-jtable   reserved
	dc.w    ferror-jtable   reserved

ferror  move.w  #formaterr,escapecode(a5)
	trap    #10

relocate movea.l (sp)+,return
	movea.l (sp)+,modptr
	movea.l (sp)+,object
	move.l  (object),aobject
	exg     object,aobject
	movea.l (sp)+,gvrptr    refindex
	movea.l (sp)+,atemp     refbuftop
	clr.b   sub
	moveq   #maxdepth,depth
	bra     nextref

refloop move.w  (gvrptr)+,gvr   get ref record
	clr.l   field
	move.b  gvr,field       short offset
	btst    #longoffset,gvr
	beq.s   short
	swap    field           shift left 16
	move.w  (gvrptr)+,field
short   adda.l  field,object
	move    gvr,field       get data size
	rol.w   #16-datasize+1,field
	and     #7+7,field      3 bits
	move.w  jtable(field.w),dtemp
	jmp     jtable(dtemp.w)

sbyte   move.b  (object),gvalue
	ext.w   gvalue
	ext.l   gvalue
	bsr.s   runref
	move.b  gvalue,(object)
	moveq   #32-8,dtemp
	asl.l   dtemp,gvalue
	bvc.s   nextref
	move.w  #sbyteerr,escapecode(a5)
	bra.s   linkerr

sword   move.w  (object),gvalue
	ext.l   gvalue
	bsr.s   runref
	move.w  gvalue,(object)
	moveq   #32-16,dtemp
	asl.l   dtemp,gvalue
	bvc.s   nextref
	move.w  #sworderr,escapecode(a5)
	bra.s   linkerr

sint    move.l  (object),gvalue
	bsr.s   runref
	move.l  gvalue,(object)
	bra.s   nextref

ubyte   clr.l   gvalue
	move.b  (object),gvalue
	bsr.s   runref
	move.b  gvalue,(object)
	asr.l   #8,gvalue
	beq.s   nextref
	move.w  #ubyteerr,escapecode(a5)
	bra.s   linkerr

uword   clr.l   gvalue
	move.w  (object),gvalue
	bsr.s   runref
	move.w  gvalue,(object)
	and.l   #$FFFF0000,gvalue
	beq.s   nextref
	move.w  #uworderr,escapecode(a5)
	bra.s   linkerr

nextref cmpa.l  atemp,gvrptr
	blt     refloop

	jmp     (return)

runlist move.w  (gvrptr)+,gvr   get gvr record
runref  btst    #valueextend,gvr
	beq.s   pt
	tst.b   sub
	bpl.s   addit
	sub.l   (gvrptr)+,gvalue
	bvc.s   pt
intover move.w  #sinterr,escapecode(a5)
linkerr exg     object,aobject
	move.l  aobject,(object)
	trap    #10
addit   add.l   (gvrptr)+,gvalue
	bvs     intover
pt      rol.w   #16-primarytype,gvr     type
	and     #3,gvr                  2 bits
	beq.s   endrun          done if abs
	move.l  modptr,dtemp    find module
	bne.s   notnil
	movea.l newmods(a5),modptr
	bra.s   mstart
mloop   movea.l (modptr),modptr         link
mstart  move.l  defaddr(modptr),dtemp
	cmpa.l  dtemp,gvrptr
	ble.s   mloop
	add.l   defsize(modptr),dtemp
	cmpa.l  dtemp,gvrptr
	bgt.s   mloop
notnil  subq    #2,gvr          primary type
	ble.s   addref          reloc or global
	dbra    depth,rloop     limit recursion
	move.w  #deptherr,escapecode(a5)
	trap    #10
rloop   move.w  (gvrptr)+,gvr
	move    sub,dtemp       save for later
	btst    #op,gvr
	beq.s   nosub
	not.b   sub
nosub   move    gvr,field
	and     #$FFFC,field    adr field
	cmp     #4,field
	bgt.s   defref
	bsr.s   addref
	move    dtemp,sub
	bra.s   nextr
defref  move.l  modptr,-(sp)    save modptr
	move.l  gvrptr,-(sp)    save gvrptr
	move.w  gvr,-(sp)       save done
	move.b  dtemp,-(sp)     save sub
	movea.l extaddr(modptr),gvrptr
	movea.l 0(gvrptr,field.w),gvrptr
	clr     dtemp
	movea.w dtemp,modptr    modptr := NIL
	move.b  (gvrptr),dtemp  length of symbol
	addq    #2,dtemp        skip symbol
	bclr    #0,dtemp
	adda.w  dtemp,gvrptr
	bsr     runlist
	move.b  (sp)+,sub       restore sub
	move.w  (sp)+,gvr       restore done
	movea.l (sp)+,gvrptr    restore gvrptr
	movea.l (sp)+,modptr    save modptr
nextr   btst    #done,gvr
	beq     rloop
	addq    #1,depth
endrun  rts

addref  blt.s   reloc

global  tst.b   sub
	bpl.s   addglobal
	sub.l   globaldelta(modptr),gvalue
	bvs     intover
	rts
addglobal add.l globaldelta(modptr),gvalue
	bvs     intover
	rts

reloc   tst.b   sub
	bpl.s   addreloc
	sub.l   relocdelta(modptr),gvalue
	bvs     intover
	rts
addreloc add.l  relocdelta(modptr),gvalue
	bvs     intover
	rts

*proc evalgvr(var gvalue, gvrptr:  address;
*                 modptr: moddescptr);

evalgvr movea.l (sp)+,return    return address
	movea.l (sp)+,modptr
	movea.l (sp)+,atemp     var gvrptr
	movea.l (atemp),gvrptr
	clr.l   gvalue
	clr.b   sub
	moveq   #maxdepth,depth        allow nesting
	bsr     runlist
	move.l  gvrptr,(atemp)
	movea.l (sp)+,atemp     var gvalue
	move.l  gvalue,(atemp)
	jmp     (return)


	end

@


55.1
log
@Automatic bump of revision number for PWS version 3.25A
@
text
@@


54.3
log
@
pws2rcs automatic delta on Wed Aug 21 10:27:27 MDT 1991
@
text
@@


54.2
log
@
pws2rcs automatic delta on Wed Aug 21 09:35:48 MDT 1991
@
text
@d1 245
@


54.1
log
@Automatic bump of revision number for PWS version 3.24
@
text
@a0 245
	rorg 0
	nosyms

	def     evalgvr,relocate
	refa    sysglobals,loader

escapecode      equ sysglobals-2          globals:
newmods         equ loader-28

defaddr         equ 6           fields of mdb
defsize         equ 10
extaddr         equ 16
relocdelta      equ 38
globaldelta     equ 42

op              equ 1           fields in gvr
done            equ 0

longoffset      equ 8           fields in a gvr:
valueextend     equ 9
patchable       equ 10
datasize        equ 11
primarytype     equ 14

sbyteerr        equ 100         arithmetic errors
sworderr        equ 101
sinterr         equ 102
ubyteerr        equ 104
uworderr        equ 105

deptherr        equ 110
formaterr       equ 111

maxdepth        equ 10

gvalue  equ d0
sub     equ d1
gvr     equ d2
field   equ d3
dtemp   equ d4
depth   equ d5

gvrptr  equ a0
modptr  equ a1
*above used by runlist
aobject equ d6
atemp   equ a2
return  equ a3
object  equ a4

*proc relocate(refbuftop, refindex: address;
*              var object:  address;
*              modptr:  moddescptr);

jtable  dc.w    sbyte-jtable
	dc.w    sword-jtable
	dc.w    sint-jtable
	dc.w    ferror-jtable   reserved
	dc.w    ubyte-jtable
	dc.w    uword-jtable
	dc.w    ferror-jtable   reserved
	dc.w    ferror-jtable   reserved

ferror  move.w  #formaterr,escapecode(a5)
	trap    #10

relocate movea.l (sp)+,return
	movea.l (sp)+,modptr
	movea.l (sp)+,object
	move.l  (object),aobject
	exg     object,aobject
	movea.l (sp)+,gvrptr    refindex
	movea.l (sp)+,atemp     refbuftop
	clr.b   sub
	moveq   #maxdepth,depth
	bra     nextref

refloop move.w  (gvrptr)+,gvr   get ref record
	clr.l   field
	move.b  gvr,field       short offset
	btst    #longoffset,gvr
	beq.s   short
	swap    field           shift left 16
	move.w  (gvrptr)+,field
short   adda.l  field,object
	move    gvr,field       get data size
	rol.w   #16-datasize+1,field
	and     #7+7,field      3 bits
	move.w  jtable(field.w),dtemp
	jmp     jtable(dtemp.w)

sbyte   move.b  (object),gvalue
	ext.w   gvalue
	ext.l   gvalue
	bsr.s   runref
	move.b  gvalue,(object)
	moveq   #32-8,dtemp
	asl.l   dtemp,gvalue
	bvc.s   nextref
	move.w  #sbyteerr,escapecode(a5)
	bra.s   linkerr

sword   move.w  (object),gvalue
	ext.l   gvalue
	bsr.s   runref
	move.w  gvalue,(object)
	moveq   #32-16,dtemp
	asl.l   dtemp,gvalue
	bvc.s   nextref
	move.w  #sworderr,escapecode(a5)
	bra.s   linkerr

sint    move.l  (object),gvalue
	bsr.s   runref
	move.l  gvalue,(object)
	bra.s   nextref

ubyte   clr.l   gvalue
	move.b  (object),gvalue
	bsr.s   runref
	move.b  gvalue,(object)
	asr.l   #8,gvalue
	beq.s   nextref
	move.w  #ubyteerr,escapecode(a5)
	bra.s   linkerr

uword   clr.l   gvalue
	move.w  (object),gvalue
	bsr.s   runref
	move.w  gvalue,(object)
	and.l   #$FFFF0000,gvalue
	beq.s   nextref
	move.w  #uworderr,escapecode(a5)
	bra.s   linkerr

nextref cmpa.l  atemp,gvrptr
	blt     refloop

	jmp     (return)

runlist move.w  (gvrptr)+,gvr   get gvr record
runref  btst    #valueextend,gvr
	beq.s   pt
	tst.b   sub
	bpl.s   addit
	sub.l   (gvrptr)+,gvalue
	bvc.s   pt
intover move.w  #sinterr,escapecode(a5)
linkerr exg     object,aobject
	move.l  aobject,(object)
	trap    #10
addit   add.l   (gvrptr)+,gvalue
	bvs     intover
pt      rol.w   #16-primarytype,gvr     type
	and     #3,gvr                  2 bits
	beq.s   endrun          done if abs
	move.l  modptr,dtemp    find module
	bne.s   notnil
	movea.l newmods(a5),modptr
	bra.s   mstart
mloop   movea.l (modptr),modptr         link
mstart  move.l  defaddr(modptr),dtemp
	cmpa.l  dtemp,gvrptr
	ble.s   mloop
	add.l   defsize(modptr),dtemp
	cmpa.l  dtemp,gvrptr
	bgt.s   mloop
notnil  subq    #2,gvr          primary type
	ble.s   addref          reloc or global
	dbra    depth,rloop     limit recursion
	move.w  #deptherr,escapecode(a5)
	trap    #10
rloop   move.w  (gvrptr)+,gvr
	move    sub,dtemp       save for later
	btst    #op,gvr
	beq.s   nosub
	not.b   sub
nosub   move    gvr,field
	and     #$FFFC,field    adr field
	cmp     #4,field
	bgt.s   defref
	bsr.s   addref
	move    dtemp,sub
	bra.s   nextr
defref  move.l  modptr,-(sp)    save modptr
	move.l  gvrptr,-(sp)    save gvrptr
	move.w  gvr,-(sp)       save done
	move.b  dtemp,-(sp)     save sub
	movea.l extaddr(modptr),gvrptr
	movea.l 0(gvrptr,field.w),gvrptr
	clr     dtemp
	movea.w dtemp,modptr    modptr := NIL
	move.b  (gvrptr),dtemp  length of symbol
	addq    #2,dtemp        skip symbol
	bclr    #0,dtemp
	adda.w  dtemp,gvrptr
	bsr     runlist
	move.b  (sp)+,sub       restore sub
	move.w  (sp)+,gvr       restore done
	movea.l (sp)+,gvrptr    restore gvrptr
	movea.l (sp)+,modptr    save modptr
nextr   btst    #done,gvr
	beq     rloop
	addq    #1,depth
endrun  rts

addref  blt.s   reloc

global  tst.b   sub
	bpl.s   addglobal
	sub.l   globaldelta(modptr),gvalue
	bvs     intover
	rts
addglobal add.l globaldelta(modptr),gvalue
	bvs     intover
	rts

reloc   tst.b   sub
	bpl.s   addreloc
	sub.l   relocdelta(modptr),gvalue
	bvs     intover
	rts
addreloc add.l  relocdelta(modptr),gvalue
	bvs     intover
	rts

*proc evalgvr(var gvalue, gvrptr:  address;
*                 modptr: moddescptr);

evalgvr movea.l (sp)+,return    return address
	movea.l (sp)+,modptr
	movea.l (sp)+,atemp     var gvrptr
	movea.l (atemp),gvrptr
	clr.l   gvalue
	clr.b   sub
	moveq   #maxdepth,depth        allow nesting
	bsr     runlist
	move.l  gvrptr,(atemp)
	movea.l (sp)+,atemp     var gvalue
	move.l  gvalue,(atemp)
	jmp     (return)


	end

@


53.1
log
@Automatic bump of revision number for PWS version 3.24B
@
text
@@


52.1
log
@Automatic bump of revision number for PWS version 3.24A
@
text
@@


51.1
log
@Automatic bump of revision number for PWS version 3.24d
@
text
@@


50.1
log
@Automatic bump of revision number for PWS version 3.23c
@
text
@@


49.1
log
@Automatic bump of revision number for PWS version 3.24b
@
text
@@


48.1
log
@Automatic bump of revision number for PWS version 3.24a
@
text
@@


47.1
log
@Automatic bump of revision number for PWS version 3.23
@
text
@@


46.1
log
@Automatic bump of revision number for PWS version 3.23
@
text
@@


45.1
log
@Automatic bump of revision number for PWS version 3.23C
@
text
@@


44.1
log
@Automatic bump of revision number for PWS version 3.23B
@
text
@@


43.1
log
@Automatic bump of revision number for PWS version 3.23aA
@
text
@@


42.1
log
@Automatic bump of revision number for PWS version 3.23e
@
text
@@


41.1
log
@Automatic bump of revision number for PWS version 3.23d
@
text
@@


40.1
log
@Automatic bump of revision number for PWS version 3.23c
@
text
@@


39.1
log
@Automatic bump of revision number for PWS version 3.23b
@
text
@@


38.1
log
@Automatic bump of revision number for PWS version 3.23a
@
text
@@


37.1
log
@Automatic bump of revision number for PWS version 3.3a
@
text
@@


36.1
log
@Automatic bump of revision number for PWS version 3.22
@
text
@@


35.1
log
@Automatic bump of revision number for PWS version 3.22
@
text
@@


34.1
log
@Automatic bump of revision number for PWS version 3.22
@
text
@@


33.1
log
@Automatic bump of revision number for PWS version 3.22D
@
text
@@


32.1
log
@Automatic bump of revision number for PWS version 3.22C
@
text
@@


31.1
log
@Automatic bump of revision number for PWS version 3.22B
@
text
@@


30.1
log
@Automatic bump of revision number for PWS version 3.22A
@
text
@@


29.1
log
@Automatic bump of revision number for PWS version 3.22b
@
text
@@


28.1
log
@Automatic bump of revision number for PWS version 3.3b
@
text
@@


27.1
log
@Automatic bump of revision number for PWS version 3.3a
@
text
@@


26.1
log
@Automatic bump of revision number for PWS version 3.3 Synch
@
text
@@


25.1
log
@Automatic bump of revision number for PWS version 3.2Y
@
text
@@


24.1
log
@Automatic bump of revision number for PWS version 3.2
@
text
@@


23.1
log
@Automatic bump of revision number for PWS version 3.2P
@
text
@@


22.1
log
@Automatic bump of revision number for PWS version 3.2N
@
text
@@


21.1
log
@Automatic bump of revision number for PWS version 3.2M
@
text
@@


20.1
log
@Automatic bump of revision number for PWS version 3.2L
@
text
@@


19.1
log
@Automatic bump of revision number for PWS version 3.2K
@
text
@@


18.1
log
@Automatic bump of revision number for PWS version 3.2J
@
text
@@


17.1
log
@Automatic bump of revision number for PWS version 3.2I+
@
text
@@


16.1
log
@Automatic bump of revision number for PWS version 3.2I
@
text
@@


15.1
log
@Automatic bump of revision number for PWS version 3.2H
@
text
@@


14.1
log
@Automatic bump of revision number for PWS version 3.2G
@
text
@@


13.1
log
@Automatic bump of revision number for PWS version 3.2F
@
text
@@


12.1
log
@Automatic bump of revision number for PWS version 3.2E
@
text
@@


11.1
log
@Automatic bump of revision number for PWS version 3.2D
@
text
@@


10.1
log
@Automatic bump of revision number for PWS version 3.2C
@
text
@@


9.1
log
@Automatic bump of revision number for PWS version 3.2B
@
text
@@


8.1
log
@Automatic bump of revision number for PWS version 3.2A
@
text
@@


7.1
log
@Automatic bump of revision number for PWS version 3.2l
@
text
@@


6.1
log
@Automatic bump of revision number for PWS version 3.2k
@
text
@@


5.1
log
@Automatic bump of revision number for PWS version 3.2j
@
text
@@


4.1
log
@Automatic bump of revision number for PWS version 3.2i
@
text
@@


3.1
log
@Automatic bump of revision number for PWS version 3.2h
@
text
@@


2.1
log
@Auto bump rev number to 2.1 for sys 3.2e.
@
text
@@


1.1
log
@Initial revision
@
text
@@
