Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт мар 19, 2024 10:27

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 120 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8  След.
Автор Сообщение
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Вт май 25, 2021 16:53 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1285
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
vikt писал(а):
можно обратиться, зная только имя переменной "someInt"
Это дает универсальный способ обмена данными виртуальной форт машины
с внешней средой. Возможно отпадет необходимость использования в этой
реализации громоздкого механизма портов.

Порты это в смысле передача по сокетам?
А вариант скармливать строки форт-приложению?

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Вт май 25, 2021 21:17 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
Цитата:
Какой у тебя смарт для тестирования?


Древний htc wildfire 512mb android 2.3.5 для тестирования на старых устройствах.

Samsung Galaxy s7 android 8

Цитата:
А вариант скармливать строки форт-приложению?

Тут так и делается
примерно
Код:
//  as -- class форт ассемблера, включает стек и вирт. машину
                     as._IN = 0;
                                as.TIB=" any forth  text ";
                try {
                                        as.interpret();
               if (as.error!=0) text0.setText( as.ErrorString );
               }
                   catch(Exception e)  {text0.setText("Крах системы " );}


Цитата:
Порты это в смысле передача по сокетам?

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

опкод виртуальной машины out вызывает ф-цию callServices и в качестве
параметров передает ей два верхних элемента стека. Тут, вершина = 0, используется
самой форт машиной, 1 - для строкового буфера (слова . s" итп выводят туда данные,
там можно осуществлять всякую конкатенацию.)
2 для gui.
Остальное пользователь может использовать как душе угодно

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

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Вт июн 01, 2021 02:31 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
Выкладываю промежуточные итоги.

Проект на гитхаб
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 тексты.
В общем, эту часть работы надо только привести в порядок и отдокументировать.
Именно этим буду заниматься, отдавая приоритет вопросам в комментариях к этой работе,
если таковые конечно будут.
Паралельно буду реализовывать канвас, что бы можно было бы выводить
всякие изображения и графики, и добавлю еще каких-нибудь плюшек -
проигрывания звуков, удержание экрана, что бы не гас, работа с датчиками
и гироскопами.

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Вт июн 01, 2021 03:18 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
После загрузки и установки 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

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Вт июн 01, 2021 03:43 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
Это заготовка системы, предполагается, что программист любитель
может надергать кода для своего приложения.

При старте система автоматически начинает свою работу со считывания файла 0.
Там находятся форт тексты, которые интерпретируются.
Кнопка load забирает из строки редактирования имя файла,
который находится в созданном в предыдущем посте каталоге forth,
и заменяют содержимое строки редактирования содержимым файла.
Кнопка intrprt интерпретирует содержимое стр. редактирования.
кнопка bt5 вызывает другое окно. Остальные кнопки ничего не делают.
Файлы в каталоге forth редактируются редакторами, которые
установлены в этом устройстве, или загружаются откуда-нибудь.
Для работы со всем этим удобен total commander.
https://play.google.com/store/apps/details?id=com.ghisler.android.TotalCommander&hl=ru&gl=US

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Вт июн 01, 2021 14:16 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
Вчера, по недосмотру, в коде обработчика меню, указал реальный номер телефона.
Вызывать его не надо.

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Ср июн 02, 2021 04:28 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
Сборка программ из исходников.
Есть оффициальные sdk,
android studio и Android command line tools.

android studio требует очень мощного компьютера.
Раньше она запускалась на одном гигабайте памяти, теперь
требует 8 минимум. Но если ее удасться установить и настроить,
то можно получить подсветку синтаксиса и наверно другие приятности.
У меня не получилось.
Command Line накачает тот же самый хлам в полтора гига,
и может не компилировать, потому что ява не та.
Единственно приемлимая альтернатива для программиста любителя,
это aide, компилировать программу прямо на android устройстве.
https://play.google.com/store/apps/details?id=com.aide.ui&hl=ru
В бесплатной версии поддерживаются только 5 java файлов.
Платная стоит около 800 руб.
После установки создает каталог AppProjects в который надо заливать
свои исходники. Можно создавать и редактироваь проект прямо на устройстве.
Запускаем aide в меню view/files , заходим в наши исходники.
Переходим в src/main и aide нарисует каталог с именем
"Open this Android App Project" .
Заходим в него. Aide добавит необходимые файлы и каталоги
в проект. Теперь в меню view/errors убеждаемся, что нет ошибок.
Если есть, исправляем. Когда все в порядке, нажимаем треугольничек вверху,
устанавливаем, запускаем. Если что-то не получается, заходим в
настройки, и разрешаем устанавливать приложение не из надежных
источников. ( google считает ненадежными источниками все, кроме google play)

_________________
Линукс решает, винда глотает.



За это сообщение автора vikt поблагодарили - 2: Total Vacuum, Victor__v
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Ср июн 02, 2021 13:24 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1285
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Тогда уж и можно ещё html-файл с js внутри превратить в apk
И форт соот-но написать на js
Я так делал один раз.
Исходник, к несчастью, не сохранился

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Ср июн 02, 2021 20:55 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
Victor__v писал(а):
Тогда уж и можно ещё html-файл с js внутри превратить в apk


Не знаю, не слышал о таком.
apk - это зип архивб c ресурсами и исполняемыми файлами.
Сперва java программа превращается в java class'ы,
как обычно в яве, затем в файлы с расширением dex, скорее всего
обычные исполняемые файлы. apk файл врядли можно получить,
не используя гугловских инструментов, которые написаны на java.
Судя по всему, aide их использует.
Кроме того, приложение должно быть специальным образом подписано.

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Пт июн 18, 2021 05:18 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
В выложенной мною несколькими постами ранее версии системы была досадная
ошибка в 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()

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

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Пт июн 18, 2021 05:22 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
Теперь о форте.
Это примитивная версия форта, которая будет переписана.
Но вполне достаточна для того, что бы оттестировать на ней работу
с 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"
точка в этом режиме выводит вершину стека без пробела)

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Чт июл 29, 2021 22:39 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
Форт и многозадачность.
Надолго застряв в процессе реализации слова 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, минимально используя
программирование и используя конвееры и подстановки типа > < | $() итд.

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

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Пт июл 30, 2021 11:06 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1285
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
А семафоры и мьютексы с разделяемыми между потоками буферами?

Как с этим в андроиде?

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Пт июл 30, 2021 14:43 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
Цитата:
А семафоры и мьютексы с разделяемыми между потоками буферами?

Есть. Подробно про java - многозадачность.
https://javarush.ru/groups/posts/2047-threadom-java-ne-isportishjh--chastjh-i---potoki
Там куча вариантов. Голова лопнет, пока подберешь для себя подходящий.
А еще некоторые объявленны устаревшими.

android в основном совместим с явой.

Есть специфичный для android вариант организации многозадачности - asynctask
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/149-urok-86-asynctask-znakomstvo-neslozhnyj-primer.html

Я его не разбирал, что бы не писать отдельного кода для андроида и десктопной явы.

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Сб дек 18, 2021 10:40 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
Пока находился в выгоревшем состоянии, переработал свой форт на 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.
В плане улучшения кода еще много работы, буду постепенно делать.

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

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 120 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8  След.

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


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

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