Bingo Caller 2011

General Computer Utilities
TyCamden
Posts: 42
Joined: Tue Apr 28, 2009 6:20 am

Bingo Caller 2011

Post by TyCamden »

This is the 2011 version of the program, which is ENHANCED for readability...

My friend will be a Bingo game caller at a charity event. They already have the ball-cage, balls, and cards. But - they wanted to be able to:

1. Have a computer program running in which they could MANUALLY track which bingo balls were drawn in a game, and

2. They have a projection system that will display the computer screen so that everyone in the room can see it, so the program should also show the recent numbers called in a very obvious fashion.

So here is that program, now for ALL to use, free of charge (If they have Just Basic).

Code: Select all

' Bingo Caller 2011 v2

    NumberOfBalls = 75
    DIM Order(NumberOfBalls)
    DIM BallStatus(NumberOfBalls)
    FontSz = 25

    gosub [setVariables]

    gosub [setGraphics]

    NOMAINWIN
    gosub [createMainWindow]
    wait

[quit]
    confirm "ARE YOU SURE YOU WANT TO QUIT?"; answer$
    answer$ = LEFT$(UPPER$(answer$),1)
    if answer$ = "Y" then
        CLOSE #MAIN
        END
    else
        WAIT
    end if

[quitReview]
    CLOSE #REVIEW
    wait

[reset]
    confirm "Are you sure you want to Reset the board?"; answer$
    answer$ = LEFT$(UPPER$(answer$),1)
    if answer$ = "Y" then
        gosub [setVariables]
        gosub [resetButtonsToNormal]
        gosub [changeTheDisplay]
        wait
    else
        WAIT
    end if

[review]

    gosub [createReviewWindow]
    wait

[undoCall]
    gosub [reverseTheNumbers]
    gosub [changeTheDisplay]
    wait

[B]
    wait

[I]
    wait

[N]
    wait

[G]
    wait

[O]
    wait

[1]
    currentHit = 1
    gosub [numberAction]
    wait

[2]
    currentHit = 2
    gosub [numberAction]
    wait

[3]
    currentHit = 3
    gosub [numberAction]
    wait

[4]
    currentHit = 4
    gosub [numberAction]
    wait

[5]
    currentHit = 5
    gosub [numberAction]
    wait

[6]
    currentHit = 6
    gosub [numberAction]
    wait

[7]
    currentHit = 7
    gosub [numberAction]
    wait

[8]
    currentHit = 8
    gosub [numberAction]
    wait

[9]
    currentHit = 9
    gosub [numberAction]
    wait

[10]
    currentHit = 10
    gosub [numberAction]
    wait

[11]
    currentHit = 11
    gosub [numberAction]
    wait

[12]
    currentHit = 12
    gosub [numberAction]
    wait

[13]
    currentHit = 13
    gosub [numberAction]
    wait

[14]
    currentHit = 14
    gosub [numberAction]
    wait

[15]
    currentHit = 15
    gosub [numberAction]
    wait

[16]
    currentHit = 16
    gosub [numberAction]
    wait

[17]
    currentHit = 17
    gosub [numberAction]
    wait

[18]
    currentHit = 18
    gosub [numberAction]
    wait

[19]
    currentHit = 19
    gosub [numberAction]
    wait

[20]
    currentHit = 20
    gosub [numberAction]
    wait

[21]
    currentHit = 21
    gosub [numberAction]
    wait

[22]
    currentHit = 22
    gosub [numberAction]
    wait

[23]
    currentHit = 23
    gosub [numberAction]
    wait

[24]
    currentHit = 24
    gosub [numberAction]
    wait

[25]
    currentHit = 25
    gosub [numberAction]
    wait

[26]
    currentHit = 26
    gosub [numberAction]
    wait

[27]
    currentHit = 27
    gosub [numberAction]
    wait

[28]
    currentHit = 28
    gosub [numberAction]
    wait

[29]
    currentHit = 29
    gosub [numberAction]
    wait

[30]
    currentHit = 30
    gosub [numberAction]
    wait

[31]
    currentHit = 31
    gosub [numberAction]
    wait

[32]
    currentHit = 32
    gosub [numberAction]
    wait

[33]
    currentHit = 33
    gosub [numberAction]
    wait

[34]
    currentHit = 34
    gosub [numberAction]
    wait

[35]
    currentHit = 35
    gosub [numberAction]
    wait

[36]
    currentHit = 36
    gosub [numberAction]
    wait

[37]
    currentHit = 37
    gosub [numberAction]
    wait

[38]
    currentHit = 38
    gosub [numberAction]
    wait

[39]
    currentHit = 39
    gosub [numberAction]
    wait

[40]
    currentHit = 40
    gosub [numberAction]
    wait

[41]
    currentHit = 41
    gosub [numberAction]
    wait

[42]
    currentHit = 42
    gosub [numberAction]
    wait

[43]
    currentHit = 43
    gosub [numberAction]
    wait

[44]
    currentHit = 44
    gosub [numberAction]
    wait

[45]
    currentHit = 45
    gosub [numberAction]
    wait

[46]
    currentHit = 46
    gosub [numberAction]
    wait

[47]
    currentHit = 47
    gosub [numberAction]
    wait

[48]
    currentHit = 48
    gosub [numberAction]
    wait

[49]
    currentHit = 49
    gosub [numberAction]
    wait

[50]
    currentHit = 50
    gosub [numberAction]
    wait

[51]
    currentHit = 51
    gosub [numberAction]
    wait

[52]
    currentHit = 52
    gosub [numberAction]
    wait

[53]
    currentHit = 53
    gosub [numberAction]
    wait

[54]
    currentHit = 54
    gosub [numberAction]
    wait

[55]
    currentHit = 55
    gosub [numberAction]
    wait

[56]
    currentHit = 56
    gosub [numberAction]
    wait

[57]
    currentHit = 57
    gosub [numberAction]
    wait

[58]
    currentHit = 58
    gosub [numberAction]
    wait

[59]
    currentHit = 59
    gosub [numberAction]
    wait

[60]
    currentHit = 60
    gosub [numberAction]
    wait

[61]
    currentHit = 61
    gosub [numberAction]
    wait

[62]
    currentHit = 62
    gosub [numberAction]
    wait

[63]
    currentHit = 63
    gosub [numberAction]
    wait

[64]
    currentHit = 64
    gosub [numberAction]
    wait

[65]
    currentHit = 66
    gosub [numberAction]
    wait

[66]
    currentHit = 66
    gosub [numberAction]
    wait

[67]
    currentHit = 67
    gosub [numberAction]
    wait

[68]
    currentHit = 68
    gosub [numberAction]
    wait

[69]
    currentHit = 69
    gosub [numberAction]
    wait

[70]
    currentHit = 70
    gosub [numberAction]
    wait

[71]
    currentHit = 71
    gosub [numberAction]
    wait

[72]
    currentHit = 72
    gosub [numberAction]
    wait

[73]
    currentHit = 73
    gosub [numberAction]
    wait

[74]
    currentHit = 74
    gosub [numberAction]
    wait

[75]
    currentHit = 75
    gosub [numberAction]
    wait

' SUBROUTINES ........................................................................................

[setVariables]
    for x = 1 to NumberOfBalls
        Order(x) = 0
        BallStatus(x) = 0
    next x
    BallsCalled = 0
    CurrentNumberCalled = 0
    PreviousNumberCalled = 0
    TwoAgoNumberCalled = 0
return

[setGraphics]
    open "gr" for graphics as #main
        for x = 1 to 75
            #main, "down ; fill yellow ; backcolor yellow"
            temp$ = "place 15 25 ;\";str$(x)
            #main temp$
            #main "getbmp bmp 0 0 50 35"
            temp$ = "button";x;".bmp"
            bmpsave "bmp",temp$
        next x
    close #main

    open "gr" for graphics as #main
        for x = 1 to 75
            #main, "down ; fill lightgray ; backcolor lightgray"
            temp$ = "place 15 25 ;\";str$(x)
            #main temp$
            #main "getbmp bmp 0 0 50 35"
            temp$ = "button";x;"off.bmp"
            bmpsave "bmp",temp$
        next x
    close #main

return

[numberAction]
    if BallStatus(currentHit) = 0 then
        ' number not clicked yet
        BallStatus(currentHit) = 1
        temp$ = "#MAIN." + str$(currentHit)
        temp2$ = "bitmap b" + str$(currentHit) + "off"
        print #temp$, temp2$
        TEMPNBR = currentHit
        gosub [moveTheNumbers]
        gosub [changeTheDisplay]
    else
        ' number clicked already
    end if
return

[moveTheNumbers]
    BallsCalled = BallsCalled + 1
    Order(BallsCalled) = TEMPNBR
    TwoAgoNumberCalled = PreviousNumberCalled
    PreviousNumberCalled = CurrentNumberCalled
    CurrentNumberCalled = TEMPNBR
return

[changeTheDisplay]

    if BallsCalled = 0 then
        print #MAIN.currentCall, "down; fill black"
        print #MAIN.currentCall, "color yellow; backcolor black"
        print #MAIN.currentCall, "font courier_new ";FontSz+55;" bold"
        print #MAIN.currentCall, "place 25 175"
        print #MAIN.currentCall, "\    "
        print #MAIN.currentCall, "flush"
        print #MAIN.previousCall, "down; fill black"
        print #MAIN.previousCall, "color red; backcolor black"
        print #MAIN.previousCall, "font courier_new ";FontSz+25;" bold"
        print #MAIN.previousCall, "place 20 55"
        print #MAIN.previousCall, "\    "
        print #MAIN.previousCall, "flush"
        print #MAIN.previousCall2, "down; fill black"
        print #MAIN.previousCall2, "color red; backcolor black"
        print #MAIN.previousCall2, "font courier_new ";FontSz+25;" bold"
        print #MAIN.previousCall2, "place 20 55"
        print #MAIN.previousCall2, "\    "
        print #MAIN.previousCall2, "flush"
    end if

    if BallsCalled > 0 then
        if CurrentNumberCalled < 16 then
            if CurrentNumberCalled <10 then
                DISPLAY$="B ";CurrentNumberCalled
            else
                DISPLAY$="B";CurrentNumberCalled
            end if
        end if
        if CurrentNumberCalled > 15 and CurrentNumberCalled < 31 then
            DISPLAY$="I";CurrentNumberCalled
        end if
        if CurrentNumberCalled > 30 and CurrentNumberCalled < 46 then
            DISPLAY$="N";CurrentNumberCalled
        end if
        if CurrentNumberCalled > 45 and CurrentNumberCalled < 61 then
            DISPLAY$="G";CurrentNumberCalled
        end if
        if CurrentNumberCalled > 60 then
            DISPLAY$="O";CurrentNumberCalled
        end if
        print #MAIN.currentCall, "down; fill black"
        print #MAIN.currentCall, "color yellow; backcolor black"
        print #MAIN.currentCall, "font courier_new ";FontSz+55;" bold"
        print #MAIN.currentCall, "place 25 175"
        print #MAIN.currentCall, "\";DISPLAY$
        print #MAIN.currentCall, "flush"
    else
        print #MAIN.currentCall, "down; fill black"
        print #MAIN.currentCall, "color yellow; backcolor black"
        print #MAIN.currentCall, "font courier_new ";FontSz+55;" bold"
        print #MAIN.currentCall, "place 25 175"
        print #MAIN.currentCall, "\    "
        print #MAIN.currentCall, "flush"
    end if

    if BallsCalled > 1 then
        if PreviousNumberCalled < 16 then
            if PreviousNumberCalled <10 then
                DISPLAY$="B ";PreviousNumberCalled
            else
                DISPLAY$="B";PreviousNumberCalled
            end if
        end if
        if PreviousNumberCalled > 15 and PreviousNumberCalled < 31 then
            DISPLAY$="I";PreviousNumberCalled
        end if
        if PreviousNumberCalled > 30 and PreviousNumberCalled < 46 then
            DISPLAY$="N";PreviousNumberCalled
        end if
        if PreviousNumberCalled > 45 and PreviousNumberCalled < 61 then
            DISPLAY$="G";PreviousNumberCalled
        end if
        if PreviousNumberCalled > 60 then
            DISPLAY$="O";PreviousNumberCalled
        end if
        print #MAIN.previousCall, "down; fill black"
        print #MAIN.previousCall, "color red; backcolor black"
        print #MAIN.previousCall, "font courier_new ";FontSz+25;" bold"
        print #MAIN.previousCall, "place 20 55"
        print #MAIN.previousCall, "\";DISPLAY$
        print #MAIN.previousCall, "flush"
    else
        print #MAIN.previousCall, "down; fill black"
        print #MAIN.previousCall, "color red; backcolor black"
        print #MAIN.previousCall, "font courier_new ";FontSz+25;" bold"
        print #MAIN.previousCall, "place 20 55"
        print #MAIN.previousCall, "\    "
        print #MAIN.previousCall, "flush"
    end if

    if BallsCalled > 2 then
        if TwoAgoNumberCalled < 16 then
            if TwoAgoNumberCalled <10 then
                DISPLAY$="B ";TwoAgoNumberCalled
            else
                DISPLAY$="B";TwoAgoNumberCalled
            end if
        end if
        if TwoAgoNumberCalled > 15 and TwoAgoNumberCalled < 31 then
            DISPLAY$="I";TwoAgoNumberCalled
        end if
        if TwoAgoNumberCalled > 30 and TwoAgoNumberCalled < 46 then
            DISPLAY$="N";TwoAgoNumberCalled
        end if
        if TwoAgoNumberCalled > 45 and TwoAgoNumberCalled < 61 then
            DISPLAY$="G";TwoAgoNumberCalled
        end if
        if TwoAgoNumberCalled > 60 then
            DISPLAY$="O";TwoAgoNumberCalled
        end if
        print #MAIN.previousCall2, "down; fill black"
        print #MAIN.previousCall2, "color red; backcolor black"
        print #MAIN.previousCall2, "font courier_new ";FontSz+25;" bold"
        print #MAIN.previousCall2, "place 20 55"
        print #MAIN.previousCall2, "\";DISPLAY$
        print #MAIN.previousCall2, "flush"
    else
        print #MAIN.previousCall2, "down; fill black"
        print #MAIN.previousCall2, "color red; backcolor black"
        print #MAIN.previousCall2, "font courier_new ";FontSz+25;" bold"
        print #MAIN.previousCall2, "place 20 55"
        print #MAIN.previousCall2, "\    "
        print #MAIN.previousCall2, "flush"
    end if
return

[resetButtonsToNormal]
    for x = 1 to 75
        temp$ = "#MAIN." + str$(x)
        temp2$ = "bitmap b" + str$(x) + "on"
        print #temp$, temp2$
    next x
return

[reverseTheNumbers]
    select case BallsCalled
        case 0
            wait
        case 1
            EnableThisButton = CurrentNumberCalled
            CurrentNumberCalled = 0
            PreviousNumberCalled = 0
            TwoAgoNumberCalled = 0
        case 2
            EnableThisButton = CurrentNumberCalled
            CurrentNumberCalled = PreviousNumberCalled
            PreviousNumberCalled = 0
            TwoAgoNumberCalled = 0
        case 3
            EnableThisButton = CurrentNumberCalled
            CurrentNumberCalled = PreviousNumberCalled
            PreviousNumberCalled = TwoAgoNumberCalled
            TwoAgoNumberCalled = 0
        case else
            EnableThisButton = CurrentNumberCalled
            CurrentNumberCalled = PreviousNumberCalled
            PreviousNumberCalled = TwoAgoNumberCalled
            TwoAgoNumberCalled = Order(BallsCalled - 3)
    end select
    Order(BallsCalled) = 0
    BallsCalled = BallsCalled - 1

    temp$ = "#MAIN." + str$(EnableThisButton)
    temp2$ = "bitmap b" + str$(EnableThisButton) + "on"
    print #temp$, temp2$

    BallStatus(EnableThisButton) = 0

return

[createMainWindow]

    WindowWidth=1100
    WindowHeight=720
    UpperLeftX=INT((DisplayWidth-WindowWidth)/2)
    UpperLeftY=INT((DisplayHeight-WindowHeight)/2)

    GBoxXOrg = 50
    GBoxYOrg = 80
    GBoxWidth = 300
    GBoxHeight = 300
    GBoxHorizSeparator = 40
    GBoxVertSeparator = 400
    GBoxVertSeparator2 = 500
    GBoxWidthShrinker = 100
    GBoxHeightShrinker = 230

    StaticTextXpos = GBoxXOrg + 30
    StaticTextYpos = GBoxYOrg - 50
    StaticTextWidth = 400
    StaticTextHeight = 40

    Button1xCoord = 625
    Button1yCoord = 30
    Button1Width = 50
    Button1Height = 30
    ButtonVertSeparator = 40
    ButtonHorizSeparator = 80

    STATICTEXT #MAIN.CNC, "Current Number", StaticTextXpos, StaticTextYpos, StaticTextWidth, StaticTextHeight
    STATICTEXT #MAIN.LNC, "Last Numbers Called", StaticTextXpos-30, StaticTextYpos+390, StaticTextWidth, StaticTextHeight

    GRAPHICBOX #MAIN.currentCall, GBoxXOrg, GBoxYOrg, GBoxWidth, GBoxHeight
    GRAPHICBOX #MAIN.previousCall, GBoxXOrg+GBoxHorizSeparator, GBoxYOrg+GBoxVertSeparator, GBoxWidth-GBoxWidthShrinker, GBoxHeight-GBoxHeightShrinker
    GRAPHICBOX #MAIN.previousCall2, GBoxXOrg+GBoxHorizSeparator, GBoxYOrg+GBoxVertSeparator2, GBoxWidth-GBoxWidthShrinker, GBoxHeight-GBoxHeightShrinker

    BUTTON #MAIN.ending, "END PROGRAM", [quit], UL, Button1xCoord-250, Button1yCoord+600, Button1Width+100, Button1Height
    BUTTON #MAIN.reset, "RESET BOARD", [reset], UL, Button1xCoord-250, Button1yCoord+450, Button1Width+100, Button1Height+100
    BUTTON #MAIN.review, "REVIEW CALLS", [review], UL, Button1xCoord-250, Button1yCoord+50, Button1Width+100, Button1Height+100
    BUTTON #MAIN.undo, "UNDO A CALL", [undoCall], UL, Button1xCoord-250, Button1yCoord+300, Button1Width+100, Button1Height

    BUTTON #MAIN.B, "B", [B], UL, Button1xCoord, Button1yCoord, Button1Width, Button1Height
    bmpbutton #MAIN.1, "button1.bmp", [1], UL, Button1xCoord, Button1yCoord+ButtonVertSeparator
    bmpbutton #MAIN.2, "button2.bmp", [2], UL, Button1xCoord, Button1yCoord+ButtonVertSeparator*2
    bmpbutton #MAIN.3, "button3.bmp", [3], UL, Button1xCoord, Button1yCoord+ButtonVertSeparator*3
    bmpbutton #MAIN.4, "button4.bmp", [4], UL, Button1xCoord, Button1yCoord+ButtonVertSeparator*4
    bmpbutton #MAIN.5, "button5.bmp", [5], UL, Button1xCoord, Button1yCoord+ButtonVertSeparator*5
    bmpbutton #MAIN.6, "button6.bmp", [6], UL, Button1xCoord, Button1yCoord+ButtonVertSeparator*6
    bmpbutton #MAIN.7, "button7.bmp", [7], UL, Button1xCoord, Button1yCoord+ButtonVertSeparator*7
    bmpbutton #MAIN.8, "button8.bmp", [8], UL, Button1xCoord, Button1yCoord+ButtonVertSeparator*8
    bmpbutton #MAIN.9, "button9.bmp", [9], UL, Button1xCoord, Button1yCoord+ButtonVertSeparator*9
    bmpbutton #MAIN.10, "button10.bmp", [10], UL, Button1xCoord, Button1yCoord+ButtonVertSeparator*10
    bmpbutton #MAIN.11, "button11.bmp", [11], UL, Button1xCoord, Button1yCoord+ButtonVertSeparator*11
    bmpbutton #MAIN.12, "button12.bmp", [12], UL, Button1xCoord, Button1yCoord+ButtonVertSeparator*12
    bmpbutton #MAIN.13, "button13.bmp", [13], UL, Button1xCoord, Button1yCoord+ButtonVertSeparator*13
    bmpbutton #MAIN.14, "button14.bmp", [14], UL, Button1xCoord, Button1yCoord+ButtonVertSeparator*14
    bmpbutton #MAIN.15, "button15.bmp", [15], UL, Button1xCoord, Button1yCoord+ButtonVertSeparator*15

    BUTTON #MAIN.I, "I", [I], UL, Button1xCoord+ButtonHorizSeparator, Button1yCoord, Button1Width, Button1Height
    bmpbutton #MAIN.16, "button16.bmp", [16], UL, Button1xCoord+ButtonHorizSeparator, Button1yCoord+ButtonVertSeparator
    bmpbutton #MAIN.17, "button17.bmp", [17], UL, Button1xCoord+ButtonHorizSeparator, Button1yCoord+ButtonVertSeparator*2
    bmpbutton #MAIN.18, "button18.bmp", [18], UL, Button1xCoord+ButtonHorizSeparator, Button1yCoord+ButtonVertSeparator*3
    bmpbutton #MAIN.19, "button19.bmp", [19], UL, Button1xCoord+ButtonHorizSeparator, Button1yCoord+ButtonVertSeparator*4
    bmpbutton #MAIN.20, "button20.bmp", [20], UL, Button1xCoord+ButtonHorizSeparator, Button1yCoord+ButtonVertSeparator*5
    bmpbutton #MAIN.21, "button21.bmp", [21], UL, Button1xCoord+ButtonHorizSeparator, Button1yCoord+ButtonVertSeparator*6
    bmpbutton #MAIN.22, "button22.bmp", [22], UL, Button1xCoord+ButtonHorizSeparator, Button1yCoord+ButtonVertSeparator*7
    bmpbutton #MAIN.23, "button23.bmp", [23], UL, Button1xCoord+ButtonHorizSeparator, Button1yCoord+ButtonVertSeparator*8
    bmpbutton #MAIN.24, "button24.bmp", [24], UL, Button1xCoord+ButtonHorizSeparator, Button1yCoord+ButtonVertSeparator*9
    bmpbutton #MAIN.25, "button25.bmp", [25], UL, Button1xCoord+ButtonHorizSeparator, Button1yCoord+ButtonVertSeparator*10
    bmpbutton #MAIN.26, "button26.bmp", [26], UL, Button1xCoord+ButtonHorizSeparator, Button1yCoord+ButtonVertSeparator*11
    bmpbutton #MAIN.27, "button27.bmp", [27], UL, Button1xCoord+ButtonHorizSeparator, Button1yCoord+ButtonVertSeparator*12
    bmpbutton #MAIN.28, "button28.bmp", [28], UL, Button1xCoord+ButtonHorizSeparator, Button1yCoord+ButtonVertSeparator*13
    bmpbutton #MAIN.29, "button29.bmp", [29], UL, Button1xCoord+ButtonHorizSeparator, Button1yCoord+ButtonVertSeparator*14
    bmpbutton #MAIN.30, "button30.bmp", [30], UL, Button1xCoord+ButtonHorizSeparator, Button1yCoord+ButtonVertSeparator*15

    BUTTON #MAIN.N, "N", [N], UL, Button1xCoord+ButtonHorizSeparator*2, Button1yCoord, Button1Width, Button1Height
    bmpbutton #MAIN.31, "button31.bmp", [31], UL, Button1xCoord+ButtonHorizSeparator*2, Button1yCoord+ButtonVertSeparator
    bmpbutton #MAIN.32, "button32.bmp", [32], UL, Button1xCoord+ButtonHorizSeparator*2, Button1yCoord+ButtonVertSeparator*2
    bmpbutton #MAIN.33, "button33.bmp", [33], UL, Button1xCoord+ButtonHorizSeparator*2, Button1yCoord+ButtonVertSeparator*3
    bmpbutton #MAIN.34, "button34.bmp", [34], UL, Button1xCoord+ButtonHorizSeparator*2, Button1yCoord+ButtonVertSeparator*4
    bmpbutton #MAIN.35, "button35.bmp", [35], UL, Button1xCoord+ButtonHorizSeparator*2, Button1yCoord+ButtonVertSeparator*5
    bmpbutton #MAIN.36, "button36.bmp", [36], UL, Button1xCoord+ButtonHorizSeparator*2, Button1yCoord+ButtonVertSeparator*6
    bmpbutton #MAIN.37, "button37.bmp", [37], UL, Button1xCoord+ButtonHorizSeparator*2, Button1yCoord+ButtonVertSeparator*7
    bmpbutton #MAIN.38, "button38.bmp", [38], UL, Button1xCoord+ButtonHorizSeparator*2, Button1yCoord+ButtonVertSeparator*8
    bmpbutton #MAIN.39, "button39.bmp", [39], UL, Button1xCoord+ButtonHorizSeparator*2, Button1yCoord+ButtonVertSeparator*9
    bmpbutton #MAIN.40, "button40.bmp", [40], UL, Button1xCoord+ButtonHorizSeparator*2, Button1yCoord+ButtonVertSeparator*10
    bmpbutton #MAIN.41, "button41.bmp", [41], UL, Button1xCoord+ButtonHorizSeparator*2, Button1yCoord+ButtonVertSeparator*11
    bmpbutton #MAIN.42, "button42.bmp", [42], UL, Button1xCoord+ButtonHorizSeparator*2, Button1yCoord+ButtonVertSeparator*12
    bmpbutton #MAIN.43, "button43.bmp", [43], UL, Button1xCoord+ButtonHorizSeparator*2, Button1yCoord+ButtonVertSeparator*13
    bmpbutton #MAIN.44, "button44.bmp", [44], UL, Button1xCoord+ButtonHorizSeparator*2, Button1yCoord+ButtonVertSeparator*14
    bmpbutton #MAIN.45, "button45.bmp", [45], UL, Button1xCoord+ButtonHorizSeparator*2, Button1yCoord+ButtonVertSeparator*15

    BUTTON #MAIN.G, "G", [G], UL, Button1xCoord+ButtonHorizSeparator*3, Button1yCoord, Button1Width, Button1Height
    bmpbutton #MAIN.46, "button46.bmp", [46], UL, Button1xCoord+ButtonHorizSeparator*3, Button1yCoord+ButtonVertSeparator
    bmpbutton #MAIN.47, "button47.bmp", [47], UL, Button1xCoord+ButtonHorizSeparator*3, Button1yCoord+ButtonVertSeparator*2
    bmpbutton #MAIN.48, "button48.bmp", [48], UL, Button1xCoord+ButtonHorizSeparator*3, Button1yCoord+ButtonVertSeparator*3
    bmpbutton #MAIN.49, "button49.bmp", [49], UL, Button1xCoord+ButtonHorizSeparator*3, Button1yCoord+ButtonVertSeparator*4
    bmpbutton #MAIN.50, "button50.bmp", [50], UL, Button1xCoord+ButtonHorizSeparator*3, Button1yCoord+ButtonVertSeparator*5
    bmpbutton #MAIN.51, "button51.bmp", [51], UL, Button1xCoord+ButtonHorizSeparator*3, Button1yCoord+ButtonVertSeparator*6
    bmpbutton #MAIN.52, "button52.bmp", [52], UL, Button1xCoord+ButtonHorizSeparator*3, Button1yCoord+ButtonVertSeparator*7
    bmpbutton #MAIN.53, "button53.bmp", [53], UL, Button1xCoord+ButtonHorizSeparator*3, Button1yCoord+ButtonVertSeparator*8
    bmpbutton #MAIN.54, "button54.bmp", [54], UL, Button1xCoord+ButtonHorizSeparator*3, Button1yCoord+ButtonVertSeparator*9
    bmpbutton #MAIN.55, "button55.bmp", [55], UL, Button1xCoord+ButtonHorizSeparator*3, Button1yCoord+ButtonVertSeparator*10
    bmpbutton #MAIN.56, "button56.bmp", [56], UL, Button1xCoord+ButtonHorizSeparator*3, Button1yCoord+ButtonVertSeparator*11
    bmpbutton #MAIN.57, "button57.bmp", [57], UL, Button1xCoord+ButtonHorizSeparator*3, Button1yCoord+ButtonVertSeparator*12
    bmpbutton #MAIN.58, "button58.bmp", [58], UL, Button1xCoord+ButtonHorizSeparator*3, Button1yCoord+ButtonVertSeparator*13
    bmpbutton #MAIN.59, "button59.bmp", [59], UL, Button1xCoord+ButtonHorizSeparator*3, Button1yCoord+ButtonVertSeparator*14
    bmpbutton #MAIN.60, "button60.bmp", [60], UL, Button1xCoord+ButtonHorizSeparator*3, Button1yCoord+ButtonVertSeparator*15

    BUTTON #MAIN.O, "O", [O], UL, Button1xCoord+ButtonHorizSeparator*4, Button1yCoord, Button1Width, Button1Height
    bmpbutton #MAIN.61, "button61.bmp", [61], UL, Button1xCoord+ButtonHorizSeparator*4, Button1yCoord+ButtonVertSeparator
    bmpbutton #MAIN.62, "button62.bmp", [62], UL, Button1xCoord+ButtonHorizSeparator*4, Button1yCoord+ButtonVertSeparator*2
    bmpbutton #MAIN.63, "button63.bmp", [63], UL, Button1xCoord+ButtonHorizSeparator*4, Button1yCoord+ButtonVertSeparator*3
    bmpbutton #MAIN.64, "button64.bmp", [64], UL, Button1xCoord+ButtonHorizSeparator*4, Button1yCoord+ButtonVertSeparator*4
    bmpbutton #MAIN.65, "button65.bmp", [65], UL, Button1xCoord+ButtonHorizSeparator*4, Button1yCoord+ButtonVertSeparator*5
    bmpbutton #MAIN.66, "button66.bmp", [66], UL, Button1xCoord+ButtonHorizSeparator*4, Button1yCoord+ButtonVertSeparator*6
    bmpbutton #MAIN.67, "button67.bmp", [67], UL, Button1xCoord+ButtonHorizSeparator*4, Button1yCoord+ButtonVertSeparator*7
    bmpbutton #MAIN.68, "button68.bmp", [68], UL, Button1xCoord+ButtonHorizSeparator*4, Button1yCoord+ButtonVertSeparator*8
    bmpbutton #MAIN.69, "button69.bmp", [69], UL, Button1xCoord+ButtonHorizSeparator*4, Button1yCoord+ButtonVertSeparator*9
    bmpbutton #MAIN.70, "button70.bmp", [70], UL, Button1xCoord+ButtonHorizSeparator*4, Button1yCoord+ButtonVertSeparator*10
    bmpbutton #MAIN.71, "button71.bmp", [71], UL, Button1xCoord+ButtonHorizSeparator*4, Button1yCoord+ButtonVertSeparator*11
    bmpbutton #MAIN.72, "button72.bmp", [72], UL, Button1xCoord+ButtonHorizSeparator*4, Button1yCoord+ButtonVertSeparator*12
    bmpbutton #MAIN.73, "button73.bmp", [73], UL, Button1xCoord+ButtonHorizSeparator*4, Button1yCoord+ButtonVertSeparator*13
    bmpbutton #MAIN.74, "button74.bmp", [74], UL, Button1xCoord+ButtonHorizSeparator*4, Button1yCoord+ButtonVertSeparator*14
    bmpbutton #MAIN.75, "button75.bmp", [75], UL, Button1xCoord+ButtonHorizSeparator*4, Button1yCoord+ButtonVertSeparator*15

    for x = 1 to 75

        ' ex: loadbmp "b1on", "button1.bmp"
        temp$ = "b" + str$(x) + "on"
        temp2$ = "button" + str$(x) + ".bmp"
        loadbmp temp$, temp2$

        ' ex: loadbmp "b1off", "button1off.bmp"
        temp$ = "b" + str$(x) + "off"
        temp2$ = "button" + str$(x) + "off.bmp"
        loadbmp temp$, temp2$

    next x

    loadbmp "b1on", "button1.bmp"
    loadbmp "b1off", "button1off.bmp"

    open "Bingo Caller 2010" FOR WINDOW AS #MAIN
    print #MAIN, "trapclose [quit]"

    PRINT #MAIN.reset, "!font courier_new ";Font-13;" bold"
    PRINT #MAIN.ending, "!font courier_new ";FontSz-13;" bold"
    PRINT #MAIN.review, "!font courier_new ";FontSz-13;" bold"
    PRINT #MAIN.undo, "!font courier_new ";FontSz-13;" bold"

    PRINT #MAIN.B, "!font courier_new ";FontSz;" bold"
    PRINT #MAIN.I, "!font courier_new ";FontSz;" bold"
    PRINT #MAIN.N, "!font courier_new ";FontSz;" bold"
    PRINT #MAIN.G, "!font courier_new ";FontSz;" bold"
    PRINT #MAIN.O, "!font courier_new ";FontSz;" bold"

    print #MAIN.CNC, "!font courier_new ";FontSz-5;" bold"
    print #MAIN.LNC, "!font courier_new ";FontSz-5;" bold"

    print #MAIN.currentCall, "down; fill black"
    print #MAIN.currentCall, "color yellow; backcolor black"
    print #MAIN.currentCall, "font courier_new ";FontSz+55;" bold"
    print #MAIN.currentCall, "place 25 175"

    print #MAIN.previousCall, "down; fill black"
    print #MAIN.previousCall, "color red; backcolor black"
    print #MAIN.previousCall, "font courier_new ";FontSz+25;" bold"
    print #MAIN.previousCall, "place 20 55"

    print #MAIN.previousCall2, "down; fill black"
    print #MAIN.previousCall2, "color red; backcolor black"
    print #MAIN.previousCall2, "font courier_new ";FontSz+25;" bold"
    print #MAIN.previousCall2, "place 20 55"

return

[createReviewWindow]

    BUTTON #REVIEW.closeWindow, "CLOSE WINDOW", [quitReview], UL, Button1xCoord-250, Button1yCoord+600, Button1Width+150, Button1Height

    STATICTEXT #REVIEW.numbersCalled, "Numbers Called", StaticTextXpos, StaticTextYpos, StaticTextWidth, StaticTextHeight
    GRAPHICBOX #REVIEW.gbox, GBoxXOrg, GBoxYOrg, GBoxWidth+600, GBoxHeight-200

    open "Bingo Caller 2010" FOR WINDOW AS #REVIEW
    print #REVIEW, "trapclose [quitReview]"

    print #REVIEW.closeWindow, "!font courier_new ";FontSz-11;" bold"
    print #REVIEW.numbersCalled, "!font courier_new ";FontSz-5;" bold"
    print #REVIEW.gbox, "fill white; flush; vertscrollbar on; horizscrollbar on"

    NumbersThatWereCalled$=""
    NumbersFlag = 0
    for x=1 to NumberOfBalls
        if Order(x)<>0 then
            if NumbersFlag = 0 then
                NumbersThatWereCalled$ = str$(Order(x))
                NumbersFlag = 1
            else
                NumbersThatWereCalled$ = NumbersThatWereCalled$;", ";str$(Order(x))
            end if
        end if
    next x

    print #REVIEW.gbox, "down; fill white"
    print #REVIEW.gbox, "font courier_new ";FontSz+15;" bold"
    print #REVIEW.gbox, "place 25 50"
    print #REVIEW.gbox, "\";NumbersThatWereCalled$
    print #REVIEW.gbox, "flush"

return