Процедура восстановления пароля на сайте 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 - Ошибка создания шрифта ;
Пришлось чуть урезать...
Спасибо!
1. Что есть K&R?
2. Это не инлайн процедура в сикоде. Это одна из асм-процедур в асм-программе. Весь движок будет на асме.
Там пока 30Кб кода и еще 12Кб в inc-файле всяческих прототипов, макросов, констант, структур и т.д.
3. У меня все предусмотрено. В читаемых файлах последняя строка неудаляемая.
4. Нельзя. В eax содержится код ошибки последней выполненной функции для выходного лога. GetLastError - не вариант.
Не устроил тем, что человек не думал, прежде чем ответить, а наколбасил первое решение, которое забрело ему в голову.
Еще не устроило тем, что if - это слишком тупо. Еще не устроило тем, что знаю более подходящее для сишника решение: x = y - x Вот всё решение. И никаких 5 строк не нужно выдумывать и городить 10 огородов. Одна строка и всё.
1. В условиях задачи нет оговорки, что напряжение нестабильно. Но направление мысли очень верное - оградить процедуру от каких только возможно ошибок.
Мужественно рукопожимаю! Держите плюсик.
Я без словаря в крестах не разбираюсь. Как в Хатч в 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
x = 0 // начальная инициализация x = 220 - x // сам тригер
:D :D :D Спасибо за мою же собственную цитату самому же мне. :D
Именно об этом случае я и рассказываю.
Было дело, набирал в проект программеров-сишников. Набрал бы низкоуровневщиков, но их теперь очень мало осталось. А те, что остались, люди в основном инертные.
Так вот, простая задача: написать программу "кнопка-триггер".
Дано:
1. Источник электропитания - y;
2. Проводник - x;
3. Кнопка - программа;
4. Потребитель электропитания (не фигурирует в программе).
Описать принцип кнопки-триггера, переключающей напряжение 220В - 0В.
В абсолютно всех присланных решениях использовались условные операторы if:
if x = 220
x = 0
else
x = 220
endif
Один чел прислал решение xor 220. И его не взял, т.к. решение он подсмотрел. Пишу сам с 2-мя старыми сишниками-знакомыми.
Но надежда есть!
1. Именно это и есть работа админа - на то он и админ. Но не надо путать админа с владельцем. Владелец может совершенно ничего не знать об iptables и sql-ях. Но админ это всё знать обязан, на мой, впрочем, дилетантский взгляд.
2. Понимаю вас: заоблачная высь, стратегический планирование, оперативные разработки, определение тактических задач; управление армиями и фронтами - это всё чрезвычайно интересно и очень круто! Но извините, с вашего позволения, я помогу вам спуститься на землю.
Посмотрите на название вашего топика: Раскрутка форумов на постоянной основе.
Так вот, всё, что я сказал выше про админа и владельца, истинно исключительно для таких форумов, как Сёрч, которые (сюрприииз!) в наших с вами услугах НЕ-НУЖ-ДА-ЮТ-СЯ. А на только что запиленных форумах никаких модеров и админов нет. Владелец форума - он же и админ, и модераторы, и несколько вяло сюсюкающихся между собою пользователей. Вот, такие форумы нуждаются в наших услугах.
Собственно, заниматься раскруткой форума должны не админы, а владельцы. А помогать в этом им должны либо модераторы (слово-то какое, как же оно переводится?), либо мы с вами, если модераторов нет.
3. Я ни сколько не умаляю ваших достоинств, Алексей. У вас безусловно богатый опыт работы и огромный запас теоретических знаний. Учитывая это обстоятельство, мне хотелось бы вас спросить: у вас свой форум есть?
Охо-хо-нюшкиии... Теоретики, как же далеки вы от народа. :(
То есть, вы прикажете админу вычищать все ответы в топике, которые он посчитает непрофессиональными и некомпетентными?
Спасибо.
А вот эту конструкцию я бы переписал. Тяжеловата, на мой вкус ;)