User:PythonshellDebugwindow/GUI Display Language
GUI Display Language is an esolang created by User:PythonshellDebugwindow. Its primary use is making GUIs.
Logic
An indentation of 1 space to denote blocks is optional, but is better legible
- IF-EXECUTE-ELSE-EXECUTE-FIN
- WHILE-RUN-FIN
- IF-EXECUTE-FIN
- IF-EXECUTE-CASE-EXECUTE-FIN (like if/else-if)
- IF-EXECUTE-CASE-EXECUTE-ELSE-EXECUTE-FIN (like if/else-if/else)
- FOR-INCLUDES-EXECUTE-REPEAT (used mainly for variadic args; syntax is FOR !varargs INCLUDES @iteration-variable EXECUTE \ncode\n REPEAT)
Textbox and Textline
Textbox is input. Textline is display (output).
textbox (!top-left-x, !top-left-y, !top-right-x, !top-right-y, !bottom-left-x, !bottom-left-y, !bottom-right-x, !bottom-right-y) textline (!top-left-x, !top-left-y, !top-right-x, !top-right-y, !bottom-left-x, !bottom-left-y, !bottom-right-x, !bottom-right-y)
Events
Event listeners can be set: on-tb-change and on-tb-enter.
on-tb-change (!handler-function, !!path-to-tb) on-tb-enter (!handler-function, !!path-to-tb)
Here are the events.
- Press any key with a textbox selected to trigger on-tb-changefor the selected textbox.
- Press enter with a textbox selected to trigger on-tb-enterfor the selected textbox.
Other
Tilde (~) starts a line comment. At (@) denotes a variable. Exclamation mark (!) denotes a function argument. Two exclamation marks (!!) before an argument in a function means variadic args (the argument is multiple of them?). Backquote (`) denotes a function (also variable), body is wrapped in "double quotes" for single-line and ""double double quotes"" for multi-line. Section sign (§) represents the null value.
More
Equality operator is $$.
Examples
Hello World
@tb = textbox(100, 100, 300, 100, 100, 300, 300, 300)
@d = display(400, 400, @tb)
tb-write('Hello World', @d, @tb)
render(@d, @tb, @tl)
Infinite live cat program
@tb = textbox(100, 50, 300, 50, 200, 150, 300, 150) ~200 by 100 @tl = textline(100, 250, 300, 250, 100, 350, 300, 350) ~200 by 100 @d = display(400, 400, @tb, 2tl) `copy () "" tl-clear(@d, @tb) tl-write(tb-read(@d, @tb), @d, @tl) "" on-tb-change(`copy, @d, @tb) render(@d, @tb, @tl)
Truth-machine
Shows off IF-EXECUTE-ELSE-EXECUTE-FIN and WHILE-RUN-FIN logic.
@has-entered = '0'
@tb = textbox(100, 50, 300, 50, 200, 150, 300, 150) ~200 by 100
@tl = textline(100, 250, 300, 250, 100, 350, 300, 350) ~200 by 100
`truth () ""
IF @has-entered $$ '0' EXECUTE
 IF tb-read(@d, @tb) $$ '1' EXECUTE
  WHILE '1' $$ '1' RUN
   tl-write('1', @d, @tb)
  FIN
 ELSE EXECUTE
  tl-write('0', @d, @tb)
 FIN
ELSE EXECUTE
 @has-entered = '1'
FIN
""
on-tb-change(`truth, @d, @tb)
render(@d, @tb, @tl)
Standard libraries
ArrayLib.guidl
`array (!!items) "items" `len (!arr) "" @count = 0 FOR !arr INCLUDES @i EXECUTE @count = inc(@count) REPEAT @count "" `array-at (!arr, !idx) "" @item = § @i = 0 FOR !arr INCLUDES @x EXECUTE IF @i $$ !idx EXECUTE @item = x FIN @i = inc(@i) REPEAT @item "" `arr-cat-item (!arr, !item) "array(!!arr, item)"
To include its functions and use them:
@* = include("ArrayLib")
@two = array-at(array(1, 2, 3), 1)
`str-to-array (!str) "array(!!str)"
- todo: set-arr-item (arr, i, x) -> arr[:i] + [x] + arr[i + 1:]
 
Jumplang interpreter
The function takes code as a string and a display and textline for output (no input here). Numeric output. UB if CP<0. [WIP]
@* = include("ArrayLib")
`brainfuck (!code, @d-out, @tb-out) ""
@cells = array(0)
@cp = 0
FOR str-to-array(!code) INCLUDES @c EXECUTE
 IF @c $$ '+' EXECUTE
 CASE @c $$ '-' EXECUTE
 CASE @c $$ '<' EXECUTE
  @cp = dec(@cp)
 CASE @c $$ '>' EXECUTE
  @cp = inc(@p)
  IF @cp $$ len(@cells) EXECUTE
   @cells = arr-cat-item(@cells, 0)
  FIN
 CASE @c $$ '.' EXECUTE
  tb-write(array-at(@cells, @cp), @d-out, @tb-out)
 CASE @c $$ '?' EXECUTE
 CASE @c $$ '!' EXECUTE
 FIN
REPEAT
""