vbgm

vbgm
Рейтинг
164
Регистрация
26.03.2009

Процедура восстановления пароля на сайте MS написана исключительными дебилами c отрицательным IQ.

"Напишите скрытые символы al*********@gmail.com" - гласит надпись, снизу поле для ввода.

Пишу только скрытые символы, ответ - неправильный email. Понимаю, что надо написать свой email, пишу - все проходит. Образование у скриптеров, писавших сайт VS похоже не больше месяца церковно-приходской.

Бардо:
Кстати все опции сегодня вернулись (не шутка)....

Охренеть! Само собой! :D Как у меня исчезло в Курилке и Духовке!

Ладно, херли тут строить из себя крутых программистов... 🤣

Artisan, постараемся не запутатся.

Вот, собсно, сам проект.

типатаво )


; --------------------------------------------------------------
; Прототипы процедур
;---------------------------------------------------------------
WinMain Proto :DWORD, :DWORD, :DWORD, :DWORD
AddLog Proto :DWORD
AddNumberInLog Proto :DWORD
CloseResouses Proto
CreateLog Proto :DWORD
CreateScene Proto
DestroyDirect3D Proto
GetCurrentTime Proto
InitDirect3D Proto
InitFont Proto :DWORD
InitRender Proto
LdCoreCfgFile Proto
LdLogMesFile Proto
LogOutInFile Proto
LogOutInText Proto
RenderScene Proto
SetupCore Proto

; #############################################################################
RGB macro red, green, blue
xor eax,eax
mov ah,blue
shl eax,8
mov ah,green
mov al,red
endm

; #############################################################################
SYSTEMTIME STRUCT
wYear WORD ?
wMonth WORD ?
wDayOfWeek WORD ?
wDay WORD ?
wHour WORD ?
wMinute WORD ?
wSecond WORD ?
wMilliseconds WORD ?
SYSTEMTIME ENDS

; #############################################################################
.CONST
RoutStart EQU 0 ; Старт игры
RoutMainMenu EQU 1 ; В главном меню
RoutLoading EQU 2 ; Загрузка игры
RoutSerfing EQU 3 ; Передвижение по карте
RoutInventory EQU 4 ; В инвентаре
RoutPDA EQU 5 ; Находимся в ПДА
RoutDialog EQU 6 ; В режиме диалога
; ------------------------------------------------------------------------
; Система вывода логов
; ------------------------------------------------------------------------
NoLogs EQU 0 ; Нет прохода к выводу логов
LogCreate EQU 00000001b ; Создание лога
LogOutText EQU 00000010b ; Вывод лога на экран
LogOutBoth EQU 00000011b ; Вывод лога туда-сюда
; ------------------------------------------------------------------------
; Константы сообщений логов
; ------------------------------------------------------------------------
OK EQU 0
ERROR EQU 1
EXIT EQU 2
LOG_RADIUM_START EQU 3
LOG_CORE_SETUP EQU 4
LOG_CORE_CFG_LOADING EQU 5
LOG_CORE_CFG_OPEN EQU 6
LOG_CORE_CFG_ERROR EQU 7
LOG_HEAPALLOC_OK EQU 8
LOG_HEAPALLOC_ERROR EQU 9
LOG_CORE_CFG_READ EQU 10
LOG_CORE_CFG_READ_ERROR EQU 11
LOG_CORE_CFG_INDEXED EQU 12
LOG_BYTES_STORED EQU 13
; #############################################################################
.DATA
ClassName DB "R3DEClass", NULL ; Имя класса окна
szAppName DB "Radium 3D Engine V1.05", NULL ; Титл окна
WinX DD ? ; Ширина окна
WinY DD ? ; Высота окна

Clearcolor DD 0
Zvalue DD 1.0f
; ------------------------------------------------------------------------
; Система вывода логов
; ------------------------------------------------------------------------
LogLength DD 160 ; Максимальная длина строки
BufferLogs DD ? ; Адрес буфера строк для логов
OffsetBuffer DD ? ; Смещение на адрес на текущую строку лога
OffsetBufferTime DD ? ; Смещение на адрес первого ->
; -> символа после даты\времени
LogColor DD 0F0B0F0F0h ; Цвет шрифта логов
CurrentProcNumber DD ? ; Текущая процедура для логов
; ------------------------------------------------------------------------
; Числовые форматы для wsprintf
; ------------------------------------------------------------------------
DefaultFormat DB "%d ", 0
DigitSFormat DB "%d ", 0 ; Формат для простого числа
Digit3Format DB "%03d", " - #", 0 ; Формат для миллисекунд
DigitProcFormat DB "%08X", " - " ; Формат для номера процедуры
NumberString DB 20 DUP (0) ; Буфер для даты\времени
; ------------------------------------------------------------------------
; D3DPRESENT_PARAMETERS
; ------------------------------------------------------------------------
BackBufferWidth DD 0 ; Ширина BackBuffer
BackBufferHeight DD 0 ; Высота BackBuffer
BackBufferFormat DD D3DFMT_X8R8G8B8 ; Формат используемой поверхности
BackBufferCount DD 3 ; число Back буферов.
MultiSampleType DD 0 ; уровни мультисэмплинга картинки. (обычно от 2-ух и выше)
MultiSampleQuality DD 0 ;
SwapEffect DD D3DSWAPEFFECT_FLIP ; Эффект обмена поверхностей (BackBuffer)
hDeviceWindow DD 0 ; ID нашего окошка
Windowed DD 0 ; 0 - полноэкранный, 1 - в окошке
EnableAutoDepthStencil DD TRUE ; 1 - Direct3D создает Z + Stencil буфер. Если 0 - ничего не будет создано
AutoDepthStencilFormat DD D3DFMT_D24S8 ; Формат используемой поверхности
Flags DD 0 ; 0 или D3DPRESENTFLAG_LOCKABLE_BACKBUFFER=1
FullScreen_RefreshRateInHz DD 0 ; Частота обновления экрана в Hz
FullScreen_PresentationInterval DD 0 ; Интервал показа на экране backbufferа. 1 = Ждать обратного хода луча

EyeVector D3DVECTOR <0.0f, 3.7f, -9.35f> ; Координаты камеры в пространстве
LookAtVector D3DVECTOR <0.0f,6.0f, 0.0f> ; Указывает куда смотрит камера
UpVector D3DVECTOR <0.0f, 1.0f, -0.0f> ; Верх камеры. Обычно берется 0.0,1.0,0.0

FieldOfView DD 1.7953981635f ; D3DX_PI4 ;0.7853981635f. Поле обзора камеры в радианах обычно берется (D3DX_PI/4)
AspectRatio DD NULL ; AspectRatio
NearViewPlanZ DD 1.0f ; Передняя отсекающая плоскость
FarViewPlanZ DD 100.0f ; Задняя отсекающая плоскость
; ------------------------------------------------------------------------
; LOGFONT - Параметры шрифта
; ------------------------------------------------------------------------
lfHeight DD 0 ; Размер
lfWidth DD 0 ;
lfEscapement DD 1 ;
lfOrientation DD 0 ;
lfWeight DD 0 ;
lfItalic DB 1 ; Кириллица поддерживается здесь
lfUnderline DB 0 ;
lfStrikeOut DB 0 ;
lfCharSet DB ANSI_CHARSET ; Кодировка по умолчанию
lfOutPrecision DB 0 ;
lfClipPrecision DB 0 ;
lfQuality DB 1 ;
lfPitchAndFamily DB 0 ;
lfFontName DB "tahoma", 0 ; Имя шрифта
; ------------------------------------------------------------------------
; Секция имен файлов
; ------------------------------------------------------------------------
nLogMessagesFile DB "config\log.msgs", NULL
nLogFile DB "log.txt", NULL
nCoreCfgFile DB "config\core.cfg", NULL

; #############################################################################
.DATA?
pd3d DD ? ; или LPDIRECT3D9
pd3dDevice DD ? ; или LPDIRECT3DDEVICE9

WorldMatrix D3DMATRIX <?> ; Мировая матрица
ViewMatrix D3DMATRIX <?> ; Матрица вида
ProjectionMatrix D3DMATRIX <?> ; Матрица проекции

pd3dFont DD ? ; Указатель на шрифт

TextLeftSet DD ? ; Установка для вывода текста
TextUpSet DD ? ; -

TextLeft DD ? ; Прямоугольник для вывода текста
TextUp DD ? ; -
TextRight DD ? ; -
TextBottom DD ? ; -

StringHeight DD ? ; Высота строки на экране
; ------------------------------------------------------------------------
; Состояние игры
; ------------------------------------------------------------------------
; 0 - Старт
; 1 - Главное меню
; 2 - Загрузка
; 3 - Передвижение по территории
; 4 - Инвентарь
; 5 - ПДА (карта, задания, статистика)
; 6 - Диалоги
; ------------------------------------------------------------------------
CurrentGameRoutine DD ?
; ------------------------------------------------------------------------

; ########################################################################
; Все коды ошибок в EBX. В EAX -
; 0 - Нет ошибок
; 1 - Ошибка создания D3DX9
; 2 - Ошибка создания устройства D3DX9
; 3 - Ошибка создания шрифта
;

Пришлось чуть урезать...

Спасибо!

Artisan:

1. Я писал без крестов, K&R, вот это наше все.

2. ASM в Вашем образце, культура кодирования отвратительная. В самом начале процедуры должно быть описание, вход, выход, действия. Зачем вообще ассемблер для этой задачи? Страдают читаемость и переносимость.

3. Не обязательно строка файла заканчивается LF знаком, последняя строка может быть без LF знака, Вы такую строку не считаете.

4. Выходной код лучше отдавать в обычном eax регистре.

1. Что есть K&R?

2. Это не инлайн процедура в сикоде. Это одна из асм-процедур в асм-программе. Весь движок будет на асме.

Там пока 30Кб кода и еще 12Кб в inc-файле всяческих прототипов, макросов, констант, структур и т.д.

3. У меня все предусмотрено. В читаемых файлах последняя строка неудаляемая.

4. Нельзя. В eax содержится код ошибки последней выполненной функции для выходного лога. GetLastError - не вариант.

Flector:

1. а чем вас if не устроил?
или вы из тех, кому не конечный результат, а красота кода важнее?

2. у меня ребенок сейчас ходит на курсы программирования, ему 10 лет.
я ему всегда говорю - чем проще код, то тем легче его потом понять и изменить.

Не устроил тем, что человек не думал, прежде чем ответить, а наколбасил первое решение, которое забрело ему в голову.

Еще не устроило тем, что if - это слишком тупо. Еще не устроило тем, что знаю более подходящее для сишника решение: x = y - x Вот всё решение. И никаких 5 строк не нужно выдумывать и городить 10 огородов. Одна строка и всё.

edogs:
1. Не предусмотрена ситуация, когда x оказывается 210 (допустим), задумайтесь об этом.

1. В условиях задачи нет оговорки, что напряжение нестабильно. Но направление мысли очень верное - оградить процедуру от каких только возможно ошибок.

Мужественно рукопожимаю! Держите плюсик.

Artisan:
А судьи кто?

if (x > 110)
x = 0; else
x = 220;

Я без словаря в крестах не разбираюсь. Как в Хатч в masm32 организовал макрос, так я и пишу сейчас.

Судья я. Вот мой пример, прошу критики.


LdCoreCfgFile Proc

.CODE
; -------------------------
; Сохраняем номер процедуры
;--------------------------
mov CurrentProcNumber, 00020004h

invoke CreateLog, LOG_CORE_CFG_LOADING
invoke LogOutInFile
; --------------------------------------
; Читаем файл core.cfg с настройками ядра
; --------------------------------------
invoke CreateFile, ADDR nCoreCfgFile,
GENERIC_READ,
NULL,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL

mov hCoreCfgFile, eax
; --------------------------------------
; Проверка
; --------------------------------------
.if eax == 0
invoke CreateLog, LOG_CORE_CFG_ERROR
invoke LogOutInFile
mov ebx, 1
ret
.elseif
invoke CreateLog, LOG_CORE_CFG_OPEN
invoke LogOutInFile
.endif
; --------------------------------------
invoke GetFileSize, hCoreCfgFile, NULL
mov sCoreCfgFile, eax
; --------------------------------------
; Выделяем память для сообщений
; --------------------------------------
invoke HeapAlloc, hHeap, NULL, sCoreCfgFile
mov pCoreCfg, eax
; --------------------------------------
; Проверка
; --------------------------------------
.if eax == 0
invoke CreateLog, LOG_HEAPALLOC_ERROR
invoke LogOutInFile
mov ebx, 1
ret
.elseif
invoke CreateLog, LOG_HEAPALLOC_OK
invoke LogOutInFile
.endif
; --------------------------------------
invoke ReadFile, hCoreCfgFile,\
pCoreCfg,\
sCoreCfgFile,\
ADDR FileReadWrite,\
NULL
; --------------------------------------
; Проверка
; --------------------------------------
.if eax == 0
invoke CreateLog, LOG_CORE_CFG_READ_ERROR
invoke LogOutInFile
mov ebx, 0
ret
.elseif
invoke CreateLog, LOG_CORE_CFG_READ
invoke AddNumberInLog, FileReadWrite
invoke AddLog, LOG_BYTES_STORED
; --------------------------------
invoke LogOutInFile
.endif
; --------------------------------------
invoke CloseHandle, hCoreCfgFile
; --------------------------------------
; Вычисляем количество строк
; --------------------------------------
mov esi, pCoreCfg ; Указатель на загруженные данные
xor ebx, ebx ; Обнуляем счетчик строк
mov ecx, sCoreCfgFile ; Размер загруженных данных
push ecx
cld

LdCoreCfgFileLoop01:
lodsb
cmp al, 0Ah ; Проверяем на перевод строки
je LdCoreCfgFilePlus01 ; Истинно - идем плюсовать счетчик
loop LdCoreCfgFileLoop01 ; Ложно - идем дальше
jmp LdCoreCfgFileComplete01

LdCoreCfgFilePlus01:
inc ebx ; Увеличиваем счетчик на 1
loop LdCoreCfgFileLoop01 ; Данные не кончились - продолжаем

LdCoreCfgFileComplete01:
mov nCoreCfg, ebx ; В EBX количество строк

inc ebx
shl ebx, 3 ; Умножаем на 8 байт (2 по 4)
invoke HeapAlloc, hHeap, NULL, ebx
mov tCoreCfg, eax
; --------------------------------------
; Проверка
; --------------------------------------
.if eax == 0
invoke CreateLog, LOG_HEAPALLOC_ERROR
invoke LogOutInFile
mov ebx, 1
ret
.elseif
invoke CreateLog, LOG_HEAPALLOC_OK
invoke LogOutInFile
.endif
; --------------------------------------
; Индексируем сообщения
; --------------------------------------
pop ecx ; В ECX количество символов
mov esi, pCoreCfg ; Указатель на загруженные данные
mov edx, tCoreCfg ; Указатель на таблицу адресов строк
cld

LdCoreCfgFileLoop021:
mov ebx, esi ; Для вычисления длины строки
mov [edx], esi ; Сохраняем адрес
add edx, 4

LdCoreCfgFileLoop022:
lodsb
cmp al, 0Ah
je LdCoreCfgFilePlus02 ; Истинно - идем плюсовать счетчик
loop LdCoreCfgFileLoop022 ; Ложно - идем дальше
jmp LdCoreCfgFileComplete02

LdCoreCfgFilePlus02:
mov eax, esi ;
sub eax, ebx ; Разница = длина пройденной строки
mov [edx], eax ; Сохраняем длину строки
add edx, 4 ; Прибавляем для следующего захода

loop LdCoreCfgFileLoop021
jmp LdCoreCfgFileExit

LdCoreCfgFileComplete02:
mov eax, esi ;
sub eax, ebx ; Разница = длина пройденной строки
mov [edx], eax
; --------------------------------------
; Индексировано успешно
; --------------------------------------
LdCoreCfgFileExit:
invoke CreateLog, LOG_CORE_CFG_INDEXED
invoke LogOutInFile
; --------------------------------------
xor ebx, ebx ; Выходной код процедуры "Нет ошибки"
ret

LdCoreCfgFile EndP
admak:
xor - это классика ассемблера. :)

Держите еще один вариант, тоже классика:

x = 0 // начальная инициализация


x = 220 - x // сам тригер

:D :D :D Спасибо за мою же собственную цитату самому же мне. :D

Именно об этом случае я и рассказываю.

Wadim:
В результате долгого и нудного отбора программистов под разные, я пришел к выводу, что надо научиться хоть минимально проверять их знания. Что происходит в противном случае многие знают.

Кто-нибудь так еще делает? Какие общие тестовые вопросы задаете программистам?
Или только конкретные тестовые задания?

Было дело, набирал в проект программеров-сишников. Набрал бы низкоуровневщиков, но их теперь очень мало осталось. А те, что остались, люди в основном инертные.

Так вот, простая задача: написать программу "кнопка-триггер".

Дано:

1. Источник электропитания - y;

2. Проводник - x;

3. Кнопка - программа;

4. Потребитель электропитания (не фигурирует в программе).

Описать принцип кнопки-триггера, переключающей напряжение 220В - 0В.

В абсолютно всех присланных решениях использовались условные операторы if:

if x = 220

x = 0

else

x = 220

endif

Один чел прислал решение xor 220. И его не взял, т.к. решение он подсмотрел. Пишу сам с 2-мя старыми сишниками-знакомыми.

Но надежда есть!

Алексей Фоменко:

1. Те, кто не знает, что такое работа админа поголовно считают - его главная и святая обязанность стать живой капчей форума, то есть не пропускать ни ботов, ни ручных ботов, ни школоты разного толка на форум.

2. На самом деле задача админа заключается в организации жизни форума - чтобы люди общались, чтобы боты хрумы проходили мимо автоматом, чтобы модеры на форуме занимались развитием своих разделов, чтобы банально эти модеры на форуме были и т.д. и т.д. и т.д.

3. Так что прежде чем критиковать, сначала потрудитесь поработать в роли админа на форуме, а не просто в роли вебмастера, которые всё сам делает и капчует и антиботует и отвечает каждому встречному и поперечному и т.д.

1. Именно это и есть работа админа - на то он и админ. Но не надо путать админа с владельцем. Владелец может совершенно ничего не знать об iptables и sql-ях. Но админ это всё знать обязан, на мой, впрочем, дилетантский взгляд.

2. Понимаю вас: заоблачная высь, стратегический планирование, оперативные разработки, определение тактических задач; управление армиями и фронтами - это всё чрезвычайно интересно и очень круто! Но извините, с вашего позволения, я помогу вам спуститься на землю.

Посмотрите на название вашего топика: Раскрутка форумов на постоянной основе.

Так вот, всё, что я сказал выше про админа и владельца, истинно исключительно для таких форумов, как Сёрч, которые (сюрприииз!) в наших с вами услугах НЕ-НУЖ-ДА-ЮТ-СЯ. А на только что запиленных форумах никаких модеров и админов нет. Владелец форума - он же и админ, и модераторы, и несколько вяло сюсюкающихся между собою пользователей. Вот, такие форумы нуждаются в наших услугах.

Собственно, заниматься раскруткой форума должны не админы, а владельцы. А помогать в этом им должны либо модераторы (слово-то какое, как же оно переводится?), либо мы с вами, если модераторов нет.

3. Я ни сколько не умаляю ваших достоинств, Алексей. У вас безусловно богатый опыт работы и огромный запас теоретических знаний. Учитывая это обстоятельство, мне хотелось бы вас спросить: у вас свой форум есть?

Алексей Фоменко:
Самый эффективный способ развития любого форума - это работа на опереженение. То есть ответы всегда должны быть профессиональными и компетентными...

Охо-хо-нюшкиии... Теоретики, как же далеки вы от народа. :(

То есть, вы прикажете админу вычищать все ответы в топике, которые он посчитает непрофессиональными и некомпетентными?

MoMM:
vbgm, вы монстр орфографии, в хорошем смысле этого слова. Я уже было начал думать, что таких людей больше не осталось. Большое спасибо за глоток чистого, по зимнему хрустально звенящего орфографического воздуха.

Спасибо.

MoMM:
Я уже было начал думать...

А вот эту конструкцию я бы переписал. Тяжеловата, на мой вкус ;)

Всего: 3274