TCodeCompletionManger = class(tObject) EditControl: TEditControl; // + $04 PopupListBox: TPopupListBox; // + $08 end; procedure TCodeCompletionManager.PerformKibitz(InvokeType: codecmplt.TInvokeType {Byte}); var var: array[1..92] Pointer; S1: string; // -$17c +$FE84 S2: string; // -$1c S3: string; // -$0c Strings: TStringList // -$18 PopupListBox: TPopupListBox; // ebx KibitzResult: TKibitzResult; // +$FFFFFE88 label label17, label16, label15, label14, label13, label12, label11, label10, label9, label8, label7, label6, label5, label4, label3, label2, begin push ebx push esi push edi try if (EditControl = nil) or not Self.EditControl.Focused then begin EditControl := nil; exit; end; if (Self.PopupListBox = nil) or ([Self.EditControl+$47] <> 0) then exit; label3: if call BorlandIde + $0104 <> 0 then begin if InvokeType = 0 then begin if Byte[Self+$00A7] = 0 then begin // Add error message the Message View push $02 push $00 mov eax, [Self.EditControl+$02E4] mov eax, [eax+$04] mov eax, [eax+$70] push eax push $00 push $00 lea edx, [ebp+$FFFFFE84] mov eax, dword ptr [$23044220] call LoadResString([$23044220]); mov eax, [ebp+$FFFFFE84] push eax push $00 mov cl, $01 mov dl, $01 mov eax, dword ptr [$23020EE4] call TCompilerMsgLine.Create call SelectLine end; Byte([Self+A7]) := 1; exit; end; // Show error message dialog. push $00 lea edx, [ebp+$FFFFFE84] mov eax, dword ptr [$23044220] call LoadResString mov eax, [ebp+$FFFFFE84] mov cx, [$23022C58] mov dl, $01 call MessageDlg exit; end; label4: asm // call Some update procedure mov eax, dword ptr [$23044724] mov eax, [eax] mov edx, [eax] call dword ptr [edx+$0108] call KibitzUpdateModules // Get the current position in the module. lea eax, [ebp+$FFFFFE88] push eax mov eax, Self mov eax, [eax+$04] call TCustomEditControl.GetCaretPos push eax mov eax, Self mov eax, [eax+$04] call TCustomEditControlGetCharXIndex movsx edx, ax mov eax, Self pop ecx // get Kibitz Info. call TCodeCompletionManager.GetKibitzInfo if byte(KibitzResult[0]) = $0B then goto Label17; cmp byte ptr InvokeType, $00 jnz label8 mov eax, Self cmp byte ptr [eax+$00A5], $00 jnz label9 // Add error Messages to message view push $02 push $00 mov eax, Self mov eax, [eax+$04] mov eax, [eax+$02E4] mov eax, [eax+$04] mov eax, [eax+$70] push eax push $00 push $00 lea edx, [ebp+$FFFFFE84] mov eax, dword ptr [$23044228] call LoadResString mov eax, [ebp+$FFFFFE84] push eax push $00 mov cl, $01 mov dl, $01 mov eax, dword ptr [$23020EE4] call TCompilerMsgLines.Create call TCompilerMsgLines.SelectLines label9: mov eax, Self mov byte ptr [eax+$00A5], $01 exit; label8: // Show error Message push $00 lea edx, [ebp+$FFFFFE84] mov eax, dword ptr [$23044228] call LoadResString mov eax, [ebp+$FFFFFE84] mov cx, [$23022C58] mov dl, $01 call MessageDlg exit; label7: // Some jumps for the message view. mov eax, Self cmp byte ptr [eax+$00A5], $00 jnz label10 mov eax, Self cmp byte ptr [eax+$00A7], $00 jz label11 label10: // Add message to message view mov eax, Self mov byte ptr [eax+$00A5], $00 mov eax, Self mov byte ptr [eax+$00A7], $00 mov eax, dword ptr [$23045144] mov eax, [eax] mov edx, [$23020EE4] call TLineBuffer.ClearLineClass mov eax, dword ptr [$23045144] mov eax, [eax] call TLineBuffer.GetCount test eax, eax jnz label11 call HideMsgViews label11: if ([ebp-178] = 8) or ([ebp-178] = 9) then exit; // Get SymbolCount. SymbolCount (ebx) := KibitzGetValidSymbols([ebp-178], 0, 0, High(Integer)); Strings := TStringList.Create; end; try // AllocMem for symbol pointers. [ebp-$10] := AllocMem(SymbolCount * 4); try // AllocMem for unknown type. [ebp-$14] := AllocMem(SymbolCount); try asm // fill the allocate memory (symbols, Unknonws) [ebp-$4] := KibitzGetValidSymbols([ebp-$178], [ebp-$10], [ebp-$14], SymbolCount); mov eax, Self mov eax, [eax+$00A0] call -$000002F1 mov esi, ebx shl esi, $04 cmp eax, esi jnl label12 mov edx, esi mov eax, Self add eax, +$000000A0 call ReAllocMem label12: mov eax, Self mov esi, [eax+$00A0] xor eax, eax mov [ebp-$2C], eax for ebx := 0 to SymbolCount -1 do begin // Add the symbol to stringList mov eax, [ebp-$14] mov al, [ebx+eax] sub al, $02 jnb label14 push $02 lea eax, [ebp-$0C] push eax mov eax, [ebp-$10] mov eax, [ebx*4+eax] push eax call CompGetSymbolText mov eax, [ebp-$10] mov eax, [ebx*4+eax] mov [esi], eax mov eax, [ebp-$14] cmp byte ptr [ebx+eax], $01 setz al mov [esi+$04], al mov eax, [ebp-$10] mov eax, [ebx*4+eax] push eax call BrowserGetSymbolFlags mov [esi+$08], eax mov eax, [ebp-$2C] mov [esi+$0C], eax inc dword ptr [ebp-$2C] mov ecx, esi mov edx, [ebp-$0C] mov eax, [ebp-$18] mov edi, [eax] call dword ptr [edi+$38] add esi, +$10 label14: end; end; finally call FreeMem([ebp-$14]); end; finally FreeMem([ebp-$10]); end; asm mov eax, [ebp-$18] mov edx, [eax] call dword ptr [edx+$14] test eax, eax jle label16 mov eax, Self if dword ptr [eax+$08] = 0 then goto Label17; PopupListBox {ebx} := TPopupListBox.Create(Application); mov eax, Self Self.PopupListBox := PopupListBox; mov edx, $23022C64 mov eax, ebx mov ecx, [eax] call dword ptr [ecx+$18] mov eax, dword ptr [$23043EFC] mov eax, [eax] mov edx, [eax+$30] mov eax, ebx mov ecx, [eax] call dword ptr [ecx+$64] xor edx, edx mov eax, ebx call TControl.SetVisible mov dl, $01 mov eax, ebx call TCustomListBox.SetStyle mov edx, $0000012C mov eax, ebx call TControl.SetWidth mov dl, $01 mov eax, ebx call TControl.SetShowHint mov dword ptr [ebx+$0144], $0000170C mov eax, Self mov [ebx+$0238], eax mov dword ptr [ebx+$0234], $230224B4 mov eax, Self mov [ebx+$0240], eax mov dword ptr [ebx+$023C], $2302252C mov eax, Self mov ecx, [eax+$08] mov dl, $01 mov eax, dword ptr [$23043D64] call TPopupMenu.Create mov edx, eax mov eax, ebx call TControl.SetPopupMenu mov ecx, [ebx+$70] mov dl, $01 mov eax, dword ptr [$23043D68] call -$000210AA mov esi, eax mov [ebx+$022C], esi lea edx, [ebp+$FFFFFE84] mov eax, dword ptr [$23044230] call -$0002178E mov edx, [ebp+$FFFFFE84] mov eax, esi call -$000210C7 mov edx, Self mov edx, [edx+$08] mov eax, [ebx+$022C] mov [eax+$78], edx mov dword ptr [eax+$74], $23024298 mov dl, $01 call -$000210D4 mov eax, [ebx+$022C] mov dl, $01 call -$000210B1 mov edx, [ebx+$022C] mov eax, [ebx+$70] mov eax, [eax+$28] call -$000210CA mov ecx, [ebx+$70] mov dl, $01 mov eax, dword ptr [$23043D68] call -$00021119 mov esi, eax mov [ebx+$0230], esi lea edx, [ebp+$FFFFFE84] mov eax, dword ptr [$2304422C] call -$000217FD mov edx, [ebp+$FFFFFE84] mov eax, esi call -$00021136 mov edx, Self mov edx, [edx+$08] mov eax, [ebx+$0230] mov [eax+$78], edx mov dword ptr [eax+$74], $23024460 mov dl, $01 call -$00021143 mov eax, [ebx+$0230] mov dl, $01 call -$00021120 mov edx, [ebx+$0230] mov eax, [ebx+$70] mov eax, [eax+$28] call -$00021139 mov eax, dword ptr [$23044D64] mov eax, [eax] mov eax, [eax+$01DC] call -$000207D3 label17: mov eax, Self mov edx, [eax+$08] mov eax, Self mov eax, [eax+$04] mov eax, [eax+$0298] call -$0001FCD2 mov eax, Self mov eax, [eax+$08] push eax push $23023D9C mov eax, Self mov eax, [eax+$04] mov eax, [eax+$01F8] call -$000208F7 mov edx, Self mov edx, [edx+$08] mov eax, Self mov eax, [eax+$04] mov [eax+$01BC], edx mov dword ptr [eax+$01B8], $23023D4C call TEvent(eax+$0200).Add(TNotifyEvent(TPopupListBox([Self+08]).EditorColChanged)); lea eax, [ebp-$22] push eax lea eax, [ebp-$28] push eax lea eax, [ebp-$1C] push eax mov ecx, $230404D0 mov eax, Self mov eax, [eax+$04] mov eax, [eax+$02E4] mov edx, $000000FF call GetEditorTokenBlock(TEditView, Integer, const Char, TEdPos, TedPos); [Self.PopupListBox+$025C] := Pointer([ebp-$22]); [Self.PopupListBox+$0260] := Pointer([ebp-$28]) Pointer(Self.PopupListBox+$0254]) := Pointer(Self+$04); S1 := PChar([ebp-$FFFFFF08]) // Length 40 TPopupListBox(Self.PopupListBox).ShowList(Strings, S1); label16: end; finally Strings.Free; end; pop edi pop ebx pop esi end;