'===========================================================================
' Subject: BOXED INPUT                        Date: 12-07-97 (21:05)       
'  Author: John Charles Bull III              Code: QB, QBasic, PDS        
'  Origin: vividbarrier@hotmail.com         Packet: TEXT.ABC
'===========================================================================
DECLARE SUB boxinput (xa!, xb!, xc!, xd!, bgcol!, txtcol!, curcol!, x$)

' /........................\ Vivid Barrier Software 1997
' |.oO..oOo.oOo..vivid.....| QBasic 4.5x Useful SUB Procedures
' |.oO.oOo..oOo....barrier.| by John Charles Bull III
' |.oO.oOo..oOOOOo..=O97O=.|
' |.oOoOo...oOo.oOo........|
' |.oOOo....oOOOOo.........|
' \......................../
'
' BOXINPUT will allow you to set a box on the screen that input can be put
' into.  You can specify the cords of the box, the text, background, and
' cursor color.  The whole input of the BOX is stored in one single string
' variable.  I think this can be very useful.
'
' boxinput(startX,startY,endX,endY,bgcolor,text color,cursor color,string$)

CLS                                             'clear the screen

CALL boxinput(1, 1, 75, 5, 7, 15, 4, z$)        'input in a box

LOCATE 16, 1: PRINT z$                          'print back the input

SUB boxinput (xa, xb, xc, xd, bgcol, txtcol, curcol, x$)

' boxinput(startX,startY,endX,endY,bgcolor,text color,cursor color,string$)

COLOR txtcol, bgcol
a = xa: b = xb

DO
        LOCATE b, a: PRINT " ";
 
        a = a + 1

        IF a = xc THEN
                a = xa
                b = b + 1
        END IF

LOOP UNTIL b = xd + 1

a = xa
b = xb

DO
        zc = SCREEN(a, b, 0): COLOR txtcol, curcol: LOCATE a, b: PRINT CHR$(zc);

        GOSUB wait0

        IF z$ = CHR$(0) + "H" THEN
                IF a = xa THEN
                ELSE
                        zc = SCREEN(a, b, 0): COLOR txtcol, bgcol: LOCATE a, b: PRINT CHR$(zc);
                        a = a - 1
                END IF
        END IF
       
        IF z$ = CHR$(0) + "P" OR z$ = CHR$(13) THEN
                IF a = xd THEN
                ELSE
                        zc = SCREEN(a, b, 0): COLOR txtcol, bgcol: LOCATE a, b: PRINT CHR$(zc);
                        a = a + 1
                END IF
        END IF

        IF z$ = CHR$(0) + "M" THEN
                IF b = xc - 1 THEN
                ELSE
                        zc = SCREEN(a, b, 0): COLOR txtcol, bgcol: LOCATE a, b: PRINT CHR$(zc);
                        b = b + 1
                END IF
        END IF
       
        IF z$ = CHR$(0) + "K" THEN
                IF b = xb THEN
                ELSE
                        zc = SCREEN(a, b, 0): COLOR txtcol, bgcol: LOCATE a, b: PRINT CHR$(zc);
                        b = b - 1
                END IF
        END IF

        IF ASC(z$) >= 31 AND ASC(z$) <= 127 THEN
                COLOR txtcol, bgcol: LOCATE a, b: PRINT z$;
                IF b = xc - 1 AND a = xd THEN
                ELSE
                        b = b + 1
                        IF b = xc THEN
                                IF a = xd THEN
                                ELSE
                                        a = a + 1
                                        b = xb
                                END IF
                        END IF
               
                END IF

        END IF

LOOP UNTIL z$ = CHR$(0) + ";"

zc = SCREEN(a, b, 0): COLOR txtcol, bgcol: LOCATE a, b: PRINT CHR$(zc);
GOTO enditboxinput

wait0:
z$ = INKEY$
IF z$ = "" THEN GOTO wait0
RETURN

enditboxinput:
a = xa: b = xb
x$ = ""

DO
        c = SCREEN(b, a, 0)
        x$ = x$ + CHR$(c)

        a = a + 1

        IF a = xc THEN
                a = xa
                b = b + 1
                x$ = x$ + CHR$(13)
        END IF

LOOP UNTIL b = xd + 1
COLOR 7, 0

END SUB
