Viktor
Попробуй ради интереса эти регистры сначала занулить
Aiwan \ (•◡•) / _bot
нет
Aiwan \ (•◡•) / _bot
cinvoke wsprintf,readBuf,mes1,\
[lpConsoleScreenBufferInfoEx.cbSize],\
[lpConsoleScreenBufferInfoEx.dwSize.x],\
[lpConsoleScreenBufferInfoEx.dwSize.y],\
...
Viktor
А просто u/d нормально работают? Что насчёт hx?
Aiwan \ (•◡•) / _bot
mes1 du 'Размер структуры cbSize %lu',13,10,\
'Размере буфера dwSize %hu','x','%hu',13,10,\
'Координаты курсора dwCursorPosition %hd,%hd',13,10,\
Aiwan \ (•◡•) / _bot
🦥Alex Fails
mes1 du 'Размер структуры cbSize %lu',13,10,\
'Размере буфера dwSize %hu','x','%hu',13,10,\
'Координаты курсора dwCursorPosition %hd,%hd',13,10,\
У тебя на гитхабе репа есть?
Aiwan \ (•◡•) / _bot
Viktor
А это вообще нормально что в masm все в квадратных скобках?
Viktor
Странный он какой-то
Aiwan \ (•◡•) / _bot
fasm
Viktor
fasm
Хм, не различаю их :(
Aiwan \ (•◡•) / _bot
а для вордов что тогда?
Viktor
Это чтобы проверить
Aiwan \ (•◡•) / _bot
Viktor
Попробуй ещё для интереса убрать cbSize
Viktor
Но вообще странно, "должно работать" (c)
Aiwan \ (•◡•) / _bot
работает тлько с %hd, я так понимаю это и есть норма
Viktor
Так hx тоже некорректно работает?
Aiwan \ (•◡•) / _bot
я непойму пойму почему при числе 120 знаковое и безнаковая маска дает разные результаты
Viktor
Viktor
Да это чтобы проверить
Viktor
Но вообще u по идее должно давать результат отличный от d только на отрицательных числах, так что очень странно
Viktor
Viktor
А ты уверен, что там 120?
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
но там в инклуд kerenel32.inc надо сточку добавить с функцие GetConsoleScreenBufferInfoEx, ее там нет
Aiwan \ (•◡•) / _bot
там только младшая фунция, без Ex
Aiwan \ (•◡•) / _bot
мои вопросы наверное иногда ставят в тупик
🦥Alex Fails
Да я знаю это апи. Более того,я юзал недокументированную версию соседнего апи, которое устанавливает инфо о буфере, чтобы рисовать 2д-графон в консоли))
Aiwan \ (•◡•) / _bot
у мя более простая задача
Aiwan \ (•◡•) / _bot
изменить размер окна и буфера через эту структуру, чтоб негородить условия зависимости изменеия окна и буфера
🦥Alex Fails
Так там не сложно ж
Aiwan \ (•◡•) / _bot
🦥Alex Fails
Aiwan \ (•◡•) / _bot
а можно и через структуру вроде, по крайней мере хочу попробовать
Aiwan \ (•◡•) / _bot
заполняю структуру через GetConsoleScreenBufferInfoEx, меняю необходимые поля, и отпраляю структуру в систему тем самым меня нужные мне координаты
s54820
Интересно. Сложно сказать, что из этого всего сломано. С одной стороны, cinvoke и ccall в фасм кладут word в стек именно как word, не затирая старших битов аргумента (а там как раз остатки былого праздника). С другой стороны, wsprintf почему-то не задумываясь читает аргументы целым dword (или qword), не обнуляя после этого старшие биты. При этом, например, printf в Си таким не страдает и работает, как ожидается. В 32-битном коде, кстати, та же проблема. И я как-то даже не могу придумать, где посмотреть такие тонкие детали про конвенции вызова. Думаю, что не прав всё же фасм.
🦥Alex Fails
Над реверсить сишный код вызова спринтфа и смотреть, как в нем пушится (емним там по размеру пойнтера)
електр🟢нік ✙🟠рчбеч ඞ
годболт в помощь?
Aiwan \ (•◡•) / _bot
я буду использовать %hd
Aiwan \ (•◡•) / _bot
с ним вывод правильный
Aiwan \ (•◡•) / _bot
имеет ли значение что у меня юникод?
s54820
имеет ли значение что у меня юникод?
Нет, тут проблема глубже. Имеет значение, что фасм кладет ворд как есть, а не делает movzx. И заодно имеет значение то, что в 32-битном коде это бы не скомпилировалось, потому что в 32-битном cinvoke явно делается pushd, перекладывая проблему на твои плечи, а вот в 64-битном cinvoke делаются mov в стек, которые вполне счастливы делать это с word.
Aiwan \ (•◡•) / _bot
и еще вопрос как вывести 4 байта маской в hex. %x - неправильно, %hx - неправильно, %lx - неправильно, а вывожу это ...
s54820
Почему %x неправильно?
Aiwan \ (•◡•) / _bot
sek
Aiwan \ (•◡•) / _bot
mes2 du 'Настройки цвета консоли ColorTable',13,10,\
'[0]=%x ','[1]=%x ','[2]=%x ','[3]=%x ','[4]=%x ','[5]=%x ','[6]=%x ','[7]=%x ',13,10,\
'[8]=%x ','[9]=%x ','[10]=%x ','[11]=%x ','[12]=%x ','[13]=%x ','[14]=%x ','[15]=%x ',0
mes2Len = ($-mes2)/2
...
...
cinvoke wsprintf,readBuf,mes2,\
[lpConsoleScreenBufferInfoEx.ColorTable+4*0],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*1],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*2],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*3],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*4],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*5],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*6],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*7],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*8],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*9],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*10],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*11],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*12],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*13],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*14],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*15]
Aiwan \ (•◡•) / _bot
и табуляция смущает еще, откуда она?
Aiwan \ (•◡•) / _bot
ладно, я спать, днем разберемся как нить
s54820
mes2 du 'Настройки цвета консоли ColorTable',13,10,\
'[0]=%x ','[1]=%x ','[2]=%x ','[3]=%x ','[4]=%x ','[5]=%x ','[6]=%x ','[7]=%x ',13,10,\
'[8]=%x ','[9]=%x ','[10]=%x ','[11]=%x ','[12]=%x ','[13]=%x ','[14]=%x ','[15]=%x ',0
mes2Len = ($-mes2)/2
...
...
cinvoke wsprintf,readBuf,mes2,\
[lpConsoleScreenBufferInfoEx.ColorTable+4*0],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*1],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*2],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*3],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*4],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*5],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*6],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*7],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*8],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*9],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*10],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*11],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*12],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*13],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*14],\
[lpConsoleScreenBufferInfoEx.ColorTable+4*15]
У тебя там ColorTable байтами, и в аргументы летит байт, а я ведь предлагал сделать dd вместо COLORREF, чтобы было ColorTable rd 16.
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
s54820
Aiwan \ (•◡•) / _bot
значит мож и там выше также сделать в зависимости от размера поля
Aiwan \ (•◡•) / _bot
вот на данный момент послений вариант, мож кто поэксперементирует
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
там только 1 дворд - это первй параметр, я его указал как %lu, остальные почти все просто word
Aiwan \ (•◡•) / _bot
щас воторую часть надо оформить
Aiwan \ (•◡•) / _bot
я спать
Aiwan \ (•◡•) / _bot
теперь такая трабла, почему не до конца строка выводится?
Теребишь сильно.
Aiwan \ (•◡•) / _bot
чт ты имеешь ввиду?
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
ааа
Yura
ааа
а что кстати исопльзуешь для ввода-вывода в фасме? виндовые функции для консолей?