nnCron - LPT - LCD

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

Re: nnCron - LPT - LCD

Postby Ilya » Sat, 23 Aug 2008, 17:01

Dark_Jones wrote:Выводить - тексты, да псевдографику с заданными координатами "строка", "столбец" (или просто "строка" в случае вывода полностью сформированной строки); плюс очищать индикатор.
Может быть - рисовать простенькие гистограммы (индикатор не графический, поэтому именно простенькие - из псевдографики наверно) по типу частотного анализатора в Винампе.

Вот первые результаты (Пока не русифицирован!!!):
код "плагина"
Code: Select all
WINAPI: DlPortWritePortUchar dlportio.dll
0x378 CONSTANT c-lpt-data
0x37A CONSTANT c-lpt-control
: strob
0x1 c-lpt-control DlPortWritePortUchar DROP
1 PAUSE
0x0 c-lpt-control DlPortWritePortUchar DROP
;

: strob-data
0x5 c-lpt-control DlPortWritePortUchar DROP
1 PAUSE
0x0 c-lpt-control DlPortWritePortUchar DROP
;

: lpt-data ( n --  )
0x4 c-lpt-control DlPortWritePortUchar DROP
c-lpt-data DlPortWritePortUchar DROP
strob-data
0 c-lpt-data DlPortWritePortUchar DROP
;

: lpt-adr ( n --  )
c-lpt-data DlPortWritePortUchar DROP
strob
0 c-lpt-data DlPortWritePortUchar DROP
;

\ Очищаем инидикатор
: lpt-cls
1 lpt-adr
;

\ Позиционируем курсор в позицию row column
: lpt-at ( r c -- )
SWAP
CASE
   0 OF  ENDOF
   1 OF 0x40 + ENDOF
   2 OF 0x14 + ENDOF
   3 OF 0x54 + ENDOF
ENDCASE
0x80 + lpt-adr
;

\ Выводим строку в текущиую позицию
: lpt-type1 ( adr n -- )
OVER + SWAP
?DO
   I C@ lpt-data
LOOP
;
\ Инициализируем индикатор
: lpt-init-8b
15 PAUSE
0x30 lpt-data
10 PAUSE
0x30 lpt-data
1 PAUSE
0x30 lpt-data
100 PAUSE
0x38 lpt-data
100 PAUSE
0x38 lpt-data
100 PAUSE
0x1 lpt-data
4 PAUSE
0x6 lpt-data
;

ну и проверка
Code: Select all
: main
lpt-cls
BEGIN
4 0 DO
I 1 lpt-at
 S" Proverka" lpt-type1
 100 PAUSE
 lpt-cls
 LOOP
 AGAIN
;
main

Попробуй Plz!
Жду ответа!
Ilya
 
Posts: 445
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

Re: nnCron - LPT - LCD

Postby Dark_Jones » Sat, 23 Aug 2008, 17:38

Не выводит ничего...
Думал, что просто быстро выводит и удаляет, но даже после замены паузы на одну секунду после [S" Proverka" lpt-type1] ничего не вывелось....
Я так полагаю, что слово "проверка" должно пробегать сверху вниз?

ЗЫЖ port95nt и твой dlportio - ставят один и тот же драйвер? Они не могут конфликтовать?
ЗЗЫЖ У тебя индикатор заработал?
Dark_Jones
 
Posts: 414
Joined: Thu, 09 Nov 2006, 00:43
Location: Russia, S.Peterburg

Re: nnCron - LPT - LCD

Postby Dark_Jones » Sat, 23 Aug 2008, 17:49

Поправка!
При запущенном LCDSmartie работает. Накладывается на экраны, которые выводит LCDSmartie.
Стоит выйти из проги - экран очищается. Запускаю снова Smartie - работают одновременно. :shock:
Dark_Jones
 
Posts: 414
Joined: Thu, 09 Nov 2006, 00:43
Location: Russia, S.Peterburg

Re: nnCron - LPT - LCD

Postby Ilya » Sat, 23 Aug 2008, 19:08

Dark_Jones wrote:Поправка!
При запущенном LCDSmartie работает. Накладывается на экраны, которые выводит LCDSmartie.
Стоит выйти из проги - экран очищается. Запускаю снова Smartie - работают одновременно. :shock:

Индикатор заработал!
Попробуй следующее:
1) Выгрузи LCDSmartie
3) Перед lpt-cls вставь lpt-init-8b

Устанавливал и port95nt и dlportio.
Кста, dlportio не мой ! ;)
В ЛС отправил № своей Аси.
Стучи.
Ilya
 
Posts: 445
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

Re: nnCron - LPT - LCD

Postby Ilya » Sat, 23 Aug 2008, 20:13

"Русифицированный" плагин:
Code: Select all
WINAPI: DlPortWritePortUchar dlportio.dll
0x378 CONSTANT c-lpt-data
0x37A CONSTANT c-lpt-control
CREATE lpt-dec-buf 50 ALLOT

HEX
CREATE RusTable
   41 C, A0 C, 42 C, A1 C, E0 C, 45 C, A3 C, A4 C, A5 C, A6 C, 4B C, A7 C, 4D C, 48 C, 4F C,
   A8 C, 50 C, 43 C, 54 C, A9 C, AA C, 58 C, E1 C, E5 C, AC C, E2 C, AD C, AE C, C4 C, AF C,
   B0 C, B1 C, 61 C, B2 C, B3 C, B4 C, E3 C, 65 C, B6 C, B7 C, B8 C, B9 C, BA C, BB C, BC C,
   BD C, 6F C, BE C, 70 C, 63 C, BF C, 79 C, E4 C, 78 C, E5 C, C0 C, C1 C, E6 C, C2 C, C3 C,
   C4 C, C5 C,   C6 C, C7 C,
DECIMAL

: lpt-char-decode ( n -- n1 )
DUP 192 256 WITHIN
IF
0xC0 - RusTable + C@
ELSE
CASE
   0xA8 OF 0xA2 ENDOF
   0xB8 OF 0xB5 ENDOF
   DUP
ENDCASE
THEN
;

: lpt-str-decode ( adr n -- adr1 n1 )
lpt-dec-buf 50 ERASE
2>R 0 2R> OVER + SWAP
?DO
   DUP I C@ lpt-char-decode SWAP lpt-dec-buf + C!
   1+
LOOP
DROP
lpt-dec-buf ASCIIZ>
;

: strob
0x1 c-lpt-control DlPortWritePortUchar DROP
1 PAUSE
0x0 c-lpt-control DlPortWritePortUchar DROP
;

: strob-data
0x5 c-lpt-control DlPortWritePortUchar DROP
1 PAUSE
0x0 c-lpt-control DlPortWritePortUchar DROP
;

: lpt-data ( n --  )
0x4 c-lpt-control DlPortWritePortUchar DROP
c-lpt-data DlPortWritePortUchar DROP
strob-data
0 c-lpt-data DlPortWritePortUchar DROP
;

: lpt-adr ( n --  )
c-lpt-data DlPortWritePortUchar DROP
strob
0 c-lpt-data DlPortWritePortUchar DROP
;

\ Очищаем инидикатор
: lpt-cls
1 lpt-adr
;

\ Позиционируем курсор в позицию row column
: lpt-at ( r c -- )
SWAP
CASE
   0 OF  ENDOF
   1 OF 0x40 + ENDOF
   2 OF 0x14 + ENDOF
   3 OF 0x54 + ENDOF
ENDCASE
0x80 + lpt-adr
;

\ Выводим строку в текущиую позицию
: lpt-type1 ( adr n -- )
OVER + SWAP
?DO
   I C@ lpt-data
LOOP
;
\ Инициализируем индикатор
: lpt-init-8b
15 PAUSE
0x30 lpt-data
10 PAUSE
0x30 lpt-data
1 PAUSE
0x30 lpt-data
100 PAUSE
0x38 lpt-data
100 PAUSE
0x38 lpt-data
100 PAUSE
0x1 lpt-data
4 PAUSE
0x6 lpt-data
;
: lpt-type
lpt-str-decode lpt-type1
;

Пример
Code: Select all

lpt-cls
 S" Привет!" lpt-type \ lpt-str-decode CR 2DUP DUMP lpt-type1
1 0 lpt-at
S" nnCron рулит ! ;)" lpt-type
Ilya
 
Posts: 445
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

Re: nnCron - LPT - LCD

Postby Dark_Jones » Sat, 23 Aug 2008, 21:05

Работает.
Но такое ощущение, что буфер не очищается - при повторном запуске появляется мусор (привёл все слова к верхнему регистру - мне так привычнее):
Code: Select all
#( test-lcd
WatchHotKey: "^@y"
Action:
LPT-CLS
0 1 LPT-AT
S" Проверка!!!" LPT-TYPE
5 0 DO
  0 17 LPT-AT
  S" Мерцаю" LPT-TYPE
  PAUSE: 500
  0 17 LPT-AT
  S"       " LPT-TYPE
  PAUSE: 500
LOOP
1 0 LPT-AT
S" nnCron рулит ! ;)" LPT-TYPE
)#


А что за слово ?DO ?
Dark_Jones
 
Posts: 414
Joined: Thu, 09 Nov 2006, 00:43
Location: Russia, S.Peterburg

Re: nnCron - LPT - LCD

Postby Ilya » Sun, 24 Aug 2008, 18:55

"Пропатченный" вариант плагина:
Code: Select all
WINAPI: DlPortWritePortUchar dlportio.dll
0x378 CONSTANT c-lpt-data
0x37A CONSTANT c-lpt-control
USER-CREATE lpt-dec-buf 50 ALLOT

HEX
CREATE RusTable
   41 C, A0 C, 42 C, A1 C, E0 C, 45 C, A3 C, A4 C, A5 C, A6 C, 4B C, A7 C, 4D C, 48 C, 4F C,
   A8 C, 50 C, 43 C, 54 C, A9 C, AA C, 58 C, E1 C, E5 C, AC C, E2 C, AD C, AE C, C4 C, AF C,
   B0 C, B1 C, 61 C, B2 C, B3 C, B4 C, E3 C, 65 C, B6 C, B7 C, B8 C, B9 C, BA C, BB C, BC C,
   BD C, 6F C, BE C, 70 C, 63 C, BF C, 79 C, E4 C, 78 C, E5 C, C0 C, C1 C, E6 C, C2 C, C3 C,
   C4 C, C5 C, C6 C, C7 C,
DECIMAL

: lpt-char-decode ( n -- n1 )
DUP 192 256 WITHIN
IF
0xC0 - RusTable + C@
ELSE
CASE
   0xA8 OF 0xA2 ENDOF
   0xB8 OF 0xB5 ENDOF
   DUP
ENDCASE
THEN
;

: lpt-str-decode ( adr n -- adr1 n1 )
lpt-dec-buf 50 ERASE
2>R 0 2R> OVER + SWAP
?DO
   DUP I C@ lpt-char-decode SWAP lpt-dec-buf + C!
   1+
LOOP
DROP
lpt-dec-buf ASCIIZ>
;

: strob
0x1 c-lpt-control DlPortWritePortUchar DROP
1 PAUSE
0x0 c-lpt-control DlPortWritePortUchar DROP
;

: strob-data
0x5 c-lpt-control DlPortWritePortUchar DROP
1 PAUSE
0x0 c-lpt-control DlPortWritePortUchar DROP
;

: lpt-data ( n --  )
0x4 c-lpt-control DlPortWritePortUchar DROP
4 PAUSE
c-lpt-data DlPortWritePortUchar DROP
strob-data
0 c-lpt-data DlPortWritePortUchar DROP
;

: lpt-adr ( n --  )
c-lpt-data DlPortWritePortUchar DROP
strob
0 c-lpt-data DlPortWritePortUchar DROP
;

\ Очищаем инидикатор
: lpt-cls
1 lpt-adr
;

\ Позиционируем курсор в позицию row column
: lpt-at ( r c -- )
SWAP
CASE
   0 OF  ENDOF
   1 OF 0x40 + ENDOF
   2 OF 0x14 + ENDOF
   3 OF 0x54 + ENDOF
ENDCASE
0x80 + lpt-adr
;

\ Выводим строку в текущиую позицию
: lpt-type1 ( adr n -- )
OVER + SWAP
?DO
   I C@ lpt-data
LOOP
;
\ Инициализируем индикатор
: lpt-init-8b
15 PAUSE
0x38 lpt-adr
10 PAUSE
0x0C lpt-adr
1 PAUSE
0x06 lpt-adr
;
: lpt-type
lpt-str-decode lpt-type1
;


и небольшой примерчик (выводим загрузку CPU и время)
Code: Select all
#( lcd-cpu

 : lpt-proc
 lpt-init-8b
 lpt-cls
 15 lpt-data
DROP
 BEGIN
 S" CPU-USAGE: " HERE ZPLACE
CPU-USAGE \ N>S
S>D <# [CHAR] % HOLD # # # #>
HERE +ZPLACE
HERE ASCIIZ>
0 0 lpt-at
lpt-type
1 0 lpt-at
GET-CUR-TIME
S" Время: " HERE ZPLACE
Hour@ N>S HERE +ZPLACE S" :" HERE +ZPLACE
Min@ S>D <# # # #>  HERE +ZPLACE S" :" HERE +ZPLACE
Sec@ S>D <# # # #>  HERE +ZPLACE
HERE ASCIIZ> lpt-type
  AGAIN
 ;
lpt-init-8b
' lpt-proc TASK: lpt-proc1
RunOnce
NoDel
Action:
0 lpt-proc1 START DROP

)#

Ilya
 
Posts: 445
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

Re: nnCron - LPT - LCD

Postby Dark_Jones » Sun, 24 Aug 2008, 22:00

Отлично! Всё работает!

Что за слова: ?DO, WITHIN ?

Твой пример сложен для моего разумения... Позже попробую переписать с использованием S+ - или там есть подводные камни?
Зачем строка ' lpt-proc TASK: lpt-proc1 ?
С чем связано упрощение lpt-init?
И откуда такие точные цифры пауз?
Почему буфер 50 байтный? Он связан с колонками или с колонками*столбцы?

Во, сколько вопросов накопилось...
Dark_Jones
 
Posts: 414
Joined: Thu, 09 Nov 2006, 00:43
Location: Russia, S.Peterburg

Re: nnCron - LPT - LCD

Postby Ilya » Sun, 24 Aug 2008, 23:05

Dark_Jones wrote:Отлично! Всё работает!

Что за слова: ?DO, WITHIN ?

?DO - перед выполнением проверяет совпавдение индексов, т.е недопускает ситуаций вида 10 10 ?DO . . . LOOP
n1 n2 n3 WITHIN - проверяет "попадания" числа n1 в диапазон n2 - n3
Dark_Jones wrote:Твой пример сложен для моего разумения... Позже попробую переписать с использованием S+ - или там есть подводные камни?

Тут как тебе удобнее!
Dark_Jones wrote:Зачем строка ' lpt-proc TASK: lpt-proc1 ?

Данная строка определяет "константу" для последующего запуска слова lpt-proc в виде потока.
Т.е. слово будет работать паралельно самому Крону, а не по заданному в Кроне времени (мин. 1 минута).
Dark_Jones wrote:С чем связано упрощение lpt-init?
И откуда такие точные цифры пауз?
Почему буфер 50 байтный? Он связан с колонками или с колонками*столбцы?
Во, сколько вопросов накопилось...

Почитал литературу.
В основном из литературы (кроме 1 PAUSE в словах strobe...)
В индикаторах на данном котроллере Макс. размер строки 40 символов + 10 от балды! :)
Ilya
 
Posts: 445
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

Re: nnCron - LPT - LCD

Postby Dark_Jones » Mon, 25 Aug 2008, 00:08

"Продолжаем беседу" (с)
А что делает слово 15 lpt-data?
Зачем в строке 0 lpt-proc1 START DROP число 0? Ведь его вроде DROP'им после 15 lpt-data...
Dark_Jones
 
Posts: 414
Joined: Thu, 09 Nov 2006, 00:43
Location: Russia, S.Peterburg

Re: nnCron - LPT - LCD

Postby Dark_Jones » Tue, 26 Aug 2008, 00:14

Попытался сделать пару слов:
Code: Select all
: LPT-AT-TYPE ( a u r c )
\ Выводим строку в позицию r c
LPT-AT
LPT-TYPE ;

: save3num->adr HERE >R , , , R> ;
: adr->3num DUP @ SWAP CELL+ DUP @ SWAP CELL+ @ ;
: save4num->adr HERE >R , , , , R> ;
: adr->4num DUP @ SWAP CELL+ adr->3num ;

:NONAME
BEGIN
  DUP adr->3num 2>R ASCIIZ> 2R> LPT-AT-TYPE
  PAUSE: 500
  DUP adr->3num 2>R ASCIIZ> NIP
  S"                                                   " DROP SWAP 2R> LPT-AT-TYPE
  PAUSE: 500
AGAIN ; TASK: lpt-type-flash

: LPT-TYPE-FLASH ( a u r c -- id_for_STOP )
\ Выводим мерцающую строку в позицию r c
\ Возвращает ~id для последующего останова мерцания
2SWAP S>ZALLOC >R SWAP R> save3num->adr lpt-type-flash START ;

:NONAME
BEGIN
  DUP adr->4num 2>R ASCIIZ> 2R> ROT
  0 SWAP DO
     2DUP 2>R LPT-AT
     2DUP 2>R I + SWAP LPT-TYPE
     2R> 2R>
     PAUSE: 250
  LOOP
  2DROP 2DROP
AGAIN ; TASK: lpt-type-scroll

: LPT-TYPE-SCROLL ( a u w r c -- 0/id_for_STOP )
\ Выводим строку a u в "окно" из w-символов в позицию r c
\ Если длина строки больше w-символов, то скроллим строку
2>R
OVER OVER >
IF
  >R S>ZALLOC R> R> R> 2SWAP save4num->adr lpt-type-scroll START
ELSE
  DROP
  2R>
  LPT-AT-TYPE
  0
THEN ;

LPT-AT-TYPE и LPT-TYPE-FLASH работают. А LPT-TYPE-SCROLL валит крон. Уже на бумажке стёк рисовал - не пойму где ошибка.
Dark_Jones
 
Posts: 414
Joined: Thu, 09 Nov 2006, 00:43
Location: Russia, S.Peterburg

Re: nnCron - LPT - LCD

Postby Ilya » Wed, 27 Aug 2008, 00:10

Поковырял твои предыдущие слова.
Не идеал (есть маленький баг в слове LPT-TYPE-SCROLL - сам увидишь на индикаторе ;) ) :
Code: Select all
: LPT-AT-TYPE ( a u r c )
\ Выводим строку в позицию r c
LPT-AT
LPT-TYPE ;

: save3num->adr HERE ! HERE CELL+ ! HERE 2 CELLS + ! ;
: adr->3num  HERE @ HERE CELL+ @ HERE 2 CELLS + @ ;
: save4num->adr HERE ! HERE CELL+ ! HERE 2 CELLS + ! HERE 3 CELLS + ! ;
: adr->4num HERE @ HERE CELL+ @ HERE 2 CELLS + @ HERE 3 CELLS + @ ;

:NONAME
DROP
BEGIN
  adr->3num
  2>R ASCIIZ> 2R> LPT-AT-TYPE
  PAUSE: 500
  adr->3num
  2>R ASCIIZ> NIP
  S"                                                   " DROP SWAP 2R> LPT-AT-TYPE
  PAUSE: 500
AGAIN ; TASK: lpt-type-flash

: LPT-TYPE-FLASH ( a u r c -- id_for_STOP )
\ Выводим мерцающую строку в позицию r c
\ Возвращает ~id для последующего останова мерцания
2SWAP GLOBAL S>ZALLOC LOCAL >R SWAP R>
save3num->adr 0
lpt-type-flash START ;

:NONAME
DROP
BEGIN
  adr->4num 2>R ASCIIZ> 2R> ROT
  0 DO
     2DUP LPT-AT
     2OVER I +
      SWAP LPT-TYPE
     PAUSE: 250
  LOOP
  2DROP 2DROP
AGAIN ; TASK: lpt-type-scroll

: LPT-TYPE-SCROLL ( a u w r c -- 0/id_for_STOP )
\ Выводим строку a u в "окно" из w-символов в позицию r c
\ Если длина строки больше w-символов, то скроллим строку
2>R
OVER OVER >
IF
  >R GLOBAL S>ZALLOC LOCAL R> R> R> 2SWAP save4num->adr 0 lpt-type-scroll START
ELSE
  DROP
  2R>
  LPT-AT-TYPE
  0
THEN
;

Ну и короткие пояснения:
1) Слово вида
Code: Select all
 : save3num->adr HERE >R , , , R> ;
будет сжирать память словаря -- меняем см. выше
2) В "многопоточных" словах лучше выделять память так GLOBAL . . . LOCAL (проверенно на практике!)
Ilya
 
Posts: 445
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

Re: nnCron - LPT - LCD

Postby Dark_Jones » Wed, 27 Aug 2008, 07:44

Слова adr->3num теперь вообще без входящих аргументов работают? У меня эти слова используются и в других задачах - конфликтов не будет?
Я думал, что HERE возвращает адрес свободной ячейки памяти (каждый раз разую)... А что на самом деле?
Зачем класть 0 на стёк, если его потом дропают в потоке?

LPT-TYPE-SCROLL - ты про внезапное появление и внезапное исчезание строки? Я это слово с переменными переписал (хотел просто проверить идею) - лечится баг просто добавлением w пробелов в начале строки и в конце строки.
Dark_Jones
 
Posts: 414
Joined: Thu, 09 Nov 2006, 00:43
Location: Russia, S.Peterburg

Re: nnCron - LPT - LCD

Postby Ilya » Fri, 29 Aug 2008, 17:37

Dark_Jones wrote:Слова adr->3num теперь вообще без входящих аргументов работают? У меня эти слова используются и в других задачах - конфликтов не будет?
Я думал, что HERE возвращает адрес свободной ячейки памяти (каждый раз разую)... А что на самом деле?
Зачем класть 0 на стёк, если его потом дропают в потоке?
LPT-TYPE-SCROLL - ты про внезапное появление и внезапное исчезание строки? Я это слово с переменными переписал (хотел просто проверить идею) - лечится баг просто добавлением w пробелов в начале строки и в конце строки.


adr->3num - в приведенном мной примере - да(см. ниже).

Под dpans94:
6.1.1650 HERE CORE
( -- addr )
addr - указатель области данных.
Но поскольку ты использовал слово ",", то оно компилирует число в словарь (т.е. уменьшает размер доступной памяти).

Да, ошибка в слове
Code: Select all
lpt-type-scroll
заключалась в "неправильном" использовании стека возврата в цикле DO ... LOOP.
Т.е. ты делал примерно так 2>R ... I ... 2R>, в то время как индекс цикла храниться на вершине стека возврата (получалось, что ты это индекс затирал).
Ilya
 
Posts: 445
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

Re: nnCron - LPT - LCD

Postby Dark_Jones » Fri, 29 Aug 2008, 20:34

Сделал такое слово:
Code: Select all
: lpt-z-space Z"                                                   " ;

: LPT-TYPE-PROGRESS ( n% w r c )
\ выводит "прогресс бар" из # в позицию r c
\ w - максимальная длина
\ n% - процент (0-100) от максимальной длины
LPT-AT
Z" ##################################################" SWAP DUP >R ROT 100 */ DUP R> SWAP - lpt-z-space SWAP S+ LPT-TYPE
;

Использую в табе так:
Code: Select all
S" Память: " AvailPhys 1048576 / N>S S+ S" /" S+ TotalPhys 1048576 / N>S S+ S"  (" S+ MemLoad N>S S+ S" %)" S+ 0 0 LPT-AT-TYPE
S" Загружен: " 1 0 LPT-AT-TYPE
30 0 DO
   500 (CPU-USAGE) DUP >R DOUBLENUMB S" % " S+ 1 10 LPT-AT-TYPE
   R> 10 1 14 LPT-TYPE-PROGRESS
LOOP

Как бы сделать более плавную полосу? То есть не "#" выводить, а столбцы пикселей?

Попробовал добавить GLOBAL LOCAL - при одновременном выводе двух мигающих сообщений они стали глючить.

Всё-таки непонятно с save3num и adr->3num - если два разных потока (не связанных с задачей LCD) будут вызывать эти слова, то HERE выдаст разные адреса или один и тот же, не перепутаются ли они без аргументов?
Dark_Jones
 
Posts: 414
Joined: Thu, 09 Nov 2006, 00:43
Location: Russia, S.Peterburg

PreviousNext

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 4 guests

cron