// ------------------------------------------------------------------- //
//        STRING32.TXT для Sphinx C-- (STRING32.H--)                   //
//        Функции для работы со строками под Win32                     //
//        Предложения и плевки отправляйте на hd_keeper@mail.ru        //
// ------------------------------------------------------------------- //

   Ниже приведено описание функций из STRING32.H--, предназначенные для
работы с ASCIIZ-строками и областями памяти под Win32. Как это принято в
C--, все функции являются динамическими и не увеличивают размер кода, если
не используются. Функции оптимизированы под Pentium и 32-битные сегменты
кода. Хоть функции и предназначались для работы под Windows в модели памяти
FLAT, они будут работать под любую другую операционную систему при соблюдении
следующих условий:
   1) 32-битные операнды содержат корректные смещения
   2) Сегментные регистры DS и ES равны
   3) Флаг направления сброшен: DF=0
32-битные сегменты кода являются желательным (для обеспечения максимальной
производительности), но не обязательным условием применения.
   Размер функций дан при их внедрении в код программы (@). В случае
вызова функций (CALL) следует добавить 1 байт на инструкцию RET.


   --------------- Функции для работы с ASCIIZ-строками ---------------


   strlen
   Определение длины строки

:DWORD strlen( LPSTR str);
str - указатель на строку
Возвращает: длину строки, не включая завершающий 0
Размер: 12 байт
WinAPI аналог: lstrlen


   strend
   Определение конца строки

:LPSTR strend( LPSTR str);
str - указатель на строку
Возвращает: указатель на конец строки (на завершающий 0)
Размер: 10 байт


   strcpy
   Копирование строки

:LPSTR strcpy( LPSTR dest, src);
src - указатель на исходную строку
dest - указатель на буфер, куда будет скопирована src
Возвращает: dest
Размер: 32 байт
WinAPI аналог: lstrcpy


   strcpyn, strncpy
   Копирование строки с ограничением по длине

:LPSTR strcpyn( LPSTR dest, src; DWORD max);
src - указатель на исходную строку
dest - указатель на буфер, куда будет скопирована src
max - максимум символов, сколько копировать из src
Возвращает: dest
Размер: 40 байт
WinAPI аналог: lstrcpyn


   strmov
   Копирование строки (для перекрывающихся строк)

:LPSTR strmov( LPSTR dest, src);
src - указатель на исходную строку
dest - указатель на буфер, куда будет скопирована src
Возвращает: dest
Размер: 73 байт


   strmovn, strnmov
   Копирование строки с ограничением по длине (для перекрывающихся строк)

:LPSTR strmovn( LPSTR dest, src; DWORD max);
src - указатель на исходную строку
dest - указатель на буфер, куда будет скопирована src
max - максимум символов, сколько копировать из src
Возвращает: dest
Размер: 79 байт


   strcat
   Конкатенация строк (dest = dest + src)

:LPSTR strcat( LPSTR dest, src);
src - указатель на строку, которая будет приписана к dest
dest - указатель на строку, к которой будет приписана src
Возвращает: dest
Размер: 44 байт
WinAPI аналог: lstrcat


   strcmp
   Сравнение строк

:LONG strcmp( LPSTR str1, str2);
str1, str2 - указатели на сравниваемые строки
Возвращает: 0, если str1 = str2
          < 0, если str1 < str2
          > 0, если str1 > str2
Размер: 26 байт
WinAPI аналог: lstrcmp


   strcmpi, stricmp
   Сравнение строк с игнорированием регистра

:LONG strcmpi( LPSTR str1, str2);
str1, str2 - указатели на сравниваемые строки
Возвращает: 0, если str1 = str2
          < 0, если str1 < str2
          > 0, если str1 > str2
Размер: 53 байт
WinAPI аналог: lstrcmpi


   strcmpn, strncmp
   Сравнение строк с ограничением по длине

:LONG strcmpn( LPSTR str1, str2; DWORD max);
str1, str2 - указатели на сравниваемые строки
max - максимум символов, сколько сравнивать
Возвращает: 0, если str1 = str2
          < 0, если str1 < str2
          > 0, если str1 > str2
Размер: 30 байт
WinAPI аналог: CompareString


   strcmpni, strcmpin, strncmpi, stricmpn, strnicmp, strincmp
   Сравнение строк с ограничением по длине и игнорированием регистра

:LONG strcmpni( LPSTR str1, str2; DWORD max);
str1, str2 - указатели на сравниваемые строки
max - максимум символов, сколько сравнивать
Возвращает: 0, если str1 = str2
          < 0, если str1 < str2
          > 0, если str1 > str2
Размер: 57 байт
WinAPI аналог: CompareString


   strchr
   Поиск символа в строке

:LPSTR strchr( LPSTR str; CHAR chr);
str - указатель на строку
chr - искомый символ
Возвращает: указатель на первый найденный символ
Размер: 27 байт


   strchrr, strrchr
   Поиск символа в строке с конца

:LPSTR strchrr( LPSTR str; CHAR chr);
str - указатель на строку
chr - искомый символ
Возвращает: указатель на последний найденный символ
Размер: 26 байт


   strstr
   Поиск подстроки в строке

:LPSTR strstr( LPSTR str, substr);
str - указатель на строку, в которой производится поиск
substr - указатель на искомую подстроку
Возвращает: указатель на первый символ найденной подстроки в str
            (0, если не найдена)
Размер: 63 байт


   strupr
   Приведение строки к верхнему регистру

:LPSTR strupr( LPSTR str);
str - указатель на строку
Возвращает: str
Размер: 24 байт
WinAPI аналог: CharUpper


   strlwr
   Приведение строки к нижнему регистру

:LPSTR strlwr( LPSTR str);
str - указатель на строку
Возвращает: str
Размер: 24 байт
WinAPI аналог: CharLower


   strtok
   Разбиение строки на слова

:LPSTR strtok( LPSTR dest, src, divs);
src - указатель на исходную строку или результат предыдущего вызова
dest - указатель на буфер, куда будет скопировано слово
divs - указатель на строку, содержащую символы-разделители
Возвращает: 0, если слов больше нет
         не 0, если слово скопировано в dest (передайте это значение
               в качестве src для последующего поиска)
Размер: 50 байт


   --------------- Функции для работы с областями памяти ---------------


   memsetz, memzset, memset0, mem0set
   Обнуление области памяти

:void memsetz( LPVOID mem; DWORD size);
mem - указатель на область памяти
size - размер области в байтах
Возвращает: ничего
Размер: 16 байт
WinAPI аналог: ZeroMemory


   memset
   Заполнение области памяти

:void memset( LPVOID mem; DWORD size; BYTE value);
mem - указатель на область памяти
size - размер области в байтах
value - значение байта заполнения
Возвращает: ничего
Размер: 24 байт
WinAPI аналог: FillMemory


   memcpy
   Копирование области памяти

:void memcpy( LPVOID dest, src; DWORD size);
src - указатель на область, откуда копировать данные
dest - указатель на область, куда копировать данные
size - количество байт, сколько копировать
Возвращает: ничего
Размер: 14 байт
WinAPI аналог: CopyMemory


   memsetd, memset32
   Быстрое заполнение области памяти

:void memsetd( LPVOID mem; DWORD size, value);
mem - указатель на область памяти
size - размер области в двойных словах (не в байтах!)
value - значение двойного слова заполнения
Возвращает: ничего
Размер: 2 байта


   memcpyd, memcpy32
   Быстрое копирование области памяти

:void memcpyd( LPVOID dest, src; DWORD size);
src - указатель на область, откуда копировать данные
dest - указатель на область, куда копировать данные
size - количество двойных слов (не байт!), сколько копировать
Возвращает: ничего
Размер: 2 байта


   memmov
   Копирование области памяти (для перекрывающихся областей)

:void memmov( LPVOID dest, src; DWORD size);
src - указатель на область, откуда копировать данные
dest - указатель на область, куда копировать данные
size - количество байт, сколько копировать
Возвращает: ничего
Размер: 57 байт
WinAPI аналог: MoveMemory


   memcmp
   Сравнение областей памяти

:LONG memcmp( LPVOID mem1, mem2; DWORD size);
mem1, mem2 - указатели на сравниваемые области
size - количество байт, сколько сравнивать (0 - ни одного)
Возвращает: 0, если mem1 = mem2
          < 0, если mem1 < mem2
          > 0, если mem1 > mem2
Размер: 26 байт


   -----------------------------------------------------------------

Всего функций: 24
Суммарный размер: 811 байт (835 байт)
