nedoPC-стандарт онлайновых приложений

Публичный форум для http://www.nedopc.org/nedopc

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24236
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC-стандарт онлайновых приложений

Post by Shaos »

Shaos wrote: 16 Apr 2023 22:55 Ещё можно сделать сайт, где бы пользователь мог ввести текст своей программы на Robby, скомпилировать (скажем через сервер, на котором бы запускался robbyc) и запустить в своём браузере (в Rgrid.js прямо сейчас уже возможно робота брать извне как строку с JSON-ом, а не как подключаемый JS-файл)...
Сделал - см. Программирование через форум ( т.е. таким сайтом стал сам форум : )

Теперь надо сделать PHP-конструктор веб-страничек с произвольными контролами назвав его скажем nedobuilder.php или robbyform.php причём для начала можно поддержать сетку в стиле http://Circuits.CC произвольного размера после которой в одну строчку идут контролы:

А потом можно будет и другие стили поддержать - в том числе "троичный"
(пригодный для построения веб-приложений типа троичного конвертера)
и даже текстовый (моноширинный)…
User avatar
Shaos
Admin
Posts: 24236
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC-стандарт онлайновых приложений

Post by Shaos »

Текстовый стиль возможен БЕЗ изменения Rgrid.js :lol:
Screenshot from 2025-01-30 00-47-20.png
Без грязных хаков правда не обошлось ;)

Вобщем по стилям отображения экрана думаю будет так:
style=0 - серые буквы на чёрном фоне (по умолчанию 80х25 типа как в ДОС)
style=1 - чёрные буквы на белом фоне (как на скриншоте)
style=2 - зелёные символы из Circuits.CC на черном фоне
style=3 - красно-зелёно-белые шары на белом фоне как в троичном конвертере
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 24236
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC-стандарт онлайновых приложений

Post by Shaos »

Динамические контролы будут под "экранчиком" - последовательность и типы можно задавать параметром layout:

layout=scccrrr,ttt,a,b

где запятая будет означать перевод строки;
b - button;
c - checkbox;
r - radiobutton (надо подумать как объединять их в группы);
s - select (выпадающее меню);
t - однострочное поле текстового ввода;
a - многострочное поле текстового ввода.

Хотел ещё сделать label, но потом подумал, что текст метки можно включать в дальнейшее описание соответствующих контролов, которые добавляются в URL далее один за другим с указанием порядкового номера button1=....&button2=...&checkbox1=.... и т.д. (если контрол такого типа один, то допускается писать без номера - например button=...). Для разных контролов нам надо разное количество данных:

button - численное ID и текст на кнопке (и состояние запрещено/разрешено?);
сheckbox - численное ID, текст описателя (справа) и текущее состояние;
radio - численное ID, текст описателя (справа) и текущее состояние (пока пусть у них будет одна и та же группа);
select - численное ID и тексты пунктов выпадающего меню;
text - численное ID, количество символов и описатель (слева);
textarea - численное ID, размер (2 числа) и текстовый описатель (наверное сверху?).

Ещё в HTML появилась всякая экзотика типа прогрессбаров - это потом можно будет добавить...
User avatar
Shaos
Admin
Posts: 24236
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC-стандарт онлайновых приложений

Post by Shaos »

Альтернативная кодировка ДОС в JS через юникод :lol:

Code: Select all

function $dos(c) {
 const cp866 = [
 " ","☺","☻","♥","♦","♣","♠","•","◘","○","◙","♂","♀","♪","♫","☼",
 "►","◄","↕","‼","¶","§","▬","↨","↑","↓","→","←","∟","↔","▲","▼",
 " ","!","\"","#","$","%","&","'","(",")","*","+",",","-",".","/",
 "0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?",
 "@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O",
 "P","Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_",
 "`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o",
 "p","q","r","s","t","u","v","w","x","y","z","{","|","}","~","⌂",
 "А","Б","В","Г","Д","Е","Ж","З","И","Й","К","Л","М","Н","О","П",
 "Р","С","Т","У","Ф","Х","Ц","Ч","Ш","Щ","Ъ","Ы","Ь","Э","Ю","Я",
 "а","б","в","г","д","е","ж","з","и","й","к","л","м","н","о","п",
 "░","▒","▓","│","┤","╡","╢","╖","╕","╣","║","╗","╝","╜","╛","┐",
 "└","┴","┬","├","─","┼","╞","╟","╚","╔","╩","╦","╠","═","╬","╧",
 "╨","╤","╥","╙","╘","╒","╓","╫","╪","┘","┌","█","▄","▌","▐","▀",
 "р","с","т","у","ф","х","ц","ч","ш","щ","ъ","ы","ь","э","ю","я",
 "Ё","ё","Є","є","Ї","ї","Ў","ў","°","∙","·","√","№","¤","■","□"
 ];
 return cp866[c&255];
}
P.S. Может прям внутрь Rgrid.js эту таблицу воткнуть и разрешить запускаться в текстовом режиме?

P.P.S. Ключевое слово const появилось в JS только в 2015 году - наверное если я всё ещё хочу запускаемости в старых браузерах (в частности Safari 2010 года из MacOS X 10.4), то надо const заменить на var...
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 24236
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC-стандарт онлайновых приложений

Post by Shaos »

Shaos wrote: 28 Jan 2025 22:56 Теперь надо сделать PHP-конструктор веб-страничек с произвольными контролами назвав его скажем nedobuilder.php или robbyform.php причём для начала можно поддержать сетку в стиле http://Circuits.CC произвольного размера после которой в одну строчку идут контролы............А потом можно будет и другие стили поддержать - в том числе "троичный" (пригодный для построения веб-приложений типа троичного конвертера) и даже текстовый (моноширинный)…
А может этих моих роботов для веба назвать «роблеты» (по аналогии с Java «апплетами»)? Тогда PHP-скрипт для их отладки можно обозвать roblet-viewer.php :mrgreen:
User avatar
Shaos
Admin
Posts: 24236
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC-стандарт онлайновых приложений

Post by Shaos »

Вот первый робот для тестирования веб-запускальщика (и он же будет вторым примером использования Rgrid на гитлабе):

Code: Select all

robot "Example 2"
author "Shaos"
main()
{
 SetRand(11)
 state = 0
 dx = 80
 dy = 25
 while(1)
 {
   if(state)
   {
     Random(dx);xx=L
     Random(dy);yy=L
     Random(256);cc=L
     select xx yy
     set cc
   }
   code = 0
   recv code
   if(N==0) continue
   if(N==#FFFF) // mouse click
   {
      select x y
      set #FF
   }
   else
   {
     if(N==#FFFE) // Keyboard (or buttons)
     {
       if(code=='S' && state==0) state = 1
       if(code=='O' && state==1) state = 0
       if(code=='C')
       {
          for(xx=0;xx<dx;xx++){
          for(yy=0;yy<dy;yy++){
             select xx yy
             set #20
          }}
       }
     }
     else // GUI action
     {
      A = k
      B = n
      C = code
      COMMAND 1
     }
   }
 }
}
+LIB/RANDOMSW
Тут есть работа с мышью и работа с клавой, 3 буквы которой могут быть замапленны на button-контролы (S, O и C), а также на будущее есть блок "GUI action"
Используемый инклуд (софтверный 16-битный рандом): http://www.nedopc.org/nedopc/LIB/RANDOMSW
Декодер робота с инклудом: http://nedopc.org/decode.php?p=176359
Скомпилированный робот: http://nedopc.org/exec/robbyc.php?s=176359
User avatar
Shaos
Admin
Posts: 24236
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC-стандарт онлайновых приложений

Post by Shaos »

Shaos wrote: 31 Jan 2025 16:23
Shaos wrote: 28 Jan 2025 22:56 Теперь надо сделать PHP-конструктор веб-страничек с произвольными контролами назвав его скажем nedobuilder.php или robbyform.php причём для начала можно поддержать сетку в стиле http://Circuits.CC произвольного размера после которой в одну строчку идут контролы............А потом можно будет и другие стили поддержать - в том числе "троичный" (пригодный для построения веб-приложений типа троичного конвертера) и даже текстовый (моноширинный)…
А может этих моих роботов для веба назвать «роблеты» (по аналогии с Java «апплетами»)? Тогда PHP-скрипт для их отладки можно обозвать roblet-viewer.php :mrgreen:
Пусть будет robbyrun.php :lol:

https://gitlab.com/nedopc/sdk/-/blob/master/rgrid/robbyrun.php?ref_type=heads

Пока только с кнопками - пример использования (робот выше):

http://nedopc.org/robbyrun.php?style=1&robot=176359&button1=-2,Start,S&button2=-2,Stop,O&button3=-2,Clear,C
Screenshot from 2025-02-02 02-42-28.png
Это был style=1 (текст на белом фоне) - если кому интересно, то можете попробовать style=0 и style=2 :roll:

P.S. Ещё есть скрытый параметр duty, который обозначает степень загрузки JS-движка в браузере - эта фича была в Webitable->Rgrid всегда (т.е. с 2012 года), но до этого времени использовалось число 80, которое выбиралось по умолчанию (что значит 80% duty cycle или на каждые 4 кванта времени работы будет 1 квант времени простоя) - можете поэкспериментировать с разными значениями (чем это число меньше, тем виртуальная машина Robby будет работать медленнее).

P.P.S. Я не совсем понимаю как оно у меня работает ( видимо когда писал эти треды более 12 лет назад был пьян либо находился в полусонном забытьи : ) но похоже что можно установить параметр duty и больше 100 - при этом виртуальная машина будет ещё быстрее работать, но экран будет обновляться рывками...
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 24236
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC-стандарт онлайновых приложений

Post by Shaos »

Подробнее про описатели кнопок:

button1=-2,Start,S - идентификатор -2, имя на кнопке "Start", при нажатии роботам посылается код символа 'S'
button2=-2,Stop,O - идентификатор -2, имя на кнопке "Stop", при нажатии роботам посылается код символа 'O'
button3=-2,Clear,C - идентификатор -2, имя на кнопке "Clear", при нажатии роботам посылается код символа 'C'

Идентификатор -2 совпадает с идентификатором клавиатуры в других интерпретаторах/компиляторах Robby (#FFFE), но на самом деле идентификатор тут может быть любым - надо только программу робота поправить (но лучше сохранять его отрицательным т.к. в будущем появятся групповые роботы, которые будут обмениваться сообщениями друг с другом, и идентифицироваться они будут положительными числами 1,2,3 и т.д.).

Самый простой робот (без кнопок), который давно лежал на гитлабе как единственный пример для Rgrid (EXAMPLE.R):

Code: Select all

// robbyc -r EXAMPLE.R
// echo var robot = >robot.js
// cat EXAMPLE.rjs >>robot.js

author "Shaos"
robot "Example"
main()
{
 while(1)
 {
   code = 0
   recv code
   if(N==0) continue
   if(N==#FFFF) // mouse click
   {
      select x y
      set #FF
   }
 }
}
Декод робота:
http://nedopc.org/decode.php?p=176363
Скомпилированный робот:
http://nedopc.org/exec/robbyc.php?s=176363
Способы запуска этого "роблета" на исполнение без кнопок:
http://nedopc.org/robbyrun.php?robot=176363 (стиль 0 по умолчанию)
http://nedopc.org/robbyrun.php?robot=176363&style=1
http://nedopc.org/robbyrun.php?robot=176363&style=2
User avatar
Shaos
Admin
Posts: 24236
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC-стандарт онлайновых приложений

Post by Shaos »

Научился ловить кнопки с клавы и засылать их в робота :lol:

Code: Select all

document.addEventListener("keyup", function(event) {
 if(event.target.tagName === 'INPUT' ||
    event.target.tagName === 'TEXTAREA') {
   return;
 }
 var r = 0;
 if(event.key.length==1) {
  r = $R.event(0,-2,event.key);
 }
 console.log("Key press:",event.key," (",r,")");
});
Тут в начале проверяется, что источник кнопок не поля текстового ввода, а далее проверяется, что это символ, а не спец кнопка (у символа длина будет 1) - вот какие ещё могут быть строчки вместо 1-буквенных символов:

Code: Select all

Key press: ArrowUp  ( 0 )
Key press: ArrowDown  ( 0 )
Key press: ArrowLeft  ( 0 )
Key press: ArrowRight  ( 0 )
Key press: Escape  ( 0 ) 
Key press: Backspace ( 0 ) 
Key press: Insert  ( 0 )
Key press: Delete  ( 0 )
Key press: Home  ( 0 )
Key press: End  ( 0 )
Key press: PageUp  ( 0 )
Key press: PageDown  ( 0 )
Key press: Enter  ( 0 ) 
Key press: Shift  ( 0 ) 
Key press: Alt  ( 0 ) 
Key press: F1  ( 0 ) 
Key press: F2  ( 0 ) 
Key press: F3  ( 0 ) 
Key press: F4  ( 0 ) 
По идее их тоже можно передавать в робота перекодируя скажем как в РК-86 (передавая код из первых 32 кодов ASCII) :mrgreen:

P.S. F5 перегружает страничку, поэтому она улетит уже в нового робота. F1 работает на FireFox, а на хромиуме открывает закладку помощи браузера...