'=========================================================================== ' Subject: EDIT STRING IN BOX Date: Unknown Date ' Author: Erik Olson Code: PB ' Keys: 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