Вопрос - Ответ

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

Re: Вопрос - Ответ

Postby VoidVolker » Wed, 21 Dec 2011, 21:18

SphinxST wrote:Все-таки, классические языки в этом плане удобны...

Просто там инструментов больше, т.к. в них вложены огромные ресурсы, по сравнению с фортом. И уж тем более условно-бесплатным ннкроном.
SphinxST wrote:А с Lists надо покопаться. Проблема которую я вижу сразу в вашем примере, создается 1 список для первого параметра, второй - для второго и т.д. Удобно в использовании, но учитывая что каждый параметр это 20-40 символов, код заполнения списка будет нечитабелен и соответствующие параметры из разных списков будет сложно связать Еще было бы здорово если б задача сама определяла длину списка.Т.е. что я пытаюсь добиться - это код задачи статичен и полностью управляется параметрами. Требуется запустишь бакап еще на пару каталожек - добавили еще 1 элемент в список и все.

Code: Select all
<%
GLOBAL-STRING-LIST: Params
: AllParams   \ ( -- a u ... an un )
  \ Пара 1
    " param1"
    " param1a"
  \ Пара 2
    " param2"
    " param2a"
  \  Пара 3
    " param3"
    " param3a"
;
Params[ AllParams ]Params
%>

Число параметров может быть любым, главное чтобы их было четное число и не было пустых строк.
Code: Select all
BEGIN Params@ DUP WHILE
  " BACKUP_LAUNCH_CMD %2SWAP% %Params@% " START-APPW
REPEAT
2DROP


Как вариант все параметры можно вынести в отдельный файл, а в задаче просто его загружать:
Code: Select all
#( Задача_222821122011
NoActive
STRING-LIST: Params
Action:
" C:\params.txt" READ-BY-LINE
  FOUND-LINE Params!
;READ-BY-LINE

BEGIN Params@ DUP WHILE
  " BACKUP_LAUNCH_CMD %2SWAP% %Params@% " START-APPW
REPEAT
2DROP
Params LIST-FREE
)#
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Вопрос - Ответ

Postby Morituruz » Fri, 23 Dec 2011, 11:50

Есть ли способ создать переменную для работы с числами двойной длины, чтобы она была уникальной для каждой задачи (т.е. задачи не мешали друг-другу), т.е. аналог USER var1?
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Вопрос - Ответ

Postby VoidVolker » Fri, 23 Dec 2011, 16:35

Code: Select all
: 2USER   USER-CREATE 2 CELLS USER-ALLOT ;
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Вопрос - Ответ

Postby Morituruz » Sat, 24 Dec 2011, 11:07

Спасибо!
Вопрос: заметил вдруг, что слова MIXER-UP и MIXER-DOWN выводят на консоль числа. Это нормально (если да, то зачем?)?
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Вопрос - Ответ

Postby Wyz » Sat, 24 Dec 2011, 12:07

Вряд ли :-)
Code: Select all
: MIXER-VOLUME ( -- vol) ['] MIXER-VOL-ID MIXER-GET DUP . ;


Для фикса когда-то прописал в nncron.ini:
Code: Select all
MODULE: MIXER
: MIXER-VOLUME-FIXED ( -- vol) ['] MIXER-VOL-ID MIXER-GET ;
' MIXER-VOLUME-FIXED ' MIXER-VOLUME JMP
;MODULE
Wyz
 
Posts: 389
Joined: Tue, 11 Dec 2007, 01:42

Re: Вопрос - Ответ

Postby Morituruz » Sat, 24 Dec 2011, 12:19

Мда, не ожидал я подобного от таких древних слов. Спасибо!
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Вопрос - Ответ

Postby VoidVolker » Sat, 24 Dec 2011, 13:30

Moriturus wrote:Спасибо!
Вопрос: заметил вдруг, что слова MIXER-UP и MIXER-DOWN выводят на консоль числа. Это нормально (если да, то зачем?)?

Видать просто автор забыл убрать пару отладочных слов. Вот так это можно исправить:
Code: Select all
0xC3 ' MIXER-VOLUME 15 + C!

Просто заменяем вызов DUP на возврат(RET).
Оригинал:
Code: Select all
SEE MIXER-VOLUME

50DAC7 83ED04           SUB     EBP , # 4
50DACA C74500A2D55000   MOV     0 [EBP] , # 50D5A2
50DAD1 E8CDFDFFFF       CALL    50D8A3  ( MIXER-GET )
50DAD6 E83B45FAFF       CALL    4B2016  ( DUP )
50DADB E8B586FAFF       CALL    4B6195  ( . )
50DAE0 C3               RET     NEAR

После замены:
Code: Select all
SEE MIXER-VOLUME

50DAC7 83ED04           SUB     EBP , # 4
50DACA C74500A2D55000   MOV     0 [EBP] , # 50D5A2
50DAD1 E8CDFDFFFF       CALL    50D8A3  ( MIXER-GET )
50DAD6 C3               RET     NEAR
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Вопрос - Ответ

Postby Morituruz » Tue, 03 Jan 2012, 00:08

Как пользоваться этим словом? Оно ведь должно декодировать из base64?
Code: Select all
: debase64 ( addr u dest -- addr1 u1 )
  abase !
  DUP 0= IF 2DROP abase @ 0 EXIT THEN
  lbase 0! nbase 0!
  0 SWAP
  0 ?DO
    OVER I + C@ DUP [CHAR] = =
    IF DROP 0 nbase 1+! ELSE -AL64 DROP THEN 3 I 4 MOD - 0 ?DO 64 * LOOP +
    I 4 MOD 3 = IF abase @ lbase @ + DUP >R !
    R@ C@ R@ 2 CHARS + C@ R@ C! R> 2 CHARS + C!
    3 lbase +! 0 THEN
  LOOP 2DROP abase @ lbase @ nbase @ - 0 MAX
;
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Вопрос - Ответ

Postby VoidVolker » Tue, 03 Jan 2012, 00:21

Code: Select all
CREATE b1 16 ALLOT
CREATE b2 16 ALLOT
S" test123" b1 base64            \ a u
b2 debase64 TYPE CR
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Вопрос - Ответ

Postby Morituruz » Tue, 03 Jan 2012, 01:22

Спасибо, только всё равно не получается.
Хочу раскодировать сабжект письма, но не могу понять откуда-куда надо гонять.
Code: Select all
Subject: =?UTF-8?B?VG9waWMgcmVwbHkgbm90aWZpY2F0aW9uIC0gItCS0L7Qv9GA0L7RgSAtINCe?= =?UTF-8?B?0YLQstC10YIi?=
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Эта штука говорит, что надо из Base64 - UTF-8
artlebedev.ru/tools/decoder/
но как?
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Вопрос - Ответ

Postby VoidVolker » Tue, 03 Jan 2012, 09:13

Code: Select all
CREATE sbuf 256 ALLOT
" VG9waWMgcmVwbHkgbm90aWZpY2F0aW9uIC0gItCS0L7Qv9GA0L7RgSAtINCe" sbuf debase64 UTF8>UNICODE UNICODE>S TYPE CR

Code: Select all
Topic reply notification - "Вопрос - О
Ok
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Вопрос - Ответ

Postby Morituruz » Tue, 03 Jan 2012, 16:06

Спасибо, но я теперь на регулярном выражении застрял, плюс не знаю, как внутри слова строку создать (в задаче ниже буферную строку bufs создал вне слова decode)
Проблема в том, что в Subject кодированная строка состоит из нескольких подстрок. Получается надо их вытащить и склеить в одну, которую уже потом декодировать.
Code: Select all
#( enc_test
WatchHotKey: "^(+e)"
\ NoActive
NoLog
SingleInstance
CREATE encs 256 ALLOT
CREATE decs 256 ALLOT
CREATE bufs 256 ALLOT
: decodebase64 ( addr u -- addr1 u1 )
  DUP 0= IF 2DROP 4 ALLOCATE THROW abase ! abase @ 0 EXIT THEN
  0 SWAP DUP 4 / 3 * CELL+ ALLOCATE THROW abase ! lbase 0! nbase 0!
  0 ?DO
    OVER I + C@ DUP [CHAR] = =
    IF DROP 0 nbase 1+! ELSE -AL64 DROP THEN 3 I 4 MOD - 0 ?DO 64 * LOOP +
    I 4 MOD 3 = IF abase @ lbase @ + DUP >R !
    R@ C@ R@ 2 CHARS + C@ R@ C! R> 2 CHARS + C!
    3 lbase +! 0 THEN
  LOOP 2DROP abase @ lbase @ nbase @ - 0 MAX
;
[color=#BF0000]\ собственно вот с этим словом проблема:[/color]
: decode { a u -- }
" " bufs PLACE
a u " /(koi8\-r\?b\?)?#9.+(\?\=)?=/xi" RE-ALL
   $0 decodebase64 KOI8>UNICODE UNICODE>S
;RE-ALL
a u " /(8\?b\?)?#4.+(\?\=)?=/xi" RE-ALL
   \ $0 decodebase64 UTF8>UNICODE UNICODE>S bufs +PLACE
   $0 bufs PLACE
\    CRLF $1 $2 $3 S+ S+ S+ bufs +PLACE
;RE-ALL
\ bufs COUNT decodebase64 UTF8>UNICODE UNICODE>S bufs PLACE
bufs COUNT
;
Action:
\ вот строка из писем от этого форума:
" Subject: =?TF-8?B?VG9waWMgcmVwbHkgbm90aWZpY2F0aW9uIC0gItChINCd0L7QstGL0LwgMjAx?= =?UTF-8?B?MiDQk9C+0LTQvtC8ISDQk9C+0LTQvtC8INCU0YDQsNC60L7QvdCwISI=?=" encs PLACE
MSG: "%encs COUNT%"
MSG: "%encs COUNT decode%"
)#
 
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Вопрос - Ответ

Postby VoidVolker » Tue, 03 Jan 2012, 16:40

Code: Select all
: decode-str   PAD debase64  UTF8>UNICODE UNICODE>S "" S+ ;

Code: Select all
" Subject: =?UTF-8?B?VG9waWMgcmVwbHkgbm90aWZpY2F0aW9uIC0gItChINCd0L7QstGL0LwgMjAx?= =?UTF-8?B?MiDQk9C+0LTQvtC8ISDQk9C+0LTQvtC8INCU0YDQsNC60L7QvdCwISI=?="
" /(.*UTF\-8\?B\?)(.*)(\?\=.*UTF\-8\?B\?)(.*)/" RE-MATCH
IF
 $2 decode-str $4 decode-str S+
THEN
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Вопрос - Ответ

Postby Morituruz » Tue, 03 Jan 2012, 21:02

Спасибо. Ваш вариант хоть и отказывается работать, когда снова одним куском, но тем не менее он мне помог.
Новогодние праздники прекрасно подходят для того, чтобы полдня подбирать регулярное выражение методом тыка :)
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Вопрос - Ответ

Postby VoidVolker » Tue, 03 Jan 2012, 21:31

Moriturus wrote:Новогодние праздники прекрасно подходят для того, чтобы полдня подбирать регулярное выражение методом тыка

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

PreviousNext

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: Google [Bot] and 2 guests

cron