EVALUATE портит строку

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

EVALUATE портит строку

Postby dothen » Sun, 07 Feb 2016, 02:55

Как-то странно работает слово EVALUATE
Если в строке есть кавычки то строка искажается.
Code: Select all
#( task_test_EVALUATE
NoActive
SCONSTANT sc S" calc.exe" START-APP
Action:
 S" 20 2000 BEEP" 2DUP EVALUATE TYPE CR CR \ правильно

 sc TYPE CR CR
 sc EVALUATE
 sc TYPE CR CR \ Портит константу

\ S" S%QUOTE% Hello%QUOTE% TYPE CR" EVAL-SUBST 2DUP TYPE CR 2DUP EVALUATE TYPE CR CR \ Портит строку

\ S" START-APP: notepad.exe" 2DUP EVALUATE TYPE CR TYPE CR CR
\ ??? Наверно EVALUATE с префиксными словами не работает.
)#
dothen
 
Posts: 184
Joined: Mon, 16 Mar 2015, 04:58

Re: EVALUATE портит строку

Postby VoidVolker » Sun, 07 Feb 2016, 14:40

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

Re: EVALUATE портит строку

Postby dothen » Mon, 08 Feb 2016, 11:35

Ну почему это всё не делается в отдельном буфере?
И ноль вставляется прямо в поле параметров константы.

Code: Select all
#( task_test_EVALUATE2
NoActive
    SCONSTANT st1 S" Строка1" TYPE CR
Action:

 st1 CR TYPE CR
 st1 EVALUATE
 st1 TYPE CR \ На место второй кавычки записан ноль.
 st1 CLIPBOARD! CLIPBOARD@ TYPE CR
S" Должно быть: 'S%QUOTE% Строка1%QUOTE% TYPE CR'" EVAL-SUBST TYPE CR CR
)#
dothen
 
Posts: 184
Joined: Mon, 16 Mar 2015, 04:58

Re: EVALUATE портит строку

Postby VoidVolker » Mon, 08 Feb 2016, 12:26

Ну, возможно из-за того, что рассчитано оно было работать с входным потоком из файла еще полтора десятилетия назад в SPF3 и выделять новый буфер на каждую строку или копировать еще куда-то требует дополнительных и затрат ресурсов. Решается просто:
Code: Select all
: EVAL S" " S+ EVALUATE ;
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 4 guests

cron