Unix programs would use codes, similar to ANSI codes, to instruct the terminal screen to move the cursor, set the color, and draw characters. So boxes were simply drawn on the screen much like you do it now in FB, with "locate"-like commands, printing box drawing characters. Each character set had certain box-drawing characters you could write, like the other reply mentions. Since terminals were remote, there was no way for the unix program to ask the terminal to read back to it the existing contents of the display. So when a box needed to be popped up asking for input, the program would simply draw them on the screen, overwriting the background characters. After the box was done, the program would then redraw the entire screen (sometimes this was quite noticeably slow), erasing the popup box. This is actually the technique I would use on FB. Printing to the text console is fast enough nowadays that it would hardly be noticeable, and your program could be smart about only reprinting the areas that need to be reprinted. And actually this is really how GUI windows work under the hood also--the program just redraws pieces of the screen when windows disappear or move.

Years ago, the common need for drawing "windows" on the terminal and requesting keyboard input, combined with the need to understand special codes for displaying and keyboard input, led to the development of common libraries to automate this. The modern version of these libraries is called ncurses. There's even a port of it to Windows, called pdcurses. ncurses handles things like keyboard input (ctrl, alt combinations, special keys, key codes for letters and function keys), output (move cursor, set color, print text, box drawing), primitive text-based windows, and even mouse events. FB does rely on a part of ncurses called libtinfo to handle differences in the various types of terminal emulators used on Linux, but FB does not actually use ncurses itself for printing. Instead FB implements many things similar to ncurses in the runtime library for commands like LOCATE, PRINT, COLOR, INPUT, etc.

So the short answer to your question is yes, the same methods used by older unix programs can be done in text mode with FB with only the built-in commands, such as locate, print, color, input, etc. Years ago I wrote a simple text input field routine that would use inkey$ to make a simple field editor using whatever colors (inverse background or just underlines to mark the field). Could use arrow keys, had insert, delete, etc. You'd want to implement something similar as the INPUT command is fairly limited in terms of editing (can't throw in an existing value). I'll have to dig up the code and post it here.

Thanks for the advice guys I am thinking about doing a basic program that I could use on my linux server and tuning it from a dumb terminal this has all given me a idea as how to do that I would have to come up with some simple screen designs as I’m sure they would be limited to what can be displayed and no tab support (like we have in windows etc)

@caseihIf you do not mind I would appreciate seeing your code as I will admit keyboard support has never been my strong point.

@caseihmeany thanks. I do like my old systems :) I assume if I was to run this via a serial terminal on a Linux machine it would still work (I assume I can have 2 terminal connected to the machine at one time)

if you are that much into 'old style', you may want to look at/read:ASCII Art at Wikipedia ...I've used that (simple frames) even in simple batch-jobs ... batch-menues, to be more precise, however, in the late 1980th.

(And, I wouldn't want to go back there, there is simply no viablereason, to do so!)

I disagree about never going back. TUIs are alive and well and serve very useful purposes. I use several text mode programs with TUIs (menus, windows of sorts) on a regular basis. Remotely and locally. A GUI app will never replace these specific needs, though many have tried over the years.

@Gablea: This is "my" substitution of the INPUT statement (I call it "stringmod.bi"). The options to imitate keystrokes with mouse and joystick and of running a plugin may be a little overhead for you, but you can submit an initial string to modify: