~ubuntu-branches/ubuntu/intrepid/tcm/intrepid

« back to all changes in this revision

Viewing changes to doc/developersguide/developersguidenode4.html

  • Committer: Bazaar Package Importer
  • Author(s): Otavio Salvador
  • Date: 2003-07-03 20:08:21 UTC
  • Revision ID: james.westby@ubuntu.com-20030703200821-se4xtqx25e5miczi
Tags: upstream-2.20
ImportĀ upstreamĀ versionĀ 2.20

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 
2
<!--Converted with LaTeX2HTML 98.1p1 release (March 2nd, 1998)
 
3
originally by Nikos Drakos (nikos@cbl.leeds.ac.uk), CBLU, University of Leeds
 
4
* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
 
5
* with significant contributions from:
 
6
  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
 
7
<HTML>
 
8
<HEAD>
 
9
<TITLE>3. Source Code Organization</TITLE>
 
10
<META NAME="description" CONTENT="3. Source Code Organization">
 
11
<META NAME="keywords" CONTENT="TechDoc">
 
12
<META NAME="resource-type" CONTENT="document">
 
13
<META NAME="distribution" CONTENT="global">
 
14
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
 
15
<LINK REL="STYLESHEET" HREF="TechDoc.css">
 
16
<LINK REL="next" HREF="developersguidenode5.html">
 
17
<LINK REL="previous" HREF="developersguidenode3.html">
 
18
<LINK REL="up" HREF="TechDoc.html">
 
19
<LINK REL="next" HREF="developersguidenode5.html">
 
20
</HEAD>
 
21
<BODY >
 
22
<!--Navigation Panel-->
 
23
<A NAME="tex2html300"
 
24
 HREF="developersguidenode5.html">
 
25
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
 
26
<A NAME="tex2html297"
 
27
 HREF="TechDoc.html">
 
28
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
 
29
<A NAME="tex2html291"
 
30
 HREF="developersguidenode3.html">
 
31
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
 
32
<A NAME="tex2html299"
 
33
 HREF="developersguidenode1.html">
 
34
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A>  
 
35
<BR>
 
36
<B> Next:</B> <A NAME="tex2html301"
 
37
 HREF="developersguidenode5.html">4. TCM User Interface</A>
 
38
<B> Up:</B> <A NAME="tex2html298"
 
39
 HREF="TechDoc.html">Toolkit for Conceptual Modeling</A>
 
40
<B> Previous:</B> <A NAME="tex2html292"
 
41
 HREF="developersguidenode3.html">2. System Architecture</A>
 
42
<BR>
 
43
<BR>
 
44
<!--End of Navigation Panel-->
 
45
<!--Table of Child-Links-->
 
46
<A NAME="CHILD_LINKS"><strong>Subsections</strong></A>
 
47
<UL>
 
48
<LI><A NAME="tex2html302"
 
49
 HREF="developersguidenode4.html#SECTION00410000000000000000">3.1 Source code versus design criteria</A>
 
50
<LI><A NAME="tex2html303"
 
51
 HREF="developersguidenode4.html#SECTION00420000000000000000">3.2 Individual files and directories</A>
 
52
<LI><A NAME="tex2html304"
 
53
 HREF="developersguidenode4.html#SECTION00430000000000000000">3.3 Object libraries</A>
 
54
</UL>
 
55
<!--End of Table of Child-Links-->
 
56
<HR>
 
57
 
 
58
<H1><A NAME="SECTION00400000000000000000">&#160;</A> <A NAME="chap:src_organization">&#160;</A>
 
59
<BR>
 
60
3. Source Code Organization
 
61
</H1>
 
62
 
 
63
<P>
 
64
 
 
65
<H1><A NAME="SECTION00410000000000000000">
 
66
3.1 Source code versus design criteria</A>
 
67
</H1>
 
68
 
 
69
<P>
 
70
<BR>
 
71
<DIV ALIGN="CENTER"><A NAME="fig:src_organization">&#160;</A><A NAME="105">&#160;</A>
 
72
<TABLE WIDTH="50%">
 
73
<CAPTION><STRONG>Figure 3.1:</STRONG>
 
74
Logical source code organization.</CAPTION>
 
75
<TR><TD>
 
76
<DIV ALIGN="CENTER">
 
77
 
 
78
<!-- MATH: $\includegraphics[width=5in]{p/src-organization.eps}$ -->
 
79
<IMG
 
80
 WIDTH="571" HEIGHT="608" ALIGN="BOTTOM" BORDER="0"
 
81
 SRC="developersguideimg10.gif"
 
82
 ALT="\includegraphics[width=5in]{p/src-organization.eps}"></DIV></TD></TR>
 
83
</TABLE>
 
84
</DIV>
 
85
<BR>
 
86
In this chapter we explain how the source code of TCM
 
87
is organized. TCM basically consists of about two dozen graphical editors 
 
88
and a startup program. The source code can be found in the directory
 
89
<A NAME="tex2html14"
 
90
 HREF="../../src"><TT>$TCM_HOME/src</TT></A>. The TCM source 
 
91
code is physically split over several subdirectories. The sources can 
 
92
be compiled into a number of object libraries 
 
93
and executables. The source code is split in order to factor out commonalities 
 
94
between the programs. See figure&nbsp;<A HREF="developersguidenode4.html#fig:src_organization">3.1</A> for a 
 
95
Venn-diagram like overview of the commonalities of the source code. 
 
96
The entire TCM source is called <I>Global</I>, the sources of the
 
97
programs that have an X/Motif GUI, are called <I>GUI</I>. The sources
 
98
that are used in all editors, are called <I>Editor</I>. The sources that 
 
99
are used in all diagram editors, are called <I>Diagram</I>. 
 
100
The sources that are used in all table editors are called <I>Table</I>.
 
101
The sources that are used in the editor TERD are called <I>TERD</I> etc. 
 
102
For instance, the editor TSSD uses the sources of the TSSD area, the TERD 
 
103
area, Diagram, Editor and Global, but it does not use Table or TCRD.
 
104
See figure&nbsp;<A HREF="developersguidenode4.html#fig:directory_tree">3.2</A> for an overview of 
 
105
the current TCM development directory structure.
 
106
The sources are physically split over several 
 
107
subdirectories of the src directory. This is done according to the 
 
108
following criteria:
 
109
<UL>
 
110
<LI>All code that is global and that is not part of the other areas is 
 
111
collected in the directory <A NAME="tex2html15"
 
112
 HREF="../../src/gl"><TT>src/gl</TT></A>. 
 
113
This code is compiled into a library called <TT>libglobal</TT>. This includes 
 
114
common classes for <A NAME="tex2html16"
 
115
 HREF="../sourcecode/List.html">lists</A>, 
 
116
<A NAME="tex2html17"
 
117
 HREF="../sourcecode/string.html">strings</A>, 
 
118
<A NAME="tex2html18"
 
119
 HREF="../sourcecode/System.html">Unix utilities</A>
 
120
etc. that can be 
 
121
used in any program, not necessarily a TCM tool.
 
122
 
 
123
<P>
 
124
<LI>All code that comprises the graphical user interface but which is not
 
125
specific for any TCM program is collected in the directory 
 
126
<A NAME="tex2html19"
 
127
 HREF="../../src/ui"><TT>src/ui</TT></A>.
 
128
This code is compiled into a library called <TT>libgui</TT>. This includes a
 
129
generic application framework for Motif based C++ programs, classes for
 
130
drawing lines and other shapes under X, classes for building all kinds of 
 
131
pop-up dialog windows, classes for making various pop-up and pull-down 
 
132
menus etc.
 
133
 
 
134
<P>
 
135
<LI>All code that lies in the editor area (and in the TCM area) but not 
 
136
in one of the subareas, is collected in the directory <A NAME="tex2html20"
 
137
 HREF="../../src/ed"><TT>src/ed</TT></A>. This code 
 
138
is compiled into a library called <TT>libeditor</TT> and in the executable <TT>tcm</TT>,
 
139
the startup program. The libeditor library includes things that are applicable to 
 
140
all TCM editors such as saving and loading documents (the generic part of it), 
 
141
printing documents, the on-line help and it contains a number of abstract classes
 
142
like <A NAME="tex2html21"
 
143
 HREF="../sourcecode/Document.html">Document</A>, 
 
144
<A NAME="tex2html22"
 
145
 HREF="../sourcecode/Viewer.html">Viewer</A>
 
146
and 
 
147
<A NAME="tex2html23"
 
148
 HREF="../sourcecode/Command.html">Command</A>
 
149
on which specific editor 
 
150
classes are based.  
 
151
 
 
152
<P>
 
153
<LI>All code that lies in the diagram area and that is not part of one
 
154
of the diagram subareas, is collected in directory <A NAME="tex2html24"
 
155
 HREF="../../src/dg"><TT>src/dg</TT></A>. This code is compiled into a library called <TT>libdiagram</TT>. This 
 
156
includes classes for (abstract) 
 
157
<A NAME="tex2html25"
 
158
 HREF="../sourcecode/Graph.html">graphs</A>
 
159
(and classes for 
 
160
<A NAME="tex2html26"
 
161
 HREF="../sourcecode/Node.html">nodes</A>
 
162
and 
 
163
<A NAME="tex2html27"
 
164
 HREF="../sourcecode/Edge.html">edges</A>), classes for
 
165
<A NAME="tex2html28"
 
166
 HREF="../sourcecode/GShape.html">graphical shapes</A>
 
167
(<A NAME="tex2html29"
 
168
 HREF="../sourcecode/Box.html">boxes</A>, 
 
169
<A NAME="tex2html30"
 
170
 HREF="../sourcecode/Line.html">lines</A>, 
 
171
<A NAME="tex2html31"
 
172
 HREF="../sourcecode/Ellipse.html">ellipses</A>) and 
 
173
classes for most diagram edit commands (<A NAME="tex2html32"
 
174
 HREF="../sourcecode/CreateNodeCmd.html">CreateNodeCmd</A>,
 
175
<A NAME="tex2html33"
 
176
 HREF="../sourcecode/CreateEdgeCmd.html">CreateEdgeCmd</A>, 
 
177
<A NAME="tex2html34"
 
178
 HREF="../sourcecode/DeleteShapesCmd.html">DeleteShapesCmd</A>,...). 
 
179
This library is used by every specific diagram editor.
 
180
 
 
181
<P>
 
182
<LI>All code that lies in the table area is collected in directory 
 
183
<A NAME="tex2html35"
 
184
 HREF="../../src/tb"><TT>src/tb</TT></A>. This code is compiled into 
 
185
a library called <TT>libtable</TT>. This includes classes for (abstract) 
 
186
<A NAME="tex2html36"
 
187
 HREF="../sourcecode/Table.html">tables</A>
 
188
having <A NAME="tex2html37"
 
189
 HREF="../sourcecode/CellRow.html">rows</A>
 
190
and 
 
191
<A NAME="tex2html38"
 
192
 HREF="../sourcecode/CellColumn.html">columns</A>
 
193
of 
 
194
<A NAME="tex2html39"
 
195
 HREF="../sourcecode/Cell.html">cells</A>
 
196
and it includes all the 
 
197
table edit commands. This library is used by each table editor.
 
198
 
 
199
<P>
 
200
<LI>All code that is specific one or more (but not all) of the diagram editors, is 
 
201
collected in the directory <A NAME="tex2html40"
 
202
 HREF="../../src/sd"><TT>src/sd</TT></A>
 
203
(specific 
 
204
diagram). Each specific diagram editor can be compiled into a distinct executable 
 
205
(at least in principle, it is also possible to compile more editors into one 
 
206
executable). As you can see in the picture, the code of some editors 
 
207
includes the code of others (e.g. TSSD code includes TERD specific code).
 
208
The specific diagram editor code consists of C++ classes derived from 
 
209
(possibly abstract) classes in libdiagram or from other specific diagram editor
 
210
classes. These classes are (indirectly) derived of the libdiagram classes 
 
211
<A NAME="tex2html41"
 
212
 HREF="../sourcecode/Graph.html">Graph</A>, 
 
213
<A NAME="tex2html42"
 
214
 HREF="../sourcecode/DiagramWindow.html">DiagramWindow</A>, 
 
215
<A NAME="tex2html43"
 
216
 HREF="../sourcecode/DiagramChecks.html">DiagramChecks</A>, 
 
217
<A NAME="tex2html44"
 
218
 HREF="../sourcecode/DiagramViewer.html">DiagramViewer</A>, 
 
219
<A NAME="tex2html45"
 
220
 HREF="../sourcecode/Diagram.html">Diagram</A>, 
 
221
<A NAME="tex2html46"
 
222
 HREF="../sourcecode/Shape.html">Shape</A>, 
 
223
<A NAME="tex2html47"
 
224
 HREF="../sourcecode/ShapeView.html">ShapeView</A>,
 
225
<A NAME="tex2html48"
 
226
 HREF="../sourcecode/Node.html">Node</A>
 
227
and 
 
228
<A NAME="tex2html49"
 
229
 HREF="../sourcecode/Edge.html">Edge</A>. The tool specific constraints are 
 
230
all implemented in the classes derived from <A NAME="tex2html50"
 
231
 HREF="../sourcecode/Graph.html">Graph</A>, <A NAME="tex2html51"
 
232
 HREF="../sourcecode/DiagramChecks.html">DiagramChecks</A>, <A NAME="tex2html52"
 
233
 HREF="../sourcecode/Node.html">Node</A>
 
234
and <A NAME="tex2html53"
 
235
 HREF="../sourcecode/Edge.html">Edge</A>. Because the 
 
236
specific diagram editor code is so diverse it is subdivided further into 
 
237
separate subdirectories:
 
238
<UL>
 
239
<LI><A NAME="tex2html54"
 
240
 HREF="../../src/sd/bv"><TT>src/sd/bv</TT></A>
 
241
is for the behavior view editors (TSTD, TATD, TRPG, TPSD),
 
242
<LI><A NAME="tex2html55"
 
243
 HREF="../../src/sd/dv"><TT>src/sd/dv</TT></A>
 
244
is for the data view editors (TERD, TESD, TSSD, TCRD, TUCD),
 
245
<LI><A NAME="tex2html56"
 
246
 HREF="../../src/sd/fv"><TT>src/sd/fv</TT></A>
 
247
is for the function view editors (TDFD, TEFD, TSND),
 
248
<LI><A NAME="tex2html57"
 
249
 HREF="../../src/sd/pv"><TT>src/sd/pv</TT></A>
 
250
is for the physical view editors (TCPD, TDPD),
 
251
<LI><A NAME="tex2html58"
 
252
 HREF="../../src/sd/gd"><TT>src/sd/gd</TT></A>
 
253
is for TGD and
 
254
<LI><A NAME="tex2html59"
 
255
 HREF="../../src/sd/tr"><TT>src/sd/tr</TT></A>
 
256
is for the tree editors (TGTT, TFRT).
 
257
</UL>The TGD sources form the most simple diagram editor and it can be used 
 
258
as a basis for developing your own diagram editors. Specific editors that
 
259
reside in the same directory can share one or more classes (for instance,
 
260
the class <A NAME="tex2html60"
 
261
 HREF="../sourcecode/BinaryRelationship.html">BinaryRelationship</A>
 
262
is used both by TSSD and TUCD), or, one editor shares/extends all classes of 
 
263
another editor (for instance, the classes of TFRT are all specializations of 
 
264
the classes of TGTT).
 
265
 
 
266
<P>
 
267
<LI>All code that is specific for the different table editors, is collected
 
268
in the directory <A NAME="tex2html61"
 
269
 HREF="../../src/st"><TT>src/st</TT></A>. The amount of 
 
270
specific table code is rather
 
271
small. The specific code consists entirely of specializations of
 
272
the following classes in libtable: 
 
273
<A NAME="tex2html62"
 
274
 HREF="../sourcecode/TableWindow.html">TableWindow</A>, 
 
275
<A NAME="tex2html63"
 
276
 HREF="../sourcecode/TableViewer.html">TableViewer</A>
 
277
and 
 
278
<A NAME="tex2html64"
 
279
 HREF="../sourcecode/Table.html">Table</A>. 
 
280
Also, most of the tool specific constraints are implemented in these 
 
281
specializations of class Table.
 
282
 
 
283
<P>
 
284
</UL>
 
285
<P>
 
286
In principle each C++ class is declared in a distinct header file
 
287
and has a distinct source file for the implementation. The files
 
288
names are equal to the class name except that file names are in
 
289
lower case letters by convention. Header files have suffix '.h' and 
 
290
source file have suffix '.c'. The reason that C++ source files have 
 
291
suffix '.c', which is originally used only for C programs, is that 
 
292
some C++ compilers require a suffix '.C', and some require '.cc' or 
 
293
'.cpp'. There is no C++ file name suffix that is accepted 
 
294
by <I>all</I> compilers that we have used except the '.c' suffix. 
 
295
 
 
296
<P>
 
297
<BR>
 
298
<DIV ALIGN="CENTER"><A NAME="fig:directory_tree">&#160;</A><A NAME="233">&#160;</A>
 
299
<TABLE WIDTH="50%">
 
300
<CAPTION><STRONG>Figure 3.2:</STRONG>
 
301
TCM directory tree.</CAPTION>
 
302
<TR><TD>
 
303
<DIV ALIGN="CENTER">
 
304
 
 
305
<!-- MATH: $\includegraphics[width=4.5in]{p/tcm-distribution.eps}$ -->
 
306
<IMG
 
307
 WIDTH="504" HEIGHT="766" ALIGN="BOTTOM" BORDER="0"
 
308
 SRC="developersguideimg12.gif"
 
309
 ALT="\includegraphics[width=4.5in]{p/tcm-distribution.eps}"></DIV></TD></TR>
 
310
</TABLE>
 
311
</DIV>
 
312
<BR>
 
313
<P>
 
314
 
 
315
<H1><A NAME="SECTION00420000000000000000">&#160;</A><A NAME="sec:files_and_dirs">&#160;</A>
 
316
<BR>
 
317
3.2 Individual files and directories
 
318
</H1>
 
319
 
 
320
<P>
 
321
In the previous section we described the contents of the 
 
322
<A NAME="tex2html65"
 
323
 HREF="../../src"><TT>src</TT></A>
 
324
subdirectory.
 
325
Here we will describe the individual files and directories that are included in 
 
326
the source code distributions of TCM. The TCM distribution top-level directory 
 
327
contains the following files:
 
328
<UL>
 
329
<LI><A NAME="tex2html66"
 
330
 HREF="../../CHANGELOG"><TT>CHANGELOG</TT></A>, which contains 
 
331
the differences between the consecutive TCM versions.
 
332
<LI><A NAME="tex2html67"
 
333
 HREF="../../COPYING"><TT>COPYING</TT></A>, which is the GNU public license.
 
334
<LI><A NAME="tex2html68"
 
335
 HREF="../../FILEMAP"><TT>FILEMAP</TT></A>, which lists and describes 
 
336
the files and directories in the TCM executable distributions.
 
337
<LI><A NAME="tex2html69"
 
338
 HREF="../../INSTALL"><TT>INSTALL</TT></A>, which tells how to install 
 
339
the binary and source code distributions.
 
340
<LI><A NAME="tex2html70"
 
341
 HREF="../../MANIFEST"><TT>MANIFEST</TT></A>, which lists all files 
 
342
and directories in the TCM distribution.
 
343
<LI><A NAME="tex2html71"
 
344
 HREF="../../Makefile"><TT>Makefile</TT></A>, which is the top-level 
 
345
Makefile. Most sub(sub)directories contain a Makefile too. See 
 
346
chapter&nbsp;<A HREF="developersguidenode8.html#chap:compiling">7</A> for what to do with these Makefiles.
 
347
<LI><A NAME="tex2html72"
 
348
 HREF="../../README"><TT>README</TT></A>, which is the README file 
 
349
about the TCM project, the software, manuals, distributions etc.
 
350
<LI><A NAME="tex2html73"
 
351
 HREF="../../tcm.lsm"><TT>tcm.lsm</TT></A>
 
352
is a file that describes 
 
353
TCM in the format that is required by the Linux software map. TCM is registered in 
 
354
the LSM (<A NAME="tex2html74"
 
355
 HREF="http://www.execpc.com/lsm/"><TT>http://www.execpc.com/lsm/</TT></A>).
 
356
<LI><A NAME="tex2html75"
 
357
 HREF="../../tcm-dynmotif-2.0.spec"><TT>tcm-dynmotif-2.0.spec</TT></A>. RPM spec file for building
 
358
a TCM RPM distribution that links dynamically with the Motif/LessTif library.
 
359
You can use (a modified copy of) this spec-file to build your own TCM
 
360
RPMs. See <A NAME="tex2html76"
 
361
 HREF="http://www.rpm.org"><TT>http://www.rpg.org</TT></A>
 
362
for 
 
363
more information about RPMs.
 
364
<LI><A NAME="tex2html77"
 
365
 HREF="../../tcm-statmotif-2.0.spec"><TT>tcm-statmotif-2.0.spec</TT></A>. RPM spec file for building
 
366
a TCM RPM distribution that is statically linked with a Motif library.
 
367
</UL>
 
368
<P>
 
369
The top-level directory contains the following directories:
 
370
<UL>
 
371
<LI><A NAME="tex2html78"
 
372
 HREF="../../bin"><TT>bin/</TT></A>. Here the TCM editors and other 
 
373
binaries are put after compilation. Also this directory contains a number of 
 
374
utility programs:
 
375
<UL>
 
376
<LI><A NAME="tex2html79"
 
377
 HREF="../../bin/mkbindist"><TT>bin/mkbindist</TT></A>. This is a 
 
378
shell script that makes a tar.gz file of a binary distribution of the compiled 
 
379
source code. The script needs two arguments
 
380
for the version number and the platform, e.g. <TT>mkbindist 2.0 solaris.sparc</TT>.
 
381
This will create the file <TT>tcm-2.0.bin.solaris.sparc.tar.gz</TT> in <TT>$TCM_HOME</TT>.
 
382
The files that will be included are listed in the code of the script itself.
 
383
<LI><A NAME="tex2html80"
 
384
 HREF="../../bin/mksrcdist"><TT>bin/mksrcdist</TT></A>. This is a 
 
385
shell script that makes a tar.gz file of the source code. It needs one argument 
 
386
for the version number, e.g. <TT>mksrcdist 2.0</TT>.
 
387
This will create the file <TT>tcm-2.0.src.tar.gz</TT> in <TT>$TCM_HOME</TT>.
 
388
The files that will be included are listed in the code of the script itself.
 
389
<LI><A NAME="tex2html81"
 
390
 HREF="../../bin/mkclasslist"><TT>bin/mkclasslist</TT></A>. This is a 
 
391
shell script that writes the names of all header files of the source code to 
 
392
standard output in alphabetical order.
 
393
<LI><A NAME="tex2html82"
 
394
 HREF="../../bin/psf"><TT>bin/psf</TT></A>. This is a Perl script
 
395
that is used to filter PostScript output (see <TT>man psf</TT>).
 
396
</UL>
 
397
<P>
 
398
<LI><A NAME="tex2html83"
 
399
 HREF="../../doc"><TT>doc/</TT></A>. Here all technical and user 
 
400
documentation can be found. The documentation is in HTML-format and possibly in PostScript
 
401
and/or PDF format. The file <A NAME="tex2html84"
 
402
 HREF="../../doc/index.html"><TT>doc/index.html</TT></A>
 
403
links to all the different HTML documents. The documentation includes:
 
404
 
 
405
<P>
 
406
<UL>
 
407
<LI><B>User's guide</B>. 
 
408
In <A NAME="tex2html85"
 
409
 HREF="../usersguide/index.html"><TT>usersguide/index.html</TT></A>
 
410
you can 
 
411
find an HTML version. A  PostScript version can be found in 
 
412
<A NAME="tex2html86"
 
413
 HREF="../usersguide-2.0.ps.gz"><TT>usersguide-2.0.ps.gz</TT></A>
 
414
(large PostScript files in TCM are always gzipped to save disk space).
 
415
Optionally a PDF copy is put in
 
416
<A NAME="tex2html87"
 
417
 HREF="../usersguide-2.0.pdf"><TT>doc/usersguide-2.0.pdf</TT></A>
 
418
<LI><B>Developer's guide</B>, which is the document that you are reading now.
 
419
In <BR> <A NAME="tex2html88"
 
420
 HREF="index.html"><TT>developersguide/index.html</TT></A>
 
421
you can find 
 
422
an HTML version. A gzipped PostScript version can be found in 
 
423
<A NAME="tex2html89"
 
424
 HREF="../developersguide-2.0.ps.gz"><TT>developersguide-2.0.ps.gz</TT></A>. Optionally a PDF copy is found in 
 
425
<A NAME="tex2html90"
 
426
 HREF="../developersguide-2.0.pdf"><TT>developersguide-2.0.pdf</TT></A>
 
427
<LI><B>Source code documentation</B>. For each C++ class an HTML page is generated
 
428
by the program DOC++ (see chapter&nbsp;<A HREF="developersguidenode6.html#chap:class_hierarchy">5</A>). The HTML index is in 
 
429
<A NAME="tex2html91"
 
430
 HREF="../sourcecode/index.html"><TT>sourcecode/index.html</TT></A>. Also a 
 
431
PostScript document with all the source code documentation can be found in 
 
432
<A NAME="tex2html92"
 
433
 HREF="../sourcecode-2.0.ps.gz"><TT>sourcecode-2.0.ps.gz</TT></A>
 
434
<LI><B>Specifications</B>. The directory <A NAME="tex2html93"
 
435
 HREF="../specifications"><TT>specifications</TT></A>
 
436
contains a number of specifications (made with TCM) of some 
 
437
individual editors.
 
438
<LI><B>Wish lists</B>. The directory <A NAME="tex2html94"
 
439
 HREF="../wishlist"><TT>wishlist</TT></A>
 
440
contains: 
 
441
 
 
442
<UL>
 
443
<LI><A NAME="tex2html95"
 
444
 HREF="../wishlist/FutureDevelopments.html"><TT>FutureDevelopments.html</TT></A>. An overview of major TCM 
 
445
 
 
446
extensions that we have in mind.
 
447
<LI><A NAME="tex2html96"
 
448
 HREF="../wishlist/WishList.html"><TT>WishList.html</TT></A>.
 
449
 
 
450
A list with unfulfilled wishes for TCM.
 
451
<LI><A NAME="tex2html97"
 
452
 HREF="../wishlist/WishListDone.html"><TT>WishListDone.html</TT></A>. 
 
453
 
 
454
A list with fulfilled wishes for TCM.
 
455
        </UL>
 
456
<LI><B>Document sources</B>. In the directory <A NAME="tex2html98"
 
457
 HREF="../docsrc"><TT>docsrc</TT></A>
 
458
you can find the L<SUP><SMALL>A</SMALL></SUP>T<SMALL>E</SMALL>X, EPS and TCM files that comprise the sources of the documentation. 
 
459
These files are not included in the source code distribution itself. The sources can be 
 
460
downloaded separately from our FTP-site, from a file 
 
461
<A NAME="tex2html99"
 
462
 HREF="ftp://ftp.cs.utwente.nl/pub/tcm/tcm-2.0.docsrc.tar.gz"><TT>tcm-2.0.docsrc.tar.gz</TT></A>
 
463
The sources contain a number of Makefiles to generate a number of documents automatically. 
 
464
The program DOC++ is used to generate HTML and L<SUP><SMALL>A</SMALL></SUP>T<SMALL>E</SMALL>X from the C++ source code, 
 
465
L<SUP><SMALL>A</SMALL></SUP>T<SMALL>E</SMALL>X2<TT>HTML</TT> is used to generate the HTML versions of the user's and developer's guide. 
 
466
We have included the sources of DOC++, so that it will be compiled and installed before 
 
467
you build the documentation. L<SUP><SMALL>A</SMALL></SUP>T<SMALL>E</SMALL>X2<TT>HTML</TT> can be downloaded from 
 
468
<A NAME="tex2html100"
 
469
 HREF="ftp://ftp.tex.ac.uk/tex-archive/support/latex2html"><TT>ftp.tex.ac.uk/tex-archive/support/latex2html</TT></A>
 
470
L<SUP><SMALL>A</SMALL></SUP>T<SMALL>E</SMALL>X2<TT>HTML</TT> is written in Perl and you have to configure it yourself
 
471
before you can use it on your system. This is all explained in the README 
 
472
file of L<SUP><SMALL>A</SMALL></SUP>T<SMALL>E</SMALL>X2<TT>HTML</TT>.
 
473
</UL>
 
474
<P>
 
475
<LI><A NAME="tex2html101"
 
476
 HREF="../../lib"><TT>lib/</TT></A>. Here the object libraries 
 
477
(libglobal, libgui, libeditor, libdiagram and libtable) are stored after compilation. 
 
478
Furthermore this directory contains:
 
479
<UL>
 
480
<LI><A NAME="tex2html102"
 
481
 HREF="../../lib/TCM"><TT>lib/TCM</TT></A>
 
482
is the X Resources file. 
 
483
This file is not directly used by TCM (the default X resources of TCM are included 
 
484
in the source code), but it serves as a basis of your own modifications. 
 
485
You can load X resources with the <TT>xrdb</TT> command or by including them in some 
 
486
X-startup file like <TT>$HOME/.Xdefaults</TT>.
 
487
<LI><A NAME="tex2html103"
 
488
 HREF="../../lib/banner.ps"><TT>lib/banner.ps</TT></A>
 
489
is a PostScript 
 
490
banner page. Normally this page is not printed but when you wish to print this 
 
491
banner page in front of your TCM documents, you can indicate this via the Printer 
 
492
Options sub-menu of in your editor or you can make this option the default by updating the 
 
493
<A NAME="tex2html104"
 
494
 HREF="../../lib/tcm.conf"><TT>tcm.conf</TT></A>
 
495
file.
 
496
<LI><A NAME="tex2html105"
 
497
 HREF="../../lib/colorrgb.txt"><TT>lib/colorrgb.txt</TT></A>
 
498
is an ASCII 
 
499
file that maps TCM color names to red-green-blue (rgb) values.
 
500
<LI><A NAME="tex2html106"
 
501
 HREF="../../lib/help/"><TT>lib/help/</TT></A>
 
502
is a directory with the 
 
503
on-line help text files. The help files are all in ASCII format. These help texts are 
 
504
shown by the commands of the help-menu in the editors.
 
505
<LI><A NAME="tex2html107"
 
506
 HREF="../../lib/tcm.conf"><TT>lib/tcm.conf</TT></A>
 
507
is the TCM configuration 
 
508
file that is read upon start-up. It contains also some platform specific configuration 
 
509
options, like the name of the printer and the command to print or preview files.
 
510
This file is intended to be human-readable and self-documenting. In stead of 
 
511
editing this file (which will affect all users of this TCM installation), you 
 
512
can also decide to override one or more options in a personal configuration file
 
513
<TT>$HOME/.tcmrc</TT>. <TT>.tcmrc</TT> has the same syntax as 
 
514
<TT>tcm.conf</TT>. Note that some system specific configuration options such as the command 
 
515
to print or preview a document is commented out in 
 
516
<A NAME="tex2html108"
 
517
 HREF="../../lib/tcm.conf"><TT>tcm.conf</TT></A>. That is because TCM 
 
518
itself tries to determine these commands. Only if TCM can't find these commands 
 
519
or it chooses the wrong ones, you should set these as options explicitly by 
 
520
modifying <TT>tcm.conf</TT>.
 
521
</UL>
 
522
<P>
 
523
<LI><A NAME="tex2html109"
 
524
 HREF="../../man"><TT>man/</TT></A>
 
525
contains Unix man pages for TCM.
 
526
<UL>
 
527
<LI><A NAME="tex2html110"
 
528
 HREF="../../man/man1"><TT>man/man1/</TT></A>
 
529
contains short manual pages 
 
530
in nroff-format for each of the editors.
 
531
<LI><A NAME="tex2html111"
 
532
 HREF="../../man/windex"><TT>man/windex</TT></A>
 
533
contains a simple index 
 
534
file that is used by <TT>whatis</TT> and <TT>man -k</TT>.
 
535
</UL>
 
536
<P>
 
537
</UL>
 
538
<P>
 
539
 
 
540
<H1><A NAME="SECTION00430000000000000000">
 
541
3.3 Object libraries</A>
 
542
</H1>
 
543
 
 
544
<P>
 
545
Depending on the operating system and the way 
 
546
TCM is compiled, object libraries are either <B>shared object libraries</B>,
 
547
ending on <TT>.so</TT> or <B>object archive libraries</B> ending on <TT>.a</TT>.
 
548
In the first case, the object code in the library is kept separated from 
 
549
the tool executables (they are dynamically linked), which makes 
 
550
executables smaller and run faster. For the Sun CC compiler (the default 
 
551
Solaris compiler) shared object libraries are made by default. For the
 
552
other compilers such as <TT>gcc</TT> archive libraries are made by default.
 
553
The contents of archive libraries are physically made part of the tool 
 
554
executables (they are statically linked); the libraries could be removed 
 
555
when compilation is completed.
 
556
 
 
557
<P>
 
558
Executables using object archive libraries tend to be much larger than
 
559
with shared object libraries.  Because of that, distributions that have 
 
560
to use archive libraries are in general compiled into only a few different
 
561
executables, e.g.  one for the tcm startup tool, one for all the diagram 
 
562
editors and one for all the table editors. The individual editors are then 
 
563
<I>symbolic links</I> to the collective diagram or table editor. The collective 
 
564
editor will see in its <TT>argv[0]</TT> argument which of the tools has to be 
 
565
launched.
 
566
 
 
567
<P>
 
568
<HR>
 
569
<!--Navigation Panel-->
 
570
<A NAME="tex2html300"
 
571
 HREF="developersguidenode5.html">
 
572
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
 
573
<A NAME="tex2html297"
 
574
 HREF="TechDoc.html">
 
575
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
 
576
<A NAME="tex2html291"
 
577
 HREF="developersguidenode3.html">
 
578
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
 
579
<A NAME="tex2html299"
 
580
 HREF="developersguidenode1.html">
 
581
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A>  
 
582
<BR>
 
583
<B> Next:</B> <A NAME="tex2html301"
 
584
 HREF="developersguidenode5.html">4. TCM User Interface</A>
 
585
<B> Up:</B> <A NAME="tex2html298"
 
586
 HREF="TechDoc.html">Toolkit for Conceptual Modeling</A>
 
587
<B> Previous:</B> <A NAME="tex2html292"
 
588
 HREF="developersguidenode3.html">2. System Architecture</A>
 
589
<!--End of Navigation Panel-->
 
590
<ADDRESS>
 
591
<I>Henk van de Zandschulp</I>
 
592
<BR><I>2003-01-07</I>
 
593
</ADDRESS>
 
594
</BODY>
 
595
</HTML>