Черновик: Версия II
Участников: 2
Страница 1 из 2
Страница 1 из 2 • 1, 2
Черновик: Версия II
Предыдущий черновик был скорее быстрое введение в android программирование,
а не в форт. Тут буду делать все компактнее, удачные абзацы буду переносить со старого
черновика - сюда.
Итак, задача первая, создать методичку по написанию форт-системы.
Задача созрела давно, везде же говорится, что надо писать свой форт,
и не предлагают ничего, кроме реализации на каких-то ассемблерах.
Это установка телеги впереди лошади. Любой школьник, вооружившись
справочником, закодирует алгоритм на ассемблере, но не каждый
захочет разбирать ассемблерный текст, что бы понять, как это
работает.
Баранов и Ноздрунов тоже не годятся на сегодняшний день,
их книга расчитана на узких специалистов.
Буду делать, как получится, хотелось бы, что бы кто-нибудь сделал лучше.
Так же буду дублировать на Winglion и если работа окажется удачной,
то и на другие форт ресурсы, если они конечно есть.
Пока ссылка на предварительный форт
https://github.com/vikt144/Forth/blob/main/forth/fas.java - основной файл
https://github.com/vikt144/Forth/blob/main/helloForth.java - запускающая часть
а не в форт. Тут буду делать все компактнее, удачные абзацы буду переносить со старого
черновика - сюда.
Итак, задача первая, создать методичку по написанию форт-системы.
Задача созрела давно, везде же говорится, что надо писать свой форт,
и не предлагают ничего, кроме реализации на каких-то ассемблерах.
Это установка телеги впереди лошади. Любой школьник, вооружившись
справочником, закодирует алгоритм на ассемблере, но не каждый
захочет разбирать ассемблерный текст, что бы понять, как это
работает.
Баранов и Ноздрунов тоже не годятся на сегодняшний день,
их книга расчитана на узких специалистов.
Буду делать, как получится, хотелось бы, что бы кто-нибудь сделал лучше.
Так же буду дублировать на Winglion и если работа окажется удачной,
то и на другие форт ресурсы, если они конечно есть.
Пока ссылка на предварительный форт
https://github.com/vikt144/Forth/blob/main/forth/fas.java - основной файл
https://github.com/vikt144/Forth/blob/main/helloForth.java - запускающая часть
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Версия II
Андроид приложение
https://github.com/vikt144/less0
Файл разметки
https://github.com/vikt144/less0/blob/main/app/src/main/res/layout/main.xml
java - файл
https://github.com/vikt144/less0/blob/main/app/src/main/java/com/virf/less/MainActivity.java
Тут скелет простейшей java программы, разметка xml
Так же тут
Присвоение текста текстовому полю (text0)
Присвоение текста кнопкам.
Взятие текста из поля редактирования
Завтра попробую присоединить к этому форт.
https://github.com/vikt144/less0
Файл разметки
https://github.com/vikt144/less0/blob/main/app/src/main/res/layout/main.xml
java - файл
https://github.com/vikt144/less0/blob/main/app/src/main/java/com/virf/less/MainActivity.java
Тут скелет простейшей java программы, разметка xml
Так же тут
Присвоение текста текстовому полю (text0)
Присвоение текста кнопкам.
Взятие текста из поля редактирования
Завтра попробую присоединить к этому форт.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Версия II
Прокомментирую сначала форт-систему.
Это черновая версия форта.
Память здесь представлена массивом 16 битных ячеек.
public short[] image;
Стек 32битный
Слово ! записывает 2 смежные 16 битные ячейки
с! записывает одну ячейку.
Строки помещаются в тип данных , называемый Vector.
Это массив объектов, который можно непрерывно наращивать.
В java этот тип данных объявлен устаревшим, поэтому транслятор
при компиляции слегка ругается.
Теперь, как реализован здесь create
create name
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)>
Слова
NOP LIT dup drop swap
>R со стека данных на адресный стек >R
R> обратно
CALL branch ;
0> 0< 0= ?branch
@ !
+ - * /MOD
AND OR XOR SHL SHR
ZERO_EXIT 1+ 1- ----- zero exit остался от ретро форт, резерв
IN OUT WAIT -- работа с внешними объектами, здесь используется out
LIT32 c@ c!
EXIT .
: ; create
allot does> , here -- запятая грузит 32 значение, которое занимает 2 ячейки
compile immediate >resolve <resolve
(
ascii s" type ." s+ -- надо добавить s= сравнение строк
0< 0= 0>
>mark <mark
if then else
begin
until
while
repeat
var
over
rot
?DUP
R@
/
2+ 2- 2/
negate
ABS ( A --->абс A )
2dup 2drop
Это черновая версия форта.
Память здесь представлена массивом 16 битных ячеек.
public short[] image;
Стек 32битный
Слово ! записывает 2 смежные 16 битные ячейки
с! записывает одну ячейку.
Строки помещаются в тип данных , называемый Vector.
Это массив объектов, который можно непрерывно наращивать.
В java этот тип данных объявлен устаревшим, поэтому транслятор
при компиляции слегка ругается.
Теперь, как реализован здесь create
create name
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)>
Слова
NOP LIT dup drop swap
>R со стека данных на адресный стек >R
R> обратно
CALL branch ;
0> 0< 0= ?branch
@ !
+ - * /MOD
AND OR XOR SHL SHR
ZERO_EXIT 1+ 1- ----- zero exit остался от ретро форт, резерв
IN OUT WAIT -- работа с внешними объектами, здесь используется out
LIT32 c@ c!
EXIT .
: ; create
allot does> , here -- запятая грузит 32 значение, которое занимает 2 ячейки
compile immediate >resolve <resolve
(
ascii s" type ." s+ -- надо добавить s= сравнение строк
0< 0= 0>
>mark <mark
if then else
begin
until
while
repeat
var
over
rot
?DUP
R@
/
2+ 2- 2/
negate
ABS ( A --->абс A )
2dup 2drop
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Версия II
Перепечатка из старого черновика
Организация рабочего места для программирования под android.
Сейчас официальное средство считается android studio.
У него недостаток - требует мощной машины.
Я не нашел способа просто скомпилировать apk файл,
обязательно требует эмуляцию самого androida,
причем на уровне процессора arm. У меня едва хватило терпения
дождаться загрузки заставки, после чего я плюнул и снес эту хрень
к черту. Тем более, что мелькнувший на форуме Winlion'а longer
подсказал чудесную альтернативу.
AIDE- IDE for Android Java
для компиляции программ прямо на android.
Создает сразу apk-файл, не требует наличия разных сред,
необходимых для запуска готового приложения
https://play.google.com/store/apps/details?id=com.aide.ui&hl=ru
Кроме нее я ничем другим не пользовался.
Можно редактировать ява программы прямо на телефоне, но это не очень
удобно.
Лучше создавать новую программу на телефоне с помощью aide,
затем выгрузить полученный проект на компьютер.
Отредактированный на компьютере проект загрузить обратно на
телефон, компилировать запускать...
Для этого можно использовать популярный ES проводник,
ипользуя удаленный доступ. Es проводник сделает телефон ftp сервером.
Теперь на компьютере с телефоном можно работать с помощью ftp клиента.
Внимание, es проводник не вполне безопасен, отправил без спроса
мои фотографии в облако, что с учетом того, что многие не выносят фотографироваться...
Можно использовать другие, более простые файл менеджеры для
телефона, MIX например, они тоже могут делать из android ftp сервер.
Еще, в бесплатной версии aide , можно работать только
с пятью java файлами.
Что бы избавится от ограничений, можно заплатить 800 руб
или воспользоваться модифицированной версией
отсюда
https://4pda.ru/forum/index.php?showtopic=319369&st=7500
ничего из этого я не пробовал делать
Еще можно использовать commandline
https://habr.com/ru/post/335074/
но я не пробовал.
Организация рабочего места для программирования под android.
Сейчас официальное средство считается android studio.
У него недостаток - требует мощной машины.
Я не нашел способа просто скомпилировать apk файл,
обязательно требует эмуляцию самого androida,
причем на уровне процессора arm. У меня едва хватило терпения
дождаться загрузки заставки, после чего я плюнул и снес эту хрень
к черту. Тем более, что мелькнувший на форуме Winlion'а longer
подсказал чудесную альтернативу.
AIDE- IDE for Android Java
для компиляции программ прямо на android.
Создает сразу apk-файл, не требует наличия разных сред,
необходимых для запуска готового приложения
https://play.google.com/store/apps/details?id=com.aide.ui&hl=ru
Кроме нее я ничем другим не пользовался.
Можно редактировать ява программы прямо на телефоне, но это не очень
удобно.
Лучше создавать новую программу на телефоне с помощью aide,
затем выгрузить полученный проект на компьютер.
Отредактированный на компьютере проект загрузить обратно на
телефон, компилировать запускать...
Для этого можно использовать популярный ES проводник,
ипользуя удаленный доступ. Es проводник сделает телефон ftp сервером.
Теперь на компьютере с телефоном можно работать с помощью ftp клиента.
Внимание, es проводник не вполне безопасен, отправил без спроса
мои фотографии в облако, что с учетом того, что многие не выносят фотографироваться...
Можно использовать другие, более простые файл менеджеры для
телефона, MIX например, они тоже могут делать из android ftp сервер.
Еще, в бесплатной версии aide , можно работать только
с пятью java файлами.
Что бы избавится от ограничений, можно заплатить 800 руб
или воспользоваться модифицированной версией
отсюда
https://4pda.ru/forum/index.php?showtopic=319369&st=7500
ничего из этого я не пробовал делать
Еще можно использовать commandline
https://habr.com/ru/post/335074/
но я не пробовал.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Версия II
А если я хочу написать приложение для читалки PocketBook?
Gudleifr- Admin
- Сообщения : 3219
Дата регистрации : 2017-03-29
Re: Черновик: Версия II
Если PocketBook работает на андроид и способен загружать apk файл,
думаю, что возможно.
думаю, что возможно.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Версия II
А где формат apk описан столь подробно, что его можно собрать подручными средствами?vikt144 пишет:Если PocketBook работает на андроид и способен загружать apk файл,
думаю, что возможно.
Gudleifr- Admin
- Сообщения : 3219
Дата регистрации : 2017-03-29
Re: Черновик: Версия II
Зачем?Gudleifr пишет:
А где формат apk описан столь подробно, что его можно собрать подручными средствами?
apk файл собирает android studio или aide или commandline utils.
В принципе apk это zip архив, в нем файлы class можно собрать
с помощью компилятора java, но для некоторых платформозависимых файлов
все равно необходимо использовать android sdk.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Версия II
Дык, единственный бонус от применения FORTH-метода, это сократить цикл разработки: АНАЛИЗ-ПРОЕКТИРОВАНИЕ-РЕАЛИЗАЦИЯ-ПРОВЕРКА. Если на каком-то этапе я врубаю studio и с ногами влезаю sdk, то зачем мне FORTH? Пока я буду разбираться с этими инструментами, уже и программа будет готова. Поэтому интересует ноу-хау, позволяющее по-быстрому что-то слепить из, может, и не идеальных, но работающих кусков.vikt144 пишет:Зачем?
Gudleifr- Admin
- Сообщения : 3219
Дата регистрации : 2017-03-29
Re: Черновик: Версия II
Можно по-быстрому слепить программу с минимальным базовым функционалом,
а на форте допилить свои хотелки. К примеру, я мог бы из своей навигационной
программы, с которой я успешно проездил прошлогоднее лето, реализовать
какой-нибудь функционал, связанный с координатами, из военного раздела
данного форума.
Исходники и apk-файл простейшей android программы с фортом на борту.
https://anonfile.com/1c9fr1b4o7/less0_7z
Добавлена программа на форте с именем 0 (ноль) которая представляет собой
обертку для ф-ции, меняющей название кнопок и текстовых полей.
Перед использованием необходимо установить путь, откуда приложение
будет читать тексты, и быстро дважды нажать на кнопку stp.
Путь должен существовать, и устройство должно позволять читать
из этого каталога. Перезапишите туда файл 0, нажмите кнопку load и
в поле редактирования должен появится форт текст. Если текст не появился,
устройство не разрешает чтение из этого каталога посторонним программам.
Тогда спрашивайте, буду консультировать.
Если текст появился, тогда добавьте к нему
например
0 s" change txt " txtout
или
2 s" change butt " btnout
и жмите кнопку intprt
Программа является исследовательской, ошибки не отлавливаются.
а на форте допилить свои хотелки. К примеру, я мог бы из своей навигационной
программы, с которой я успешно проездил прошлогоднее лето, реализовать
какой-нибудь функционал, связанный с координатами, из военного раздела
данного форума.
Исходники и apk-файл простейшей android программы с фортом на борту.
https://anonfile.com/1c9fr1b4o7/less0_7z
Добавлена программа на форте с именем 0 (ноль) которая представляет собой
обертку для ф-ции, меняющей название кнопок и текстовых полей.
Перед использованием необходимо установить путь, откуда приложение
будет читать тексты, и быстро дважды нажать на кнопку stp.
Путь должен существовать, и устройство должно позволять читать
из этого каталога. Перезапишите туда файл 0, нажмите кнопку load и
в поле редактирования должен появится форт текст. Если текст не появился,
устройство не разрешает чтение из этого каталога посторонним программам.
Тогда спрашивайте, буду консультировать.
Если текст появился, тогда добавьте к нему
например
0 s" change txt " txtout
или
2 s" change butt " btnout
и жмите кнопку intprt
Программа является исследовательской, ошибки не отлавливаются.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Версия II
Спасибо. Но ссылка дает 404.vikt144 пишет:Исходники и apk-файл...
Впрочем, посмотрел на диски PocketBook - там только файлы .app - обычные elf.
Gudleifr- Admin
- Сообщения : 3219
Дата регистрации : 2017-03-29
Re: Черновик: Версия II
Не знаю, обменник работал всегда хорошо.
Другие
https://www40.zippyshare.com/v/0aLgyMvH/file.html
https://ru.files.fm/u/xfdkjhkc9
Кажется не ту ссылку запостил
https://anonfiles.com/T242Wev9u4/asrc_7z
Другие
https://www40.zippyshare.com/v/0aLgyMvH/file.html
https://ru.files.fm/u/xfdkjhkc9
Кажется не ту ссылку запостил
https://anonfiles.com/T242Wev9u4/asrc_7z
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Версия II
Спасибо, скачал. Разархивируется нормально. Только xml там какие-то странные...vikt144 пишет:Другие
Но, похоже, pocketBook недостаточно ведроид, чтобы java понимать. Для него рекомендуют gcc sdk.
Gudleifr- Admin
- Сообщения : 3219
Дата регистрации : 2017-03-29
Re: Черновик: Версия II
Существенные здесь только res/layout/main.xmlТолько xml там какие-то странные... пишет:
Это файл разметки.
Остальные сгенерировала среда.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Версия II
Несколько задержался с работой над проектом.
Обнаружил в яве некоторые приятные штуки, которые надо оттестировать, reflections api
и Class ByteBuffer
ByteBuffer позволит создать полноценный байт код.
https://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html
Тут есть методы, вроде
float getFloat()
void putFloat(float f)
getInt
putInt(int value) итд.
Они извлекают соответствующий параметр из массива байт и перемещают
указатель на число байт, который занимает этот параметр.
В отличие от imputStream и OutputStream тут есть метод
position(int newPosition), который переместит указатель
на нужное место в байтовом массиве.
Таким образом, если это будет работать с нормальной скоростью,
необходимость в памяти, заданной как массив 16битных целых отпадет.
Все это в будущем здорово упростит жизнь.
reflections api
https://vertex-academy.com/tutorials/ru/reflection-api-v-java-chast1/
Коротко говоря, зная имена переменных и функций, есть возможность
вызвать их или задать новые значения используя и текстовые названия.
Например, к переменной, заданной как
public int someInt ;
можно обратиться, зная только имя переменной "someInt"
Это дает универсальный способ обмена данными виртуальной форт машины
с внешней средой. Возможно отпадет необходимость использования в этой
реализации громоздкого механизма портов.
Все это требует обдумывания и тестирования.
Завтра постараюсь выложить ключевые вещи для форта в андроид программирование
Intent
Обнаружил в яве некоторые приятные штуки, которые надо оттестировать, reflections api
и Class ByteBuffer
ByteBuffer позволит создать полноценный байт код.
https://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html
Тут есть методы, вроде
float getFloat()
void putFloat(float f)
getInt
putInt(int value) итд.
Они извлекают соответствующий параметр из массива байт и перемещают
указатель на число байт, который занимает этот параметр.
В отличие от imputStream и OutputStream тут есть метод
position(int newPosition), который переместит указатель
на нужное место в байтовом массиве.
Таким образом, если это будет работать с нормальной скоростью,
необходимость в памяти, заданной как массив 16битных целых отпадет.
Все это в будущем здорово упростит жизнь.
reflections api
https://vertex-academy.com/tutorials/ru/reflection-api-v-java-chast1/
Коротко говоря, зная имена переменных и функций, есть возможность
вызвать их или задать новые значения используя и текстовые названия.
Например, к переменной, заданной как
public int someInt ;
можно обратиться, зная только имя переменной "someInt"
Это дает универсальный способ обмена данными виртуальной форт машины
с внешней средой. Возможно отпадет необходимость использования в этой
реализации громоздкого механизма портов.
Все это требует обдумывания и тестирования.
Завтра постараюсь выложить ключевые вещи для форта в андроид программирование
Intent
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Версия II
Выкладываю промежуточные итоги.
Проект на гитхаб
https://github.com/vikt144/less0/tree/tmp0
Исходники и apk
https://www106.zippyshare.com/v/gSp76YBE/file.html
Сюда добавил старый проект simpleedit ( на гитхаб не выложил)
По задумке должен был бы быть редактором, а получился примитивный файл менеджер,
вызываемый через Intent, поэтому крайне полезный.
Сюда его выложил для иллюстрации.
В новый проект less0 включил menu, Intent, Handler, SharedPreferences
Меню здесь реализовано простейшее, полностью реализовано в конце программы mainAcnivity.java
Тут все элементарно, можно почитать здесь
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/45-urok-13-sozdanie-prostogo-menju.html
идеально подходит для работы с фортом.
Более сложные виды меню можно получить
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/46-urok-14-menju-gruppy-porjadok.html
и
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/47-urok-15-kontekstnoe-menju.html
Обработчик меню, используя intent, вызывает различные системные приложения, браузер, карты, экраны настроек...
Так же, при нажатии на кнопку bt5 с помощью intent вызывается другое окно, где демонстрируется
прыгающая кнопка и вызывается примитивный файл менеджер.
Handler тут используется, что бы форт программа могла обращаться к
элементам gui. Еще Handler необходимо использовать например, при запросе
данных через интернет - это делается в ассинхронном режиме, после окончания загрузки handler выполнет процедуры,
которые запрограммированы пользователем.
SharedPreferences - читает/записывает данные в виде "key" "values", не связывая себя
с файловой системой. Здесь используется для указания начального положения каталога forth,
откуда программа считывает forth тексты.
В общем, эту часть работы надо только привести в порядок и отдокументировать.
Именно этим буду заниматься, отдавая приоритет вопросам в комментариях к этой работе,
если таковые конечно будут.
Паралельно буду реализовывать канвас, что бы можно было бы выводить
всякие изображения и графики, и добавлю еще каких-нибудь плюшек -
проигрывания звуков, удержание экрана, что бы не гас, работа с датчиками
и гироскопами.
Проект на гитхаб
https://github.com/vikt144/less0/tree/tmp0
Исходники и apk
https://www106.zippyshare.com/v/gSp76YBE/file.html
Сюда добавил старый проект simpleedit ( на гитхаб не выложил)
По задумке должен был бы быть редактором, а получился примитивный файл менеджер,
вызываемый через Intent, поэтому крайне полезный.
Сюда его выложил для иллюстрации.
В новый проект less0 включил menu, Intent, Handler, SharedPreferences
Меню здесь реализовано простейшее, полностью реализовано в конце программы mainAcnivity.java
Тут все элементарно, можно почитать здесь
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/45-urok-13-sozdanie-prostogo-menju.html
идеально подходит для работы с фортом.
Более сложные виды меню можно получить
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/46-urok-14-menju-gruppy-porjadok.html
и
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/47-urok-15-kontekstnoe-menju.html
Обработчик меню, используя intent, вызывает различные системные приложения, браузер, карты, экраны настроек...
Так же, при нажатии на кнопку bt5 с помощью intent вызывается другое окно, где демонстрируется
прыгающая кнопка и вызывается примитивный файл менеджер.
Handler тут используется, что бы форт программа могла обращаться к
элементам gui. Еще Handler необходимо использовать например, при запросе
данных через интернет - это делается в ассинхронном режиме, после окончания загрузки handler выполнет процедуры,
которые запрограммированы пользователем.
SharedPreferences - читает/записывает данные в виде "key" "values", не связывая себя
с файловой системой. Здесь используется для указания начального положения каталога forth,
откуда программа считывает forth тексты.
В общем, эту часть работы надо только привести в порядок и отдокументировать.
Именно этим буду заниматься, отдавая приоритет вопросам в комментариях к этой работе,
если таковые конечно будут.
Паралельно буду реализовывать канвас, что бы можно было бы выводить
всякие изображения и графики, и добавлю еще каких-нибудь плюшек -
проигрывания звуков, удержание экрана, что бы не гас, работа с датчиками
и гироскопами.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Версия II
После загрузки и установки apk на устройство, программу необходимо настроить.
Сложности вызваны тем, что начиная с версии android Kit Kat,
google ограничил возможность приложениям,
кроме подписанных особым кодом, (который естественно никому не сообщается),
записывать в произвольную область файловой системы.
см
https://www.drive2.ru/b/1179559/
и
https://2keep.net/android-4-4-problems-writing-to-microsd/
Для решения проблемы на более современных телефонах делаем следущее.
C помощью файлового менеджера, которому разрешено создавать
каталоги в любом месте файловой системы,
на sd карте находим каталог android/data
обычно путь выглядит так
/storage/1234-abcd/android/data
В этом каталоге создаем свой каталог
com.virf.less (между словами точки, а не / )
Ставим сюда закладку, в android/data много других каталогов.
В новом каталоге создаем каталог forth и копируем туда текстовый файл
с именем 0 (ноль), поставляется в архиве.
Запоминаем путь
/storage/1234-abcd/Android/data/com.virf.less/forth
(не копируйте эту строку, копируйте то, что получилось у вас)
Запускаем less0, вводим в строку редактирования наш путь,
дважды давим на кнопку setp. Путь сохранился в SharedPreferences
Выйти из программы и зайти опять. Если все сделано правильно,
вторая кнопка переименуется в Load
Сложности вызваны тем, что начиная с версии android Kit Kat,
google ограничил возможность приложениям,
кроме подписанных особым кодом, (который естественно никому не сообщается),
записывать в произвольную область файловой системы.
см
https://www.drive2.ru/b/1179559/
и
https://2keep.net/android-4-4-problems-writing-to-microsd/
Для решения проблемы на более современных телефонах делаем следущее.
C помощью файлового менеджера, которому разрешено создавать
каталоги в любом месте файловой системы,
на sd карте находим каталог android/data
обычно путь выглядит так
/storage/1234-abcd/android/data
В этом каталоге создаем свой каталог
com.virf.less (между словами точки, а не / )
Ставим сюда закладку, в android/data много других каталогов.
В новом каталоге создаем каталог forth и копируем туда текстовый файл
с именем 0 (ноль), поставляется в архиве.
Запоминаем путь
/storage/1234-abcd/Android/data/com.virf.less/forth
(не копируйте эту строку, копируйте то, что получилось у вас)
Запускаем less0, вводим в строку редактирования наш путь,
дважды давим на кнопку setp. Путь сохранился в SharedPreferences
Выйти из программы и зайти опять. Если все сделано правильно,
вторая кнопка переименуется в Load
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Версия II
Это заготовка системы, предполагается, что программист любитель
может надергать кода для своего приложения.
При старте система автоматически начинает свою работу со считывания файла 0.
Там находятся форт тексты, которые интерпретируются.
Кнопка load забирает из строки редактирования имя файла,
который находится в созданном в предыдущем посте каталоге forth,
и заменяют содержимое строки редактирования содержимым файла.
Кнопка intrprt интерпретирует содержимое стр. редактирования.
кнопка bt5 вызывает другое окно. Остальные кнопки ничего не делают.
Файлы в каталоге forth редактируются редакторами, которые
установлены в этом устройстве, или загружаются откуда-нибудь.
Для работы со всем этим удобен total commander.
https://play.google.com/store/apps/details?id=com.ghisler.android.TotalCommander&hl=ru&gl=US
может надергать кода для своего приложения.
При старте система автоматически начинает свою работу со считывания файла 0.
Там находятся форт тексты, которые интерпретируются.
Кнопка load забирает из строки редактирования имя файла,
который находится в созданном в предыдущем посте каталоге forth,
и заменяют содержимое строки редактирования содержимым файла.
Кнопка intrprt интерпретирует содержимое стр. редактирования.
кнопка bt5 вызывает другое окно. Остальные кнопки ничего не делают.
Файлы в каталоге forth редактируются редакторами, которые
установлены в этом устройстве, или загружаются откуда-нибудь.
Для работы со всем этим удобен total commander.
https://play.google.com/store/apps/details?id=com.ghisler.android.TotalCommander&hl=ru&gl=US
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Версия II
Пока это слишком похоже на "обычный кошачий проект": что-то нужно подготовить, потом, при соблюдении некоторых условий эта штука запустится, заработает "как настоящий FORTH" и, даже выдаст некоторый небесполезный результат... Но нет главного - пока набор утилит, которые Вы натаскали на свой компьютер, более удобен в работе и позволяет сделать намного больше интересных штук, чем Ваш "зародыш". Его надо кормить и растить.
Gudleifr- Admin
- Сообщения : 3219
Дата регистрации : 2017-03-29
Re: Черновик: Версия II
Думаю, доведение проекта до какого-нибудь приемлемого уровня не займет много времени.
Проект в принципе и должен оставаться зародышем, он должен только помочь
программисту любителю собрать свои инструменты под свои задачи.
ps
Вчера, по недосмотру, в коде обработчика меню, указал реальный номер телефона.
Вызывать его не надо.
Проект в принципе и должен оставаться зародышем, он должен только помочь
программисту любителю собрать свои инструменты под свои задачи.
ps
Вчера, по недосмотру, в коде обработчика меню, указал реальный номер телефона.
Вызывать его не надо.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Версия II
Сборка программ из исходников.
Есть оффициальные sdk,
android studio и Android command line tools.
android studio требует очень мощного компьютера.
Раньше она запускалась на одном гигабайте памяти, теперь
требует 8 минимум. Но если ее удасться установить и настроить,
то можно получить подсветку синтаксиса и наверно другие приятности.
У меня не получилось.
Command Line накачает тот же самый хлам в полтора гига,
и может не компилировать, потому что ява не та.
Единственно приемлимая альтернатива для программиста любителя,
это aide, компилировать программу прямо на android устройстве.
[url= https://play.google.com/store/apps/details?id=com.aide.ui&hl=ru]https://play.google.com/store/apps/details?id=com.aide.ui&hl=ru[/url]
В бесплатной версии поддерживаются только 5 java файлов.
Платная стоит около 800 руб.
После установки создает каталог AppProjects в который надо заливать
свои исходники. Можно создавать и редактироваь проект прямо на устройстве.
Запускаем aide в меню view/files , заходим в наши исходники.
Переходим в src/main и aide нарисует каталог с именем
"Open this Android App Project" .
Заходим в него. Aide добавит необходимые файлы и каталоги
в проект. Теперь в меню view/errors убеждаемся, что нет ошибок.
Если есть, исправляем. Когда все в порядке, нажимаем треугольничек вверху,
устанавливаем, запускаем. Если что-то не получается, заходим в
настройки, и разрешаем устанавливать приложение не из надежных
источников. ( google считает ненадежными источниками все, кроме google play)
Есть оффициальные sdk,
android studio и Android command line tools.
android studio требует очень мощного компьютера.
Раньше она запускалась на одном гигабайте памяти, теперь
требует 8 минимум. Но если ее удасться установить и настроить,
то можно получить подсветку синтаксиса и наверно другие приятности.
У меня не получилось.
Command Line накачает тот же самый хлам в полтора гига,
и может не компилировать, потому что ява не та.
Единственно приемлимая альтернатива для программиста любителя,
это aide, компилировать программу прямо на android устройстве.
[url= https://play.google.com/store/apps/details?id=com.aide.ui&hl=ru]https://play.google.com/store/apps/details?id=com.aide.ui&hl=ru[/url]
В бесплатной версии поддерживаются только 5 java файлов.
Платная стоит около 800 руб.
После установки создает каталог AppProjects в который надо заливать
свои исходники. Можно создавать и редактироваь проект прямо на устройстве.
Запускаем aide в меню view/files , заходим в наши исходники.
Переходим в src/main и aide нарисует каталог с именем
"Open this Android App Project" .
Заходим в него. Aide добавит необходимые файлы и каталоги
в проект. Теперь в меню view/errors убеждаемся, что нет ошибок.
Если есть, исправляем. Когда все в порядке, нажимаем треугольничек вверху,
устанавливаем, запускаем. Если что-то не получается, заходим в
настройки, и разрешаем устанавливать приложение не из надежных
источников. ( google считает ненадежными источниками все, кроме google play)
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Версия II
В выложенной мною несколькими постами ранее версии системы была досадная
ошибка в 164 строке
https://github.com/vikt144/less0/blob/tmp0/app/src/main/java/com/virf/less/MainActivity.java
присваивалось значение null. Таким образом затирался весь вывод
программы на форте.
Если кто - то разбирался с этой версией, приношу извинения.
Чуть позже выложу обновленную версию.
Сейчас другая проблема, из которой завис. Кажется android
забирает данные из поля editText в отдельном потоке, в результате
чего после вызова
получены. Но возможно у меня замылился взгдяд, и я не могу обнаружить свою
ошибку. Позже вернусь к этой проблеме, а пока продолжу работать дальше.
ошибка в 164 строке
https://github.com/vikt144/less0/blob/tmp0/app/src/main/java/com/virf/less/MainActivity.java
- Код:
if (as.error==0) text0.setText( as.ErrorString );
присваивалось значение null. Таким образом затирался весь вывод
программы на форте.
Если кто - то разбирался с этой версией, приношу извинения.
Чуть позже выложу обновленную версию.
Сейчас другая проблема, из которой завис. Кажется android
забирает данные из поля editText в отдельном потоке, в результате
чего после вызова
- Код:
et.getText()
получены. Но возможно у меня замылился взгдяд, и я не могу обнаружить свою
ошибку. Позже вернусь к этой проблеме, а пока продолжу работать дальше.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Версия II
Теперь о форте.
Это примитивная версия форта, которая будет переписана.
Но вполне достаточна для того, что бы оттестировать на ней работу
с android api.
Слово world снимает со стека значение, но не проверяет его,
Словарей нет.
Память здесь представлена массивом 16 битных ячеек.
public short[] image;
Стек 32битный
Слова ! @ записывает/читает 2 смежные 16 битные ячейки
с! c@ записывает/читает одну ячейку.
, (запятая) -- запятая грузит 32 значение, которое занимает 2 ячейки
allot - выделяет память ячейками
таким образом,классическое определение будет выглядеть так.
: var create 2 allot ;
: const create , does> @ ;
Список слов
NOP LIT dup drop swap
>R со стека данных на адресный стек
R> обратно
CALL branch ;
0> 0< 0= ?branch
@ !
+ - * /MOD -- /mod оставляет на стеке результат и остаток
AND OR XOR SHL SHR
ZERO_EXIT 1+ 1- ----- zero exit остался от ретро форт, резерв
IN OUT WAIT -- работа с внешними объектами, здесь используется out
LIT32 c@ c!
EXIT .
: ; create
allot does> , here -- запятая грузит 32битное значение, которое занимает 2 ячейки
compile immediate >resolve <resolve
( ) коммент ,
ascii s" type ." s+ s= --- строки
0< 0= 0>
>mark <mark
if then else
begin until while repeat
var
over rot
?DUP
R@
/
2+ 2- 2/
negate
ABS ( A --->абс A )
2dup 2drop
Замечание по работе со строками.
Строка на стеке - на вершине длинна, под ней индекс элемента в массиве строк.
." - пока лучше не использовать.
s" string" - на стеке ind length -- ind индекс в массиве строк
s! s@ --запись/извлечение ind length строки в 32битную переменную
(
: s! dup rot swap c! 1+ c! ;
: s@ dup c@ swap 1+ c@ swap ;
)
пример
var str
s" string" str s!
s+ - конкатенация ( str s@ s" 2string" s+ = string2string
s= - сравнение на стеке 0 false -1 true
Работа с буфером
с буфером работают команды типа "." "type"
команда 0 1 out -- записывает 0 в порт под номером 1
Очищает буфер и комманды вывода пишут в консоль.
Содержимое консоли можно увидеть в logCat, вместе
с другим отладочным мусором.
команда 1 1 out -- записывает 1 в порт под номером 1
текущее содержимое буфера преобразуется в строку
на стеке оставляются ind и length этой строки
Затем буфер очищается и готов опять принять вывод.
пример
var fl
var jp
s" file" fl s!
s" .jpg" jp s!
1 1 out ( отправляем старое содержимое буфера)
25
fl s@ type
.
jp s@ type
1 1 out
( на стеке будет ind и len строки "file25.jpg"
точка в этом режиме выводит вершину стека без пробела)
Это примитивная версия форта, которая будет переписана.
Но вполне достаточна для того, что бы оттестировать на ней работу
с android api.
Слово world снимает со стека значение, но не проверяет его,
Словарей нет.
Память здесь представлена массивом 16 битных ячеек.
public short[] image;
Стек 32битный
Слова ! @ записывает/читает 2 смежные 16 битные ячейки
с! c@ записывает/читает одну ячейку.
, (запятая) -- запятая грузит 32 значение, которое занимает 2 ячейки
allot - выделяет память ячейками
таким образом,классическое определение будет выглядеть так.
: var create 2 allot ;
: const create , does> @ ;
Список слов
NOP LIT dup drop swap
>R со стека данных на адресный стек
R> обратно
CALL branch ;
0> 0< 0= ?branch
@ !
+ - * /MOD -- /mod оставляет на стеке результат и остаток
AND OR XOR SHL SHR
ZERO_EXIT 1+ 1- ----- zero exit остался от ретро форт, резерв
IN OUT WAIT -- работа с внешними объектами, здесь используется out
LIT32 c@ c!
EXIT .
: ; create
allot does> , here -- запятая грузит 32битное значение, которое занимает 2 ячейки
compile immediate >resolve <resolve
( ) коммент ,
ascii s" type ." s+ s= --- строки
0< 0= 0>
>mark <mark
if then else
begin until while repeat
var
over rot
?DUP
R@
/
2+ 2- 2/
negate
ABS ( A --->абс A )
2dup 2drop
Замечание по работе со строками.
Строка на стеке - на вершине длинна, под ней индекс элемента в массиве строк.
." - пока лучше не использовать.
s" string" - на стеке ind length -- ind индекс в массиве строк
s! s@ --запись/извлечение ind length строки в 32битную переменную
(
: s! dup rot swap c! 1+ c! ;
: s@ dup c@ swap 1+ c@ swap ;
)
пример
var str
s" string" str s!
s+ - конкатенация ( str s@ s" 2string" s+ = string2string
s= - сравнение на стеке 0 false -1 true
Работа с буфером
с буфером работают команды типа "." "type"
команда 0 1 out -- записывает 0 в порт под номером 1
Очищает буфер и комманды вывода пишут в консоль.
Содержимое консоли можно увидеть в logCat, вместе
с другим отладочным мусором.
команда 1 1 out -- записывает 1 в порт под номером 1
текущее содержимое буфера преобразуется в строку
на стеке оставляются ind и length этой строки
Затем буфер очищается и готов опять принять вывод.
пример
var fl
var jp
s" file" fl s!
s" .jpg" jp s!
1 1 out ( отправляем старое содержимое буфера)
25
fl s@ type
.
jp s@ type
1 1 out
( на стеке будет ind и len строки "file25.jpg"
точка в этом режиме выводит вершину стека без пробела)
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Версия II
Форт и многозадачность.
Надолго застряв в процессе реализации слова expect и перебирая различные варианты
решения проблемы, обнаружил некоторые возможности языка форт. Воможно они обсуждались
где-нибудь, а я ничего не понял.
Ну все по порядку. Дело в том, что процесс в android, запущенный в gui,
не может быть приостановлен и возобновлен. Разве только реализовать
бесконечный цикл опроса, но это пошло. Мгновенно кончится батарея.
А как тогда ввести данные в процессе работы программы?
В принципе ничего сложного, запустить форт интерпретатор как в фоновый процесс,
который легко останвливать (wait) и возобновлять (notify)
Я поначалу и стал так делать, но потом в процессе обдумывания над решениями
других подобных задач решил от этого отказаться.
Идея в том, чтобы вывод данных одного форт слова,
могли бы использовать как входные данные другие форт слова, подобно
тому, как это делается в системах Unix. Там эта конвееризация
обеспечивает огромную мощность и гибкость, и как правило
строится довольно легко. Для реализации этого минимальная многозадачность
все же нужна.
например
В этом конкретном случае, многозадачность не нужна.
Но бывает, что длинна входных данных неопределенна или
очень большая. Тогда необходимо постоянно переключаться
между процессом источником и процессом приемником,
что бы избежать образования больших буфферов для
накопления промежуточных данных.
Мне кажется, что тут выгоднее простая реализация многозадачности,
чем та, которая реализуется с помощью OS, с необходимостью
синхронизировать потоки.
Введя одну сущность(многозадачность) в ядро
форт системы, можно убить массу сущностей в будущем, решая задачи,
как уже пол века решаются задачи в мире Unix, минимально используя
программирование и используя конвееры и подстановки типа > < | $() итд.
В новой версии моего форта, которая сейчас пишется, организация
многозадачности будет обязательной.
Надолго застряв в процессе реализации слова expect и перебирая различные варианты
решения проблемы, обнаружил некоторые возможности языка форт. Воможно они обсуждались
где-нибудь, а я ничего не понял.
Ну все по порядку. Дело в том, что процесс в android, запущенный в gui,
не может быть приостановлен и возобновлен. Разве только реализовать
бесконечный цикл опроса, но это пошло. Мгновенно кончится батарея.
А как тогда ввести данные в процессе работы программы?
В принципе ничего сложного, запустить форт интерпретатор как в фоновый процесс,
который легко останвливать (wait) и возобновлять (notify)
Я поначалу и стал так делать, но потом в процессе обдумывания над решениями
других подобных задач решил от этого отказаться.
Идея в том, чтобы вывод данных одного форт слова,
могли бы использовать как входные данные другие форт слова, подобно
тому, как это делается в системах Unix. Там эта конвееризация
обеспечивает огромную мощность и гибкость, и как правило
строится довольно легко. Для реализации этого минимальная многозадачность
все же нужна.
например
- Код:
outputRedirection ( некое слово, которое перенаправляет
текстовый вывод с консоли куда-нибудь еще)
." double a b c d ; c = fstack ; b = fstack ; a = fstack ; "
." d = b * b - 4 * a * c ; "
( отправляем туда некий текст )
someMath ( вызываем некое слово, которое способно извлечь этот
текст, обработать его, и сгенерировать новый текст,
который форт система сможет обработать обычным образом)
c f! b f! a f!
b f@ fdup * 4e a f@ f* c f@ f* f- d f!
В этом конкретном случае, многозадачность не нужна.
Но бывает, что длинна входных данных неопределенна или
очень большая. Тогда необходимо постоянно переключаться
между процессом источником и процессом приемником,
что бы избежать образования больших буфферов для
накопления промежуточных данных.
Мне кажется, что тут выгоднее простая реализация многозадачности,
чем та, которая реализуется с помощью OS, с необходимостью
синхронизировать потоки.
Введя одну сущность(многозадачность) в ядро
форт системы, можно убить массу сущностей в будущем, решая задачи,
как уже пол века решаются задачи в мире Unix, минимально используя
программирование и используя конвееры и подстановки типа > < | $() итд.
В новой версии моего форта, которая сейчас пишется, организация
многозадачности будет обязательной.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Версия II
Что-то об этом было в конце ТЕМЫ #45, но потом я решил, в связи с введением понятия "вторичная машина", снять все ограничения на подобные решения.
А про конвейер данных я как раз сейчас собрался отписать в связи с невозможностью нормальной реализации в оконных системах "текстовых машин" из второго тома Заметок.
А про конвейер данных я как раз сейчас собрался отписать в связи с невозможностью нормальной реализации в оконных системах "текстовых машин" из второго тома Заметок.
Gudleifr- Admin
- Сообщения : 3219
Дата регистрации : 2017-03-29
Страница 1 из 2 • 1, 2
Страница 1 из 2
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|