home *** CD-ROM | disk | FTP | other *** search
- Introduction:
-
- Programs such as Emacs, Mathematica, Gdb etc on NeXT have a
- common feature. They all have an underlying program which runs in
- standard Unix environment and a front end which parses the output from
- that underlying program with a more attractive presentation usually
- conforms to NextStep standard and provides inputs to the program
- according to use's actions such as mouse click, mouse move etc. There
- are even more programs out there which can be ported to NextStep
- environment by providing the front end without rewriting the whole
- program or even better, without the source code. What should be done
- is simple, by creating channels to communicate with the underlying
- program, then that program can be controlled by the front end.
-
- The steps take to do this are as following:
- 1. Creating the pty/tty pairs so that front end can communicate with
- its program .
- 2. Forking a child process and spawning the program.
- 3. Parsing the output from the program and translating user's actions
- into inputs to the program.
-
- The included toolkit is such a prototype which implements the
- basic stuff for you. It will create the pty/tty pair, fork the child
- process and spawn the program for you. It also provide two routines,
- inputToApp:(char *)in and outputFromApp:(char *)out in EtermHandle
- class, so that you can get outputs from the program and provide inputs
- to the program. Of couse, how to parse the outputs depends on what the
- program does and it's up to the programmer to implement them. Some
- basic framework are also there, such as the routine to set up the
- DEFAULT.
-
- There is no general mechanism to change the underlying program
- during program execution. It is believed that anyone uses this toolkit
- intends to rewrite the toolkit to serve specific program. It is
- therefore not necessary to change the program from time to time. The
- CSH program included is merely an example. No optimization to the
- speed nor elegancy to the interface has been done.
-
- Usage:
-
- 1. Programmer must create a subclass of HandleDeputy which implements
- inputToApp:(char *)in and outputToApp:(char *)out. This class can but
- not necessarily implement the output parser. inputToApp:(char *)in is
- supposed to be called in the program whenever you need to provide
- inputs to the program. outputFromApp:(char *)out will be called if
- there are outputs from the program. Calling is automatically and the
- ouput parser can be called from this program. Appender class can serve
- as an example about how these two routines can be implemented.
-
- 2. The default framework is in BlackHand class. You might want to
- change them if you need any default value to be set.
-
- 3. To change the program you want to interface with. Change the
- AppsName and ProgName in BlackHand.h. AppsName is the name of the
- front end. In addition, you also need to change Csh_main.m, Csh.nib,
- Csh.iconheader to AppsName_main.m, AppsName.nib and
- AppsName.iconheader and the corresponding file name in IB.proj.
- ProgName is the name of underlying program. It must be a full path
- file name. Instead of "csh", you should specify it as "/bin/csh".
-
- Acknowledgement:
- This toolkit is basically modifications of Emacs by John G. Myers.
- Some class names have been renamed to reflect what they do. Some,
- however, have the same name as in the original source code.
- The codes to create the pty/tty pair, setup the terminal and fork
- and spawn the program comes from the emacs distribution.
- This toolkit carries the same copy right as in Emacs 2.0. Please
- see copying.rtf for further information.
-
-
- Chin Hsiang Wu
- chin@sg1.chem.upenn.edu
-
- P.S. If you find any bug in this toolkit, please let me know and I
- will try to debug. If you think the explanation above is not clear
- enough and you can do a better job explaning. Do whatever modification
- is necessary. Send me a copy of your modification if you want to, but
- not required.
-