;(*---------------------------------------------------------------------------
;    :Program.	  SymTabA.asm
;    :Contents.	  Hilfsmodul für DisObject
;    :Author.	  Bernd Preusing
;    :Address.	  Gerhardstr. 16  D-2200 Elmshorn
;    :Phone.	  04121/22486
;    :Copyright.  Public Domain
;    :Language.	  68000 Assembler
;    :Translator. DevPac 2.0
;    :History.	  1.0 Aug-89 Bernd Preusing
;    :Remark.     Muß nach dem Assemblieren noch konvertiert werden!
;    :Reamrk.	  Disassembliertes Modul, handoptimiert
;---------------------------------------------------------------------------*)

; Module:
Arts			EQU	*-12
Exec			EQU	*-8
Hardware		EQU	*-4
; Variablen:
GLOBALBASE		EQU	*-16
Feld			EQU	-20022
l			EQU	-20036
lPtr			EQU	-20040
recs			EQU	-20044
mn			EQU	-20048
actName			EQU	-20056
; Prozeduren:
		XDEF	SymTabA ; später: SymTabAInit !
		XDEF	SearchAd
		XDEF	InsertAd
		XDEF	FirstAd
		XDEF	NextAd
		XDEF	GenSyms


Consts:
L000001:
 DC.B "L000001",0

L000002:
	MOVE.L	A4,-(A7)
	MOVEA.L	GLOBALBASE(PC),A4
	LEA	actName+6(A4),A3
L000003:
	ADDQ.B	#1,(A3)
	CMPI.B	#$39,(A3)
	BLS.s	L000004
	MOVE.B	#$30,(A3)
	SUBQ.L	#1,a3
	BRA.s	L000003
L000004:
	MOVEA.L	(A7)+,A4
	RTS
GenSyms:
	MOVE.L	A4,-(A7)
	MOVEA.L	GLOBALBASE(PC),A4
	LEA	L000001(PC),A3
	LEA	actName(A4),A2
	MOVEQ	#7,D6
L000007:
	MOVE.B	(A3)+,(A2)+
	DBEQ	D6,L000007
	MOVE.L	lPtr(A4),mn(A4)
L000008:
	MOVEA.L	mn(A4),A3
	MOVE.L	(A3),mn(A4)
	Beq.s	L000011 ; exit
L000009:
	MOVEA.L	mn(A4),A3
	TST.B	12(A3)
	BNE.s	L000010
	LEA	actName(A4),A2
	LEA	12(A3),A1
	MOVE.L	(A2)+,(A1)+
	MOVE.L	(A2)+,(A1)+
	MOVE.L	A3,-(A7)
	BSR	L000002
	MOVEA.L	(A7)+,A3
L000010:
	BRA.S	L000008
L000011:
	MOVEA.L	(A7)+,A4
	RTS

SearchAd: ; (a:longint):adrecptr;
	MOVE.L	A4,-(A7)
	MOVEA.L	GLOBALBASE(PC),A4
	move.l	8(a7),d6
	LEA	l(A4),A2
	MOVE.L	(A2),d0
	Beq.s	L000017
L000013:
	MOVE.L	d0,a2
	MOVE.L	(A2),d0
	Beq.s	L000017
	CMP.L	8(A2),D6
	BNE.s	L000013
L000016:
	MOVE.L	A2,D0
	addq.l	#8,d0
L000017:
	MOVEA.L	(A7)+,A4
	MOVEA.L	(A7)+,A0
	ADDQ.L	#4,A7
	JMP	(A0)


InsertAd:
	MOVE.L	A4,-(A7)
	MOVEA.L	GLOBALBASE(PC),A4
	LEA	l(A4),A0
	MOVE.L	(A0),d2
	MOVE.L	recs(A4),D0
	MOVEQ	#20,D1
	MOVEA.L	Arts(PC),A6
	JSR	-30(A6) ; mulu32
	LEA	Feld(A4),A3
	LEA	0(A3,D0.L),A3
	MOVE.L	A3,d3
	move.l	8(a7),d6 ; a
L000018: ; loop
	MOVE.L	d2,a0
	MOVE.L	(A0),d2
	BEQ.s	L000021
	CMP.L	8(A0),D6
	BGT.s	L000018
L000021:
	MOVE.L	4(A0),d2
	MOVE.L	d3,4(A0)
	MOVEA.L	d3,A3
	MOVE.L	a0,(A3)
	MOVE.L	d2,4(A3)
	MOVE.L	d6,8(A3)
	LEA	12(A7),A2
	LEA	12(A3),A1
	MOVE.L	(A2)+,(A1)+
	MOVE.L	(A2)+,(A1)+
	MOVEA.L	d2,A3
	MOVE.L	d3,(A3)
	ADDQ.L	#1,recs(A4)
	CMPI.L	#$000003E8,recs(A4)
	BLS.s	L000022
	MOVEQ	#0,D0
	MOVEA.L	Arts(PC),A6
	JSR	-24(A6)
L000022:
	MOVEA.L	(A7)+,A4
	MOVEA.L	(A7)+,A0
	LEA	12(A7),A7
	JMP	(A0)

FirstAd:
	MOVE.L	A4,-(A7)
	MOVEA.L	GLOBALBASE(PC),A4
	MOVEA.L	lPtr(A4),A3
	MOVE.L	(A3),d0
	move.l	d0,mn(A4)
	BEq.s	L000024
L000023:
	addq.l	#8,d0
L000024:
	MOVEA.L	(A7)+,A4
	RTS

NextAd:
	MOVE.L	A4,-(A7)
	MOVEA.L	GLOBALBASE(PC),A4
	move.l	mn(A4),d0
	BEq.s	L000028
L000026:
	MOVEA.L	d0,A3
	MOVE.L	(A3),d0
	move.l	d0,mn(A4)
	BEq.s	L000028
L000027:
	addq.l	#8,d0
L000028:
	MOVEA.L	(A7)+,A4
	RTS

SymTabA:
	MOVE.L	A4,-(A7)
	MOVEA.L	GLOBALBASE(PC),A4
	BSET	#0,-2(A4)
	BNE.s	L000031
	LEA	l(A4),A3
	MOVE.L	A3,lPtr(A4)
	LEA	4(A3),A2
	MOVE.L	A2,(A3)
	CLR.L	4(A3)
	MOVE.L	A3,8(A3)
	CLR.L	recs(A4)
L000031:
	MOVEA.L	(A7)+,A4
	RTS
	END
