MINOS is the answer to the question "Is there something like Visual BASIC (Microsoft) or Delphi (Inprise) in Forth?" -- and the answer is "yes".
Basically, these GUI RADs contain two components: a library with a wide variety of elements for a graphical user interface; e.g. windows, buttons, edit-controls, drawing areas, etc.; and an editor to combine the elements with the mouse by drag&drop or click&point actions. Missing code then is inserted to add actions when buttons are pressed.
Typical applications are often related to data base access. Therefore, many of these systems already contain a data base engine or at least a standardized interface to a data base, such as ODBC.
Another aspect are complex components. With some of these toolkits, you can create a web browser with some mouse clicks and a few keystrokes. However, these components hide their details, a shrink wrapped web browser application is not necessarily worse.
The interactivity of these tools usually is not very high. You create your form, write your actions as code and compile it more (Delphi) or less (Visual Age for C++) fast. Trying it usually isn't possible before the compiler run.
It isn't really necessary to brush graphical user interfaces together, as it isn't to edit texts WYSIWYG. Many typesetting functions are more semantically than visual, e.g. a text is a headline or emphasized instead of written in bold 18 point Garamond or 11 point Roman italics. All this is true for user interfaces, to some extend much more. It's not the programmer that decides which font and size to use for the UI -- that's up to the user. As is color of buttons and texts.
Also to layout individual widgets, more abstraction than defining position, width and height makes sense. Typically buttons are arranged horizontally or vertically, perhaps with a bit distance between them. The size of buttons must follow the containing strings, and should conform to aesthetics (e.g. each button in a row has the same width).
Such an abstract model, related to TeX's boxes&glues, programs quite good even without a visual editor. The programmer isn't responsible for "typesetting" the buttons and boxes. This approach is quite usual in Unix. Motif and Tcl/Tk use neighborhood relations, Interviews uses boxes&glues. I decided for boxes&glues, since it's a fast and intuitive solution, although it needs more objects to get the same result.
These concepts contradict somehow with a graphical editing process, since the editors I know don't provide abstract concepts ("place left of an object" or "place in a row"), but positions.
One point makes me think: the packets that allow real visual form programming have many years of programming invested in. Microsoft, Borland, and IBM may hire hundreds of programmers just for one such project. This man-power isn't available for any Forth project. But stop:
Furthermore, bigFORTH-DOS already contains a "Text-GUI", without graphical editor, but with an abstract boxes&glue concept, which, as claimed above, hinders the use of such an editor.
Finally I wanted to get rid of DOS, and port bigFORTH to a real operating system (Linux). In contrast to Windows and OS/2, user interface and screen access are separated there. Drawing on the screen uses the X Window System (short X), the actual user interface is implemented in a library. This is the reason, why there is no common interface, but a lot of different libraries, such as Athena Widgets, Motif, Tcl/Tk, xforms, Qt, gtk, and others. The "look and feel" from Motif-like buttons is quite common, even Windows and MacOS resemble it.
All these libraries have disadvantages. The Athena Widgets are hopelessly outdated. Motif is commercial, even if a free clone (Lesstif) is in creation. It's slow and a memory hog. Tcl/Tk consumes less memory, but it's even slower. How do you explain your users that drawing a window takes seconds, while Quake renders animated 3D-graphic on the same machine? Qt is fast, but it's written in C++ and doesn't have a foreign language interface now. gtk, the GIMP toolkit, has more foreign language interfaces, and it's free, but it wasn't available until recently.
Therefore I decided to port the widget classes from bigFORTH-DOS to X, and write an editor for it. Such classes written in Forth naturally fit in an development environment and are -- from the Forth point of view -- easier to maintain. There are not such many widget libraries in C, because it's a task written in an afternoon, but because the available didn't fit the requests, and a modification looked desperate.
"Visual XXX" is an all day's name, and it's too much of a microsoftism for me. "Forth" is a no-word, especially since the future market consists of one billion Chinese, and for them four is a number of unluck (because "se" (four) sounds much like "se" (death)). However, even Borland doesn't call their system "Visual TurboPascal", but "Delphi".
Greek is good, anyway, since this library relates to the boxes&glues model of TeX, which is pronounced Greek, too. Compared with Motif, the library is quite copact (MINimal), and since it's mainly for Linux, the phonetic distance is small... I pronounce it Greek: "meenoz".
I ported MINOS to Windows 95/NT, on the demand of some potential users. It doesn't run near as stable as under Linux/X, since there are a hideous number of subtle bugs in Windows, and I don't have the time to work around all of them. Drawing polygons doesn't work as well as on X, and all the bugs that are in the memory drawing device can drive me nuts. The Windows port of MINOS looks more like the "modern Forth" Claus Vogt portrayed in `news:de.comp.lang.forth': it shows random general protection faults. Well, just like any other Windows program.
The primary classes of MINOS are gadgets (widgets and displays), actors, and resources (xresource and font).
Resources just provide system-specific data like window handles, display pointers, font informations, etc., they are critical for system-specific parts of display implementations.
Widgets are the central objects represented on screen. Widgets draw through displays, such as windows, viewports, etc. Since many displays can be embedded into a bigger window, they also have all widget functionality. Widgets are composed in boxes (horizontal and vertical), and automatically layouted. Boxes certainly are widgets themselves, and some of the more complicated widgets such as sliders or textboxes are derived from boxes to layout the inner parts easily.
Actors are bound to associated actions when operating a widget (i.e. clicking on it, pointing on it, or entering text). Actors provide the way to script actions.
ACTOR
<DL> <DT>XRESOURCE <DT>FONT <DD>X-FONT </DL>
GADGET
<!-- COMBINED 44 E4 40139938 VBOX 44 E4 4013B15C SLIDERVIEW 4C E8 40146360 ASLIDERVIEW 4C E8 40146C2C VSLIDER 44 E8 401423B4 VSCALER 50 EC 401434F4 VSLIDER0 44 E8 40142B74 VRBOX 44 E4 40140E74 VTBOX 44 E4 4013C59C VRTBOX 44 E4 4014163C VATBOX 44 E4 4013CB70 VARTBOX 44 E4 40141760 COMPONENT 44 E4 4013BC8C VASBOX 4C E8 40147340 VRESIZE 44 E4 40146FF0 MODAL 48 E4 401418AC VARBOX 44 E4 40141058 HBOX 44 E4 4013A84C INFO-MENU 54 E4 4014CA70 HSLIDER 44 E8 40141D94 HSCALER 50 EC 40142E98 HSLIDER0 44 E8 4014292C HRBOX 44 E4 401411B8 HTBOX 44 E4 4013C0E8 HRTBOX 44 E4 401413F8 HATBOX 44 E4 4013CA50 HARTBOX 44 E4 4014151C HABOX 44 E4 4013BFC8 HASBOX 4C E8 40147558 HRESIZE 44 E4 40147138 HARBOX 44 E4 401412D8 TEXTFIELD 48 E4 40140A08 INFOTEXTFIELD 4C E4 40140C38 (NIL 24 C8 40137B80 GLUE 34 C8 401379F8 GLCANVAS 58 CC 4014B670 RULE 38 C8 40138458 CANVAS 78 118 40138FCC MFILL 38 C8 40138A48 MSKIP 38 C8 40138908 SSKIP 40 C8 40146178 VRULE 38 C8 40138734 HRULE 38 C8 40138618 VGLUE 34 C8 40138308 HGLUE 34 C8 401381EC TOPGLUE 34 C8 4013E908 ICON 28 C8 401377E4 ICON-PIXMAP 2C CC 4013761C -->
<!-- DISPLAYS 90 178 4012FC60 WINDOW A4 194 40148B18 FILE-SELECTOR C4 198 40151AB8 MENU-WINDOW A4 194 4014D09C FRAME A8 1A4 4014A698 MENU-FRAME A8 1A4 4014C0D0 FRAME-TIP AC 1A4 4014AD94 WINDOW-STUB A4 194 4014A2C0 (NILSCREEN 90 178 40137D00 BACKING A8 17C 40131DD0 VIEWPORT E0 190 40143EB4 SCRVIEWPORT E0 190 40123590 HVIEWPORT E8 190 40145F14 VVIEWPORT E8 190 40145CC4 BEAMER B8 180 401330F8 DOUBLEBUFFER A8 17C 40132DB0 ok -->