Code archives/User Input/Question$()

This code has been declared by its author to be Public Domain code.

Download source code

Question$() by Reaper
(Posted 25 years ago)
This allows you to have an input style command that you can place at any screen coords. also the typed response may be placed at any coords.
;           *****************************************
;           *  Question Function  * By Nick Stacey  *
;           *****************************************
;
;        A more versatile version of the input command
;
;
;Format  a$=Question(r,g,b,x,y,question,minlength,maxlength,r2,g2,b2,x2,y2)
;        where rgb,x&y are colour and coords of question
;		 and r2,b2,g2,x2 & y2 are color and coords of typed response
;		 minlength and maxlength are then minimum/maximum length of returned string
;		 optional format of
;		 a$=Question(r,g,b,x,y,question$,0,0,0,0,0,0,0)
;		 which means the function will behave more like a normal input and typed
;		 response will appear straight after question.
;
;		 Feel free to use and/or modify this code as much as required
;

Function Question$(r,g,b,x,y,question$,minlength,maxlength,r2,g2,b2,x2,y2)
Frontbuff = FrontBuffer() : setbb =0
If GraphicsBuffer() <>FrontBuff Then SetBuffer FrontBuffer():setbb=1
oldr=ColorRed() :oldg=ColorGreen():oldb=ColorBlue()
GetColor -1,-1
br= ColorRed(): bg=ColorGreen(): bb=ColorBlue()
Color br,bg,bb : l=Len(question$)
Rect x,y,(FontWidth()*l),FontHeight(),1
Color r,g,b
Text x,y,question$
value = 0 : a$=""
If r2=0 And b2=0 And g2=0 And x2=0 And y2=0 Then 
	r2=r:g2=g:b2=b:y2=y: x2=x+(FontWidth()*Len(question$)) 
EndIf
Color r2,g2,b2
l=Len(a$)
While (Not KeyHit(28)) Or l <minlength
	While Not value
		value = GetKey()
	Wend
	l = Len(a$)
	If KeyHit(14) Then
		If l >0 Then 
			a$=Left$(a$,l-1)
			Color br,bg,bb
			Rect x2,y2,(FontWidth()*l),FontHeight(),1
			Color r2,g2,b2
			Text x2,y2,a$
		EndIf
		Delay 50
		FlushKeys
		Delay 50
	EndIf
	If value >=32 And value <= 126 And (l < maxlength Or maxlength =0) Then
		a$=a$+Chr$(value):Delay 10
		If typ=1 Then 
			Text x+(FontWidth()*(Len(question$))),y,a$
		Else
			Text x2,y2,a$
		EndIf
	EndIf
	value=0
Wend
Delay 10
FlushKeys
Color oldr,oldg,oldb
If setbb =1 Then SetBuffer BackBuffer()
Return a$ 
End Function