Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
RusFAQ.ru: программирование на языке Assembler
Выпуск № 626
от 27.08.2003, 22:50
Администратор: Имя: Калашников О.А. URL: Информационный ресурс ICQ: 68951340 Россия, Москва |
О рассылке: Задано вопросов: 4024 Отправлено ответов: 11952 Активность: 297.0 %
|
Список экспертов, ответы которых опубликованы в данном выпуске |
[L2]Max Статус: Опытный Общий рейтинг: 129 Телефон: (0562) 323428 [Подробней >>] |
Евгений Иванов Статус: Профессиональный Общий рейтинг: 149.47 URL: Super Assembler Software Телефон: НСС +7 831 3107039 [Подробней >>] |
Bob Johnson Статус: Профессиональный Общий рейтинг: 152.11 URL: Программирование [Подробней >>] |
_vt Статус: Профессиональный Общий рейтинг: 121.07 [Подробней >>] |
dimka Статус: Опытный Общий рейтинг: 142.18 Телефон: (231)-4-43-85 [Подробней >>] |
Lynx Статус: Профессиональный Общий рейтинг: 117.47 Телефон: (8442) 750522 [Подробней >>] |
vitya Статус: Профессиональный Общий рейтинг: 108.07 [Подробней >>] |
Greys Статус: Доверительный Общий рейтинг: 120.17 [Подробней >>] |
Краткий перечень вопросов |
Вопрос № 3980. Доброе время суток, эксперты. Я никак в своем WinAPI Help'е не могу найти ничего о том как прочитать... (ответов: 4)
Вопрос № 3981.
T
...
(ответов: 1)Вопрос № 3984. Если у кого есть исходники, доки или ссылки на маны по програмированию для двух(или более) процов, б... (ответов: 2)
Вопрос № 3985. Здраствуйте господа эксперты! Не могли бы вы подсказать варианты (чую их несколько)реализации с небо... (ответов: 2)
Вопрос № 3986. Почему эта программа удаляет файлы в своей директории,а не в той которая была задана через буфферизи... (ответов: 4)
Вопрос № 3987. Как не используя функцию 9h прерывания 21h вывести сообщение на экран. Н-р: Loading.... (ответов: 7)
Вопрос № 3988. Здравствуйте Уважаемые_эксперты! Кто писал(или знает как) дизасемблер(асемблер и др.) подскажите к... (ответов: 3)
Вопрос № 3989. В реальном режиме работы процессора с помощью прерывания int 10h(стандартов VBE) можно установить ра... (ответов: 2)
Вопросов: 8, ответов: 25
Вопрос № 3980 |
Доброе время суток, эксперты.
Я никак в своем WinAPI Help'е не могу найти ничего о том как прочитать значение параметра ключа реестра или создать свой параметр. Может подскажете?
И еще какой API Help посоветуете? Где его скачать?
(SDK не предлагать - малость большеват :))
Вопрос отправлен: 21.08.2003, 20:49
Отправитель: UsAr
[Следующий вопрос >>] [Список вопросов]
Отвечает [L2]Max
Приветствую Вас, UsAr!
Ищи описание ф-й RegCreateKeyEx(), RegOpenKeyEx(), RegCloseKey(HKEY),RegFlushKey(HKEY),RegSetValueEx(),
RegDeleteValue(),RegEnumKeyEx()
Ответ отправлен: 21.08.2003, 21:24
Отправитель: [L2]Max
Отвечает Евгений Иванов
Приветствую Вас, UsAr!
RegOpenKeyEx
Ответ отправлен: 21.08.2003, 22:56
Отправитель: Евгений Иванов
Отвечает Bob Johnson
Здравствуйте, UsAr!
> Я никак в своем WinAPI Help'е не могу найти ничего о том как прочитать значение параметра ключа реестра
Для чтения подойдет функция RegQueryValueEx. Она есть в Win 32 prog ref, который идет вместе с дельфи. По ней в see also найдешь остальные.
> И еще какой API Help посоветуете? Где его скачать? (SDK не предлагать - малость большеват :))
Ок, SDK не буду - MSDN :) Есть на дисках и на сайте ms: http://msdn.microsoft.com
* EMan1.5: ---===*** The game we play ***===---
Ответ отправлен: 21.08.2003, 22:24
Отправитель: Bob Johnson
Отвечает _vt
Здравствуйте, UsAr!
Основные функции:
RegOpenKeyEx - открыть раздел
RegCloseKey - закрыть раздел
RegCreateKey - создать заздел
RegDeleteKey - удалить раздел
RegEnumKey - получить подразделы выбранного раздела
RegEnumValue - получить параметры выбранного раздела
RegQueryValueEx - получить значение для заданного параметра
RegSetValueEx - установить значение для заданного параметра
RegDeleteValue -удалить параметр
Параметры перечислять долго, поищи в справке...
> И еще какой API Help посоветуете? Где его скачать? (SDK не предлагать - малость большеват :))
Его и посоветую, качать не надо, найди диск с CBuilder или Delphi - он там есть...
---===*** Updated E-Man 1.5 - it's cool!***===---
Ответ отправлен: 22.08.2003, 01:37
Отправитель: _vt
Вопрос № 3981 |
T
E
S
T
Вопрос отправлен: 21.08.2003, 22:12
Отправитель: Пупкин
[Следующий вопрос >>] [Список вопросов]
Отвечает [L2]Max
Приветствую Вас, Пупкин!
T
E
S
T
Ответ отправлен: 21.08.2003, 22:26
Отправитель: [L2]Max
Вопрос № 3984 |
Если у кого есть исходники, доки или ссылки на маны по програмированию для двух(или более) процов, буду очень благодарен.
Вопрос отправлен: 22.08.2003, 14:10
Отправитель: Tibor (tibor_ferencig@mail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает dimka
Доброе время суток, Tibor!
www.ekniga.ru
Пошукай там.
Ответ отправлен: 25.08.2003, 10:50
Отправитель: dimka
Отвечает Bob Johnson
Добрый день, Tibor!
Под Windows тебе ничего особенного в такой ситуации делать не надо - просто пишешь программу, в которой используешь 2 или более потоков. При этом ОС сама распределяет ресурсы двух процессоров между ними. Только учти, что будет необходимо серьезно решать вопрос с синхронизацией между этими потоками, т.к. в 2-х процессорной машине они могут и реально выполнятся одновременно.
* EMan1.5: ---===*** The game we play ***===---
Ответ отправлен: 22.08.2003, 15:57
Отправитель: Bob Johnson
Вопрос № 3985 |
Здраствуйте господа эксперты!
Не могли бы вы подсказать варианты (чую их несколько)реализации с небольшим описанием, следующей задачи:
требуется переключать клаву (RU/EN) по клавише, скажем CapsLock в Win2k (XP).
Я пробовал написать, получается менять раскладку только своёму окошку, чужим не смог найти как это сделать.
С уважение Владимир, lam.
P.S. Кстати не пойму куда лучше кинуть... в WinAPI или на Assembler... IMHO: на асме универсалы :)
Вопрос отправлен: 22.08.2003, 14:13
Отправитель: lam
[Следующий вопрос >>] [Список вопросов]
Отвечает [L2]Max
Здравствуйте, lam!
У тебя не получится сразу всем окнам поменять раскладку, винда хранит текущее состояние для каждого процесса, максимум что ты сможешь сделать, так это узнать HWND всех нужных процессов и поменять раскладку
Ответ отправлен: 22.08.2003, 14:29
Отправитель: [L2]Max
Отвечает Евгений Иванов
Приветствую Вас, lam!
Регистрируй быструю клавишу:
Creating a Hot-Key Control
The following function creates a hot-key control, uses the HKM_SETRULES and HKM_SETHOTKEY messages to initialize it, and returns a handle to the control. This hot-key control does not allow the user to choose a hot key that is a single unmodified key, nor does it permit the user to choose only SHIFT and a key. (These rules effectively prevent the user from choosing a hot key that might be accidentally entered while typing text.)
// InitializeHotkey - creates a hot-key control and sets rules
// and default settings for it.
// Returns the handle of the hot-key control.
// hwndDlg - handle of the parent window (dialog box)
//
// Global variable
// g_hinst - handle of the application instance
extern HINSTANCE g_hinst;
HWND WINAPI InitializeHotkey(HWND hwndDlg)
{
// Ensure that the common control DLL is loaded.
InitCommonControls();
hwndHot = CreateWindowEx(
0, // no extended styles
HOTKEY_CLASS, // class name
"", // no title (caption)
WS_CHILD | WS_VISIBLE, // style
10, 10, // position
200, 20, // size
hwndDlg, // parent window
NULL, // uses class menu
g_hinst, // instance
NULL // no WM_CREATE parameter
);
SetFocus(hwndHot);
// Set rules for invalid key combinations. If the user
// does not supply a modifier key, use ALT as a modifier.
// If the user supplies SHIFT as a modifier key, use
// SHIFT + ALT instead.
SendMessage(hwndHot, HKM_SETRULES,
(WPARAM) HKCOMB_NONE | HKCOMB_S, // invalid key combinations
MAKELPARAM(HOTKEYF_ALT, 0)); // add ALT to invalid entries
// Set CTRL + ALT + A as the default hot key for this window.
// 0x41 is the virtual-key code for 'A'.
SendMessage(hwndHot, HKM_SETHOTKEY,
MAKEWORD(0x41, HOTKEYF_CONTROL | HOTKEYF_ALT), 0);
return hwndHot;
}
Ответ отправлен: 22.08.2003, 18:23
Отправитель: Евгений Иванов
Вопрос № 3986 |
Почему эта программа удаляет файлы в своей директории,а не в той которая была задана через буфферизированный ввод(как было задуманно).
.model tiny
.code
org 100h
start:
mov ah,0ah
mov dx,offset pit
int 21h
mov ah,3bh
mov dx,offset pit
int 21h
mov ah,4eh
mov dx,offset file_name
xor cx,cx
int 21h
delete:
mov ah,41h
mov dx,80h+1Eh
int 21h
next_find:
mov ah,4fh
mov dx,80h
int 21h
cmp ax,2
jc err:
call delete
err:
ret
file_name db "*.*",0
pit db fdh,0
end start
Вопрос отправлен: 22.08.2003, 20:13
Отправитель: Radmir (iradmir@nm.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Евгений Иванов
Доброе время суток, Radmir!
У тебя CD не работает!
Функция 10 записывает строку по смещению 2 от начала.
Так что:
mov ah,3bh
mov dx,(offset pit)+2
int 21h
Но там ещё нужно нолик добавить:
mov si, offset pit
mov [word ptr si], 0FDh
mov ah,0ah
mov dx,si
int 21h
mov al, [si+1]
cmp al, 2
jc err_0
sub ah, ah
xchg bx, ax
mov [si+bx+2], bh
mov ah,3bh
lea dx, [si+2]
int 21h
err_0:
Ответ отправлен: 23.08.2003, 12:28
Отправитель: Евгений Иванов
Отвечает [L2]Max
Приветствую Вас, Radmir!
В MS-DOS версии 2 и выше, для функции 0ah формат буффера предусматривает еще один 2 байт - ФАКТИЧЕСКИЙ ВВОД
Ответ отправлен: 22.08.2003, 23:47
Отправитель: [L2]Max
Отвечает Lynx
Здравствуйте, Radmir!
Функции удаления нужен 0 в конце буфера, а ты его не вставляешь. :)))
Ответ отправлен: 23.08.2003, 14:27
Отправитель: Lynx
Отвечает _vt
Добрый день, Radmir!
Ну я же писал, ты должен подставить функции chdir строку такого вида:
ASCIIZ-String db "C:Windows", 0 ; строка с завершающим нулем
А полученная тобой с клавиатуры строка представляет собой следующее:
PASCAL-String db 0Ah, "C:Windows" ; строка с указанием длины с первом байте
Да еще вдобавок первым символом стоит FDh !!!
Естественно, MS-DOS не находит каталога FDh, 0Ah, "..." и возвращает ошибку...
А последующие функции работают с текущим каталогом...
Помимо этого она ипортит стек из-за некорректного рекурсивного вызова delete...
Ну и напоследок рабочий код...
---===*** Updated E-Man 1.5 - it's cool!***===---
Приложение:
Ответ отправлен: 22.08.2003, 22:11
Отправитель: _vt
Вопрос № 3987 |
Как не используя функцию 9h прерывания 21h вывести сообщение на экран. Н-р: Loading.
Вопрос отправлен: 22.08.2003, 23:05
Отправитель: Alexey (sezemin@rambler.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Евгений Иванов
Приветствую Вас, Alexey!
Используй функции BIOS.
Например, 19 функцию 16-го прерывания.
Ну, там ещё можно и по символам выводить, 9,
10 функции.
Удачи!
Ответ отправлен: 23.08.2003, 11:22
Отправитель: Евгений Иванов
Отвечает vitya
Добрый день, Alexey!
например писать прямо в память, начиная с адреса B800
Ответ отправлен: 23.08.2003, 10:18
Отправитель: vitya
Отвечает [L2]Max
Приветствую Вас, Alexey!
mov ah,0x09
mov dx,offset message
int 21h
ret
message db 'Fucking WORLD !!!$'
Ответ отправлен: 22.08.2003, 23:39
Отправитель: [L2]Max
Отвечает Bob Johnson
Приветствую Вас, Alexey!
Еще можно выводить посимвольно, с помощью прерывания int 29h:
mov al, _код_символа_
int 29h
* EMan1.5: ---===*** The game we play ***===---
Ответ отправлен: 22.08.2003, 23:31
Отправитель: Bob Johnson
Отвечает Lynx
Добрый день, Alexey!
Способов куча, но самый быстрый, самый эфективный и, что самое главное, самый лучший, это через запись напрямую в видеобуфер! :) Адрес видеобуфера зависит от текущего видеорежима. (см. Архив рассылки)
Ответ отправлен: 23.08.2003, 14:27
Отправитель: Lynx
Отвечает _vt
Добрый день, Alexey!
Вопрос необычайной сложности !!!... :-)
Судя по тексту твоего сообщения, ты решил не изучив функции DOS, сразу написать
новую, крутую операционную систему... :-)
Попробуй прямым отображением в видеопамять: для текстового режима 80x25 сегмент видеобуфера: 0B800h.
Записываешь по четным адресам (0B800h:0000h, 0B800h:0002h и т.д.) цветовые атрибуты символа (например, 07h - серый цвет символов на черном фоне - стандартный), а по нечетным (0B800h:0001h, 0B800h:0003h и т.д.)сами символы.
Например, выводим твою строку:
.186 ; для команды push 0b800h
.model tiny ; com-программа
.code ; сегмент кода
org 100h ; начальный адрес com-программы
_start:
mov ax,3 ;инициализируем 3 видеорежим
int 10h ;иначе WinNT/2000/XP не покажет нам ничего :-)
push 0B800h
pop es ;заносим в сегментый регистр es сегмент видеобуфера
xor di, di ; di = 0
mov si, offset your_string ; si указывает на твою строку
mov ah, 07h ; цвет выводимых символов: серый на черном
_loop:
lodsb ; эквивалентно командам mov al, ds:[si]
; inc si
; т.е. заносим в al первый символ строки, и передвигаем указатель
test al, al ; эквивалентно команде cmp al, 0
jz _end ; если al=0, значит строка кончилась, переходим на _end!
; иначе (если al<>0)
stosw ; эквивалентно командам mov es:[di], ax
; inc di
; т.е. заносим по адресу 0b800h:[di] символ и его цвет
jmp _loop ; повторяем сначала
_end:
mov ah, 10h ; ждем нажатия клавиши
int 16h
ret ; и после этого выходим
your_string db 'Loading cool program...',0
end _start
---===*** Updated E-Man 1.5 - it's cool!***===---
Ответ отправлен: 24.08.2003, 00:48
Отправитель: _vt
Отвечает Greys
Здравствуйте, Alexey!
Вывести текст на экран можно средствами ДОСа, БИОСа или путем записи в память видеоадаптера!
средствами ДОСа:
Функция DOS 02h — Записать символ в STDOUT с проверкой на Ctrl-Break
Ввод: АН = 02h
DL = ASCII-код символа
Вывод: Никакого, согласно документации, но на самом деле: AL = код последнего записанного символа (равен DL, кроме случая, когда DL = 09h (табуляция), тогда в AL возвращается 20h).
Функция DOS 06h — Записать символ в STDOUT без проверки на Ctrl-Break
Ввод: АН = 06h
DL = ASCII-код символа (кроме FFh)
Вывод: Никакого, согласно документации, но на самом деле: AL = код записанного символа (копия DL)
Функция DOS 09h — Записать строку в STDOUT с проверкой на Ctrl-Break
Ввод: АН = 09h
DS:DX = адрес строки, заканчивающейся символом $ (24h)
Вывод: Никакого, согласно документации, но на самом деле: AL = 24h (код последнего символа)
Функция DOS 40h — Записать в файл или устройство
Ввод: АН = 40h
ВХ = 1 для STDOUT или 2 для STDERR
DS:DX = адрес начала строки
СХ = длина строки
Вывод: CF = 0,
АХ = число записанных байт
средствами БИОСа:
INT 10h, АН = 00 — Установить видеорежим
Ввод: AL = номер режима в младших 7 битах
Вывод: Обычно никакого, но некоторые BIOS (Phoenix и AMI) помещают в AL 30Н для текстовых режимов и 20h для графических
INT 10h, АН = 4Fh, AL = 02 — Установить SuperVGA-видеорежим
Ввод: ВХ = номер режима в младших 13 битах
Вывод: AL = 4Fh, если эта функция поддерживается
АН = 0, если переключение произошло успешно
АН = 1, если произошла ошибка
INT 10h, АН = 02 — Установить положение курсора
Ввод: АН = 02
ВН = номер страницы
DH = строка
DL = столбец
INТ 10h, АН = 03 — Считать положение и размер курсора
Ввод: АН = 03
ВН = номер страницы
Вывод: DH, DL = строка и столбец текущей позиции курсора
СН, CL = первая и последняя строки курсора
INT 10h, АН = 08 — Считать символ и атрибут символа в текущей позиции курсора
Ввод: АН = 08
ВН = номер страницы
Вывод: АН = атрибут символа
AL = ASCII-код символа
INT 10h, АН = 09 — Вывести символ с заданным атрибутом на экран
Ввод: АН = 09
ВН = номер страницы
AL = ASCII-код символа
BL = атрибут символа
СХ = число повторений символа
INT 10h, АН = 0Ah — Вывести символ с текущим атрибутом на экран
Ввод: АН = 0Ah
ВН = номер страницы
AL = ASCII-код символа
СХ = число повторений символа
INT 10h, АН = 0Eh — Вывести символ в режиме телетайпа
Ввод: АН = 0Eh
ВН = номер страницы
AL = ASCII-код символа
INT 10h, AH = 13h — Вывести строку символов с заданными атрибутами
Ввод: АН = 13h
AL = режим вывода:
бит 0 — переместить курсор в конец строки после вывода
бит 1 — строка содержит не только символы, но также и атрибуты, так что каждый символ описывается двумя байтами: ASCII-код и атрибут
биты 2 – 7 зарезервированы
СХ = длина строки (только число символов)
BL = атрибут, если строка содержит только символы
DH,DL = строка и столбец, начиная с которых будет выводиться строки
ES:BP = адрес начала строки в памяти
вывод через видеопамять:
Для того чтобы изображение появилось на мониторе, оно должно быть записано в память видеоадаптера. Для этого отводится специальная область памяти, начинающаяся с абсолютного адреса B800h:0000h (для текстовых режимов) и заканчивающаяся на B800h:FFFFh. Все, что программы пишут в эту область памяти, немедленно пересылается в память видеоадаптера. В текстовых режимах для хранения каждого изображенного символа используются два байта: байт с ASCII-кодом символа и байт с его атрибутом, так что по адресу B800h:0000h лежит байт с кодом символа, находящимся в верхнем левом углу экрана; по адресу B800h:0001h лежит атрибут этого символа; по адресу B800h:0002h лежит код второго символа в верхней строке экрана и т.д.
Выбирайте,то что вам больше нравится и более подходит в конкретной ситуции, но помните, что я описал здесь текстовый режим,не путайте его с графическим!
С уважением,GREYS!
Ответ отправлен: 25.08.2003, 00:30
Отправитель: Greys
Вопрос № 3988 |
Здравствуйте Уважаемые_эксперты!
Кто писал(или знает как) дизасемблер(асемблер и др.)
подскажите как создать структуру по которой
можно было бы определить ВСЕХ комманд CPU.
Необходимо решение для компактной(!) базы данных.
Для этого надо знать - modR/M,SIB,множители и др.
Документация есть кое-какая(zybkov,i386,i486..) но она не в том
чётком структурном виде в каком бы следовало находиться.
Может у кого есть чёткая документация(ссылки)
а желательно поделиться опытом.
Я думаю что я не первый кто с этим сталкивался.
...
Просто противно(!) писать на чужих компиляторах.
(Последняя надежда на этот форум).
Приложение:
Вопрос отправлен: 23.08.2003, 18:24
Отправитель: Yuri (ivanovx@inbox.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Евгений Иванов
Приветствую Вас, Yuri!
Попробуй HLA - есть исходник!
Ответ отправлен: 24.08.2003, 02:34
Отправитель: Евгений Иванов
Отвечает _vt
Приветствую Вас, Yuri!
Поищи статью Криса Касперски "Дизассемблирование в уме"(поможет в понимании) а также файлик pentium.zip (именно в таком виде валяется на многих сайтах четкое структурное описание всех команд процессора pentium(+MMX + 3dNow!))
P.S.
> Просто противно(!) писать на чужих компиляторах.
В таком случае, тебе должно быть также противно писать под "чужой" процессор и под "противные" операционные системы: начни c разработки собственного процессора :-))
---===*** Updated E-Man 1.5 - it's cool!***===---
Ответ отправлен: 24.08.2003, 15:30
Отправитель: _vt
Отвечает Bob Johnson
Приветствую Вас, Yuri!
На моей странице есть небольшой дизассемблер PE файлов с исходниками, написанный на асме. http://bobjohnson.nm.ru
> Просто противно(!) писать на чужих компиляторах.
Да уж... А можно узнать, почему?
* EMan1.5: ---===*** The game we play ***===---
Ответ отправлен: 24.08.2003, 19:51
Отправитель: Bob Johnson
Вопрос № 3989 |
В реальном режиме работы процессора с помощью прерывания int 10h(стандартов VBE) можно установить разрешение экрана и много другой бяки, например:
mov bx,105h
mov al,02h
mov ah,4fh
int 10h
Как я могу осуществить аналогичную операцию в защищённом режиме?
Вопрос отправлен: 23.08.2003, 22:45
Отправитель: Алексей
[Следующий вопрос >>] [Список вопросов]
Отвечает [L2]Max
Приветствую Вас, Алексей!
С помощью int 10 в реальном, а потом переключиться в защищенный (самый простой и одноразовый способ).
Чтобы переключить режим в защищенном режиме, тебе прийдется писать собственный драйвер.
Ответ отправлен: 24.08.2003, 01:42
Отправитель: [L2]Max
Отвечает Bob Johnson
Доброе время суток, Алексей!
Это, видимо, надо делать только один раз, так что переключись в реальный, вызови прерывание, после чего переключись обратно в защищенный.
* EMan1.5: ---===*** The game we play ***===---
Ответ отправлен: 24.08.2003, 19:52
Отправитель: Bob Johnson
Форма отправки вопроса |
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.
(C) 2002-2003 Команда RusFAQ.ru.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту Assembler (37) C / C++ (31) Perl (5) Builder / Delphi (20) Pascal (25) Basic / VBA (10) Java / JavaScript (8) PHP (9) Криптография (9) WinAPI (17) |
Пользователю Windows 95/98/Me (49) Windows NT/2000/XP (62) "Железо" (43) Поиск информации (23) |
Администратору Windows NT/2000/XP (30) Linux / Unix (13) |
Юристу Гражданское право (10) Семейное право (6) Трудовое право (7) КоАП (6) |
Отправить вопрос всем экспертам выбранной рассылки.
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||