nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 12:11



Reply to topic  [ 32 posts ]  Go to page Previous  1, 2, 3  Next
nedoPC-стандарт онлайновых приложений 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
bar wrote:
Shaos wrote:
2) гипотетический байткод с функционального языка программирования Hope, т.к. это функциональщина, то теоретически можно поддержать ограниченное подмножество функционала таких языков как Lisp, Haskell, Erlang.

Я не обратил сразу внимания на слово "гипотетический". Теперь же я не понимаю вкладываемого в него смысла. Гипотетический -- значит несуществующий? По-крайней мере в сорцах Hope я не нашёл никаких упоминаний про байткод.


Угу - смысл понят верно - байткода Hope ещё нет :roll:
Поэтому я и стал пока копать в сторону RW0 - что есть существующий и более тривиальный байт-код...

_________________
:dj: https://mastodon.social/@Shaos


17 May 2010 15:40
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
Решил копать в сторону Hope, причём не просто Hope, а его гибрида с языком Prolog - подробнее см. тут

_________________
:dj: https://mastodon.social/@Shaos


10 Jan 2012 15:12
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
А теперь смотрю обратно в сторону RW0 в качестве виртуальной машины на JS :roll:

_________________
:dj: https://mastodon.social/@Shaos


10 Oct 2012 18:13
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post Re:
Shaos wrote:
А теперь смотрю обратно в сторону RW0 в качестве виртуальной машины на JS :roll:

Ну мой движок RW0 (язык Robot Warfare 1 теперь называется Robby) на JS существует уже более 10 лет - см. Rgrid - виртуальная машина роботов в браузере (JavaScript)
Поэтому задача по сути выполнена - можно строить онлайн приложения с управлением мышой типа http://Circuits.CC или https://Ternaro.com
Разве что ещё нужно замкнуть на нативные контролы (кнопки, чекбоксы, текстовые поля ввода) - тогда можно нагородить аналоги вот такого:

Attachment:
Screenshot from 2023-04-08 12-03-00.png
Screenshot from 2023-04-08 12-03-00.png [ 21.55 KiB | Viewed 4527 times ]

И оно даже будет крутиться в старых браузерах :mrgreen:

_________________
:dj: https://mastodon.social/@Shaos


13 Apr 2023 08:43
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Можно поэкспериментировать с прикручиванием HTML-ных контролов к ROBBY, продолжая развивать минимальный пример из соседнего топика.

Пока в Robby-онлайн используется вывод картинки по номеру в определённые координаты:
Code:
   if(N==#FFFF) // mouse click
   {
      select x y
      set #FF
   }
по мышиному клику, который превращается в сообщение роботу вот такой JS-фунцией:
Code:
function action(x,y) {
 $R.event(0,-1,1,x,y);
}
а также можно выводить попап с сообщением (alert) через команды PRINT и SAY (правда в последнем случае вывод значений переменных пока не работает).

И ещё остаётся неисследованная возможность заводить команды COMMAND (для вызова изнутри робота), реализация которых на JS добавлялась бы через колбеки:
Code:
// $R.callback - get or set callback for external command
// 1st parameter (i) = numeric identifier of the command
// 2nd parameter (optional) - function(robot,a,b,c)
// if 2nd parameter is not set then it returns callback

$R.callback = function(i) {
 var f = arguments[1];
 if(f) {
   commands[i] = f;
 }
 return commands[i];
}
Вот это мы сейчас и попробуем...

_________________
:dj: https://mastodon.social/@Shaos


14 Apr 2023 22:51
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Мда - надо пофиксить:
Code:
// $R.callback - get or set callback for external command
// 1st parameter - numeric identifier of the command
// 2nd parameter (optional) - function(robot) implementing command
// if 2nd parameter is not set then it returns stored function

$R.callback = function(i) {
 var f = arguments[1];
 if(f) {
   this.commands[i] = f;
 }
 return this.commands[i];
}
вот теперь COMMAND работает :roll:

Code:
// robbyc -r EXAMPLE.R

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
      if(x==0 && y==0)
      {
         A = x
         B = y
         C = k
         COMMAND 1
      }
   }
 }
}
и вот с таким HTML:
Code:
<HTML>
<HEAD><TITLE>Rgrid example</TITLE>
<META HTTP-EQUIV="Content-Language" content="en">
<META HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
<SCRIPT type="text/javascript" src="Rgrid.js"></SCRIPT>
<SCRIPT type="text/javascript" src="robot.js"></SCRIPT>
</HEAD>
<BODY BGCOLOR=#000000 TEXT=#00AA00 LINK=#00AAAA>
<p id="here" align=center>Rgrid requires a modern web-browser to work properly...</p>
<font size=-4>
<p id="pow" align=center>Powered...</p>
</font>
</BODY>
<script type="text/javascript">

$R.prefix = "pcb/";

$_("pow","Powered by " + $R.powered());

function command1(r) {
 alert("Robot "+r.regs[9]+" "+r.regs[0xA]+" "+r.regs[0xB]+" "+r.regs[0xC]);
}

$R.callback(1,command1);

function action(x,y) {
 $R.event(0,-1,1,x,y);
}

if($R.grid('here',80,50,action)>0) {
 $R.add(robot);
 $R.start();
}

</script>
</HTML>
при кликаньи в левую-верхнюю клетку выдаёт вот такое:

Attachment:
Screenshot from 2023-04-15 01-57-34.png
Screenshot from 2023-04-15 01-57-34.png [ 12.06 KiB | Viewed 4428 times ]

Это значения регистров робота I A B С после слова Robot, как и было закодено в HTML для COMMAND 1:
Code:
function command1(r) {
 alert("Robot "+r.regs[9]+" "+r.regs[0xA]+" "+r.regs[0xB]+" "+r.regs[0xC]);
}

$R.callback(1,command1);
Регистр I (девятый регистр) - это порядковый номер робота, начиная с 1 (поэтому оно тут 1),
а вот более одного робота пока не взлетают - буду чинить потом :cry:

P.S. Обновил Rgrid.js до v0.5 (фикс COMMAND): https://gitlab.com/nedopc/sdk/-/tree/master/rgrid

_________________
:dj: https://mastodon.social/@Shaos


15 Apr 2023 01:39
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
А теперь пробуем чекбоксы - меняем HTML таким образом:
Code:
<HTML>
<HEAD><TITLE>Rgrid example</TITLE>
<META HTTP-EQUIV="Content-Language" content="en">
<META HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
<SCRIPT type="text/javascript" src="Rgrid.js"></SCRIPT>
<SCRIPT type="text/javascript" src="robot.js"></SCRIPT>
</HEAD>
<BODY BGCOLOR=#000000 TEXT=#00AA00 LINK=#00AAAA>
<p id="here" align=center>Rgrid requires a modern web-browser to work properly...</p>
<p align=center>
<input name="el1" type="checkbox" onclick="inputcheck(10)" id="input10">
<input name="el2" type="checkbox" onclick="inputcheck(20)" id="input20">
<input name="el3" type="checkbox" onclick="inputcheck(30)" id="input30">
</p>
<font size=-4>
<p id="pow" align=center>Powered...</p>
</font>
</BODY>
<script type="text/javascript">

$R.prefix = "pcb/";

$_("pow","Powered by " + $R.powered());

function command1(r) {
 alert("Robot "+r.regs[9]+" "+r.regs[0xA]+" "+r.regs[0xB]+" "+r.regs[0xC]);
}

$R.callback(1,command1);

function action(x,y) {
 $R.event(0,-1,1,x,y);
}

if($R.grid('here',20,12,action)>0) {
 $R.add(robot);
 $R.start();
}

function inputcheck(i) {
 var e = $("input"+i);
 if(e.checked) i++;
 $R.event(0,-5,i);
}
</script>
</HTML>

Этот код добавляет под сеткой 3 чекбокса:

Attachment:
Screenshot from 2023-04-15 03-45-17.png
Screenshot from 2023-04-15 03-45-17.png [ 9.7 KiB | Viewed 4418 times ]

Модифицируем робота вот так:
Code:
author "Shaos"
robot "Example"
main()
{
 def pak[9]
 def buf[10]
 pak[0]=8
 buf[0]=13
 for(A=1;A<=8;A++)
 {
    pak[A] = 8-A
    buf[A] = 13
 }
 while(1)
 {
   code = 0
   recv code
   if(N==0) continue
   if(N==#FFFF) // mouse click
   {
      select x y
      set #FF
   }
   if(N==#FFFB) // GUI action
   {
      A = k
      B = n
      C = code
      COMMAND 1
   }
 }
}

Теперь при выборе первого чекбокса выскочит вот такой попап (Robot 1 далее время, потом код -5=0xFFFB и далее идентификатор события):

Attachment:
Screenshot from 2023-04-15 03-43-44.png
Screenshot from 2023-04-15 03-43-44.png [ 7.23 KiB | Viewed 4418 times ]

В данном случае идентификатор события 11 - т.е. контрол с кодом 10 включён (+1).

Далее снимаем чек с первого чекбокса - теперь идентификатор события 10 (чекбокс выключен):
Attachment:
Screenshot from 2023-04-15 03-44-05.png
Screenshot from 2023-04-15 03-44-05.png [ 11.08 KiB | Viewed 4418 times ]


И для разнообразия ставим чек на третьем чекбоксе:
Attachment:
Screenshot from 2023-04-15 03-44-25.png
Screenshot from 2023-04-15 03-44-25.png [ 11.47 KiB | Viewed 4418 times ]


В данном случае попапчик нам нужен только для отладки с помощью COMMAND 1 выводящем значения регистров A B C куда предварительно записаны K (время), N (код источника) и CODE (код пришедший из очереди сообщений) - так можно видеть, что всё сработало как надо.

P.S. По идее можно разными отрицательными кодами источника кодировать разные контролы, а в коде данных можно указывать взведён чекбокс или нет - в этом случае функция обработчик может выглядеть вот так:
Code:
function inputcheck(i) {
 var e = $("input"+i);
 $R.event(0,-i,e.checked);
}
(тут последние 2 аргумента опущены, но в них что-то ещё можно передавать - внутри робота они принимаются как регистры X и Y)

P.P.S. Вот прям сразу можно ещё и обычные кнопки поддержать:
Code:
<input value="Click" type="button" onclick="inputcheck(30)" id="input30">

Attachment:
Screenshot from 2023-04-15 04-10-38.png
Screenshot from 2023-04-15 04-10-38.png [ 11.79 KiB | Viewed 4417 times ]

А вот для радио-кнопок (type=radio) надо будет дополнительный код на JS городить, который будет выключать лишние радиокнопки...

_________________
:dj: https://mastodon.social/@Shaos


15 Apr 2023 03:50
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Теперь о полях ввода (однострочных type=text и многострочных textarea)

Текст можно попробовать засылать как многословное событие - внутри робота его надо получать через RECVP

А можно представить текст как файл, уведомляя робота однословным событием, что тот или иной текст (файл) поменялся

На обновление строки ввода должно отрабатывать событие onchange:

Code:
<input type=text size=9 onchange="inputcheck(10)" id="input10">


И на нажатие Enter или уход из контрола когда там что-то поменялось, вызывается событие, уходящее в робота:


Attachments:
Screenshot from 2023-04-15 23-57-14.png
Screenshot from 2023-04-15 23-57-14.png [ 11.29 KiB | Viewed 4314 times ]

_________________
:dj: https://mastodon.social/@Shaos
15 Apr 2023 11:39
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Обновил Rgrid.js до v0.6 (фикс SEND и RECV): https://gitlab.com/nedopc/sdk/-/tree/master/rgrid

Теперь попробую послать введённый в поле текстового ввода текст роботу - для этого делаем следующие изменения в HTML:
Code:
<input type=text size=9 onchange="textchanged(10)" id="input10">
...
function textchanged(i) {
 var s = $_("input"+i);
 var ascii = [];
 for (var j = 0; j<s.length; j++) {
  ascii.push(s[j].charCodeAt(0));
 }
 $R.event(0,-i,ascii);
}
Функция $_ досталась фреймворку Rgrid.js по наследству от моего же фреймворка Webitabe, который я развил до предела в 2012 году - эта функция возвращает текстовое значение элемента HTML по ID - в данном случае это value контрола text, которое затем превращается в массив ASCII-кодов (а что делать с UTF8?) и передаётся роботу как сообщение-пакет (может имеет смысл вставить такую разборку строки на запчасти внутрь фреймворка?).

P.S. Хотя с UTF8 вроде бы что-то поболее чем ASCII-коды возвращает (и это не Unicode):

Attachment:
Screenshot from 2023-04-16 03-52-02.png
Screenshot from 2023-04-16 03-52-02.png [ 44.82 KiB | Viewed 4301 times ]

Code:
5: 1088 = р
​6: 1091 = у
​7: 1089 = с
​8: 1089 = с
​9: 1082 = к
​10: 1080 = и
​11: 1081 = й

P.P.S. А нет - это UTF8 т.к. всё совпадает вот с этой табличкой:
https://www.w3schools.com/charsets/ref_utf_cyrillic.asp

_________________
:dj: https://mastodon.social/@Shaos


16 Apr 2023 03:13
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Перенёс преобразование строки в массив внутрь Rgrid.js (будет частью v0.7) - плюс там ещё длину посылки надо было указывать в первом отправляемом слове и RECVP был немного "поломатый".

Теперь прямо при объявлении контрола можно указывать добавление события с текстом по изменению состояния (по Enter или покиданию изменённого контрола)::
Code:
<input type=text size=9 onchange="$R.event(0,-10,$_('input10'))" id="input10">
и всё отрабатывает как надо:
Attachment:
Screenshot from 2023-04-16 19-34-43.png
Screenshot from 2023-04-16 19-34-43.png [ 46.9 KiB | Viewed 4215 times ]
(в ячейке 5 теперь длина пакета 8 и далее идут коды символов из текстового поля ввода)

P.S. Сетку пока отключать нельзя т.к. в функции $R.grid идёт заполнение кое-какие операционных кешей для RobbyVM - непомню зачем я это сделал, но надо их оттуда вынести, тогда grid будет независим от роботов и можно будет делать другие виртуальные машины (как собственно и задумывалось в Webitable) либо запускать роботов без grid (это будет нужно для веб-приложений где только контролы).

_________________
:dj: https://mastodon.social/@Shaos


16 Apr 2023 17:58
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Для вывода русского текста через робота (скажем на сетку) придётся провести преобразование из UTF8 в альтернативную кодировку доса - в этом случае в робота надо воткруть таблицу перекодировки, которая бы переводила UTF8 с кодами от 1025 (Ё) до 1105 (ё) т.е. всего 81 ячейка (ну или 82, если стартовать с круглого кода 1024):
Code:
Char   Dec     Hex     CP866   Name
Ѐ      1024    0400            CYRILLIC CAPITAL LETTER IE WITH GRAVE
Ё      1025    0401    0xF0    CYRILLIC CAPITAL LETTER IO
Ђ      1026    0402            CYRILLIC CAPITAL LETTER DJE
Ѓ      1027    0403            CYRILLIC CAPITAL LETTER GJE
Є      1028    0404            CYRILLIC CAPITAL LETTER UKRAINIAN IE
Ѕ      1029    0405            CYRILLIC CAPITAL LETTER DZE
І      1030    0406            CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
Ї      1031    0407            CYRILLIC CAPITAL LETTER YI
Ј      1032    0408            CYRILLIC CAPITAL LETTER JE
Љ      1033    0409            CYRILLIC CAPITAL LETTER LJE
Њ      1034    040A            CYRILLIC CAPITAL LETTER NJE
Ћ      1035    040B            CYRILLIC CAPITAL LETTER TSHE
Ќ      1036    040C            CYRILLIC CAPITAL LETTER KJE
Ѝ      1037    040D            CYRILLIC CAPITAL LETTER I WITH GRAVE
Ў      1038    040E            CYRILLIC CAPITAL LETTER SHORT U
Џ      1039    040F            CYRILLIC CAPITAL LETTER DZHE
А      1040    0410    0x80    CYRILLIC CAPITAL LETTER A
Б      1041    0411    0x81    CYRILLIC CAPITAL LETTER BE
В      1042    0412    0x82    CYRILLIC CAPITAL LETTER VE
Г      1043    0413    0x83    CYRILLIC CAPITAL LETTER GHE
Д      1044    0414    0x84    CYRILLIC CAPITAL LETTER DE
Е      1045    0415    0x85    CYRILLIC CAPITAL LETTER IE
Ж      1046    0416    0x86    CYRILLIC CAPITAL LETTER ZHE
З      1047    0417    0x87    CYRILLIC CAPITAL LETTER ZE
И      1048    0418    0x88    CYRILLIC CAPITAL LETTER I
Й      1049    0419    0x89    CYRILLIC CAPITAL LETTER SHORT I
К      1050    041A    0x8A    CYRILLIC CAPITAL LETTER KA
Л      1051    041B    0x8B    CYRILLIC CAPITAL LETTER EL
М      1052    041C    0x8C    CYRILLIC CAPITAL LETTER EM
Н      1053    041D    0x8D    CYRILLIC CAPITAL LETTER EN
О      1054    041E    0x8E    CYRILLIC CAPITAL LETTER O
П      1055    041F    0x8F    CYRILLIC CAPITAL LETTER PE
Р      1056    0420    0x90    CYRILLIC CAPITAL LETTER ER
С      1057    0421    0x91    CYRILLIC CAPITAL LETTER ES
Т      1058    0422    0x92    CYRILLIC CAPITAL LETTER TE
У      1059    0423    0x93    CYRILLIC CAPITAL LETTER U
Ф      1060    0424    0x94    CYRILLIC CAPITAL LETTER EF
Х      1061    0425    0x95    CYRILLIC CAPITAL LETTER HA
Ц      1062    0426    0x96    CYRILLIC CAPITAL LETTER TSE
Ч      1063    0427    0x97    CYRILLIC CAPITAL LETTER CHE
Ш      1064    0428    0x98    CYRILLIC CAPITAL LETTER SHA
Щ      1065    0429    0x99    CYRILLIC CAPITAL LETTER SHCHA
Ъ      1066    042A    0x9A    CYRILLIC CAPITAL LETTER HARD SIGN
Ы      1067    042B    0x9B    CYRILLIC CAPITAL LETTER YERU
Ь      1068    042C    0x9C    CYRILLIC CAPITAL LETTER SOFT SIGN
Э      1069    042D    0x9D    CYRILLIC CAPITAL LETTER E
Ю      1070    042E    0x9E    CYRILLIC CAPITAL LETTER YU
Я      1071    042F    0x9F    CYRILLIC CAPITAL LETTER YA
а      1072    0430    0xA0    CYRILLIC SMALL LETTER A
б      1073    0431    0xA1    CYRILLIC SMALL LETTER BE
в      1074    0432    0xA2    CYRILLIC SMALL LETTER VE
г      1075    0433    0xA3    CYRILLIC SMALL LETTER GHE
д      1076    0434    0xA4    CYRILLIC SMALL LETTER DE
е      1077    0435    0xA5    CYRILLIC SMALL LETTER IE
ж      1078    0436    0xA6    CYRILLIC SMALL LETTER ZHE
з      1079    0437    0xA7    CYRILLIC SMALL LETTER ZE
и      1080    0438    0xA8    CYRILLIC SMALL LETTER I
й      1081    0439    0xA9    CYRILLIC SMALL LETTER SHORT I
к      1082    043A    0xAA    CYRILLIC SMALL LETTER KA
л      1083    043B    0xAB    CYRILLIC SMALL LETTER EL
м      1084    043C    0xAC    CYRILLIC SMALL LETTER EM
н      1085    043D    0xAD    CYRILLIC SMALL LETTER EN
о      1086    043E    0xAE    CYRILLIC SMALL LETTER O
п      1087    043F    0xAF    CYRILLIC SMALL LETTER PE
р      1088    0440    0xE0    CYRILLIC SMALL LETTER ER
с      1089    0441    0xE1    CYRILLIC SMALL LETTER ES
т      1090    0442    0xE2    CYRILLIC SMALL LETTER TE
у      1091    0443    0xE3    CYRILLIC SMALL LETTER U
ф      1092    0444    0xE4    CYRILLIC SMALL LETTER EF
х      1093    0445    0xE5    CYRILLIC SMALL LETTER HA
ц      1094    0446    0xE6    CYRILLIC SMALL LETTER TSE
ч      1095    0447    0xE7    CYRILLIC SMALL LETTER CHE
ш      1096    0448    0xE8    CYRILLIC SMALL LETTER SHA
щ      1097    0449    0xE9    CYRILLIC SMALL LETTER SHCHA
ъ      1098    044A    0xEA    CYRILLIC SMALL LETTER HARD SIGN
ы      1099    044B    0xEB    CYRILLIC SMALL LETTER YERU
ь      1100    044C    0xEC    CYRILLIC SMALL LETTER SOFT SIGN
э      1101    044D    0xED    CYRILLIC SMALL LETTER E
ю      1102    044E    0xEE    CYRILLIC SMALL LETTER YU
я      1103    044F    0xEF    CYRILLIC SMALL LETTER YA
ѐ      1104    0450            CYRILLIC SMALL LETTER IE WITH GRAVE
ё      1105    0451    0xF1    CYRILLIC SMALL LETTER IO

На самом деле тут всё относительно просто и можно чисто процедурно подменить - вот пример на языке Robby:
Code:
   recv buf[0]
   if(N<=-10) // GUI action
   {
      B = buf[0] // length
      for(A=1;A<=B;A++)
      {
        code = buf[A]
        if(code==1025) code = #F0
        if(code==1105) code = #F1
        if(code>=1040 && code<=1087) code = #80 + code - 1040
        if(code>=1088 && code<=1103) code = #E0 + code - 1088
        select A 0
        set code
      }
   }


Attachments:
Screenshot from 2023-04-16 20-26-50.png
Screenshot from 2023-04-16 20-26-50.png [ 16.78 KiB | Viewed 4209 times ]

_________________
:dj: https://mastodon.social/@Shaos
16 Apr 2023 20:02
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
C textarea тоже всё хорошо :)

Attachment:
Screenshot from 2023-04-16 20-56-49.png
Screenshot from 2023-04-16 20-56-49.png [ 35.92 KiB | Viewed 4206 times ]


Вот такой HTML:
Code:
<textarea rows=4 cols=20 onchange="$R.event(0,-10,$_('input10'))" id="input10">
placeholder
</textarea>

и вот обработчик в Robby:
Code:
   def buf[32]
   ...
   recvp buf[0]
   if(N<=-10) // GUI action
   {
      B = 0
      C = 0
      for(A=1;A<=buf[0];A++)
      {
        code = buf[A]
        if(code==1025) code = #F0
        if(code==1105) code = #F1
        if(code>=1040 && code<=1087) code = #80 + code - 1040
        if(code>=1088 && code<=1103) code = #E0 + code - 1088
        if(code==10) // newline
        {
           B = 0
           C = C + 1
        }
        else
        {
           select B C
           set code
           B = B + 1
        }
      }
   }


Обновил https://gitlab.com/nedopc/sdk/-/tree/master/rgrid до v0.7

P.S. Но всё-таки большие тексты лучше по нажатию на кнопку через файлы в робота вводить т.к. там будут ограничения по размеру 32K (область данных робота с отрицательными адресами), а не размер массива объявленного внутри программы как в случае многословных сообщений, а так уже можно начинать писать онлайн реализацию 3niti alpha на Robby :mrgreen:

P.P.S. Раздвоение одной буквы при выводе placeholder -> placeholddr было связано с тем, что размер принимающего буфера в программе на языке Robby был недостаточен (т.е. далее шли другие переменные, например code) - увеличил размер буфера c 10 до 32 и всё стало лучше - это лишнее доказательство того, что для textarea надо переходить на файлы...

_________________
:dj: https://mastodon.social/@Shaos


16 Apr 2023 21:03
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Для современных браузеров можно где-то сбоку опционально приделать canvas и реализовать Robby-команды PIXEL/CLEAR, COLOR, FILL и TEXT для рисования на графический экран:

Attachment:
Screenshot from 2023-04-16 22-31-11.png
Screenshot from 2023-04-16 22-31-11.png [ 112.03 KiB | Viewed 4195 times ]


P.S. Ещё можно сделать сайт, где бы пользователь мог ввести текст своей программы на Robby, скомпилировать (скажем через сервер, на котором бы запускался robbyc) и запустить в своём браузере (в Rgrid.js прямо сейчас уже возможно робота брать извне как строку с JSON-ом, а не как подключаемый JS-файл)...

_________________
:dj: https://mastodon.social/@Shaos


16 Apr 2023 22:55
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Выпадающее меню для робота выглядит как текстовая строка ввода - при выборе нового значения оно будет послано в робота с нужным идентификатором контрола (в данном случае -50):
Code:
<select name="value" id="input50" onchange="$R.event(0,-50,$_('input50'))">
<option value="N">N</option>
<option value="O">O</option>
<option value="P">P</option>
<option value="Z">Z</option>
</select>


Attachment:
Screenshot from 2023-04-21 21-48-47.png
Screenshot from 2023-04-21 21-48-47.png [ 20.44 KiB | Viewed 4027 times ]


Attachment:
combo1.jpg
combo1.jpg [ 47.7 KiB | Viewed 4027 times ]


Attachment:
combo2.jpg
combo2.jpg [ 45.71 KiB | Viewed 4027 times ]

_________________
:dj: https://mastodon.social/@Shaos


21 Apr 2023 21:53
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Ещё прицепить возможность чтения аргументов из урла и всё - можно начинать писать любые онлайн приложения на Robby :)

_________________
:dj: https://mastodon.social/@Shaos


22 Apr 2023 07:48
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 32 posts ]  Go to page Previous  1, 2, 3  Next

Who is online

Users browsing this forum: No registered users and 32 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.