Разное

User's plugins

Разное

Postby Ilya » Tue, 29 Apr 2008, 17:28

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

Плагин работающий с базами DrWeb

Postby Ilya » Tue, 29 Apr 2008, 17:30

Плагин работающий с базами DrWeb - считает количество записей, узнаёт дату последнего обновления, отслеживает их изменение.
Автор: memberlist.php?mode=viewprofile&u=21602
Code: Select all
\ File:         vdbtools.spf
\ Author:       Sergei "x0r" Kolzoun
\ Date:         28.03.2008
\ Description:  DrWeb virus definitions bases operations.
\ Words: VDBGetRecords:, VDBGetDate:, VDBTotalRecords:, VDBChanged:

\ Example:
\ #( drwu
\ : vdbpath  S" c:\progra~1\drweb\*.vdb" ;
\ : vdbtoday S" c:\progra~1\drweb\drwtoday.vdb" ;
\ Time: 0 * * * * *
\ Rule: vdbtoday FILE-EXIST
\ Action:
\ vdbtoday VDBChanged
\ IF
\  SWHide NormalPriority
\  START-APPW: ftp -s:c:\progra~1\nncron\etc\drwu.s -i
\  BALLOON: "Update complete" "Virus records: %vdbpath VDBTotalRecords%%crlf%Last update: %vdbtoday VDBGetDate FT>DD.MM.YYYY/hh:mm:ss%"
\ THEN
\ )#

\ ------ D-math ------

: D> 2SWAP D< ;

\ ------ file tools ------

0 USER-VALUE h

: lseek ( offset --)
  S>D h REPOSITION-FILE ABORT" I/O error!" ;
: read ( adr # --)
  h READ-FILE ABORT" I/O error!" DROP ;
: wordat ( offset -- w)
  lseek 0 >R  RP@ 2 read R> ;
: dwordat ( offset -- n)
  lseek 0 >R  RP@ 4 read R> ;

\ ------ date tools ------

USER sec
USER min
USER hr
USER da
USER mo
USER yr

: sd*   ( multiplicand  multiplier_double  -- product_double  )
             2 PICK * >R   UM*   R> +
;

: JDAY ( d m y -- j_double )

    \ adjust m and possibly y
    SWAP DUP 2 > IF   3 - SWAP
                 ELSE 9 + SWAP 1- THEN

    ROT >R SWAP >R     \ move d and m out of the way
   
    100 /MOD

    >R                 \ move quotient out of the way

    1461 UM* D2/ D2/
   
    R>  146097. sd* D2/ D2/ D+

    R> 153 * 2 + 5 / S>D D+
    R> S>D D+

    1721119. D+
   
;

: JDATE ( j_double -- )
          1721119. D-

          D2* D2* 1. D- 2DUP

          \ divide by 146097. without using a d/
          5411 UM/MOD SWAP DROP 27 /MOD SWAP DROP DUP  yr !

          146097. sd* D-

          D2/ D2/
          D2* D2* 3. D+ 1461 UM/MOD
          SWAP 4 + 4 /

          5 * 3 - 153 /MOD
          mo !
          5 + 5 /  da !
         
          yr @ 100 * + yr !

          mo @ 10 < IF    3 mo +!
                    ELSE -9 mo +!  1 yr +! THEN   
                    \ da @ mo @ yr @   
;

: unix_epoch_j ( -- j_double ) 1 1 1970 JDAY ;

\ преобразовать timestamp в дату
: TimeStamp>FT ( n -- s m h d m1 y )
  60 /MOD SWAP sec ! \ секунды
  60 /MOD SWAP min ! \ минуты
  24 /MOD SWAP hr ! \ часы
  S>D unix_epoch_j D+ JDATE
  yr @ mo @ da @ hr @ min @ sec @
  YMDHMS>FT
;

\ ------ VDB tools ------

0 USER-VALUE VDBRecordsCount

: VDBOpen ( a-file u-file -- )
  R/O OPEN-FILE-SHARED ABORT" File not found!" TO h
  192 dwordat 1465009225 = ( IDRW )
;

: VDBClose
  h CLOSE-FILE DROP
;

: VDBGetRecords
  VDBOpen
  IF 256 dwordat ELSE 0 THEN
  VDBClose
;

: VDBGetDate
  VDBOpen
  IF 284 dwordat TimeStamp>FT ELSE 0 THEN
  VDBClose
;

: VDBGetRecords: eval-string, POSTPONE VDBGetRecords ; IMMEDIATE
: VDBGetDate: eval-string, POSTPONE VDBGetDate ; IMMEDIATE

: VDBTotalRecords
    0 TO VDBRecordsCount
    FOR-FILES
        VDBRecordsCount VDBGetRecords: "%FOUND-FULLPATH%" + TO VDBRecordsCount   
    ;FOR-FILES
    VDBRecordsCount
;

: VDBTotalRecords: eval-string, POSTPONE VDBTotalRecords ; IMMEDIATE

\ ------ VDBChanged ------

USER VDB-FLAG
USER VDB-NODE

VARIABLE VDB-SEM
VARIABLE VDB-LIST
USER VDB-CH-LIST

0 VALUE VDB
: VDB-NAME S" etc/vdblist.txt" ;

: VDB-READ
    VDB-SEM GET
    VDB-LIST @ 0=
    IF
        VDB-NAME R/O OPEN-FILE-SHARED
        IF DROP
        ELSE TO VDB
            BEGIN PAD 512 VDB READ-LINE THROW WHILE
               PAD SWAP GLOBAL S>ZALLOC VDB-LIST AddNode LOCAL
            REPEAT
            DROP
            VDB CLOSE-FILE DROP
        THEN
    THEN
    VDB-SEM RELEASE
;
: VDB-WRITELN NodeValue ASCIIZ> VDB WRITE-LINE DROP ;
: VDB-WRITE
    VDB-SEM GET
    VDB-NAME R/W CREATE-FILE-SHARED
    IF DROP
    ELSE
        TO VDB
        ['] VDB-WRITELN VDB-LIST DoList
        VDB CLOSE-FILE DROP
    THEN
    VDB-SEM RELEASE
;

: VDB-IS-FILE? { a u -- ? }
    VDB-LIST
    BEGIN @ ?DUP WHILE
      DUP NodeValue 17 + ASCIIZ>
      a u ICOMPARE 0=
      IF NodeValue VDB-NODE ! TRUE EXIT THEN
    REPEAT
    FALSE
;

: VDB-TIME
    BASE @ >R HEX
    VDB-NODE @ 16 S>DOUBLE
    R> BASE !
;

: VDBChanged ( a u -- ?)
    VDB-READ
    VDB-SEM GET
    VDB-CH-LIST @ IF VDB-CH-LIST FreeList THEN
    VDB-CH-LIST 0!
    VDB-FLAG OFF
    FOR-FILES
        FOUND-FULLPATH VDB-IS-FILE? 0=
        IF 
            FOUND-FULLPATH DUP 18 +
            GLOBAL ALLOCATE THROW >R
            R@ 17 BLANK
            [CHAR] 0 R@ C!
            R@ 17 + ZPLACE
            R@ VDB-NODE !
            R> VDB-LIST AddNode LOCAL
        THEN
        FOUND-FULLPATH VDBGetDate 2DUP VDB-TIME D>
        IF
          BASE @ >R HEX    <# 16 0 DO # LOOP #>       R> BASE !
          VDB-NODE @ SWAP CMOVE
          VDB-NODE @ 17 + VDB-CH-LIST AppendNode
          VDB-FLAG ON
        ELSE
          2DROP
        THEN
    ;FOR-FILES
    VDB-SEM RELEASE
    VDB-FLAG @ DUP IF VDB-WRITE THEN
;

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

Нехитрый плагин для воспроизведения дефолтных звуков из Wind

Postby Ilya » Mon, 29 Dec 2008, 15:18

Нехитрый плагин для воспроизведения дефолтных звуков из Windows sound scheme: viewtopic.php?f=2&t=9805

Code: Select all
    \ File:         play_default_sound.spf
    \ Author:       Valery Kondakoff
    \ Date:         29.12.2008
    \ Words:      PLAY-DEFAULT-SOUND: ( a u -- )
    \ Description:  Additional word to play sounds from default Windows sound scheme. Use one of the following strings as an argument:
    \ "DeviceConnect"
    \ "MailBeep"
    \ "SystemAsterisk"
    \ "SystemDefault"
    \ "SystemExclamation"
    \ "SystemExit"
    \ "SystemHand"
    \ If an argument was not recognized, the SystemDefault sound will be played instead. The sounds are played asynchronously (return immediately after beginning to play the sound and have it play in the background).

    \ Usage: PLAY-DEFAULT-SOUND: "DeviceConnect"
    \ Example:
    \       #( test_def_snd
    \       NoActive
    \       Action:
    \          PLAY-DEFAULT-SOUND: "SystemAsterisk"
    \          PAUSE: 1000
    \          PLAY-DEFAULT-SOUND: "DeviceConnect"
    \          PAUSE: 1000
    \          PLAY-DEFAULT-SOUND: "MailBeep"
    \          PAUSE: 1000
    \          PLAY-DEFAULT-SOUND: "SystemDefault"
    \          PAUSE: 1000
    \          PLAY-DEFAULT-SOUND: "SystemExclamation"
    \          PAUSE: 1000
    \          PLAY-DEFAULT-SOUND: "SystemExit"
    \          PAUSE: 1000
    \          PLAY-DEFAULT-SOUND: "SystemHand"
    \       )#

    : PLAY-DEFAULT-SOUND ( a u -- )
       1 0 2SWAP S>ZALLOC PlaySound DROP
    ;

    : PLAY-DEFAULT-SOUND: eval-string, POSTPONE PLAY-DEFAULT-SOUND ; IMMEDIATE
Ilya
 
Posts: 445
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

Набор дополнительных слов

Postby VoidVolker » Sun, 17 May 2009, 18:04

Набор дополнительных слов
Автор: VoidVolker
Обсуждение


Скачать extwords.spf

Добавлены новые слова для ветвления и циклов(по умолчанию используется хак с подменом скомпилированный инструкции, есть и выскоуровневый вариант) с обратной логикой:
IFNOT WHILENOT UNTILNOT

Умножители Кило- Мега- Гига- для получения соответствующего числа байт:
Kb Mb Gb


Стек

-ROT ( a b c -- c a b )


Переменные и массивы

QUAN value_name
    Короткая запись от 0 VALUE value_name
ARRAY ( size -- ) ( " name" -> )
    Создать массив размером size байт и иницировать все его ячейки нулем.


Строки

CropFromString ( a1 u1 a2 u2 -- a3 u3 )
    Обрезать строку 1 начиная со строки 2
CropAfterString ( a u a1 u1 -- a2 u2 )
    Обрезать строку 1 после строки 2
CharReplace ( a u char1 char2 -- a u )
    Заменить в строке символ 1 на символ 2 и оставить строку на стеке
CropFromStringEnd ( a1 u1 a2 u2 -- a3 u3 )
    Обрезать строку 1 начиная со строки 2 для первого совпадения с конца строки
CropAfterStringEnd ( a u a1 u1 -- a2 u2 )
    Обрезать строку 1 после строки 2 для первого совпадения с конца строки
BACK-SEARCH ( a u a1 u1 a2 u2 -- a2 u2 ? )
    То же самое что и SEARCH только поиск идет с конца строки.
GET-SUBST ( a0 u0 a1 u1 a2 u2 -- a3 u3 | a0 u0 )
    Получить подстроку a3 u3 из строки a0 u0, ограниченную a1 u1 и a2 u2. Если подстрока не найдена - вернуть пустую строку.
GET-SUBST-ANY ( a0 u0 a1 u1 a2 u2 -- a3 u3 | a0 u0 )
    Получить подстроку a3 u3 из строки a0 u0, ограниченную a1 u1 и a2 u2 или ограниченную a2 u2 и a1 u1 - т.е. порядок строк-ограничителей не важен. Если подстрока не найдена - вернуть пустую строку.
REL-PATH ( a u -- a1 u1 )
    Получить относительный путь C:\any\path\file.txt -> C:\any\path\
SPLACE ( a u buf -- )
    Разместить строку в буфере, в первой ячейке - счетчик (4 байта)
SCOUNT ( buf -- a u )
    Извлечь строку из буфера
+SPLACE ( a u buf -- )
    Дописать строку в буфер, в первой ячейке - счетчик (4 байта)
CASE для строк:
Code: Select all
S" str B" SCASE

    S" str A" SOF
        <код>
    ENDSOF

    S" str B" SOF
        <код>
    ENDSOF

    S" str C" SOF
        <код>
    ENDSOF

    2DUP SOF
        <код по умолчанию (опционально)>
    ENDSOF

ENDSCASE



VALUE и векторы

USES ( " word_name" " name_vect" -> )
    Записать выполнимый токен следующего слова в вектор. Замена конструкции ['] ... TO ... и ' ... TO ...
    Пример:
    Code: Select all
    ['] any_word TO any_vect_or_value -->  USES any_word any_vect_or_value
FROM ( " name" -> xt )
    Получить значение вектора.


Печать в консоли

.B ( num -- )
    Распечатать число со стека в бинарной системе счисления
.D ( num -- )
    Распечатать число со стека в десятичной системе счисления
.H ( num -- )
    Распечатать число со стека в шестнадцатиричной системе счисления
PRINT ( az -- )
    Распечатать az строку


Печать стека

.SN ( n -- )
    Распечатать n верхних элементов стека


Окна

WIN-FROM-POINT ( -- hwnd )
    Получить хэндл окна под курсором
GET-WTEXT ( hwnd -- a u )
    Получить текст окна по его хэндлу. Работает и для дочерних окон. Максимальный размер текста - 256 байт.
GET-WCLASS ( hwnd -- a u )
    Получить класс окна по его хэндлу. Работает и для дочерних окон
TOP-PARENT-WINDOW ( hwnd-child -- hwnd-parent )
    Получить родительское окно верхнего уровня по хэндлу дочернего окна


Потоки

STOP-THEARD ( tid -- )
    Остановить поток с идентификатором tid


Файлы

FILE-MD5 ( a u -- a1 u1 )
    Получить MD5 хэш для файла a u

Клавиатура и пользовательский ввод

WAIT-KUP ( VK -- )
    Ждать поднятия кнопки с кодом VK. Включается, только если ранее был подключен плагин keystate.spf.
BlockTheInput ( -- )
    Заблокировать пользовательский ввод
UnblockTheInput ( -- )
    Разблокировать пользовательский ввод
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Строки

Postby VoidVolker » Sat, 06 Feb 2010, 18:11

Строки
Автор: VoidVolker
Обсуждение

Для работы необходим плагин extwords.spf
http://www.nncron.ru/download/plugins/vv/strings.spf

Плагин, значительно расширяющий возможности работы со строками.

Бета версия. Описание в разработке.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56


Return to Plugins

Who is online

Users browsing this forum: No registered users and 1 guest

cron