Minor edit.
[clqr.git] / clqr-types-and-classes.mp
blobb2f6a71e63be3940ba44daf631c6d078137ce66b
1 % Copyright (C) 2010 Bert Burgemeister
3 % Permission is granted to copy, distribute and/or modify this
4 % document under the terms of the GNU Free Documentation License,
5 % Version 1.2 or any later version published by the Free Software
6 % Foundation; with no Invariant Sections, no Front-Cover Texts and
7 % no Back-Cover Texts. For details see file COPYING.
10 % prologues := 3 makes clqr-types-and-classes.1 viewable but uses the
11 % wrong font for \A; use the following only when debugging.
13 %prologues := 3;
15 input boxes;
17 verbatimtex
18 \documentclass[8pt,pagesize,twoside,footexclude,headexclude]{scrartcl}
19 \input{clqr.packages}
20 \input{clqr.macros}
21 \begin{document}
22 etex
24 def drawboxed_type (text items ) =
25   begingroup
26     pickup pencircle scaled .2;
27     drawboxed(items);
28   endgroup
29 enddef;
31 def drawboxed_system_class (text items ) =
32   begingroup
33     pickup pencircle scaled 1;
34     drawboxed(items);
35   endgroup
36 enddef;
38 def drawboxed_condition_type (text items ) =
39   begingroup
40     pickup pencircle xscaled 1 yscaled .2;
41     drawboxed(items);
42   endgroup
43 enddef;
45 def drawboxed_class (text items ) =
46   begingroup
47     pickup pencircle xscaled .2 yscaled 1;
48     drawboxed(items);
49   endgroup
50 enddef;
52 def halfdisc_e(expr point) =
53   fill halfcircle scaled 4 rotated -90 shifted point --cycle
54 enddef;
56 def halfdisc_n(expr point) =
57   fill halfcircle scaled 4 shifted point --cycle
58 enddef;
60 def halfdisc_s(expr point) =
61   fill halfcircle scaled 4 rotated 180 shifted point --cycle
62 enddef;
64 defaultdx := 2;
65 defaultdy := 2;
67 % Main Figure:
69 beginfig(1);
71   boxit.t(btex \T etex);
72   t.nw = (0,0);
73   drawboxed_system_class(t);
75   boxjoin(a.sw+(0,-3) = b.nw);
76   boxit.atom(btex \kwd*{ATOM} etex);
77   boxit.readtable(btex \kwd*{READTABLE} etex);
78   boxit.package(btex \kwd*{PACKAGE} etex);
79   boxit.symbol(btex \kwd*{SYMBOL} etex);
80   t.se+(12,0) = atom.nw;
81   drawboxed_type(atom);
82   drawboxed_system_class(readtable,package,symbol);
83   
84   boxjoin(a.sw+(0,-3) = b.nw);
85   boxit.keyword(btex \kwd*{KEYWORD} etex);
86   boxit.boolean_(btex \kwd*{BOOLEAN} etex);
87   symbol.sw+(35,-3) = keyword.nw;
88   drawboxed_type(keyword,boolean_);
90   boxjoin(a.sw+(0,-3) = b.nw);
91   boxit.restart(btex \kwd*{RESTART} etex);
92   boxit.random_state(btex \kwd*{RANDOM-STATE} etex);
93   boxit.hash_table(btex \kwd*{HASH-TABLE} etex);
94   boxit.structure_object(btex \kwd*{STRUCTURE-OBJECT} etex);
95   boxit.standard_object(btex \kwd*{STANDARD-OBJECT} etex);
96   boolean_.sw+(-35,-5) = restart.nw;
97   drawboxed_system_class(restart,random_state,hash_table);
98   drawboxed_class(structure_object,standard_object);
99   
100   boxjoin()
101   boxit.null(btex \kwd*{NULL} etex);
102   symbol.se+(15,0) = null.sw;
103   drawboxed_system_class(null);
105   boxjoin();
106   boxit.class(btex \kwd*{CLASS} etex);
107   standard_object.sw+(-10,-3) = class.nw ;
108   drawboxed_system_class(class);
110   boxjoin(a.sw+(0,-3) = b.nw);
111   boxit.built_in_class(btex \kwd*{BUILT-IN-CLASS} etex);
112   boxit.standard_class(btex \kwd*{STANDARD-CLASS} etex);
113   boxit.structure_class(btex \kwd*{STRUCTURE-CLASS} etex);
114   class.sw+(15,-3) = built_in_class.nw;
115   drawboxed_system_class(built_in_class,standard_class,structure_class);
116   
117   boxjoin(a.sw+(0,-3) = b.nw);
118   boxit.method(btex \kwd*{METHOD} etex);
119   boxit.standard_method(btex \kwd*{STANDARD-METHOD} etex);
120   structure_class.sw+(-5,-6) = method.nw;
121   drawboxed_system_class(method,standard_method);
122   
123   boxjoin();
124   boxit.method_combination(btex \kwd*{METHOD-COMBINATION} etex);
125   method_combination.nw = (xpart t.w,ypart standard_method.s - 3);
126   drawboxed_system_class(method_combination);
127   
128   boxjoin();
129   boxit.character(btex \kwd*{CHARACTER} etex);
130   atom.ne+(23,-10) = character.nw;
131   drawboxed_system_class(character);
132   
133   boxjoin()
134   boxit.function(btex \kwd*{FUNCTION} \OP{\VAR{arg-types} \Op{\VAR{value-types}}} etex);
135   function.nw = (205,-10);
136   drawboxed_system_class(function);
137   
138   boxjoin(a.sw+(0,-3) = b.nw);
139   boxit.compiled_function(btex \kwd*{COMPILED-FUNCTION} etex);
140   boxit.generic_function(btex \kwd*{GENERIC-FUNCTION} etex);
141   boxit.standard_generic_function(btex \kwd*{STANDARD-GENERIC-FUNCTION} etex);
142   function.se+(0,-3) = compiled_function.ne;
143   drawboxed_type(compiled_function);
144   drawboxed_system_class(generic_function,standard_generic_function);
145   
146   boxjoin(a.sw+(0,-3) = b.nw);
147   boxit.pathname(btex \kwd*{PATHNAME} etex);
148   boxit.logical_pathname(btex \kwd*{LOGICAL-PATHNAME} etex);
149   pathname.nw = (345,-20);
150   drawboxed_system_class(pathname,logical_pathname);
152   boxjoin(a.se+(0,-3) = b.ne);
153   boxit.number(btex \kwd*{NUMBER} etex);
154   boxit.complex(btex \kwd*{COMPLEX} \Op{\VAR{type}\DF{\kwd{\A}}} etex);
155   boxit.real(btex \kwd*{REAL} \OP{\VAR{lower-limit}\DF{\kwd{\A}} \Op{\VAR{upper-limit}\DF{\kwd{\A}}}} etex);
156   number.nw = (433,-44);
157   drawboxed_system_class(number,complex,real);
158   
159   boxjoin()
160   boxit.float(btex \kwd*{FLOAT} \OP{\VAR{lower-limit}\DF{\kwd{\A}} \Op{\VAR{upper-limit}\DF{\kwd{\A}}}} etex);
161   real.s+(15,-3) = float.n;
162   drawboxed_system_class(float);
164   boxjoin(a.se+(0,-3) = b.ne);
165   boxit.short_float(btex \kwd*{SHORT-FLOAT} \OP{\VAR{lower-limit}\DF{\kwd{\A}} \Op{\VAR{upper-limit}\DF{\kwd{\A}}}} etex);
166   boxit.single_float(btex \kwd*{SINGLE-FLOAT} \OP{\VAR{lower-limit}\DF{\kwd{\A}} \Op{\VAR{upper-limit}\DF{\kwd{\A}}}} etex);
167   boxit.double_float(btex \kwd*{DOUBLE-FLOAT} \OP{\VAR{lower-limit}\DF{\kwd{\A}} \Op{\VAR{upper-limit}\DF{\kwd{\A}}}} etex);
168   boxit.long_float(btex \kwd*{LONG-FLOAT} \OP{\VAR{lower-limit}\DF{\kwd{\A}} \Op{\VAR{upper-limit}\DF{\kwd{\A}}}} etex);
169   boxit.rational(btex \kwd*{RATIONAL} \OP{\VAR{lower-limit}\DF{\kwd{\A}} \Op{\VAR{upper-limit}\DF{\kwd{\A}}}} etex);
170   boxit.integer(btex \kwd*{INTEGER} \OP{\VAR{lower-limit}\DF{\kwd{\A}} \Op{\VAR{upper-limit}\DF{\kwd{\A}}}} etex);
171   float.se+(-15,-3) = short_float.ne;
172   drawboxed_type(short_float,single_float,double_float,long_float);
173   drawboxed_system_class(rational,integer);
174   
175   boxjoin();
176   boxit.ratio(btex \kwd*{RATIO} etex);
177   integer.sw+(0,-3) = ratio.nw;
178   drawboxed_system_class(ratio);
180   boxjoin(a.e+(3,0) = b.w);
181   boxit.signed_byte(btex \kwd*{SIGNED-BYTE} \Op{\VAR{size}\DF{\kwd{\A}}} etex);
182   boxit.fixnum(btex \kwd*{FIXNUM} etex);
183   boxit.bignum(btex \kwd*{BIGNUM} etex);
184   ratio.sw+(0,-3) = signed_byte.nw;
185   drawboxed_type(signed_byte,fixnum,bignum);
187   boxjoin(a.e+(10,0) = b.w);
188   boxit.unsigned_byte(btex \kwd*{UNSIGNED-BYTE} \Op{\VAR{size}\DF{\kwd{\A}}} etex);
189   boxit.bit(btex \kwd*{BIT} etex);
190   signed_byte.sw+(25,-3) = unsigned_byte.nw;
191   drawboxed_type(unsigned_byte,bit);
192   
193   boxjoin(a.e+(20,0) = b.w);
194   boxit.list(btex \kwd*{LIST} etex);
195   boxit.sequence(btex \kwd*{SEQUENCE} etex);
196   list.sw = (142,-71);
197   drawboxed_system_class(list,sequence);
198   
199   boxjoin();
200   boxit.cons(btex \kwd*{CONS} \OP{\VAR{car-type}\DF{\kwd{\A}} \Op{\VAR{cdr-type}\DF{\kwd{\A}}}} etex);
201   sequence.se+(7,-3) = cons.ne;
202   drawboxed_system_class(cons);
203   
204   boxjoin(a.sw+(0,-3) = b.nw);
205   boxit.array(btex \kwd*{ARRAY} \OP{\VAR{type}\DF{\kwd{\A}} \Op{\VAR{rank}\DF{\kwd{\A}}\XOR(\OPn{\VAR{dimension}})}} etex);
206   boxit.simple_array(btex \kwd*{SIMPLE-ARRAY} \OP{\VAR{type}\DF{\kwd{\A}} \Op{\VAR{rank}\DF{\kwd{\A}}\XOR(\OPn{\VAR{dimension}})}} etex);
207   boxit.vector(btex \kwd*{VECTOR} \OP{\VAR{type}\DF{\kwd{\A}} \Op{\VAR{size}\DF{\kwd{\A}}}} etex);
208   boxit.string_(btex \kwd*{STRING} \Op{\VAR{size}\DF{\kwd{\A}}} etex);
209   boxit.simple_string(btex \kwd*{SIMPLE-STRING} \Op{\VAR{size}\DF{\kwd{\A}}} etex);
210   boxit.base_string(btex \kwd*{BASE-STRING} \Op{\VAR{size}\DF{\kwd{\A}}} etex);
211   boxit.simple_base_string(btex \kwd*{SIMPLE-BASE-STRING} \Op{\VAR{size}\DF{\kwd{\A}}} etex);
212   boxit.simple_vector(btex \kwd*{SIMPLE-VECTOR} \Op{\VAR{size}\DF{\kwd{\A}}} etex);
213   boxit.bit_vector(btex \kwd*{BIT-VECTOR} \Op{\VAR{size}\DF{\kwd{\A}}} etex);
214   boxit.simple_bit_vector(btex \kwd*{SIMPLE-BIT-VECTOR} \Op{\VAR{size}\DF{\kwd{\A}}} etex);
215   cons.se+(18,-3) = array.ne;
216   drawboxed_system_class(array);
217   drawboxed_type(simple_array);
218   drawboxed_system_class(vector,string_);
219   drawboxed_type(simple_string,base_string,simple_base_string,simple_vector);
220   drawboxed_system_class(bit_vector);
221   drawboxed_type(simple_bit_vector);
223   boxjoin();
224   boxit.stream(btex \kwd*{STREAM} etex);
225   stream.ne = (315,-75);
226   drawboxed_system_class(stream);
228   boxjoin(a.se+(0,-3) = b.ne);
229   boxit.file_stream(btex \kwd*{FILE-STREAM} etex);
230   boxit.two_way_stream(btex \kwd*{TWO-WAY-STREAM} etex);
231   boxit.synonym_stream(btex \kwd*{SYNONYM-STREAM} etex);
232   boxit.string_stream(btex \kwd*{STRING-STREAM} etex);
233   boxit.broadcast_stream(btex \kwd*{BROADCAST-STREAM} etex);
234   boxit.concatenated_stream(btex \kwd*{CONCATENATED-STREAM} etex);
235   boxit.echo_stream(btex \kwd*{ECHO-STREAM} etex);
236   stream.se+(-33,-69) = file_stream.ne;
237   drawboxed_system_class(file_stream,two_way_stream,synonym_stream,string_stream,broadcast_stream,concatenated_stream,echo_stream);
238   
239   boxjoin(a.se+(0,-3) = b.ne);
240   boxit.extended_char(btex \kwd*{EXTENDED-CHAR} etex);
241   boxit.base_char(btex \kwd*{BASE-CHAR} etex);
242   character.e+(10,0) = extended_char.w;
243   drawboxed_type(extended_char,base_char);
244   
245   boxjoin();
246   boxit.standard_char(btex \kwd*{STANDARD-CHAR} etex);
247   base_char.sw+(0,-3) = standard_char.nw;
248   drawboxed_type(standard_char);
249   
250   
251 %% Conditions %%
253   boxjoin(a.sw+(0,-3) = b.nw);
254   boxit.condition(btex \kwd*{CONDITION} etex);
255   boxit.serious_condition(btex \kwd*{SERIOUS-CONDITION} etex);
256   t.e+(400,0) = condition.w;
257   drawboxed_condition_type(condition,serious_condition);
259   boxjoin(a.sw+(0,-3) = b.nw);
260   boxit.storage_condition(btex \kwd*{STORAGE-CONDITION} etex);
261   boxit.simple_type_error(btex \kwd*{SIMPLE-TYPE-ERROR} etex);
262   serious_condition.e+(10,2) = storage_condition.w;
263   drawboxed_condition_type(storage_condition,simple_type_error);
265   boxjoin()
266   boxit.type_error(btex \kwd*{TYPE-ERROR} etex);
267   simple_type_error.sw+(15,-3) = type_error.nw;
268   drawboxed_condition_type(type_error);
270   boxjoin();
271   boxit.error(btex \kwd*{ERROR}\\ etex);
272   type_error.sw+(-15,-3) = error.nw;
273   drawboxed_condition_type(error);
274   
275   boxjoin(a.sw+(0,-3) = b.nw);
276   boxit.program_error(btex \kwd*{PROGRAM-ERROR} etex);
277   boxit.control_error(btex \kwd*{CONTROL-ERROR} etex);
278   boxit.package_error(btex \kwd*{PACKAGE-ERROR} etex);
279   boxit.print_not_readable(btex \kwd*{PRINT-NOT-READABLE} etex);
280   boxit.stream_error(btex \kwd*{STREAM-ERROR} etex);
281   boxit.parse_error(btex \kwd*{PARSE-ERROR} etex);
282   boxit.cell_error(btex \kwd*{CELL-ERROR} etex);
283   boxit.file_error(btex \kwd*{FILE-ERROR} etex);
284   error.sw+(15,-3) = program_error.nw;
285   drawboxed_condition_type(program_error,control_error,package_error,print_not_readable,stream_error,parse_error,cell_error,file_error);
287   boxjoin();
288   boxit.arithmetic_error(btex \kwd*{ARITHMETIC-ERROR} etex);
289   file_error.sw+(-15,-3) = arithmetic_error.nw;
290   drawboxed_condition_type(arithmetic_error);
292   boxjoin();
293   boxit.simple_condition(btex \kwd*{SIMPLE-CONDITION} etex);
294   type_error.se+(10,-2) = simple_condition.w;
295   drawboxed_condition_type(simple_condition);
297   boxjoin();
298   boxit.warning(btex \kwd*{WARNING} etex);
299   condition.ne+(120,0) = warning.nw;
300   drawboxed_condition_type(warning);
302   boxjoin(a.sw+(0,-3) = b.nw);
303   boxit.style_warning(btex \kwd*{STYLE-WARNING} etex);
304   warning.sw+(0,-3) = style_warning.nw;
305   drawboxed_condition_type(style_warning);
307   boxjoin(a.s+(0,-3) = b.n);
308   boxit.simple_error(btex \kwd*{SIMPLE-ERROR} etex);
309   boxit.simple_warning(btex \kwd*{SIMPLE-WARNING} etex);
310   simple_condition.s+(7,-10) = simple_error.n;
311   drawboxed_condition_type(simple_error,simple_warning);
313   boxjoin(a.se+(0,-3) = b.ne);
314   boxit.end_of_file(btex  \kwd*{END-OF-FILE} etex);
315   boxit.reader_error(btex \kwd*{READER-ERROR} etex);
316   boxit.undefined_function(btex  \kwd*{UNDEFINED-FUNCTION} etex);
317   boxit.unbound_variable(btex  \kwd*{UNBOUND-VARIABLE} etex);
318   boxit.unbound_slot(btex  \kwd*{UNBOUND-SLOT} etex);
319   cell_error.e+(15,0) = undefined_function.w;
320   drawboxed_condition_type(end_of_file,reader_error,unbound_variable,undefined_function,unbound_slot);                
321   
322   boxjoin(a.sw+(0,-3) = b.nw);
323   boxit.division_by_zero(btex  \kwd*{DIVISION-BY-ZERO} etex);
324   boxit.floating_point_inexact(btex  \kwd*{FLOATING-POINT-INEXACT} etex);
325   boxit.floating_point_overflow(btex  \kwd*{FLOATING-POINT-OVERFLOW} etex);
326   boxit.floating_point_underflow(btex  \kwd*{FLOATING-POINT-UNDERFLOW} etex);
327   boxit.floating_point_invalid_operation(btex  \kwd*{FLOATING-POINT-INVALID-OPERATION} etex);
328   arithmetic_error.sw+(20,-3) = division_by_zero.nw;
329   drawboxed_condition_type(division_by_zero,floating_point_inexact,floating_point_overflow,floating_point_underflow,floating_point_invalid_operation);
331   % The Arrows:
333   pickup pencircle scaled .3;
335   drawarrow t.e{right} ... character.n{down};
336   drawarrow t.e{right} .. t.e+(121,0){right} ... sequence.n{down};
337   drawarrow t.e{right} .. t.e+(124,0){right} .. stream.w{right};
338   drawarrow t.e{right} .. t.e+(126,0){right} .. function.w{right};
339   drawarrow t.e{right} .. t.e+(270,0){right} ... pathname.n{down};
340   drawarrow t.e{right} .. t.e+(280,0){right} ... pathname.ne+(3,3) .. serious_condition.sw+(-3,-3) .. number.n{down};
341   drawarrow t.e{right} .. condition.w{right};
343   drawarrow t.s{down} ... atom.w{right};
344   drawarrow t.s{down} ... readtable.w{right};
345   drawarrow t.s{down} ... package.w{right};
346   drawarrow t.s{down} ... symbol.w{right};
347   
348   drawarrow t.s{down} .. t.s+(0,-25){down} ... array.w+(0,3){right};
349   drawarrow t.s{down} .. t.s+(0,-25){down} ... restart.w{right};
350   drawarrow t.s{down} .. t.s+(0,-25){down} ... random_state.w{right};
351   drawarrow t.s{down} .. t.s+(0,-25){down} ... hash_table.w{right};
352   drawarrow t.s{down} .. t.s+(0,-25){down} ... structure_object.w{right};
353   drawarrow t.s{down} .. t.s+(0,-25){down} ... standard_object.w{right};
354   drawarrow t.s{down} .. t.s+(0,-25){down} ... method.w{right};
355   
357   drawarrow standard_object.s{down} .. class.e{left};
358   drawarrow class.sw+(5,0){down} ... standard_class.w{right};
359   drawarrow class.sw+(5,0){down} ... built_in_class.w{right};
360   drawarrow class.sw+(5,0){down} ... structure_class.w{right};
361   drawarrow t.s{down} -- (xpart t.s,ypart method_combination.nw);
362   
363   drawarrow standard_object.s{down} .. built_in_class.ne+(2,2)  ... standard_class.e+(7,0) ... structure_class.se+(-2,-4) .. method.e{down} .. standard_method.ne+(-20,0){down} dashed evenly;
364   halfdisc_e (method.e);
366   drawarrow vector.w{left} ... vector.sw+(-6,0) ... string_.w+(0,3){right};
367   drawarrow string_.w+(0,-3){left} ... simple_string.w+(-8,0) ... base_string.w{right};
368   drawarrow vector.w{left} ... base_string.w+(-12,0) ... bit_vector.w{right};
369   drawarrow sequence.w{left} .. list.e{left};
370   drawarrow list.w{left} ... cons.nw+(15,0){down};
372   drawarrow symbol.s{down} ... keyword.w{right};
373   drawarrow symbol.s{down} ... boolean_.w{right};
375   drawarrow list.w{left} .. null.ne+(3,3) .. tension 1.5 .. symbol.e{down} .. null.w{right} dashed evenly;
376   halfdisc_e(symbol.e);
378   path array_simple_array_dashed;
379   pair array_simple_array_bifurcation,array_simple_array_common;
380   array_simple_array_dashed = array.e{down} .. simple_array.ne+(2,1) .. simple_array.e{down};
381   array_simple_array_bifurcation = directionpoint(10,1) of array_simple_array_dashed;
382   array_simple_array_common = directionpoint(1,-1) of array_simple_array_dashed;
384   drawarrow sequence.e{right} .. array.ne+(2,1) .. array.e{down} .. array_simple_array_common{dir angle(1,-1)} .. array_simple_array_bifurcation{dir angle(10,1)} .. simple_array.ne+(15,5) .. simple_array.se+(15,0) .. vector.e+(0,5){left} dashed evenly;
385   drawarrow sequence.e{right} .. array.ne+(2,1) .. array.e{down} .. simple_array.ne+(2,1) .. simple_array.e{down} .. simple_array.se+(2,-1) .. tension 2 .. vector.e+(0,-3){down} .. vector.se+(2,-1){dir -60} .. simple_base_string.se+(5,0) .. simple_vector.e{left} dashed evenly;
386   drawarrow sequence.e{right} .. array.ne+(2,1) .. array.e{down} .. simple_array.ne+(2,1) .. simple_array.e{down} .. simple_array.se+(2,-1) .. tension 2 .. vector.e+(0,-3){down} .. vector.se+(2,-1){dir -60} .. simple_base_string.se+(10,0) .. simple_vector.se+(0,-3) .. bit_vector.e{down} ... simple_bit_vector.ne+(-10,0){down} dashed evenly;
387   drawarrow sequence.e{right} .. array.ne+(2,1) .. array.e{down} .. simple_array.ne+(2,1) .. simple_array.e{down} .. simple_array.se+(2,-1) .. tension 2 .. vector.e+(0,-3){down} .. vector.se+(2,-1){dir -60} .. tension 1.3 .. string_.e{down} .. tension 1.3 .. simple_string.ne+(2,1)  .. simple_string.e{down}  .. simple_string.se+(2,1) .. base_string.e{down} .. simple_base_string.ne+(-10,0){down} dashed evenly;
388   halfdisc_e(array.e);
389   halfdisc_e(simple_array.e);
390   halfdisc_e(vector.e+(0,-3));
391   halfdisc_e(string_.e);
392   halfdisc_e(simple_string.e);
393   halfdisc_e(base_string.e);
394   halfdisc_e(bit_vector.e);
396   drawarrow array.w+(0,-3){left} ... array.sw+(-7,-3).. simple_array.w{right};
398   drawarrow character.e{right} .. extended_char.w{right};
399   drawarrow character.e{right} .. extended_char.sw+(-1,-3) .. base_char.w{right};
400   drawarrow base_char.e{right} .. standard_char.ne+(-7,0){down};
402   drawarrow function.s+(-20,0){down} ... compiled_function.w{right};
403   drawarrow function.s+(-20,0){down} ... generic_function.w{right};
404   drawarrow generic_function.e{right} ... standard_generic_function.ne+(-25,0){down};
406   drawarrow number.w{left} ... complex.n+(-10,0){down};
407   drawarrow number.w{left} ... real.n+(-12,0){down};
409   drawarrow real.w{left} ... double_float.nw+(-3,3) ... rational.w+(0,3){right};
410   drawarrow real.e{right} .. float.ne+(-5,0){down};
412   drawarrow float.se+(-5,0){down} ... short_float.e{left};
413   drawarrow float.se+(-5,0){down} ... single_float.e{left};
414   drawarrow float.se+(-5,0){down} ... double_float.e{left};
415   drawarrow float.se+(-5,0){down} ... long_float.e{left};
417   drawarrow rational.w+(0,-3){left} ... rational.sw+(-5,0) ... integer.w{right};
418   drawarrow rational.w+(0,-3){left} ... integer.w+(-10,0) ... ratio.w{right};
420   drawarrow (xpart fixnum.n,ypart.integer.s){down} .. signed_byte.ne+(-5,0){down};
421   drawarrow (xpart fixnum.n,ypart.integer.s){down} .. fixnum.n{down};
422   drawarrow (xpart fixnum.n,ypart integer.s){down} .. bignum.nw+(5,0){down};
424   drawarrow signed_byte.sw+(10,0){down} ... unsigned_byte.w{right};
425   drawarrow unsigned_byte.e{right} ... bit.w{right};
427   drawarrow stream.s{down} ... file_stream.e{left};
428   drawarrow stream.s{down} ... two_way_stream.e{left};
429   drawarrow stream.s{down} ... synonym_stream.e{left};
430   drawarrow stream.s{down} ... string_stream.e{left};
431   drawarrow stream.s{down} ... concatenated_stream.e{left};
432   drawarrow stream.s{down} ... broadcast_stream.e{left};
433   drawarrow stream.s{down} ... echo_stream.e{left};
435   drawarrow pathname.e{right} .. logical_pathname.ne+(-15,0){down};
436   
437   drawarrow condition.e{right} .. condition.e+(95,0){right} .. (xpart warning.w,ypart condition.e){right};
438   drawarrow condition.e{right} .. condition.e+(95,0){right} .. simple_condition.n+(-15,0){down};
439   drawarrow condition.e{right} ... serious_condition.ne+(-10,0){down};
440   
441   drawarrow (xpart warning.e,ypart condition.e){right} .. style_warning.ne+(-10,0){down};
443   drawarrow serious_condition.e{right} .. storage_condition.w{right};
444   drawarrow serious_condition.se+(-10,0){down} .. tension 1.3 .. error.w{right};
446   drawarrow error.sw+(5,0){down} ... parse_error.w{right};
447   drawarrow error.sw+(5,0){down} ... program_error.w{right};
448   drawarrow error.sw+(5,0){down} ... control_error.w{right};
449   drawarrow error.nw+(5,0){up}   ... type_error.w{right};
450   drawarrow error.sw+(5,0){down} ... cell_error.w{right};
451   drawarrow error.sw+(5,0){down} ... stream_error.w{right};
452   drawarrow error.sw+(5,0){down} ... package_error.w{right};
453   drawarrow error.sw+(5,0){down} ... file_error.w{right};
454   drawarrow error.sw+(5,0){down} ... print_not_readable.w{right};
455   drawarrow error.sw+(5,0){down} ... arithmetic_error.nw+(5,0){down};
457   drawarrow stream_error.e{right} .. end_of_file.w{right};
459   drawarrow cell_error.e{right} .. undefined_function.w{right};
460   drawarrow cell_error.e{right} .. unbound_variable.w{right};
461   drawarrow cell_error.e{right} .. tension 1.3 .. unbound_variable.sw+(-3,-3) .. unbound_slot.w{right};
463   drawarrow arithmetic_error.sw+(5,0){down} ... division_by_zero.w{right};
464   drawarrow arithmetic_error.sw+(5,0){down} ... floating_point_inexact.w{right};
465   drawarrow arithmetic_error.sw+(5,0){down} ... floating_point_invalid_operation.w{right};
466   drawarrow arithmetic_error.sw+(5,0){down} ... floating_point_overflow.w{right};
467   drawarrow arithmetic_error.sw+(5,0){down} ... floating_point_underflow.w{right};
469   drawarrow stream_error.e{right} .. stream_error.se+(3,-2) .. parse_error.e{down} .. tension 1.5 .. reader_error.w{right} dashed evenly;
471   halfdisc_e(parse_error.e);
473   drawarrow (xpart warning.e,ypart condition.e){right} .. style_warning.ne+(3,0) .. tension 1.3 .. simple_condition.ne+(2,1) .. simple_condition.e{down} .. simple_condition.se+(2,-1) .. simple_warning.e{left} dashed evenly;
474   drawarrow error.e{right} .. tension 1.5 .. simple_condition.sw+(-1,-2) .. simple_condition.sw+(5,0){right} .. simple_condition.sw+(12,-2){right} ... simple_error.n{down} dashed evenly;
475   drawarrow type_error.e{right} .. simple_condition.nw+(-1,2) .. simple_condition.nw+(5,0){right} .. simple_type_error.e{left} dashed evenly;
477   halfdisc_e(simple_condition.e);
478   halfdisc_s(simple_condition.sw+(5,0));
479   halfdisc_n(simple_condition.nw+(5,0));
481 endfig;
483 % Legend:
485 beginfig(2);
486   boxit.type(btex \rule{1.5em}{0pt}\rule{0pt}{1ex} etex);
487   type.ne = (0,0);
488   type.dx = 0;
489   type.dy = 0;
490   drawboxed_type(type);
491 endfig;
493 beginfig(3);
494   boxit.system_class(btex \rule{1.5em}{0pt}\rule{0pt}{1ex} etex);
495   system_class.ne = (0,0);
496   system_class.dx = 0;
497   system_class.dy = 0;
498   drawboxed_system_class(system_class);
499 endfig;
501 beginfig(4);
502   boxit.class(btex \rule{1.5em}{0pt}\rule{0pt}{1ex} etex);
503   class.ne = (0,0);
504   class.dx = 0;
505   class.dy = 0;
506   drawboxed_class(class);
507 endfig;
509 beginfig(5);
510   boxit.condition_type(btex \rule{1.5em}{0pt}\rule{0pt}{1ex} etex);
511   condition_type.ne = (0,0);
512   condition_type.dx = 0;
513   condition_type.dy = 0;
514   drawboxed_condition_type(condition_type);
515 endfig;
518 verbatimtex
519 \end{document}
520 etex