Крон с FIND1 или REQUIRE глючит (?) !!!

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

Крон с FIND1 или REQUIRE глючит (?) !!!

Postby Tez » Tue, 09 Nov 2004, 21:45

Давно собирался, и привел я таки свой код в человеческий вид. То бишь по слову или по несколько слов в одном файле/либе. Конечно, пришлось и FIND задействовать и REQUIRE.
Это было давно.

В таком виде (по слову на либу), уже несколько месяцев у меня глючит FIND1 (в REQUIRE). Всегда в одной и той же либе WAITFOR.f (в ней, кстати, FIND тоже есть). Причем, глючит оно ровно через раз. Т.е. пускаешь крон – ошибка, пускаешь еще раз – все ок. А во внешних задачах – всегда без ошибок (причем компилирует тоже самое и в том же порядке!, пускаю без ключа –wp).
Я все думал, найду решение, и потому ничего не трогал.

Сейчас хуже стало. Модифицировал, значит, я слово/либу StartBackgroundSoft.f, в которой как раз REQUIRE WAITFOR и располагается. И все – теперь хоть вешайся – ну ни разу еще крон не загрузился! Ошибка та же. Но, в отличии от предыдущего случая, во внешней задаче без ключа –wp теперь тоже эта ошибка! Правда, в других внешних задачах с укороченным набором либ – эта либа компилируется нормально.

Что еще интересно. По ходу, REQUIRE не работает должным образом – у меня в nncron.out куча isn't unique, чего быть точно не должно.

Посоветуйте хоть что-нибудь! Пожалуйста! Крон не грузится!
Я думаю, может отказаться от всех FIND и REQUIRE? Напишите что думаете, чтобы вы на моем месте стали делать? Мне только для такого изменения – придется почти все либы перелопачивать (и я даже не знаю, хорошо ли, что куча слов будет много раз переопределяться).

Значит ситуация, в либе StartBackgroundSoft.f строка:
REQUIRE WAITFOR Tez\misc\WAITFOR.f
Исключение такое:
Code: Select all
 EXCEPTION!  CODE:C0000005  ADDRESS:4B6BB2  WORD:SEARCH-WORDLIST  REGISTERS:
42EB98   FD 4F 68 00  65 64 4B 00  FF FF FF FF  03 00 00 00 нOh.edK.пппп....
42EBA8   01 00 00 80  65 64 4B 00  38 FF 42 00  B2 6B 4B 00 ..._edK.8пB._kK.
42EBB8   1B 00 00 00  46 02 01 00  C8 ED 42 00  23 00 00 00 ....F...€­B.#...
USER DATA: 431E94 HANDLER: 42EE14 RETURN STACK:
42EDC8 :  431E94 <not found>
42EDCC :  4B6CAC FIND1
42EDD0 :  80000001 StartProcesses
42EDD4 :  7FBCC8FD <not in the image>
42EDD8 :  4B6D31 FIND1
42EDDC :  4B77EE INTERPRET
42EDE0 :  4B7B2B INCLUDE-FILE
42EDE4 :  5 <not found>
42EDE8 :  0 <not found>
42EDEC :  88 <not found>
42EDF0 :  108 <not found>
42EDF4 :  23 <not found>
42EDF8 :  43CB8C <not found>
42EDFC :  4B7BE1 INCLUDE-PROBE
42EE00 :  4B7C99 INCLUDED
42EE04 :  12 <not found>
42EE08 :  43CB9C <not found>
42EE0C :  43CDC4 <not found>
42EE10 :  4B41AB CATCH
42EE14 :  42EE84 <not found>
INCLUDED -1073741819
http://www.forth.org.ru/Tez\misc\WAITFOR.f- WebIncluded is'n implemented.
Tez\misc\WAITFOR.f- can't find library.INCLUDED -5001
http://www.forth.org.ru/Tez\process\StartBackgroundSoft.f- WebIncluded is'n implemented.
Tez\process\StartBackgroundSoft.f- can't find library.
StartProcesses – предыдущее слово подгруженное с помощью REQUIRE.
Потом крон грит ошибка в строке такой-то либы StartBackgroundSoft.f (как и раньше с либой WAITFOR.f было).

Чтоб далеко не бегать привожу определение слова REQUIRE которое я использую (новее не нашел):
Code: Select all
( 02.08.1999 Черезов А. )

( Расширение СП-Форта функциями загрузки библиотек из унифицированных
  для SPF путей.
 
  REQUIRE слово_из_библиотеки ~автор/путь/к/библиотеке
  или
  S" слово_из_библиотеки" S" ~автор/путь/к/библиотеке" REQUIRED

  Последовательность. Сначала require пытается загрузить библиотеку
  по заданному пути, считая его полным путем к библиотеке. Удобно для
  старых библиотек. В случае неудачи делается попытка загрузить из
  пути LocalLibPath~автор/путь/к/библиотеке. В случае неудачи - должен
  загружаться [и кешироваться локально] WebLibPath~автор/путь/к/библиотеке
  но эта возможность пока не реализована [это не сложно, но придется и
  сокеты за собой тащить, или внешнюю программку запускать - я пока не
  решил :^]
)

CREATE LocalLibPath C" e:\eserv2-forth\forth\wwwroot\" ",
CREATE WebLibPath   C" http://www.forth.org.ru/" ",

: FindWord ( addr u -- 0 | xt 1 | xt -1 )
  DUP HERE C! HERE 1+ SWAP MOVE HERE FIND  \ ох и неудобные эти "c-addr" ;)
  ?DUP IF EXIT THEN
  DROP 0
;
: LibName ( addr u -- addr2 u2 )
  DUP >R PAD SWAP MOVE
  PAD R@ + SWAP R> OVER + >R MOVE
  PAD R@ + 0! PAD R>
;
: LocalLibName ( addr u -- addr2 u2 )
  LocalLibPath COUNT LibName
;
: WebLibName ( addr u -- addr2 u2 )
  WebLibPath COUNT LibName
;
: WEB-INCLUDED ( addr u -- )
  TYPE ." - WebIncluded is'n implemented." CR -5002 THROW
;
: IncludeLib ( addr u -- ... )
  2>R
  2R@ + 0 SWAP C!
  2R@              ['] INCLUDED CATCH 0= IF 2R> 2DROP EXIT THEN
  \ библиотеки старого типа
  2DROP \ это не имя библиотеки, а мусор после "сорвавшегося" в CATCH слова
  2R@ LocalLibName ['] INCLUDED CATCH 0= IF 2R> 2DROP EXIT THEN
  2DROP
  2R@ WebLibName   ['] WEB-INCLUDED CATCH 0= IF 2R> 2DROP EXIT THEN
  2DROP
  2R> TYPE ." - can't find library." -5001 THROW
;
: REQUIRED ( waddr wu laddr lu -- )
  2SWAP FindWord
  IF DROP 2DROP EXIT
  ELSE IncludeLib THEN
;
: REQUIRE ( "word" "libpath" -- )
  BL SKIP BL PARSE
  BL SKIP BL PARSE
  REQUIRED
;

\ Примеры:

\ REQUIRE RG_OpenKey /~ac/lib/win/registry.f

\ S" RG_OpenKey" S" /~ac/lib/win/registry.f" REQUIRED


PS
Причем, я пробовал из резервной копии восстановить все как было - не помогает!!! (я о модификации StartBackgroundSoft.f)
Больше я ничего не менял.

PPS
nncron.exe v 1.89 Build 997 20.05.2004
tm.exe v 1.89 Build 400 20.05.2004
Windows XP (5.1.2600) Service Pack 2
shell32.dll 6.0.2900
Tez
 
Posts: 205
Joined: Mon, 23 Aug 2004, 09:17
Location: Moscow

Postby Tez » Wed, 10 Nov 2004, 15:31

Все заработало! :weedman: Это была моя ошибка в либе (StartBackgroundSoft.f).
А когда я вчера попробовал заменить эту либу на старую версию – крон видимо не перечитал ее.
Этот глюк я сегодня обнаружил (винда, крон?). Иногда, крон не перечитывает либы. Т.е. можно изменить слово в файле, сохранить файл, запустить крон – и он отработает со старым словом! Лечится у меня это перезагрузкой компа.
Tez
 
Posts: 205
Joined: Mon, 23 Aug 2004, 09:17
Location: Moscow


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 2 guests

cron