Автор |
Сообщение |
|
|
Заголовок сообщения: |
Re: Перенаправление выходного потока |
|
|
Гость писал(а): Есть строка: S" : DOB 2 2 + . ; DOB " . Вопрос: как выполнить ее содержимое и перенаправить выходной поток в другую строку? В поисках счастья нашел слово TYPE>STR из ~ygrek\lib\typestr.f которое перенаправляет вывод слова в строку, слово EVALUATE может выполнить строку. Но вот как не крутил не вертел не подставлял выполнить и вывести не получалось S" -1 U. " ' EVALUATE TYPE>STR STR@ TYPE : test S" -1 U. " ['] EVALUATE TYPE>STR STR@ TYPE ; test
[quote="Гость"]Есть строка: [b] S" : DOB 2 2 + . ; DOB "[/b] . Вопрос: как выполнить ее содержимое и перенаправить выходной поток в другую строку? В поисках счастья нашел слово [b]TYPE>STR[/b] из ~ygrek\lib\typestr.f которое перенаправляет вывод слова в строку, слово [b]EVALUATE[/b] может выполнить строку. Но вот как не крутил не вертел не подставлял выполнить и вывести не получалось [/quote] S" -1 U. " ' EVALUATE TYPE>STR STR@ TYPE : test S" -1 U. " ['] EVALUATE TYPE>STR STR@ TYPE ; test
|
|
|
|
Добавлено: Пт сен 10, 2010 07:43 |
|
|
|
|
|
Заголовок сообщения: |
Re: Перенаправление выходного потока |
|
|
to chess - Последний пример как раз подходит под мою задачу. Пишу программу с графическим интерфейсом. Выходной поток от исполнения строки надо было перенаправить на экран в отдельный элемент интерфейса. Вот для этого мне и понадобилось все запихнуть в строку. Спасибо за помощь, все работает как надо.
to chess - Последний пример как раз подходит под мою задачу. Пишу программу с графическим интерфейсом. Выходной поток от исполнения строки надо было перенаправить на экран в отдельный элемент интерфейса. Вот для этого мне и понадобилось все запихнуть в строку. Спасибо за помощь, все работает как надо.
|
|
|
|
Добавлено: Чт сен 09, 2010 20:09 |
|
|
|
|
|
Заголовок сообщения: |
Re: Перенаправление выходного потока |
|
|
Посмотрел библиотеку ~ac/lib/str5.f. Наиболее просто можно сделать так: Код: REQUIRE STR@ ~ac/lib/str5.f
"" VALUE S-IN "" VALUE S-OUT
\ Записываем в входную строку текст S" : SUM 2 2 + . 49 EMIT SPACE 64 EMIT SPACE 234. . . 3 SPACES S' 21111' TYPE ; SUM" S-IN STR!
\ переопределить TYPE как ввод в выходную дин. строку :NONAME ( A U -- ) S-OUT STR+ ; TO TYPE
\ исполнить строку-исходник S-IN STR@ EVALUATE
\ переоределить TYPE на стандартный ' TYPE1 TO TYPE
\ посмотреть дин.строку вывода S-OUT STR@ DUMP CR \ или так S-OUT STR@ TYPE \ или так пс. Зачем это вам? К примеру, мне такое никогда не было нужно.
Посмотрел библиотеку ~ac/lib/str5.f. Наиболее просто можно сделать так:
[code]REQUIRE STR@ ~ac/lib/str5.f
"" VALUE S-IN "" VALUE S-OUT
\ Записываем в входную строку текст S" : SUM 2 2 + . 49 EMIT SPACE 64 EMIT SPACE 234. . . 3 SPACES S' 21111' TYPE ; SUM" S-IN STR!
\ переопределить TYPE как ввод в выходную дин. строку :NONAME ( A U -- ) S-OUT STR+ ; TO TYPE
\ исполнить строку-исходник S-IN STR@ EVALUATE
\ переоределить TYPE на стандартный ' TYPE1 TO TYPE
\ посмотреть дин.строку вывода S-OUT STR@ DUMP CR \ или так S-OUT STR@ TYPE \ или так[/code] пс. Зачем это вам? К примеру, мне такое никогда не было нужно.
|
|
|
|
Добавлено: Ср сен 08, 2010 12:01 |
|
|
|
|
|
Заголовок сообщения: |
Re: Перенаправление выходного потока |
|
|
Гость писал(а): Сам текст строки может быть разным. В нем могут быть слова типа EMIT или CR которые выводят на экран. Если действовать по методу переопределения как это было предложено то надо их все переопределять получается? нет, не надо ничего переопределять, в СПФе EMIT определен через TYPE. Однако, не надо путать строку и поток. В строке вам всегда будет возвращаться только один результат одного вызова TYPE.
[quote="Гость"] Сам текст строки может быть разным. В нем могут быть слова типа EMIT или CR которые выводят на экран. Если действовать по методу переопределения как это было предложено то надо их все переопределять получается?[/quote] нет, не надо ничего переопределять, в СПФе EMIT определен через TYPE. Однако, не надо путать строку и поток. В строке вам всегда будет возвращаться только один результат одного вызова TYPE.
|
|
|
|
Добавлено: Ср сен 08, 2010 10:09 |
|
|
|
|
|
Заголовок сообщения: |
Re: Перенаправление выходного потока |
|
|
Можно конечно все и переопределить( ибо немного слов выводит в консоль) Код: 1000 VALUE L-SOUT CREATE SOUT L-SOUT ALLOT 0 VALUE D-SOUT
: >s ( a u --) DUP >R SOUT D-SOUT + SWAP MOVE R> D-SOUT + TO D-SOUT ;
0 WARNING ! : . ( x -- ) DUP . S>D (D.) 1+ >s ; \ тут еще D. и U. переопределить : EMIT ( b --) >R RP@ 1 TYPE RP@ 1 >s RDROP ; : CR ( --) LT LTL @ 2DUP TYPE >s ; : SPACE ( --) BL EMIT ; \ еще SPACES надо 1 WARNING !
STARTLOG S" : DOB 2 2 + . 2 2 2 + + . 64 EMIT SPACE 64 EMIT CR 33 EMIT CR 3 . ; DOB " EVALUATE
CR SOUT D-SOUT DUMP CR CR SOUT D-SOUT TYPE лог Код: 4 6 @ @ ! 3
5AF808 34 00 36 00 40 20 40 0D 0A 21 0D 0A 33 00 0D 0A 4.6.@ @..!..3...
4 6 @ @ ! 3
Ok ПС. но проще вставить в STARTLOG впихивание содержимого файла spf.log в строку S-OUT, которую организовать в хипе.
Можно конечно все и переопределить( ибо немного слов выводит в консоль) [code]1000 VALUE L-SOUT CREATE SOUT L-SOUT ALLOT 0 VALUE D-SOUT
: >s ( a u --) DUP >R SOUT D-SOUT + SWAP MOVE R> D-SOUT + TO D-SOUT ;
0 WARNING ! : . ( x -- ) DUP . S>D (D.) 1+ >s ; \ тут еще D. и U. переопределить : EMIT ( b --) >R RP@ 1 TYPE RP@ 1 >s RDROP ; : CR ( --) LT LTL @ 2DUP TYPE >s ; : SPACE ( --) BL EMIT ; \ еще SPACES надо 1 WARNING !
STARTLOG S" : DOB 2 2 + . 2 2 2 + + . 64 EMIT SPACE 64 EMIT CR 33 EMIT CR 3 . ; DOB " EVALUATE
CR SOUT D-SOUT DUMP CR CR SOUT D-SOUT TYPE[/code]лог [code]4 6 @ @ ! 3
5AF808 34 00 36 00 40 20 40 0D 0A 21 0D 0A 33 00 0D 0A 4.6.@ @..!..3...
4 6 @ @ ! 3
Ok[/code]ПС. но проще вставить в STARTLOG впихивание содержимого файла spf.log в строку S-OUT, которую организовать в хипе.
|
|
|
|
Добавлено: Ср сен 08, 2010 10:01 |
|
|
|
|
|
Заголовок сообщения: |
Re: Перенаправление выходного потока |
|
|
mOleg, chess Благодарю, код очень похож на тот что мне нужно но уточню немного. Сам текст строки может быть разным. В нем могут быть слова типа EMIT или CR которые выводят на экран. Если действовать по методу переопределения как это было предложено то надо их все переопределять получается? Сделал начальный набросок: Код: REQUIRE STR@ ~ac/lib/str5.f "" VALUE S-IN "" VALUE S-OUT \ Записываем в входную строку текст S" : SUM 2 2 + . 32 EMIT ; SUM" S-IN STR! Как весь вывод от исполнения текста внутри строки S-IN сохранить в строку S-OUT?
mOleg, chess Благодарю, код очень похож на тот что мне нужно но уточню немного. Сам текст строки может быть разным. В нем могут быть слова типа [b]EMIT[/b] или [b]CR[/b] которые выводят на экран. Если действовать по методу переопределения как это было предложено то надо их все переопределять получается? Сделал начальный набросок: [code]REQUIRE STR@ ~ac/lib/str5.f "" VALUE S-IN "" VALUE S-OUT \ Записываем в входную строку текст S" : SUM 2 2 + . 32 EMIT ; SUM" S-IN STR! [/code] Как весь вывод от исполнения текста внутри строки [b]S-IN[/b] сохранить в строку [b]S-OUT[/b]?
|
|
|
|
Добавлено: Вт сен 07, 2010 22:30 |
|
|
|
|
|
Заголовок сообщения: |
Re: Перенаправление выходного потока |
|
|
mOleg писал(а): так как TYPE - это вектор, можно сделать просто:
CREATE string ...
: get-str ( asc # --> ) string SWAP CMOVE ;
' get-str TO TYPE Это порушит работу в консоли, лучше переопределить выводящие на печать слова, чтобы они делали вывод не только в консоль, но и в строку: Код: CREATE string 1000 ALLOT string 1000 ERASE 0 VALUE dstr
: >str ( a u --> ) DUP >R string dstr + SWAP MOVE R> dstr + TO dstr ;
: >s DUP . S>D (D.) 1+ >str ; \ переопределение "." S" : DOB 2 2 + >s 2 2 2 + + >s ; DOB " EVALUATE
CR string dstr DUMP CR CR string dstr TYPE лог. Код: 4 6
5AF874 34 00 36 00 00 00 00 00 00 00 00 00 00 00 00 00 4.6.............
4 6
[quote="mOleg"]так как TYPE - это вектор, можно сделать просто:
CREATE string ...
: get-str ( asc # --> ) string SWAP CMOVE ;
' get-str TO TYPE[/quote] Это порушит работу в консоли, лучше переопределить выводящие на печать слова, чтобы они делали вывод не только в консоль, но и в строку: [code]CREATE string 1000 ALLOT string 1000 ERASE 0 VALUE dstr
: >str ( a u --> ) DUP >R string dstr + SWAP MOVE R> dstr + TO dstr ;
: >s DUP . S>D (D.) 1+ >str ; \ переопределение "." S" : DOB 2 2 + >s 2 2 2 + + >s ; DOB " EVALUATE
CR string dstr DUMP CR CR string dstr TYPE[/code] лог. [code]4 6
5AF874 34 00 36 00 00 00 00 00 00 00 00 00 00 00 00 00 4.6.............
4 6[/code]
|
|
|
|
Добавлено: Вт сен 07, 2010 14:01 |
|
|
|
|
|
Заголовок сообщения: |
Re: Перенаправление выходного потока |
|
|
Гость писал(а): Есть строка: S" : DOB 2 2 + . ; DOB " . Вопрос: как выполнить ее содержимое и S" ... " EVALUATE Гость писал(а): и перенаправить выходной поток в другую строку? так как TYPE - это вектор, можно сделать просто: CREATE string ... : get-str ( asc # --> ) string SWAP CMOVE ; ' get-str TO TYPE
[quote="Гость"]Есть строка: S" : DOB 2 2 + . ; DOB " . Вопрос: как выполнить ее содержимое и[/quote] S" ... " EVALUATE
[quote="Гость"]и перенаправить выходной поток в другую строку?[/quote] так как TYPE - это вектор, можно сделать просто:
CREATE string ...
: get-str ( asc # --> ) string SWAP CMOVE ;
' get-str TO TYPE
|
|
|
|
Добавлено: Вт сен 07, 2010 07:23 |
|
|
|
|
|
Заголовок сообщения: |
Re: Перенаправление выходного потока |
|
|
Есть строка: S" : DOB 2 2 + . ; DOB " . Вопрос: как выполнить ее содержимое и перенаправить выходной поток в другую строку? В поисках счастья нашел слово TYPE>STR из ~ygrek\lib\typestr.f которое перенаправляет вывод слова в строку, слово EVALUATE может выполнить строку. Но вот как не крутил не вертел не подставлял выполнить и вывести не получалось :( Вижу люди тут разбирающиеся, подскажите как это можно осуществить?
Есть строка: [b] S" : DOB 2 2 + . ; DOB "[/b] . Вопрос: как выполнить ее содержимое и перенаправить выходной поток в другую строку? В поисках счастья нашел слово [b]TYPE>STR[/b] из ~ygrek\lib\typestr.f которое перенаправляет вывод слова в строку, слово [b]EVALUATE[/b] может выполнить строку. Но вот как не крутил не вертел не подставлял выполнить и вывести не получалось :( Вижу люди тут разбирающиеся, подскажите как это можно осуществить?
|
|
|
|
Добавлено: Вт сен 07, 2010 00:36 |
|
|
|
|
|
Заголовок сообщения: |
Re: Перенаправление выходного потока |
|
|
тут да, понятно, но если открыть исходники оптимизатора
тут да, понятно, но если открыть исходники оптимизатора :o
|
|
|
|
Добавлено: Пт май 14, 2010 07:46 |
|
|
|
|
|
Заголовок сообщения: |
Re: Перенаправление выходного потока |
|
|
Поиск "TO H-STDOUT" и "TO TYPE" по devel
Поиск "TO H-STDOUT" и "TO TYPE" по devel
|
|
|
|
Добавлено: Пт май 14, 2010 06:59 |
|
|
|
|
|
Заголовок сообщения: |
Re: Перенаправление выходного потока |
|
|
вопрос писал(а): Как всегда у Михаила - ни единого комментария А что тут комментировать? Всё понятно, достаточно было даже написать одно слово "H-STDOUT" - я про него не знал, или забыл. А уж о наличии H-STDIN теперь и сам догадался Спасибо, Михаил! Могу и я попробовать прокомментировать (очевидно, слова стандарнтного ввода-вывод уже векторизованы): ------------------------------------ : FL> H-STDOUT >R -- сохраняет текущий хэндл выходного потока на стеке возвратов 2DUP FILE-EXIST -- проверятется существует ли файл с именем, хранящемся в строке, адрес и длина которой лежат на стеке данных IF R/W OPEN-FILE -- если существует, то он ткрывается на чтение/запись ELSE W/O CREATE-FILE -- если нет, то он создается и окрывается на запись THEN THROW TO H-STDOUT -- id этого файла пишется сохраняется как новый хэндл выходного потока (после этого весь консольный вывод будет идти в файл) H-STDOUT FILE-SIZE THROW H-STDOUT REPOSITION-FILE THROW -- указатель чтения-записи устанавливается на конец файла ['] INTERPRET CATCH -- интерпретируется текст стоящий послде FL> до конца строки H-STDOUT CLOSE-FILE DROP -- файл закрывается R> TO H-STDOUT -- возращается сохраненный хэндл выходного потока, т.е. после завершения работы FL> (завершения интерпретации строки за ним следующей) консольный вывод пойдет туда же куда он шел до вызова FL> THROW ; ----------------- где-то так ...
[quote="вопрос"]Как всегда у Михаила - ни единого комментария :([/quote] А что тут комментировать? Всё понятно, достаточно было даже написать одно слово "H-STDOUT" - я про него не знал, или забыл. А уж о наличии H-STDIN теперь и сам догадался :)
Спасибо, Михаил!
Могу и я попробовать прокомментировать (очевидно, слова стандарнтного ввода-вывод уже векторизованы): ------------------------------------ : FL> H-STDOUT >R -- сохраняет текущий хэндл выходного потока на стеке возвратов 2DUP FILE-EXIST -- проверятется существует ли файл с именем, хранящемся в строке, адрес и длина которой лежат на стеке данных IF R/W OPEN-FILE -- если существует, то он ткрывается на чтение/запись ELSE W/O CREATE-FILE -- если нет, то он создается и окрывается на запись THEN THROW TO H-STDOUT -- id этого файла пишется сохраняется как новый хэндл выходного потока (после этого весь консольный вывод будет идти в файл) H-STDOUT FILE-SIZE THROW H-STDOUT REPOSITION-FILE THROW -- указатель чтения-записи устанавливается на конец файла
['] INTERPRET CATCH -- интерпретируется текст стоящий послде FL> до конца строки H-STDOUT CLOSE-FILE DROP -- файл закрывается R> TO H-STDOUT -- возращается сохраненный хэндл выходного потока, т.е. после завершения работы FL> (завершения интерпретации строки за ним следующей) консольный вывод пойдет туда же куда он шел до вызова FL> THROW ; ----------------- где-то так ...
|
|
|
|
Добавлено: Пт май 14, 2010 06:57 |
|
|
|
|
|
Заголовок сообщения: |
Re: Перенаправление выходного потока |
|
|
Как всегда у Михаила - ни единого комментария
Как всегда у Михаила - ни единого комментария :(
|
|
|
|
Добавлено: Чт май 13, 2010 23:06 |
|
|
|
|
|
Заголовок сообщения: |
Re: Перенаправление выходного потока |
|
|
Самое простое перенаправить при запуске СПФ Код: spf4.exe WORDS BYE >WW.TST Можно написать программу: source file: TT.F
: FL> H-STDOUT >R 2DUP FILE-EXIST IF R/W OPEN-FILE ELSE W/O CREATE-FILE THEN THROW TO H-STDOUT H-STDOUT FILE-SIZE THROW H-STDOUT REPOSITION-FILE THROW
['] INTERPRET CATCH H-STDOUT CLOSE-FILE DROP R> TO H-STDOUT THROW ; \ TST S" XX.TXT" FL> .( HI) 1234 . CR S" XX.TXT" FL> WORDS
Самое простое перенаправить при запуске СПФ [code]spf4.exe WORDS BYE >WW.TST[/code] Можно написать программу: [pre]source file: TT.F [b] [color=#FF8000]: FL>[/color] H-STDOUT >R 2DUP FILE-EXIST [color=#00A0A0]IF[/color] R/W OPEN-FILE [color=#00A0A0]ELSE[/color] W/O CREATE-FILE [color=#00A0A0]THEN[/color] [color=#C00000]THROW[/color] TO H-STDOUT H-STDOUT FILE-SIZE [color=#C00000]THROW[/color] H-STDOUT REPOSITION-FILE [color=#C00000]THROW[/color]
[color=#00F000]['] INTERPRET[/color] CATCH H-STDOUT CLOSE-FILE DROP R> TO H-STDOUT [color=#C00000]THROW[/color] [color=#FF8000];[/color] [color=#C0C0C0]\ TST[/color] [color=#00F000]S" XX.TXT"[/color] FL> .( HI) 1234 . CR [color=#00F000]S" XX.TXT"[/color] FL> WORDS [/b][/pre]
|
|
|
|
Добавлено: Чт май 13, 2010 22:23 |
|
|
|
|
|
Заголовок сообщения: |
Перенаправление выходного потока |
|
|
Есть ли что-то готовое для СПФ, позволяющее перенаправлять весь консольный вывод в файл и возвращать обратно на экран (EMIT, TYPE, "точки" всякие и т.п.) - ткните носом в нужное место pls если есть.
Есть ли что-то готовое для СПФ, позволяющее перенаправлять весь консольный вывод в файл и возвращать обратно на экран (EMIT, TYPE, "точки" всякие и т.п.) - ткните носом в нужное место pls если есть.
|
|
|
|
Добавлено: Чт май 13, 2010 19:59 |
|
|
|