Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 16:14

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - Особенности работы WinLib by ~yz+~ygrek
Автор Сообщение
  Заголовок сообщения:  Re: Особенности работы WinLib by ~yz+~ygrek  Ответить с цитатой
Mihail писал(а):
В Форте интерпритация, она-же и компиляция. И вообще, любая компиляция
это порождающая код интерпритация.

Действительно компиляция работает! Наверное я редактировал код перед тем как бросить сюда и помогло.
Mihail писал(а):
Флаткиным реализовано:
в каталоге \samples\win\spfwc\
запускаешь: compile.bat

Спасибо, да верно, я уже давно присматриваюсь к этому исходнику, но очень уж там много "высшего пилотажа". Как бы как то приспособить вывод в мемо(multiedit) результата работы так как реализовано тут (samples\win\spfwc\spf4wc.f) . Я так понял этим там занимается слово FlushJetBuf. На самом так сказать "нижнем" уровне выводом занимаются слова из src\win\spf_win_io.f я правильно понимаю? Попытаюсь дальше разбираться с исходниками и хелпами.
in4 писал(а):
В будущем есть идея реализовать три элемента multiedit. В первом вводиться код, во втором отображается результат его обработки а в третьем вводимый код и результат вместе. Собственно первое уже реализовано, второе пока разясняется а с третим думаю проблем больших не должно возникнуть. Пока пытаюсь разяснить ключевые моменты
Сообщение Добавлено: Вс авг 22, 2010 15:48
  Заголовок сообщения:  Re: Особенности работы WinLib by ~yz+~ygrek  Ответить с цитатой
GEO писал(а):
Еще вопрос: как вывести результат выполнения (интерпритации/компиляции) строки назад в multiedit ?
Я делал однострочное edit-поле для EVALUATE . "Программа", которая там вводилась, должна была вернуть одно число на стеке. Оно форматировалось и выводилось в другое edit-поле, т.к. я хотел одновременно видеть и "программу" и результат и иметь возможность редактирования "программы".
Сообщение Добавлено: Пт авг 20, 2010 17:03
  Заголовок сообщения:  Re: Особенности работы WinLib by ~yz+~ygrek  Ответить с цитатой
GEO писал(а):

Слово EVALUATE только интерпритирует а нужна еще и компиляция


В Форте интерпритация, она-же и компиляция. И вообще, любая компиляция
это порождающая код интерпритация.

: TST S" : 7. 7 . ;" EVALUATE ;
TST 7.


GEO писал(а):

Еще вопрос: как вывести результат выполнения (интерпритации/компиляции) строки назад в multiedit ?


Флаткиным реализовано:
в каталоге \samples\win\spfwc\
запускаешь: compile.bat
Сообщение Добавлено: Чт авг 19, 2010 16:44
  Заголовок сообщения:  Re: Особенности работы WinLib by ~yz+~ygrek  Ответить с цитатой
Это опять я. Бюсь еще над своим редактором, в коде некоторые вопросы:
Код:
DIS-OPT \ для SPF ниже 4.10 под NT

REQUIRE toolbar ~yz/lib/wincc.f
REQUIRE STR@ ~ac/lib/str5.f 

\ некторые переменные пока не используются
0 VALUE multiedit_in
"" VALUE text_multiedit_in

"" VALUE text_in
"" VALUE text_out
"" VALUE text_in_out

\ процедура запуска скрипта
PROC: RunScript  { \ [ 256 ] TextIn Dlin -- }
 
TextIn multiedit_in -text@ \ СОДЕРЖИМОЕ ВХОДНОЙ СТРОКИ  например 2 2 * . CR
multiedit_in -text# TO Dlin \ РАЗМЕР ВХОДНОЙ СТРОКИ

TextIn Dlin EVALUATE  \ выполняем строку. Слово EVALUATE только интерпритирует
                       \ а нужна еще и компиляция текста введенного в multiedit.
                       \ Еще подходит слово EVAL-WORD, но оно компилирует/интерпритирует только одно слово
                       \ Возможно надо пройтись по всему тексту в цикле и каждое слово обраотать им?
                       
\ Еще вопрос: как вывести результат выполнения (интерпритации/компиляции) строки назад в  multiedit ?
\ Тоесть хотелось бы нечто похожее как в консоли но только с оконным интерфейсом как у меня.
\ Пока результат выводиться в консоли рядом с окном программы.
PROC;

MESSAGES: multiedit_in_msg \ назначаем обработку сообщений от элемента multiedit
  M: en_killfocus
    multiedit_in TO text_multiedit_in   
  M;
MESSAGES;

: make-grids
  GRID -yfixed
    Z" Введите текст (in): " label (/ -align right /) -left |
    ===
    multiedit   (/ -name multiedit_in -size 400 200 -notify multiedit_in_msg /)
    TRUE W: sb_vert this -hwnd@ ShowScrollBar DROP
    TRUE W: SB_HORZ this -hwnd@ ShowScrollBar DROP |
    ===
     \ создаем кнопку с надписю " >>" которая будет выполнять определенную нами процедуру
    Z" Выполнить! >> " button (/ -command RunScript /) |
  GRID;  winmain -grid!
  ;

: 0WINDOWS
  0 create-window TO winmain
  W: color_3dface syscolor winmain -bgcolor!  \ серый фон (if станд. цвета)
  Z" Редактор" winmain -text!

  make-grids
  winmain wincenter
  winmain winshow
;

: run
  WINDOWS...
  0WINDOWS
  ...WINDOWS
  BYE
;

' ANSI>OEM TO ANSI><OEM

TRUE TO ?GUI
' run MAINX !
S" red.exe" SAVE 

run

BYE
Вынесу вопросы:
Слово EVALUATE только интерпритирует а нужна еще и компиляция текста введенного в multiedit.
Еще подходит слово EVAL-WORD, но оно компилирует/интерпритирует только одно слово. Возможно надо пройтись по всему тексту в цикле и каждое слово обраотать им?

Еще вопрос: как вывести результат выполнения (интерпритации/компиляции) строки назад в multiedit ? Тоесть хотелось бы нечто похожее как в консоли но только с оконным интерфейсом как у меня. Пока результат выводиться в консоли рядом с окном программы. Подскажите если кто знает?
Сообщение Добавлено: Чт авг 19, 2010 15:32
  Заголовок сообщения:  Re: Особенности работы WinLib by ~yz+~ygrek  Ответить с цитатой
GEO писал(а):
А вот слова -prop в таблице нет, как оно формируется - загадка :(
Ну, насколько я понял, это в доке просто ПРИМЕР свойства (PROPerty).

В generate-names слово CREATED встречается 3 раза - на каждый вариант, -prop , -prop@ , -prop! . Соответственно, 3 варианта и генерируются. Но в эти тонкости можно и не вдаваться. Разве что когда эту либу переписывать. Я уже несколько раз порывался, но откладывал... :(
Сообщение Добавлено: Чт авг 05, 2010 14:13
  Заголовок сообщения:  Re: Особенности работы WinLib by ~yz+~ygrek  Ответить с цитатой
in4 ну теперь ясно какое слово генерирует другие слова. Там дальше в тексте идет формирование таблицы и в нем текст:
Код:
item -text getset
тоесть как бы слово endtable берет слово -text и сохраняет его в таблице, как то дописывая еще знаки ! и @ к нему (т.е. получается слово записать текст -text! и взять текст (прочитать в буфер) -text@ ) Вроде немного прояснилось, хотя и самую малость, может есть ошибки в моих предположениях? А вот слова -prop в таблице нет, как оно формируется - загадка :(
Сообщение Добавлено: Чт авг 05, 2010 02:15
  Заголовок сообщения:  Re: Особенности работы WinLib by ~yz+~ygrek  Ответить с цитатой
Гость писал(а):
Вопрос где же описываются эти слова " -prop@ " и " -prop! " ?

~yz\lib\winlib.f писал(а):
Код:
: generate-names
  saved-names @
  BEGIN
    DUP
  WHILE
    DUP NAME> >BODY @ >R
    DUP COUNT ( a a2 n) >R PAD R@ CMOVE
    PAD R@ CREATED R>
    R@ , make-constant >R
    c: @ PAD R@ + C!
    PAD R@ 1+ CREATED R>
    R@ , make-getter
    DUP PAD + c: ! SWAP C!
    PAD SWAP 1+ CREATED
    R> , make-setter
    CDR
  REPEAT DROP ;

: endtable ( a -- )
  DROP
  generate-names
  saved-names FREE-WORDLIST
;
Если новичок, я б рекомендовал сначала разобраться в более простых вещах, пописать программки, почувствовать дух, так сказать... ;) Здесь использованы "продвинутые технологии", я такого до этого не встречал, может, просто не смотрел - не надо было... ;) .

Да, и рекомендую зарегистрироваться - для читающих будет понятно, один человек спрашивает или разные = надо ли еще раз повторять или нет.
Сообщение Добавлено: Ср авг 04, 2010 11:44
  Заголовок сообщения:  Re: Особенности работы WinLib by ~yz+~ygrek  Ответить с цитатой
Извините, новичек в Форте, я думаю все когда то ими были. Пытаюсь разобраться, разложить так сказать по полочкам :) . В ~yz/winlib.html сказано :
" Библиотека в большой степени базируется на специальных структурах-таблицах. Окна и элементы управления представляются такими таблицами - по большому счету, списками свойств. Часть свойств могут быть прочитаны и записаны, некоторые - только записаны. Свойство -prop читается словом -prop@ и записывается словом -prop!. "
Вопрос где же описываются эти слова " -prop@ " и " -prop! " ? Т.е. получается описываются они не через стандартное слово двоеточие " : " а как то по-другому, как и где именно что то не могу понять :(
Сообщение Добавлено: Ср авг 04, 2010 02:46
  Заголовок сообщения:  Re: Особенности работы WinLib by ~yz+~ygrek  Ответить с цитатой
Гость писал(а):
Ктонибудь знает в какой библиотеке определяется слово -text@ ?
Рекомендую прочитатьWinLib
Особенно 2. Общая организация библиотеки там ответ на вопрос да и вокруг еще мноооого интересного! ;)

И еще: Учебник работы с оконной библиотекой WinLib от Валентина Первых
Сообщение Добавлено: Вт авг 03, 2010 16:51
  Заголовок сообщения:  Re: Особенности работы WinLib by ~yz+~ygrek  Ответить с цитатой
Про поиск по форт файлу. По умолчанию ведётся поиск только в зарегистрированных типах файлов. Остальные игнорируются. Нужно внести в реестр:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ContentIndex
"FilterFilesWithUnknownExtensions"=dword:00000001
Сообщение Добавлено: Вс авг 01, 2010 19:29
  Заголовок сообщения:  Re: Особенности работы WinLib by ~yz+~ygrek  Ответить с цитатой
Ктонибудь знает в какой библиотеке определяется слово -text@ ? Делал поиск по всем либам, нашел только использование его в winctl.f в описании другого слова:
Код:
: size-of-text { ctl \ [ 255 ] str -- tx ty }
  str ctl -text@  str ctl text-size ;
И что то винда ХП не хочет искать по слову в файлах если разширение у них .f
Сообщение Добавлено: Вс авг 01, 2010 18:41
  Заголовок сообщения:  Re: Особенности работы WinLib by ~yz+~ygrek  Ответить с цитатой
Гость писал(а):
5) Как сделать возможным добавления в multiedit текста большого объема (1 Мбайт например) ?
Послать edit-у сообщение wParam=EM_LIMITTEXT , в Edit controls on Windows NT/2000/XP можно удлинить до 0x7FFFFFFE символов (байтовых или 2байтовых). Это для однострочных edit-ов. Для многострочных - -1.
Сообщение Добавлено: Пн июл 26, 2010 16:23
  Заголовок сообщения:  Re: Особенности работы WinLib by ~yz+~ygrek  Ответить с цитатой
Гость писал(а):
3) Надо как то выполнить введенный текст в multiedit. У меня здесь вылетает, не показав даже ошибку, пытался сделать так: text_in STR@ EVALUATE
Решение 1..3
Код:
DIS-OPT \ для SPF ниже 4.10 под NT

REQUIRE toolbar ~yz/lib/wincc.f
\ 1) Если подключить  либу str5.f  перед wincc.f тогда при работе со строками программа вылетает !??почему так?
\ 2) При подключении либы str5.f все надписи на кнопках, лейблах, мемо пишутся абракадаброй :( как это исправить?
REQUIRE STR@ ~ac/lib/str5.f 

SET-OPT

0 VALUE multiedit_in
"" VALUE text_multiedit_in

"" VALUE text_in
"" VALUE text_out
"" VALUE text_in_out

\ процедура запуска скрипта
PROC: RunScript 
S" 2 2 * . CR "  text_in STR+    \ заносим в текст в строку
text_in STRA  multiedit_in set-text \ присваеваем элементу multiedit наш текст
\ 3) Надо как то выполнить введенный текст в multiedit. У меня здесь вылетает, не показав даже ошибку
\   пытался сделать так:
text_in STR@ EVALUATE
\ 4) Как вывести результат выполнения (интерпритации/компиляции) строки в multiedit ?
\ 5) Как сделать возможным добавления в multiedit текста большого объема( 1 Мбайт например ) ?
PROC;

MESSAGES: multiedit_in_msg \ назначаем обработку сообщений от элемента multiedit
  M: en_killfocus
    multiedit_in TO text_multiedit_in   
  M;
MESSAGES;

: make-grids
  GRID -yfixed
     Z" Введите текст (in): " label (/ -align right /) -left |
    ===
    multiedit   (/ -name multiedit_in -size 400 200 -notify multiedit_in_msg /)
    TRUE W: sb_vert this -hwnd@ ShowScrollBar DROP
    TRUE W: SB_HORZ this -hwnd@ ShowScrollBar DROP |
    \ W: ( ->bl; -- n) Выбрать следующее слово, найти его в списке констант и вернуть значение   
    \ sb_vert (скрул бар вертикальный ) из файла констант винды ( windows.const )
    \ this Переменная, в которой хранится последний созданный элемент управления.
    \ -hwnd Системный дескриптор окна. Часто требуется для прямого вызова
    \ функций Windows, не предусмотренных в библиотеке.
    \ -hwnd@ взять дескриптор
    \ ShowScrollBar из winlib.f ( WINAPI: ShowScrollBar   USER32.DLL )
    ===
     \ создаем кнопку с надписю " >>" которая будет выполнять определенную нами процедуру
    Z" Выполнить! >> " button (/ -command RunScript /) |
  GRID;  winmain -grid!
  ;

: 0WINDOWS
  0 create-window TO winmain
  W: color_3dface syscolor winmain -bgcolor!  \ серый фон (if станд. цвета)
  Z" Редактор" winmain -text!

  make-grids
  winmain wincenter
  winmain winshow
   ;

: run
  WINDOWS...  0WINDOWS
  ...WINDOWS
  BYE
;

run
BYE
Но при повторном нажатии на кнопку "Выполнить!" SPF вылетает :(. Пока не разобрался... Может, кто поможет? ;)
Сообщение Добавлено: Пн июл 26, 2010 16:09
  Заголовок сообщения:  Re: Особенности работы WinLib by ~yz+~ygrek  Ответить с цитатой
Гость писал(а):
1) Если подключить либу str5.f перед wincc.f тогда при работе со строками программа вылетает !?? почему так? Похоже на то как будто вообще не подключается если стоит первой.
Из-за разных представлений в библиотеках строк, определенных через ".
~ac писал(а):
Слово " [кавычка] возвращает строку не в виде addr u, а в виде
одного числа s, которое можно преобразовать в addr u с помощью
слова

STR@ [ s -- addr u ]
~yz писал(а):
Код:
: " ( -->") c: " PARSE ( a #)
  STATE @ IF
   POSTPONE ALITERAL
       HERE DUP >R ESC-CZMOVE R> ZLEN 1+ ALLOT
  ELSE
       PAD 512 + ESC-CZMOVE PAD 512 +
  THEN
; IMMEDIATE

: Z" [COMPILE] " ; IMMEDIATE


Гость писал(а):
2) При подключении либы str5.f все надписи на кнопках, лейблах, мемо пишутся абракадаброй :( как это исправить?
В WinLib для определения констант-строк можно использовать Z" вместо ". Строки будут нормальные, проверил.
Сообщение Добавлено: Пн июл 26, 2010 13:34
  Заголовок сообщения:  Re: Особенности работы WinLib by ~yz+~ygrek  Ответить с цитатой
in4 спасибо за код. Немного его переработал и дальше возникли некторые вопросы. Вот код, в него по ходу работы вставлял коментарии для себя и возникшие вопросы:
Код:
DIS-OPT \ для SPF ниже 4.10 под NT

REQUIRE toolbar ~yz/lib/wincc.f
\ 1) Если подключить  либу str5.f  перед wincc.f тогда при работе со строками программа вылетает !??почему так?
\ 2) При подключении либы str5.f все надписи на кнопках, лейблах, мемо пишутся абракадаброй :( как это исправить?
REQUIRE STR@ ~ac/lib/str5.f 

SET-OPT

0 VALUE multiedit_in
"" VALUE text_multiedit_in

"" VALUE text_in
"" VALUE text_out
"" VALUE text_in_out

\ процедура запуска скрипта
PROC: RunScript 
S" 2 2 * . "  text_in STR+    \ заносим в текст в строку
text_in multiedit_in set-text \ присваеваем элементу multiedit наш текст
\ 3) Надо как то выполнить введенный текст в multiedit. У меня здесь вылетает, не показав даже ошибку
\   пытался сделать так:
\   text_in STR@ EVALUATE
\ 4) Как вывести результат выполнения (интерпритации/компиляции) строки в multiedit ?
\ 5) Как сделать возможным добавления в multiedit текста большого объема( 1 Мбайт например ) ?
PROC;

MESSAGES: multiedit_in_msg \ назначаем обработку сообщений от элемента multiedit
  M: en_killfocus
    multiedit_in TO text_multiedit_in   
  M;
MESSAGES;

: make-grids
  GRID -yfixed
     " Введите текст (in): " label (/ -align right /) -left |
    ===
    multiedit   (/ -name multiedit_in -size 400 200 -notify multiedit_in_msg /)
    TRUE W: sb_vert this -hwnd@ ShowScrollBar DROP
    TRUE W: SB_HORZ this -hwnd@ ShowScrollBar DROP |
    \ W: ( ->bl; -- n) Выбрать следующее слово, найти его в списке констант и вернуть значение   
    \ sb_vert (скрул бар вертикальный ) из файла констант винды ( windows.const )
    \ this Переменная, в которой хранится последний созданный элемент управления.
    \ -hwnd Системный дескриптор окна. Часто требуется для прямого вызова
    \ функций Windows, не предусмотренных в библиотеке.
    \ -hwnd@ взять дескриптор
    \ ShowScrollBar из winlib.f ( WINAPI: ShowScrollBar   USER32.DLL )
    ===
     \ создаем кнопку с надписю " >>" которая будет выполнять определенную нами процедуру
    " Выполнить! >> " button (/ -command RunScript /) |
  GRID;  winmain -grid!
  ;

: 0WINDOWS
  0 create-window TO winmain
  W: color_3dface syscolor winmain -bgcolor!  \ серый фон (if станд. цвета)
  " Редактор" winmain -text!

  make-grids
  winmain wincenter
  winmain winshow
   ;

: run
  WINDOWS...  0WINDOWS
  ...WINDOWS
  BYE
;

run
BYE

Собственно вынесу интересующие вопросы:
1) Если подключить либу str5.f перед wincc.f тогда при работе со строками программа вылетает !?? почему так? Похоже на то как будто вообще не подключается если стоит первой.
2) При подключении либы str5.f все надписи на кнопках, лейблах, мемо пишутся абракадаброй :( как это исправить?
3) Надо как то выполнить введенный текст в multiedit. У меня здесь вылетает, не показав даже ошибку, пытался сделать так:
text_in STR@ EVALUATE
4) Как вывести результат выполнения (интерпритации/компиляции) строки в multiedit ?
5) Как сделать возможным добавления в multiedit текста большого объема (1 Мбайт например) ?
Сообщение Добавлено: Пн июл 26, 2010 03:29

Часовой пояс: UTC + 3 часа [ Летнее время ]


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB