'===========================================================================
' Subject: EDIT STRING IN BOX                 Date: Unknown Date           
'  Author: Erik Olson                         Code: PB                     
'  Origin: EDIT,STRING,IN,BOX               Packet: TEXT.ABC
'===========================================================================
$IF 0

'   THIS FILE: EDITBOX$.BAS for PowerBASIC
'      AUTHOR: Erik Olson
' DESCRIPTION: Function to edit a string in a box

$ENDIF

' this subroutine already contains SINBOX.BAS, which draws a box around
' the input line.  You can, of course, use your own box routine, or
' not use one at all.

' EDITBOX$ is a function which returns whatever was typed into the field.
' DEFAULT$ is the argument, which should be padded with spaces to equal the
' total size of the edit field.


' Example:

A$=EditBox$("This is the Default     ")
CLS
IF A$="" THEN PRINT "You aborted" ELSE PRINT "You entered: ";A$




FUNCTION EditBox$(Default$)

COLOR 0,7
CALL SingleBox(19, 38-(LEN(Default$)\2), 21, 42+(LEN(Default$)\2))
y = 40 - (LEN(Default$) \ 2) : YY=0
DO


   LOCATE 20,Y,0:PRINT Default$  ' if you want to put the box somewhere
   LOCATE  20,Y+yy,1             ' else, change these locate statements


   DO:A$=INKEY$:LOOP WHILE LEN(A$)=0
   IF LEN(A$) THEN
      SELECT CASE(A$)
      CASE CHR$(27), CHR$(13)
         EXIT SELECT
      CASE CHR$(8)
         IF YY THEN
            YY=YY-1
            IF YY THEN
               Default$=LEFT$(Default$,yy)+MID$(Default$,yy+2) + " "
            ELSE
               Default$=MID$(Default$,yy+2) + " "
            END IF
         END IF
      CASE CHR$(0)+CHR$(83)
         IF YY THEN
            Default$=LEFT$(Default$,yy)+MID$(Default$,yy+2) + " "
         ELSE
            Default$=MID$(Default$,yy+2) + " "
         END IF
      CASE CHR$(0)+CHR$(&H4D)
         IF YY < LEN(Default$) THEN YY=YY+1
      CASE CHR$(0)+CHR$(&H4B)
         IF YY THEN YY=YY-1
      CASE CHR$(0)+CHR$(79) 'end
         yy=LEN(RTRIM$(default$))
      CASE CHR$(0)+CHR$(71)
         yy=0

      CASE ELSE
         IF LEN(A$)=1 and YY=0 THEN Default$=SPACE$(LEN(default$))
         IF LEN(A$)=1 and YY < LEN(Default$) THEN_
         MID$(Default$,YY+1,1) = A$ : YY=YY+1

      END SELECT
      IF A$=CHR$(27) THEN EditBox$="":EXIT LOOP
      IF A$=CHR$(13) THEN EditBox$=RTRIM$(Default$):EXIT LOOP

   END IF
LOOP
END FUNCTION




SUB SingleBox (Wa%, Wb%, Wc%, Wd%)
   LOCATE Wa%, Wb%: PRINT CHR$(213) + STRING$((Wd% - Wb%) - 1, 205) + CHR$(184)
   LOCATE Wc%, Wb%: PRINT CHR$(212) + STRING$((Wd% - Wb%) - 1, 205) + CHR$(190)

   FOR zxy% = 1 TO Wc% - Wa% - 1
      LOCATE Wa% + zxy%, Wb%
      PRINT CHR$(179) + SPACE$((Wd% - Wb%) - 1) + CHR$(179)
   NEXT zxy%

END SUB
