Qbasicnews.com
Scripting language. - Printable Version

+- Qbasicnews.com (http://qbasicnews.com/newforum)
+-- Forum: QBasic (http://qbasicnews.com/newforum/forum-4.html)
+--- Forum: QB Projects (http://qbasicnews.com/newforum/forum-12.html)
+--- Thread: Scripting language. (/thread-951.html)



Scripting language. - TheBigBasicQ - 05-25-2003

Hi, This post is not meant for QB newbies. You can go ahead and read it. But I doubt many will understand.
This is my code for a calculator in my own scripting language for my Fake OS. Is this too big? Is it difficult to understand? Please let me know about any comments/suggestions.
I indented my program but it seems that it is removed while posting.

APP_ID = CALC
APP_TYPE = APPLICATION

PROC PRIVATE SUB_MAIN()
* Define the calculator window.
DEF_WIN "CALCWIN1", "Calculator", 250, 100, 150, 170, MOVABLE
* Define Objects
DEF_OBJ BTN , "B01", "1", 10, 60, 22, 22, ENABLED
DEF_OBJ BTN , "B02", "2", 37, 60, 22, 22, ENABLED
DEF_OBJ BTN , "B03", "3", 64, 60, 22, 22, ENABLED
DEF_OBJ BTN , "B04", "4", 10, 87, 22, 22, ENABLED
DEF_OBJ BTN , "B05", "5", 37, 87, 22, 22, ENABLED
DEF_OBJ BTN , "B06", "6", 64, 87, 22, 22, ENABLED
DEF_OBJ BTN , "B07", "7", 10, 114, 22, 22, ENABLED
DEF_OBJ BTN , "B08", "8", 37, 114, 22, 22, ENABLED
DEF_OBJ BTN , "B09", "9", 64, 114, 22, 22, ENABLED
DEF_OBJ BTN , "B10", "0", 10, 141, 50, 22, ENABLED
DEF_OBJ BTN , "BDEC11", ".", 64, 141, 22, 22, ENABLED
DEF_OBJ BTN , "PLUS12", "+", 91, 60, 22, 22, ENABLED
DEF_OBJ BTN , "MINUS13", "-", 91, 87, 22, 22, ENABLED
DEF_OBJ BTN , "DIV14", "/", 91, 114, 22, 22, ENABLED
DEF_OBJ BTN , "MUL15", "*", 91, 141, 22, 22, ENABLED
DEF_OBJ BTN , "EQL16", "=", 118, 141, 22, 22, ENABLED
DEF_OBJ BTN , "CLR17", "AC", 118, 60, 22, 22, ENABLED
DEF_OBJ BTN , "PM18", "+/-", 118, 87, 22, 22, ENABLED
DEF_OBJ BTN , "SQRT19", "RT", 118, 114, 22, 22, ENABLED

* Declare some variables
STORE VAR1 , ""
STORE VAR2 , ""
STORE OP3 , ""
STORE FLAG4, 0
STORE ANS5 , 0
STORE LEN6 , 0
STORE MAXLEN7, 8

* Load the window
OPEN_WIN "WIN1"
END_PROC SUB_MAIN

* Procedure that is executed when the window is loaded
PROC PRIVATE CALCWIN1 LOAD ()
PUT_OBJ CALCWIN1, B01
PUT_OBJ CALCWIN1, B02
PUT_OBJ CALCWIN1, B03
PUT_OBJ CALCWIN1, B04
PUT_OBJ CALCWIN1, B05
PUT_OBJ CALCWIN1, B06
PUT_OBJ CALCWIN1, B07
PUT_OBJ CALCWIN1, B08
PUT_OBJ CALCWIN1, B09
PUT_OBJ CALCWIN1, B10
PUT_OBJ CALCWIN1, BDEC11
PUT_OBJ CALCWIN1, PLUS12
PUT_OBJ CALCWIN1, MINUS13
PUT_OBJ CALCWIN1, DIV14
PUT_OBJ CALCWIN1, MUL15
PUT_OBJ CALCWIN1, EQL16
PUT_OBJ CALCWIN1, CLR17
PUT_OBJ CALCWIN1, PM18
PUT_OBJ CALCWIN1, SQRT19

BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, "0", SOLID, LTRIM
LEN6++
END_PROC CALCWIN1 LOAD

* Procedures for Button Click events
PROC PRIVATE B01 CLICK ()
IF LEN6 > MAXLEN7 THEN GOELSE 3
BREAK 12
ENDIF
LEN6++
IF FLAG4 = 0 THEN GOELSE 5
APPEND_STR_END VAR1, "1"
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL VAR1, SOLID, LTRIM
BREAK 6
ELSE
APPEND_STR_END VAR2, "1"
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL VAR2, SOLID, LTRIM
ENDIF
END_PROC B01 CLICK

PROC PRIVATE B02 CLICK ()
IF LEN6 > MAXLEN7 THEN GOELSE 3
BREAK 12
ENDIF
LEN6++
IF FLAG4 = 0 THEN GOELSE 5
APPEND_STR_END VAR1, "2"
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL VAR1, SOLID, LTRIM
BREAK 6
ELSE
APPEND_STR_END VAR2, "2"
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL VAR2, SOLID, LTRIM
ENDIF
END_PROC B02 CLICK

PROC PRIVATE B03 CLICK ()
IF LEN6 > MAXLEN7 THEN GOELSE 3
BREAK 12
ENDIF
LEN6++
IF FLAG4 = 0 THEN GOELSE 5
APPEND_STR_END VAR1, "3"
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL VAR1, SOLID, LTRIM
BREAK 6
ELSE
APPEND_STR_END VAR2, "3"
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL VAR2, SOLID, LTRIM
ENDIF
END_PROC B03 CLICK

PROC PRIVATE B04 CLICK ()
IF LEN6 > MAXLEN7 THEN GOELSE 3
BREAK 12
ENDIF
LEN6++
IF FLAG4 = 0 THEN GOELSE 5
APPEND_STR_END VAR1, "4"
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL VAR1, SOLID, LTRIM
BREAK 6
ELSE
APPEND_STR_END VAR2, "4"
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL VAR2, SOLID, LTRIM
ENDIF
END_PROC B04 CLICK

PROC PRIVATE B05 CLICK ()
IF LEN6 > MAXLEN7 THEN GOELSE 3
BREAK 12
ENDIF
LEN6++
IF FLAG4 = 0 THEN GOELSE 5
APPEND_STR_END VAR1, "5"
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL VAR1, SOLID, LTRIM
BREAK 6
ELSE
APPEND_STR_END VAR2, "5"
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL VAR2, SOLID, LTRIM
ENDIF
END_PROC B05 CLICK

PROC PRIVATE B06 CLICK ()
IF LEN6 > MAXLEN7 THEN GOELSE 3
BREAK 12
ENDIF
LEN6++
IF FLAG4 = 0 THEN GOELSE 5
APPEND_STR_END VAR1, "6"
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL VAR1, SOLID, LTRIM
BREAK 6
ELSE
APPEND_STR_END VAR2, "6"
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL VAR2, SOLID, LTRIM
ENDIF
END_PROC B06 CLICK

PROC PRIVATE B07 CLICK ()
IF LEN6 > MAXLEN7 THEN GOELSE 3
BREAK 12
ENDIF
LEN6++
IF FLAG4 = 0 THEN GOELSE 5
APPEND_STR_END VAR1, "7"
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL VAR1, SOLID, LTRIM
BREAK 6
ELSE
APPEND_STR_END VAR2, "7"
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL VAR2, SOLID, LTRIM
ENDIF
END_PROC B07 CLICK

PROC PRIVATE B08 CLICK ()
IF LEN6 > MAXLEN7 THEN GOELSE 3
BREAK 12
ENDIF
LEN6++
IF FLAG4 = 0 THEN GOELSE 5
APPEND_STR_END VAR1, "8"
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL VAR1, SOLID, LTRIM
BREAK 6
ELSE
APPEND_STR_END VAR2, "8"
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL VAR2, SOLID, LTRIM
ENDIF
END_PROC B08 CLICK

PROC PRIVATE B09 CLICK ()
IF LEN6 > MAXLEN7 THEN GOELSE 3
BREAK 12
ENDIF
LEN6++
IF FLAG4 = 0 THEN GOELSE 5
APPEND_STR_END VAR1, "9"
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL VAR1, SOLID, LTRIM
BREAK 6
ELSE
APPEND_STR_END VAR2, "9"
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL VAR2, SOLID, LTRIM
ENDIF
END_PROC B09 CLICK

PROC PRIVATE B10 CLICK ()
IF LEN6 > MAXLEN7 THEN GOELSE 3
BREAK 12
ENDIF
LEN6++
IF FLAG4 = 0 THEN GOELSE 5
APPEND_STR_END VAR1, "0"
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL VAR1, SOLID, LTRIM
BREAK 6
ELSE
APPEND_STR_END VAR2, "0"
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL VAR2, SOLID, LTRIM
ENDIF
END_PROC B10 CLICK

PROC PRIVATE BDEC11 CLICK ()
IF LEN6 > MAXLEN7 THEN GOELSE 3
BREAK 12
ENDIF
LEN6++
IF FLAG4 = 0 THEN GOELSE 5
APPEND_STR_END VAR1, "."
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL VAR1, SOLID, LTRIM
BREAK 6
ELSE
APPEND_STR_END VAR2, "."
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL VAR2, SOLID, LTRIM
ENDIF
END_PROC BDEC11 CLICK

PROC PRIVATE PLUS12 CLICK ()
STORE LEN6, 0
IF FLAG4 = 0 THEN GOELSE 4
FLAG4++
STORE OP3, "+"
BREAK 7
ELSE
CALL DO_CALCULATIONS
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL ANS5, SOLID, LTRIM
STORE OP3, "+"
ENDIF
END_PROC PLUS12 CLICK

PROC PRIVATE MINUS13 CLICK ()
STORE LEN6, 0
IF FLAG4 = 0 THEN GOELSE 4
FLAG4++
STORE OP3, "-"
BREAK 7
ELSE
CALL DO_CALCULATIONS
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL ANS5, SOLID, LTRIM
STORE OP3, "-"
ENDIF
END_PROC MINUS13 CLICK

PROC PRIVATE DIV14 CLICK ()
STORE LEN6, 0
IF FLAG4 = 0 THEN GOELSE 4
FLAG4++
STORE OP3, "/"
BREAK 7
ELSE
CALL DO_CALCULATIONS
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL ANS5, SOLID, LTRIM
STORE OP3, "/"
ENDIF
END_PROC DIV14 CLICK

PROC PRIVATE MUL15 CLICK ()
IF OP3 = "*" THEN GOELSE 11
FLAG4++
VAR2 = VAR1
IF VAR1 > 11111111 GOELSE 3
BREAK 19
ENDIF
CALL DO_CALCULATIONS
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL ANS5, SOLID, LTRIM
STORE OP3, "="
BREAK 14
ENDIF
IF FLAG4 = 0 THEN GOELSE 5
FLAG4++
STORE OP3, "*"
STORE LEN6, 0
BREAK 8
ELSE
CALL DO_CALCULATIONS
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL ANS5, SOLID, LTRIM
STORE OP3, "*"
STORE LEN6, 0
ENDIF
END_PROC MUL15 CLICK

PROC PRIVATE CLR17 CLICK ()
CALL DO_CALCULATIONS
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, "0", SOLID, LTRIM
STORE OP3, ""
STORE VAR1, ""
STORE VAR2, ""
STORE ANS5, 0
STORE FLAG4, 0
STORE LEN6, 1
END_PROC CLR17 CLICK

PROC PRIVATE EQL16 CLICK ()
STORE LEN6, 0
CALL DO_CALCULATIONS
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
IF ANS5 = 0 THEN GOELSE 3
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, "0", SOLID
BREAK 3
ELSE
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL ANS5, SOLID, LTRIM
ENDIF

STORE OP3, "="
END_PROC EQL15 CLICK

PROC PRIVATE PM18 CLICK ()
IF FLAG4 = 0 THEN GOELSE 5
NEG VAR1
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL VAR1, SOLID, LTRIM
ENDIF
END_PROC PM18 CLICK

PROC PRIVATE SQRT19 CLICK ()
IF FLAG4 = 0 THEN GOELSE 5
VAR1 = VAR1 ^ 0.5
BOX CALCWIN1, 5, 30, 140, 20, 224, 232, 232, 2, 0, 0, 0
WIN_PRN "CALCWIN1","COURIER.FNT", 10, 37, 0, 0, 0, VARVAL VAR1, SOLID, LTRIM
ENDIF
END_PROC SQRT19 CLICK

* User defined procedure to calculate the result
PROC DO_CALCULATIONS
IF OP3 = "+" THEN GOELSE 5
ANS5 = VAR1 + VAR2
VAR1 = ANS5
STORE VAR2, ""
BREAK 2
ENDIF
IF OP3 = "-" THEN GOELSE 5
ANS5 = VAR1 - VAR2
VAR1 = ANS5
STORE VAR2, ""
BREAK 2
ENDIF
IF OP3 = "*" THEN GOELSE 5
ANS5 = VAR1 * VAR2
VAR1 = ANS5
STORE VAR2, ""
BREAK 2
ENDIF
IF OP3 = "/" THEN GOELSE 5
ANS5 = VAR1 / VAR2
VAR1 = ANS5
STORE VAR2, ""
BREAK 2
ENDIF
IF OP3 = "=" THEN GOELSE 3
STORE VAR2, ""
ENDIF
IF ANS5 > 9999999999 THEN GOELSE 2
LEN6 = MAXLEN7 + 1
ENDIF
END_PROC


Scripting language. - Hard Rock - 05-25-2003

PSsssst, post code in


to keep indentation.


Scripting language. - Agamemnus - 05-26-2003

What you did is nice, but I'd make it more QB-ish. Smile


Well... - TheBigBasicQ - 05-26-2003

I like more of C++ and my own conjuering than using QB. Yet it is similar to QB.