sjs@spectral.ctt.bellcore.com (Stan Switzer) (12/20/89)
Against my better judgement I jump into the fray ... In article <7363@ficc.uu.net> peter@ficc.uu.net (Peter da Silva) writes: > ... of the lack of a standard programmer interface. The analogy I used was > with the UNIX system calls and the C stdio library... There is simply no use comparing something like stdio with a a graphical user interface. There are two "tricks" behind stdio: 1) let's imagine that files are just bytestreams and 2) the printf vararg hack. These are nice tricks to be sure, but are something of an overabstraction. How many times have you seen the query, "how do you read a single character from the terminal" in comp.lang.c? Is this REALLY such a crazy question? Hmmm. Let's see if we can find a simple abstraction for windowing... > nread = read(fd, buf, nbytes); No wait. That's too simple. > Similarly, let's look at a hypothetical window call: > > Menu = AddWindowMenu(Window, "Frobitz", "Fooble"); Looking kinda like a widget call isn't it? I mean after we answer a few questions like where the window is to be placed relative to other windows, what kind of behaviors the window is to have, etc. > > C++ and Lisp would be a good choice for an object oriented > > windowing system. [That's Bruce talking.] Yes. Objective-C or PostScript with the object-oriented extensions and a powerful toolkit are pretty good too. Looked at tNt yet? > I'd rather use the best language for the job the program is intended to > do. Not the best language for the user interface. That's just putting the > cart before the horse. What if you're working in Prolog? Or APL? Or you're > working for the DoD in ADA? Or adding a GUI to MicroEmacs? Good points all. That is why I like to download all of my UI code into the server and interface to it using stubs crafted to the specific functionality of the interface. Looked at NeWS's "cps" yet? > > I certainly would not want to wait three years for a standards > > committee to define the stdio-windows library package. > > But you're willing to wait three years for a standards committee to > define the user interface? Why? I've got a job to do today. I have the technology to do it. I don't expect that it will last forever or that it won't take additional work to keep up with the technology rat-race. I expect someday that people will notice who's getting the job done and try to standardize based on the successful tools rather than trying to define success through the standards process. > Toolkit? As in X toolkit? My dear fellow. X is part of the problem. It's > way too low level for something like this. Mon ami, have you REALLY looked at the X widget interface? Nobody is suggesting you write an interface using Xlib. But back to the search for a simplifying windowing metaphor... > Besides, Termcap and terminfo are both far below the level I'm talking > about here. Curses is a closer metaphor. > ... > "I want a window big enough to hold the following > objects: a text pane containing this text, and a > selector for YES and NO. Tell me when someone selects > YES or NO, and don't bug me otherwise", Oh! Curses. There's an idea: a window is a screen region with text and maybe a few menu items at the top. > "Draw a rectangle here, now put these characters in > this font here, and then draw these rectangles... > (lots deleted) now tell me when anyone clicks in my > window. Oh, OK, erase this rectangle and redraw it > here, and blit this rectangle up by the size of this > font, put these characters here, and tell me what > you want me to do next..." Wait a minute here, now it's getting complicated. What's that? You want to implement a drawing tool? Sorry, we only blit rectangles. Circles? Polygons? Clipping? Filling, images, animation, sliders, scrollbars, menus? Oh stop! It's getting SO complicated! There is a minimum complexity to a windowing interface unless you accept that some of the inherent capabilities of the device will be unaccessable. Yes, simplifying models are quite useful, but they are not always appropriate to the task at hand. This is why an object-oriented interfacing approach is a Good Thing. You can define object classes which capture certain interfacing abstractions and present a simple interface to the user for that particular interfacing abstraction. But who knows what gadgets might be useful? I wrote and debugged a "graph" gadget for NeWS which allows you to grab points on the graph and adjust them visually in a few hours one evening after putting the baby to bed. Why should it be hard? In NeWS it isn't. Unfortunately, as a result my interface will forever be more complex than it was before. Every time I write a program I'll have to ask myself: "Self," I ask, "do you want to use a graph item, a slider, a scrollbar, or one of these other tools?" Now look what I've gone and done! But to pick some particular simplifying abstraction and to base an API on that abstraction is going to doom you to forever explaining to the poor user who asks "how do I let a user drag the control point of a spline with real-time visual feedback" that you had not anticipated his particular need and if he weren't so stupid he'd know that you can't read a single character from the terminal without doing non-portable hacks. As Yogi Berra said, "It's deja-vu all over again." Stan Switzer sjs@bellcore.com
peter@ficc.uu.net (Peter da Silva) (12/22/89)
In article <18637@bellcore.bellcore.com> sjs@bellcore.com (Stan Switzer) writes: > There is simply no use comparing something like stdio with a a > graphical user interface. There are two "tricks" behind stdio: 1) > let's imagine that files are just bytestreams and 2) the printf vararg > hack. So what sort of "tricks" do we need to solve the window programming problem? > These are nice tricks to be sure, but are something of an > overabstraction. How many times have you seen the query, "how do you > read a single character from the terminal" in comp.lang.c? And I'd expect that in a real high-level windowing environment you'll get the same sort of question. And the same sort of answer: "You don't do that". In the case of C, you use curses. Stdio is the wrong tool for hacking with the screen. It's too high a level of abstraction. In the case of windowing, you design the user interface at a higher level of abstraction. But don't force the whole program into that mould. > Hmmm. Let's see if we can find a simple abstraction for windowing... I don't know either. But I think it's a much more important problem than deciding what windows should look like. The examples I gave were deliberately simple... > > Menu = AddWindowMenu(Window, "Frobitz", "Fooble"); > Looking kinda like a widget call isn't it? Maybe. But you don't want to design your program around the UI, like you have to with widgets. > Good points all. That is why I like to download all of my UI code > into the server and interface to it using stubs crafted to the > specific functionality of the interface. Looked at NeWS's "cps" yet? Yeh, it's a nice metaphor. I'm not sure it's the best one for today's systems, though. It's got quite a bit of overhead, and you're not going to be able to cram much of a postscript interpreter into 640K if you need your apps in there as well... > > Toolkit? As in X toolkit? My dear fellow. X is part of the problem. It's > > way too low level for something like this. > Mon ami, have you REALLY looked at the X widget interface? Nobody is > suggesting you write an interface using Xlib. The interface is not so bad. You still have to design the whole program around it, though, or you'll end up pissing off users who want to work instead of wait. That level of abstraction belongs in the server. Not the program. No matter how it's hidden. Here we have my "desirable" example: > > "I want a window big enough to hold the following > > objects: a text pane containing this text, and a > > selector for YES and NO. Tell me when someone selects > > YES or NO, and don't bug me otherwise", This stuff here was my "undesirable" example. Of course this is what systems like X give you. They hide it, but your program still has to be able to get back to the user or none of this will happen: > > "Draw a rectangle here, now put these characters in > > this font here, and then draw these rectangles... > > (lots deleted) now tell me when anyone clicks in my > > window. Oh, OK, erase this rectangle and redraw it > > here, and blit this rectangle up by the size of this > > font, put these characters here, and tell me what > > you want me to do next..." > There is a minimum complexity to a windowing interface unless you > accept that some of the inherent capabilities of the device will be > unaccessable. I accept that some inherent capabilities of the device will be unacessible at this level of abstraction. Similarly, most of the hardware UNIX runs on is quite capable of, oh, lightweight processes, asynchronous I/O, real time response, and so on. But people are wiling to give all this up so they can use a higher-level metaphor. Your argument here is beginning to sound like the ones advanced by PCware programmers who NEED to get to the raw hardware. Remember, form liberates. > Yes, simplifying models are quite useful, but they are > not always appropriate to the task at hand. This is why an > object-oriented interfacing approach is a Good Thing. But it makes your programs huge. The program itself should have as little of the user interface as possible as an integral part of itself. If you need to go to a lower level, do it. But first make the easy things easy. "Hello World" in a windowing system shouldn't be more than 10 lines of code. Oh, and yes. I would LOVE to play around with Display Postscript. But it's never going to show up in today's PCs, and the way things are going it's gonna be a long time before it'll show up in any. Standards aren't just for the elite. -- `-_-' Peter da Silva. +1 713 274 5180. <peter@ficc.uu.net>. 'U` Also <peter@ficc.lonestar.org> or <peter@sugar.lonestar.org>. "It was just dumb luck that Unix managed to break through the Stupidity Barrier and become popular in spite of its inherent elegance." -- gavin@krypton.sgi.com
barnett@crdgw1.crd.ge.com (Bruce Barnett) (12/23/89)
I added comp.windows.misc to the discussion. In article <7391@ficc.uu.net>, peter@ficc (Peter da Silva) writes: >In article <18637@bellcore.bellcore.com> sjs@bellcore.com (Stan Switzer) writes: >> Yes, simplifying models are quite useful, but they are >> not always appropriate to the task at hand. This is why an >> object-oriented interfacing approach is a Good Thing. >But it makes your programs huge. The program itself should have as >little of the user interface as possible as an integral part of itself. I think there is a major difference of perspective here. Some people want environments that let them *build tools* as fast as possible If you can build the basic tool in a few hours, who cares if it's portable? Others want the *tools* to be as fast (and small) as possible. The target market is different, i.e. PC's vs. Workstations. I don't thing the two problems can have have one solution in the near term. Unless you make a PC like a workstation, with all of the extra costs, etc. Another solution Peter is looking for is something more portable than X. >If you need to go to a lower level, do it. But first make the easy things >easy. "Hello World" in a windowing system shouldn't be more than 10 >lines of code. Window systems have evolved so much in the last 10 years. However it is still changing. SunWindows failed the Hello World test. SunView is a better job. Xlib also failed, but the X intrinsics fixes that. (See David Rosenthal's paper in core.src/doc/HelloWorld). Window systems evolve. Tool kits get better. >Oh, and yes. I would LOVE to play around with Display Postscript. But it's >never going to show up in today's PCs, and the way things are going it's >gonna be a long time before it'll show up in any. >Standards aren't just for the elite. The problem the PC's users are facing is evolution. Remember when some "expert" said that 64K was enough for any application? The future PC will be a 486 with 4 Megs of memory for under $1000. You'll see X and NeWS on PC's once some vendor ships Unix V.4. I know there is no standard User Interface or library. But there is a lot more that is not standard. What about the imaging model? Bitmaps are not going to be the model used in the future. Already everyone is talking about outline/rescalable fonts. The PostScript model is even more powerful, and allows for hardware accelerators. Think about the job a bitmap programmer has to do to stretch and rotate a diagram. This is trivial in PostScript. How about the basic model of the user interface? People don't want stand-alone applications. They want to drag a file and drop it onto a tool. Or select several files or objects, and then start the application with the input being the items selected. They also want to cut some information from one tool, and paste in into another tool - like a column of numbers into a chart drawing tool, which in turn is inserted into a document. If you change the data in the table, the chart will be updated and so with the document. These sort of issues make a large difference in the style of programming used to develop the application. What is 10 lines using one model might be 10 pages in another. Selecting a standard now won't solve those problems. Sure, you'll have a product next year, but the year after that you will have to redesign it anyway. I'm sorry for ranting on and on. My old company was very short sighted. They might still be around if they decided to take a few short term risks that had long term benefits. Perhaps that is why I believe so much in new technology. Happy Holidays, everyone. -- Bruce G. Barnett <barnett@crd.ge.com> uunet!crdgw1!barnett
hugh@hoptoad.uucp (Hugh Daniel) (12/25/89)
I would like to point out that there is a version of NeWS for 640k MS-DOS
IBM-PC class machines, here is a note I had laying around about it.
||ugh Daniel
hugh@toad.com Grasshopper Group, +1 415/668-5998
hugh@xanadu.com 1996 Hayes St. San Francisco CA94117
--------------------------------------------------------------------
NewScript, a NeWS interaction clone for MS/DOS by TAG inc.
Technology Application Group inc.
10621 Bloomfield St., Suite 33
Los Alamitos, CA 90720 USA
213 430-9792
NewScript(tm) is a compact, high performance emulation of the NeWS,
for 286 and 386 machines running DOS or OS/2(tm). NewScript offers
an interactive user interface design environment for the development
and prototyping of NeWS compatible graphical interfaces.
Perfect for PostScript and NeWS class teaching! NewScript is based on the
PostScript language as defined by Adobe Systems Inc. with Events,
canvases, monitors, processes, and object PostScript extensions specified
by NeWS. NewScript emulates a subset of NeWS and PostScript. CPS,
network communications, and stroke fonts are not supported in version 1.0.
peter@ficc.uu.net (Peter da Silva) (12/27/89)
In article <9405@hoptoad.uucp> hugh@hoptoad.UUCP (Hugh Daniel) writes: > I would like to point out that there is a version of NeWS for 640k MS-DOS > IBM-PC class machines, here is a note I had laying around about it. From the description you included, it sounds like a teaching tool. Can you write a program in C on the Sun, move it to the PC, compile it, and run it under NewsScript? Or is it a Postscript system only? -- `-_-' Peter da Silva. +1 713 274 5180. <peter@ficc.uu.net>. 'U` Also <peter@ficc.lonestar.org> or <peter@sugar.lonestar.org>. "It was just dumb luck that Unix managed to break through the Stupidity Barrier and become popular in spite of its inherent elegance." -- gavin@krypton.sgi.com
hugh@hoptoad.uucp (Hugh Daniel) (12/29/89)
>From the description you included, it sounds like a teaching tool. Can you >write a program in C on the Sun, move it to the PC, compile it, and run it >under NewsScript? Or is it a Postscript system only? Right now it is a PostScript (NeWS really) only system with some serial I/O(I think). TAG ueses is to do user interfaces to run control equpment (milling machines etc.) ||ugh Daniel hugh@toad.com Grasshopper Group, +1 415/668-5998 hugh@xanadu.com 210 Clayton St. San Francisco CA94117
jordan@Morgan.COM (Jordan Hayes) (01/03/90)
Peter da Silva <peter@ficc.uu.net> writes: But first make the easy things easy. "Hello World" in a windowing system shouldn't be more than 10 lines of code. Sigh. When will people learn to code before blabing on USENET? This is in Motif ... == not 10 lines but the meat is only 8 lines ... === main(argc, argv) int argc; char **argv; { Arg sArgs[3]; Display *display; Widget topW; XmString str; XtAppContext app; XtToolkitInitialize(); display = XtOpenDisplay(app = XtCreateApplicationContext(), (String)NULL, "Joe", "Hodedo", NULL, 0, &argc, argv); topW = XtAppCreateShell(NULL, NULL, applicationShellWidgetClass, display, NULL, 0); str = XmStringCreateLtoR("Hello World", XmSTRING_DEFAULT_CHARSET); XtSetArg(sArgs[0], XmNlabelString, (XtArgVal)str); XtManageChild(XmCreateLabel(topW, "label", sArgs, 1)); XtRealizeWidget(topW); XtAppMainLoop(app); } /jordan
jesup@cbmvax.commodore.com (Randell Jesup) (01/03/90)
In article <4355@crdgw1.crd.ge.com> barnett@crdgw1.crd.ge.com (Bruce Barnett) writes: >The problem the PC's users are facing is evolution. Remember when some >"expert" said that 64K was enough for any application? The future PC >will be a 486 with 4 Megs of memory for under $1000. You'll see X and NeWS >on PC's once some vendor ships Unix V.4. Or maybe an '030 or '040 with 4 Meg... BTW, we (Commodore) already have announced (and demoed in NYC) Sys V.4 for the Amiga 2500 (admittedly not $1000 yet). X is also available for the Amiga and shipping (doesn't require Unix, or even an '020/'030). -- Randell Jesup, Keeper of AmigaDos, Commodore Engineering. {uunet|rutgers}!cbmvax!jesup, jesup@cbmvax.cbm.commodore.com BIX: rjesup Common phrase heard at Amiga Devcon '89: "It's in there!"
mayer@hplabsz.HPL.HP.COM (Niels Mayer) (01/04/90)
In article <634@s5.Morgan.COM> jordan@Morgan.COM (Jordan Hayes) writes: > But first make the easy things easy. "Hello World" in a > windowing system shouldn't be more than 10 lines of code. >Sigh. When will people learn to code before blabing on USENET? >This is in Motif ... > >== not 10 lines but the meat is only 8 lines ... === > Well, you can easily do a "hello world" in WINTERP in less than 10 lines. WINTERP is an interpretive environment for rapid prototyping applications using the Motif UI toolkit. It is based on the mini-lisp interpreter XLISP and makes extensive use of XLISP's object system as the application programmers interface to Motif. It is available for free on the X11r4 tape or via anonymous ftp from expo.lcs.mit.edu:contrib/winterp.tar.Z. You might think of WINTERP as client-side NeWS without the imaging model (??). Or you might think of WINTERP as a gnuemacs-like prototyping environment that uses widgets as it's primary UI interactor rather than textual buffers.... ---------- The following is an excerpt from a previous posting to comp.windows.x containing a 9 line hello world: ... WINTERP makes extensive use of XLISP's Smalltalk-like extensions for object oriented programming: All the Motif widget classes are actually implemented as XLISP classes, Xtoolkit functions become methods on the widget base class. Motif "Convenience Functions" become methods on particular classes. Because Motif Classes look like normal XLISP classes inside WINTERP, you may extend the functionality of existing widget classes in Lisp via subclassing, or by adding new methods to existing widget classes. Example -- evaluating the following form in WINTERP results in the display of a "hello world" window which sends me mail and prints "hello world" on stdout each time the button is clicked: (let* ((top_w (send TOP_LEVEL_SHELL_WIDGET_CLASS :new :XMN_TITLE "hello world" ;note auto string->XmString conv :XMN_ICON_NAME "hello world")) ;ditto (but_w (send XM_PUSH_BUTTON_WIDGET_CLASS :new :managed top_w :XMN_FONT_LIST "8x16"))) ;note auto string->FontList cv (send but_w :add_callback :XMN_ARM_CALLBACK '() '((system "echo \"Hello World Run!\" | mailx mayer@hplabs.hp.com") (format t "hello world\n"))) (send top_w :realize)) Once the "hello world" window is displayed, you can interactively modify the look and the functionality of the interface. For example, lets say I want to change the color of a widget on the display -- I give WINTERP the following command: (send (get_moused_widget) :set_values :XMN_FOREGROUND "white" :XMN_BACKGROUND "blue") and then click on the pushbutton widget created above. One can use the same technique to interactively change a widget's callbacks, eventhandlers, etc. For further information, take a look at the WINTERP source distribution's "examples" directory. Interesting mini-applications include a bitmap browser, a MH-based mail browser, and a grep-based file search browser. Other examples show you how to contruct menus, radio-boxes, etc. ... ------------------------------------------------------------------------------- Niels Mayer -- hplabs!mayer -- mayer@hplabs.hp.com Human-Computer Interaction Department Hewlett-Packard Laboratories Palo Alto, CA. *
net@tub.UUCP (Oliver Laumann) (01/04/90)
In article <4572@hplabsz.HPL.HP.COM> mayer@hplabs.hp.com (Niels Mayer) writes: > In article <634@s5.Morgan.COM> jordan@Morgan.COM (Jordan Hayes) writes: > > But first make the easy things easy. "Hello World" in a > > windowing system shouldn't be more than 10 lines of code. > >Sigh. When will people learn to code before blabing on USENET? > >This is in Motif ... > > Well, you can easily do a "hello world" in WINTERP in less than 10 lines. [Example program and WINTERP blurb deleted] This is how you would write it in `Elk' Scheme: ;;; -*-Scheme-*- (require 'xwidgets) (load-widgets shell label) (let* ((con (create-context)) (dpy (initialize-display con 'kraftbus:0 'hello 'demo)) (top (create-shell 'hello 'demo (find-class 'application-shell) dpy)) (w (create-managed-widget (find-class 'label) top 'label "Hello world"))) (realize-widget top) (context-main-loop con)) Note that the initialization of the application context and display is somewhat lengthy (by the way, I wonder why the initialization is missing in the WINTERP example). `kraftbus' is the name of the workstation on my desk (yes, the name is weird, if you want me to tell you the anecdote behind it, drop me a letter), so `kraftbus:0' obviously is the display name. One can use #f instead to indicate that the value of the $DISPLAY environment variable is to be used. The `require' form loads the Elk interface to the Xlib, Xt, and the Athena widget set (one would write "(require 'motif)" to load the interface to the OSF/Motif widgets). `find-class' creates a Scheme object of type `widget class' (widget classes are, like widgets and application contexts, first class objects). If the example had used the Athena command widget, one could have added a callback like this: (add-callback w 'callback (lambda (widget) ; do something )) or, using set-values!, (set-values! w 'callback (list (lambda (widget) ...))) -- Oliver Laumann net@TUB.BITNET net@tub.UUCP
mayer@hplabsz.HPL.HP.COM (Niels Mayer) (01/07/90)
In article <1132@tub.UUCP> net@tub.UUCP (Oliver Laumann) writes: > > [code fragment for hello-world in elk deleted] > >Note that the initialization of the application context and display >is somewhat lengthy (by the way, I wonder why the initialization is >missing in the WINTERP example). Because WINTERP already has the application context and the display initialized when it starts up. You also don't need to explicitly code an event handling loop since that is also implicit in WINTERP. You see, lisp forms sent to WINTERP's serverized lisp listener look just like another event to WINTERP -- there is no need to switch between a lisp-listener loop and an Xevent loop since the loops are merged. I did things this way because I wanted WINTERP-based applications to 1) be fully interactive -- unlike elk, there's no need to exit and reenter the X event loop in order to access the lisp listener. This means I can interpretively and interactively create, and modify an interface. 2) allow for WINTERP-based processes to be able to send messages to each other through the TCP-based serverized lisp listener. THis will allow for better application integration as applications can talk to each other. It is also a necessary feature in allowing real-time communications between the experimental multimedia and groupware applications that we are building. The Elk approach is more of a 1-to-1 correspondence to the Xtoolkit intrinsics calls, and is similar to my initial proof-of-concept "alpha" WINTERP that I hacked together out of ELI and the HP Xwidgets about a year ago. I found my "alpha" approach to be workable, but still a bit too verbose. Thus in the released "beta" WINTERP I opted to use XLISP's object system as the API to the Motif widget classes. This has resulted in a much cleaner design that allows me to eploit OOP features such as polymorphism, inherticance and subclassing on existing Motif widget classes. Furthermore, interactive use of the beta WINTERP is much more robust since you cannot accidentally call, for example, the function XmGetText() on a pushbutton widget class instance causing a core dump. In the "beta" WINTERP, XmGetText() is called in response to the message :GET_TEXT on instances of the XM_TEXT_WIDGET_CLASS; an "undefined method" error is signalled if you send that message to an instance of the wrong class. The assumptions and coding style must change drasticaly when coding in an object oriented model in compiled C (Xtoolkit/Motif) versus an interpreted object oriented lisp (WINTERP/XLISP).... So anyways, if I send the following form to WINTERP's serverized lisp listener (let* ((top_w (send TOP_LEVEL_SHELL_WIDGET_CLASS :new :XMN_TITLE "hello world" ;note auto string->XmString conv :XMN_ICON_NAME "hello world")) ;ditto (but_w (send XM_PUSH_BUTTON_WIDGET_CLASS :new :managed top_w :XMN_FONT_LIST "8x16"))) ;note auto string->FontList cv (send but_w :add_callback :XMN_ARM_CALLBACK '() '((system "echo \"Hello World Run!\" | mailx mayer@hplabs.hp.com") (format t "hello world\n"))) (send top_w :realize)) I can expect a "hello world" window to pop up as soon as WINTERP has finished evaluating the form. The receipt of the form is seen as a "lisp event" by WINTERP's XtMainLoop() and is sent off to the evaluator which in turn ends up calling the various Motif/Xt functions to create widgets. Upon return to the XtMainLoop, the windows are created, mapping and expose events are processed, and the windows appear on the screen... I see application contexts, display initializations, loading widgets, XtMainLoops and such as too much low-level noise that the WINTERP programmer really shouldn't have to deal with -- they should be transparent. One feature currently supported in Elk and not supported in WINTERP is the ability to dynamically load C object code. Although I wanted this feature in WINTERP, I explicitly decided against it due to the fact that (1) dynamic loaders are inherently unportable and my primary goal for the first public release of WINTERP were that it be easily portable (*); (2) I wrote "beta" WINTERP on an extremely tight schedule; (3) I didn't want to worry about dynamic loading because I had my hands full trying to understand Motif, the Xtoolkit, and the internals of XLISP. When I add dynamic loading to WINTERP, I hope to make it a dynamic auto-loader. PS: (*) -- I've received reports that WINTERP currently runs on the following machines: HP9000s3xx (68030), HP9000s8xx (HP PA-RISC), HP-Apollo DN-*, Sun3, Sun4, MIPS, DEC 3100. ------------------------------------------------------------------------------- Niels Mayer -- hplabs!mayer -- mayer@hplabs.hp.com Human-Computer Interaction Department Hewlett-Packard Laboratories Palo Alto, CA. *
net@tub.UUCP (Oliver Laumann) (01/08/90)
In article <4585@hplabsz.HPL.HP.COM> mayer@hplabs.hp.com (Niels Mayer) writes: > > The Elk approach is more of a 1-to-1 correspondence to the Xtoolkit > intrinsics calls, and is similar to my initial proof-of-concept "alpha" > WINTERP that I hacked together out of ELI and the HP Xwidgets about a year > ago. I found my "alpha" approach to be workable, but still a bit too > verbose. Since we are using Elk-Scheme as the extension language for a `real' software package (an ODA-based document processing system), we do need to be able to access the full power of the X toolkit, for instance, our application must be able to open more than one display (for shared editing of a document). Of course, funtionality like opening a display and creating an application context (the things that you called `noise') can be hidden in an additional `layer' if desired; building abstractions is one of the things that can be done in Scheme quite elegantly (which is one reason why we think that Scheme is better suited as a general extension language than, for instance, Xlisp). [Since this has no longer anything to do with NeWS, I have directed follow-ups to comp.windows.x] Regards, -- Oliver Laumann net@TUB.BITNET net@tub.UUCP