KRIEGSSPIELE!
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

Черновик: Версия II

Участников: 2

Страница 2 из 2 Предыдущий  1, 2

Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор vikt144 Сб Дек 18, 2021 9:42 am

Пока находился в выгоревшем состоянии, переработал свой форт на java, применив
Class ByteBuffer
https://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html#asDoubleBuffer()
и
reflection api
https://betacode.net/10155/java-reflection

Класс byteBuffer заменил ранее использовавшийся short[] memory в
качестве памяти форт виртуальной машины. Массив 16-битных чисел
в качестве памяти имел множество недостатков.
например: байт надо было записывать или в 16-битную ячейку,
или совершать кульбиты со сдвигами битов. А тип
double или long надо было распихивать в четыре ячейки.
В ByteBuffer же есть методы
Код:

byte  b = get(int index);
double d = getDouble(int index);
аналогично 
getChar(int index)  getFloat(int index) getInt(int index) getLong(int index) getShort(int index)
так же в ByteBuffer есть переменная position.
Если вызвать функции без параметра
getChar() getFloat() getInt() getLong() getShort() - то загрузятся
значения относительно переменной position, а сама переменная получит
приращение, соответствущее длине значений.

Так же есть функции записи в память
put(int index, byte b) putInt(int index,int i) putLong(int index,long l) итд.
и
put( byte b) putInt(int i) putLong(long l) относительно position.

Следущее - reflection api.
Этот класс позволяет вызывать процедуры и обращатся к переменным ява программы,
используя только текстовое название этой процедуры или переменной.
Делается это примерно так
Код:

 Object o;                                        // тут обычно класс,
 public Method [] procedureLists = new Method[100]; // массив процедур
 int procedureIndex=0;                          //свободное место в массиве
 int ind_immediate;
...
procedureLists [ procedureIndex ] = o.getClass().getDeclaredMethod("immediate");
ind_immediate=procedureIndex;
procedureIndex++;      //регистрация процедуры immediate
...  далее создается статья для immediate, где запоминается индекс этой процедуры в массиве.
...  процедура  void immediate()  уже должна существовать

 // запуск процедуры
  procedureLists [ ind_immediate ].invoke(o);   
Это предоставляет очень большие удобства, раньше для этого
приходилось органиовывать целые гирлянды, типа
switch(a) {
...
case n : immediate() ; break;
case ...
}

Так же постарался улучшить код.
Например, постарался использовать ф-циии
L>NAME , >body итд. вместо link + 4 и adr_cfa+4.
В плане улучшения кода еще много работы, буду постепенно делать.

Еще ввел плавающую точку.
В ближайшее время выложу проект, после того,
как удалю отладочный мусор и еще раз перепроверю.

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор vikt144 Ср Янв 12, 2022 2:07 am

Собрался было опубликовать форт, как обещал выше, но черт попутал - решил переписать слово
." anyword " c явы на форт, с целью проверки форт-системы.
Код:

 : compile_call  ( компилирует вызов процедуры  -> compile_call type  ) 
  r>  dup      ( сохранить  со стека возвратов значение, которое занесло туда вызов compilecall ) 
  c@  here c!  ( прочитать и скомпилировать байт, который следует после compilecall, обычно call )

    1 + dup      ( увеличить адрес на единицу )
    @ ,            ( компиляция адреса процедуры после compile_call )
    4 +  >r        ( вернуть на стек возвратов новое значение пропустить адрес, который вызвали)
 ;

 
  : ."  34 word  0 ( на стеке 0 0, здесь это значит, строка в буфере, длинна строки определяется автоматически )
      state 0 =
      if  type  ( если режим исполнения - печатать )
        else 
          spick  ( здесь, на стеке адрес и длина, продублировать строку, если 0 0 - продублировать буфер, )
          swap  ( на стеке  длина и адрес новой cnоки )
          literal literal ( если режим компиляции, генерируется код, который )
                            ( во время исполнения положит на стек адр и длину новой строки )
          compile_call  ( компилирует вызов процедуры type, возможно в форте есть специальное слово, компилирущее вызовы )
       type   
      then
 ; immediate 
 
  : q ." qwertu "  ;  ( тестовая процедура )
 


В случае, если compile_call реализуется на java, все прекрасно работает,
а на форте нет. Расследование показало, что во время определения слова q
при запуске слова немедленного исполнения .", со стека возвратов
снимается почему то не адрес после compile_call, а адрес в слове q,
после ." qwertu ". Что это, оптимизация кода ява машиной, или моя какая-то ошибка -
черт знает.
Все это говорит о том, что задача создания грамотного руководства по построению
форт транслятора созрела и перезрела. Создание транслятора должно способствовать
пониманию работы форт-систем, а не борьбу со всякими мутностями на каждом шагу.

На этом я временно прекращаю разработку форт-систем, буду использовать то, что есть.
На первоначальное написания скриптов должно хватить. Тем более, это основная цель
данной работы. Успех этой работы, как я надеюсь, сделает работу с программами,
которые будут написаны с учетом возможности выполнять форт-скрипты, такой же
легкой и приятной, как написание скриптов для систем Unix.

Есть идеи, создать формальное описание стековой машины. Вроде должно облегчить
создание форт систем.

Свежий форт опубликую после перепроверки, надеюсь никаких камней не будет.
Затем переработаю материал, который выше, по андроид программированию,
и затем финал, навигационная программа с фортом на борту.

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор vikt144 Пн Янв 17, 2022 2:13 pm

Переименовал state в state@ .
Это по прежнему процедура, но теперь ее проще найти поиском,
когда буду переписывать. Сразу делать ее переменной не стал,
в многозадачной среде она может иметь разные значения для
каждой задачи и опять пришлось бы переделывать.

План работ.
Перепроверить и опубликовать текущую реализацию форта. (возможно сегодня)

Переработать реализацию простейшей программы для android c фортом на борту.
Основные изменения: Элементы gui теперь будут уложены в массивы.
Это позволит к ним обращаться через индекс массива, а не к каждому элементу
отдельно. Это позволит избавится от излишне громоздкой реализации Handler
для обращения к этим элементам.

Работа с Intent. Это наиболее вкусные применения скриптового языка, возможность
вызывать и передавать параметры окнам своих и чужих приложений и получать от них
сообщения.

Создание viewers элементов, рисование на экране, canvas.

Навигационная программа со скриптовым языком на борту.

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор vikt144 Ср Янв 19, 2022 12:19 am

Выкладываю промежуточные результаты.
https://github.com/vikt144/Forth/tree/main
Новый форт имеет простейшую реализацию словарей,
операции с плавающей точкой и другие новшества.

Список слов
NOP LIT dup drop swap >R R> CALL branch ;
0> 0< 0= ?branch
@ !
+ - * /MOD
AND OR XOR SHL SHR
ZERO_EXIT 1+ 1-
IN OUT WAIT LIT8 c@ c!
EXIT .

: ; create allot does> , here
compile compile_call immediate >resolve <resolve >mark <mark
name> L>NAME link> >body state@
word find

( комментарий - пропускает текстовый блок до ')'
\ - комментарий не поддерживается

< > =
if then else
begin until while repeat

var const

over rot ?DUP R@ / mod
2+ 2- 2/
negate
ABS ( A --->абс A )

2dup 2drop 2var 2@ 2!

Тип float

Примеры чисел с
1.073741824E9 5.304989477E-315 10f 4.6
В общем все, что совместимо с типом данных для java double
здесь числа с точкой не являются числом двойной точности

flit
fdup fswap fdrop
f. f! f@ f+ f- f* f/ f> f< f= f<> f>= f<=
fsin fcos ftan fasin facos fatan fatan2
fln flog fsqrt fexp fabs floor d>f f>d

Строки
ascii -- ascii " вернет 34
s" -размещает строку
type
s+ ( s0 l0 s1 l1 - sn ln конкатенация строк )
spick - дублирование строки
s= сравнение строк

В файле с именем 0 (ноль), находятся расширения, написанные на форте

constant variable c, 2const
>name
voc-link - список словарей
адреса переменных в памяти виртуальной машины форта.
2 constant here_
6 constant latest
10 constant state
15 constant context
20 constant current
25 constant forthVoc

vocabulary DEFINITIONS forth

Компиляция
javac helloForth.java

Запуск
java helloForth 0

0-это файл с расширениями.
https://github.com/vikt144/Forth/blob/main/0

главный файл
https://github.com/vikt144/Forth/blob/main/forth/fas.java

Запускающий файл
https://github.com/vikt144/Forth/blob/main/helloForth.java

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор Gudleifr Ср Янв 19, 2022 1:18 am

Рад, что не бросили.

vikt144 пишет:главный файл
https://github.com/vikt144/Forth/blob/main/forth/fas.java

Верю. Но, неужели нельзя хоть немного литературнее? Угадать место, в которое нужно ткнуть, чтобы понять суть, в 1000-строчном файле, практически нереально. Особенно, видя комментарии "вырезано", "туды - сюды"... Это как я показывал кому-то свой первый FORTH и он меня спросил: "А где тут то место, где запускаются слова?" А как его покажешь? Оно "размазано" по коду. Нужно придумать какую-то квадратно-гнездовую схему (типа моей), а пока ее нет - комментировать, комментировать и, еще раз, комментировать.
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор vikt144 Ср Янв 19, 2022 9:16 pm

Рад, что не бросили.
Собираюсь довести работу до некоторого итога.
нельзя хоть немного литературнее?
Увы, в части литературности я крайне бездарен.
Но буду стараться.
Эта версия предварительная, она нужна, что бы иметь возможность работать над другими частями
системы. В частности, что бы побыстрее начать разрабатывать базовые форт-слова,
для последущего скриптинга. Что является ключевым в данной работе.

Понемногу буду документировать.
Структура словарной статьи в этой реализации.
Код:

link  int              0  - указатель на поле link предыдущей статьи 
flag  byte              4  - поле имени - флаги
size  int  -            5  - поле имени -  длинна строки
adr  int              9  - поле имени - - индекс на строку или адрес строки
cfa  int              13 - cfa
Скопипащу из предыдущих записей, как выполняется слово, в зависимости от значения cfa

cfa = 0
создает статью name, значение cfa должно интерпретироваться
1) в процессе интерпретации слова name, на стек кладется адрес поля параметров статьи name.
2) в процессе компиляции текста, где вызывается name, генерируется код, который кладет на стек
адрес поля параметров статьи name.
генерируется код виртуальной машины lit <адрес поля параметров name>

cfa=1 -- в этой реализации присваивается статьям,
которые являются обертками для опкодов виртуальной машины,
таких как dup + - ! @ итд.

поле параметров в этом случае состоит из двух слов и выглядит например для dup так,
opcode dup -- 2
opcode ret -- 9 - опкод для возврата из подпрограммы
(или -- 2 9 )
В процессе компиляции какой-нибудь словарной статьи, в случае ссылки на dup, просто скопирует 2 в поле параметров новой статьи.
В процессе интерпретации статьи dup, будет просто сделан вызов exec
<адрес поля параметров dup> , а ret вернет управление в интерпретатор.

Слова, определенные через : (двоеточия), это вообще процедура.
Здесь для таких слов cfa=2.
Если в процессе компиляции встретится ссылка на такое слово, то будет
сгенерирован код call <адрес поля параметров >

Слова, определенные через create does> в процессе выполнения оставляют на стеке
адрес поля параметров, и выполняют код, который расположен после does>.

Здесь cfa=-<адрес кода после does> , отрицательное значение используется,
что бы различить от других случаев.
В процессе компиляции генерируется код
lit <адрес поля параметров> call <abs(cfa)>
Процедура exec в файле fas.java (форт ассемблер) выполняет слово,
а comp - компилирует.
exec заносит в стек возвратов адрес процедуры exit,
которая потом остановит виртуальную машину и вернет управление interpret.
Затем exec выполнит слово, в соответствии со значением cfa


vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор Gudleifr Ср Янв 19, 2022 9:54 pm

vikt144 пишет:Но буду стараться.
Заранее спасибо.
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор vikt144 Сб Янв 22, 2022 1:22 am

Набросал простейшую андроид-прграммку, которая просто читает из editbox и
переименовывает кнопочку.
Туда буду внедрять свой новый форт.

Исходники
https://github.com/vikt144/less1

О программе aide, для компиляции проектов на телефоне.
http://fforum.winglion.ru/viewtopic.php?p=48738#p48738

apk - файл, если нужен.
https://anonfiles.com/Hcn3IdCdx6/les_7z

Затем решу трудности с реализацией слова expect,
которые возникают из за того, что запущенные из обработчиков android gui
процессы невозможно приостановить и возобновить снова. Его можно только
завершить. Затем Intent, меню , вывод и рисование изображений.

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор vikt144 Пн Фев 14, 2022 3:22 am

Прошу прощения с задержкой на пол месяца, но
проект после переноса на андроид вылетал после запуска, хотя видимых ошибок
не было. Просто наваждение какое-то. Потом разобрался, позже переделаю
инициализацию форт машины в отдельную процедуру, что бы избежать
подобных неожиданностей в будущем.

Тоже предварительная версия.
Программы на форте могут изменять содержимое текстовых полей и
названия кнопок, а также записывать и читать текст в каналы и из каналов.
Это необходимо для реализации скриптовых возможностей форт системы
в андроид приложении. В данный момент это находится в зачаточном состоянии.
После установки программы необходимо настроить путь к каталогу форт-програм.
Это немного хлопотно, но это выходка гугол, после версии android 4.4б
программа, которая не поставляется вместе с прибором и специальным образом
не подписана, не может записывать данные куда угодно.
Как создать каталог для записи, описано здесь.
только вместо com.virf.less надо писать
com.less
http://fforum.winglion.ru/viewtopic.php?p=48787#p48787

В этот каталог надо положить файл с именем 0 (ноль).
Там находятся форт тексты, которые автоматически
загрузятся и исполнятся.
https://github.com/vikt144/less1/blob/WithForth/0
Проект
https://github.com/vikt144/less1/tree/WithForth

Черновик: Версия II - Страница 2 Screenshot-20220214-014649-less1

От прошлогоднего проекта отличается тем, что элементы gui - интерфейса теперь собраны
в массивы, что делает реализацию Handler (средство доступа к интерфейсу gui из потока)
намного компактнее.
Добавлено меню, это очень простой интерфейс, реализация обработчиков
элементов меню тоже простая.

ф-ции gui
s" text " 1 -- txt.set текстовому полю N1 присвоит зачение 'text'
s" bttext " 3 btn.txt.set -- 3 кнопку назовет bttext
s" anytext " 0 ed.txt.set -- в 0 поле редактирования загрузит anytext
s" anytext " 0 ed.txt.hint -- в 0 поле редактирования загрузит подсказку
clr -- очищает поле редактирования

Запись в канал осуществляется обычными операциями
. f. type ."

7.8 fsin f. ( запись в канал )
0 readchan ( на стеке адрес и длина строки из канала 0, канал обнуляется)
0 txt.set ( полю с номером ноль присваивается результат )

Черновик: Версия II - Страница 2 Screenshot-20220214-030432-less1

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор vikt144 Пн Фев 14, 2022 11:32 pm

Кнопка load загружает файл, имя которого находится
в поле редактирования. Текст загруженного файла
замещает имя файла в окне редактирования.
Кнопка bt4 интерпретирует форт текст,
который находится в окне редактирования.

Собрать apk из исходников в среде aide очень легко,
для этого достаточно скопировать каталоги с исходником.
Потом открыть, используя файл-менеджер aide каталог,
где появится, помимо файлов, предложение, собрать проект
из этих исходников. Среда сама обвесит проект необходимыми
градлами и файлами. С удовольствием отвечу на возникшие вопросы.

Исходник + apk + 0-файл
https://www39.zippyshare.com/v/NRaxOJVk/file.html

Пока откоментирую меню.
В общем все описано тут
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/45-urok-13-sozdanie-prostogo-menju.html
Я использовал простейшую реализацию меню.
Код находится внизу файла MainActivity.java
элемент clr исполняет фортслово clr, которое очищает поле ввода от текста.
Остальные вызывают c помощью Intent настройки, браузер и карту.
Intent - очень важная часть програмирования android, можно вызывать
с их помощью другие экраны и приложения и сервисы.
Так же можно возвратить результаты работы других приложений.
Теперь займусь проблемой expect.
Проблема очень мутная в графической среде, затем рисовалка(реализация своего view
компонента - очень вкусная тема)

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор vikt144 Пт Мар 18, 2022 1:16 pm

Отправил через телеграм новую промежуточную версию форта
Еще можно скачать тут
https://anonfiles.com/lbScq3O4xb/less_7z
пасс 12345
На файлообменниках желательно выключать ява-скрипты.
Иначе - вывалка рекламы в огромном количестве.

К предыдущим постам - почему через обменник?
Просто у меня не получается выкладывать бинарные файлы
в гитхаб. Раз с ходу не получилось, то и не стоит время тратить,
что бы разбираться, в ущерб разработки.

Новое. Теперь к файлу 0 добавился еще файл 1 , который тоже
автоматически считывается и интерпретируется при старте системы.
Более менее сносно решена проблема expect в графическом интерфейсе.
Напомню, что в android gui процесс невозможно приостановить, можно
только выйти и повторно войти в interpret.
Или запускать процесс в фоновом режиме. Я так пробовал, но
получаются еще более уродские решения.

Добавил программу для решения квадратных уравнений, для иллюстрации

Если кто будет системой заниматься, устанавливать, брать фрагменты кода и пр.
задавайте вопросы.

В общем, Less1, это простейшая android программа, с фортом на борту.
Ее предназначение, тестирование различных мутных android api,
прежде чем вставлять их в основную программу. Особенно тех,
которые по разному работают на различных устройствах.

Следущая разработка будет намного интересней.

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор vikt144 Пт Мар 18, 2022 7:04 pm

Если программа установлена и настроены пути, то работать с форт текстами
можно следующим образом.
1) Можно добавить код к файлу 1 и он автоматически загрузится и выполнится.
2) Можно вводить форт-тексты в поле ввода и нажимать intrprt.
3) Ввести имя файла в поле ввода и нажать load.
Можно создать подкаталог( средствами android-системы) поместить туда файл,
и вводить данные так
Код:
cat/filename
потом нажать load и intrprt
Загрузить поставляемый файл q3 - (нахождение корней кв уравнения)


Черновик: Версия II - Страница 2 Screenshot-20220315-005537-less1


Черновик: Версия II - Страница 2 Screenshot-20220315-005604-less1

нажимаем intrprt и система 3 раза предложит ввести коэфиценты.


Черновик: Версия II - Страница 2 Screenshot-20220315-005708-less1

и выведет решение

Черновик: Версия II - Страница 2 Screenshot-20220315-005749-less1
На последнем скрине вместо символа корня вывела абракадабру,
надо еще поработать с utf кодировкой при загрузке файла.

Исходный код фортпрограммы

Код:

fvariable a fvariable b
fvariable c
fvariable d  fvariable b2a
fvariable x1 fvariable ix
fvariable x2
 
 ( 5.5 a f!  6.6 b f!  7.7 c f!  )   

0 4 10  inputTuning  ( настройка ввода  см. ниже )

s" "  2const expectString ( тут ожидаемые строки запоминаютс два числа - адрес и длинна )

: inp  ( тест на float  -1 да . 0 нет )
  expectString
  expect
  expectString
  drop ( сбросить длинну )
  0
  parsenum  (  возвращает N  0 - целое,  3  и на флоат-стеке значение  N  и -1 - ошибка )
  3 = 
    if
      -1  ( на стеке -1 ,true, на фстеке знач )     
      else
      drop 0
    then     
;   

: inpdata
 clr                              ( очистка поля ввода  )
 s" input a " 0 txt.set    ( меняется текст в текстовом поле 0 на "input a" )
 s" a " 4 btn.txt.set      ( меняется текст 4 кнопки с "intrprt" на "A" )
 inp                         
 if
  a f!   
  clr
    s" input b " 0 txt.set
    s" b " 4 btn.txt.set
    inp
    if 
      b f!
      clr
      s" input C " 0 txt.set
      s" c " 4 btn.txt.set
      inp
      if
        c f!
        s" inp calc show " 0 txt.set
        s" intrpr " 4 btn.txt.set
        then
    then 
    then
 ;
 
 
 
: di  b f@ fdup f*  ( b^2 - 4ac )
  4.0 a f@ f* c f@ f*
  f- ;
  : calc
 di fdup d f!  fabs fsqrt  2.0 a f@ f* f/  ix f!  ( i sqrt d )
 b f@ -2.0  a f@ f* f/  b2a f!  ( -b/2a )
 
 d f@  ." discrm= " f. cr  ( текст печатается в канал  )
 ;

: sol
    d f@ 0.0  f<  ( if d<0 )
    if
      ." complex 1 = " b2a  f@ f. ." + i√ " ix f@ f. cr
      ." complex 2 = " b2a  f@ f. ." - i√ " ix f@ f. cr     
      else
            d f@  0.0  f=  ( if d=0 ) 
    if
            ." one " b2a f@ f.
        else 
          ." one " b2a  f@  ix f@ f+ f.
          ." two " b2a  f@  ix f@ f- f.
      then
    then     
 ;

 : show 0 readchan  ( извлекается текст, записанный в канал 0 и присваивается текстовому полю 0 )
 0 txt.set ;

 inpdata calc sol show
 
0 4 10 inputTuning - номер поля ввода 0, 4 кнопка 10 - номер функции
настраивает ввод данных для expect. Пока реализована только 0-функция для консоли,
и 10 для поля с кнопкой. inputTuning ожидается очень сложным словом.

(adrString param) parsenum - самоделка, для интерпретации чисел. Не нашел в dpanth94 ничего,
изобрел свое, не стал тратить время. Оставил на будущее

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор vikt144 Вт Мар 22, 2022 12:58 am

Клонирование программы.
Программу Less1 можно клонировать, например для того, что бы протестировать
работу с гироскопами или gps, до того, как вставлять код в более сложные проекты.
Для примера создадим простую программу, работающую с gps, исрльзуя android Aide.
https://play.google.com/store/apps/details?id=com.aide.ui&hl=ru&gl=US
Для этого
1. Придумаем название программы и создадим каталог, используя это имя. Например nav0.
2. Копируем из каталога Less1 в каталог nav0 каталог app. Ничего другого копировать не надо.
3. В каталоге app оставляем только каталог src с подкаталогами и файл build.gradle, остальное удаляем.
( Внимание, существует 2 файла build.gradle, используем только тот, который внутри
каталога app. Наиболее важный параметр этого файла MinSdkVersion
MinSdkVersion 14 - программа будет выполнятся на android 4.0 и старше
MinSdkVersion 9 android 2.3 итд.
см https://developer.android.com/guide/topics/manifest/uses-sdk-element )
4. Затем перейдите в каталог main/src/res/values найдите файл strings.xml.
Найдите в файле
<string name="app_name">prog_name</string>. Замените prog_name на
имя, которое вы хотели бы, чтобы отображалось, когда приложение загружено.


5. Загрузите исходники в android устройство, где установлена aide
Лучше скачать в каталоги, которые принадлежат aide, обычно AppProjects.
6. Заходим в aide, в меню выбираем View/Files
7. заходим в папку nav0 затем в app и файл менеджер предложит открыть
проект. Открываем.
8. Затем в меню aide выбираем Errors, обязательно убеждаемся,
что нет ошибок, и компилируем проект, нажимая на черный треугольник вверху.
Устанавливаем, открываем.

Не забудьте выкачать проект назад, в компьютер, чтобы выкачать файлы,
которые aide добавил к проекту. Они могут понадобится.

Теперь можно развивать новый проект, не затрагивая базового.
Только надо учесть, что запись в sharedPreferenses будет такая же,
как в предыдущем проекте Less1, поэтому в новом проекте будут
доступны те же файлы, что и в Less1, в частности 0 и 1.
О файлах и правах доступа - это отдельная и мутная тема.
Google , начиная с версии android 4.2, запрещает записывать
файлы на карту, кроме как в специальные каталоги.
Об этом позже.

Сейчас буду разрабатывать простейшую программу с фортом, использующую gps,
по итогам, внесу коррективы в проект Less1.

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор vikt144 Ср Май 11, 2022 1:17 pm

Если кто читал сообщение выше, не используйте этот способ клонирования программ.
Aide по видимому мутно работает с двумя программами, записанными в один package.
Лучше создайте в aide новый проект с новым package, а затем в ручную
скопируйте файлы, отредактировав строку "package new.project.pac; " в java файлах.
Спрашивайте у меня, в случае чего.
Имя package лучше начинать с "a" и избегать названий типа "com.package.name".
Просто названий программ в самом устройстве, начинающихся с "com"
настолько много, что найти свою программу, будет не легко.

Итак, промежуточный итог. Новая программа может делать тоже самое,
что и предыдущая, но еще может работать с модулем gps, и проигрывать
звуковые файлы. Еще форт тут может читать и записывать текстовые файлы.
Если работа форта c gps разрешена, то по приходу сигнала с gps,
будет вызвано форт слово с именем "getgps" и координаты будут отправлены через
стек плавающей точки. Пользователь может переписать форт слово "getgps", чтобы оно
решало его задачу. Сейчас оно просто преобразует выводит на экран координаты,
записанных в десятичной системе, в систему градусы - десятичные минуты,
наиболее употребительные.
В файле форттекстов, с именем gps также находятся обработчики
add_wp - срабатывают при нажатии кнопки "wpt", добавляют координаты в
цепной список.
saved - обходит цепной список с точками wpt (waypoints), положенных предыдущим
словом, забирает строку с точками трека ( строка формируется процедурой
на java, точек очень много, пришлось бы для форт выделять очень много памяти.
Проблема будет решаться с помощью каналов, что бы можно было бы обрабатывать
на лету.) и все это оформляет в файл, со стандартным форматом "gpx".
Обработчик запускается при нажатии кнопки "bt5"
В общем, не совсем безполезная программа. Трек, записанный с ее помощью.
https://nakarte.me/#m=12/55.99195/37.83966&l=O&nktl=Ho1X5TwjGD2VwLs8EPQrxg

Черновик: Версия II - Страница 2 Screenshot-20220511-123449-nav0

Если кто захочет повозиться с программой, напишите, тогда напишу подробней.
Самому разобраться с ней невозможно.

Следующей темой будет графика - очень интересная тема.
Там будет рисование карты и отрисовка треков.

Сылка на анон
https://anonfiles.com/98D1o1f0ya/andfrt_7z
Еще отправлю в телеграм

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор vikt144 Ср Май 11, 2022 10:13 pm

чтоб не жалко было.
Опасность вполне реальная.
Написать Intent, который вызовет браузер с определенным url,
или приложение "телефон " с преднабранным платным номером
проще простого. Конкретно в этой версии такой возможности нет,
но ее очень легко добавить используя исходные тексты.
Но эта программа написана любителем для любителей,
что бы он адаптировал ее к своим нуждам. Для мошенников есть
куча других, не менее легких способов делать гадости.

Есть варианты эмуляции андроид, в том числе и online.
https://compconfig.ru/mobile/emulyator-android-dlya-pk.html
Я испробовал только что это.
https://www.apkonline.net
Увидел свои кнопочки.
Можно ли эмулировать gps, не разобрался

Установка программы.
1 способ. Компиляция из исходников.
Наиболее удобно использовать aide, так как проект можно компилировать
прямо на планшете.
https://www.android-ide.com/
google play
https://play.google.com/store/apps/details?id=com.aide.ui&referrer=utm_source%3Daidewebsite%26utm_campaign%3Dhomepage
тема на 4pda
https://4pda.to/forum/index.php?showtopic=319369
В бесплатной версии может работать с 5 java файлами. ( именно по этому
весь код форт-системы впихнут в один файл )
Можно оплатить 850 рублей или воспользоваться крякнутой версией с pda.
(я планирую оплатить, как только научусь пользоваться электронными кошельками)

2 способ Установка apk-файла.
Загрузить файл на устройство и выполнить.
Если не получается, зайти в настройки, безопасность,
разрешить устанавливать из ненадежных источников.
(Андроид считает ненадежными источниками все, кроме google play)
Установить программу, затем вернуться и запретить ненадежные источники.
см.
https://setphone.ru/rukovodstva/kak-ustanovit-apk-fajl-na-android/

Далее необходимо настроить пути программы. Для android <=4.0 более менее
любой путь, для старших - android запрещает записывать данные во многие места,
в том числе на sd-карту. кроме определенного пути, обычно типа
/storage/1234-5678/Android/data. В каталоге data, надо с помощью
файл менеджера, поставляемого вместе с устройством, который имеет права
создавать каталоги в любом месте, создать каталог art.nav.one (имя пакета)
не перепутайте art.nav.one, а не art/nav/one
/storage/1234-5678/Android/data/art.nav.one Запомните этот путь.
В этот каталог запись гарантированно будет разрешена.
1234 5678 - имя sd карты. Оно отличается на разных устройствах.
Еще на эту тему
https://webhamster.ru/mytetrashare/index/mtb0/1421490641w34hno1mb8
для любителей рискнуть
https://miradmin.ru/sd-android/

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор vikt144 Ср Май 11, 2022 10:14 pm

Далее копируем в этот каталог файлы с именем 0 , 1 , gps.
Потом запускаем программу, нажимаем setup
вводим только что полученный путь в форму, и быстро два раза жмем setup.
Затем выходим из программы, и снова заходим, и если все сделано правильно
появится кнопка load.
В строке редактирования пишем gps и нажимаем load. затем intrprt.
Нажимаем gpson. Ждем сигнала спутников.
В меню включаем пункт lockgps
теперь обработчик gps будет вызывать форт слово getgps и передавать координаты lat lon
через float стек. Слово getgps можно отредактировать на свой вкус в файле gps.

Нажатие кнопки wpt вызывает обработчик add_wp и передает ему параметры через
float стек.
Кнопка bt5 вызывает обработчик saved и формирует gpx-файл из точек трека и точек ,
добавленных wpt.

Обычные фортовские операции вывода
. f. ." kk " emit type
d. - ( работает с ошибкой)
тут выводят данные в канал 0.
Функция readchan читает канал, из прочитанного создает и размещает строку, оставляя на стеке
адрес и длину строки.
Таким образом, что бы увидеть вывод программы, можно выполнить
0 readchan 1 txt.set (или 0 txt.set)
readchan и writechan могут работать и с файлами.
Файл с каналом должен быть связан процедурой assign

s" w" ( запись )
s" file" ( протокол файл - в будущем будет все, что угодно http и прчее )
s" cur" ( относительно текущего каталога )
s" filename"
3 assign ( привязан к 3 каналу )

0 readchan 3 writechan ( вывод программы запишется в файл с именем filename )
writechan оставляет на стеке 0 в случае успеха.
Полезные пункты меню
wakelock - включает/выключает гашение экрана
Предотвращает выключение экрана, хотя экран темнеет. Делает удобным
использование навигации.
Внимание: пунктами меню ftest и path не допустимо, они отладочные,
я не убрал их по невнимательности.

Вывод звука
1.0 1.0 ( громк левая правая 1.0 max )
1
0
1.0 ( cкорость воспроизведения )
3 ( звук под нрмером 3 , тут 0 до 5 )
0 media.play
упрощенная
3 splay ( звук под номером 3 )
Обе функции оставляют на стеке 0 или -100 в случае успеха/ не успеха

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор vikt144 Чт Июн 23, 2022 1:43 am


Реализация canvas, суть.
Можно почитать тут
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/311-urok-141-risovanie-dostup-k-canvas.html
и тут
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/312-urok-142-risovanie-prostye-figury-tekst.html

Там описывается способ выводить графику на полный экран.
Для моих задач canvas должен занимать только часть экрана,
соседствуя с кнопками и текстовыми полями. Для этого пришлось
немного повозится. Пришлось создать собственный view элемент.
но об этом позже.
Суть графики андроид в том, что необходимо переопределять
функцию onDraw.
Код:

                super(context,    attrs);
                p = new Paint();

        @Override
        protected void onDraw(Canvas canvas) {

                super.onDraw(canvas);
 
                canvas.drawColor(Color.GREEN);
          p.setStrokeWidth(50);
          p.setColor(Color.RED);
          canvas.drawText("width="+displaywidth+" height="+displayheight, 10, 10, p);
/// итд
}
В ней вызываются графические ф-ции.
onDraw вызывается, когда приложение вызывает ф-цию invalidate, прямо вызвать ondraw нельзя.
Я ничего не смог придумать, кроме как присвоить графическим функциям некий код, который
могли бы формировать форт-слова, записывать их в массив, который функция onDraw
исполняла в цикле.

В моей реализации это выглядит так

ByteBuffer gmem = ByteBuffer.allocate( 1000 /* max capacity */ ); // память команд

В onDraw

Код:

      byte op = gmem.get();
        while (op != -1 ) {
          switch (op) {
            case 5  : p.setColor(gmem.getInt() );
            break;
            case 10 : p.setStrokeWidth( gmem.getInt() ); //
          break;
            case 15 : p.setTextSize( gmem.getInt() ); //
          break;         
            case 18 : canvas.drawPoint( gmem.getInt(), gmem.getInt() , p);
            break;
            case 20 : canvas.drawLine( gmem.getInt(), gmem.getInt(), gmem.getInt(), gmem.getInt() ,p);
          break;
          }//sw
          op = gmem.get(); 
      } //while


//// get() getInt() загружают байт . целое из памяти и автоматически увеличивают
/// указатель памяти на 1 или 4

Если у кого-то есть идея реализовать графику более эффективно, напишите.
Завтра продолжу.

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор vikt144 Чт Авг 11, 2022 2:05 pm

Продолжаю работать над проектом.
Успешно реализовывая навигационную часть проекта, к сожалению
допустил какую-то непонятную ошибку в фортовской части, конкретно в графике.
Решил не разбираться с этим, тем более, что осталось реализовать
только загрузку из сети, кэширование и отображение карты.
Затем буду переписывать проект.
В частности форт сделаю намного более полным и читаемым.
И с графикой, прежде чем внедрить ее в навигационный прект, буду разбираться
на более простом проекте, не отягощенным навигационными приблудами.

Сейчас реализованы 1) загрузка и отображение gpx файла. ( путевые точки и трек в
формате xml )
2) Отображение и сохранение точек трека, полученные через gps приемник в формате gpx.

Черновик: Версия II - Страница 2 Screenshot-20220811-123605-nav3

https://nakarte.me/#m=15/55.96711/37.80035&l=O&nktl=qZJcKV_rT86ZQCGiPOZiqA

Скошанные углы на повороте объясняются тем, что я забираю данные с gps один
раз в 10 секунд.

Кстати, реализацию фортов, оформлю отдельным проектом.
Думаю, форт сообществу надо было сделать это давно,
с тех пор, как возникла идея,
"каждый фортер должен написать свой форт".
Вполне согласен с этим утверждением.
Во первых, это поможет понять create does компилирущие слова итд.
Во вторых - в хозяйстве пригодицо.
Книга Баранова и Ноздрунова расчитана на очень подготовленного читателя,
и из за мизерного объема ее многие вещи мало раскрыты.

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор vikt144 Вс Авг 14, 2022 2:29 am

А просто писать на ФОРТЕ, использую всю красоту и мощь можно?

Нельзя. Скорее всего для андроида нет форта, пригодного для написания скриптов,
чтоб переправлять данные между процессами, как это делают в мире Юникс уже
пол столетия. Кстати, на такие возможности, мне кажется мало обращают
внимание. А они радикально облегчают любительское программирование,
оставляя реализацию всякой организационной хрени на "потом", которую
можно доработать скриптами.

Хорошая новость. Написал отображение карты за один вечер,
хотя ожидал закончить работу за месяц другой. Осталось только
написать кеширование загруженных из интернета тайлов, и можно
считать реализацию черновика сделанной.
Запись фрагмента недавней велопрогулки.

Черновик: Версия II - Страница 2 Screenshot-20220814-013411-nav3

На телефоне карту можно перемещать, написал свою реализацию перемещения
экрана, та, что используется в android api ужастна, экран залипает.

Код:

  float Xdown, Ydown;// координаты касания
  @Override
    public boolean onTouch(View v, MotionEvent event ) {

    float x,y;
    x = event.getX();  y = event.getY();
   
    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN: // нажатие
      Xdown=x; Ydown=y;
      break;
      case MotionEvent.ACTION_MOVE: // движение .. на некоторых моделях работает муторно
      break;
    case MotionEvent.ACTION_UP: // отпускание  !! убрать инт
      int dxp=(int)(Xdown-x); // смещение в пикселях 
      int dyp=-(int)(Ydown-y);                     
      double  dxm=dxp*PixelSizeMetres;  // смещение в метрах
      double dym=dyp*PixelSizeMetres;
      float klat=111111.0f;  // метров  в градусе по широте
      float kLon=(float ) (40000*Math.cos( Math.toRadians(  centrLat) )/360 ) *1000; // по долготе     
      double dxg = dxm/kLon;
      double dyg = dym/klat;
      centrLat=centrLat+dyg; 
      centrLon=centrLon+dxg;
       PixelSizeMetres = AU.calcMetrsPix(centrLat, zoom);
            dispCorner = AU.calcDispCorner(centrLat,centrLon,PixelSizeMetres, displaywidth , displayheight);     
        navView.tileArray=macroTileArray(  centrLat, centrLon,  zoom,    displaywidth  ,    displayheight);   
        if (AU.Wpt!=null)updateWP(  AU.Wpt,    dispCorner , PixelSizeMetres);
        if (AU.TRK!=null) updateTRK(AU.TRK);
        if (TRKp!=null)  updateGPS(TRKp);
        navView.invalidate();
      break;
    case MotionEvent.ACTION_CANCEL: 
      break;
    }
    return true;
  }

В работе использовал только сферическую геометрию и информацию отсюда
https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames

Никакими сторонними библиотеками не пользовался.

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор Gudleifr Вс Авг 14, 2022 3:39 pm

vikt144 пишет:Скорее всего для андроида нет форта, пригодного для написания скриптов,
чтоб переправлять данные между процессами, как это делают в мире Юникс уже
пол столетия
Да. Те же проблемы. На моем наладоннике стоит усеченная версия Windows. Зачем мне создавать окно, если я просто преобразую один файл в другой?- Не создавай!- Но в отсутствие консоли ОС я просто не увижу, что во что преобразовал. Отсюда дурацкий вывод: окно приложения - только для выдачи того, что в нормальных ОС идет на консоль. В переводе на FORTH-язык, видимо, создание в блоковой памяти блока выдачи текущей программы. Причем в формате, пригодном для его запуска для выполнения следующей операции (путем вставки в него меню команд, пригодного для правки)...
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор vikt144 Вс Авг 14, 2022 3:52 pm

В переводе на FORTH-язык, видимо, создание в блоковой памяти блока выдачи текущей программы.
Это легко сделать, если выдача команды небольшая. Иначе приднтся организовывать многозадачность,
что бы переключатся между выдающим данные словом и принимающим словом.

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор Gudleifr Вс Авг 14, 2022 5:17 pm

vikt144 пишет:Это легко сделать, если выдача команды небольшая
Я неправильно выразился. Основная выдача программы, как и положено в скрипте, идет в файл/конвейер. В блок попадает только результат/диагностика/варианты дальнейших операций.
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор vikt144 Вс Окт 09, 2022 6:53 am

Все это время выгуливал эту программу в велосипедных поездках.
Программа умеет работать с одним загруженным треком и отображать
текущий, формируемый трек. В принципе, несложно было бы написать
форт-программу, которая давала бы, например, звуковое оповещение в случае
отклонения от заданного трека, но почему-то поленился это сделать.
Вместо этого, используя Intent, реализовал вызов фотографической
программы пользователя Longer
http://fforum.winglion.ru/viewtopic.php?p=44257#p44257

(Кстати, много кода я надергал с его camSnap'a, на тот момент
я был чайником в андроид программировании)
Intent вызывается при нажатии на кнопку wpt, что позволяет
не только зафиксировать координаты путевой точки, но и отфотографировать ее
со всех сторон. Для этого ослабил крепление смартфона на руле так,
что бы можно было переворачивать его вертикально, для фотографирования,
или горизонтально, для навигации.
В целом, две взаимодействующие примитивные программы оказались
гораздо удобнее каких-то иных средств. Когда же в обоих окажется
отлаженный forth, использование таких программ станет еще
на порядок гибче.

Работа над фортом продолжается - введено много улучшений.
Прорабатывается многозадачность, каналы.
Добавилась возможность работать не только с файлами, но и с датаграммами.

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор vikt144 Ср Окт 26, 2022 2:23 pm

По причине отсутствия опыта работы с сокетами, довольно много кода пришлось переписывать
много раз. Пока идет чистка кода после всех экспериментов.
Но уже есть сетевые разработки, Wake on lan, ftp-клиент.
Не сложно также оснастить каждое приложение, содержащее форт, своим ftp-сервером,
что бы можно было без геморойно обмениваться с ним данными.
Сейчас выложу рабочую версию самодельной wol.
( удаленное включение компьютеров.
https://admcomp.ru/wol.html
)
К сожалению технология сбойная, иногда не срабатывает.
Но вероятность сбоя самодельной wol и "официальной" программы wol примерно равно.

Для запуска нужно реализовать ф-ции
adrString lenString index getchar
и
adrByte len send - которая посылает udp-пакет определенному хосту
Код:

  2variable mk    s" 00:1A:4D:2F:89:0C"  mk 2!  \  адрес и размер строки mac-адреса
 
  variable aa  variable bb variable er
 
  :  dps  \  int n  int a int b  a>b  диапазон a < n < b ,-1 a n b > 0   
    0 er !
    bb !  aa !
    dup aa @ -  0> 
    if
      DUP bb @ - 0<
      if -1 er !
      then
      then 
    drop
    er @ 
    ;  \  -1 -- входит в диапазон  между a и b
   
  : ifdig16  \ char - log ( num | -1 )  0 - 9 , a - f ; -1 false
    dup 47 59 dps        \ 0-9
        if 48 -
    else
     dup 96 103  dps  \ a-f
     if 87 - 
     else
       dup 64 71 dps  \ A-F
       if 55 -
       else drop -1 
       then   
            then
          then
    ;  \ 0 - Н или -1
 
  : sum16  ( dig1 dig2 - byte or -1000  )
      swap
      dup 0<  if  \ error (-1)
              drop drop -1000
              else
         swap
         dup 0< if
               drop drop -1000
          else 
                    4 shl or \ сдвигает и складывает
                    then
         then     
  ; 
   
    variable qu 0 qu !
 
  : to_byte \  ..  - byte  два соседних символа из строки mk превращает в байт
    mk 2@ qu @ getchar \ char from string
    1 qu +! 
    ifdig16            \    dup .
    mk 2@ qu @ getchar
    1 qu +!   
    ifdig16            \    dup .
    swap
    sum16
  ;  \ qu приращается
 

  : mac    \  Читает mac-строку и укладывает байты           
      to_byte  1 qu +!  c,
      to_byte  1 qu +!  c,
      to_byte 1 qu +!  c,
      to_byte 1 qu +!  c,
      to_byte 1 qu +!  c,
      to_byte          c,
  0 qu !
  ;
 variable macm
  here macm  !
 mac  \  в macm - адрес байтов mac
 
 6  6 16 * +  constant dtg.length  \ 102 
 create datagram[]  dtg.length allot
 0 qu !
 
 : fillFF  \ заполнить 6 байтов структуры datagram байтом ff
  datagram[] dup 5 + swap
  do 255  i  c! loop 
 ; 
 
 : movMak \ копировать байты mak адреса
  6 qu +!
  \ qu dup 5 + swap  \ qu текущий адрес в datagram
  5 0
  do
    macm @  i + c@  qu @ i + c!
  loop
  ;
 
 : 4mv  movMak  movMak  movMak  movMak ;
 
 : 16mv 4mv 4mv 4mv 4mv ; 
 
 : pre
  fillff  \ 16mv
  datagram[] qu !
  16mv
  ;
  pre
  datagram[]  dtg.length  send
 
Реализовано конечно аляповато, но ковырятся времени нет.

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II - Страница 2 Empty Re: Черновик: Версия II

Сообщение автор vikt144 Вс Ноя 13, 2022 1:56 am

Работа продолжается. Основная трудность - неопределенность предполагаемой системы, для которой
пишешь интерфейс. Когда система наконец создана, становится очевидны дефекты интерфейса,
которые должны поддерживать систему. Работа идет на новый круг, что психологически тяжело и неприятно.
Сейчас прорабатываю функцию assign.
Она назначает параметры устройствам ввода-вывода, куда и откуда forth скрипт будет выдавать
и забирать данные, не заботясь, куда эти данные попадут на самом деле.
Устройством ввода вывода может быть что угодно, его даже можно написать на форте.

Остановился на следущем дизайне функции assign
Код:
  \  .s" name" - оставляет на стеке адрес и длину слова name
.s" protocol  param1 ... paramN" 
.s" filename"
 channal  assign  \ int int  int int  int assign
сейчас развиты следущие протоколы
Код:

s" file" s" anyFileName"  5 assign \ тут все понятно файл назначается 5 каналу
 ( url =  IP_or_HOSTNAME:port  or  user:password@IP_or_HOSTNAME:port/path )
s" udp  url"  s" filename" 5 assign
 s" tcp  url"  s" filename" 5 assign
s" ftp url"  s" filename" 5 assign
Запись - чтение осуществляется функциями
readchan writechan - для текстов
writebytes readbytes - массивы байт

Это все у меня уже находится в эксплуатации, скрипты буду понемногу выкладывать.
Сам forth пока выкладывать не буду, код еще пока грязный.

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Страница 2 из 2 Предыдущий  1, 2

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения