maxy = maxx / 16 * 9
'loads allowed characters (ac) from file
DIM SHARED alch
'amount of different allowed characters
'font
DIM SHARED maxlines
'maximum amount of columns fontheight = 16
fontfiler$ = "C:\WINDOWS\FONTS\COUR.TTF"
r&
= _LOADFONT(fontfiler$
, fontheight
, "MONOSPACE")maxrows
= INT(maxx
/ fontwidth
)maxlines
= INT(maxy
/ fontheight
) - 4
'menu (alphabetically sorted)
maxmenuitems = 50
maxarraylen = 20
mafirstchars = 3000
DIM SHARED arraydata$
(maxmenuitems
, maxarraylen
) ' used to store the contents of selectors and dropdown elements DIM SHARED backspace
(maxmenuitems
) ' determines whether backspace was pressed during an active input DIM SHARED basex
(maxmenuitems
) ' represents the very left x value of a menu object DIM SHARED basey
(maxmenuitems
) ' represents the very top y value of a menu object DIM SHARED borderoffsetx
(maxmenuitems
) ' change this to widen/narrow items with borders DIM SHARED borderoffsety
(maxmenuitems
) ' change this to widen/narrow items with borders DIM SHARED c
(maxmenuitems
) ' amount of characters in input element DIM SHARED cbf
(maxmenuitems
) ' amount of characters in input element, but from one loop before DIM SHARED char$
(maxmenuitems
, mafirstchars
) ' single character within element at specific position DIM SHARED defaultstyle
(maxmenuitems
) ' determines the default style of a menu object DIM SHARED destination$
(maxmenuitems
) ' what should happen if the user interacts with this element DIM SHARED editpos
(maxmenuitems
) ' current editing position in input DIM SHARED endparameter$
' this gives you info about what the user did in the menu, can be used to transfer data (could potentially convert the RunMenu SUB into a Function...) DIM SHARED endx
(maxmenuitems
) ' represents the very right x value of a menu object DIM SHARED endy
(maxmenuitems
) ' represents the very bottom y value of a menu object DIM SHARED expanded
(maxmenuitems
) ' if the dropdown menu is expanded DIM SHARED fill$
(maxmenuitems
) ' text to fill the editable part of an input with, good for stuff that is loaded, changed, then saved again DIM SHARED firstprint
(maxmenuitems
) ' equals 0 if the element hasn't been written on screen before, can be used to reinitialize it DIM SHARED kind$
(maxmenuitems
) ' defines the button type DIM SHARED inter
(maxmenuitems
) ' if element is interactable with DIM SHARED m
' could be used to get current element and use it in other SUB's/Functions DIM SHARED maxad
(maxmenuitems
) ' amount of data in array DIM SHARED maxadlength
(maxmenuitems
) ' maximum length of array data for dropdown element DIM SHARED maxc
(maxmenuitems
) ' maximum amount of characters in input element DIM SHARED maxmi
' highest interactable element DIM SHARED maxval
(maxmenuitems
) ' maximum value of slider element DIM SHARED minval
(maxmenuitems
) ' minimum value of slider element DIM SHARED overlaptrigger
(maxmenuitems
) ' used to deal with overlapping issues of dropdown-elements DIM SHARED selected
(maxmenuitems
) ' selectd object within array of element DIM SHARED setting$
(maxmenuitems
) ' setting that the toggle element changes DIM SHARED state
(maxmenuitems
) ' state of toggle element DIM SHARED status$
(maxmenuitems
) ' used for interactive elements, "finished" if determined done (e.g. for filling out forms) DIM SHARED style
(maxmenuitems
) ' current style of an element DIM SHARED text$
(maxmenuitems
) ' non-editable text in front of input DIM SHARED trigger
(maxmenuitems
) ' it's used, but idk what it does anymore :'D DIM SHARED UserInput$
(maxmenuitems
) ' full input text of input element, for usage after menu is run DIM SHARED value
(maxmenuitems
) ' current value of slider element DIM SHARED xoffset
(maxmenuitems
) ' positioning on x-axis DIM SHARED yoffset
(maxmenuitems
) ' positioning on y-axis 'dropdown triangles :D (ascii chars could work maybe?)
'color definitions
maxcolors = 5
r(1) = 237: g(1) = r(1): b(1) = r(1): a(1) = 255 '_RGBA(237, 237, 237, 255) - white
r(2) = 15: g(2) = r(2): b(2) = r(2): a(2) = 255 '_RGBA(15, 15, 15, 255) - black
r(3) = 28: g(3) = 166: b(3) = 28: a(3) = 255 '_RGBA(28, 166, 28, 255) - green
r(4) = 244: g(4) = 188: b(4) = 67: a(4) = 255 '_RGBA(244, 188, 67, 255) - orange/yellow
r(5) = 216: g(5) = 33: b(5) = 17: a(5) = 255 ' _RGBA(216, 33, 17, 255) - red
'load the allowed input characters, feel free to change these :)
ac = 0
ac = ac + 1
alch = ac
'change these to your liking!
firstline = 2
firstchar = 5
'================================================= PROGRAM AREA =================================================
ClearMenu
'add your elements here
NewText 1, 0, "Test", 0
NewToggle 2, 0, "ToggleTest", "lmao"
NewSlider 3, 0, 0, 100, "Test Value"
NewButton 4, 0, "Button!", 0, "redirection", "nowhere"
NewSelector 5, 0, "Select"
arraydata$(5, 1) = "this"
arraydata$(5, 2) = "that"
maxad(5) = 2
NewDropdown 6, 0, "Select"
arraydata$(6, 1) = "dis"
arraydata$(6, 2) = "dat"
maxad(6) = 2
NewInput 7, 0, "Write here:", "actually, don't"
RunMenu
'=================================================== SUB AREA ===================================================
SUB NewText
(yoffset
, xoffset
, text$
, style
) m = m + 1
inter(m) = 0
yoffset(m) = yoffset * 2
xoffset(m) = xoffset
text$(m) = text$
style(m) = style
status$(m) = ""
SUB NewToggle
(yoffset
, xoffset
, text$
, setting$
) m = m + 1
setting$(m) = setting$
state(m) = SETTING_VALUE 'writes the state of the value used into the menu so it displays properly
text$(m) = text$
yoffset(m) = yoffset * 2
xoffset(m) = xoffset
basex
(m
) = (firstchar
+ (LEN(text$
)) + xoffset
(m
) + 1) * fontwidth
basey(m) = (firstline + yoffset(m) - 1) * fontheight - (fontheight / 2)
endx(m) = basex(m) + 2 * fontheight
endy(m) = (firstline + yoffset(m)) * fontheight + (fontheight / 3)
SUB NewSlider
(yoffset
, xoffset
, minval
, maxval
, text$
) m = m + 1
inter(m) = 1
maxmi = m
yoffset(m) = yoffset * 2
minval(m) = minval
maxval(m) = maxval
xoffset(m) = xoffset
text$(m) = text$
basex
(m
) = (firstchar
+ xoffset
(m
) + LEN(text$
(m
))) * fontwidth
+ (fontwidth
/ 2) 'change this to fit your setup value(m) = maxval(m)
endx(m) = basex(m) + (maxx / 4) + 4
status$(m) = ""
SUB NewButton
(yoffset
, xoffset
, text$
, style
, kind$
, destination$
) m = m + 1
maxmi = m
inter(m) = 1
yoffset(m) = yoffset * 2
xoffset(m) = xoffset
borderoffsetx(m) = 0
borderoffsety(m) = 0
text$(m) = text$
basex(m) = (firstchar + xoffset(m) - 1) * fontwidth - (fontwidth / 2) + borderoffsetx(m)
endx
(m
) = basex
(m
) + (LEN(text$
(m
)) + 1) * fontwidth
+ (fontwidth
/ 2) basey(m) = (firstline + yoffset(m) - 1) * fontheight - (fontheight / 2) + borderoffsety(m)
endy(m) = (firstline + yoffset(m)) * fontheight + (fontheight / 3) + borderoffsety(m)
kind$(m) = kind$
destination$(m) = destination$
style(m) = style
defaultstyle(m) = style
status$(m) = ""
SUB NewSelector
(yoffset
, xoffset
, text$
) m = m + 1
inter(m) = 1
maxmi = m
selected(m) = 1
text$(m) = text$
yoffset(m) = yoffset * 2
xoffset(m) = xoffset
basex(m) = (firstchar + xoffset(m) - 1) * fontwidth - (fontwidth / 2)
basey(m) = (firstline + yoffset(m) - 1) * fontheight - (fontheight / 2)
endx
(m
) = basex
(m
) + (LEN(text$
) + 1) * fontwidth
+ (fontwidth
/ 2) endy(m) = (firstline + yoffset(m)) * fontheight + (fontheight / 3)
SUB NewDropdown
(yoffset
, xoffset
, text$
) m = m + 1
inter(m) = 1
maxmi = m
yoffset(m) = yoffset * 2
xoffset(m) = xoffset
borderoffsetx(m) = 0
borderoffsety(m) = -2
text$(m) = text$
basex
(m
) = (firstchar
+ xoffset
(m
) + LEN(text$
(m
)) + 1) * fontwidth
- (fontwidth
/ 2) + borderoffsetx
(m
) 'left end of dropdown box basey(m) = (firstline + yoffset(m) - 1) * fontheight - (fontheight / 2) + borderoffsety(m)
endy(m) = (firstline + yoffset(m)) * fontheight + (fontheight / 3) + borderoffsety(m)
status$(m) = ""
SUB NewInput
(yoffset
, xoffset
, text$
, fill$
) m = m + 1
inter(m) = 1
maxmi = m
c(m) = 0
c(m) = c(m) + 1
char$(m, c(m)) = ""
c(m) = 0
maxc(m) = 0
yoffset(m) = yoffset * 2
fill$(m) = fill$
text$(m) = text$
xoffset(m) = xoffset
status$(m) = ""
m = 0
'ERASE c, cbf, char$, firstprint, type$, UserInput$, status$, destination$, style, defaultstyle, basex, endx, basey, endy
maxm = 0
activem = 1
maxmi = 0
'add more background elements here if you want! you can just add a parameter to RunMenu to get the info which BG should be used
endparameter$ = ""
maxm = m
activem = 1
'_LIMIT 120
IF activem
< maxmm
AND inter
(activem
) = 1 THEN status$(activem) = "finished"
activem = activem + 1
activem = activem + 1
activem = 1
activem = activem - 1
activem = maxm
activem = activem + 1
activem = 1
activem = activem - 1
activem = maxm
IF selected
(activem
) < maxad
(activem
) THEN selected(activem) = selected(activem) + 1
selected(activem) = 1
selected(activem) = selected(activem) - 1
selected(activem) = maxad(activem)
m = 0
m = m + 1
checkm = 0
checkm = checkm + 1
IF overlaptrigger
(checkm
) = 1 AND checkm
< m
THEN overlaptrigger(checkm) = 0
firstprint(m) = 0
firstprint(m) = 1
LOCATE firstline
+ yoffset
(m
), firstchar
+ xoffset
(m
) mouseclicked = 1
state(m) = 0
state(m) = 1
mouseclicked = 0
firstprint(m) = 1
printtoggle:
LINE (basex
(m
), basey
(m
))-(endx
(m
), endy
(m
)), _RGBA(r
(1), g
(1), b
(1), a
(1)), BF
LINE (basex
(m
), basey
(m
))-(endx
(m
), endy
(m
)), _RGBA(r
(2), g
(2), b
(2), a
(2)), B
LINE (basex
(m
) + 2, basey
(m
) + 2)-(endx
(m
) - (endx
(m
) - basex
(m
)) / 2 - 2, endy
(m
) - 2), _RGBA(r
(2), g
(2), b
(2), a
(2)), BF
LINE (basex
(m
), basey
(m
))-(endx
(m
), endy
(m
)), _RGBA(r
(2), g
(2), b
(2), a
(2)), BF
LINE (basex
(m
) + (endx
(m
) - basex
(m
)) / 2 + 2, basey
(m
) + 2)-(endx
(m
) - 2, endy
(m
) - 2), _RGBA(r
(4), g
(4), b
(4), a
(4)), BF
LOCATE firstline
+ yoffset
(m
), firstchar
+ xoffset
(m
) checkm = 0
checkm = checkm + 1
IF overlaptrigger
(checkm
) = 1 AND checkm
< m
THEN overlaptrigger(checkm) = 0
firstprint(m) = 0
firstprint(m) = 1
LINE (basex
(m
), basey
(m
))-(endx
(m
), endy
(m
)), _RGBA(r
(1), g
(1), b
(1), a
(1)), BF
LINE (basex
(m
), basey
(m
))-(endx
(m
), endy
(m
)), _RGBA(r
(2), g
(2), b
(2), a
(2)), B
LINE (basex
(m
), basey
(m
))-(endx
(m
), endy
(m
)), _RGBA(r
(2), g
(2), b
(2), a
(2)), BF
CASE IS = 2 'colored (color index 3) LINE (basex
(m
), basey
(m
))-(endx
(m
), endy
(m
)), _RGBA(r
(3), g
(3), b
(3), a
(3)), BF
CASE IS = 3 'color border (color index 3) LINE (basex
(m
), basey
(m
))-(endx
(m
), endy
(m
)), _RGBA(r
(1), g
(1), b
(1), a
(1)), B
LINE (basex
(m
), basey
(m
))-(endx
(m
), endy
(m
)), _RGBA(r
(3), g
(3), b
(3), a
(3)), B
LOCATE firstline
+ yoffset
(m
), firstchar
+ xoffset
(m
) style(m) = 1
style(m) = 0
style(m) = 3
style(m) = 2
IF firstprint
(m
) = 1 THEN firstprint
(m
) = 0 endparameter$ = "true"
status$(maxmi) = "finished"
CASE IS = "redirect" 'used for going to another marker, menu or similar status$(maxmi) = "finished"
IF MID$(destination$
(m
), LEN(destination$
(m
)), 1) = ":" THEN 'if destination$ has : at the end, it will end the menu because it interprets it as going to another place status$(maxmi) = "finished"
endparameter$ = destination$(m)
IF defaultstyle
(m
) <> style
(m
) THEN style
(m
) = defaultstyle
(m
): firstprint
(m
) = 0 IF defaultstyle
(m
) <> style
(m
) THEN style
(m
) = defaultstyle
(m
): firstprint
(m
) = 0 checkm = 0
checkm = checkm + 1
IF overlaptrigger
(checkm
) = 1 AND checkm
< m
THEN overlaptrigger(checkm) = 0
firstprint(m) = 0
firstprint(m) = 1
LOCATE firstline
+ yoffset
(m
), firstchar
+ xoffset
(m
) 'horizontal
LINE (basex
(m
), (firstline
+ yoffset
(m
) - 1) * fontheight
+ (fontheight
/ 2))-(basex
(m
) + (maxx
/ 4), (firstline
+ yoffset
(m
) - 1) * fontheight
+ (fontheight
/ 2) + 1), _RGBA(r
(2), g
(2), b
(2), a
(2)), BF
'vertical
LINE (basex
(m
) + (value
(m
) / maxval
(m
) * (maxx
/ 4)), (firstline
+ yoffset
(m
) - 1) * fontheight
+ 1)-(basex
(m
) + 4 + (value
(m
) / maxval
(m
) * (maxx
/ 4)), (firstline
+ yoffset
(m
)) * fontheight
- 1), _RGBA(r
(2), g
(2), b
(2), a
(2)), BF
xvalue
= firstchar
+ xoffset
(m
) + LEN(text$
(m
)) + ((maxx
/ 4) / fontwidth
) + 2 LOCATE firstline
+ yoffset
(m
), xvalue
IF _MOUSEY > (firstline
+ yoffset
(m
) - 1) * fontheight
+ 1 AND _MOUSEY < (firstline
+ yoffset
(m
)) * fontheight
- 1 THEN value
(m
) = INT(value
(m
) / (maxx
/ 4) * 100) printslider:
'cleanup
LINE (basex
(m
), (firstline
+ yoffset
(m
) - 1) * fontheight
+ 1)-(endx
(m
), (firstline
+ yoffset
(m
)) * fontheight
- 1), _RGBA(r
(1), g
(1), b
(1), a
(1)), BF
'horizontal
LINE (basex
(m
), (firstline
+ yoffset
(m
) - 1) * fontheight
+ (fontheight
/ 2))-(endx
(m
), (firstline
+ yoffset
(m
) - 1) * fontheight
+ (fontheight
/ 2) + 1), _RGBA(r
(2), g
(2), b
(2), a
(2)), BF
'vertical
LINE (basex
(m
) + (value
(m
) / maxval
(m
) * (maxx
/ 4)), (firstline
+ yoffset
(m
) - 1) * fontheight
+ 1)-(basex
(m
) + 4 + (value
(m
) / maxval
(m
) * (maxx
/ 4)), (firstline
+ yoffset
(m
)) * fontheight
- 1), _RGBA(r
(2), g
(2), b
(2), a
(2)), BF
xvalue
= firstchar
+ xoffset
(m
) + LEN(text$
(m
)) + ((maxx
/ 4) / fontwidth
) + 2 LOCATE firstline
+ yoffset
(m
), xvalue
value(m) = minval(m)
value(m) = maxval(m)
CASE IS = "selector" 'simpler and in-line version of dropdown IF _MOUSEX > (firstchar
+ xoffset
(m
)) * fontwidth
+ (fontwidth
/ 2) AND _MOUSEX < (firstchar
+ xoffset
(m
) + LEN(text$
(m
)) + LEN(arraydata$
(m
, selected
(m
))) + 5) * fontwidth
+ (fontwidth
/ 2) THEN checkm = 0: dontgoactive = 0
checkm = checkm + 1
IF expanded
(checkm
) = 1 THEN dontgoactive
= 1 ELSE dontgoactive
= 0 IF dontgoactive
= 0 THEN activem
= m
'shows non-editable text
LOCATE firstline
+ yoffset
(m
), firstchar
+ xoffset
(m
)
'shows editable text
PRINT arraydata$
(m
, selected
(m
));
IF activem
= m
THEN 'only enables keys if dropdown menu is active expanded(m) = 0
overlaptrigger(m) = 1
expanded(m) = 1
selected(m) = selected(m) - 1
selected(m) = maxad(m)
IF selected
(m
) < maxad
(m
) THEN selected(m) = selected(m) + 1
selected(m) = 1
IF firstprint
(m
) = 0 THEN 'only prints menu once and sets variables, loads menu etc.. firstprint(m) = 1
ad = 0
ad = ad + 1
IF maxadlength
(m
) < LEN(arraydata$
(m
, ad
)) THEN maxadlength
(m
) = LEN(arraydata$
(m
, ad
)) endx
(m
) = (firstchar
+ xoffset
(m
) + LEN(text$
(m
)) + maxadlength
(m
) + 3) * fontwidth
+ (fontwidth
/ 2) + borderoffsetx
(m
) 'right end of dropdown box selected(m) = 1
reprint: 'triggered when a change occurs
'prints text in front of dropdown
LOCATE firstline
+ yoffset
(m
), firstchar
+ xoffset
(m
)
'activem = m
LINE (basex
(m
), (firstline
+ yoffset
(m
) - 1) * fontheight
- (fontheight
/ 3) + borderoffsety
(m
))-(endx
(m
), (firstline
+ yoffset
(m
)) * fontheight
+ (fontheight
/ 2) + borderoffsety
(m
)), _RGBA(r
(1), g
(1), b
(1), a
(1)), BF
LINE (basex
(m
), (firstline
+ yoffset
(m
) - 1) * fontheight
- (fontheight
/ 3) + borderoffsety
(m
))-(endx
(m
), (firstline
+ yoffset
(m
)) * fontheight
+ (fontheight
/ 2) + borderoffsety
(m
)), _RGBA(r
(2), g
(2), b
(2), a
(2)), B
LOCATE firstline
+ yoffset
(m
), firstchar
+ xoffset
(m
) + LEN(text$
(m
)) + 2 PRINT arraydata$
(m
, selected
(m
)) LINE (basex
(m
), (firstline
+ yoffset
(m
) - 1) * fontheight
- (fontheight
/ 3) + borderoffsety
(m
))-(endx
(m
), (firstline
+ yoffset
(m
) + (maxad
(m
) * 2) - 1) * fontheight
+ (fontheight
/ 2) + borderoffsety
(m
)), _RGBA(r
(1), g
(1), b
(1), a
(1)), BF
ad = 0
ad = ad + 1
LOCATE firstline
+ yoffset
(m
) + (ad
* 2) - 2, firstchar
+ xoffset
(m
) + LEN(text$
(m
)) + 2 LINE (basex
(m
), (firstline
+ yoffset
(m
) - 1) * fontheight
- (fontheight
/ 3) + borderoffsety
(m
))-(endx
(m
), (firstline
+ yoffset
(m
) + (maxad
(m
) * 2) - 1) * fontheight
+ (fontheight
/ 2) + borderoffsety
(m
)), _RGBA(r
(2), g
(2), b
(2), a
(2)), B
'variables for dropdown triangle (right side, you know?)
p1x
(m
) = (firstchar
+ xoffset
(m
) + LEN(text$
(m
)) + maxadlength
(m
) + 2) * fontwidth
p1y(m) = (firstline + yoffset(m) - 1) * fontheight + (fontheight / 3) + borderoffsety - 3
p2x(m) = p1x(m) + fontwidth
p2y(m) = p1y(m)
p3x(m) = p1x(m) + ((p2x(m) - p1x(m)) / 2)
p3y
(m
) = p1y
(m
) + SQR(((fontwidth
/ 2) * (fontwidth
/ 2)) + (fontwidth
* fontwidth
)) - (fontheight
/ 4)
'triangle
LINE (p1x
(m
), p1y
(m
))-(p2x
(m
), p2y
(m
)), _RGBA(r
(2), g
(2), b
(2), a
(2)) LINE (p1x
(m
), p1y
(m
))-(p3x
(m
), p3y
(m
)), _RGBA(r
(2), g
(2), b
(2), a
(2)) LINE (p2x
(m
), p2y
(m
))-(p3x
(m
), p3y
(m
)), _RGBA(r
(2), g
(2), b
(2), a
(2)) PAINT (p1x
(m
) + ((p2x
(m
) - p1x
(m
)) / 2), p1y
(m
) + ((p3y
(m
) - p1y
(m
)) / 2)), _RGBA(r
(2), g
(2), b
(2), a
(2)), _RGBA(r
(2), g
(2), b
(2), a
(2)) IF selline
> (firstline
+ yoffset
(m
) - 1) AND selline
< (firstline
+ yoffset
(m
) + (maxad
(m
) * 2) - 1) THEN mouseselected
= INT((selline
- (firstline
+ yoffset
(m
) - 1)) / 2) + 1 IF mouseselected
<> selected
(m
) AND expanded
(m
) = 1 THEN selected(m) = mouseselected
mouseclicked = 1
endy(m) = (firstline + yoffset(m) + maxad(m)) * fontheight + (fontheight / 3) + borderoffsety(m)
expanded(m) = 0
LINE (basex
(m
), (firstline
+ yoffset
(m
) - 1) * fontheight
- (fontheight
/ 3) + borderoffsety
(m
))-(endx
(m
), (firstline
+ yoffset
(m
) + (maxad
(m
) * 2) - 1) * fontheight
+ (fontheight
/ 2) + borderoffsety
(m
)), _RGBA(r
(1), g
(1), b
(1), a
(1)), BF
overlaptrigger(m) = 1
endy(m) = (firstline + yoffset(m)) * fontheight + (fontheight / 3) + borderoffsety(m)
expanded(m) = 1
mouseclicked = 0
checkm = 0
checkm = checkm + 1
IF overlaptrigger
(checkm
) = 1 AND checkm
< m
THEN overlaptrigger(checkm) = 0
firstprint(m) = 0
selectedall = 0
firstprint(m) = 1
c(m) = c(m) + 1
char$
(m
, c
(m
)) = MID$(fill$
(m
), c
(m
), 1) cbf(m) = c(m)
LOCATE firstline
+ yoffset
(m
), firstchar
+ xoffset
(m
) printback:
IF TIMER MOD 2 = 0 THEN LINE ((firstchar
+ xoffset
(m
) + LEN(text$
(m
)) + editpos
(m
)) * fontwidth
+ (fontwidth
/ 2), (firstline
+ yoffset
(m
) - 1) * fontheight
+ 1)-((firstchar
+ xoffset
(m
) + LEN(text$
(m
)) + editpos
(m
)) * fontwidth
+ (fontwidth
/ 2) + 2, (firstline
+ yoffset
(m
)) * fontheight
- 1), _RGBA(r
(1), g
(1), b
(1), a
(1)), BF
backspace(m) = 0
LOCATE firstline
+ yoffset
(m
), firstchar
+ xoffset
(m
) cbf(m) = 0
trigger(m) = 0
cbf(m) = cbf(m) + 1
char$(m, cbf(m)) = char$(m, cbf(m) + 1)
char$(m, cbf(m)) = char$(m, cbf(m) + 1)
trigger(m) = 1
char$(m, c(m)) = ""
c(m) = c(m) - 1
IF TIMER MOD 2 = 0 THEN LINE ((firstchar
+ xoffset
(m
) + LEN(text$
(m
)) + editpos
(m
)) * fontwidth
+ (fontwidth
/ 2), (firstline
+ yoffset
(m
) - 1) * fontheight
+ 1)-((firstchar
+ xoffset
(m
) + LEN(text$
(m
)) + editpos
(m
)) * fontwidth
+ (fontwidth
/ 2) + 2, (firstline
+ yoffset
(m
)) * fontheight
- 1), _RGBA(r
(1), g
(1), b
(1), a
(1)), BF
backspace(m) = 0
LOCATE firstline
+ yoffset
(m
), firstchar
+ xoffset
(m
) selectedall = 0
cbf(m) = 0
cbf(m) = cbf(m) + 1
char$(m, cbf(m)) = "" ' clears text array
cbf(m) = c(m)
c(m) = 0
c(m) = c(m) + 1
char$
(m
, c
(m
)) = MID$(fill$
(m
), c
(m
), 1) cbf(m) = c(m)
LOCATE firstline
+ yoffset
(m
), firstchar
+ xoffset
(m
) cbf(m) = 0
cbf(m) = cbf(m) + 1
Taste$ = ""
IF activem
= m
THEN 'only checks keys if input is active loopback:
ac = 0
ac = ac + 1
c(m) = c(m) + 1
char$(m, c(m)) = Taste$
editpos(m) = c(m)
'prints the new character if g has changed
IF cbf
(m
) <> c
(m
) OR selectedall
<> colorbf
THEN IF cbf
(m
) < c
(m
) OR selectedall
<> colorbf
THEN LOCATE firstline
+ yoffset
(m
), firstchar
+ xoffset
(m
) cbf(m) = 0
cbf(m) = cbf(m) + 1
cbf(m) = c(m)
'blinking line after text
LINE ((firstchar
+ xoffset
(m
) + LEN(text$
(m
)) + editpos
(m
)) * fontwidth
+ (fontwidth
/ 2), (firstline
+ yoffset
(m
) - 1) * fontheight
+ 1)-((firstchar
+ xoffset
(m
) + LEN(text$
(m
)) + editpos
(m
)) * fontwidth
+ (fontwidth
/ 2) + 2, (firstline
+ yoffset
(m
)) * fontheight
- 1), _RGBA(r
(2), g
(2), b
(2), a
(2)), BF
LINE ((firstchar
+ xoffset
(m
) + LEN(text$
(m
)) + editpos
(m
)) * fontwidth
+ (fontwidth
/ 2), (firstline
+ yoffset
(m
) - 1) * fontheight
+ 1)-((firstchar
+ xoffset
(m
) + LEN(text$
(m
)) + editpos
(m
)) * fontwidth
+ (fontwidth
/ 2) + 2, (firstline
+ yoffset
(m
)) * fontheight
- 1), _RGBA(r
(1), g
(1), b
(1), a
(1)), BF
'key cases
backspace(m) = 1
p = 0
p = p + 1
p = 0
p = p + 1
c(m) = c(m) + 1
editpos(m) = editpos(m) - 1
editpos(m) = editpos(m) + 1
status$(activem) = "finished"
activem = activem + 1
colorbf = selectedall
selectedall = 0
selectedall = 1
firstprint(m) = 1
IF _MOUSEX > (firstchar
+ xoffset
(m
)) * fontwidth
+ (fontwidth
/ 2) AND _MOUSEX < (firstchar
+ xoffset
(m
) + LEN(text$
(m
)) + c
(m
)) * fontwidth
+ (fontwidth
/ 2) THEN IF _MOUSEY > (firstline
+ yoffset
(m
) - 1) * fontheight
+ 1 AND _MOUSEY < (firstline
+ yoffset
(m
)) * fontheight
- 1 THEN checkm = 0: dontgoactive = 0
checkm = checkm + 1
IF expanded
(checkm
) = 1 THEN dontgoactive
= 1 ELSE dontgoactive
= 0 IF dontgoactive
= 0 THEN activem
= m
'deletes blinking line after text
editpos(m) = c(m)
IF TIMER MOD 2 = 0 THEN LINE ((firstchar
+ xoffset
(m
) + LEN(text$
(m
)) + editpos
(m
)) * fontwidth
+ (fontwidth
/ 2), (firstline
+ yoffset
(m
) - 1) * fontheight
+ 1)-((firstchar
+ xoffset
(m
) + LEN(text$
(m
)) + editpos
(m
)) * fontwidth
+ (fontwidth
/ 2) + 2, (firstline
+ yoffset
(m
)) * fontheight
- 1), _RGBA(r
(1), g
(1), b
(1), a
(1)), BF
IF Taste$
= CHR$(27) THEN endparameter$
= "aborted" m = 0
m = m + 1
maxg(m) = c(m)
c(m) = 0
c(m) = c(m) + 1
UserInput$(m) = UserInput$(m) + char$(m, c(m))
c(m) = 0
f = 0
f = f + 1
char$(m, f) = ""
UserInput$(m) = ""