defint a-z
'Listing 1.5     QuickBASIC demonstration program.

' PANELS.BAS
'
DECLARE SUB FastPrint (BYVAL Row%, BYVAL Col%, Message$, BYVAL Attr%)
DECLARE FUNCTION Randy% (Lowest%, Highest%)
DECLARE SUB Panel (Row%, Col%, Rows%, Cols%, Border%, Attr%)

    RANDOMIZE TIMER
    Height%  = 25               ' Change for 43 or 50 row screens
    Columns% = 80               ' Change for 40 column screens

    CLS
    DO
        Row% = Randy%(1, Height%)
        Col% = Randy%(1, Columns%)
        Rows% = Randy%(2, Height%)
        IF Row% + Rows% > Height% THEN Rows% = Height% - Row%
        Cols% = Randy%(2, Columns%)
        IF Col% + Cols% > Columns% THEN Cols% = Columns% - Col%
        Border% = Randy%(0, 2)
        Attr% = Randy%(0, 255)
        Panel Row%, Col%, Rows%, Cols%, Border%, Attr%
    LOOP UNTIL INKEY$ = CHR$(27)
END

SUB Panel (Row%, Col%, Rows%, Cols%, Border%, Attr%) STATIC
    IF Cols% > 2 AND Rows% > 2 THEN
       SELECT CASE Border%
           CASE 1
                Top$ = "+" + STRING$(Cols% - 2, "-") + "+"
                Mdl$ = "|" + STRING$(Cols% - 2, " ") + "|"
                Bot$ = "+" + STRING$(Cols% - 2, "-") + "+"
           CASE 2
                Top$ = "+" + STRING$(Cols% - 2, "-") + "+"
                Mdl$ = "|" + STRING$(Cols% - 2, " ") + "|"
                Bot$ = "+" + STRING$(Cols% - 2, "-") + "+"
           CASE ELSE
                Top$ = SPACE$(Cols%): Mdl$ = Top$: Bot$ = Top$
       END SELECT
       FastPrint Row%, Col%, Top$, Attr%
       FOR I% = 1 TO Rows% - 2
           FastPrint Row% + I%, Col%, Mdl$, Attr%
       NEXT I%
       FastPrint Row% + I%, Col%, Bot$, Attr%
    END IF
END SUB

'   Return a random integer between the limits specified.
'
FUNCTION Randy% (Lowest%, Highest%) STATIC
    Randy% = INT(RND * ((Highest% - Lowest%) + 1)) + Lowest%
END FUNCTION
