[net.micro.mac] Porting UNIX Applications to the Mac

gwe@cbdkc1.UUCP ( George Erhart x4021 CB 3E373 DEBR ) (09/12/86)

I am currently involved in a second try to port Dave Betz' SDB (Simple
DataBase) to the Mac. The first try was using Megamax C and it was 
far from successful. The second is with LightSpeed C and it too
is having problems.

My plan was to port the UNIX version straight out, get it running, and then
convert it into a Mac Application. (You know ... menus, dialog boxes, fonts,
etc ...) Unfortunately, it appears that most Mac C compilers do not come
with very good libc.a implementations. The one for MegaMax was full of
bugs.  I am still having random crashes in the token parsing stuff from 
the LSC version.

Does anyone else have any comments or experience with this kind of porting?

-- 
George Erhart at AT&T Bell Laboratories Columbus, Ohio 
614-860-4021 {ihnp4,cbosgd}!cbdkc1!gwe

tim@hoptoad.uucp (Tim Maroney) (09/15/86)

This issue is going to become more and more important as the UNIX Mac is
released.  Apple has committed themselves to preserving the Mac interface
while also supporting UNIX(tm).  But my gremlins (actually, experience with
the Mac Programmer's Workshop) report that they don't really have a complete
or general paradigm for doing this yet.  I'd like to see some discussions on
how this ought to be done.

Briefly, the problem is this.  On the Mac, all user applications are graphic
applications.  On UNIX, very few applications use graphics beyond those
attainable on a hardcopy character-graphics terminal.  While the flexibility
of the UNIX system for an expert programmer has never been approached by any
other operating system, it is notoriously unfriendly and mystifying to naive
users.  This is too bad, because many of its applications, such as grep,
would be very useful to any user at any level of experience.

Most bitmapped UNIX systems just ignore the problem and pretend that it is
sufficient to use bitmapped output devices to provide multi-window terminal
emulators.  The Mac shows that this is not true, that for user interfacing
every application should be a graphics application, that the presentation of
options to the user as controls and menu items achieves much more user
friendliness.  But this leaves open the issue of integrating the existing and
extremely high-quality UNIX system into the Mac's graphics-intensive
environment.

To make matters worse, it is impossible to just change the applications to
use a bitmapped user-friendly interface.  One of the great strengths of UNIX
is the ability to create multi-process programs, even on the fly, by using
pipes and i/o redirection to chain together multiple programs.  This is made
possible only because of the use of a character-stream, non-graphics
interface for most applications.  If this is lost, then no way is it UNIX.
But if it is retained as a user interface, no way is it either Mac-like or
novice-friendly.

To take a concrete example, the grep program provides an extremely useful
search facility.  On the Mac, it should be a dialog box allowing
specification of a range of files to search (using an extended standard file
interface) and a regular expression to search for, with help windows to
explain the use of regular expressions.  If this is the only interface, it
becomes impossible to use grep in multi-process programs.  So it would
appear that both interfaces need to be retained, but in different contexts;
and this is true not only of grep, but of most other applications as well.

There seem to me to be two basic options for solutions to this problem (or
to put it in the usual jargon, this is the top level of the decision tree).
First, we may modify the existing UNIX applications.  Second, we may make
some sort of separate input/output filter for each application.  In either
case, we need some way of detecting the type of the input, output, and error
channels, which may be tty (or pseudo-tty) windows, pipes, files in the file
system, or bitmapped i/o systems.  A simple ioctl will suffice for this
purpose.  In the first solution, the type checking is done by the
application itself; in the second, it is done by the "shell" (which would
presumably be something like Servant).

It seems cleaner to me to set up separate i/o filters, although this would
probably increase system overhead.  It is possible that some specification
language for such i/o filters could be created that would obviate the need
to write a C program for filtering and also not require that a separate
process run to mediate between the program and the user.  Hacking the UNIX
applications themselves seems like a much bigger job, and one that would be
likely to introduce new bugs into the applications, which at this point are
fairly well-tested and bug-free.

Any other ideas on this subject?
-- 
Tim Maroney, Electronic Village Idiot and Self-Assigner of Pretentious Titles
{ihnp4,sun,well,ptsfa,lll-crg,frog}!hoptoad!tim (uucp)
hoptoad!tim@lll-crg (arpa)

"Little people, with tiny brains; little bullets flowing in their veins!
What do they want?  They want you!" - Oingo Boingo, "Tiny Guns"

mlandau@Diamond.BBN.COM (Matt Landau) (09/15/86)

In article <1091@hoptoad.uucp> tim@hoptoad.UUCP (Tim Maroney) writes:
>
>Briefly, the problem is this.  On the Mac, all user applications are graphic
>applications.  On UNIX, very few applications use graphics beyond those
>attainable on a hardcopy character-graphics terminal.  
>
>To make matters worse, it is impossible to just change the applications to
>use a bitmapped user-friendly interface.  One of the great strengths of UNIX
>is the ability to create multi-process programs, even on the fly, by using
>pipes and i/o redirection to chain together multiple programs.  This is made
>possible only because of the use of a character-stream, non-graphics
>interface for most applications.  

There was a very interesting presentation at this year's Summer Usenix
on communicating data between processes in different windows existing
in a graphical user environment.  It was called "A Data-Flow Manager for
an Interactive Programming Environment", and was given by Paul Haeberli
of Silicon Graphics.  The accompanying paper may be found in your local
copy of the 1986 Summer Usenix Proceedings.  The system amounted to a
way to pipe data between graphical manipulation and display programs, and
provided a user-interface that made specifications of input and output 
sources easy (lines and arrows, etc.)
-- 
 Matt Landau      	 		BBN Laboratories, Inc.
    mlandau@diamond.bbn.com		10 Moulton Street, Cambridge MA 02238
 ...harvard!diamond.bbn.com!mlandau     (617) 497-2429

jdb@mordor.ARPA (John Bruner) (09/15/86)

Tim Maroney raises some good points.  Before I plunge into substance,
I'd like to say something about user interfaces for the record.  [Please
note that this next paragraph expresses my *opinion*.  I am not trying
to force my views upon the world; I just want to express a contrary
opinion.]

I'm not sure that I agree that the Mac has "proven" that a menu-dialog
interface to all programs is best.  I would agree that such an
interface is easier for novice users; however, having to continually
move from the keyboard to the mouse and back again to do *anything*
on the Mac is one of the most worst features of its user-interface
for me.  I am far more productive with "vi" on UNIX than with any of
the mouse-based editors I've run across on the Mac.  Similarly, a
command-line interface (coupled with history and aliases) lets me get
my work done a lot quicker than a mouse-based interface.  I have no
use for things like "dbxtool" on the Sun -- I am considerably more
productive with the command-line interface.

User preferences vary, and I'm sure my opinion on them isn't shared
by everyone.  My point, however, is that it is not sufficient to choose
between a mouse interface and a dialog interface solely upon the type
of output device.  I would prefer a command-line interface even on a
bitmapped screen, and I suspect many other "power users" of UNIX would
also.

In addition to filters, the command-line interface to UNIX programs is
required for terminals connected by serial lines.  Bitmapped systems
are connected to standard terminals -- dialups in particular are quite
common.

So, I agree that the command-line interface to UNIX must be retained.
Now, what is the best method by which to add a visual interface?

I'd propose that a visual interface to UNIX be a separate program, not a
series of changes to individual programs.  This is consistent with the
treatment of pattern-matching in the shell -- it is performed in one place
rather than many.  It allows users to write their own visual shells.
[How many people have actually written their own command-line shell?]
It also allows a program written on one machine (e.g. a VAX) to be used
directly on (e.g.) a Macintosh.

It is unfortunate that the only interface to UNIX programs is the
untyped argv list.  At this late date, perhaps the best solution is
to define a program-interface file which specifies the names and
types of the arguments to a given program.  A visual shell would
read this file upon startup.  Programs not named would be invoked in
the traditional fashion.  (Doesn't someone's menu-based interface to
UNIX already work this way?)  When a new program is installed, the
system manager would add the interface definition to the appropriate
file.  (This could be automated as part of a "make install".)

What form should such an interface file take?  A Lisp (or Lisp-like)
definition would be the most flexible, but would presumably be more
difficult to write and might require a sizeable committment to Lisp
in the visual shell (making it large and perhaps too slow?).  A simpler
definition (perhaps expressed as a grammar with some attach semantic
information) might not be flexible enough.

We've actually discussed a lot of the issues in my group here at
LLNL because of the development of Amber (a Multics-like operating
system for our locally-designed machine).  If there is significant
interest in this topic, I'll see if I can dig up and summarize the
design decisions.  [Presently, the Amber command processor works on
cursor-addressible terminals, providing pop-up help menus, command-
filename-, and argument name-completion, and an EMACS-like line editor
for old command retrieval and editing.]
-- 
  John Bruner (S-1 Project, Lawrence Livermore National Laboratory)
  MILNET: jdb@mordor [jdb@s1-c.ARPA]	(415) 422-0758
  UUCP: ...!ucbvax!decwrl!mordor!jdb 	...!seismo!mordor!jdb

wetter@tybalt.caltech.edu.Caltech.Edu (Pierce T. Wetter) (09/16/86)

In article <15372@mordor.ARPA> jdb@mordor.UUCP (John Bruner) writes:
>  I am far more productive with "vi" on UNIX than with any of
>the mouse-based editors I've run across on the Mac. 

  Ha Ha Ha Ha Ha Ha Ha Ha HaHa Ha Ha Ha Ha Ha Ha Ha Ha
Ha Ha Ha Ha Ha Ha Ha Ha Ha
Ha Ha Ha Ha Ha Ha Ha Ha Ha
Ha Ha Ha Ha Ha Ha Ha Ha Ha
Ha Ha Ha Ha Ha Ha Ha Ha Ha
     Considering my experiences with vi (holding the up/down/left/right keys
causes some versions to delete random snatches of text) this is the most 
hilarious thing i've ever heard. When I'm programming  the thing I do most
often is move around in the file. You cant tell me that pointing and clicking
with the mouse isn't faster then banging away on random cursor keys. It's true
that you can go directly to a specific line number but you can't easily go up
five lines and over twenty characters. Also a mouse based editor is much easier
to cut & paste in (which if you looked at code I've written  you'll know why
I like this--" Who needs a for next loop I'll just paste it in five times") 

     Also, you need to move your hands away from the "home row" whenever you 
hit the escape key or any other "control key". The mouse isn't any worse
( unless you have an infinate typing speed). However, there is one small
thing I should mention, I'm using a trackball instead of a mouse (desk space
Yay!!!!!!!). If you are using a mouse on a towel (yucky surface) I might
believe you but otherwise. Snicker Snicker...

Nuff Said

Pierce wetter

gaynor@topaz.RUTGERS.EDU (Silver) (09/16/86)

Pierce T. Wetter (...!tybalt.caltech.edu!wetter) writes:

> Ha Ha Ha Ha Ha Ha Ha Ha Ha
> Ha Ha Ha Ha Ha Ha Ha Ha Ha
> Ha Ha Ha Ha Ha Ha Ha Ha Ha

I think it's just this kind of discussion that John Bruner was trying
to avoid when he expressed a preference, with all the disclaimers that
he was expressing his opinion.  Although I myself would enjoy hearing
your (netwide) opinions on the subject of user interfaces, I wouldn't
want to read them hear.  It is enough to say, "The interfaces Foo,
Bar, Bletch-II, and even Bletch are popular, and will have to be
considered in this discussion.".  Discussions of their relative merits
is better held in, oh, probably net.cog-eng (or if there's a
talk.interface going...).

Just trying to nip a heated-argument-that-doesn't-belong-here in the bud,
Silver.

Silver (argyros (greek), argentum (latin))

  Silver is the whitest and most reflective of the metals, also having
  the highest thermal and electrical conductivity.  It is second only
  to gold in malleability and ductility.

  name: Andy Gaynor
  e-address: ...!topaz!gaynor
  address: 19 Evergreen Drive, Denville, 7 Raven Drive, Morristown
  phone: 627-8953, 267-8660

  atomic symbol: Ag       atomic number: 47  atomic weight: 107.88
  isotopes: 107 (0.5135), 109 (0.4865)       melting point: 950.5 C
  boiling point: 1950 C   density: 10.49     hardness: 2.5 - 3.0

dave@onfcanim.UUCP (Dave Martindale) (09/16/86)

In article <816@Diamond.BBN.COM> mlandau@slate.BBN.COM (Matt Landau) writes:
>
>There was a very interesting presentation at this year's Summer Usenix
>on communicating data between processes in different windows existing
>in a graphical user environment.  It was called "A Data-Flow Manager for
>an Interactive Programming Environment", and was given by Paul Haeberli
>of Silicon Graphics.  The accompanying paper may be found in your local
>copy of the 1986 Summer Usenix Proceedings.  The system amounted to a
>way to pipe data between graphical manipulation and display programs, and
>provided a user-interface that made specifications of input and output 
>sources easy (lines and arrows, etc.)

The great thing about this is that it allowed you to set up arbitrary
data-flow graphs, not just pipes.  This is important for interconnecting
3D graphics tools, since one program may have several "inputs".

What it does *not* do is allow you to set up a straight pipeline, the most
common form of parallelism in UNIX, as fast as just typing '|'.

One of the nice things about UNIX is the rapidity with which you can
put together "paste x y z | egrep pattern | sort | awk 'commands'".
To do this while staying in the MAC user interface model would require
that the shell be made into a graphics program, with some sort of
graphical way of building all of the constructs that you can currently do
with a command line.

Now, a graphical tool for building pipelines isn't too hard to imagine.
But the shell (any of them) is actually a quite powerful programming
language, and I find it hard to imagine a graphical tool with all the
flexibility of the shell (loops, conditionals, background processes,
argument processing) that would not be incredibly clumsy to use, just
because of all the possible choices.

So, a question:  If you had the best programming team in the world
available, able to implement any consistent design you came up with,
how *would* you design a shell?

bill@utastro.UUCP (William H. Jefferys) (09/16/86)

In article <981@cit-vax.Caltech.Edu>, wetter@tybalt.caltech.edu.Caltech.Edu (Pierce T. Wetter) writes:
> In article <15372@mordor.ARPA> jdb@mordor.UUCP (John Bruner) writes:
> >  I am far more productive with "vi" on UNIX than with any of
> >the mouse-based editors I've run across on the Mac. 
> 
>   Ha Ha Ha Ha Ha Ha Ha Ha HaHa Ha Ha Ha Ha Ha Ha Ha Ha

I am in 100% agreement with this. In my opinion, vi is the *worst*
screen-oriented editor that I have ever had the misfortune of using.
I am always finding new "features" that I wasn't aware of. Unfortunately,
the new features I discover usually wipe out random pieces of text
in mysterious ways that are difficult to reverse.

It all comes of trying to make "ed" look like a screen editor. What
a kludge!

-- 
Glend.	I can call spirits from the vasty deep.
Hot.	Why, so can I, or so can any man; But will they come when you
	do call for them?    --  Henry IV Pt. I, III, i, 53

	Bill Jefferys  8-%
	Astronomy Dept, University of Texas, Austin TX 78712   (USnail)
	{allegra,ihnp4}!{ut-sally,noao}!utastro!bill	(UUCP)
	bill@astro.UTEXAS.EDU.				(Internet)

len@geac.UUCP (Leonard Vanek) (09/16/86)

In article <15372@mordor.ARPA> jdb@mordor.UUCP (John Bruner) writes:
>
>User preferences vary, and I'm sure my opinion on them isn't shared
>by everyone.  My point, however, is that it is not sufficient to choose
>between a mouse interface and a dialog interface solely upon the type
>of output device.  I would prefer a command-line interface even on a
>bitmapped screen, and I suspect many other "power users" of UNIX would
>also.
>
The above point leads me to wonder about the use of the two
editors that come with the Mactintosh version of the Aztec C
compiler.

How many users of Aztec C (or any other Mac compiler that
offers the choice) use the vi-like Z editor or the
mouse-based Edit? 

I personally agree with John, that both options should be
retained -- regardless of the hardware. In fact, we at Geac
are designing a user interface that will have that very
property. We are trying to arrange it so that it is not
necessary to choose a priori which mode a user is operating
in, but allow the user to switch between input modes
depending on how easy each request is to express in each of
the modes.

Len
-- 
---------------------------------------------------------------------
Leonard Vanek                       phone (416) 475-0525
Geac Computers International
350 Steelcase Rd. West              USENET ... !utzoo!yetti!geac!len
Markham Ontario L3R 1B3
Canada

Note: My Usenet path is subject to change on short notice!

mwm@eris.berkeley.edu (Mike Meyer) (09/17/86)

In article <981@cit-vax.Caltech.Edu> wetter@tybalt.caltech.edu.UUCP (Pierce T. Wetter) writes:
>In article <15372@mordor.ARPA> jdb@mordor.UUCP (John Bruner) writes:
>>  I am far more productive with "vi" on UNIX than with any of
>>the mouse-based editors I've run across on the Mac. 
>
>     Considering my experiences with vi (holding the up/down/left/right keys
>causes some versions to delete random snatches of text) this is the most 
>hilarious thing i've ever heard.

Which just goes to show that you haven't much experience with vi.

>You cant tell me that pointing and clicking with the mouse isn't faster
>then banging away on random cursor keys.

Actually, I can. Somewhere I've got a paper describing a study done on
editor interfaces, and it turns out that the fastest interface - in
general - is a foursome of arrow keys plus function keys. Second is an
emacs-like interface (vi wasn't in the study), and third is the mouse.
Finding the mouse seems to be the killer.

>It's true that you can go directly to a specific line number but you
>can't easily go up five lines and over twenty characters. Also a mouse
>based editor is much easier to cut & paste in (which if you looked at
>code I've written you'll know why I like this--" Who needs a for next
>loop I'll just paste it in five times")

Being an emacs user, the thing that I most like about the mouse
interface is the ability to bounce to text in another window without
worrying about changing windows. But this is why my Amiga emacs has 24
bindable mouse buttons; so I can get LOTS of mouse functionality when
I start using it. I move between the two modes regularly.

Of course, cut in paste with or without the mouse is equally hard: go
to one end, mark, go to the other end, cut. The only real difference
is the moving. It's easier to do all this with whatever my hands are
on, be it the mouse or the keyboard.

>     Also, you need to move your hands away from the "home row" whenever you 
>hit the escape key or any other "control key".

Hmm. Seems that the ESC key on my Sun is easily reachable by the ring
finger of my left hand. In fact, I hit the F1 key (caps lock) above it
so often that I set it up to be an ESC key also. Of course, I have big
hands.

	<mike

mac@esl.UUCP (09/17/86)

In article <981@cit-vax.Caltech.Edu> wetter@tybalt.caltech.edu.UUCP 
(Pierce T. Wetter) comments on what John Bruner writes:
>In article <15372@mordor.ARPA> jdb@mordor.UUCP (John Bruner) writes:
>>  I am far more productive with "vi" on UNIX than with any of
>>the mouse-based editors I've run across on the Mac. 
>
>  Ha Ha Ha Ha Ha Ha Ha Ha HaHa Ha Ha Ha Ha Ha Ha Ha Ha
>Ha Ha Ha Ha Ha Ha Ha Ha Ha

	I use "cat | cc -O " myself.
-- 
------------------------------------+-----------------------------------------+
| Michael Mc Namara                 |  MM MM MM    OO   SSS   AAA   II  CCCC  |
| ESL Incorporated                  |   M   M  M  O  O S         A   I C    C |
| ARPA: mac%esl.UUCP@ames.ARPA      |   M   M  M  O  O  SSS   AAAA   I C      |
|       mac%esl.UUCP@shasta.ARPA    |   M   M  M  O  O     S A   A   I C    C |
|       mac%esl.UUCP@lll-lcc.ARPA   |  MM   M  M   OO   SSS   AAA A III CCCC  |
------------------------------------+-----------------------------------------+
| Note: esl used to be called tflop; the path mac%tflop will still work awhile|
------------------------------------+-----------------------------------------+

rb@cci632.UUCP (Rex Ballard) (09/17/86)

In article <1091@hoptoad.uucp> tim@hoptoad.UUCP (Tim Maroney) writes:
>This issue is going to become more and more important as the UNIX Mac is
>released.  Apple has committed themselves to preserving the Mac interface
>while also supporting UNIX(tm).  But my gremlins (actually, experience with
>the Mac Programmer's Workshop) report that they don't really have a complete
>or general paradigm for doing this yet.  I'd like to see some discussions on
>how this ought to be done.
>
>Briefly, the problem is this.  On the Mac, all user applications are graphic
>applications.  On UNIX, very few applications use graphics beyond those
>attainable on a hardcopy character-graphics terminal.

The problem is a difference in concept.  Unix creates a "stream of bytes"
which can be treated as a "stream of bytes" OR a "stream of objects".
In Unix, common objects include letters, words, lines, paragraphs, and
pages.  Applications of various "classes" such as find, sort, grep, and
awk, are actually subsets of the same type of record.  The important factor
here is that information that may be part of a larger set of classes, can
be extracted for use by smaller class operators.  C source can be "grepped"
for comments that can be manipulated by "awk" into information that can
be used by sort, join, lorder, find, and other "delimited field objects".

The Mac currently supports the concept of a "Stream of Objects", but objects
are often defined and remain unique to the application which creates them.
A "box" in MacProject may be quite different than a "box" in MacDraw or
MacPaint.  The clipboard and scrapbook are capable of supporting a subset
of these objects, but the ability to transform objects is not considered
mandatory to the application.

Such transforms are not impossible.  Other systems, which at least emulate
the Mac user interface, also define a standard set of objects, with the
capability for extensions.  Postscript has this capability as well.
VDI type interfaces are a key element.  A full VDI interface can take
"standard input" from a mouse/keyboard, or file, and display it to a
"bit-map screen", an "ACRTC device", a Laser Printer, or a disk file,
without knowing or caring which device is the output, or where the
output will go.

It may be possible to for example "grep" for "boxes containing text pattern",
but only if "boxes containing text pattern" are defined in a standard way,
such as group(box(x1,y1,x2,y2),text(x,y,string)).

Parsing of these groups and object streams requires an actual parser, but
should be possible, even simple to do.  A good test of such a parser would
be to output in "human-readable text form" any input file in "standard
stream of objects file", and have the "human readable form" become input
to a parser which will convert it back into "stream of objects" form.
Now you can put standard text filters, as well as "stream of object" filters
between the to resources.

Another concept that is important is that of "strings" as well as "packets".
Packets require that you know about certain information inside the packet
(such as number of objects, length in bytes,...) before the packet can
be sent.  Strings simply require an "end of string" delimiter.  A simple
object of this type could be added to the existing archetecture and
would enable creation of objects larger than the storage space available,
very important when only parts of a collection are needed.

>While the flexibility
>of the UNIX system for an expert programmer has never been approached by any
>other operating system, it is notoriously unfriendly and mystifying to naive
>users.  This is too bad, because many of its applications, such as grep,
>would be very useful to any user at any level of experience.

This is a valid point.  A few new products, such as Office-Power, GNU Emacs,
VSH, and a large assortment of other "visual shells" have made good progress
in this direction, but are most often limited by the weaknesses of the
"terminal interface" rather than the archetecture.  Building "classes"
of operators is more difficult, but not impossible.  The object oriented
design, rather than object oriented language, is all that is often needed.

>Most bitmapped UNIX systems just ignore the problem and pretend that it is
>sufficient to use bitmapped output devices to provide multi-window terminal
>emulators.  The Mac shows that this is not true, that for user interfacing
>every application should be a graphics application, that the presentation of
>options to the user as controls and menu items achieves much more user
>friendliness.

It is true, to a point, that each application should have a "graphics
interface" on the front end.  But it is also appropriate to have one
of the options be "text arguments", or function keys.  In addition,
the hierarchy of menus could be three dimensional, or even deeper.  For
example, the top line options might change as the various options are
scanned, allowing search of say 64 options using a simple 8x8 matrix,
of which only the options for the given menu selection are given.

>But this leaves open the issue of integrating the existing and
>extremely high-quality UNIX system into the Mac's graphics-intensive
>environment.

Try to think of it this way, the best part of UNIX is it's "back end"
or "application to application data compatibility".  The best part of
Mac (most of the time) is it's "front-end" intuitive graphics user interface.

>To make matters worse, it is impossible to just change the applications to
>use a bitmapped user-friendly interface.  One of the great strengths of UNIX
>is the ability to create multi-process programs, even on the fly, by using
>pipes and i/o redirection to chain together multiple programs.  This is made
>possible only because of the use of a character-stream, non-graphics
>interface for most applications.  If this is lost, then no way is it UNIX.
>But if it is retained as a user interface, no way is it either Mac-like or
>novice-friendly.

How about the ability to "draw circuits" of pipelines and filters for
"batch type jobs".  In fact, "tees" could get very interesting.  A "data
flow diagram" with prompts for each member of the circuit could also
be useful.  If input format and output format could be specified, it
might even be possible to normally restrict "next in chain" options
to those commands which create/use the appropriate format.  Of course,
it should be possible to enter text stream commands at some level as well.

As mentioned before, byte-streams and graphics DATA interfaces are not
necessarily mutually exclusive.  Conversely, character interfaces and
character streams are not necessarily mutually inclusive.  Try putting
a "pipe" between your standard input and VI if you need convincing.  A
"pipe" between VI and standard output might actually be useful (VI
would only need one definition of "termcap" and a "curses interface"
similar to those used by plot, could do the conversion to specific
terminal codes).  For editors, it might not be necessary to have
"streaming" capability, proprietary formats, during the actual editing,
might also have legitimate use (VI and various other interactive
editors put the proprietary format file in /tmp or /usr/tmp, often
under a process id type configuration.  The only special need is that
the final product be either saved or convertable to, a "standard data
interface format".

>To take a concrete example, the grep program provides an extremely useful
>search facility.  On the Mac, it should be a dialog box allowing
>specification of a range of files to search (using an extended standard file
>interface) and a regular expression to search for, with help windows to
>explain the use of regular expressions.

So far, not really a problem.  I can generate
'>grep 'object >' using either a text specification, or a visual interface
which creates the text specification.  If you wanted to be really perverse,
you could set up binary "argv, argc, and env", but that may be and extra
step.

>If this is the only interface, it
>becomes impossible to use grep in multi-process programs.

Only if you begin execution immediately.  Your "shell" parses for a complete
command in unix, your "Mac Shell" could wait until you pressed an "O.K."
dialogue box for the "Shell Command".  The command(s) which make up the
stream could be done as picture drawings, even with a "save" feature.
If you wanted to make it real interesting, you could "display" text mode
input versions.

>So it would
>appear that both interfaces need to be retained, but in different contexts;
>and this is true not only of grep, but of most other applications as well.

For matters of taste, this is true, but again, the two can compliment rather
than conflict with each other.

>There seem to me to be two basic options for solutions to this problem (or
>to put it in the usual jargon, this is the top level of the decision tree).

>First, we may modify the existing UNIX applications.

If you mean, modify the actual method "grep" uses for parsing it's arguments,
this may not be necessary.  In reality, you need a hybrid between the
"shell" and the "man" to create a visual shell that can create "standard
exec and popen" type calls for the shells.

>Second, we may make
>some sort of separate input/output filter for each application.

Again, transforming from one common form to another is not out of the question.
This however does not need to be done in each application.

>In either
>case, we need some way of detecting the type of the input, output, and error
>channels, which may be tty (or pseudo-tty) windows, pipes, files in the file
>system, or bitmapped i/o systems.

This is the "magical" feature of VDI.  What you will need is drivers which
use the standard "Virtual device" format, and transform tasks to convert
from one type to the other, hopefully in a "per object" mode.  Editors
should issue VDI calls directly (the same way they issue quickdraw calls,
but implementation of quickdraw calls rather than use of them become device
dependent.  In other words if you.

	fd1=fopen("window","w");
	fd2=fopen("diskfile",w);
	box(fd1,x,y,x2,y2);
	box(fd2,x,y,x2,y2);

the second box command might simply be a write of whatever the token for
"box" was and the binary co-ordinates.  So long as all applications agree
on one definition of "token for box", your all set.  Applications that
didn't use the standard set would have to provide the transforms to AND
from their proprietary format to at least one of the "general purpose"
formats.  Apple would be responsible for transforming from one "general
purpose" format to another.  For example "scrapbook to postscript" and
"postscript to scrapbook".

>A simple ioctl will suffice for this
>purpose.  In the first solution, the type checking is done by the
>application itself; in the second, it is done by the "shell" (which would
>presumably be something like Servant).

An important factor here is that the input type and output type of not
only the files, but also the applications must be available to the shell.

>It seems cleaner to me to set up separate i/o filters, although this would
>probably increase system overhead.

This is one option when two applications have incompatible formats.  In this
case it might be necessary to have two transform filters.  For example
MacDraw.Print GCCfile |MacDraw.to_scrap |MacWrite.from_scrap|MacWrite.grep|\
MacWrite.to_vdi|Laserwriter

Yes this is extra overhead, but it might not be necessary to do it often.
This might be used to extract a small portion of the file.  The important
thing here is that A) only a portion of the application needs to be running,
B) The user isn't required to remember where in the sequence he is when
he takes a break (with data stuck in the scrap).  He can also do something
else while waiting.

>It is possible that some specification
>language for such i/o filters could be created that would obviate the need
>to write a C program for filtering and also not require that a separate
>process run to mediate between the program and the user.

BINGO!!!  Apple already has three possible specifications, subsets and
supersets could be added, possibly even by the "install" of running and
application (sounds more like OS-9 all the time).

>Hacking the UNIX
>applications themselves seems like a much bigger job, and one that would be
>likely to introduce new bugs into the applications, which at this point are
>fairly well-tested and bug-free.

You may want super-graphics versions of certain types of filters, but
it is probably a good idea to keep the UNIX versions as-is.

One of the advantages of doing text-mode formats, is that humans are excellent
pattern recognisers.  They can often identify a pattern which would not
be obvious to the computer, the parser, or the user, when only binary
modes are available.

>Any other ideas on this subject?
>-- 
>Tim Maroney, Electronic Village Idiot and Self-Assigner of Pretentious Titles

There are a few, hopefully constructive ideas, for getting the best of BOTH
UNIX and MAC features, without giving up too much of either.

Rex Ballard.

rae@unicus.UUCP (Clith de T'nir) (09/17/86)

In article <15372@mordor.ARPA> jdb@mordor.UUCP (John Bruner) writes:
>...  I would prefer a command-line interface even on a
>bitmapped screen, and I suspect many other "power users" of UNIX would
>also.

In article <137@geac.UUCP> len@geac.UUCP (Leonard Vanek) writes:
>The above point leads me to wonder about the use of the two editors that
>come with the Mactintosh version of the Aztec C compiler.
>
>I personally agree with John, that both options should be retained --
>regardless of the hardware.
>
>.. allow the user to switch between input modes depending on how easy
>each request is to express in each of the modes.

When using Aztec C, one may run a Mac program specifying arguments which must
be valid filenames (equivalent to selecting these files as icons together with
the application and then double-clicking).  Now, we could adapt mac programs
fairly painlessly to Unix by allowing any series of strings, not just filenames,
to be passed to applications.  Thus from the Unix side, Mac programs would be
fairly painless to use.

Now as for the Mac side, how do we pass strings to programs?  In the Finder/
Servant, perhaps one could click in the middle of whiteness, creating a text
item, a la MacDraw/MacPaint, and then select that along with the program
before double-clicking.

For pipes, they would use resources rather than straight text.  For Unix
programs, these would always be TEXT resources, but this need not be the case
for other programs.  Hopefully someone more intelligent than I might
think of a way to do this in a painless way so that no extra setup would be
required by the Unix programs like diff, grep etc. (ie no rewriting of code!)...

As for aliases/shell functions, there should be an artifact that would be
called a "Proxy Icon" that is basically a symbolic link to a real icon.  Then
these proxies and text items could be grouped and either put in a folder or
merged into a special icon that, when double-clicked (or perhaps command- or
option-double-clicked in the case of the folder) runs as if the text and the
given application were double-clicked.

A bit long-winded, but I hope you get the idea..  Please feel free to tell me
how foolish I am (preferable in reasonable terms :))
-- 
				"My surname is Li and my personal name is Kao,
				 and there is a slight flaw in my character."

Reid Ellis, aka
Clith de T'nir	{decvax,allegra,ihnp4,pyramid}!utzoo!utcs!yetti!unicus!rae
				or...	    seismo!mnetor!yetti!unicus!rae

dillon@CORY.BERKELEY.EDU (Matt Dillon) (09/17/86)

	UNIX implies all sorts of stream commands and their combination
via pipes.  This implies some sort of shell, unless you can think of a way
to create such constructions from a window enviroment.  It may seem
simply enough to state 'everything can be made user friendly', but it isn't
practical for EVERYTHING, especially UNIX related things.

	The reason VI and EMACS are so popular is simply because they can do
anything you want them to do.  You can fit only so much in a menu-based
system (and going to many levels of sub-menu's means the user can no longer
do operations 'with a flick of his mouse button').  UNIX was originally and
still is a programmer's development enviroment.

					-Matt

dubois@uwmacc.UUCP (Bill Winkle) (09/18/86)

>>> I am far more productive with "vi" on UNIX than with any of
>>> the mouse-based editors I've run across on the Mac. 

>> Ha Ha Ha Ha Ha Ha Ha Ha HaHa Ha Ha Ha Ha Ha Ha Ha Ha

> I am in 100% agreement with this. In my opinion, vi is the *worst*
> screen-oriented editor that I have ever had the misfortune of using.
> I am always finding new "features" that I wasn't aware of. Unfortunately,
> the new features I discover usually wipe out random pieces of text
> in mysterious ways that are difficult to reverse.

My experience is different.  The new things I find out about periodically
are useful to me.  Vi is, for me, a productive editing environment, so
much so that I regularly write programs with it and then send the stuff
to my Mac for compiling and debugging.  And when I know I'm going to
make a lot of changes, I send it back to the Vax.

More general comment:
It's true that mouse-based editors make it easier to perform some of
the motion commands (e.g., 3 lines up, 20 characters left).  But isn't
it true that it's easier to perform other motion commands with
keystrokes (e.g., move to the top or bottom of the screen)?

Mac users (some of 'em, anyway) like to talk about modeless
operation, but let's not forget:  the mouse *IS* a mode.

Modelessness is a myth, propagated sometimes by people who should
know better.

-- 
Paul DuBois     UUCP: {allegra,ihnp4,seismo}!uwvax!uwmacc!dubois    |
                ARPA: dubois@easter                               --+--
                                                                    |
"If it works, I didn't write it."                                   |

emv@umix.UUCP (Edward Vielmetti) (09/19/86)

In article <267@uwmacc.UUCP> dubois@uwmacc.UUCP (Bill Winkle) writes:
>Mac users (some of 'em, anyway) like to talk about modeless
>operation, but let's not forget:  the mouse *IS* a mode.

Actually the Mac mouse interface is highly modal.  The meaning of
a mouse click depends entirely on where you are on screen.  MS Chart
used to (still does? don't know) switch cursors every time the meaning
of a mouse-click changed.  Run that thing over a chart and the cursor
would change 5, 10, 15 times.

Edward Vielmetti, U-Mich Computing Center, ihnp4!umich!umix!emv
					   emv@umix.cc.umich.edu

tesler@apple.UUCP (Larry Tesler) (09/19/86)

In article <267@uwmacc.UUCP> dubois@uwmacc.UUCP (Paul DuBois) writes:
>Mac users (some of 'em, anyway) like to talk about modeless
>operation, but let's not forget:  the mouse *IS* a mode.
>
>Modelessness is a myth, propagated sometimes by people who should
>know better.

If I can figure out how to use vi, I'll reply.  I agree that modelessness
is a technically vague term.  It could be argued that even a text editor
like MacWrite has one mode, "obey-next-input mode".  But if a program has
one mode, it has no mode changes, and thus we call it modeless.  It is
also arguable that a font change command produces a mode, but so does a
caps lock key; I call either a "shift", which, as modes go, is innocuous
because the effect of forgetting which mode you are in is certainly less
drastic than that of typing "23d Street" without first entering insert
mode in vi.

Depending on how you choose to define "mode", the mouse could be called a
mode, but then so could the "7" key on a typewriter.  A useful definition
of mode is a state of a user interface that affects the interpretation of
subsequent inputs without obvious indication.  It is possible on the Macintosh,
using clover keys, to bring up a dialog box and thus enter a mode unknowingly.
But it is exceedingly rare compared with systems like vi that overload the
typing keys with functional meanings.

Let me add that, although I agree vi is an obnoxious editor, I do think it
deals with the mode problem gracefully.  Bad keystrokes often beep, undo is
always available for one command, and most vowels enter insert mode so it is
difficult to type a word as a command.

Modelessness is not a myth.  Like "seamlessness" or "painlessness", it is an
ideal that may rarely be attainable but is always worth approximating.  The
alternative is surely inhumane computing.

Larry Tesler, Advanced Development Group, Apple Computer, Inc.
The opinions expressed above are my own although I suspect more than a few
colleagues, not to mention users, would substantially agree with them.

tim@ism780c.UUCP (Tim Smith) (09/19/86)

In article <305@esl.UUCP> mac@esl.UUCP (Mike McNamara) writes:
>
>	I use "cat | cc -O " myself.

On what UNIXs does this work?   Most cc's that I have seen will not
take stdin.  To get the desired results, I have always had to do this:

	ln /dev/tty /dev/tty.c
	cc -O /dev/tty.c                # damn thing wants a ".c" file!
-- 
What's the difference between a duck?

Tim Smith       USENET: sdcrdcf!ism780c!tim   Compuserve: 72257,3706
		Delphi or GEnie: mnementh

shaddock@rti-sel.UUCP (Mike Shaddock) (09/19/86)

In article <1091@hoptoad.uucp> tim@hoptoad.UUCP (Tim Maroney) writes:
>This issue is going to become more and more important as the UNIX Mac is
>released.  Apple has committed themselves to preserving the Mac interface
>while also supporting UNIX(tm).  But my gremlins (actually, experience with
>
> [lots more good information here, but trimmed for brevity ].

Tim brings up good points on the problems of i/o re-direction on the
Mac.  It seems to me that most logical place to do this would be in
the stdio routines.  If we could change the stdio routines to do our
type checking, simply recompiling the program on the Mac would get it
running.  I may be missing the point, but it sounds like there are two
problems, one involving putting a Mac interface on grep (for example),
and one to do the actual i/o stuff.  As far as putting a Mac interface
on the program, I think that it would not be very hard to do for most
programs.  A subroutine at the beginning of the program which handles
the window stuff to set up the parameters, files, regexp's, etc., then
you pick something to start the program to actually "run" (for grep,
to start searching).  Two other things bother me, though.  One, how do
we tell a program to redirect its i/o in the first place, and two, how
do we handle all of the many different programs from Unix(tm)?  I
suppose that we could have some sort of menu that says "I want to run
some programs piped together", and then pick the programs in the
appropriate order, or we could do what was done for the Amiga in the
CLI interface (i.e. have something like a shell window where you use
the standard Unix syntax), and then let each program pop up a window
for it use.  For the second problem, Unix(tm) has the "path" concept,
but how do we do this on a Mac?  We don't want to have lots and lots
of program icons littering the desktop, and we really don't want to
have extremely long menus of commands.  Does this sound like a valid
problem, or am I just confused?
-- 
Mike Shaddock	{decvax,seismo,ihnp4akgua,philabs}!mcnc!rti-sel!shaddock

"You're in a twisty maze of sendmail rules, all obscure."

ir450@sdcc6.ucsd.EDU (ir450) (09/20/86)

To add to the mouse vs vi editors debate, I will tell my story.

At work I use this nice SUN workstation, and I use the mouse only to
switch between screens, and evry so often, I will cut and paste with it.
I use only vi on this system (4.2) and I can quickly and easily produce
anything I need. 

At home I have an Apricot running MS-DOS and GEM. It takes average 4
hours to write and perfect a simple one page letter using its mouse
based editor. It takes forever to find anything in the letter, and
almost that long to move through the letter. I also hate having to move
my hand from the mouse to the keyboard continually.

I have NEVER had ANY experience with vi removing text and doing the
wierd things that the previous posters have stated, even when I was a
beginner with vi. It has ALWAYS been the best editor I have used. I
think the reason for this is that you can use whatever level of
expertice you want. If you are a begineer with it, you just have to know
how to insert, delete and save a file. With other editors I have tried
to use, you must know almost everything about it, just to get started.
Except of course for mouse based editors, which tell you nothing and
give the begineer no useful features.

Obviously, I have used the vi editor to write this followup, and I can
tell you that I had no problems doing so.

Brian Keves			ARPA:	keves%ra@sdcsvax.ucsd.edu
Lab for Math and Stats		UUCP:	sdcsvax!ra!keves
UCSD, La Jolla, CA	 	PHONE:	619-450-6421
Any opinions expressed are my own and are not the opinions of my employer.
-- 
Brian Keves			ARPA:	keves%ra@sdcsvax.ucsd.edu
Lab for Math and Stats		UUCP:	sdcsvax!ra!keves
UCSD, La Jolla, CA	 	PHONE:	619-450-6421
Any opinions expressed are my own and are not the opinions of my employer.

db@cbosgd.UUCP (Deceased Bird) (09/20/86)

In article <137@geac.UUCP> len@geac.UUCP (Leonard Vanek) writes:
>In article <15372@mordor.ARPA> jdb@mordor.UUCP (John Bruner) writes:
>>
>>User preferences vary, and I'm sure my opinion on them isn't shared
>>by everyone.  My point, however, is that it is not sufficient to choose
>>between a mouse interface and a dialog interface solely upon the type
>>of output device.  I would prefer a command-line interface even on a
>>bitmapped screen, and I suspect many other "power users" of UNIX would
>>also.
>>
>The above point leads me to wonder about the use of the two
>editors that come with the Macintosh version of the Aztec C
>compiler.
>
>How many users of Aztec C (or any other Mac compiler that
>offers the choice) use the vi-like Z editor or the
>mouse-based Edit? 
>

I use the Z editor -- in fact, it's one of the reasons I bought
Aztec C.  Although I'm not entirely thrilled with vi, I'm used
to it and can live with it.  I haven't used Edit much at all but
I do use MacWrite regularly, mainly for correspondence but also
for memos.

Switching between mouse-based editing and a 'traditional' screen
editor has made me rather schizo.  It never fails that I'm in Z,
want to delete a large block of text, and reach for the mouse to
select the text.  Conversely, while in MacWrite I often enter
an (pseudo) ESC in an attempt to terminate text entry or try to
move backwards using 'b' or '-'.

I do like having the choice of environments, but I would like an
'integrated' (i.e., both pointer and command) environment even
better.  The examples I cited above illustrate the respective
strengths of each interface and suggest ways in which each could
be exploited to compensate for the weaknesses of the other.

I also like having the Aztec shell available on the Mac.  The
simultaneous menu and command-line interface is a simple example
of an integrated environment which is handy to use, especially
the compilation menu (does away with the need for compile/asm/link
scripts for simple programs).  The main problem with the Aztec shell
is that it's not really UNIX -- it can be quite frustrating not
being able to form pipelines, spin off background processes, etc.
Considering that it is a simple Bourne shell plus a number of
UNIX commands in a single program, however, it's pretty good.

Dave Bursik/..cbosgd!db

heins@orion.UUCP (Michael T. Heins) (09/21/86)

[]
>In article <305@esl.UUCP> mac@esl.UUCP (Mike McNamara) writes:
>>
>>	I use "cat | cc -O " myself.
>
>On what UNIXs does this work?   Most cc's that I have seen will not
>take stdin.  To get the desired results, I have always had to do this:
>
>	ln /dev/tty /dev/tty.c
>	cc -O /dev/tty.c                # damn thing wants a ".c" file!

Well, you guys are just wasting CPU time going through that compiler.
"adb /dev/mem"  is much more manly.

rjk@mrstve.UUCP (Richard Kuhns) (09/21/86)

I'm rather surprised that no one has mentioned the AT&T 3b1 during this
discussion.  I realise that there are large differences between the
User Agent on the 3b1 and the Desktop on the Mac, but they look to be
related (disclaimer: I don't have any first-hand experience with the Mac).

Currently, it's possible to set up any single command on the 3b1 with the
User Agent & it's support of windows, using shform(1) if you want to do it
via a shell script, or menu(3t) & message(3t) if you want to handle it
via C code.  Using shform(1), for example, it's easy to set up a form
which requests all the info needed to run a grep (filename[s], pattern,
any additional options), which a shell script simply gives to grep.

In general, then, all you'd need is a program ala shform, which reads a
file containing a description of the desired user interface, interacts
with the user using the appropriate graphics interface, and returns the
results of said interactions in a form which a shell script can handle.

Any 3b1 gurus/developers care to comment?

Further disclaimer:  I have no relationship with AT&T other than being a
reasonably satisfied user of some of their computers, and no relationship
with Apple at all.
-- 
Rich Kuhns		{ihnp4, decvax, etc...}!pur-ee!pur-phy!mrstve!rjk

tim@hoptoad.uucp (Tim Maroney) (09/22/86)

I'd like to thank all the people who've replied on this issue so far.  I
hope to have time to deal with all the major points soon, but for now, I
just want to make a few comments.
 
First, I mentioned pseudo-ttys as a necessity in the original article; this
means that a psuedo-tty could easily be bound to a window interface for
those situations in which a command language interface is preferable.
 
Second, process interconnection with pipes fairly readily into an iconic
shell interface.  There would be a "pipe" icon on the desktop.  Clicking on
this would create a pipe-shaped icon; selecting application icons would then
link them together into a piped process sequence.  Finishing the select
would probably be best accomplished by clicking again on the pipe. Yes, it's
modal, but modality is not an absolute vice.
 
Third, I suggested that an "interface description language" (obviously not
IDL, the compiler language) could be implemented within the shell, and that
each application could have a formally-described graphic interface in this
way without having to run extra filter processes or modify the applications'
code.  Apparently this was not as clear as could be hoped.

Fourth, I think command-language fans are overlooking one of the chief
advantages of graphic interfaces, the impossibility of typing errors.

Again, many thanks!
-- 
Tim Maroney, Electronic Village Idiot and Self-Assigner of Pretentious Titles
{ihnp4,sun,well,ptsfa,lll-crg,frog}!hoptoad!tim (uucp)
hoptoad!tim@lll-crg (arpa)

Engineers gleefully note the inability of artists to solve technical
problems, but angrily deny the atrophy of their own aesthetic sense.

jdb@mordor.ARPA (John Bruner) (09/23/86)

I seem to have started something that I had really hoped to avoid.  I'm
probably only making things worse by submitting this, but since the net
seems to be a medium devoid of restraint....

I am very dismayed at the general direction that this discussion has
taken -- whether or not "vi" is a good editor.  The line from my posting
which set off all of this discussion was:

> I am far more productive with "vi" on UNIX than with any of
> the mouse-based editors I've run across on the Mac.

This statement is true -- *I* like "vi" and *I* edit *very rapidly* with
it.  It does *not* say "Everyone would be far more productive with 'vi'",
nor does it even say "Everyone would be far more productive with a
keyboard-oriented editor".  I mentioned "vi" because it is the screen
editor that *I* use.  It was a concrete example which I cited only to
expand upon my general statement: *some* people prefer a keyboard
interface (for some tasks) to a mouse-based interface.

I cited other examples which noone seems to disagree with -- why didn't
someone ridicule me for preferring a command interface with history
and aliases to a mouse-based interface?  Perhaps this lack of response
resulted from my failure to mention specific programs which provoke
strong emotional responses in some people, although noone took me
to task for my preference for "dbx" over "dbxtool".

My sole objective in the paragraph containing the "vi" reference was
to state my belief, based upon my own personal experience, that
*some* users prefer a keyboard interface for *some* tasks to a
mouse-based interface (or worse yet, a hybrid interface that makes
one waste lots of time moving one's hands between the keyboard and the
mouse).  I realize now that I should have said "I am far more productive
with my *keyboard-based editor* on UNIX".  Of course, then there
probably would have been flames about "vi", every flavor of EMACS,
the Rand Editor, "ed", "qed", "ex", and who knows what else.

A mouse-based interface is appropriate for many situations and users.
I claimed that a keyboard-based alternative is appropriate for some.
That is all I said.  (I find some support for my opinion in the
existence of command-key equivalents on the Mac and their popularity
among so-called "power users.")

I am *not* knocking Apple's user interface guidelines.  I am *not*
suggesting that the *only* interface be a keyboard-only one.  I am
*only* suggesting that (at least for *some* things) *some* users
desire such an interface as an *alternative*.  Preferences for
user interfaces, like preferences for editors, vary, so I naturally
don't assume that everyone believes as I do.  Unfortunately, too often
it seems that advocates of mouse-based interfaces are not equally
willing to accept that other people may not agree that a mouse is
"the only way."

I do have some ideas on the original subject: adapting UNIX programs to
a Mac interface (both for transport to the Mac and for the implementation
of a Mac-like interface on top of UNIX), but as this posting is getting
rather long I'll put that material off until later.
-- 
  John Bruner (S-1 Project, Lawrence Livermore National Laboratory)
  MILNET: jdb@mordor [jdb@s1-c.ARPA]	(415) 422-0758
  UUCP: ...!ucbvax!decwrl!mordor!jdb 	...!seismo!mordor!jdb

ephraim@wang.UUCP (pri=8 Ephraim Vishniac x76659 ms1459) (09/23/86)

> To add to the mouse vs vi editors debate, I will tell my story.

Ditto.

> I have NEVER had ANY experience with vi removing text and doing the
> wierd things that the previous posters have stated, even when I was a
> beginner with vi. It has ALWAYS been the best editor I have used.

The problem here is that people are comparing apples and oranges.  

Everyone's using an editor called "vi".  Some satisfied users are using
it on dedicated workstations or local terminals on lightly loaded systems.
Some complainers are using it on dial-up lines or heavily loaded systems.

When I was in the latter group, I found the cursor keys virtually useless.
They send a series of characters, and vi rarely managed to buffer and
interpret the sequence correctly.  Sure enough, lines disappeared leaving
random garbage in their place.  

I've been in the former group, also (sort of): I've used Z, Manx's
vi look-alike on the Mac.  It's a 100% different experience.  If you like
keyboard-only editors, you'll love it.

So now will everybody shut up about this?

howard@amdahl.UUCP (Howard C. Simonson) (09/23/86)

In article <1117@hoptoad.uucp> tim@hoptoad.UUCP (Tim Maroney) writes:

>                ...There would be a "pipe" icon on the desktop.  Clicking on
> this would create a pipe-shaped icon; selecting application icons would then
> link them together into a piped process sequence.  Finishing the select
> would probably be best accomplished by clicking again on the pipe. Yes, it's
> modal, but modality is not an absolute vice.

It doesn't necessarily have to be modal.  How about a pipe icon on the
desktop into which you drag icons.  When icons are dragged into the pipe
they become small icons, still visible.  As more icons are dragged into
the pipe the pipe may expand to accommodate them.  When the pipe is
constructed to your specifications, a simple double click on the completed
pipe would start the commands in motion.  The concept of seeing the icons
in the pipe is visually pleasing and allows later enhancements to drag
icons back out of the pipe and rearrange them after they have been dragged
into the pipe.  If you desire more pipe icons on the desktop (background
pipes?), a menu command that acts like "New Folder" could be used to
create a new pipe "device" on the desktop; or it could be a finder param
in the LAYO resource, number of pipes on desktop.

The non-modal part is the ability to construct and remember partial pipe
constructions over other events and program executions.  (Requires some
temp space on the part of the finder )

Comments?
-- 
I have no technical challenges,                              Howard C. Simonson
 just political ones.                ...{dragon,hplabs,ihnp4,nsc}!amdahl!howard

[ Opinion?   What opinion!?    I think you have the wrong guy... ]

edusoft@utecfa.UUCP (Educational Software) (09/23/86)

Larry Tesler writes in article 164@apple.UUCP

> In article <267@uwmacc.UUCP> dubois@uwmacc.UUCP (Paul DuBois) writes:
> >Mac users (some of 'em, anyway) like to talk about modeless
> >operation, but let's not forget:  the mouse *IS* a mode.
> >Modelessness is a myth, propagated sometimes by people who should
> >know better.

> If I can figure out how to use vi, I'll reply.  I agree that modelessness
> is a technically vague term.  It could be argued that even a text editor
> like MacWrite has one mode, "obey-next-input mode".  But if a program has
> one mode, it has no mode changes, and thus we call it modeless.  It is
> also arguable that a font change command produces a mode, but so does a
> caps lock key; I call either a "shift", which, as modes go, is innocuous
> because the effect of forgetting which mode you are in is certainly less
> drastic than that of typing "23d Street" without first entering insert
> mode in vi.
> 
> Depending on how you choose to define "mode", the mouse could be called a
> mode, but then so could the "7" key on a typewriter.  A useful definition
> of mode is a state of a user interface that affects the interpretation of
> subsequent inputs without obvious indication.  It is possible on the Macintosh,
> using clover keys, to bring up a dialog box and thus enter a mode unknowingly.
> But it is exceedingly rare compared with systems like vi that overload the
> typing keys with functional meanings.
> 
> Let me add that, although I agree vi is an obnoxious editor, I do think it
> deals with the mode problem gracefully.  Bad keystrokes often beep, undo is
> always available for one command, and most vowels enter insert mode so it is
> difficult to type a word as a command.
> 
> Modelessness is not a myth.  Like "seamlessness" or "painlessness", it is an
> ideal that may rarely be attainable but is always worth approximating.  The
> alternative is surely inhumane computing.

I don't really know whether modelessness is a myth or not, (though I 
suspect it is a myth).

For example, the dialog boxes and file selection boxes and pull-down
menus and click-drag mouse functions are ALL modes.

The idea is, however, to keep the modes simple and small, so that
a user's options and how to get at them are obvious.

So, MacWrite has lots of little modes, and vi has two big modes.

-----

bill idsardi
educational software products

.... utzoo!utcsri!utecfa!edusoft

edm@tikal.UUCP (Ed Morin) (09/24/86)

> What's the difference between a duck?

One of his legs are both the same!  :-)

					Ed Morin
					Computer Resource Engineer
					Teltone, Inc.
					...uw-beaver!tikal[!colossus]!edm

adam@mtund.UUCP (Adam V. Reed) (09/24/86)

Larry Tesler:
> ....  A useful definition
> of mode is a state of a user interface that affects the interpretation of
> subsequent inputs without obvious indication.  It is possible on the Macintosh,
> using clover keys, to bring up a dialog box and thus enter a mode unknowingly.
> But it is exceedingly rare compared with systems like vi that overload the
> typing keys with functional meanings.

Although I enjoy the relative orthogonality of vi, I think that some
visible indication of whether one's input will be interpreted as text
or commands might be very desirable. But would it really be enough to
make vi "modeless"?
					Adam Reed (mtund!adam)

stephenw@murdu.OZ (Stephen Withers) (09/25/86)

In article <1897@utecfa.UUCP> edusoft@utecfa.UUCP (BIll Idsardi) writes:
>The idea is, however, to keep the modes simple and small, so that
>a user's options and how to get at them are obvious.
>
>So, MacWrite has lots of little modes, and vi has two big modes.

I think the question is more to do with the "depth" of a mode, rather than its
complexity.  With MacWrite, "insert mode" is so shallow that you can't call it 
a mode - you can hit any of the shortcut keys as you type.  With vi, you must 
get out of exit mode before you can do anything but type more characters.

Anyway, I believe that one of the main determinants of a good user interface
is how easy it is to do something catastrophic.  With MacWrite (and most Mac
programs) it's hard; with vi (and most Unix programs?) it's easy.

magik@chinet.UUCP (Ben Liberman) (09/25/86)

In article <15530@mordor.ARPA> jdb@mordor.UUCP (John Bruner) writes:
>
>A mouse-based interface is appropriate for many situations and users.
>I claimed that a keyboard-based alternative is appropriate for some.
>That is all I said.  (I find some support for my opinion in the
>existence of command-key equivalents on the Mac and their popularity
>among so-called "power users.")
>
I agree with you totally.  To support either one to the exclusion of the
other is a waste of time (at many levels:-).
  One of the joys of the mac user interface is it allows the novice and expert
to begin to operate effectively with no previous experience.  As you learn some
of the shortcuts you get to do the same things FASTER (having a larger 
and less obvious command vocabulary).
  At the novice level you can get around slower with your much limited 
vocabulary, but you CAN get around.
 I've run in to some who seem to believe that there is something WRONG with
command-key enhancement of the commonly percieved "mac interface".

 
----------------------
Ben Liberman

ihnp4!homebru!magik

"Whatever it was that I said...uh...I didn't mean it....honest !!!)

cy@killer.UUCP (Cyrus Foughty) (09/25/86)

In article <981@cit-vax.Caltech.Edu>, wetter@tybalt.caltech.edu.Caltech.Edu (Pierce T. Wetter) writes:
> In article <15372@mordor.ARPA> jdb@mordor.UUCP (John Bruner) writes:
> >  I am far more productive with "vi" on UNIX than with any of
> >the mouse-based editors I've run across on the Mac. 
[ deleted crap ( wasted space) ]
> with the mouse isn't faster then banging away on random cursor keys. It's true
> that you can go directly to a specific line number but you can't easily go up
> five lines and over twenty characters. Also a mouse based editor is much easier
Alright, try this : when in vi in the command mode enter: 5k20l 
See how fast that is! Your probably just to lazy to learn vi, it is inifinitely
flexible compared to any other editor. One must invest the time to learn!!!
I'll race you any day, and I'm not a touch typist. (boy will those people
be in trouble when Dvorak takes over, and it will)

> to cut & paste in (which if you looked at code I've written  you'll know why
> I like this--" Who needs a for next loop I'll just paste it in five times") 
> 
>      Also, you need to move your hands away from the "home row" whenever you 
> hit the escape key or any other "control key". The mouse isn't any worse
> ( unless you have an infinate typing speed). However, there is one small
> thing I should mention, I'm using a trackball instead of a mouse (desk space
> Yay!!!!!!!). If you are using a mouse on a towel (yucky surface) I might
> believe you but otherwise. Snicker Snicker...
> 
> Nuff Said
> 
> Pierce wetter
 
The above are the rantings of an deranged group of folks. not really ;-)

cy
{dj3b1,ihnp4}!killer!cy

"Degree,degree..... I don't need no stinking degree!!!"
Dangermouse is alive!!

wcs@ho95e.UUCP (#Bill_Stewart) (09/26/86)

In article <791@mtund.UUCP> adam@mtund.UUCP (Adam V. Reed) writes:
>Larry Tesler:
>> ....  A useful definition
>> of mode is a state of a user interface that affects the interpretation of
>> subsequent inputs without obvious indication........
>> But it is exceedingly rare compared with systems like vi that overload the
>> typing keys with functional meanings.
>Although I enjoy the relative orthogonality of vi, I think that some
>visible indication of whether one's input will be interpreted as text
>or commands might be very desirable. But would it really be enough to
>make vi "modeless"?

AT&T Version 3.9 of vi (comes with SVR2) has a "showmode" option which does just
that.  It's part of our standard options for novices.  I don't use it, partly
because of the wonderful things it does on paper terminals :-.  It helps a bit
when you forget which mode you're in.  Put "set showmode" in your $EXINIT.

Most emacs versions I've used have similar features, at least to the extent of
moving the cursor to line 24 during a ^X: command; when I use emacs I keep it in
Electric-C-Mode or nroff-mode (just to add fuel to the is-emacs-modeless fire.)

My reasons for using vi are more plebian; I learned it first and for most of
my work emacs isn't a big enough gain to switch.
-- 
# Bill Stewart, AT&T Bell Labs 2G-202, Holmdel NJ 1-201-949-0705 ihnp4!ho95c!wcs

das@well.UUCP (David Shayer) (09/27/86)

After listening to the Unix-Mac portability debate, I have
another thought about Mac compatibility with Unix.  Sure the Mac
ought to run C programs from Unix environments.  But what about running
Unix shell scripts?  I have been using MPW (Mac Programmers Workshop)
lately, and it has a Unix-like command language, but it has many
frustrating minor differences.

Obviously (to me anyway) we don't want to just run Unix shell scripts
at the Finder level.  After all, the whole idea of the Mac is to get away
from the user having to do that kind of stuff.  Unix may be very powerful,
and we all like it (or at least use it), but a lot of people bought
Macs specifically so they don't have to put up with commands like
grep -v foo > bar.  

But at the programmers level, it is certainly useful to have Unix-like 
capabilities.  MPW does provide most of the same types of commands as
Unix, if you've been waiting for a Unix-like development environment
on the Mac, check out MPW.  However, most of the commands have different
names and different formats.  Since most of the same commands and
utilities exist, it would be nice if they had the same name.  MPW
is too Unix-like for Apple not to have realized they were mostly
duplicating Unix.  But it would be nice if they had gone all the way,
so you could download a shell archive and compile it directly on
your Mac, or download a Unix program and its makefile and make it
in one step.

Instead, MPW has a lot of little changes.  For instance, the wildcard
characters are not ? and *, but ? and command-x.  Make files use
command-f instead of : to note dependencies.  The whole command
language is full of specialized Mac-keyboard-only characters.

I have a proposal.  A program (in C, or a Unix or MPW shell script)
to convert Unix shell scripts to MPW shell scripts and vice versa,
informing you of commands that cannot be converted (there are few).
I must admit that I don't know Unix shell language well enough
(or MPW shell language either, its pretty complicated).  But if
I inspire somebody, please post a copy.


-----------------------
David Shayer @ The Well
well!das

"Most of the time, for most programmers, what a compiler produces 
is not object code but error messages."  

mob@mit-amt.MIT.EDU (Mario O. Bourgoin) (09/28/86)

> Your probably just to lazy to learn vi, it is inifinitely
> flexible compared to any other editor.

Allright,   try this for   a change: make  vi  behave like  Emacs,  my
favorite editor. We already know that Emacs can behave like vi  pretty
easily. Show that it goes the other way: that should be a good test of
flexibility.

The  persons whom I know  use vi look terribly  clumsy when  using it.
All those keystrokes! All that careful  thought about "How am I  going
to do this?"  And they've used it for more  than six  years!!  And the
work that they do to get effects that are easy to do in Emacs!!!

Show me that vi "is infinitely flexible compared to" Emacs.

--Mario

P.S. After your comment about  wasted space, why  did you include  the
rest of the other person's article in yours?

tdn@spice.cs.cmu.edu (Thomas Newton) (09/28/86)

>> It's true that you can go directly to a specific line number but you can't
>> easily go up five lines and over twenty characters.

I don't know about vi, but there are several ways it could be done in EMACS.
And in Hemlock, an EMACS-family editor built into Spice Lisp, one can point
and click using the puck or type keyboard commands as one prefers.

> Your probably just to lazy to learn vi, it is infinitely
> flexible compared to any other editor.

Compared to Gosling EMACS or GNU EMACS?  Programmability is a big win...

>> to cut & paste in (which if you looked at code I've written you'll know why
>> I like this--" Who needs a for next loop I'll just paste it in five times")

The Kill buffer in EMACS is analogous to the Macintosh clipboard in that text
that is placed into it may be yanked ("pasted") several times.  Some versions
of EMACS even have kill rings (translation: multiple Clipboards).

                                        -- Thomas Newton

levy@ttrdc.UUCP (Daniel R. Levy) (09/30/86)

In article <791@mtund.UUCP>, adam@mtund.UUCP (Adam V. Reed) writes:
>Larry Tesler:
>> ....  A useful definition
>> of mode is a state of a user interface that affects the interpretation of
>> subsequent inputs without obvious indication.  It is possible on the Macintosh,
>> using clover keys, to bring up a dialog box and thus enter a mode unknowingly.
>> But it is exceedingly rare compared with systems like vi that overload the
>> typing keys with functional meanings.
>Although I enjoy the relative orthogonality of vi, I think that some
>visible indication of whether one's input will be interpreted as text
>or commands might be very desirable. But would it really be enough to
>make vi "modeless"?
>					Adam Reed (mtund!adam)

:set showmode

('INPUT MODE' will show up on the status line when appropriate [if you have
also :set terse then there is just an 'I'])
-- 
 -------------------------------    Disclaimer:  The views contained herein are
|       dan levy | yvel nad      |  my own and are not at all those of my em-
|         an engihacker @        |  ployer or the administrator of any computer
| at&t computer systems division |  upon which I may hack.
|        skokie, illinois        |
 --------------------------------   Path: ..!{akgua,homxb,ihnp4,ltuxa,mvuxa,
	   go for it!  			allegra,ulysses,vax135}!ttrdc!levy