www.pudn.com > tp60src.zip > TDINFO3.INC


l0b84	proc	near 
	mov	ax,es 
	cmp	ax,d3cb2 
	jne	@@3 
	cmp	ax,LastUnit 
	je	@@3 
	mov	bx,es:[di+4] 
	cmp	d3cbe,0 
	je	@@1 
	test	bx,8000h 
	jz	@@3 
	and	bx,7fffh 
	mov	es:[di+4],bx 
	jmp	short @@2 
@@1:	test	bx,8000h 
	jnz	@@3 
	or	es:[di+4],8000h 
@@2:	push	es di 
	mov	bl,es:[di] 
	xor	bh,bh 
	shl	bx,1 
	call	cs:ProcessSwitch[bx] 
	pop	di es 
@@3:	ret 
l0b84	endp 
 
ProcessVoid	proc	near 
	mov	ax,1 
	jmp	Error 
ProcessVoid	endp 
 
ProcessString	proc	near 
	mov	al,3 
	mov	dx,es:[di+2] 
	mov	ah,dl 
	dec	ah 
	xor	bx,bx 
	call	l10f1 
	ret 
ProcessString	endp 
 
ProcessOrdinal	proc	near 
	push	es di 
	mov	bx,es:[di+10h] 
	mov	di,es:[di+0eh] 
	mov	es,es:[bx] 
	mov	bx,es:[di+4] 
	and	bx,7fffh 
	pop	di es 
	mov	al,es:[di] 
	mov	dx,es:[di+2] 
	mov	cl,es:[di+1] 
	mov	al,8 
	test	cl,1 
	jz	@@1 
	mov	al,4 
@@1:	test	cl,4 
	jz	@@2 
	inc	al 
@@2:	test	cl,8 
	jz	@@3 
	inc	al 
@@3:	xor	ah,ah 
	call	l10f1 
	mov	ax,es:[di+6] 
	mov	bx,es:[di+8] 
	mov	cx,es:[di+0ah] 
	mov	dx,es:[di+0ch] 
	call	StoreType 
	ret 
ProcessOrdinal	endp 
 
ProcessEnum	proc	near 
	push	es di 
	mov	dx,di 
	mov	ax,es 
	mov	bx,es:[di+10h] 
	mov	di,es:[di+0eh] 
	mov	es,es:[bx] 
	cmp	di,dx 
	jne	@@1 
	mov	cx,es 
	cmp	ax,cx 
	je	@@2 
@@1:	call	l0b84 
	mov	bx,es:[di+4] 
	and	bx,7fffh 
	mov	cx,es:[di+1ch] 
	jmp	short @@8 
@@2:	test	d3caa,200h 
	jz	@@3 
	mov	ax,Cnt.MemberCount 
	mov	es:[di+1ch],ax 
@@3:	push	ax 
	push	es:[di+1] 
	mov	cx,es:[di+0ah] 
	inc	cx 
	add	di,1eh 
	mov	si,di 
	mov	d3ce6.B0,0 
@@4:	push	cx bx 
	mov	bl,es:[si+3] 
	xor	bh,bh 
	lea	di,[bx+si+4] 
	pop	bx 
	call	l0f1f 
	pop	cx 
	mov	si,di 
	add	si,8 
	loop	@@4 
	call	PatchMember 
	pop	cx 
	mov	bx,8 
	test	cl,1 
	jz	@@5 
	mov	bx,2 
@@5:	test	cl,4 
	jz	@@6 
	inc	bx 
	inc	bx 
@@6:	test	cl,8 
	jz	@@7 
	inc	bx 
	inc	bx 
@@7:	pop	cx 
@@8:	pop	di es 
	push	cx 
	mov	dx,es:[di+2] 
	mov	ax,29h 
	call	l10f1 
	mov	ax,es:[di+6] 
	mov	bx,es:[di+0ah] 
	pop	cx 
	xor	dx,dx 
	call	StoreType 
	ret 
ProcessEnum	endp 
 
ProcessArray	proc	near 
	push	d3ce2 d3ce4 es di es di 
	mov	bx,es:[di+8] 
	mov	di,es:[di+6] 
	mov	es,es:[bx] 
	call	l0b84 
	mov	ax,es:[di+4] 
	and	ax,7fffh 
	mov	d3ce2,ax 
	pop	di es 
	mov	bx,es:[di+0ch] 
	mov	di,es:[di+0ah] 
	mov	es,es:[bx] 
	call	l0b84 
	mov	ax,es:[di+4] 
	and	ax,7fffh 
	mov	d3ce4,ax 
	pop	di es 
	mov	al,1ch 
	xor	ah,ah 
	mov	dx,es:[di+2] 
	mov	bx,d3ce2 
	call	l10f1 
	mov	ax,d3ce4 
	xor	bx,bx 
	xor	cx,cx 
	xor	dx,dx 
	call	StoreType 
	pop	d3ce4 d3ce2 
	ret 
ProcessArray	endp 
 
ProcessRecord	proc	near 
	push	d3ce6 
	xor	bx,bx 
	mov	si,es:[di+8] 
	or	si,si 
	jz	@@5 
	call	l0f5e 
	push	es di Cnt.MemberCount 
	mov	bx,-1 
	mov	d3ce6.B0,0 
@@1:	push	bx 
	mov	bl,es:[si+3] 
	xor	bh,bh 
	lea	di,[bx+si+4] 
	pop	bx 
	push	es:[di+3] 
	mov	ax,es:[di+1] 
	push	ax 
	cmp	ax,bx 
	jg	@@2 
	mov	bx,ax 
	xor	cx,cx 
	mov	al,40h 
	call	_StoreMember 
@@2:	call	l0ef8 
	pop	bx si 
	or	si,si 
	jnz	@@1 
	cmp	bx,-1 
	jne	@@3 
	call	StoreMember 
	jmp	short @@4 
@@3:	call	PatchMember 
@@4:	pop	bx di es 
@@5:	mov	al,1eh 
	xor	ah,ah 
	mov	dx,es:[di+2] 
	call	l10f1 
	pop	d3ce6 
	ret 
ProcessRecord	endp 
 
ProcessObject	proc	near 
	push	d3ce6 es di 
	mov	si,es:[di+8] 
	or	si,si 
	jz	@@9 
	call	l0f8b 
	mov	ax,Cnt.MemberCount 
	push	es di ax 
	cmp	Phase,0 
	jne	@@1 
	mov	es:[di+1ah],ax 
@@1:	xor	cl,cl 
	push	bx 
	mov	bl,es:[si+3] 
	xor	bh,bh 
	lea	di,[bx+si+4] 
	pop	bx 
	mov	al,es:[si+2] 
	and	al,7fh 
	cmp	al,53h 
	je	@@2 
	push	es:[di+3] 
	mov	d3ce6.B0,cl 
	call	l0ef8 
	jmp	short @@6 
@@2:	push	es:[di+0eh] 
	or	cl,48h 
	cmp	word ptr es:[di+8],0 
	je	@@3 
	or	cl,44h 
@@3:	test	byte ptr es:[di],20h 
	jz	@@4 
	or	cl,42h 
@@4:	test	byte ptr es:[di],40h 
	jz	@@5 
	or	cl,41h 
@@5:	mov	d3ce6.B0,cl 
	call	l0f28 
@@6:	pop	si 
	or	si,si 
	jnz	@@1 
	pop	ax 
	cmp	ax,Cnt.MemberCount 
	jne	@@7 
	call	StoreMember 
	jmp	short @@8 
@@7:	call	PatchMember 
@@8:	pop	di es 
@@9:	mov	al,2eh 
	xor	ah,ah 
	mov	dx,es:[di+2] 
	mov	bx,Cnt.ClassCount 
	call	l10f1 
	mov	bx,es:[di+0ch] 
	mov	ax,bx 
	mov	di,es:[di+0ah] 
	or	ax,di 
	jz	@@10 
	mov	es,es:[bx] 
	mov	ax,es:[di+4] 
	and	ax,7fffh 
	push	Cnt.ParentCount 
	call	StoreParent 
	pop	ax 
	mov	bx,1 
@@10:	pop	di es 
	mov	cx,es:[di+1ah] 
	mov	dx,es:[di+12h] 
	mov	d3ce6.B1,8 
	call	StoreClass 
	pop	d3ce6 
	ret 
ProcessObject	endp 
 
ProcessProcType	proc	near 
	mov	bx,1 
	mov	cx,es:[di+8] 
	mov	ax,es:[di+6] 
	mov	dx,ax 
	or	ax,cx 
	jz	@@1 
	push	es di 
	mov	bx,cx 
	mov	di,dx 
	mov	es,es:[bx] 
	call	l0b84 
	mov	bx,es:[di+4] 
	and	bx,7fffh 
	pop	di es 
@@1:	mov	al,23h 
	mov	ah,5 
	mov	cx,es:[di+0ah] 
	jcxz	@@5 
	push	di 
	add	di,0ch 
@@2:	test	byte ptr es:[di+4],4 
	jz	@@3 
	or	ah,80h 
	jmp	short @@4 
@@3:	add	di,5 
	loop	@@2 
@@4:	pop	di 
@@5:	mov	dx,es:[di+2] 
	call	l10f1 
	ret 
ProcessProcType	endp 
 
ProcessFile	proc	near 
	mov	ax,27h 
	call	l0ed4 
	ret 
ProcessFile	endp 
 
ProcessPointer	proc	near 
	mov	ax,16h 
	call	l0ed4 
	ret 
ProcessPointer	endp 
 
ProcessSet	proc	near 
	mov	ax,25h 
	call	l0ed4 
	ret 
ProcessSet	endp 
 
l0ed4	proc	near 
	push	ax es di 
	mov	bx,es:[di+8] 
	mov	di,es:[di+6] 
	mov	es,es:[bx] 
	call	l0b84 
	mov	bx,es:[di+4] 
	and	bx,7fffh 
	pop	di es ax 
	mov	dx,es:[di+2] 
	call	l10f1 
	ret 
l0ed4	endp 
 
l0ef8	proc	near 
	push	es di si 
	mov	bx,es:[di+7] 
	mov	di,es:[di+5] 
	mov	es,es:[bx] 
	mov	cx,es:[di+4] 
	and	cx,7fffh 
l0f0e	label	near 
	mov	al,d3ce6.B0 
	mov	bx,Cnt.NameCount 
	call	_StoreMember 
	pop	si di es 
	call	StoreName 
	ret 
l0ef8	endp 
 
l0f1f	proc	near 
	push	es di si 
	mov	cx,es:[di+4] 
	jmp	l0f0e 
l0f1f	endp 
 
l0f28	proc	near 
	mov	bx,es:[di+2] 
	add	bx,es:[0ch] 
	mov	ax,es:[bx] 
	mov	bx,es:[bx+4] 
	add	bx,es:[0eh] 
	cmp	word ptr es:[bx],-1 
	je	@@1 
	push	es di si 
	mov	bx,ax 
	mov	es,ProcInfo 
	mov	cx,es:[bx+2] 
	mov	bx,es:[bx+4] 
	mov	al,d3ce6.B0 
	call	_StoreMember 
	pop	si di es 
@@1:	ret 
l0f28	endp 
 
l0f5e	proc	near 
	push	es di si bx 
@@1:	push	bx 
	mov	bl,es:[si+3] 
	xor	bh,bh 
	lea	di,[bx+si+4] 
	pop	bx 
	push	es 
	push	es:[di+3] 
	mov	bx,es:[di+7] 
	mov	di,es:[di+5] 
	mov	es,es:[bx] 
	call	l0b84 
	pop	si es 
	or	si,si 
	jnz	@@1 
	pop	bx si di es 
	ret 
l0f5e	endp 
 
l0f8b	proc	near 
	push	es di si bx 
@@1:	mov	bl,es:[si].seName 
	xor	bh,bh 
	lea	di,[bx+size TSymbol+si] 
	mov	al,es:[si].seType 
	and	al,not t_Private 
	cmp	al,t_Proc 
	jne	@@3 
	push	es es:[di].psType.tdNext 
	push	d3ce8 d3cd8 CurName CurSymbol 
	mov	CurSymbol.Segm,es 
	mov	CurSymbol.Offs,di 
	mov	CurName.Segm,es 
	mov	CurName.Offs,si 
	call	ProcessProc 
	jc	@@2 
	les	si,CurName 
	call	StoreName 
@@2:	pop	CurSymbol CurName d3cd8 d3ce8 
	jmp	short @@4 
@@3:	push	es es:[di].vsMap 
	mov	bx,es:[di].vsType.Segm 
	mov	di,es:[di].vsType.Offs 
	mov	es,es:[bx] 
	call	l0b84 
@@4:	pop	si es 
	or	si,si 
	jz	@@5 
	jmp	@@1 
@@5:	pop	bx si di es 
	ret 
l0f8b	endp