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