summaryrefslogtreecommitdiff
path: root/plugins/ImportTXT/kol/KOL_ASM_NOUNICODE.inc
diff options
context:
space:
mode:
authorGeorge Hazan <george.hazan@gmail.com>2012-10-09 18:48:50 +0000
committerGeorge Hazan <george.hazan@gmail.com>2012-10-09 18:48:50 +0000
commit99f1c859eea7d70884d1ad8fa12b061f7b3f8b04 (patch)
tree880e846a64fae911277470fb687e5bbabb6ea753 /plugins/ImportTXT/kol/KOL_ASM_NOUNICODE.inc
parent29bfa289893d945bc680d52623f8bf1ccfa3a515 (diff)
KOL merged with Libs
git-svn-id: http://svn.miranda-ng.org/main/trunk@1849 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/ImportTXT/kol/KOL_ASM_NOUNICODE.inc')
-rw-r--r--plugins/ImportTXT/kol/KOL_ASM_NOUNICODE.inc4351
1 files changed, 0 insertions, 4351 deletions
diff --git a/plugins/ImportTXT/kol/KOL_ASM_NOUNICODE.inc b/plugins/ImportTXT/kol/KOL_ASM_NOUNICODE.inc
deleted file mode 100644
index 29c9c49f15..0000000000
--- a/plugins/ImportTXT/kol/KOL_ASM_NOUNICODE.inc
+++ /dev/null
@@ -1,4351 +0,0 @@
-//------------------------------------------------------------------------------
-// KOL_ASM_NOUNICODE.inc (to inlude in KOL.pas)
-// v 3.141592
-
-// this part of code is for case when ASM_VERSION is enabled and the symbol
-// UNICODE_CTRLS is NOT defined (functions, procedures and methods which work
-// with AnsiStrings only)
-
-const comctl32_const: PKOLChar = 'comctl32';
- InitCommonControlsEx_const: PKOLChar = 'InitCommonControlsEx';
-procedure DoInitCommonControls( dwICC: DWORD );
-asm
- PUSH EAX // dwICC
- CALL InitCommonControls
- MOV EAX, [ComCtl32_Module]
- TEST EAX, EAX
- JNZ @@1
- PUSH [comctl32_const]
- CALL LoadLibrary
- MOV [ComCtl32_Module], EAX
-@@1:PUSH [InitCommonControlsEx_const]
- PUSH EAX
- CALL GetProcAddress
- XCHG ECX, EAX
- {$IFDEF SAFE_CODE}
- POP EDX
- JECXZ @@fin
- PUSH EDX
- {$ENDIF}
- PUSH 8 // dwSize
- PUSH ESP // @ ICC
- CALL ECX // Proc( @ ICC )
- POP ECX
- POP ECX
-@@fin:
-end;
-
-function ShowMsg( const S: KOLString; Flags: DWORD ): DWORD;
-asm
- push edx // Flags
- mov ecx, [Applet]
- {$IFDEF SNAPMOUSE2DFLTBTN}
- {$IFDEF SAFE_CODE}
- jecxz @@0
- {$ENDIF}
- pushad
- xchg eax, ecx
- mov edx, offset[WndProcSnapMouse2DfltBtn]
- call TControl.AttachProc
- popad
-@@0:
- {$ENDIF}
- mov edx, 0
- {$IFDEF SAFE_CODE}
- jecxz @@1
- {$ENDIF}
- mov edx, [ecx].TControl.fHandle
- mov ecx, [ecx].TControl.fCaption
-@@1: push ecx // Title
- push eax // S
- push edx // Wnd
- call MessageBox
- {$IFDEF SNAPMOUSE2DFLTBTN}
- mov ecx, [Applet]
- {$IFDEF SAFE_CODE}
- jecxz @@2
- {$ENDIF}
- pushad
- xchg eax, ecx
- mov edx, offset[WndProcSnapMouse2DfltBtn]
- call TControl.DetachProc
- popad
-@@2:
- {$ENDIF}
-end;
-
-procedure TGraphicTool.SetFontName(const Value: KOLString);
-asm
- PUSH EAX
- LEA EAX, [EAX].fData.Font.Name
- XOR ECX, ECX
- MOV CL, 32
- PUSH EAX
- PUSH ECX
- PUSH EDX
- CALL StrLComp
- //TEST EAX, EAX
- POP EDX
- POP ECX
- POP EAX
- JZ @@exit
- CALL StrLCopy
- POP EAX
- PUSH EAX
- CALL Changed
-@@exit: POP EAX
-end;
-
-{$IFDEF TEXT_EXTENT_OLD}
-function TCanvas.TextExtent(const Text: KOLString): TSize;
-asm
- PUSH EBX
- PUSH ESI
- MOV EBX, EAX
- PUSH ECX
- PUSH ECX // prepare @Result
- MOV EAX, EDX
- CALL System.@LStrLen
- PUSH EAX // prepare Length(Text)
- CALL EDX2PChar
- PUSH EDX // prepare PChar(Text)
- {$IFDEF SAFE_CODE}
- MOV EAX, EBX
- CALL RefInc
- {$ENDIF}
- PUSH HandleValid or FontValid
- PUSH EBX
- CALL RequiredState
- XCHG ESI, EAX
- TEST ESI, ESI // ESI = fHandle before
- JNZ @@1
- PUSH ESI
- CALL CreateCompatibleDC
- MOV EDX, EBX
- XCHG EAX, EDX // EAX := @Self; EDX := DC
- CALL SetHandle
-//****************************************************** // Added By M.Gerasimov
- CMP WORD PTR [EBX].TCanvas.fIsPaintDC, 0
- JNZ @@2
- XOR ESI,ESI
-@@2:
-//******************************************************
-@@1:
- PUSH HandleValid or FontValid
- PUSH EBX
- CALL RequiredState
- PUSH EAX // prepare DC
- CALL Windows.GetTextExtentPoint32A // KOL_ANSI
- POP EDX // @ Result
- {$IFDEF FIX_ITALIC_TEXT_WIDTH}
- MOV ECX, [EBX].fFont
- //JECXZ @@0
- CMP [ECX].TGraphicTool.fData.Font.Italic, 0
- JZ @@0
- MOV EAX, [EDX].TSize.cy
- SHR EAX, 2
- ADD DWORD PTR [EDX], EAX
-@@0: {$ENDIF}
- TEST ESI, ESI
- JNZ @@exit
- XOR EDX, EDX
- XCHG EAX, EBX
- CALL SetHandle
-@@exit:
- {$IFDEF SAFE_CODE}
- PUSH EAX
- XCHG EAX, EBX
- CALL RefDec
- POP EAX
- {$ENDIF}
- POP ESI
- POP EBX
-end;
-{$ELSE TEXT_EXTENT_NEW}
-function TCanvas.TextExtent(const Text: KOLString): TSize;
-asm
- PUSH ESI
- {$IFDEF FIX_ITALIC_TEXT_WIDTH}
- PUSH EBX
- MOV EBX, ECX
- {$ENDIF}
- XCHG ESI, EAX // ESI = @Self: PCanvas
- CALL EDX2PChar
- PUSH ECX
- PUSH EDX
-
- XCHG EAX, EDX
- CALL StrLen
- XCHG [ESP], EAX
- PUSH EAX
-
- PUSH HandleValid or FontValid
- PUSH ESI
- CALL TCanvas.RequiredState
- PUSH [ESI].TCanvas.fHandle
- CALL GetTextExtentPoint32
- {$IFDEF FIX_ITALIC_TEXT_WIDTH}
- CMP [ESI].TGraphicTool.fData.Font.Italic, 0
- JZ @@1
- MOV EAX, [EBX].TSize.cy
- SHR EAX, 2
- ADD DWORD PTR [EBX].TSize, EAX
-@@1: POP EBX
- {$ENDIF}
- POP ESI
-end;
-{$ENDIF TEXT_EXTENT_NEW}
-
-procedure TCanvas.TextOut(X, Y: Integer; const Text: KOLString); stdcall;
-asm
- PUSH EBX
- MOV EBX, [EBP+8]
-
- MOV EAX, [Text]
- PUSH EAX
- CALL System.@LStrLen
- XCHG EAX, [ESP] // prepare Length(Text)
-
- //CALL System.@LStrToPChar // string does not need to be null-terminated !
- PUSH EAX // prepare PChar(Text)
- PUSH [Y] // prepare Y
- PUSH [X] // prepare X
-
- PUSH HandleValid or FontValid or BrushValid or ChangingCanvas
- PUSH EBX
- CALL RequiredState
- PUSH EAX // prepare fHandle
- CALL Windows.TextOutA // KOL_ANSI
-
- POP EBX
-end;
-
-function Int2Hex( Value : DWord; Digits : Integer ) : KOLString;
-asm // EAX = Value
- // EDX = Digits
- // ECX = @Result
- PUSH 0
- ADD ESP, -0Ch
- PUSH EDI
- PUSH ECX
- LEA EDI, [ESP+8+0Fh] // EBX := @Buf[ 15 ]
- {$IFDEF SMALLEST_CODE}
- {$ELSE}
- AND EDX, $F
- {$ENDIF}
-@@loop: DEC EDI
- DEC EDX
- PUSH EAX
- {$IFDEF PARANOIA} DB $24, $0F {$ELSE} AND AL, 0Fh {$ENDIF}
- AAM
- DB $D5, $11 //AAD
- ADD AL, $30
- STOSB
- DEC EDI
- POP EAX
- SHR EAX, 4
- JNZ @@loop
- TEST EDX, EDX
- JG @@loop
- POP EAX // EAX = @Result
- MOV EDX, EDI // EDX = @resulting string
- {$IFDEF _D2009orHigher}
- XOR ECX, ECX
- {$ENDIF}
- CALL System.@LStrFromPChar
- POP EDI
- ADD ESP, 10h
-end;
-
-function Hex2Int( const Value : AnsiString) : Integer;
-asm
- CALL EAX2PChar
- PUSH ESI
- XCHG ESI, EAX
- XOR EDX, EDX
- TEST ESI, ESI
- JE @@exit
- LODSB
- {$IFDEF PARANOIA} DB $3C, '$' {$ELSE} CMP AL, '$' {$ENDIF}
- JNE @@1
-@@0: LODSB
-@@1: TEST AL, AL
- JE @@exit
- {$IFDEF PARANOIA} DB $2C, '0' {$ELSE} SUB AL, '0' {$ENDIF}
- {$IFDEF PARANOIA} DB $3C, 9 {$ELSE} CMP AL, '9' - '0' {$ENDIF}
- JBE @@3
-
- {$IFDEF PARANOIA} DB $2C, $11 {$ELSE} SUB AL, 'A' - '0' {$ENDIF}
- {$IFDEF PARANOIA} DB $3C, 5 {$ELSE} CMP AL, 'F' - 'A' {$ENDIF}
- JBE @@2
-
- {$IFDEF PARANOIA} DB $2C, 32 {$ELSE} SUB AL, 32 {$ENDIF}
- {$IFDEF PARANOIA} DB $3C, 5 {$ELSE} CMP AL, 'F' - 'A' {$ENDIF}
- JA @@exit
-@@2:
- {$IFDEF PARANOIA} DB $04, 0Ah {$ELSE} ADD AL, 0Ah {$ENDIF}
-@@3:
- SHL EDX, 4
- ADD DL, AL
- JMP @@0
-
-@@exit: XCHG EAX, EDX
- POP ESI
-end;
-
-function Int2Str( Value : Integer ) : KOLString;
-asm
- XOR ECX, ECX
- PUSH ECX
- ADD ESP, -0Ch
-
- PUSH EBX
- LEA EBX, [ESP + 15 + 4]
- PUSH EDX
- CMP EAX, ECX
- PUSHFD
- JGE @@1
- NEG EAX
-@@1:
- MOV CL, 10
-
-@@2:
- DEC EBX
- XOR EDX, EDX
- DIV ECX
- ADD DL, 30h
- MOV [EBX], DL
- TEST EAX, EAX
- JNZ @@2
-
- POPFD
- JGE @@3
-
- DEC EBX
- MOV byte ptr [EBX], '-'
-@@3:
- POP EAX
- MOV EDX, EBX
- {$IFDEF _D2009orHigher}
- XOR ECX, ECX // TODO: safe to destory twice?
- {$ENDIF}
- CALL System.@LStrFromPChar
-
- POP EBX
- ADD ESP, 10h
-end;
-
-function Int2Ths( I : Integer ) : AnsiString;
-asm
- PUSH EBP
- MOV EBP, ESP
- PUSH EAX
- PUSH EDX
- CALL Int2Str
- POP EDX
- POP EAX
- TEST EAX, EAX
- JGE @@0
- NEG EAX
-@@0:
- CMP EAX, 1000
- JL @@Exit
- PUSH EDX
- MOV EAX, [EDX]
- PUSH EAX
- CALL System.@LStrLen // EAX = Length(Result)
- POP EDX
- PUSH EDX // EDX = @Result[ 1 ]
- XOR ECX, ECX
-
-@@1:
- ROL ECX, 8
- DEC EAX
- MOV CL, [EDX+EAX]
- JZ @@fin
- CMP ECX, 300000h
- JL @@1
-
- PUSH ECX
- XOR ECX, ECX
- MOV CL, [ThsSeparator]
- JMP @@1
-
-@@fin: CMP CL, '-'
- JNE @@fin1
- CMP CH, [ThsSeparator]
- JNE @@fin1
- MOV CH, 0 // this corrects -,ddd,...
-@@fin1: CMP ECX, 01000000h
- JGE @@fin2
- INC EAX
- ROL ECX, 8
- JMP @@fin1
-@@fin2: PUSH ECX
-
- LEA EDX, [ESP+EAX]
- MOV EAX, [EBP-4]
- {$IFDEF _D2009orHigher}
- XOR ECX, ECX // TODO: safe to change ecx?
- {$ENDIF}
- CALL System.@LStrFromPChar
-@@Exit:
- MOV ESP, EBP
- POP EBP
-end;
-
-function Int2Digs( Value, Digits : Integer ) : KOLString;
-asm
- PUSH EBP
- MOV EBP, ESP
- PUSH EDX // [EBP-4] = Digits
- PUSH ECX
- MOV EDX, ECX
- CALL Int2Str
- POP ECX
- PUSH ECX // [EBP-8] = @Result
- MOV EAX, [ECX]
- PUSH EAX
- CALL System.@LStrLen
- POP EDX // EDX = @Result[1]
- MOV ECX, EAX // ECX = Length( Result )
- ADD EAX, EAX
- SUB ESP, EAX
- MOV EAX, ESP
- PUSHAD
- CALL StrCopy
- POPAD
- MOV EDX, EAX
- ADD ESP, -100
- CMP byte ptr [EDX], '-'
- PUSHFD
- JNE @@1
- INC EDX
-@@1:
- MOV EAX, [EBP-4] // EAX = Digits
- CMP ECX, EAX
- JGE @@2
- DEC EDX
- MOV byte ptr [EDX], '0'
- INC ECX
- JMP @@1
-@@2:
- POPFD
- JNE @@3
- DEC EDX
- MOV byte ptr [EDX], '-'
-@@3:
- MOV EAX, [EBP-8]
- {$IFDEF _D2009orHigher}
- XOR ECX, ECX // TODO: eax or ecx affect result?
- {$ENDIF}
- CALL System.@LStrFromPChar
- MOV ESP, EBP
- POP EBP
-end;
-
-function Num2Bytes( Value : Double ) : KOLString;
-asm PUSH EBX
- PUSH ESI
- PUSH EDI
- MOV EBX, ESP
- MOV ESI, EAX
- MOV ECX, 4
- MOV EDX, 'TGMk'
-@@1: FLD [Value]
-@@10: FICOM dword ptr [@@1024]
- FSTSW AX
- SAHF
- JB @@2
- FIDIV dword ptr [@@1024]
- FST [Value]
- WAIT
- TEST DL, 20h
- JE @@ror
- AND DL, not 20h
- JMP @@nxt
-@@1024: DD 1024
-@@100: DD 100
-@@ror: ROR EDX, 8
-@@nxt: LOOP @@10
-@@2: TEST DL, 20h
- JZ @@3
- MOV DL, 0
-@@3: MOV DH, 0
- PUSH DX
- MOV EDI, ESP
- FLD ST(0)
- CALL System.@TRUNC
- {$IFDEF _D2orD3}
- PUSH 0
- {$ELSE}
- PUSH EDX
- {$ENDIF}
- PUSH EAX
- FILD qword ptr [ESP]
- POP EDX
- POP EDX
- MOV EDX, ESI
- CALL Int2Str
- FSUBP ST(1), ST
- FIMUL dword ptr [@@100]
- CALL System.@TRUNC
- TEST EAX, EAX
- JZ @@4
- XOR ECX, ECX
- MOV CL, 0Ah
- CDQ
- IDIV ECX
- TEST EDX, EDX
- JZ @@5
- MOV AH, DL
- SHL EAX, 16
- ADD EAX, '00. '
- PUSH EAX
- MOV EDI, ESP
- INC EDI
- JMP @@4
-@@5: SHL EAX, 8
- ADD AX, '0.'
- PUSH AX
- MOV EDI, ESP
-@@4: MOV EAX, [ESI]
- CALL System.@LStrLen
- ADD ESP, -100
- SUB EDI, EAX
- PUSH ESI
- PUSH EDI
- MOV ESI, [ESI]
- MOV ECX, EAX
- REP MOVSB
- POP EDX
- POP EAX
- {$IFDEF _D2009orHigher}
- XOR ECX, ECX // TODO: IDIV
- {$ENDIF}
- CALL System.@LStrFromPChar
- MOV ESP, EBX
- POP EDI
- POP ESI
- POP EBX
-end;
-
-function S2Int( S: PKOLChar ): Integer;
-asm
- XCHG EDX, EAX
- XOR EAX, EAX
- TEST EDX, EDX
- JZ @@exit
-
- XOR ECX, ECX
- MOV CL, [EDX]
- INC EDX
- CMP CL, '-'
- PUSHFD
- JE @@0
-@@1: CMP CL, '+'
- JNE @@2
-@@0: MOV CL, [EDX]
- INC EDX
-@@2: SUB CL, '0'
- CMP CL, '9'-'0'
- JA @@fin
- LEA EAX, [EAX+EAX*4] //
- LEA EAX, [ECX+EAX*2] //
- JMP @@0
-@@fin: POPFD
- JNE @@exit
- NEG EAX
-@@exit:
-end;
-
-function Str2Int(const Value : KOLString) : Integer;
-asm
- CALL EAX2PChar
- CALL S2Int
-end;
-
-function TrimLeft(const S: Ansistring): Ansistring;
-asm
- XCHG EAX, EDX
- CALL EDX2PChar
- DEC EDX
-@@1: INC EDX
- MOVZX ECX, byte ptr [EDX]
- JECXZ @@fin
- CMP CL, ' '
- JBE @@1
-@@fin:
- {$IFDEF _D2009orHigher}
- XOR ECX, ECX
- {$ENDIF}
- CALL System.@LStrFromPChar
-end;
-
-function TrimRight(const S: Ansistring): Ansistring;
-asm
- PUSH EDX
- PUSH EAX
-
- PUSH EAX
- CALL System.@LStrLen
- XCHG EAX, [ESP]
- CALL EAX2PChar
- POP ECX
- INC ECX
-@@1: DEC ECX
- MOV DL, [EAX+ECX]
- JL @@fin
- CMP DL, ' '
- JBE @@1
-@@fin:
- INC ECX
- POP EAX
- XOR EDX, EDX
- INC EDX
- CALL System.@LStrCopy
-end;
-
-function CopyEnd( const S : AnsiString; Idx : Integer ) : AnsiString;
-asm
- PUSH ECX
- PUSH EAX
- PUSH EDX
-
- CALL System.@LStrLen
-
- POP EDX
- TEST EDX, EDX
- JG @@1
- XOR EDX, EDX
- INC EDX
-@@1:
- SUB EAX, EDX
- MOV ECX, EAX
-
- POP EAX
- JGE @@ret_end
-
- POP EAX
- JL System.@LStrClr
-
-@@ret_end:
- INC ECX
- CALL System.@LStrCopy
-end;
-
-function CopyTail( const S : AnsiString; Len : Integer ) : AnsiString;
-asm
- PUSH ECX
- PUSH EAX
- PUSH EDX
- CALL System.@LStrLen
- POP ECX
- CMP ECX, EAX
- {$IFDEF USE_CMOV}
- CMOVG ECX, EAX
- {$ELSE}
- JLE @@1
- MOV ECX, EAX
-@@1: {$ENDIF}
-
- MOV EDX, EAX
- SUB EDX, ECX
- INC EDX
- POP EAX
- CALL System.@LStrCopy
-end;
-
-procedure DeleteTail( var S : AnsiString; Len : Integer );
-asm
- PUSH EAX
- PUSH EDX
- MOV EAX, [EAX]
- CALL System.@LStrLen
- POP ECX
- CMP ECX, EAX
- {$IFDEF USE_CMOV}
- CMOVG ECX, EAX
- {$ELSE}
- JLE @@1
- MOV ECX, EAX
-@@1: {$ENDIF}
-
- MOV EDX, EAX
- SUB EDX, ECX
- INC EDX
- POP EAX
- CALL System.@LStrDelete
-end;
-
-{$IFnDEF TEST_INDEXOFCHARS_COMPAT}
-function IndexOfChar( const S : KOLString; Chr : KOLChar ) : Integer;
-asm
- CALL EAX2PChar
- PUSH EAX
- MOV ECX, [EAX-4]
- CALL StrScanLen
- POP EDX
- JZ @@1
- LEA EDX, [EAX+1]
-@@1: SUB EAX, EDX
-end;
-{$ENDIF}
-
-function IndexOfCharsMin( const S, Chars : AnsiString ) : Integer;
-asm PUSH ESI
- PUSH EBX
- PUSH EAX
- CALL EDX2PChar
- MOV ESI, EDX
-
- OR EBX, -1
- MOV ECX, [EDX-4]
- JECXZ @@EXIT
-
-@@1: LODSB
-
- XCHG EDX, EAX
- POP EAX
- PUSH EAX
-
- PUSH ECX
- CALL IndexOfChar
- POP ECX
- TEST EAX, EAX
- JLE @@NEXT
-
- TEST EBX, EBX
- JLE @@ASGN
- CMP EAX, EBX
- JGE @@NEXT
-@@ASGN:
- XCHG EAX, EBX
-@@NEXT: LOOP @@1
-
-@@EXIT: XCHG EAX, EBX
- POP ECX
- POP EBX
- POP ESI
-end;
-
-function Parse( var S : AnsiString; const Separators : AnsiString ) : AnsiString;
-asm
- PUSH EBX
- PUSH ESI
- PUSH EDI
- MOV EDI, ECX
- XCHG ESI, EAX
- MOV EAX, [ESI]
- CALL IndexOfCharsMin
- XCHG EBX, EAX
- TEST EBX, EBX
- JG @@1
- MOV EAX, [ESI]
- CALL System.@LStrLen
- XCHG EBX, EAX
- INC EBX
-@@1:
- XOR EDX, EDX
- INC EDX
- PUSH EDX
-
- PUSH EDI
- MOV ECX, EBX
- DEC ECX
- MOV EAX, [ESI]
- CALL System.@LStrCopy
- XCHG EAX, ESI
- MOV ECX, EBX
- POP EDX
- CALL System.@LStrDelete
- POP EDI
- POP ESI
- POP EBX
-end;
-
-function _StrSatisfy( S, Mask : PKOLChar ) : Boolean;
-asm
- TEST EAX, EAX
- JZ @@exit
- XCHG ECX, EAX
- // EDX <- Mask
- // ECX <- S
- XOR EAX, EAX
- MOV AL, '*'
-@@rest_satisfy:
- PUSH ECX
- PUSH EDX
-
-@@nx_char:
- MOV AH, [EDX]
- OR AH, [ECX]
- JZ @@fin //@@ret_true
-
- MOV AH, 0
-
- CMP word ptr [EDX], AX //'*'
- JE @@fin //@@ret_true
-
- CMP byte ptr [ECX], AH
- JNE @@10
-
- DEC EDX
-@@1:
- INC EDX
- CMP byte ptr [EDX], AL //'*'
- JE @@1
-
- CMP byte ptr [EDX], AH
- SETZ AL
- JMP @@fin
-
-@@10: CMP byte ptr [EDX], AH
- JE @@ret_false
-
- CMP byte ptr [EDX], '?'
- JNE @@11
-
-@@go_nx_char:
- INC ECX
- INC EDX
- JMP @@nx_char
-
-@@11:
- CMP byte ptr [EDX], AL //'*'
- JNE @@20
-
- INC EDX
-@@12: CMP byte ptr [ECX], AH
- JE @@ret_false
-
- CALL @@rest_satisfy
- TEST AL, AL
- JNE @@fin
- MOV AL, '*'
-
- INC ECX
- JMP @@12
-
-@@20: MOV AH, [EDX]
- XOR AH, [ECX]
-
- JE @@go_nx_char
-@@ret_false:
- XOR EAX, EAX
-
-@@fin:
- POP EDX
- POP ECX
-@@exit:
-end;
-
-function StrSatisfy( const S, Mask: AnsiString ): Boolean;
-asm
- PUSH ESI
- TEST EAX, EAX
- JZ @@exit
-
- XCHG ESI, EAX
-
- XCHG EAX, EDX
- TEST EAX, EAX
- JZ @@exit
-
- CALL EAX2PChar
-
- PUSH 0
- MOV EDX, ESP
- CALL AnsiLowerCase
-
- XCHG EAX, ESI
- CALL EAX2PChar
-
- PUSH 0
- MOV EDX, ESP
- CALL AnsiLowerCase
-
- POP EAX
- POP EDX
- PUSH EDX
- PUSH EAX
- CALL _StrSatisfy
-
- XCHG ESI, EAX
-
- CALL RemoveStr
- CALL RemoveStr
- XCHG EAX, ESI
-
-@@exit:
- POP ESI
-end;
-
-function _2StrSatisfy( S, Mask: PAnsiChar ): Boolean;
-asm // //
- PUSH EBX
- PUSH ECX
- XCHG EBX, EAX
- PUSH 0
- MOV EAX, ESP
- {$IFDEF _D2009orHigher}
- XOR ECX, ECX
- {$ENDIF}
- CALL System.@LStrFromPChar
- PUSH 0
- MOV EAX, ESP
- MOV EDX, EBX
- {$IFDEF _D2009orHigher}
- XOR ECX, ECX
- {$ENDIF}
- CALL System.@LStrFromPChar
- POP EAX
- POP EDX
- PUSH EDX
- PUSH EAX
- CALL StrSatisfy
- XCHG EBX, EAX
- CALL RemoveStr
- CALL RemoveStr
- XCHG EAX, EBX
- POP ECX
- POP EBX
-end;
-
-function SkipSpaces( P: PKOLChar ): PKOLChar;
-asm
- DEC EAX
-@@loop: INC EAX
- CMP byte ptr [EAX], 0
- JE @@exit
- CMP byte ptr [EAX], ' '
- JBE @@loop
-@@exit:
-end;
-
-function SkipParam(P: PKOLChar): PKOLChar;
-asm
- CALL SkipSpaces
-@@while: CMP byte ptr [EAX], ' '
- JBE @@exit
- CMP byte ptr [EAX], '"'
- JNE @@incP_goLoop
-@@untilQuot:
- INC EAX
- CMP byte ptr [EAX], 0
- JE @@exit
- CMP byte ptr [EAX], '"'
- JNE @@untilQuot
-@@incP_goLoop:
- INC EAX
- JMP @@while
-@@exit:
-end;
-
-function ParamCount: Integer;
-asm
- CALL GetCommandLine
- OR EDX, -1
-@@while: INC EDX
- CALL SkipParam
- CALL SkipSpaces
- CMP byte ptr [EAX], 0
- JNE @@while
- XCHG EAX, EDX
-end;
-
-function __DelimiterLast( Str: PAnsiChar; Delimiters: PAnsiChar ): PAnsiChar;
-asm
- PUSH ESI
-
- CALL EAX2PChar
-
- MOV ESI, EDX
- MOV EDX, EAX
-
-@@tolast:
- CMP byte ptr [EAX], 0
- JZ @@next1
- INC EAX
- JMP @@tolast
-
-@@next1:
- PUSH EAX
-
-@@next:
- LODSB
- TEST AL, AL
- JZ @@exit
-
- PUSH EDX
- XCHG EDX, EAX
- CALL StrRScan
- POP EDX
-
- TEST EAX, EAX
- JZ @@next
-
- POP ECX
- CMP byte ptr [ECX], 0
- JZ @@next1
-
- CMP EAX, ECX
- JG @@next1
-
- PUSH ECX
- JLE @@next
-
-@@exit: POP EAX
- POP ESI
-end;
-
-function DelimiterLast( const Str, Delimiters: KOLString ): Integer;
-asm
- CALL EAX2PChar
- CALL EDX2PChar
- PUSH EAX
- CALL __DelimiterLast
- POP EDX
- SUB EAX, EDX
- INC EAX
-end;
-
-function StrIsStartingFrom( Str, Pattern: PKOLChar ): Boolean;
-asm
- {$IFDEF F_P}
- MOV EAX, [Str]
- MOV EDX, [Pattern]
- {$ENDIF F_P}
- XOR ECX, ECX
- @@1:
- MOV CL, [EDX] // pattern[ i ]
- INC EDX
- MOV CH, [EAX] // str[ i ]
- INC EAX
- JECXZ @@2 // str = pattern; CL = #0, CH = #0
- CMP CL, CH
- JE @@1
- @@2:
- TEST CL, CL
- SETZ AL
-end {$IFDEF F_P} [ 'EAX', 'EDX', 'ECX' ] {$ENDIF};
-
-function Format( const fmt: KOLString; params: array of const ): AnsiString;
-asm
- PUSH ESI
- PUSH EDI
- PUSH EBX
- MOV EBX, ESP
- {$IFDEF UNICODE_CTRLS}
- ADD ESP, -2048
- {$ELSE}
- ADD ESP, -1024
- {$ENDIF}
- MOV ESI, ESP
-
- INC ECX
- JZ @@2
-@@1:
- MOV EDI, [EDX + ECX*8 - 8]
- PUSH EDI
- LOOP @@1
-@@2:
- PUSH ESP
- PUSH EAX
- PUSH ESI
-
- CALL wvsprintf
-
- MOV EDX, ESI
- MOV EAX, @Result
- {$IFDEF _D2009orHigher}
- PUSH ECX
- XOR ECX, ECX
- {$ENDIF}
- CALL System.@LStrFromPChar
- {$IFDEF _D2009orHigher}
- POP ECX
- {$ENDIF}
-
- MOV ESP, EBX
- POP EBX
- POP EDI
- POP ESI
-end;
-
-function FileExists( const FileName : KOLString ) : Boolean;
-const size_TWin32FindData = sizeof( {$IFDEF UNICODE_CTRLS} TWin32FindDataW {$ELSE} TWin32FindDataA {$ENDIF} );
- Size_TFindFileData = (sizeof(TFindFileData) + 3) and not 3;
-asm
-{$IFDEF FILE_EXISTS_EX}
- PUSH EBX
- MOV BL, 0
- PUSH EAX
- PUSH SEM_NOOPENFILEERRORBOX or SEM_FAILCRITICALERRORS
- CALL SetErrorMode
- XCHG EAX, [ESP]
- SUB ESP, Size_TFindFileData
- MOV EDX, ESP
- CALL Find_First
- TEST AL, AL
- JZ @@fin
- MOV EAX, ESP
- CALL Find_Close
- TEST byte ptr [ESP].TFindFileData.dwFileAttributes, FILE_ATTRIBUTE_DIRECTORY
- JNZ @@fin
- PUSH ESP
- LEA EAX, [ESP+4].TFindFileData.ftLastWriteTime
- PUSH EAX
- CALL FileTimeToLocalFileTime
- LEA EAX, [ESP+8]
- PUSH EAX
- INC EAX
- INC EAX
- PUSH EAX
- SUB EAX, 10
- PUSH EAX
- CALL FileTimeToDOSDateTime
- TEST EAX, EAX
- SETNZ BL
-@@fin: ADD ESP, Size_TFindFileData
- CALL SetErrorMode
- XCHG EAX, EBX
- POP EBX
-{$ELSE}
- CALL EAX2PChar
- PUSH EAX
- CALL GetFileAttributes
- INC EAX
- JZ @@exit
- DEC EAX
- {$IFDEF PARANOIA} DB $24, FILE_ATTRIBUTE_DIRECTORY {$ELSE} AND AL, FILE_ATTRIBUTE_DIRECTORY {$ENDIF}
- SETZ AL
-@@exit:
-{$ENDIF}
-end;
-
-function DiskPresent( const DrivePath: KOLString ): Boolean;
-asm
- PUSH EBX
- MOV BH, 0
- TEST EAX, EAX
- JZ @@dirExists
- CMP byte ptr [EAX], '\'
- JZ @@dirExists
- PUSH EAX
- PUSH EAX
- CALL GetDriveType
- CMP AL, DRIVE_REMOVABLE
- JE @@setErrMode
- CMP AL, DRIVE_CDROM
- JE @@setErrMode
- CMP AL, DRIVE_RAMDISK
- JNE @@popPath_dirExists
-@@setErrMode:
- INC BH
- PUSH SEM_NOOPENFILEERRORBOX or SEM_FAILCRITICALERRORS
- CALL SetErrorMode
- XCHG [ESP], EAX
- PUSH EAX
-@@popPath_dirExists:
- POP EAX
-@@dirExists:
- CALL DirectoryExists
- MOV BL, AL
- TEST BH, BH
- JZ @@exit
- CALL SetErrorMode
-@@exit: XCHG EAX, EBX
- POP EBX
-end;
-
-function GetStartDir : AnsiString;
-asm
- PUSH EBX
- MOV EBX, EAX
-
- XOR EAX, EAX
- MOV AH, 2
- SUB ESP, EAX
- MOV EDX, ESP
- PUSH EAX
- PUSH EDX
- PUSH 0
- CALL GetModuleFileName // in KOL_ANSI
-
- LEA EDX, [ESP + EAX]
-@@1: DEC EDX
- CMP byte ptr [EDX], '\'
- JNZ @@1
-
- INC EDX
- MOV byte ptr [EDX], 0
-
- MOV EAX, EBX
- MOV EDX, ESP
- {$IFDEF _D2009orHigher}
- XOR ECX, ECX
- {$ENDIF}
- CALL System.@LStrFromPChar // AnsiSafe!
-
- ADD ESP, 200h
- POP EBX
-end;
-
-function IncludeTrailingChar( const S: KOLString; C: KOLChar ): KOLString;
-asm
- push edx
- push ecx
- xchg ecx, eax
- xchg edx, ecx
- call System.@LStrAsg
- pop eax
- pop edx
- mov ecx, [eax]
- jecxz @@1
- add ecx, [ecx-4]
- dec ecx
- cmp byte ptr [ecx], dl
- jz @@exit
-@@1:
- push eax
- push 0
- mov eax, esp
- {$IFDEF _D2009orHigher}
- //push ecx
- xor ecx, ecx
- {$ENDIF}
- call System.@LStrFromChar
- {$IFDEF _D2009orHigher}
- //pop ecx
- {$ENDIF}
- mov edx, [esp]
- mov eax, [esp+4]
- call System.@LStrCat
- call RemoveStr
- pop eax
-@@exit:
-end;
-
-const
- DirDelimiters: PAnsiChar = ':\/';
-function ExtractFileName( const Path : AnsiString ) : AnsiString;
-asm
- PUSH EDX
- PUSH EAX
- MOV EDX, [DirDelimiters]
- CALL __DelimiterLast
- POP EDX
- CMP byte ptr [EAX], 0
- JZ @@1
- XCHG EDX, EAX
- INC EDX
-@@1: POP EAX
- {$IFDEF _D2009orHigher}
- XOR ECX, ECX
- {$ENDIF}
- CALL System.@LStrFromPChar // Safe!
-end;
-
-function ExtractFileNameWOext( const Path : KOLString ) : KOLString;
-asm
- push ebx
-
- push edx
- push eax
- call ExtractFileName
- pop edx // Path - íå íóæåí áîëüøå
- mov eax, [esp] // eax = Result = ExtractFileName(Path)
- mov eax, [eax]
- push 0
- mov edx, esp
- call ExtractFileExt
- mov eax, [esp]
- call System.@LStrLen
- xchg ebx, eax // ebx = Length(ExtractFileExt(Result))
- call RemoveStr // ExtractFileExt - áîëüøå íå íóæåí
- mov eax, [esp]
- mov eax, [eax]
- call System.@LStrLen // eax = Length(Result)
- sub eax, ebx
- xchg ecx, eax
- xor edx, edx
- inc edx
- mov eax, [esp]
- mov eax, [eax]
- call System.@LStrCopy
-
- pop ebx
-end;
-
-const
- ExtDelimeters: PAnsiChar = '.';
-
-function ExtractFileExt( const Path : KOLString ) : KOLString;
-asm
- PUSH EDX
- MOV EDX, [ExtDelimeters]
- CALL EAX2PChar
- CALL __DelimiterLast
-@@1: XCHG EDX, EAX
- POP EAX
- {$IFDEF _D2009orHigher}
- PUSH ECX
- XOR ECX, ECX
- {$ENDIF}
- CALL System.@LStrFromPChar
- {$IFDEF _D2009orHigher}
- POP ECX // this routine hasn't touch ECX
- {$ENDIF}
-end;
-
-function ReplaceExt( const Path, NewExt: KOLString ): KOLString;
-asm
- push ecx // result
- push edx // NewExt
- push eax // Path
-
- push 0
- mov edx, esp
- call ExtractFilePath
- pop eax
- xchg [esp], eax // eax=Path, Path in stack replaced with ExtractFilePath(Path)
-
- push 0
- mov edx, esp
- call ExtractFileNameWOext
- // now stack conatins: result,NewExt,ExtractFilePath(Path),ExtractFileNameWOext(Path)<-ESP
-
- mov eax, [esp+12]
- mov edx, esp
- push dword ptr [edx+4] // ExtractFilePath(Path)
- push dword ptr [edx] // ExtractFileNameWOext(Path)
- push dword ptr [edx+8] // NewExt
- mov edx, 3
- call System.@LStrCatN
- call RemoveStr
- call RemoveStr
- pop ecx
- pop ecx
-end;
-
-function GetSystemDir: KOLString;
-asm
- PUSH EBX
- XCHG EBX, EAX
- SUB ESP, MAX_PATH
- MOV EAX, ESP
- PUSH MAX_PATH
- PUSH EAX
- CALL GetSystemDirectory
- MOV EAX, EBX
- MOV EDX, ESP
- CALL System.@LStrFromPChar
- MOV EDX, EBX
- MOV EAX, [EDX]
- CALL IncludeTrailingPathDelimiter
- ADD ESP, MAX_PATH
- POP EBX
-end;
-
-function GetWindowsDir : KOLString;
-asm
- PUSH EBX
- XCHG EBX, EAX
- SUB ESP, MAX_PATH
- MOV EAX, ESP
- PUSH MAX_PATH
- PUSH EAX
- CALL GetWindowsDirectory
- MOV EAX, EBX
- MOV EDX, ESP
- CALL System.@LStrFromPChar
- MOV EDX, EBX
- MOV EAX, [EDX]
- CALL IncludeTrailingPathDelimiter
- ADD ESP, MAX_PATH
- POP EBX
-end;
-
-function GetWorkDir : KOLString;
-asm
- PUSH EBX
- XCHG EBX, EAX
- SUB ESP, MAX_PATH
- PUSH ESP
- PUSH MAX_PATH
- CALL GetCurrentDirectory
- MOV EAX, EBX
- MOV EDX, ESP
- CALL System.@LStrFromPChar
- MOV EDX, EBX
- MOV EAX, [EDX]
- CALL IncludeTrailingPathDelimiter
- ADD ESP, MAX_PATH
- POP EBX
-end;
-
-function GetTempDir : KOLString;
-asm
- push eax
- sub esp, 264
- push esp
- push 261
- call GetTempPath
- mov edx, esp
- mov eax, [esp+264]
- {$IFDEF _D2009orHigher}
- xor ecx, ecx
- {$ENDIF}
- call System.@LStrFromPChar
- add esp, 264
- pop edx
- mov eax, [edx]
- call IncludeTrailingPathDelimiter
-end;
-
-function CreateTempFile( const DirPath, Prefix: KOLString ): KOLString;
-asm
- push ecx
- call EAX2PCHAR
- call EDX2PCHAR
- sub esp, 264
- push esp
- push 0
- push edx
- push eax
- call GetTempFileName
- mov eax, [esp+264]
- mov edx, esp
- {$IFDEF _D2009orHigher}
- xor ecx, ecx // ecx is argument
- {$ENDIF}
- call System.@LStrFromPChar
- add esp, 268
-end;
-
-function FindFilter( const Filter: AnsiString): AnsiString;
-asm
- XCHG EAX, EDX
- PUSH EAX
- CALL System.@LStrAsg
- POP EAX
- CMP dword ptr [EAX], 0
- JNE @@exit
- LEA EDX, @@mask_all
- {$IFDEF _D2009orHigher}
- XOR ECX, ECX
- {$ENDIF}
- JE System.@LStrFromPChar
-@@mask_all: DB '*.*',0
-@@exit:
-end;
-
-procedure TDirList.ScanDirectoryEx(const DirPath, Filters: AnsiString;
- Attr: DWord);
-asm
- PUSH EBX
- MOV EBX, EAX
-
- PUSHAD
- LEA EAX, [EBX].fFilters
- CALL Free_And_Nil
-
- CALL NewStrList
- MOV [EBX].fFilters, EAX
- POPAD
-
- PUSHAD
- PUSH 0
- MOV EAX, ESP
- MOV EDX, ECX
- CALL System.@LStrLAsg
-@@1: MOV ECX, [ESP]
- JECXZ @@2
- MOV EAX, ESP
- MOV EDX, offset[@@semicolon]
- PUSH 0
- MOV ECX, ESP
- CALL Parse
- MOV EAX, [ESP]
- MOV EDX, ESP
- CALL Trim
- POP EDX
- PUSH EDX
- TEST EDX, EDX
- JZ @@filt_added
- MOV EAX, [EBX].fFilters
- CALL TStrList.Add
-@@filt_added:
- CALL RemoveStr
- JMP @@1
-
- // ';' string literal
- {$IFDEF _D2009orHigher}
- DW 0, 1
- {$ENDIF}
- DD -1, 1
-@@semicolon:
- DB ';',0
-
-@@2: POP ECX
- POPAD
- XOR ECX, ECX
- PUSH [Attr]
- CALL ScanDirectory
- POP EBX
-@@exit:
-end;
-
-procedure _FillStrList; // Ýòà ÷àñòü êîäà îáùàÿ äëÿ äâóõ ñëåäóþùèõ ïðîöåäóð
-asm
-///////////////////////////////
- OR EAX,0
- JE @@EXIT //ERROR
-// LEA EAX,[EAX-IniBufferSize]
-// JE @@EXIT
-// âîçìîæíà íåõâàòêà Áóôåðà... â ïðèíöèïå íå îøèáêà :)
-// âîçâðàùàåì ÷òî âëåçëî...
-@@LOOP:
- LEA EAX,[ESI+4]
- CALL StrLen
- MOV [ESI],EAX
- LEA EDX,[ESI+4]
- INC EAX
- ADD ESI,EAX
-
- MOV EAX,EDI
-
- CALL TStrList.ADD
-
- CMP byte ptr [ESI+4],0
- JNE @@LOOP
-
-@@EXIT:
- POP EAX
- CALL System.@FreeMem
-
-
- POP ECX
- POP EBX
- POP EDI
- POP ESI
-end;
-
-procedure TIniFile.GetSectionNames(Names: PStrList);
-asm
- PUSH ESI
- PUSH EDI
- PUSH EBX
- PUSH ECX
-
- MOV EBX,EAX
- MOV EAX, IniBufferStrSize
- MOV EDI,EDX
-
- CALL System.@GetMem
- MOV ESI,EAX
- PUSH EAX
-
- PUSH [EBX].fFileName
- MOV EAX,IniBufferSize
- PUSH EAX
-
- LEA EAX,[ESI+4]
- PUSH EAX
-
- CALL GetPrivateProfileSectionNames
- JMP _FillStrList
-end;
-
-procedure TIniFile.SectionData(Names: PStrList);
-asm
- PUSH ESI
- PUSH EDI
- PUSH EBX
- PUSH ECX
-
- MOV EBX,EAX
- MOV EAX, IniBufferStrSize
- MOV EDI,EDX
-
- CALL System.@GetMem
- MOV ESI,EAX
- PUSH EAX
-
- OR [EBX].fMode,0
- JNE @@DOWrite
-
- PUSH [EBX].fFileName
- MOV EAX,IniBufferSize
- PUSH EAX
-
- LEA EAX,[ESI+4]
- PUSH EAX
- PUSH [EBX].fSection
-
- CALL GetPrivateProfileSection
- JMP _FillStrList
-
-@@DOWrite:
-
- PUSH EBX
- PUSH ESI
- PUSH EDX
- PUSH EBP
-
- MOV EDX,0
- MOV EBP,[EDI].TStrList.fCount
- MOV EBX,IniBufferSize-2 // îñòàâèì ìåñòî äëÿ #0#0
-
-{ECM+++>} OR EBP,EBP // otherwise GetPChars when StrList.Count = 0 crashed
-
-@@LOOP:
- JE @@ENDLOOP
-
- OR EBX,EBX
- JE @@ENDLOOP
-
- PUSH EDX
- MOV EAX,EDI
- CALL TStrList.GetPChars
-
- PUSH EAX
- CALL StrLen
- POP EAX
-
- XOR ECX,-1
- MOV EDX,ESI
-
- SUB EBX,ECX
- JA @@L1
- ADD ECX,EBX
- XOR EBX,EBX
-@@L1:
-
- ADD ESI,ECX
-
- CALL MOVE
-@@L2:
- POP EDX
- INC EDX
- DEC EBP
- JMP @@LOOP
-@@ENDLOOP:
- MOV WORD PTR [ESI],0
-
- POP EBP
- POP EDX
- POP ESI
- POP EBX
- MOV EAX,EBX
- CALL ClearSection
-
- PUSH [EBX].fFileName
- PUSH ESI
- PUSH [EBX].fSection
-
- CALL WritePrivateProfileSection
-
- POP EAX
- CALL System.@FreeMem
-
- POP ECX
- POP EBX
- POP EDI
- POP ESI
-
-end;
-
-function _NewControl( AParent: PControl; ControlClassName: PKOLChar;
- Style: DWORD; Ctl3D: Boolean;
- Actions: TCommandActionsParam ): PControl;
-const szActions = sizeof(TCommandActions);
-asm
- PUSH EBX
- PUSH EAX // push AParent
- PUSH ECX // push Style
- MOVZX ECX, [Ctl3D]
- PUSH [Actions]
- CALL _NewWindowed
- XCHG EBX, EAX
- {$IFDEF USE_FLAGS}
- OR [EBX].TControl.fFlagsG3, (1 shl G3_IsControl)
- {$ELSE}
- INC [EBX].TControl.fIsControl
- {$ENDIF}
- POP EDX // pop Style
- OR EDX, WS_CLIPSIBLINGS or WS_CLIPCHILDREN
- //INC [EBX].TControl.fVerticalAlign
- MOV byte ptr [EBX].TControl.fLookTabKeys, $0F
- TEST [EBX].TControl.fCtl3D_child, 1
- JZ @@noCtl3D
- AND EDX, not WS_BORDER
- OR byte ptr [EBX].TControl.fExStyle + 1, WS_EX_CLIENTEDGE shr 8
-@@noCtl3D:
- MOV [EBX].TControl.fStyle, EDX
- {$IFDEF USE_FLAGS}
- {$ELSE}
- TEST EDX, WS_VISIBLE
- SETNZ AL
- MOV [EBX].TControl.fVisible, AL
- TEST EDX, WS_TABSTOP
- SETNZ AL
- MOV [EBX].TControl.fTabstop, AL
- {$ENDIF USE_FLAGS}
- POP ECX // pop AParent
- JECXZ @@noParent
-
- PUSH ESI
- PUSH EDI
- PUSH ECX
- LEA ESI, [ECX].TControl.fMargin
- LEA EDI, [EBX].TControl.fBoundsRect
- LODSB
- MOVSX EAX, AL
- {$IFNDEF SMALLEST_CODE}
- PUSH EAX
- MOVSX ECX, byte ptr [ESI+2]
- ADD EAX, ECX // AParent.fClientLeft
- {$ENDIF}
- STOSD // fBoundsRect.Left
- {$IFNDEF SMALLEST_CODE}
- POP EAX
- PUSH EAX
- MOVSX ECX, byte ptr [ESI+0]
- ADD EAX, ECX // AParent.fClientTop
- {$ENDIF}
- STOSD // fBoundsRect.Top
- {$IFNDEF SMALLEST_CODE}
- XCHG EDX, EAX
- POP EAX
- {$ENDIF}
- ADD EAX, 64
- STOSD // fBoundsRect.Right
- {$IFNDEF SMALLEST_CODE}
- XCHG EAX, EDX
- ADD EAX, 64
- {$ENDIF}
- STOSD // fBoundsRect.Bottom}
- POP ECX
- MOV EAX, [ECX].TControl.fCursor
- STOSD
- POP EDI
- POP ESI
-
- XCHG EAX, ECX
- CALL TControl.ParentForm
- XCHG ECX, EAX
- JECXZ @@noParentForm
- INC [ECX].TControl.fTabOrder
- MOV DX, WORD PTR [ECX].TControl.fTabOrder
- MOV WORD PTR [EBX].TControl.fTabOrder, DX
- TEST [EBX].TControl.fStyle, WS_TABSTOP
- JZ @@CurrentControl_set
- CMP [ECX].TControl.DF.fCurrentControl, 0
- JNZ @@CurrentControl_set
- MOV [ECX].TControl.DF.fCurrentControl, EBX
-@@CurrentControl_set:
-@@noParentForm:
-@@noParent:
- MOVZX EDX, [CtlIdCount]
- INC [CtlIdCount]
- MOV [EBX].TControl.fMenu, EDX
- MOV EDX, offset[WndProcCtrl]
- MOV EAX, EBX
- CALL TControl.AttachProc
- XCHG EAX, EBX
- POP EBX
- {$IFDEF DEBUG_ALTSPC}
- PUSH EAX
- CALL DumpWindowed
- POP EAX
- {$ENDIF}
-end;
-
-const StaticClass: Array[0..6] of AnsiChar=('S','T','A','T','I','C',#0);
-function NewLabel( AParent: PControl; const Caption: KOLString ): PControl;
-asm
- PUSH EDX
-
- PUSH 0
- {$IFDEF PACK_COMMANDACTIONS}
- PUSH [LabelActions_Packed]
- {$ELSE}
- PUSH offset[LabelActions]
- {$ENDIF}
- MOV ECX, WS_VISIBLE or WS_CHILD or SS_LEFTNOWORDWRAP or SS_NOPREFIX or SS_NOTIFY
- MOV EDX, offset[StaticClass]
- CALL _NewControl
- MOV word ptr [EAX].TControl.aAutoSzX, $101
- {$IFDEF USE_FLAGS}
- OR [EAX].TControl.fFlagsG1, (1 shl G1_SizeRedraw) or (1 shl G1_IsStaticControl)
- {$ELSE}
- INC [EAX].TControl.fIsStaticControl
- INC [EAX].TControl.fSizeRedraw
- {$ENDIF}
- MOV EDX, [EAX].TControl.fBoundsRect.Top
- ADD EDX, 22
- MOV [EAX].TControl.fBoundsRect.Bottom, EDX
- POP EDX
- PUSH EAX
- CALL TControl.SetCaption
- POP EAX
-
-{$IFDEF GRAPHCTL_XPSTYLES}
- PUSH EAX
- MOV EDX, offset[XP_Themes_For_Label]
- CALL Attach_WM_THEMECHANGED
- POP EAX
-{$ENDIF}
-end;
-
-function NewGroupbox( AParent: PControl; const Caption: KOLString ): PControl;
-asm
- PUSH EDX
- PUSH 0
- {$IFDEF PACK_COMMANDACTIONS}
- PUSH [ButtonActions_Packed]
- {$ELSE}
- PUSH offset[ButtonActions]
- {$ENDIF}
- MOV EDX, offset[ButtonClass]
- MOV ECX, WS_VISIBLE or WS_CHILD or BS_GROUPBOX or WS_CLIPCHILDREN or WS_CLIPSIBLINGS
- CALL _NewControl
- OR [EAX].TControl.fExStyle, WS_EX_CONTROLPARENT
- MOV EDX, [EAX].TControl.fBoundsRect.Left
- ADD EDX, 100
- MOV [EAX].TControl.fBoundsRect.Right, EDX
- MOV EDX, [EAX].TControl.fBoundsRect.Top
- ADD EDX, 100
- MOV [EAX].TControl.fBoundsRect.Bottom, EDX
- MOV byte ptr [EAX].TControl.fClientTop, 22
- XOR EDX, EDX
- {$IFDEF USE_FLAGS}
- AND [EAX].TControl.fStyle.f2_Style, not(1 shl F2_Tabstop)
- {$ELSE}
- MOV [EAX].TControl.fTabstop, DL
- {$ENDIF USE_FLAGS}
- MOV DL, 2
- ADD [EAX].TControl.fClientBottom, DL
- ADD [EAX].TControl.fClientLeft, DL
- ADD [EAX].TControl.fClientRight, DL
- POP EDX
- PUSH EAX
- CALL TControl.SetCaption
- POP EAX
- PUSH EAX
- {$IFDEF USE_FLAGS}
- OR [EAX].TControl.fFlagsG5, 1 shl G5_IsGroupbox
- {$ELSE}
- INC [EAX].TControl.fIsGroupBox
- {$ENDIF}
- MOV EDX, offset[WndProcDoEraseBkgnd]
- CALL TControl.AttachProc
- POP EAX
-
-{$IFDEF GRAPHCTL_XPSTYLES}
- PUSH EAX
- MOV EDX, offset[XP_Themes_For_GroupBox]
- CALL Attach_WM_THEMECHANGED
- POP EAX
-{$ENDIF}
-end;
-
-function NewPanel( AParent: PControl; EdgeStyle: TEdgeStyle ): PControl;
-const CreateStyle = WS_VISIBLE or WS_CHILD or SS_LEFTNOWORDWRAP or
- SS_NOPREFIX or SS_NOTIFY;
-asm
-{$IFDEF GRAPHCTL_XPSTYLES}
- MOVZX EDX, EdgeStyle
- PUSH EDX
-{$ENDIF}
-
- PUSH EDX
- MOV EDX, offset[StaticClass]
- MOV ECX, CreateStyle
- PUSH 0
- {$IFDEF PACK_COMMANDACTIONS}
- PUSH [LabelActions_Packed]
- {$ELSE}
- PUSH offset[LabelActions]
- {$ENDIF}
- CALL _NewControl
- //INC byte ptr [EAX].TControl.aAutoSzX
- //INC byte ptr [EAX].TControl.aAutoSzY
- MOV word ptr [EAX].TControl.aAutoSzX, $101
- ADD [EAX].TControl.fBoundsRect.Right, 100-64
- ADD [EAX].TControl.fBoundsRect.Bottom, 100-64
- OR byte ptr [EAX].TControl.fExStyle+2, 1
- POP ECX
- CMP CL, 1
- JG @@exit
- JE @@sunken
- OR byte ptr [EAX].TControl.fStyle+2, $40
-{$IFDEF GRAPHCTL_XPSTYLES}
- JMP @@visual
-{$ELSE}
- RET
-{$ENDIF}
-@@sunken:
- OR byte ptr [EAX].TControl.fStyle+1, $10
-@@exit:
-
-{$IFDEF GRAPHCTL_XPSTYLES}
-@@visual:
- CMP AppTheming, TRUE
- JNE @@es_none_
- CMP CL, 1
- JG @@es_none_
- JE @@not_sunken
- AND byte ptr [EAX].TControl.fStyle+2, $00
- JNE @@es_none_
-@@not_sunken:
- AND byte ptr [EAX].TControl.fStyle+1, $00
-@@es_none_:
- POP EDX
- PUSH EAX
- CALL TControl.SetEdgeStyle
- POP EAX
- PUSH EAX
- MOV EDX, offset[XP_Themes_For_Panel]
- CALL Attach_WM_THEMECHANGED
- POP EAX
-{$ENDIF}
-end;
-
-const ListBoxClass : Array[ 0..7 ] of AnsiChar = ( 'L','I','S','T','B','O','X',#0 );
-function NewListbox( AParent: PControl; Options: TListOptions ): PControl;
-asm
- PUSH EAX
- PUSH EDX
- MOV EAX, ESP
- MOV EDX, offset[ListFlags]
- XOR ECX, ECX
- MOV CL, 11
- CALL MakeFlags
- POP EDX
- OR EAX, WS_VISIBLE or WS_CHILD or WS_TABSTOP or WS_BORDER or WS_VSCROLL or LBS_NOTIFY
- XCHG ECX, EAX
- POP EAX
- PUSH 1
- {$IFDEF PACK_COMMANDACTIONS}
- PUSH [ListActions_Packed]
- {$ELSE}
- PUSH offset[ListActions]
- {$ENDIF}
- MOV EDX, offset[ListBoxClass]
- CALL _NewControl
- {$IFDEF PACK_COMMANDACTIONS}
- MOV EDX, [EAX].TControl.fCommandActions
- MOV [EDX].TCommandActionsObj.aClear, offset[ClearListbox]
- {$ENDIF}
- ADD [EAX].TControl.fBoundsRect.Right, 100
- ADD [EAX].TControl.fBoundsRect.Bottom, 200-64
- MOV [EAX].TControl.fColor, clWindow
- MOV [EAX].TControl.fLookTabKeys, 3
-end;
-
-procedure CreateComboboxWnd( Combo: PControl );
-//const PrevProcStr: PAnsiChar = 'PREV_PROC'; //************ Remarked By M.Gerasimov
-asm
- PUSH EDI
- PUSH EBX
- XCHG EBX, EAX
- PUSH GW_CHILD
- PUSH [EBX].TControl.fHandle
-@@getwindow:
- CALL GetWindow
- TEST EAX, EAX
- JZ @@fin
- PUSH offset[WndFuncCombo]
- PUSH GWL_WNDPROC
- PUSH EAX
- XCHG EDI, EAX
- CALL SetWindowLong
- PUSH EAX
- PUSH offset [ID_PREVPROC] //
- PUSH EDI
- CALL SetProp
-@@2getnext:
- PUSH GW_HWNDNEXT
- PUSH EDI
- JMP @@getwindow
-@@fin: POP EBX
- POP EDI
-end;
-
-{$IFDEF WNDPROCTREEVIEW_OLDASMVERSION}
-function WndProcTreeView( Self_: PControl; var Msg: TMsg; var Rslt: Integer ): Boolean;
-asm //cmd //opd
- CMP word ptr [EDX].TMsg.message, WM_NOTIFY
- JNZ @@ret_false
- PUSH EBX
- XCHG EBX, EAX
- MOV EDX, [EDX].TMsg.lParam
- {$IFDEF EVENTS_DYNAMIC}
- MOV EAX, [EBX].TControl.EV
- LEA EAX, [EAX].TEvents.fOnTVBeginDrag
- {$ELSE}
- LEA EAX, [EBX].TControl.EV.fOnTVBeginDrag
- {$ENDIF}
- CMP word ptr [EDX].TNMTreeView.hdr.code, NM_RCLICK
- JNE @@chk_TVN_BEGINDRAG
- PUSH ECX
- PUSH ECX
- PUSH ESP
- CALL GetCursorPos
- MOV EAX, EBX
- MOV EDX, ESP
- MOV ECX, EDX
- CALL TControl.Screen2Client
- POP EAX
- AND EAX, $FFFF
- POP EDX
- SHL EDX, 16
- OR EAX, EDX
- PUSH EAX
- CALL GetShiftState
- PUSH EAX
- PUSH WM_RBUTTONUP
- PUSH [EBX].TControl.fHandle
- CALL PostMessage
- JMP @@2fin_false1
-
-@@chk_TVN_BEGINDRAG:
- {$IFDEF UNICODE_CTRLS}
- CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_BEGINDRAGW
- JZ @@event_drag
- CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_BEGINRDRAGW
- JZ @@event_drag
- {$ENDIF UNICODE_CTRLS}
- CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_BEGINDRAG
- JZ @@event_drag
- CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_BEGINRDRAG
- JNZ @@chk_BEGINLABELEDIT
-@@event_drag:
- MOV EDX, [EDX].TNMTreeView.itemNew.hItem
-@@event_call:
- MOV ECX, [EAX].TMethod.Code
- JECXZ @@2fin_false1
- MOV EAX, [EAX].TMethod.Data
- XCHG EBX, ECX
- XCHG EDX, ECX
- CALL EBX
-@@2fin_false1: JMP @@fin_false
-@@chk_BEGINLABELEDIT:
- {$IFDEF EVENTS_DYNAMIC}
- MOV EAX, [EBX].TControl.EV
- LEA EAX, [EAX].TEvents.FOnTVBeginEdit
- {$ELSE}
- LEA EAX, [EBX].TControl.EV.fOnTVBeginEdit
- {$ENDIF}
- {$IFDEF UNICODE_CTRLS}
- CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_BEGINLABELEDITW
- JZ @@beginlabeledit
- {$ENDIF UNICODE_CTRLS}
- CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_BEGINLABELEDIT
- JNZ @@chk_ITEMEXPANDED //@@chk_DELETEITEM
-@@beginlabeledit:
- {$IFDEF USE_FLAGS}
- TEST [EBX].TControl.fFlagsG6, 1 shl G6_Dragging
- {$ELSE}
- CMP [EBX].TControl.fDragging, 0
- {$ENDIF}
- JZ @@allow_LABELEDIT
- XOR EAX, EAX
- INC EAX
- MOV [ECX], EAX
- JMP @@ret_true
-
-@@allow_LABELEDIT:
- PUSH ECX // @Rslt
-
- MOV ECX, [EAX].TMethod.Code
- JECXZ @@2fin_false1
- PUSH EBX
- XCHG EBX, ECX
- MOV EDX, [EDX].TTVDispInfo.item.hItem
- XCHG EDX, ECX
- MOV EAX, [EAX].TMethod.Data
- CALL EBX
- TEST AL, AL
- SETZ AL // Rslt := not event result;
- POP EBX
- JMP @@ret_EAX
-
-@@call_EBX:
- CALL EBX
-@@2fin_false:
- JMP @@fin_false
-@@chk_ITEMEXPANDED:
- {$IFDEF EVENTS_DYNAMIC}
- MOV EAX, [EBX].TControl.EV
- LEA EAX, [EAX].TEvents.fOnTVExpanded
- {$ELSE}
- LEA EAX, [EBX].TControl.EV.fOnTVExpanded
- {$ENDIF}
- {$IFDEF UNICODE_CTRLS}
- CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_ITEMEXPANDEDW
- JZ @@itemexpanded
- {$ENDIF UNICODE_CTRLS}
- CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_ITEMEXPANDED
- JNZ @@chk_SELCHANGING
-@@itemexpanded:
- MOV ECX, [EAX].TMethod.Code
- JECXZ @@2fin_false
- CMP [EDX].TNMTreeView.action, TVE_EXPAND
- PUSH ECX
- SETZ CL
- XCHG ECX, [ESP]
- JMP @@event_drag
-@@chk_SELCHANGING:
- CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_SELCHANGING
- JNE @@chk_ITEMEXPANDING
- XCHG EAX, ECX
- {$IFDEF EVENTS_DYNAMIC}
- MOV ECX, [EBX].TControl.EV
- MOV ECX, [ECX].TEvents.fOnTVSelChanging.TMethod.Code
- {$ELSE}
- MOV ECX, [EBX].TControl.EV.fOnTVSelChanging.TMethod.Code
- {$ENDIF}
-@@2fin_false2:
- JECXZ @@2fin_false
- PUSH EAX //@Rslt
- PUSH [EDX].TNMTreeView.itemNew.hItem
- XCHG ECX, EBX //EBX=OnTVSelChanging.Code ECX=Sender
- XCHG ECX, EDX //EDX=Sender ECX=Msg
- MOV ECX, [ECX].TNMTreeView.itemOld.hItem
- {$IFDEF EVENTS_DYNAMIC}
- MOV EAX, [EDX].TControl.EV
- MOV EAX, [EAX].TEvents.fOnTVSelChanging.TMethod.Data
- {$ELSE}
- MOV EAX, [EDX].TControl.EV.fOnTVSelChanging.TMethod.Data
- {$ENDIF}
- CALL EBX
- XOR AL, 1
- MOVZX EAX, AL
- JMP @@ret_EAX
-
-@@chk_ITEMEXPANDING:
- {$IFDEF UNICODE_CTRLS}
- CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_ITEMEXPANDINGW
- JZ @@itemexpanding
- {$ENDIF UNICODE_CTRLS}
- CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_ITEMEXPANDING
- JNE @@chk_ENDLABELEDIT
-@@itemexpanding:
- XCHG EAX, ECX
- {$IFDEF EVENTS_DYNAMIC}
- MOV ECX, [EBX].TControl.EV
- MOV ECX, [ECX].TEvents.fOnTVExpanding.TMethod.Code
- {$ELSE}
- MOV ECX, [EBX].TControl.EV.fOnTVExpanding.TMethod.Code
- {$ENDIF}
- JECXZ @@2fin_false2
- PUSH EAX // @Rslt
- CMP [EDX].TNMTreeView.action, TVE_EXPAND
- PUSH ECX
- SETZ CL
- XCHG ECX, [ESP]
- XCHG ECX, EBX //EBX=OnTVExpanding.Code ECX=Seneder
- XCHG EDX, ECX //ECX=Msg EDX=Sender
- MOV ECX, [ECX].TNMTreeView.itemNew.hItem //ECX=Item
- {$IFDEF EVENTS_DYNAMIC}
- MOV EAX, [EDX].TControl.EV
- MOV EAX, [EAX].TEvents.fOnTVExpanding.TMethod.Data
- {$ELSE}
- MOV EAX, [EDX].TControl.EV.fOnTVExpanding.TMethod.Data //EAX=object
- {$ENDIF}
-@@111:
- CALL EBX
-@@ret_EAX:
- POP EDX //EDX=@Rslt
- MOVZX EAX, AL
- NEG EAX
- MOV [EDX], EAX
-@@ret_true:
- MOV AL, 1
- POP EBX
- RET
-@@chk_ENDLABELEDIT:
- {$IFDEF UNICODE_CTRLS}
- CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_ENDLABELEDITW
- JZ @@endlabeledit
- {$ENDIF UNICODE_CTRLS}
- CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_ENDLABELEDIT
- JNZ @@chk_SELCHANGED
-@@endlabeledit:
- XCHG EAX, ECX
- {$IFDEF EVENTS_DYNAMIC}
- MOV ECX, [EBX].TControl.EV
- MOV ECX, [ECX].TEvents.fOnTVEndEdit.TMethod.Code
- {$ELSE}
- MOV ECX, [EBX].TControl.EV.fOnTVEndEdit.TMethod.Code
- {$ENDIF}
- JECXZ @@ret_1
- PUSH EAX
- PUSH EBX
- PUSH 0
-
- XCHG EDX, EBX
- MOV EAX, [EBX].TTVDispInfo.item.pszText
- PUSH EDX
- PUSH ECX
- XCHG EAX, EDX
- {$IFDEF UNICODE_CTRLS}
- CMP [EBX].TNMTreeView.hdr.code, TVN_ENDLABELEDITW
- JNZ @@endlabeleditA
- CALL TControl.TVGetItemTextW
- JMP @@NewTxt_ready
-@@endlabeleditA:
- {$ENDIF UNICODE_CTRLS}
- TEST EDX, EDX
- JNZ @@prepare_NewTxt
- // NewTxt := [EDX].TControl.TVItemText[ hItem ]
- LEA ECX, [ESP + 8]
- MOV EDX, [EBX].TTVDispInfo.item.hItem
- CALL TControl.TVGetItemText
- JMP @@NewTxt_ready
-@@prepare_NewTxt:
- LEA EAX, [ESP+8]
- {$IFDEF _D2009orHigher}
- PUSH ECX
- XOR ECX, ECX
- {$ENDIF}
- CALL System.@LStrFromPChar
- {$IFDEF _D2009orHigher}
- POP ECX
- {$ENDIF}
-@@NewTxt_ready:
- POP ECX
- POP EDX
- POP EAX
- PUSH EAX
- PUSH EAX
- {$IFDEF EVENTS_DYNAMIC}
- MOV EAX, [EDX].TControl.EV
- MOV EAX, [EAX].TEvents.fOnTVEndEdit.TMethod.Data
- {$ELSE}
- MOV EAX, [EDX].TControl.EV.fOnTVEndEdit.TMethod.Data
- {$ENDIF}
- MOV EBX, [EBX].TTVDispInfo.item.hItem
- XCHG ECX, EBX
- CALL EBX
- XCHG EBX, EAX
- CALL RemoveStr
- XCHG EAX, EBX
- POP EBX
- JMP @@ret_EAX
-@@ret_1:
- INC ECX
- MOV [EAX], ECX
- JMP @@ret_true
-
-@@chk_SELCHANGED:
- {$IFDEF UNICODE_CTRLS}
- CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_SELCHANGEDW
- JZ @@selchanged
- {$ENDIF UNICODE_CTRLS}
- CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_SELCHANGED
- JNZ @@fin_false
-@@selchanged:
- XCHG EAX, EBX
- CALL TControl.DoSelChange
-
-@@fin_false:
- POP EBX
-@@ret_false:
- XOR EAX, EAX
-end;
-{$ELSE NEW VERSION OF WndProcTreeView}
-function WndProcTreeView( Self_: PControl; var Msg: TMsg; var Rslt: Integer ): Boolean;
-asm
- PUSH ESI
- PUSH EDI
- MOV EDI, ECX // EDI -> Rslt
- XOR ECX, ECX
- CMP WORD PTR [EDX].TMsg.message, WM_NOTIFY
- JNZ @@ret_false1
- XCHG ESI, EAX
- MOV EDX, [EDX].TMsg.lParam
- CMP WORD PTR [EDX].TNMTreeView.hdr.code, NM_RCLICK
- JNE @@chk_TVN_BEGINDRAG
- PUSH ECX
- PUSH ECX
- PUSH ESP
- CALL GetCursorPos
- MOV EAX, ESI
- MOV EDX, ESP
- MOV ECX, EDX
- CALL TControl.Screen2Client
- POP EDX
- POP EAX
- SHLD EAX, EDX, 16
- PUSH EAX
- CALL GetShiftState
- PUSH EAX
- PUSH WM_RBUTTONUP
- PUSH ESI
- CALL TControl.PostMsg
- JMP @@ret_false1
-@@prepareCallEvent:
- STC
- MOV EDX, ESI
- {$IFDEF EVENTS_DYNAMIC}
- MOV ESI, [ESI].TControl.EV
- LEA ECX, [ESI+ECX*8].TEvents.fOnTVBeginDrag
- {$ELSE}
- LEA ECX, [ESI+ECX*8].TControl.EV.fOnTVBeginDrag
- {$ENDIF}
- MOV EAX, [ECX].TMethod.Data
- MOV ECX, [ECX].TMethod.Code
- JECXZ @@noEvent
- MOV ESI, ECX
- AND EAX, EAX
-@@noEvent:
- RET
-@@chk_TVN_BEGINDRAG: ///////////////////////////////////////////////////////////
- CMP WORD PTR [EDX].TNMTreeView.hdr.code, TVN_BEGINDRAG
- JE @@beginDrag
- CMP WORD PTR [EDX].TNMTreeView.hdr.code, TVN_BEGINRDRAG
- JNE @@chk_TVNBEGINLABELEDIT
-@@beginDrag:
- PUSH [EDX].TNMTreeView.itemNew.hItem
- CALL @@prepareCallEvent
- POP ECX
- JC @@ret_false1
-@@justEventCall:
- CALL ESI
-@@RsltEAX_ResultFalse:
- MOV [EDI], EAX
- XOR EAX, EAX
- POP EDI
- POP ESI
- RET
-@@chk_TVNBEGINLABELEDIT: ///////////////////////////////////////////////////////
- INC ECX // -> FOnTVBeginEdit
- CMP WORD PTR [EDX].TNMTreeView.hdr.code, TVN_BEGINLABELEDIT
- JNE @@chk_ENDLABELEDIT
- ///////////////////////////////////////////////////////////////////////
- XOR EAX, EAX
- INC EAX
- {$IFDEF USE_FLAGS}
- TEST [ESI].TControl.fFlagsG6, 1 shl G6_Dragging
- {$ELSE}
- CMP [ESI].TControl.fDragging, 0
- {$ENDIF}
- JNZ @@rsltEAX_ResultTrue
- PUSH [EDX].TTVDispInfo.item.hItem
- CALL @@prepareCallEvent
- POP ECX
- JC @@ret_false1
- CALL ESI
- XOR AL, 1 //+Dufa
-@@rsltEAX_ResultTrue:
- MOV [EDI], AL //+VK
-@@ResultTrue:
- MOV AL, 1
- POP EDI
- POP ESI
- RET
-@@chk_ENDLABELEDIT:
- INC ECX // -> fOnTVEndEdit
- CMP WORD PTR [EDX].TNMTreeView.hdr.code, TVN_ENDLABELEDIT
- JNE @@chk_ITEMEXPANDING
- MOV EAX, [EDX].TTVDispInfo.item.pszText
- TEST EAX, EAX
- JZ @@ResultTrue
- PUSH EAX
- PUSH [EDX].TTVDispInfo.item.hItem
- CALL @@prepareCallEvent
- POP ECX
- //JNC @@justEventCall ---//dufa
- JC @@ret_false1 //dufa
- CALL ESI //dufa
- JMP @@rsltEAX_ResultTrue //dufa
-@@Rslt1_ResultTrue:
- XOR EAX, EAX
- INC EAX
- JMP @@RsltEAX_ResultFalse
-@@chk_ITEMEXPANDING: ///////////////////////////////////////////////////////////
- INC ECX // -> FOnTVExpanding
- CMP WORD PTR [EDX].TNMTreeView.hdr.code, TVN_ITEMEXPANDING
- JNE @@chk_ITEMEXPANDED
-@@expanding_expanded:
- CMP [EDX].TNMTreeView.action, TVE_EXPAND
- SETZ AL
- PUSH EAX
- PUSH [EDX].TNMTreeView.itemNew.hItem
-@@event3:
- CALL @@prepareCallEvent
- POP ECX
- JNC @@justEventCall
- POP EAX
- JMP @@ret_false1
-@@chk_ITEMEXPANDED: ////////////////////////////////////////////////////////////
- INC ECX // -> FOnTVExpanded
- CMP [EDX].TNMTreeView.hdr.code, TVN_ITEMEXPANDED
- JE @@expanding_expanded
- ///////////////////////////////////////////////////////////////////////
- INC ECX // -> FOnTVSelChanging
- CMP [EDX].TNMTreeView.hdr.code, TVN_SELCHANGING
- JNE @@chk_TVN_SELCHANGED
- PUSH [EDX].TNMTreeView.itemNew.hItem
- PUSH [EDX].TNMTreeView.itemOld.hItem
- JMP @@event3
-@@chk_TVN_SELCHANGED:
- CMP [EDX].TNMTreeView.hdr.code, TVN_SELCHANGED
- JNE @@ret_false1
- XCHG EAX, ESI
- CALL TControl.DoSelChange
-@@ret_false1:
- XOR EAX, EAX
- POP EDI
- POP ESI
-end;
-{$ENDIF}
-
-function NewTabControl( AParent: PControl; const Tabs: array of PKOLChar; Options: TTabControlOptions;
- ImgList: PImageList; ImgList1stIdx: Integer ): PControl;
-const lenf=high(TabControlFlags); //+++
-asm //cmd //opd
- PUSH EBX
- PUSH ESI
- PUSH EDI
- XCHG EBX, EAX
- PUSH EDX
- PUSH ECX
- LEA EAX, [Options]
- MOV EDX, offset[TabControlFlags]
- XOR ECX, ECX
- MOV CL, lenf
- CALL MakeFlags
- TEST byte ptr [Options], 4
- JZ @@0
- OR EAX, WS_TABSTOP or TCS_FOCUSONBUTTONDOWN
-@@0: OR EAX, WS_CHILD or WS_CLIPSIBLINGS or WS_CLIPCHILDREN or WS_VISIBLE
- XCHG ECX, EAX
- XCHG EAX, EBX
- MOV EDX, offset[WC_TABCONTROL]
- PUSH 1
- {$IFDEF PACK_COMMANDACTIONS}
- PUSH [TabControlActions_Packed]
- {$ELSE}
- PUSH offset[TabControlActions]
- {$ENDIF}
- CALL _NewCommonControl
- MOV EBX, EAX
- TEST [Options], 2 shl (tcoBorder - 1)
- JNZ @@borderfixed
- AND [EBX].TControl.fExStyle, not WS_EX_CLIENTEDGE
-@@borderfixed:
- MOV EDX, offset[WndProcTabControl]
- CALL TControl.AttachProc
- ADD [EBX].TControl.fBoundsRect.Right, 100-64
- ADD [EBX].TControl.fBoundsRect.Bottom, 100-64
- MOV ECX, [ImgList]
- JECXZ @@2
- XCHG EAX, ECX
- CALL TImageList.GetHandle
- PUSH EAX
- PUSH 0
- PUSH TCM_SETIMAGELIST
- PUSH EBX
- CALL TControl.Perform
-@@2:
- POP EDI // EDI = High(Tabs)
- POP ESI // ESI = Tabs
- XOR EDX, EDX // EDX := 0 (=I)
- MOV EAX, [ImgList1stIdx] //(=II)
-@@loop:
- CMP EDX, EDI
- JG @@e_loop
- PUSH EAX
- PUSH EDX
- PUSH EAX
- LODSD
- XCHG ECX, EAX
- MOV EAX, EBX
- CALL TControl.TC_Insert
- POP EDX
- POP EAX
- INC EAX
- INC EDX
- JMP @@loop
-@@e_loop:
- MOV byte ptr [EBX].TControl.fLookTabKeys, 1
- XCHG EAX, EBX
- POP EDI
- POP ESI
- POP EBX
-end;
-
-function NewToolbar( AParent: PControl; Align: TControlAlign; Options: TToolbarOptions;
- Bitmap: HBitmap; const Buttons: array of PKOLChar;
- const BtnImgIdxArray: array of Integer ) : PControl;
-const szTBButton = Sizeof( TTBButton );
- Option3DBorder = 1 shl Ord( tbo3DBorder );
-asm //cmd //opd
- PUSH EDI
- MOVZX EDX, DL
- PUSH EDX // Align
- PUSH EAX // AParent
-
- XOR EAX, EAX
- TEST CL, Option3DBorder
- SETNZ AL
- PUSH EAX
-
- PUSH ECX // Options
-
- MOV AL, ICC_BAR_CLASSES
- CALL DoInitCommonControls
-
- MOV EAX, ESP
- MOV EDX, offset[ToolbarOptions]
- XOR ECX, ECX
- MOV CL, 6
- CALL MakeFlags
- POP EDX
-
- {$IFDEF COMMANDACTIONS_OBJ}
- PUSH TOOLBAR_ACTIONS
- {$ELSE}
- PUSH 0 //: actions : = nil
- {$ENDIF}
- XCHG ECX, EAX // ECX = MakeFlags(...)
- MOV EDI, ECX
- MOV EAX, [ESP+8] // EAX = AParent
- MOV EDX, [ESP+12] // EDX = Align
- OR ECX, [EDX*4+offset ToolbarAligns]
- OR ECX, WS_CHILD or WS_VISIBLE or TBSTYLE_TOOLTIPS
- MOV EDX, offset[ TOOLBARCLASSNAME ]
- CALL _NewCommonControl
- {$IFDEF COMMANDACTIONS_OBJ}
- MOV EDX, [EAX].TControl.fCommandActions
- MOV [EDX].TCommandActionsObj.aClear, offset[ClearToolbar]
- MOV [EDX].TCommandActionsObj.aGetCount, TB_BUTTONCOUNT
- {$ELSE}
- MOV [EAX].TControl.fCommandActions.aClear, offset[ClearToolbar]
- MOV [EAX].TControl.fCommandActions.aGetCount, TB_BUTTONCOUNT
- {$ENDIF}
- {$IFDEF USE_FLAGS}
- OR [EAX].TControl.fFlagsG5, 1 shl G5_IsButton
- {$ELSE}
- INC [EAX].TControl.fIsButton
- {$ENDIF}
- POP EDX // pop AParent
- POP EDX // EDX = Align
- PUSH EDX
- TEST EDX, EDX
- JE @@zero_bounds
- ADD [EAX].TControl.fBoundsRect.Bottom, 26-64
- ADD [EAX].TControl.fBoundsRect.Right, 1000-64
- JMP @@bounds_ready
-@@zero_bounds:
- MOV [EAX].TControl.fBoundsRect.Left, EDX
- MOV [EAX].TControl.fBoundsRect.Top, EDX
- MOV [EAX].TControl.fBoundsRect.Right, EDX
- MOV [EAX].TControl.fBoundsRect.Bottom, EDX
-@@bounds_ready:
- PUSH EBX
- PUSH ESI
- XCHG EBX, EAX
- MOV ESI, offset[TControl.Perform]
- PUSH 0
- PUSH 0
- PUSH TB_GETEXTENDEDSTYLE
- PUSH EBX
- CALL ESI
- OR EAX, TBSTYLE_EX_DRAWDDARROWS
- PUSH EAX
- PUSH 0
- PUSH TB_SETEXTENDEDSTYLE
- PUSH EBX
- CALL ESI
- MOV EDX, offset[WndProcToolbarCtrl]
- MOV EAX, EBX
- CALL TControl.AttachProc
- MOV EDX, offset[WndProcDoEraseBkgnd]
- MOV EAX, EBX
- CALL TControl.AttachProc
- PUSH 0
- PUSH szTBButton
- PUSH TB_BUTTONSTRUCTSIZE
- PUSH EBX
- CALL ESI
- PUSH 0
- MOVSX EAX, [EBX].TControl.fMargin
- PUSH EAX
- PUSH TB_SETINDENT
- PUSH EBX
- CALL ESI
- MOV EAX, [ESP+8] // Align
- {$IFDEF PARANOIA} DB $2C, 1 {$ELSE} SUB AL, 1 {$ENDIF}
- JL @@bounds_correct
- JE @@corr_right
- {$IFDEF PARANOIA} DB $2C, 2 {$ELSE} SUB AL, 2 {$ENDIF}
- JNE @@corr_bottom
- @@corr_right:
- MOV EDX, [EBX].TControl.fBoundsRect.Left
- ADD EDX, 24
- MOV [EBX].TControl.fBoundsRect.Right, EDX
- JMP @@bounds_correct
- @@corr_bottom:
- MOV EDX, [EBX].TControl.fBoundsRect.Top
- ADD EDX, 22
- MOV [EBX].TControl.fBoundsrect.Bottom, EDX
- @@bounds_correct:
- {$IFnDEF TBBUTTONS_DFLT_NOAUTOSIZE}
- MOV byte ptr [EBX].TControl.DF.fDefaultTBBtnStyle, TBSTYLE_AUTOSIZE
- {$ENDIF}
- MOV EDX, [Bitmap]
- TEST EDX, EDX
- JZ @@bitmap_added
- MOV EAX, EBX
- CALL TControl.TBAddBitmap
- @@bitmap_added:
-
- PUSH dword ptr [BtnImgIdxArray]
- PUSH dword ptr [BtnImgIdxArray-4]
- MOV ECX, [Buttons-4]
- MOV EDX, [Buttons]
- MOV EAX, EBX
- CALL TControl.TBAddButtons
-
- PUSH 0
- PUSH 0
- PUSH WM_SIZE
- PUSH EBX
- CALL ESI
- // ---
- {+|ecm|}
- // ---
- MOV EDX,EDI
- OR EDX,[EBX].TControl.FStyle
- MOV EAX,EBX
- CALL TControl.SetStyle
- // ---
- {/+|ecm|}
- // ---
- XCHG EAX, EBX
- POP ESI
- POP EBX
- POP EDX
- POP EDI
-end;
-
-function WndProcDateTimePickerNotify( Self_: PControl; var Msg: TMsg; var Rslt: Integer ): Boolean;
-type
- TStrStr = record
- param_Date: TDateTime;
- param_PtrToAccept: PInteger;
- Accept: Integer;
- UserString: String;
- end;
-const Size_TStrStr = sizeof( TStrStr );
-asm
- PUSH ESI
- PUSH EDI
- MOV EDI, EDX
- CMP WORD PTR [EDI].TMsg.message, WM_NOTIFY
- JNZ @@ret_false
- {$IFDEF EVENTS_DYNAMIC}
- MOV ESI, [EAX].TControl.EV
- {$ENDIF}
- MOV ECX, [EDI].TMsg.lParam
- MOV EDX, [ECX].TNMHdr.code
- CMP EDX, DTN_DROPDOWN
- JNZ @@chk_DTN_CLOSEUP
- {$IFDEF EVENTS_DYNAMIC}
- LEA ECX, [ESI].TEvents.fOnDropDown.TMethod.Code
- {$ELSE}
- LEA ECX, [EAX].TControl.EV.fOnDropDown.TMethod.Code
- {$ENDIF}
-@@event1:
- MOV EDX, [ECX].TMethod.Data
- MOV ECX, [ECX].TMethod.Code
- {$IFDEF NIL_EVENTS}
- JECXZ @@ret_false
- {$ENDIF}
- XCHG EAX, EDX
- CALL ECX
- JMP @@ret_false
-@@chk_DTN_CLOSEUP: /////////////////////////////////////////////////////////////
- {$IFDEF EVENTS_DYNAMIC}
- LEA ECX, [ESI].TEvents.fOnCloseUp.TMethod.Code
- {$ELSE}
- LEA ECX, [EAX].TControl.EV.fOnCloseUp.TMethod.Code
- {$ENDIF}
- CMP EDX, DTN_CLOSEUP
- JE @@event1
-////////////////////////////////////////////////////////////////////////////////
- {$IFDEF EVENTS_DYNAMIC}
- LEA ECX, [ESI].TEvents.fOnChangeCtl.TMethod.Code
- {$ELSE}
- LEA ECX, [EAX].TControl.EV.fOnChangeCtl.TMethod.Code
- {$ENDIF}
- CMP EDX, DTN_DATETIMECHANGE
- JE @@event1
- CMP EDX, DTN_USERSTRING
- JNE @@ret_false
-////////////////////////////////////////////////////////////////////////////////
- {$IFDEF EVENTS_DYNAMIC}
- MOV ECX, [ESI].TEvents.fOnDTPUserString.TMethod.Code
- MOV EDX, [ESI].TEvents.fOnDTPUserString.TMethod.Data
- {$ELSE}
- MOV ECX, [EAX].TControl.EV.fOnDTPUserString.TMethod.Code
- MOV EDX, [EAX].TControl.EV.fOnDTPUserString.TMethod.Data
- {$ENDIF}
- {$IFDEF NIL_EVENTS}
- JECXZ @@ret_false
- {$ENDIF}
- SUB ESP, Size_TStrStr
- MOV ESI, ESP
- PUSHAD
- CALL TControl.GetDateTime
- FSTP QWORD PTR [ESI].TStrStr.param_Date
- WAIT
- //POPAD
- //PUSHAD
- LEA EAX, [ESI].TStrStr.UserString
- AND dword ptr [EAX], 0
- MOV EDI, [EDI].TMsg.lParam
- MOV EDX, [EDI].TNMDateTimeString.pszUserString
- CALL System.@LStrFromPChar
- LEA EAX, [ESI].TStrStr.Accept
- MOV byte ptr [EAX], 1
- MOV [ESI].TStrStr.param_PtrToAccept, EAX
- POPAD
- MOV ESI, ECX
- MOV ECX, [ESI].TStrStr.UserString
- XCHG EAX, EDX
- CALL ESI
- MOV EAX, [ESP].TStrStr.Accept
- AND EAX, 1
- MOV [EDI].TNMDateTimeString.dwFlags, EAX
- LEA EAX, [ESI].TStrStr.UserString
- CALL System.@LStrClr
- ADD ESP, Size_TStrStr
-@@ret_false:
- XOR EAX, EAX
- POP EDI
- POP ESI
-end;
-
-function TControl.GetWindowHandle: HWnd;
-asm
- MOV ECX, [EAX].fHandle
- JECXZ @@1
- XCHG EAX, ECX
- RET
-@@1:
- PUSH EBX
- MOV EBX, EAX
- {$IFDEF USE_FLAGS}
- TEST [EBX].fFlagsG4, 1 shl G4_CreateVisible
- {$ELSE}
- CMP [EBX].fCreateVisible, 0
- {$ENDIF}
- JNZ @@2
-
- XOR EDX, EDX
- CALL TControl.Set_Visible
-
- MOV EAX, EBX
- CALL CallTControlCreateWindow
- { This is a call to Pascal piece of code, which
- calls virtual method TControl.CreateWindow }
-
- {$IFDEF USE_FLAGS}
- OR [EBX].fFlagsG4, 1 shl G4_CreateHidden
- {$ELSE}
- INC [EBX].fCreateHidden
- {$ENDIF}
- JMP @@0
-
-@@2: CALL CallTControlCreateWindow
-@@0: MOV EAX, [EBX].fHandle
- POP EBX
-end;
-
-function TControl.CreateWindow: Boolean;
-type PCreateWndParams = ^TCreateWndParams;
-const
- CS_OFF = CS_OWNDC or CS_CLASSDC or CS_PARENTDC or CS_GLOBALCLASS;
- CS_ON = 0; //CS_VREDRAW or CS_HREDRAW;
- szWndClass = sizeof( TWndClass );
- int_IDC_ARROW = integer( IDC_ARROW );
-asm
- PUSH EBX
- XCHG EBX, EAX
- {$IFDEF DEBUG_CREATEWINDOW}
- MOV EAX, EBX
- CALL Debug_CreateWindow1
- {$ENDIF}
- MOV ECX, [EBX].fParent
- JECXZ @@chk_handle
- XCHG EAX, ECX
- CALL GetWindowHandle
- TEST EAX, EAX
- JZ @@ret_0
-@@chk_handle:
- MOV ECX, [EBX].fHandle
- JECXZ @@prepare_Params
- MOV EAX, EBX
- {$IFDEF USE_FLAGS}
- TEST [EBX].fFlagsG4, 1 shl G4_CreateHidden
- {$ELSE}
- CMP [EBX].fCreateHidden, 0
- {$ENDIF}
- JZ @@create_children
- CALL CreateChildWindows
- MOV EAX, EBX
- MOV DL, 1
- CALL Set_Visible
- {$IFDEF USE_FLAGS}
- AND [EBX].fFlagsG4, not(1 shl G4_CreateHidden)
- {$ELSE}
- MOV [EBX].fCreateHidden, 0
- {$ENDIF}
- JMP @@ret_true
-@@create_children:
- CALL CreateChildWindows
-@@ret_true:
- MOV AL, 1
-@@ret_0:
- POP EBX
- RET
-@@prepare_params:
- {$IFDEF USE_GRAPHCTLS}
- {$IFDEF USE_FLAGS}
- TEST [EBX].fFlagsG6, 1 shl G6_GraphicCtl
- SETNZ AL
- JNZ @@ret_0
- {$ELSE}
- MOV AL, [EBX].fWindowed
- CMP AL, 0
- JZ @@ret_0
- {$ENDIF}
- {$ENDIF}
- PUSH EBP
- MOV EBP, ESP
-
- PUSH ECX // Params.WindowClass.lpszClassName := nil
- PUSH ECX // Params.WindowClass.lpszMenuName := nil
- PUSH ECX // Params.WindowClass.hbrBackground := 0
- PUSH int_IDC_ARROW
- PUSH ECX
- CALL LoadCursor
- PUSH EAX // Params.WindowClass.hCursor := LoadCursor( 0, IDC_ARROW )
- XOR ECX, ECX
- PUSH ECX // Params.WindowClass.hIcon := 0
- PUSH [hInstance]// Params.WindowClass.hInstance := hInstance
- PUSH ECX // Params.WindowClass.cbWndExtra := 0
- PUSH ECX // Params.WindowClass.cbClsExtra := 0
- {$IFDEF SAFE_CODE}
- PUSH [EBX].fDefWndProc // Params.WindowClass.lpfnWndProc := fDefWndProc
- {$ELSE}
- PUSH 0
- {$ENDIF}
- PUSH [EBX].fClsStyle // Params.WindowClass.style := fStyle
- ADD ESP, -64
- PUSH ECX
- MOV EAX, EBX
- MOV EDX, ESP
- CALL get_ClassName
- POP EDX
- MOV EAX, ESP
- PUSH EDX
- //CALL StrPCopy // StrPCopy( Params.WinClsNamBuf, ClassName )
- CALL StrCopy
- CALL RemoveStr
- PUSH 0 // Params.Param := nil
- PUSH [hInstance] // Params.Inst := hInstance
- PUSH [EBX].fMenu // Params.Menu := fMenu
- MOV DL, 1
- MOV EAX, EBX
- CALL GetParentWnd
- PUSH EAX // Params.WndParent := GetParentWnd( True )
-
- MOV ECX, CW_USEDEFAULT
- MOV EAX, [EBX].fBoundsRect.Bottom
- MOV EDX, [EBX].fBoundsRect.Top
- SUB EAX, EDX
- JNZ @@1
- MOV EAX, ECX
-@@1: PUSH EAX // Params.Height := Height | CW_UseDefault
- MOV EAX, [EBX].fBoundsRect.Right
- SUB EAX, [EBX].fBoundsRect.Left
- {$IFDEF USE_CMOV}
- CMOVZ EAX, ECX
- {$ELSE}
- JNZ @@2
- MOV EAX, ECX
-@@2: {$ENDIF}
-
- PUSH EAX // Params.Width := Width | CW_UseDefault
- MOV EAX, [EBX].fBoundsRect.Left
- {$IFDEF USE_FLAGS}
- TEST [EBX].fFlagsG3, 1 shl G3_IsControl
- {$ELSE}
- CMP [EBX].fIsControl, CL
- {$ENDIF}
- JNZ @@3
- {$IFDEF USE_FLAGS}
- TEST [EBX].fFlagsG2, (1 shl G2_ChangedPos)
- {$ELSE}
- TEST byte ptr [EBX].fChangedPosSz, 3
- {$ENDIF USE_FLAGS}
- JNZ @@3
- MOV EDX, ECX
- XCHG EAX, ECX
-@@3: PUSH EDX // Params.Y := Top | CW_UseDefault
- PUSH EAX // Params.X := Left | CW_UseDefault
- PUSH [EBX].fStyle // Params.Style := fStyle
- PUSH [EBX].fCaption // Params.Caption := fCaption
- LEA EAX, [ESP+40]
- PUSH EAX // Params.WinClassName := @Params.WinClsNamBuf
- PUSH [EBX].fExStyle // Params.ExStyle := fExStyle
-
- MOV ECX, [EBX].fControlClassName
- JECXZ @@registerClass
- LEA EAX, [ESP].TCreateWndParams.WindowClass
- PUSH EAX // @Params.WindowClass
- PUSH ECX // fControlClassName
- PUSH [hInstance] // hInstance
- CALL GetClassInfo
- MOV EAX, [ESP].TCreateWndParams.Inst
- MOV [ESP].TCreateWndParams.WindowClass.hInstance, EAX
- AND [ESP].TCreateWndParams.WindowClass.style, not CS_OFF
-@@registerClass:
- CMP [EBX].fDefWndProc, 0
- JNE @@fDefWndProc_ready
- MOV EAX, [ESP].TCreateWndParams.WindowClass.lpfnWndProc
- MOV [EBX].fDefWndProc, EAX
-@@fDefWndProc_ready:
- MOV ECX, [ESP].TCreateWndParams.WndParent
- TEST ECX, ECX
- JNZ @@registerClass1
- TEST byte ptr [ESP].TCreateWndParams.Style+3, $40
- XCHG EAX, ECX
- JNZ @@fin
-@@registerClass1:
- MOV EAX, [ESP].TCreateWndParams.WinClassName
- MOV EDX, [ESP].TCreateWndParams.WindowClass.hInstance
- ADD ESP, -szWndClass
- PUSH ESP
- PUSH EAX
- PUSH EDX
- CALL GetClassInfo
- ADD ESP, szWndClass
- TEST EAX, EAX
- JNZ @@registered
- MOV EAX, [ESP].TCreateWndParams.WinClassName
- MOV [ESP].TCreateWndParams.WindowClass.lpszClassName, EAX
- MOV [ESP].TCreateWndParams.WindowClass.lpfnWndProc, offset WndFunc
- LEA EAX, [ESP].TCreateWndParams.WindowClass
- PUSH EAX
- CALL RegisterClass
- TEST EAX, EAX
- JZ @@fin
-@@registered:
- MOV [CreatingWindow], EBX
- {$IFDEF DEBUG_CREATEWINDOW}
- MOV EAX, EBX
- MOV EDX, ESP
- CALL Debug_CreateWindow2
- {$ENDIF}
- CALL CreateWindowEx
- MOV [EBX].fHandle, EAX
- TEST EAX, EAX
- JZ @@fin
- PUSH EAX
- {$IFDEF USE_PROP}
- PUSH offset ID_SELF
- {$ELSE}
- PUSH GWL_USERDATA
- {$ENDIF}
- PUSH EAX
-
- PUSH 0
- PUSH $10002 //UIS_CLEAR or (UISF_HIDEFOCUS shl 16)
- PUSH $0128 //WM_UPDATEUISTATE
- PUSH EAX
- CALL SendMessage
-
- {$IFDEF USE_PROP}
- CALL GetProp
- {$ELSE}
- CALL GetWindowLong
- {$ENDIF}
- XCHG ECX, EAX
- POP EAX
- INC ECX
- LOOP @@propSet
- MOV [CreatingWindow], ECX
- PUSH EBX
- {$IFDEF USE_PROP}
- PUSH offset ID_SELF
- PUSH EAX
- CALL SetProp
- {$ELSE}
- PUSH GWL_USERDATA
- PUSH EAX
- CALL SetWindowLong
- {$ENDIF}
-@@propSet:
- {$IFDEF SMALLEST_CODE}
- {$ELSE}
- {$IFDEF USE_FLAGS}
- TEST [EBX].fFlagsG3, 1 shl G3_IsControl
- {$ELSE}
- CMP [EBX].fIsControl, 0
- {$ENDIF}
- JNZ @@iconSet
- MOV EAX, EBX
- CALL GetIcon
- PUSH EAX
- PUSH 1
- PUSH WM_SETICON
- PUSH EBX
- CALL Perform
-@@iconSet:
- {$ENDIF}
- MOV ECX, [EBX].PP.fCreateWndExt
- {$IFDEF NIL_EVENTS}
- JECXZ @@dblbufcreate
- {$ENDIF}
- MOV EAX, EBX
- CALL ECX
-@@dblbufcreate:
-@@applyfont:
- MOV EAX, EBX
- CALL [ApplyFont2Wnd_Proc]
- MOV EAX, EBX
- CALL [ApplyFont2Wnd_Proc]
-@@createchildren:
- XCHG EAX, EBX
- CALL CreateChildWindows
- MOV AL, 1
-@@fin:
- MOV ESP, EBP
- POP EBP
-@@ret_false:
- POP EBX
-end;
-
-
-function WndProcKeybd( Self_: PControl; var Msg: TMsg; var Rslt: Integer): Boolean;
-asm
- PUSH EBX
- MOV ECX, [EDX].TMsg.message
- SUB CX, $100
- CMP ECX, 5
- JA @@fin_false
- XCHG EBX, EAX // EBX = @Self
- XCHG EAX, ECX // EAX = message - WM_KEYFIRST
- {$IFDEF EVENTS_DYNAMIC}
- MOV ECX, [EBX].TControl.EV
- LEA ECX, [ECX].TEvents.fOnKeyUp
- {$ELSE}
- LEA ECX, [EBX].TControl.EV.fOnKeyUp
- {$ENDIF}
- JZ @@event
- {$IFDEF PARANOIA} DB $34, 1 {$ELSE} XOR AL, 1 {$ENDIF}
- JZ @@event
- //LEA ECX, [EBX].TControl.EV.fOnKeyDown
- ADD ECX, 8
- {$IFDEF PARANOIA} DB $34, 1 {$ELSE} XOR AL, 1 {$ENDIF}
- JZ @@event
- {$IFDEF PARANOIA} DB $34, 4 {$ELSE} XOR AL, 4 {$ENDIF}
- JZ @@event
- //LEA ECX, [EBX].TControl.EV.fOnChar
- SUB ECX, 24
- {$IFDEF PARANOIA} DB $34, 6 {$ELSE} XOR AL, 2 xor 4 {$ENDIF}
- JZ @@event
- {$IFDEF PARANOIA} DB $34, 4 {$ELSE} XOR AL, 6 xor 2 {$ENDIF}
- JNZ @@fin_false
-@@event:
- {$IFDEF NIL_EVENTS}
- CMP word ptr [ECX].TMethod.Code+2, 0
- JZ @@fin_false
- {$ENDIF}
- PUSH EDX
- PUSH ECX
- LEA ECX, [EDX].TMsg.wParam
- PUSH ECX
- CALL GetShiftState
- POP ECX // @wParam
- XCHG EAX, [ESP] // ShiftState; EAX=@event
- MOV EDX, EBX // @Self
- MOV EBX, [EAX].TMethod.Code
- MOV EAX, [EAX].TMethod.Data
- CALL EBX
-
- POP EDX
- MOV ECX, [EDX].TMsg.wParam
- JECXZ @@fin_true
-
-@@fin_false:
- XOR EAX, EAX
- POP EBX
- RET
-
-@@fin_true:
- MOV AL, 1
- POP EBX
-end;
-
-function TControl.GetCaption: KOLString;
-asm
- PUSH EBX
- PUSH EDI
- XCHG EBX, EAX
- MOV EDI, EDX
- {$IFDEF USE_FLAGS}
- TEST [EBX].fFlagsG1, (1 shl G1_IgnoreWndCaption)
- {$ELSE}
- CMP [EBX].fIgnoreWndCaption, 0
- {$ENDIF USE_FLAGS}
- JNZ @@getFCaption
- MOV ECX, [EBX].fHandle
- JECXZ @@getFCaption
-@@getWndCaption:
- PUSH ECX
- CALL GetWindowTextLength
- PUSH EAX
- XCHG EDX, EAX
- LEA EAX, [EBX].fCaption
- CALL System.@LStrSetLength
- POP ECX
- JECXZ @@getFCaption
- INC ECX
- PUSH ECX
- PUSH [EBX].fCaption
- PUSH [EBX].fHandle
- CALL GetWindowText
-@@getFCaption:
- MOV EDX, [EBX].fCaption
- XCHG EAX, EDI
- {$IFNDEF UNICODE_CTRLS}
- CALL System.@LStrAsg
- {$ELSE}
- CALL System.@WStrFromPChar
- {$ENDIF}
-@@exit:
- POP EDI
- POP EBX
-end;
-
-function TControl.get_ClassName: AnsiString;
-asm
- PUSH EBX
- XCHG EBX, EAX
- XCHG EAX, EDX
- MOV EDX, [EBX].fControlClassName
- PUSH EAX
- {$IFDEF _D2009orHigher}
- XOR ECX, ECX
- {$ENDIF}
- CALL System.@LStrFromPChar // EAX^ := String(EDX)
- POP EAX
- {$IFDEF USE_FLAGS}
- TEST [EBX].fFlagsG6, 1 shl G6_CtlClassNameChg
- {$ELSE}
- CMP [EBX].fCtlClsNameChg, 0
- {$ENDIF}
- JNZ @@exit
- MOV ECX, [EAX]
- MOV EDX, offset[ @@obj ]
- CALL System.@LStrCat3 // EAX^ := EDX + ECX
- JMP @@exit
-
- {$IFDEF _D2009orHigher}
- DW 1252, 1 // CP_ANSI_LATIN1, Byte // TODO: CP_ACP
- {$ENDIF}
- DD -1, 4 // FFFFFFFF 04000000 obj_, 0
-@@obj: DB 'obj_', 0
-@@exit:
- POP EBX
-end;
-
-function TControl.GetItems(Idx: Integer): AnsiString;
-asm
- PUSH ESI
- PUSH EDI
- PUSH EBX
- PUSH EBP
- MOV EBP, ESP
-
- MOV EBX, EAX // @Self
- MOV ESI, EDX // Idx
- MOV EDI, ECX // @Result
-
- CALL Item2Pos
- PUSH 0 // push 0
- PUSH EAX // store Pos
-
- XCHG EDX, EAX
- MOV EAX, EBX
- CALL Pos2Item // EAX = Idx'
- XCHG ESI, EAX // ESI = Idx'
-
- XOR EAX, EAX
- {$IFDEF COMMANDACTIONS_OBJ}
- MOV ECX, [EBX].fCommandActions
- MOVZX ECX, [ECX].TCommandActionsObj.aGetItemLength
- {$ELSE}
- MOVZX ECX, [EBX].fCommandActions.aGetItemLength
- {$ENDIF}
- JECXZ @@ret_empty
-
- PUSH ECX // push aGetItemLength
-
- PUSH EBX
- CALL Perform
-
- TEST EAX, EAX
- JZ @@ret_empty
-
- PUSH EAX // save L
- ADD EAX, 4
-
- CALL System.@GetMem // GetMem( L+4 )
- POP EDX // restore L
- LEA ECX, [EDX+1]
- MOV dword ptr [EAX], ECX
- {$IFDEF COMMANDACTIONS_OBJ}
- MOV ECX, [EBX].fCommandActions
- MOVZX ECX, [ECX].TCommandActionsObj.aGetItemText
- {$ELSE}
- MOVZX ECX, [EBX].fCommandActions.aGetItemText
- {$ENDIF}
- JECXZ @@ret_buf
-
- PUSH EDX // save L
-
- PUSH EAX
- PUSH EAX // push Buf
- PUSH ESI // push Idx
-
- PUSH ECX // push aGetItemText
- PUSH EBX
- CALL Perform
- POP EAX
-
- POP EDX
-@@ret_buf:
- MOV byte ptr [EAX + EDX], 0 // Buf[ L ] := #0
-
-@@ret_empty: // EAX = 0
- XCHG EDX, EAX
- MOV EAX, EDI
- PUSH EDX
- {$IFDEF _D2009orHigher}
- XOR ECX, ECX
- {$ENDIF}
- CALL System.@LStrFromPChar
- POP ECX
- JECXZ @@exit
- XCHG EAX, ECX
- CALL System.@FreeMem
-@@exit:
- MOV ESP, EBP
- POP EBP
- POP EBX
- POP EDI
- POP ESI
-end;
-
-procedure TControl.SetItems(Idx: Integer; const Value: AnsiString);
-asm
- PUSH EDI
- PUSH EBX
- XCHG EBX, EAX
- XCHG EDI, EDX // EDI = Idx
- CALL ECX2PChar
- PUSH ECX // @Value[1]
-
- {$IFDEF COMMANDACTIONS_OBJ}
- MOV ECX, [EBX].fCommandActions
- MOVZX ECX, [ECX].TCommandActionsObj.aSetItemText
- {$ELSE}
- MOVZX ECX, [EBX].fCommandActions.aSetItemText
- {$ENDIF}
- JECXZ @@1
-
- PUSH 0
- PUSH ECX
-
- MOV EDX, EDI
- MOV EAX, EBX
- CALL Item2Pos
- PUSH EAX // store Strt
-
- MOV EDX, EDI
- INC EDX
- MOV EAX, EBX
- CALL Item2Pos
- POP EDX // EDX = Strt
-
- SUB EAX, EDX
- PUSH EAX // store L
-
- MOV EAX, EBX
- CALL SetSelStart
-
- POP EDX // EDX = L
- PUSH EBX // prepare @Self for Perform
- XCHG EAX, EBX
- CALL SetSelLength
-
- // @Value[1] already in stack,
- // 0 already in stack
- // aSetItemText already in stack
- // @Self already in stack
-
- CALL Perform
- JMP @@exit
-
-@@1: // @Value[1] in stack already
- POP EDX
- {$IFDEF COMMANDACTIONS_OBJ}
- MOV ECX, [EBX].fCommandActions
- MOVZX ECX, [ECX].TCommandActionsObj.aDeleteItem
- {$ELSE}
- MOVZX ECX, [EBX].fCommandActions.aDeleteItem
- {$ENDIF}
- JECXZ @@exit
-
- {$IFNDEF NOT_FIX_CURINDEX}
- PUSH ESI
- PUSH EBP
-
- PUSH EDX
-
- MOV EAX, EBX // +AK
- CALL GetCurIndex // +AK
- XCHG ESI, EAX // ESI = TmpCurIdx
-
- MOV EAX, EBX
- MOV EDX, EDI
- CALL GetItemData
- XCHG EBP, EAX // EBP = TmpData
-
- MOV EDX, EDI
- MOV EAX, EBX
- CALL Delete
-
- MOV EAX, EBX // *AK
- MOV EDX, EDI
- POP ECX
- CALL Insert
-
- MOV ECX, EBP // ECX = TmpData
- MOV EDX, EDI
- MOV EAX, EBX
- CALL SetItemData
-
- XCHG EAX, EBX // +AK
- MOV EDX, ESI // +AK
- CALL SetCurIndex // +AK
-
- POP EBP
- POP ESI
- {$ELSE NOT_FIX_CURINDEX}
- PUSH EDX
-
- MOV EDX, EDI
- MOV EAX, EBX
- CALL Delete
-
- XCHG EAX, EBX
- XCHG EDX, EDI
-
- POP ECX
- CALL Insert
- {$ENDIF NOT_FIX_CURINDEX}
-
-@@exit:
- POP EBX
- POP EDI
-end;
-
-function TControl.Add(const S: KOLString): Integer;
-asm
- PUSH EBX
- MOV EBX, EAX // EBX = @Self
-
- {$IFDEF COMMANDACTIONS_OBJ}
- MOV ECX, [EBX].fCommandActions
- MOVZX ECX, [ECX].TCommandActionsObj.aAddItem
- {$ELSE}
- MOVZX ECX, [EBX].fCommandActions.aAddItem // ECX = aAddItem
- {$ENDIF}
- JECXZ @@chk_addtext
-
- CALL EDX2PChar
- PUSH EDX
- PUSH 0
- PUSH ECX
- PUSH EBX
- CALL Perform
- PUSH EAX
-
- MOV EAX, EBX
- CALL TControl.GetItemsCount
- XCHG EAX, ECX
- LOOP @@ret_EAX
-
- XCHG EAX, EBX
- INC ECX
- XOR EDX, EDX
- CALL TControl.SetItemSelected
-@@ret_EAX:
- POP EAX
- JMP @@exit
-
-@@chk_addtext:
- {$IFDEF COMMANDACTIONS_OBJ}
- MOV ECX, [EBX].fCommandActions
- MOV ECX, [ECX].TCommandActionsObj.aAddText
- {$ELSE}
- MOV ECX, [EBX].fCommandActions.aAddText
- {$ENDIF}
- JECXZ @@add_text_simple
-
- CALL ECX
- JMP @@exit_0
-
-@@add_text_simple:
- LEA EAX, [EBX].fCaption
- CALL System.@LStrCat
- MOV EDX, [EBX].fCaption
- MOV EAX, EBX
- CALL SetCaption
-
-@@exit_0:
- XOR EAX, EAX
-@@exit:
- POP EBX
-end;
-
-function TControl.Insert(Idx: Integer; const S: AnsiString): Integer;
-asm
- CALL ECX2PChar
- PUSH ECX
- {$IFDEF COMMANDACTIONS_OBJ}
- MOV ECX, [EAX].fCommandActions
- MOVZX ECX, [ECX].TCommandActionsObj.aInsertItem
- {$ELSE}
- MOVZX ECX, [EAX].fCommandActions.aInsertItem
- {$ENDIF}
- JECXZ @@exit_1
-
- PUSH EDX
- PUSH ECX
- PUSH EAX
- CALL Perform
- RET
-
-@@exit_1:OR EAX, -1
- POP ECX
-end;
-
-procedure TTrayIcon.SetTooltip(const Value: AnsiString);
-asm
- PUSH EBX
- XCHG EBX, EAX
- MOV EAX, [EBX].fTooltip
- PUSH EDX
- CALL System.@LStrCmp
- POP EDX
- JE @@exit
- LEA EAX, [EBX].fTooltip
- CALL System.@LStrAsg
- CMP [EBX].fActive, 0
- JE @@exit
- XOR EDX, EDX
- INC EDX // EDX = NIM_MODIFY
- XCHG EAX, EBX
- CALL SetTrayIcon
-@@exit:
- POP EBX
-end;
-
-procedure TTrayIcon.SetTrayIcon(const Value: DWORD);
-const sz_tid = sizeof( TNotifyIconData );
-asm
- CMP [AppletTerminated], 0
- JE @@1
- MOV DL, NIM_DELETE
-@@1:
- PUSH EBX
- PUSH ESI
- MOV ESI, EAX
- MOV EBX, EDX
-
- XOR ECX, ECX
- PUSH ECX
- ADD ESP, -60
- MOV EDX, [ESI].fToolTip
- CALL EDX2PChar
- MOV EAX, ESP
- MOV CL, 63
- CALL StrLCopy
-
- PUSH [ESI].fIcon
- PUSH CM_TRAYICON
- XOR EDX, EDX
- CMP BL, NIM_DELETE
- JE @@2
- MOV DL, NIF_ICON or NIF_MESSAGE or NIF_TIP
-@@2: PUSH EDX
- PUSH ESI
- MOV EAX, [ESI].FWnd
- TEST EAX, EAX
- JNZ @@3
- MOV EAX, [ESI].fControl
- MOV EAX, [EAX].TControl.fHandle
-@@3:
- PUSH EAX
- PUSH sz_tid
-
- PUSH ESP
- PUSH EBX
- CALL Shell_NotifyIcon
-
- ADD ESP, sz_tid
- POP ESI
- POP EBX
-@@exit:
-end;
-
-function WndProcJustOneNotify( Control: PControl; var Msg: TMsg; var Rslt: Integer ) : Boolean;
-asm
- PUSH EBP
- MOV EBP, ESP
- PUSHAD
- CALL WndProcJustOne
- POPAD
- XOR EAX, EAX
- PUSH ECX
- MOV ECX, [EDX].TMsg.message
- SUB ECX, [JustOneMsg]
- POP ECX
- JNE @@exit
- MOV [ECX], EAX
- CMP [OnAnotherInstance].TMethod.Code, EAX
- JE @@exit_1
-
- //MOV EAX, (MAX_PATH + 3) and 0FFFFCh
- MOV AH, 2
- SUB ESP, EAX
-
- MOV ECX, ESP
- PUSH EAX
- PUSH ECX
- PUSH [EDX].TMsg.lParam
- CALL GetWindowText
-
- MOV EDX, ESP
- PUSH 0
- MOV EAX, ESP
- {$IFDEF _D2009orHigher}
- XOR ECX, ECX
- {$ENDIF}
- CALL System.@LStrFromPChar
-
- MOV EDX, [ESP]
- MOV EAX, [OnAnotherInstance].TMethod.Data
- CALL [OnAnotherInstance].TMethod.Code
-
- MOV EAX, ESP
- CALL System.@LStrClr
-@@exit_1:
- MOV AL, 1
-@@exit:
- MOV ESP, EBP
- POP EBP
-end;
-
-function JustOneNotify( Wnd: PControl; const Identifier : AnsiString;
- const aOnAnotherInstance: TOnAnotherInstance ) : Boolean;
-asm
- PUSHAD
- MOV EBP, ESP
-
- XCHG EAX, EDX
- PUSH EAX
- CALL System.@LStrLen
- POP EDX
- ADD EAX, EAX
- SUB ESP, EAX
- MOV EAX, ESP
- CALL StrPCopy
- PUSH '.ega'
- PUSH 'sseM'
- PUSH ESP
- CALL RegisterWindowMessage
- MOV [JustOneMsg], EAX
- TEST EAX, EAX
- MOV ESP, EBP
- POPAD
- JE @@exit_f
- PUSHAD
- CALL JustOne
- DEC AL
- POPAD
- JZ @@exit_t
- PUSH EBX
- XCHG EBX, EAX
- XOR EDX, EDX
- XCHG [EBX].TControl.fCaption, EDX
- PUSH EDX
- CALL GetCommandLine
- XCHG EDX, EAX
- LEA EAX, [EBX].TControl.fCaption
- {$IFDEF _D2009orHigher}
- PUSH ECX
- XOR ECX, ECX
- {$ENDIF}
- CALL System.@LStrFromPChar
- {$IFDEF _D2009orHigher}
- POP ECX
- {$ENDIF}
- MOV EAX, EBX
- MOV EDX, [EBX].TControl.fCaption
- CALL TControl.SetCaption
- MOV EAX, EBX
- CALL TControl.GetWindowHandle
- TEST EAX, EAX
- JZ @@rest_cap
- PUSH BSM_APPLICATIONS
- MOV EDX, ESP
- PUSH EAX
- PUSH 0
- PUSH [JustOneMsg]
- PUSH EDX
- PUSH BSF_QUERY or BSF_IGNORECURRENTTASK
- CALL BroadcastSystemMessage
- POP EDX
-@@rest_cap:
- LEA EAX, [EBX].TControl.fCaption
- CALL System.@LStrClr
- POP EDX
- MOV [EBX].TControl.fCaption, EDX
- MOV EAX, EBX
- CALL TControl.SetCaption
- POP EBX
-@@exit_f:
- XOR EAX, EAX
- JMP @@exit
-@@exit_t:
- PUSHAD
- LEA ESI, [aOnAnotherInstance]
- LEA EDI, [OnAnotherInstance]
- MOVSD
- MOVSD
- MOV EDX, offset[WndProcJustOneNotify]
- CALL TControl.AttachProc
- POPAD
- MOV AL, 1
-@@exit:
-end;
-
-function TStrList.AppendToFile(const FileName: Ansistring): Boolean;
-asm
- PUSH EBX
- MOV EBX, EDX
- PUSH 0
- MOV EDX, ESP
- CALL GetTextStr
- XCHG EAX, EBX
- MOV EDX, ofOpenWrite or ofOpenAlways
- CALL FileCreate
- MOV EBX, EAX
- INC EAX
- JZ @@exit
- DEC EAX
- XOR EDX, EDX
- XOR ECX, ECX
- MOV CL, spEnd
- CALL FileSeek
- POP EAX
- PUSH EAX
- CALL System.@LStrLen
- XCHG ECX, EAX
- MOV EAX, EBX
- POP EDX
- PUSH EDX
- CALL FileWrite
- XCHG EAX, EBX
- CALL FileClose
-@@exit:
- CALL RemoveStr
- POP EBX
-end;
-
-function TStrList.LoadFromFile(const FileName: AnsiString): Boolean;
-asm
- PUSH EAX
- XCHG EAX, EDX
- MOV EDX, ofOpenRead or ofShareDenyWrite or ofOpenExisting
- CALL FileCreate
- INC EAX
- JZ @@exit
- DEC EAX
- PUSH EBX
- XCHG EBX, EAX
- PUSH 0
- PUSH EBX
- CALL GetFileSize
- XOR EDX, EDX
- PUSH EDX
- XCHG ECX, EAX
- MOV EAX, ESP
- PUSH ECX
- {$IFDEF _D2}
- CALL _LStrFromPCharLen
- {$ELSE}
- {$IFDEF _D2009orHigher}
- PUSH EDX // ushort 0, CodePage?
- {$ENDIF}
- CALL System.@LStrFromPCharLen
- {$ENDIF}
- POP ECX
- MOV EAX, EBX
- POP EDX
- PUSH EDX
- CALL FileRead
- XCHG EAX, EBX
- CALL FileClose
- POP EDX
- POP EBX
- POP EAX
- PUSH EDX
- XOR ECX, ECX
- CALL SetText
- CALL RemoveStr
- PUSH EDX
- MOV AL, 1
-@@exit: POP EDX
-end;
-
-function TStrList.SaveToFile(const FileName: Ansistring): Boolean;
-asm
- PUSH EBX
- PUSH EAX
- XCHG EAX, EDX
- MOV EDX, ofOpenWrite or ofCreateAlways
- CALL FileCreate
- INC EAX
- JZ @@exit
- DEC EAX
- XCHG EBX, EAX
- POP EAX
- PUSH 0
- MOV EDX, ESP
- CALL GetTextStr
- POP EAX
- PUSH EAX
- CALL System.@LStrLen
- XCHG ECX, EAX
- POP EDX
- PUSH EDX
- MOV EAX, EBX
- CALL FileWrite
- PUSH EBX
- CALL SetEndOfFile
- XCHG EAX, EBX
- CALL FileClose
- CALL RemoveStr
- PUSH EDX
- INC EAX
-@@exit:
- POP EDX
- POP EBX
-end;
-
-procedure TControl.SetStatusText(Index: Integer; const Value: KOLString);
-asm
- PUSHAD
- MOV EBX, EDX // EBX = Index
- MOV ESI, EAX // ESI = @Self
- PUSH Value // prepare value for call at the end of procedure
- PUSH EBX // prepare Index for call at the end of procedure
- MOV ECX, [ESI].fStatusCtl
- MOV EBP, ECX
- INC ECX
- LOOP @@status_created
- CALL GetClientHeight
- PUSH EAX // ch = old client height
- MOV EAX, ESI
- CALL _NewStatusBar
- MOV [ESI].fStatusCtl, EAX
- XCHG EBP, EAX
- XOR EDX, EDX
- PUSH EDX
- INC DH
- DEC EDX
- CMP EBX, EDX
- SETZ DL
- NEG EDX
- PUSH EDX
- PUSH SB_SIMPLE
- PUSH EBP
- CALL TControl.Perform
- ADD ESP, -16
- PUSH ESP
- PUSH [EBP].fHandle
- CALL GetWindowRect
- POP EAX
- POP EDX
- POP EAX
- POP EAX
- SUB EAX, EDX
- MOV [ESI].fClientBottom, AL
- POP EDX // ch
- PUSH 0
- PUSH 0
- PUSH WM_SIZE
- PUSH EBP
- MOV EAX, ESI
- CALL TControl.SetClientHeight
- CALL TControl.Perform
-@@status_created:
- CMP EBX, 255
- JGE @@not_simple
- PUSH 0
- PUSH 0
- PUSH SB_GETPARTS
- PUSH EBP
- CALL Perform
- CMP EAX, EBX
- JG @@reset_simple
- MOV EAX, ESI
- CALL GetWidth
- CDQ
- MOV ECX, EBX
- INC ECX
- IDIV ECX
- MOV EDX, EAX
- ADD ESP, -1024
- ///////////////////
- MOV ECX, EBX
- MOV EDI, ESP
- JECXZ @@2
-@@store_loo:
- STOSD
- ADD EAX, EDX
- LOOP @@store_loo
-@@2:
- OR dword ptr [ESP+EBX*4], -1
- PUSH ESP
- INC EBX
- PUSH EBX
- PUSH SB_SETPARTS
- PUSH EBP
- CALL Perform
- ////////////////////
- ADD ESP, 1024
-@@reset_simple:
- PUSH 0
- PUSH 0
- PUSH SB_SIMPLE
- PUSH EBP
- CALL Perform
-@@not_simple:
- PUSH SB_SETTEXT
- PUSH EBP
- CALL Perform
- POPAD
-end;
-
-function TOpenSaveDialog.Execute: Boolean;
-asm
- PUSH EBX
- XCHG EBX, EAX
-
- XOR ECX, ECX
- {$IFDEF OpenSaveDialog_Extended}
- MOVZX EAX, [EBX].NoPlaceBar
- PUSH EAX
- PUSH ECX
- PUSH ECX
- PUSH [EBX].TemplateName
- PUSH [EBX].HookProc
- {$ELSE}
- PUSH ECX // prepare lpTemplateName = nil
- PUSH ECX // prepare lpfnHook = nil
- {$ENDIF}
- PUSH EBX // prepare lCustData = @Self
- MOV EDX, [EBX].FDefExtension
- CALL EDX2PChar
- PUSH EDX // prepare lpstrDefExt = FDefExtension
- PUSH ECX // prepare nFileExtension, nFileOffset: Word = 0, 0
- // prepare flags:
- LEA EAX, [EBX].FOptions
- MOV EDX, Offset[@@OpenSaveFlags]
- {$IFDEF OpenSaveDialog_Extended}
- MOV CL, 14
- {$ELSE}
- MOV CL, 12
- {$ENDIF}
- CALL MakeFlags
- XOR ECX, ECX
- OR EAX, OFN_EXPLORER or OFN_LONGNAMES or OFN_ENABLESIZING
- PUSH EAX // push Flags
- PUSH [EBX].FTitle // prepare lpstrTitle
- PUSH [EBX].FInitialDir // prepare lpstrInitialDir
- PUSH ECX // prepare nMaxFileTitle = 0
- PUSH ECX // prepare lpstrFileTitle = nil
- TEST AH, 2 // MultiSelect?
- MOV EAX, 65520
- JNZ @@1
- MOV AX, MAX_PATH+2
-@@1: PUSH EAX // prepare nMaxFile
- CALL System.@GetMem
- POP ECX
- PUSH ECX
- PUSH EAX // prepare lpStrFile
- XOR EDX, EDX
-
-@@2: MOV EDX, [EBX].fFileName // no, fill it initilly by FileName
- CALL EDX2PChar
- DEC ECX // added 5 october 2003 to prevent possible error if FileName too big
- CALL StrLCopy
- XOR EDX, EDX
-
- PUSH [EBX].FFilterIndex // prepare nFilterIndex
- PUSH EDX // prepare nMaxCustFilter
- PUSH EDX // prepare lpstrCustomFilter
- PUSH EDX // prepare lpstrFilter = nil
- MOV EAX, ESP
- OR EDX, [EBX].FFilter
- JZ @@5
-
- MOV ECX, offset[@@0]
- CALL System.@LStrCat3 // prepare lpStrFilter = FFilter + #0
- POP EAX
- PUSH EAX
- XOR EDX, EDX
-@@3: INC EAX // filter is not starting from ';' or '|'...
- CMP [EAX], DL
- JZ @@5
- CMP byte ptr [EAX], '|'
- JNZ @@3
-@@4: MOV [EAX], DL
- JMP @@3
-@@OpenSaveFlags:
- DD OFN_CREATEPROMPT, OFN_EXTENSIONDIFFERENT, OFN_FILEMUSTEXIST
- DD OFN_HIDEREADONLY, OFN_NOCHANGEDIR, OFN_NODEREFERENCELINKS
- DD OFN_ALLOWMULTISELECT, OFN_NONETWORKBUTTON, OFN_NOREADONLYRETURN
- DD OFN_OVERWRITEPROMPT, OFN_PATHMUSTEXIST, OFN_READONLY, OFN_NOVALIDATE
- {$IFDEF OpenSaveDialog_Extended}
- DD OFN_ENABLETEMPLATE, OFN_ENABLEHOOK
- {$ENDIF}
-
- {$IFDEF _D2009orHigher}
- DW 0, 1
- {$ENDIF}
- DD -1, 1
-@@0: DB 0
-
-
-@@5:
- PUSH [hInstance] // prepare hInstance
-
- MOV ECX, [EBX].TControl.fWnd
- INC ECX
- LOOP @@6
- MOV ECX, [Applet]
- JECXZ @@6
- MOV ECX, [ECX].TControl.fHandle
-@@6: PUSH ECX // prepare hWndOwner
- {$IFDEF OpenSaveDialog_Extended}
- CALL WinVer
- CMP AL, wvNT
- MOV DL, 76+12
- JA @@6a
- CMP AL, wvME
- JE @@6a
- MOV DL, 76
-@@6a: MOVZX EAX, DL
- PUSH EAX
- {$ELSE}
- PUSH 76 // prepare lStructSize
- {$ENDIF}
-
- PUSH ESP
- CMP [EBX].TControl.FOpenDialog, 0
- JZ @@7
- CALL GetOpenFileName
- JMP @@8
-@@7: CALL GetSaveFileName
-@@8:
- PUSH EAX
- XOR EDX, EDX
- TEST EAX, EAX
- JZ @@10
-
- MOV EAX, [ESP+4].TOpenFileName.nFilterIndex
- MOV [EBX].FFilterIndex, EAX
-
- TEST BYTE PTR [ESP+4].TOpenFileName.Flags, OFN_READONLY
- SETNZ AL
- MOV [EBX].fOpenReadOnly, AL
-
- MOV EAX, [ESP+4].TOpenFileName.lpstrFile
- MOV EDX, EAX
- XOR ECX, ECX
-
- TEST [EBX].FOptions, 1 shl OSAllowMultiSelect
- JZ @@10
-
- DEC EAX
-@@9: INC EAX
- CMP byte ptr [EAX], CL
- JNZ @@9
- CMP byte ptr [EAX+1], CL
- JZ @@10
- MOV byte ptr [EAX], 13
- JMP @@9
-
-@@10:
- LEA EAX, [EBX].FFileName
- {$IFDEF _D2009orHigher}
- XOR ECX, ECX
- {$ENDIF}
- CALL System.@LStrFromPChar
- MOV EAX, [ESP+4].TOpenFileName.lpstrFile
- CALL System.@FreeMem // v1.86 +AK
-
- LEA EAX, [ESP+4].TOpenFileName.lpstrFilter
- CALL System.@LStrClr
-
- POP EAX
- {$IFDEF OpenSaveDialog_Extended}
- ADD ESP, 76+12
- {$ELSE}
- ADD ESP, 76
- {$ENDIF}
- POP EBX
-end;
-
-function TOpenDirDialog.Execute: Boolean;
-asm
- PUSH EBX
- XCHG EBX, EAX
- XOR ECX, ECX
- PUSH ECX // prepare iImage = 0
- PUSH EBX // prepare lParam = @Self
- PUSH [EBX].FCallBack // prepare lpfn = FCallBack
- LEA EAX, [EBX].FOptions
- MOV EDX, Offset[@@FlagsArray]
- MOV CL, 8
- CALL MakeFlags
- PUSH EAX // prepare ulFlags = Options
- PUSH [EBX].FTitle // prepare lpszTitle
- LEA EAX, [EBX].FBuf
- PUSH EAX // prepare pszDisplayName
- PUSH 0 // prepare pidlRoot
- MOV ECX, [EBX].fWnd
- INC ECX
- LOOP @@1
- MOV ECX, Applet
- JECXZ @@1
- MOV ECX, [ECX].TControl.fHandle
-@@1: PUSH ECX // prepare hwndOwner
- PUSH ESP
- CALL SHBrowseForFolderA
- ADD ESP, 32
- TEST EAX, EAX
- JZ @@exit
- PUSH EAX
- LEA EDX, [EBX].FBuf
- PUSH EDX
- PUSH EAX
- CALL SHGetPathFromIDListA
- CALL CoTaskMemFree
- MOV AL, 1
- JMP @@fin
-@@FlagsArray:
- DD BIF_BROWSEFORCOMPUTER, BIF_BROWSEFORPRINTER, BIF_DONTGOBELOWDOMAIN
- DD BIF_RETURNFSANCESTORS, BIF_RETURNONLYFSDIRS, BIF_STATUSTEXT
- DD BIF_BROWSEINCLUDEFILES, BIF_EDITBOX, BIF_NEWDIALOGSTYLE
-@@exit: XOR EAX, EAX
-@@fin:
- POP EBX
-end;
-
-function OpenDirSelChangeCallBack( Wnd: HWnd; Msg: DWORD; lParam, lpData: LParam ):
- Integer; stdcall;
-asm
- MOV EAX, [lpData]
- MOV ECX, [EAX].TOpenDirDialog.FOnSelChanged.TMethod.Code
- JECXZ @@exit
- LEA EDX, [EAX].TOpenDirDialog.FBuf
- PUSH EDX
- PUSH [lParam]
- CALL SHGetPathFromIDListA
- MOV EDX, [lpData]
- LEA ECX, [EDX].TOpenDirDialog.FBuf
- PUSH 0
- PUSH ESP
- LEA EAX, [EDX].TOpenDirDialog.FStatusText
- PUSH EAX
- MOV EAX, [EDX].TOpenDirDialog.FOnSelChanged.TMethod.Data
- CALL dword ptr [EDX].TOpenDirDialog.FOnSelChanged.TMethod.Code
- PUSH 0
- PUSH BFFM_ENABLEOK
- PUSH [Wnd]
- CALL SendMessage
-@@1: MOV EDX, [lpData]
- MOV ECX, [EDX].TOpenDirDialog.FStatusText
- JECXZ @@exit
- PUSH ECX
- PUSH 0
- PUSH BFFM_SETSTATUSTEXT
- PUSH [Wnd]
- CALL SendMessage
-@@exit: XOR EAX, EAX
-end;
-
-function TControl.TBAddInsButtons(Idx: Integer; const Buttons: array of PKOLChar;
- const BtnImgIdxArray: array of Integer): Integer; stdcall;
-asm { [EBP+$8] = @Self
- [EBP+$C] = Idx
- [EBP+$10] = Buttons
- [EBP+$14] = High(Butons)
- [EBP+$18] = BtnImgIdxArray
- [EBP+$1C] = High(BtnImgIdxArray) }
- PUSH EBX
- PUSH ESI
- PUSH EDI
- OR EBX, -1
- MOV EAX, 20
- MOV ECX, [EBP+$14]
- CMP ECX, EBX
- JLE @@fin
- INC ECX
- MUL ECX
- CALL System.@GetMem
- PUSH EAX // save AB to FreeMem after
- MOV EDX, EBX
- DEC EDX // nBmp := -2
- MOV ECX, [EBP+$14]
- INC ECX
- JZ @@exit
- MOV ECX, [EBP+$1C]
- INC ECX
- JZ @@1
- MOV ECX, [BtnImgIdxArray]
- MOV EDX, [ECX]
- DEC EDX // nBmp := BtnImgIdxArray[ 0 ] - 1
-@@1: MOV ECX, [EBP+$14]
- INC ECX
- MOV ESI, [Buttons]
- MOV EDI, EAX // EDI = PAB
- PUSH 0 // N:=0 in [EBP-$14]
-@@loop:
- LODSD
- TEST EAX, EAX
- JZ @@break
- PUSH ECX
- CMP word ptr [EAX], '-'
- JNE @@2
- OR EAX, -1
- STOSD
- MOV EAX, [ToolbarsIDcmd]
- TEST EBX, EBX
- {$IFDEF USE_CMOV}
- CMOVL EBX, EAX
- {$ELSE}
- JGE @@b0
- MOV EBX, EAX
-@@b0: {$ENDIF}
- STOSD
- XOR EAX, EAX
- INC AH // TBSTYLE_SEP = 1
- STOSD
- DEC AH
- STOSD
- DEC EAX
- JMP @@3
- {$IFDEF _D2009orHigher}
- DW 0, 1
- {$ENDIF}
- DD -1, 1
-@@0: DB 0
-@@2:
- INC EDX // Inc( nBmp )
- PUSH EAX
- MOV EAX, [EBP+$1C]
- MOV ECX, [EBP-$14]
- CMP EAX, ECX
- MOV EAX, EDX
- JL @@21
- MOV EAX, [BtnImgIdxArray]
- MOV EAX, [EAX+ECX*4]
-@@21: STOSD
- TEST EDX, EDX
- JGE @@2a
- DEC EDX
-@@2a:
- MOV EAX, [ToolbarsIDcmd]
- STOSD
- TEST EBX, EBX
- {$IFDEF USE_CMOV}
- CMOVL EBX, EAX
- {$ELSE}
- JGE @@210
- MOV EBX, EAX
-@@210: {$ENDIF}
- MOV ECX, [EBP+8]
- MOV AH, BYTE PTR [ECX].TControl.DF.fDefaultTBBtnStyle
- POP ECX
- MOV AL, 4 // AL=fsState=_ENABLED, AH=fsStyle=_AUTOSIZE if fDefaultTBBtnStyle contains
- CMP byte ptr [ECX], '^'
- JNE @@22
- OR AH, TBSTYLE_DROPDOWN
- INC ECX
-@@22: CMP byte ptr [ECX], '-'
- JZ @@23
- CMP byte ptr [ECX], '+'
- JNZ @@24
- MOV AL, TBSTATE_ENABLED or TBSTATE_CHECKED
-@@23: INC ECX
- OR AH, TBSTYLE_CHECK
- CMP byte ptr [ECX], '!'
- JNZ @@24
- OR AH, TBSTYLE_GROUP
- INC ECX
-@@24: {$IFDEF TOOLBAR_DOT_NOAUTOSIZE_BUTTON}
- CMP byte ptr [ECX], '.'
- JNZ @@25
- AND AH, not TBSTYLE_AUTOSIZE
- INC ECX
-@@25:
- {$ENDIF TOOLBAR_DOT_NOAUTOSIZE_BUTTON}
- STOSD
- MOV EAX, [EBP+8]
- STOSD
- OR EAX, -1
- CMP word ptr [ECX], ' '
- JZ @@3
- CMP byte ptr [ECX], 0
- JZ @@3
- PUSH EDX
- PUSH 0
- MOV EDX, ECX
- MOV EAX, ESP
- {$IFDEF _D2009orHigher}
- PUSH ECX
- XOR ECX, ECX
- {$ENDIF}
- CALL System.@LStrFromPChar
- {$IFDEF _D2009orHigher}
- POP ECX
- {$ENDIF}
- MOV EAX, ESP
- MOV EDX, offset[@@0]
- CALL System.@LStrCat
- PUSH dword ptr [ESP]
- PUSH 0
- PUSH TB_ADDSTRING
- PUSH dword ptr [EBP+8]
- CALL Perform
- STOSD
- CALL RemoveStr
- POP EDX
- JMP @@30
-@@3: STOSD
-@@30: INC dword ptr [EBP-$14]
- INC [ToolbarsIDcmd]
- POP ECX
- DEC ECX
- JNZ @@loop
-@@break:
- POP ECX
- JECXZ @@exit
- PUSH dword ptr [ESP]
- MOV EAX, [Idx]
- TEST EAX, EAX
- JGE @@31
- PUSH ECX
- PUSH TB_ADDBUTTONS
- JMP @@32
-@@31:
- PUSH EAX
- PUSH TB_INSERTBUTTON
-@@32:
- PUSH dword ptr [EBP+8]
- CALL Perform
-@@exit:
- POP EAX
- CALL System.@FreeMem
-@@fin:
- POP EDI
- POP ESI
- XCHG EAX, EBX
- POP EBX
-end;
-
-function TControl.TBGetButtonText( BtnID: Integer ): AnsiString;
-asm
- PUSH ECX
- ADD ESP, -1024
- PUSH ESP
- PUSH EAX
- CALL GetTBBtnGoodID
- POP EDX
- PUSH EAX
- PUSH TB_GETBUTTONTEXT
- PUSH EDX
- CALL Perform
- TEST EAX, EAX
- JLE @@2
- MOV EDX, ESP
- JMP @@1
-@@2: XOR EDX, EDX
-@@1: MOV EAX, [ESP+1024]
- {$IFDEF _D2009orHigher}
- XOR ECX, ECX
- {$ENDIF}
- CALL System.@LStrFromPChar
- ADD ESP, 1028
-end;
-
-procedure TBitmap.LoadFromResourceName(Inst: DWORD; ResName: PAnsiChar);
-asm
- PUSH EBX
- MOV EBX, EAX
- PUSHAD
- CALL Clear
- POPAD
- XOR EAX, EAX
- PUSH ECX
- MOVZX ECX, [EBX].fHandleType
- INC ECX
- LOOP @@1
- MOV AH, LR_CREATEDIBSECTION shr 8 // = $2000
-@@1: MOV AL, LR_DEFAULTSIZE // = $40
- POP ECX
- PUSH EAX
- PUSH 0
- PUSH 0
- PUSH IMAGE_BITMAP
- PUSH ECX
- PUSH EDX
- CALL LoadImage
- TEST EAX, EAX
- JZ @@exit
- XCHG EDX, EAX
- XCHG EAX, EBX
- CALL SetHandle
-@@exit: POP EBX
-end;
-{$ENDIF}