The mouse clicks cause multiple numbers to pop up. You can regulate that by waiting for a release. I added one line of code to the mouse function to achieve that. After that addition (excuse the pun) it seemed to work just fine.
As far as multiple operations, you'd need to store those in memory and then perform the operations after the = sign is pressed. I think a better way would be to have it automatically use the equals sign after the next operation is entered.
Code with mouse adjustment...
makecalculator
a$ = calculate$(a$)
a$ = a$ + " + "
a$ = a$ + " - "
a$ = a$ + " * "
a$ = a$ + " / "
a$ = a$ + k$
IF mouseclick
(50, 100, 100, 150) THEN a$
= a$
+ "1" IF mouseclick
(150, 100, 200, 150) THEN a$
= a$
+ "2" IF mouseclick
(250, 100, 300, 150) THEN a$
= a$
+ "3" IF mouseclick
(350, 100, 400, 150) THEN a$
= a$
+ " + "
IF mouseclick
(50, 200, 100, 250) THEN a$
= a$
+ "4" IF mouseclick
(150, 200, 200, 250) THEN a$
= a$
+ "5" IF mouseclick
(250, 200, 300, 250) THEN a$
= a$
+ "6" IF mouseclick
(350, 200, 400, 250) THEN a$
= a$
+ " - "
IF mouseclick
(50, 300, 100, 350) THEN a$
= a$
+ "7" IF mouseclick
(150, 300, 200, 350) THEN a$
= a$
+ "8" IF mouseclick
(250, 300, 300, 350) THEN a$
= a$
+ "9" IF mouseclick
(350, 300, 400, 350) THEN a$
= a$
+ " * "
IF mouseclick
(50, 400, 100, 450) THEN a$
= a$
+ "." IF mouseclick
(150, 400, 200, 450) THEN a$
= a$
+ "0" IF mouseclick
(250, 400, 300, 450) THEN a$
= calculate$
(a$
) IF mouseclick
(350, 400, 400, 450) THEN a$
= a$
+ " / "
LINE (0, 0)-(450, 500), 2, B
LINE (50, 25)-(400, 75), 2, B
'Output Screen
LINE (50, 100)-(100, 150), 2, B
LINE (150, 100)-(200, 150), 2, B
LINE (250, 100)-(300, 150), 2, B
LINE (350, 100)-(400, 150), 2, B
LINE (50, 200)-(100, 250), 2, B
LINE (150, 200)-(200, 250), 2, B
LINE (250, 200)-(300, 250), 2, B
LINE (350, 200)-(400, 250), 2, B
LINE (50, 300)-(100, 350), 2, B
LINE (150, 300)-(200, 350), 2, B
LINE (250, 300)-(300, 350), 2, B
LINE (350, 300)-(400, 350), 2, B
LINE (50, 400)-(100, 450), 2, B
LINE (150, 400)-(200, 450), 2, B
LINE (250, 400)-(300, 450), 2, B
LINE (350, 400)-(400, 450), 2, B
mouseclick = -1
i = 0
b$ = ""
c$ = ""
d$ = ""
i = i + 1
c$ = c$ + b$
b$ = ""
i = i + 1
op$ = b$
i = i + 1
i = i + 1
d$ = d$ + b$
I suppose if you wanted to try a memory string, it might go something like this...
s$ = "123+456-55*3/6"
a$ = "": x = 0
a$ = ""
o$ = t$: ' PRINT o$: SLEEP
a$ = a$ + t$
PRINT x
, "=", (123 + 456 - 55) * 3 / 6
Before you get too excited, remember that computers are binary and math is base 10. That means that you will get erroneous results from tie tie to time with calculations. I used to work with just strings for ledger calculations to avoid those types of problems, and I wish I could recall a simple rounding trick that corrected for much of the math errors thrown by the binary system but its been too many years. I'm sure there will be other response here from folks who have worked with calculator programs. As for what you have so far, very nice! Good luck with it.
Pete