Log In  

In order to experiment with the Picotron v10 Gui library, I made this simple 4 op (more like 6 op) calculator! Just copy and paste the following code into a blank Picotron project and press ctrl+r!

gui = Gui()
set_window(79,73)
buttons = {}
state = 0
a = 0.0
b = 0.0
op = nil
buffer = ""

function _init()
    for i=1,9,3 do
        for j=0,2 do
            add(buttons, gui:attach_button({label=tostr(i+j),x=j*16,y=(abs(i-9)/3)*14+8,bgcol=0x0d01,fgcol=0x070d,tap=function()add_buf(i+j)end}))
        end
    end
    add(buttons, gui:attach_button({label="0",x=0,y=59,bgcol=0x0d01,fgcol=0x070d,tap=function()add_buf(0)end}))
    add(buttons, gui:attach_button({label=".",x=16,y=59,bgcol=0x0d01,fgcol=0x070d,tap=function()add_buf(".")end}))
    add(buttons, gui:attach_button({label="=",x=32,y=59,bgcol=0x0902,fgcol=0x0209,tap=function()eval()end}))
    add(buttons, gui:attach_button({label="+",x=48,y=17,bgcol=0x0b03,fgcol=0x030b,tap=function()set_op("+")end}))
    add(buttons, gui:attach_button({label="-",x=48,y=31,bgcol=0x0b03,fgcol=0x030b,tap=function()set_op("-")end}))
    add(buttons, gui:attach_button({label="*",x=48,y=45,bgcol=0x0b03,fgcol=0x030b,tap=function()set_op("*")end}))
    add(buttons, gui:attach_button({label="/",x=48,y=59,bgcol=0x0b03,fgcol=0x030b,tap=function()set_op("/")end}))
    add(buttons, gui:attach_button({label="c",x=64,y=17,bgcol=0x0902,fgcol=0x0209,tap=function()clear()end}))
    add(buttons, gui:attach_button({label="^",x=64,y=31,bgcol=0x0b03,fgcol=0x030b,tap=function()set_op("^")end}))
    add(buttons, gui:attach_button({label="%",x=64,y=45,bgcol=0x0b03,fgcol=0x030b,tap=function()set_op("%")end}))
    add(buttons, gui:attach_button({label="_",x=64,y=59,bgcol=0x0d01,fgcol=0x070d,tap=function()inv()end}))
end

function _draw()
    gui:update_all()
    cls(n)
    if state==-1 then
        ?"err",1,4,7
    else
        ?buffer,1,4,7
    end
    gui:draw_all()
end

function inv()
    buffer = tostr(buffer)
    if sub(buffer,1,1) != "-" then
        buffer = "-"..buffer
    else
        buffer = sub(buffer, 2)
    end
end

function add_buf(n)
    if(state==-1)state=0
    buffer = buffer..n
    if(#buffer>15)buffer=sub(buffer,1,15)
end

function set_op(n)
    if(state==-1)state=0
    if state == 0 then
        a = buffer
        buffer = ""
        op = n
        state = 1
    else
        state = -1
    end
end

function eval()
    if state == 1 then
        b = buffer
        buffer = ""
        if op == "+" then
            buffer = a + b
        elseif op == "-" then
            buffer = a - b
        elseif op == "*" then
            buffer = a * b
        elseif op == "/" then
            buffer = a / b
        elseif op == "^" then
            buffer = a ^ b
        elseif op == "%" then
            buffer = a % b
        end
        state = 0
    end
end

function clear()
    if buffer == "" then
        op = nil
        a = 0.0
        b = 0.0
        state = 0
    else
        buffer = ""
    end
end
P#130565 2023-06-05 19:21 ( Edited 2023-06-05 19:29)


[Please log in to post a comment]