Here is a quick summary of how to build Fcl:
Note that it is important that you at least have the Tcl and Tk sources in the right place because Fcl uses some of their private include files to implement something that can't be done correctly without them.
Everything under the $ROOT directory has to be in the correct place because all of the default load paths are relative to "..". This will change to some more rational spot as the system matures. When Fcl is installed, all of its utility scripts go into the directory
/afs/cs/project/able/lib/fcl, and some auxiliary binaries go into
/afs/cs/project/able/lib/fcl/tools.
At CMU, the Tcl code repository must be accessible using the path
/afs/cs/project/able/lib/fcl/ABLE_CODE_REPOSITORY/. In the tape distribution, this directory is duplicated in the main source tree. You can set an environment variable and place this whereever you like. See the next section for details.
Eventually, all of the UI and style libraries will install into
/afs/cs/project/able/lib/fcl/ as well. Right now they are not stable enough to make it worthwhile.
setenv EVOLID 3001This is the default data volume for Fcl to use to store persistent objects.
setenv CVSROOT $ROOT/cvsThis is the root of our CVS repository tree. Must be set if you want to check the code out from CVS. Not needed if you got the code from tape or something. Note that Tcl, Tk, Expect, BLT and Exodus are not stored in the CVS tree.
setenv PATH ${PATH}:$ROOT/binThis way we can find the binaries for the ESM server and utilities.
setenv PATH /usr/misc/.X11/bin:${PATH}X11 binaries.
setenv PATH /afs/cs/project/able/bin:${PATH}Our local binaries. Tcl, Tk, etc.
unsetenv CPATH unsetenv LPATHMake sure no CMU brain damage leaks in.
setenv MANPATH /usr/man:/usr/local/man:/afs/cs/project/able/manTo find man local man pages.
setenv RMDIR /afs/cs/project/able/sunos/sys/RMToolFor Notikin's stuff. This is strictly for local use at CMU.
setenv ABLEROOT /afs/cs/project/able/sunosSame as $ROOT.
setenv FCL_LIBRARY /afs/cs/project/able/lib/fclDefault place to find Fcl related Tcl code.
setenv MSG_LIBRARY /afs/cs/project/able/lib/fcl/msgDefault place to find the message server/client Tcl libraries.
setenv MESSAGE_SERVER rojen.sp.cs.cmu.edu:9001Default host and port of the event server
setenv ABLE_REPOSITORY \ /afs/cs/project/able/lib/fcl/ABLE_CODE_REPOSITORY/alphaWhere the Tcl code repository lives.
setenv FDRHOME /afs/cs/misc/se-support/sun4c_411/omega/fdr.1.4For running FDR. This is also for local use at CMU only.
if (${?DISPLAY} == "0") then xset fp+ /afs/cs/project/able/lib/fcl/sgen/fonts xrdb -merge /afs/cs/project/able/lib/fcl/sgen/sgen.Xdefaults endifThis sets up X so it can find special Synthesizer Generator fonts.
This is all I'll say about this, since saying any more would just duplicate the documentation that comes with Tcl, Tk and the other tools.
The system can't run without the servers, and the servers do not start up automatically. That kind of magic is a bit too complicated, so starting the servers by hand is the best thing to do. To set up the Exodus server, first follow the directions in the Exodus documentation on how to set up a configuration file for the client and the server. Each user of the system must have such a file, called .sm_config, in their home directory. The file we use is shown below:
# config file for Exodus. # client info client*bufpages: 300 client*mount: 3001 9000@rojen.sp.cs.cmu.edu client*mount: 3002 9000@rojen.sp.cs.cmu.edu # server*diskproc: /afs/cs/project/able/sunos/esm/bin/diskrw server*bufpages: 300 server*verbose: yes server.sm_server.portname: 9000 server.SM_server.portname: 9000 # the log [sf]*logformat: /rojen/usr0/psu/esm-vols/log 3000 1 1 1000 8 # data [sf]*dataformat: /rojen/usr0/psu/esm-vols/vol3001 3001 1 1 4000 [sf]*dataformat: /rojen/usr0/psu/esm-vols/vol3002 3002 1 1 2000 # tell the server where the log is server.sm_server.logvolume: 3000 server.SM_server.logvolume: 3000Next, log on to the machines named in the Exodus configuration fileand run the sm_server binary. Finally, log on to the machine named in the the MSG_SERVER environment variable and run the msgServer binary. In the ABLE project, we use the same machine,
Finally, if you can run the screen program, its useful to run the servers in a screen session that can be detached and then resumed from anywhere. The screen program is available for ftp and comes with loads of documentation. At CMU, you can find it in /afs/cs/project/cmt/bin/screen and in the Andrew contrib area. Todd Kaufman (toad) builds lots of neat things like this. Ask him for help and advice once in a while. Look at ~psu/.screenrc for an example screen setup file.
% fcl fcl> __famInitDatabase => _OBJ(xxx,yyyy,zzzz,wwww) fcl> exitNow run Fcl again to make sure the data area is really there:
% fcl fcl> set root [ trans { persist getroot }] fcl> set root _OBJ(xxx,yyyy,zzzz,wwww) fcl> exitYou should get back exactly the same object handle as you got before.
Now the DB is ready to handle the code in the user interface. You can now run the UI as described in its manual and create some sample designs in the three pre-defined styles.
Right now, you can only run one style at a time. This is changing however, since the code itself only has this limitation in a few places. To run the UI in a particular style, say pf, type the following at the shell:
% cd $ROOT/pf % fcl fcl> source main.tclAt this point, the main box with four buttons will come up, and if you haven't got a tool server around, the tool server will start also. This startup sequence is identical for all styles.
If you want to configure your system so different things happen at startup, for now, the best way is just to edit main.tcl. Eventually, we'll provide something smarter.