' *** INP_TEXT.LST *** 2nd GFA-Manual, page 8-10 > PROCEDURE input_text(box!,dots!,default$,length,VAR text$) ' ' *** Formatted input of text (maximum length& characters long) ' *** If box!=TRUE a box is drawn around the input-field ' *** If dots!=TRUE the input-field is filled with length& dots ' *** It is possible to use a default-string ' *** Special characters can be entered with the -method ' *** Help is available if the user presses ' ' *** Standard: char.width& char.height& ' LOCAL x,y,field$,x1,y1,x2,y2,box$,code%,char|,scan|,screen$,t$,col HIDEM x=CRSCOL y=CRSLIN IF dots! field$=STRING$(length,".") ELSE field$=STRING$(length," ") ENDIF text$=default$ IF box! x1=SUB(MUL(char.width,PRED(x)),2) y1=SUB(MUL(char.height,PRED(y)),2) x2=ADD(MUL(ADD(PRED(x),length),char.width),2) y2=ADD(MUL(y,char.height),2) GET x1,y1,x2,y2,box$ DEFFILL 1,0 PBOX x1,y1,x2,y2 ENDIF PRINT AT(x,y);LEFT$(text$+"_"+field$,length); {ADD(XBIOS(14,1),6)}=0 ! clear keyboard-buffer ' DO KEYGET code% char|=BYTE(code%) scan|=BYTE(SHR(code%,16)) EXIT IF char|=13 ! , so we're ready IF char|=8 ! , erase last character IF LEN(text$)>0 text$=LEFT$(text$,LEN(text$)-1) ELSE OUT 2,7 ENDIF ENDIF IF char|=27 ! , erase entire line text$="" ENDIF IF scan|=98 ! , short manual SGET screen$ CLS PRINT AT(1,6);" - terminate input" PRINT AT(1,8);" - erase last character" PRINT AT(1,10);" - erase entire input-line" PRINT AT(1,12);" - hold down while entering ASCII-code (32-255)" PRINT AT(1,14);" bell-sound - illegal key" t$="(Press any key)" col=(col.max-LEN(t$))/2 PRINT AT(col,25);t$; ~INP(2) SPUT screen$ ENDIF IF LEN(text$)=32 text$=text$+CHR$(char|) ELSE IF char|<>27 AND char|<>8 AND scan|<>98 ! error or last position OUT 2,7 ENDIF PRINT AT(x,y);LEFT$(text$+"_"+field$,length); LOOP ' IF box! PUT x1,y1,box$ ENDIF PRINT AT(x,y);text$;SPACE$(length-LEN(text$)); RETURN ' ********* '