
Быстрый поиск
Введите фрагмент названия статьи для поиска

"Ленивые" картофельные шаньги
21.01.2009 | Категория: А еще я туда ем! | Автор: ManHunter

"Ленивые" картофельные шаньги
Этот рецепт я подсмотрел в детстве у своей бабушки, а теперь он меня иногда выручает. Бывают такие ситуации, когда совершенно нет времени возиться на кухне, а хочется приготовить что-нибудь вкусное. Или приходят нежданные гости, а угостить их нечем. Тут вам пригодятся "ленивые" шаньги. Готовятся они очень быстро и просто, не требуют больших финансовых затрат и труднодоступных продуктов. Обычно все необходимое уже есть дома, даже не приходится идти в магазин.
Читать статью целиком »
Просмотров: 21649 | Комментариев: 25

Рекурсивный обход дерева каталогов
19.01.2009 | Категория: Образ мышления: Assembler | Автор: ManHunter
Обход дерева каталогов является одной из классических прикладных задач на применение рекурсии. В Windows штатных API-функций для этого нет, поэтому поиск файлов выполняется при помощи пары API-функций FindFirstFile и FindNextFile. Совершенно непонятно, почему разработчики Windows не дали возможность точно настраивать критерии поиска, ограничившись только маской имени файла. Даже в MS-DOS для решения аналогичной задачи можно было задать по крайней мере атрибуты файлов, например для поиска только каталогов. Более расширенные возможности для поиска предоставляет API-функция FindFirstFileEx, но она доступна только в операционной системе Windows 2000 и выше.Для рекурсивного обхода дерева каталогов я написал следующую функцию. Она сканирует дерево каталогов, начиная с указанного, и передает все найденные имена файлов в заданную функцию-обработчик. Все действия с найденными файлами выполняются уже в ней.
Code (Assembler) : Убрать нумерацию
- ;------------------------------------------------------------------
- ; Функция рекурсивного обхода дерева каталогов
- ; (C) ManHunter / PCL
- ; http://www.manhunter.ru
- ;
- ; Параметры вызова:
- ; lpFStr - указатель на начальный каталог без завершающего слеша.
- ; он должен быть в буфере размером не менее MAX_PATH байт
- ; lpProc - указатель на callback-функцию для передачи имен файлов,
- ; это обязательный параметр
- ; dFlag - флаг "передавать в callback-функцию имена найденных
- ; каталогов" (TRUE/FALSE)
- ;------------------------------------------------------------------
- proc FindFileRecursive lpFStr:dword,lpProc:dword,dFlag:dword
- local hFind:DWORD ; Локальный хэндл текущего поиска
- locals
- FndData WIN32_FIND_DATA ; Локальная структура WIN32_FIND_DATA
- endl
- ; Сохранить изменяемые регистры
- push ebx ecx edx
- ; Добавить к пути поиска '\*.*'
- invoke lstrcat,[lpFStr],ff_mask
- ; Найти первый файл
- lea eax,[FndData]
- push eax
- invoke FindFirstFile,[lpFStr]
- ; В случае ошибки полностью прекратить дальнейшее сканирование
- cmp eax,INVALID_HANDLE_VALUE
- jne @f
- xor eax,eax
- jmp ff_exit
- @@:
- ; Сохранить хэндл текущего поиска
- mov [hFind],eax
- ff_chk_file:
- ; Проверить имя файла на недопустимое
- lea eax,[FndData.cFileName]
- push eax
- ; Имя файла '.'
- invoke lstrcmp,ff_skip1
- or eax,eax
- ; Да, пропустить
- jz ff_next_file
- lea eax,[FndData.cFileName]
- push eax
- ; Имя файла '..'
- invoke lstrcmp,ff_skip2
- or eax,eax
- ; Да, пропустить
- jz ff_next_file
- ; Если установлен флаг dFlag=TRUE, то передавать в callback-процедуру
- ; все найденные результаты, в том числе и каталоги
- cmp [dFlag],0
- jne @f
- ; Установлен флаг передавать только файлы. Проверить атрибуты
- ; найденного файла
- mov eax,[FndData.dwFileAttributes]
- and eax,FILE_ATTRIBUTE_DIRECTORY
- ; Это каталог, пропустить
- jnz ff_do_not_callback
- @@:
- ; Вычислить длину текущей строки поиска и обрезать '*.*'
- invoke lstrlen,[lpFStr]
- sub eax,3
- add eax,[lpFStr]
- mov byte [eax],0
- push eax
- ; Дописать к пути имя найденного файла или каталога
- lea eax,[FndData.cFileName]
- push eax
- invoke lstrcat,[lpFStr]
- ; Передать имя файла в callback-функцию
- stdcall [lpProc],[lpFStr]
- ; Вернуть маску поиска на место
- pop ecx
- mov dword [ecx],'*.*'
- ; Если callback-функция вернула 0, то прекратить сканирование
- or eax,eax
- jz ff_stop_scan
- ; Это каталог?
- mov eax,[FndData.dwFileAttributes]
- and eax,FILE_ATTRIBUTE_DIRECTORY
- je ff_next_file
- ff_do_not_callback:
- ; Вычислить длину текущей строки поиска и обрезать '*.*'
- invoke lstrlen,[lpFStr]
- sub eax,3
- add eax,[lpFStr]
- mov byte [eax],0
- push eax
- ; Дописать к пути имя найденного каталога
- lea eax,[FndData.cFileName]
- push eax
- invoke lstrcat,[lpFStr]
- ; Рекурсивный вызов поиска файлов в новом каталоге
- stdcall FindFileRecursive,[lpFStr],[lpProc],[dFlag]
- ; Вернуть маску поиска на место
- pop ecx
- mov dword [ecx],'*.*'
- ; Если callback-функция вернула 0, то прекратить сканирование
- or eax,eax
- jz ff_stop_scan
- ff_next_file:
- ; Найти следующий файл
- lea eax,[FndData]
- push eax
- invoke FindNextFile,[hFind]
- or eax,eax
- ; Файл найден, обработать его
- jnz ff_chk_file
- ; По умолчанию установить флаг "продолжать сканирование"
- mov eax,TRUE
- ff_stop_scan:
- ; Закрыть хэндл текущего поиска
- push eax
- invoke FindClose,[hFind]
- pop eax
- ff_exit:
- ; Восстановить измененные регистры
- pop edx ecx ebx
- ; Возврат из процедуры.
- ; Код возврата EAX=1 - продолжать сканирование, EAX=0 - стоп
- ret
- ff_mask db '\*.*',0 ; Маска файлов для поиска
- ff_skip1 db '.',0 ; Запрещенное имя файла
- ff_skip2 db '..',0 ; Запрещенное имя файла
- endp
Читать статью целиком »
Просмотров: 8540 | Комментариев: 2

Gothic Metal фест от агентства "Московский Рок клуб"
17.01.2009 | Категория: Жизнь в оффлайне | Автор: ManHunter

Gothic Metal фест от агенства "Московский Рок клуб"
Сегодня сходил в клуб "Plan B" на мероприятие с мудреным названием "Первый концерт МРК в поддержку неформального искусства и творческой молодежи", оно же Gothic/Industrial Metal фест от концертного агентства "Московский Рок клуб". Трудовая неделя явно затянулась, так что организм требовал встряски и позитива одновременно.
Читать статью целиком »
Просмотров: 4328 | Комментариев: 4

Meizu Music Card (Ritmix RF-7400)
14.01.2009 | Категория: Обзоры техники | Автор: ManHunter

Meizu Music Card (Ritmix RF-7400)
Надоело мучать свою мобилу несвойственными ей функциями MP3-плеера, поэтому к Рождеству сделал себе любимому такой приятный подарок. После лазания по "Савёле" остановился на этой модели. Выбор был сделан из желания получить не очень дорогой плеер с максимальной емкостью памяти для этой цены. Тактико-технические характеристики девайса без труда можно найти в интернете. Это не реклама, просто опишу свои личные ощущения от использования.
Управление очень простое. Все действия выполняются одной большой сенсорной кнопкой и одной маленькой кнопкой листания композиций. Сперва никак не мог приловчиться выполнять прокрутку, пытался делать это легким касанием, но оказалось что ее надо делать как раз с небольшим нажимом, а касание расценивается как команда "Ввод". Меню на русском языке, все интуитивно понятно. К тому же в комплекте идет внушительный мануал с картинками и описанием всех действий, тоже на русском языке. Чтобы кнопки случайно не нажались, например когда плеер лежит в кармане, на корпусе предусмотрен переключатель блокировки. Подключается через стандартный разъем mini-USB к компьютеру, системой определяется как обычная флешка. Заряжается через него же, не требует никаких посторонних батареек и аккумуляторов, что для меня является огромным плюсом. Заряд держит очень долго, даже при постоянном использовании. В документации заявлено более 20 часов непрерывной работы, похоже что так оно и есть.
Звук просто шикарный, особенно после телефона. Настраивается точно под ваши требования с использованием целой кучи опций, таких как объемный звук, усиление басов и высоких частот и т.д. На выходе дает такой громкий сигнал, что даже мой слух, тренированный разными брутальными стилями музыки, максимальную громкость в наушниках не выдерживает. Понимает форматы MP3, WMA, OGG, FLAC, WAV, все залитые в него композиции воспроизвелись без проблем. Также в устройстве есть FM-радио и диктофон. Ни тем, ни другим не пользуюсь, так что ничего больше про них сказать не могу. Еще из полезных мелочей присутствуют часы и календарик.
Читать статью целиком »
Просмотров: 8412 | Комментариев: 13

Runtime error R6002 floating point not loaded
13.01.2009 | Категория: Темная сторона Силы | Автор: ManHunter
После распаковки приложений, написанных на Microsoft Visual C++ и накрытых некоторыми протекторами (Armadillo, PECompact и другие) они могут падать при запуске или выполнении каких-либо действий с ошибкой Runtime error R6002 floating point not loaded. Причина ее возникновения следующая: программа была скомпилирована с Microsoft.VC80.CRT и при запуске в ней проверяются атрибуты секций.Первый способ устранения ошибки R6002 заключается в выставлении атрибутов секций в распакованном файле в точности, как было в оригинальном. Сделать это можно с использованием бесплатной утилиты CFF Explorer VII. Второй вариант, более надежный и гарантированно рабочий - пропатчивание в исполняемом файле функции __fptrap, которая и отвечает за появление этого сообщения об ошибке. Дизассемблером IDA в файле она определяется примерно так:
Code (Assembler) : Убрать нумерацию
- __fptrap proc near
- push 2 ; <--- заменить на RET
- call __amsg_exit
- pop ecx
- retn
- __fptrap endp
Читать статью целиком »
Просмотров: 105234 | Комментариев: 133
