Ошибка MsgBox

Обсуждение программ nnCron и nnCron LITE

Ошибка MsgBox

Postby mihast » Thu, 06 Aug 2015, 06:12

Не корректно отображает сообщение :(

см. скриншот
http://prntscr.com/81djdu
mihast
 
Posts: 51
Joined: Tue, 23 Aug 2005, 21:14

Re: Ошибка MsgBox

Postby VoidVolker » Thu, 06 Aug 2015, 15:18

MsgBox работает с AZ строками. Т.е., передаваемая длина стркои игнорируется и выводится строка вполть до нуля. Это особенность работы WINAPI, т.к. это слово просто обертка для него.
Code: Select all
S" test" SWAP OVER S>ZALLOC SWAP MsgBox
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Ошибка MsgBox

Postby mihast » Thu, 06 Aug 2015, 15:47

[quote="VoidVolker"]MsgBox работает с AZ строками. Т.е., передаваемая длина стркои игнорируется и выводится строка вполть до нуля. Это особенность работы WINAPI, т.к. это слово просто обертка для него.

В документации про ЭТО ни слова. Просьба, чтобы не нарушать единообразие описаний сделать все-таки этот MsgBox не напрямую через API, а так как Вы это сделали в коде - через дополнительную AZ строку. Ведь это не сложно ?

Поймите, такие завуалированные "фитчи" сильно осложняют отладку...
mihast
 
Posts: 51
Joined: Tue, 23 Aug 2005, 21:14

Re: Ошибка MsgBox

Postby VoidVolker » Thu, 06 Aug 2015, 16:09

Так это в консоли надо только. А в нормальной ситуации при компиляции строки к ней всегда в конце дописывается ноль.
Code: Select all
: test S" test" MsgBox ;

Еще можно вот так:
Code: Select all
S" test long string" DROP 4 2DUP + 0 SWAP C! MsgBox


mihast wrote:Просьба, чтобы не нарушать единообразие описаний сделать все-таки этот MsgBox не напрямую через API, а так как Вы это сделали в коде - через дополнительную AZ строку. Ведь это не сложно ?

Code: Select all
: MsgBox SWAP OVER S>ZALLOC SWAP MsgBox ;

Вот только это приведет к утечке памяти и так делать нельзя.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Ошибка MsgBox

Postby mihast » Thu, 06 Aug 2015, 17:00

Хорошо, расскажу как я с этим столкнулся.

Я делаю анализ сложных по строению логов. Там может быть несколько уровней вложенности с переменным числом элементов в каждом уровне.

Это дело надо отлаживать. Я разворачиваю много строчную конструкцию в одну строку и делаю ее анализ и разбор.

Для отладки хотел использовать MsgBox, т.е. вычислил границы элемента, а затем (А0 смещение +) ДлинаЭлемента MsgBox
Ведь для этого и придумали AU строки, чтобы проще работать...

----
Понятно, что если использовать S>ZALLOC и не освобождать память (кстати, а КАК это сделать), то будут утечки, но в Ядре - то Вы знаете, что после исполнения MsgBox память можно освободить, даже слова специальные есть для работы с Кучей...
----

Посмотрел в исходниках, S+ тоже использует ALLOCATE, а у меня все это крутится во вложенных циклах и логи больше 500 Мб (> 10 млн.строк...)
Так КАК освобождать память ?
mihast
 
Posts: 51
Joined: Tue, 23 Aug 2005, 21:14

Re: Ошибка MsgBox

Postby VoidVolker » Thu, 06 Aug 2015, 19:40

Code: Select all
10240 ALLOCATE THROW    \ addr
FREE THROW
10240 GLOBAL-ALLOCATE THROW    \ addr
GLOBAL-FREE THROW

Кроме того, после окончания работы любой задачи память, занятая в процессе работы этой задачи освобождается автоматически. За исключением глобальной памяти.
MsgBox для отладки - очень неудобно. Для этого отлично подходит консоль:
Code: Select all
S" Any message" TYPE
." Message to console in compilation state"
.( Message to concole int interpratation state)
12345 .

Если очень хочется использовать именно MsgBox, то можно сделать так:
Code: Select all
1024 CONSTANT /msgBuf
CREATE msgBuf /msgBuf ALLOT
: Msg   \ ( a u -- )
    /msgBuf MIN    \ a u
    SWAP OVER   \ u a u
    msgBuf SWAP CMOVE
    0 OVER msgBuf + !
    msgBuf SWAP
    MsgBox
;
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Ошибка MsgBox

Postby mihast » Fri, 07 Aug 2015, 10:35

Про отладку через консоль - Да, удобно, пользуюсь. Но у MsgBox есть неоспоримое преимущество. При его вызове дальнейшая работа приостанавливается. Удобно отслеживать - а в том ли направлении я двигаюсь. При нажатии на Ок - идем дальше, а для прерывания процесса - изменяем и перезаписываем КронТаб.
mihast
 
Posts: 51
Joined: Tue, 23 Aug 2005, 21:14


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 3 guests

cron