Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Сб апр 20, 2024 20:01

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: недоделка - LionEdit
СообщениеДобавлено: Вс май 07, 2006 13:59 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Для проверки, как код видится в форуме, а заодно и для возможной критики моих безобразных исходников.

Полная недоделка.

Код:
\ Это самый простой текстовый редактор, написанный на Форте
\ Пока, далеко не полный
\ Forth editor for texts
\ (c) Ivan Mak aka WingLion
\ Временное название - LionEdit или LE
\ 12.06.2003

VARIABLE SHL \ смещение экрана <-вправо-влево->
CREATE TABLE-ADR 200 ALLOT \ пока до 128-х строк
15 CONSTANT V-S \ вертикальный размер окна
4C CONSTANT H-S \ горизонтальный размер окна
70 CONSTANT MCol \ общий цвет
30 CONSTANT ECol \ цвет редактируемой строки
96 CONSTANT MAX-Lines \ максимальное число строк
60 CONSTANT MAX-Len \ резерв длины строки
0202 CONSTANT SH-WIN \ Смещение положения окна редактирования
CREATE BUFER 100 ALLOT
VARIABLE BEGIN-TXT \ начало текста
VARIABLE LEN-TXT \ длина текста
VARIABLE LINE-EDIT \ текущая строка
VARIABLE LINE-BEG \ начальная строка экрана
VARIABLE входной-файл

: DEL-CR-X  OVER C@  ( DUP) 0A = ( SWAP 0D = OR ) IF 1- SWAP 1+ SWAP THEN
\        2DUP + 1- C@ DUP 0D = SWAP 0A = OR IF 1- THEN
        DUP 0 < IF DROP 0 THEN
        DEL-CR -TRAILING
        ;

: в-следующую-строку
        DEL-CR-X
        LINE-BEG @ 2* TABLE-ADR + @
        SWAP DUP 0<> IF CMOVE ELSE DROP 2DROP THEN 1 LINE-BEG +! ;

: открыть-файл " lef.frt" OPEN-FILE ?I/O входной-файл ! ;

: закрыть-файл входной-файл @ CLOSE-FILE ?I/O ;

: copy-в-буфер LINE-BEG 0!
        открыть-файл
        BEGIN BUFER 80 входной-файл @ READ-LINE ?I/O
        DUP 0<> LINE-BEG @ MAX-Lines < AND WHILE
                BUFER SWAP в-следующую-строку
        REPEAT
        закрыть-файл ;

: LOAD-TEXT C000 3800 ERASE ;

: INIT-SPACE C000 BEGIN-TXT ! LEN-TXT 0!
        BEGIN-TXT @ TABLE-ADR
        MAX-Lines 0 DO 2DUP ! SWAP MAX-Len + SWAP 2 + LOOP 2DROP
        LINE-EDIT 0! LINE-BEG 0! LOAD-TEXT copy-в-буфер
        LINE-EDIT 0! LINE-BEG 0! ;

\ : TYPE-M OVER C@ IF 0D (WORD) TYPE 1+ THEN NIP SPACES ;
: TYPE-M TYPE ;

: LINE-ADR LINE-BEG @ + 2* TABLE-ADR + @ SHL @ + ;

: S-LINE >< SH-WIN + SET_POS ;

: OUT-LINE DUP S-LINE LINE-ADR H-S TYPE-M ;

: OUT-SCR GET_POS >R 0 SET_POS
        V-S 0 DO I OUT-LINE LOOP R> SET_POS ;

: PG_1 LINE-BEG 0! ; : PG_E MAX-Lines V-S - 1- LINE-BEG ! ;

: LB-TEST LINE-BEG @ 0 < IF LINE-BEG 0! THEN
          LINE-BEG @ MAX-Lines V-S - 1- SWAP OVER >
                        IF LINE-BEG ! ELSE DROP THEN ;

: UP-TXT  1 LINE-BEG +! LB-TEST ; : DN-TXT -1 LINE-BEG +! LB-TEST ;

: LE-TEST LINE-EDIT @ 0 < IF LINE-EDIT 0! DN-TXT THEN
        LINE-EDIT @ V-S 1- > IF V-S 1- LINE-EDIT ! UP-TXT THEN ;

: LN_DN 1 LINE-EDIT +! LE-TEST ; : LN_UP -1 LINE-EDIT +! LE-TEST ;
: PG_UP V-S 0 DO LN_UP LOOP ; : PG_DN V-S 0 DO LN_DN LOOP ;

: TEST-S GET_POS >R 1740 SET_POS L-KEY @ H.
        LINE-BEG @ LINE-EDIT @ + . R> SET_POS ;

: TEST-XD L-KEY @ TEST-S
        DUP FF AND 0D = IF DROP LN_DN TRUE TEST-S EXIT THEN
        DUP 5000 = IF DROP LN_DN TRUE TEST-S EXIT THEN
        DUP 4800 = IF DROP LN_UP TRUE TEST-S EXIT THEN
        DUP 4900 = IF DROP PG_UP TRUE TEST-S EXIT THEN
        DUP 5100 = IF DROP PG_DN TRUE TEST-S EXIT THEN
        DUP 8400 = IF DROP PG_1 TRUE TEST-S EXIT THEN
        DUP 7600 = IF DROP PG_E TRUE TEST-S EXIT THEN
        DROP TEST-S FALSE ;

: EXPECT-LOOP' BEGIN TYPE-X W-CURS 0 ERROR ! DIR-KEY TEST-XD UNTIL ;
: EXPECT' POSN 0! 2DUP EDGE ! LINE ! EXPECT-LOOP' 2DROP ;

: PushCol COLOR @ R> SWAP >R >R COLOR ! ; : PopCol R> R> SWAP >R COLOR ! ;

: LINE-R ECol PushCol LINE-EDIT @ DUP S-LINE LINE-ADR H-S EXPECT' PopCol ;

VARIABLE ESC-Ret VARIABLE ESC-Ret2

: TEST1 INIT-SPACE ESC-Ret2 @ ESC-W !
        MCol PushCol 07 PushCol CLS PopCol
        DECIMAL BEGIN OUT-SCR LINE-R AGAIN PopCol ;

: FORTH-RET ESC-Ret @ ESC-W ! FORTH-SYSTEM ;

BL WORD TEST1 FIND DROP NAME> ESC-Ret !
BL WORD BY FIND DROP NAME> ESC-Ret2 !

07 COLOR !
MAKE TEST1
SAVE-SYSTEM le.com
BYE



Без собственно форта, на котором оно сделано, видимо, код и не имеет смысла.
Поэтому: http://winglion.ru/forth/pc_forth.zip (26.5kb)
Под DOS-ом все.

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: недоделка - LionEdit
СообщениеДобавлено: Ср май 05, 2010 19:44 
Не в сети
Аватара пользователя

Зарегистрирован: Вт фев 17, 2009 19:58
Сообщения: 112
Откуда: Барнаул
Благодарил (а): 21 раз.
Поблагодарили: 16 раз.
Не могу получить исполняемый файл.
Как должна выглядеть командная строка для получения файла le.com?
Использую консоль WinXP -- может из-за этого? Нужен чистый DOS?
Я исполняю так:
Код:
FORTH.COM le.f

Но ничего не получается -- никакого le.com.
Посмотрел FORTH.COM, а там нет слова SAVE-SYSTEM, оно есть в FORTH.FRT. Подключил FORTH.FRT
Код:
FORTH.COM FORTH.FRT
и сохранил выполнив
Код:
SAVE-SYSTEM FORTHF.COM
.
Подключил le.f к FORTHF.COM
Код:
FORTHF.COM le.f
.
Опять ничего не сохраняет и сообщения об ошибке не выводит.
Что делать?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: недоделка - LionEdit
СообщениеДобавлено: Ср май 05, 2010 20:25 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
1. исходник сохранить в файле lef.frt (можно и другое имя, но у меня именно такое)

2. в строке 35 вместо lef.frt ввести имя текстового файла (в cp866 кодировке), который надо загружать на редактирование.

3. FORTH.FRT компилируется автоматом при запуске forth.com, т.е. дополнительно указывать его нигде не надо.

4. Для компиляции le.com надо запускать forth.com, a затем когда появится фортовая консоль набрать в ней
INCLUDE lef.frt

5. после компиляции появится файл le.com его и запускать.

6. В win-XP похоже другие сканкоды управляющих клавиш, поэтому есть проблемы с некоторыми из них. Но строку он у меня редактировал.

7. Сохранения отредактированного не сделано.

8. Чтобы компилировать файл из командной строки надо набирать

forth.com INCLUDE src.frt

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: недоделка - LionEdit
СообщениеДобавлено: Ср май 05, 2010 21:12 
Не в сети
Аватара пользователя

Зарегистрирован: Вт фев 17, 2009 19:58
Сообщения: 112
Откуда: Барнаул
Благодарил (а): 21 раз.
Поблагодарили: 16 раз.
Работает!
WingLion писал(а):
1. исходник сохранить в файле lef.frt (можно и другое имя, но у меня именно такое)

Сохранил lef.frt.

WingLion писал(а):
2. в строке 35 вместо lef.frt ввести имя текстового файла (в cp866 кодировке), который надо загружать на редактирование.

Оставил всё как есть.

WingLion писал(а):
3. FORTH.FRT компилируется автоматом при запуске forth.com, т.е. дополнительно указывать его нигде не надо.

Да, всё верно.

WingLion писал(а):
4. Для компиляции le.com надо запускать forth.com, a затем когда появится фортовая консоль набрать в ней
INCLUDE lef.frt

Ага, компилирует.

WingLion писал(а):
5. после компиляции появится файл le.com его и запускать.

Появился, запустился.

WingLion писал(а):
6. В win-XP похоже другие сканкоды управляющих клавиш, поэтому есть проблемы с некоторыми из них. Но строку он у меня редактировал.

Первую строку редактирует, стрелка вниз не работает. Только влево-вправо.

WingLion писал(а):
7. Сохранения отредактированного не сделано.

Понятно.

WingLion писал(а):
8. Чтобы компилировать файл из командной строки надо набирать

forth.com INCLUDE src.frt

А вот это почему-то не работает. com-файл собрался только из консоли форта (пункт 4). Команду "forth.com INCLUDE src.frt" писал в командной строке Total Commander-а.

Спасибо, буду смотреть исходники.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: недоделка - LionEdit
СообщениеДобавлено: Ср май 05, 2010 21:40 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
kzagradskiy писал(а):
Первую строку редактирует, стрелка вниз не работает. Только влево-вправо.

Работают еще ctrl со стрелками влево-вправо (переход по словам), BackSpace, читаемые символы, ESC для выхода, а переход по строкам глючит ;(

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

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


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 7


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

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