Merge pull request #2005 from michaellukashov/fix-resource-leak
[far2l.git] / incsrch / misc.h
blob0711badac022d73208e5798134659e114410ca9a
1 /*
2 FAR manager incremental search plugin, search as you type in editor.
3 Copyright (C) 1999-2019, Stanislav V. Mekhanoshin
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <https://www.gnu.org/licenses/>.
18 #pragma once
20 #if defined(__386__) || defined(_WIN32) || defined(__NT__)
21 extern void memmovel(void *dest, const void *src, size_t count);
22 #if defined(__WATCOMC__)
24 #pragma aux memmovel parm[edi][esi][ecx] modify exact[ecx edi esi] = /*"cld"*/ \
25 "rep movsb";
26 #endif /* __WATCOMC__ */
27 #else /* !__386__ */
28 #define memmovel memmove
29 #endif
31 #if defined(__386__) || defined(_WIN32) || defined(__NT__)
32 extern void zeromem(void *ptr, size_t nLen);
33 #if defined(__WATCOMC__)
34 #pragma aux zeromem parm[edi][ecx] modify exact[eax ecx edi] = /*"cld"*/ \
35 "xor eax, eax" \
36 "rep stosb";
37 #endif /* __WATCOMC__ */
38 #else /* !__386__ */
39 #define zeromem(ptr, nLen) memset((ptr), 0, (nLen))
40 #endif
42 #if defined(_MSC_VER)
43 static __inline void setmem(void *pMem, int b, size_t nLength)
45 _asm {
46 mov edi, pMem
47 mov ecx, nLength
48 mov eax, b
49 cld
50 rep stosb
53 #define memcpy(d, s, l) memmovel((d), (s), (l))
54 #else
55 #if defined(__386__) || defined(_WIN32) || defined(__NT__)
56 extern void setmem(void *ptr, int byte, size_t nLen);
57 #if defined(__WATCOMC__)
58 #pragma aux setmem parm[edi][eax][ecx] modify exact[eax ecx edi] = "rep stosb";
59 #endif /* __WATCOMC__ */
60 #else /* !__386__ */
61 #define setmem(ptr, byte, nLen) memset((ptr), byte, (nLen))
62 #endif
63 #endif
65 extern size_t utoar(unsigned int nNum, TCHAR *sBuff, size_t nBuffLen);
66 // returning index to first byte
67 #ifdef __WATCOMC__
68 #pragma aux utoar parm[eax][edi][ecx] value[ecx] modify exact[eax ebx ecx edx edi] = \
69 "dec edi" \
70 "mov ebx, 10" \
71 "mov byte ptr [edi][ecx], 0" \
72 "dec ecx" \
73 "Next: xor edx, edx" \
74 "div ebx" \
75 "add edx, 48" \
76 "mov byte ptr [edi][ecx], dl" \
77 "dec ecx" \
78 "jz Exit" \
79 "test eax, eax" \
80 "jz Exit" \
81 "jmp short Next" \
82 "Exit:";
83 #endif
85 #if defined(__386__) || defined(_WIN32) || defined(__NT__)
86 extern size_t sstrnlen(const char *str, size_t count);
87 #if defined(__WATCOMC__)
89 #pragma aux sstrnlen parm[edi][ecx] modify exact[eax ecx edi] value[edx] = /*"cld"*/ \
90 "mov edx, ecx" \
91 "xor eax, eax" \
92 "repne scasb" \
93 "jnz Len" \
94 "inc ecx" \
95 "Len: sub edx, ecx";
96 #endif /* __WATCOMC__ */
97 #endif
99 #if defined(WINPORT_DIRECT)
100 extern size_t lstrnlen(const TCHAR *str, size_t count);
101 #endif