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

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

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 23884
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

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

Post by Shaos »

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

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

А потом можно будет и другие стили поддержать - в том числе "троичный"
(пригодный для построения веб-приложений типа троичного конвертера)
и даже текстовый (моноширинный)…
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23884
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

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

Post by Shaos »

Текстовый стиль возможен БЕЗ изменения Rgrid.js :lol:

Screenshot from 2025-01-30 00-47-20.png
Screenshot from 2025-01-30 00-47-20.png (11.44 KiB) Viewed 323 times

Без грязных хаков правда не обошлось ;)

Вобщем по стилям отображения экрана думаю будет так:
style=0 - серые буквы на чёрном фоне (по умолчанию 80х25 типа как в ДОС)
style=1 - чёрные буквы на белом фоне (как на скриншоте)
style=2 - зелёные символы из Circuits.CC на черном фоне
style=3 - красно-зелёно-белые шары на белом фоне как в троичном конвертере
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23884
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

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 появилась всякая экзотика типа прогрессбаров - это потом можно будет добавить...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23884
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

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...
Attachments

Screenshot from 2025-01-31 20-06-02.png
Screenshot from 2025-01-31 20-06-02.png (149.05 KiB) Viewed 272 times

Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23884
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

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

Post by Shaos »

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

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
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23884
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

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

Post by Shaos »

Shaos wrote: 31 Jan 2025 23:23
Shaos wrote: 29 Jan 2025 05: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
Screenshot from 2025-02-02 02-42-28.png (146.58 KiB) Viewed 251 times

Это был 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 - при этом виртуальная машина будет ещё быстрее работать, но экран будет обновляться рывками...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23884
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

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
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23884
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

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, а на хромиуме открывает закладку помощи браузера...
Я тут за главного - если что шлите мыло на me собака shaos точка net
Post Reply