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.
18 \documentclass[8pt,pagesize,twoside,footexclude,headexclude]{scrartcl}
24 def drawboxed_type (text items ) =
26 pickup pencircle scaled .2;
31 def drawboxed_system_class (text items ) =
33 pickup pencircle scaled 1;
38 def drawboxed_condition_type (text items ) =
40 pickup pencircle xscaled 1.5 yscaled .2;
45 def drawboxed_class (text items ) =
47 pickup pencircle xscaled .2 yscaled 1.5;
52 def halfdisc_e(expr point) =
53 fill halfcircle scaled 4 rotated -90 shifted point --cycle
56 def halfdisc_n(expr point) =
57 fill halfcircle scaled 4 shifted point --cycle
60 def halfdisc_s(expr point) =
61 fill halfcircle scaled 4 rotated 180 shifted point --cycle
71 boxit.t(btex \T etex);
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;
82 drawboxed_system_class(readtable,package,symbol);
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);
101 boxit.null(btex \kwd{NULL} etex);
102 symbol.se+(15,0) = null.sw;
103 drawboxed_system_class(null);
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);
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);
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);
129 boxit.character(btex \kwd{CHARACTER} etex);
130 atom.ne+(23,-10) = character.nw;
131 drawboxed_system_class(character);
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);
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);
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);
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);
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);
193 boxjoin(a.ne+(20,0) = b.sw);
194 boxit.list(btex \kwd{LIST} etex);
195 boxit.sequence(btex \kwd{SEQUENCE} etex);
197 drawboxed_system_class(list,sequence);
200 boxit.cons(btex \kwd{CONS} \OP{\VAR{car-type}\DF{\kwd{\A}} \Op{\VAR{cdr-type}\DF{\kwd{\A}}}} etex);
201 list.se+(0,-3) = cons.n;
202 drawboxed_system_class(cons);
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.sw+(0,-3) = array.nw;
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);
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);
239 boxjoin(a.s+(0,-3) = b.n);
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);
246 boxit.standard_char(btex \kwd{STANDARD-CHAR} etex);
247 base_char.s+(5,-3) = standard_char.n;
248 drawboxed_type(standard_char);
252 boxjoin(a.sw+(0,-3) = b.nw);
253 boxit.condition(btex \kwd{CONDITION} etex);
254 boxit.serious_condition(btex \kwd{SERIOUS-CONDITION} etex);
255 t.e+(400,0) = condition.w;
256 drawboxed_condition_type(condition,serious_condition);
258 boxjoin(a.sw+(0,-3) = b.nw);
259 boxit.storage_condition(btex \kwd{STORAGE-CONDITION} etex);
260 boxit.simple_type_error(btex \kwd{SIMPLE-TYPE-ERROR} etex);
261 serious_condition.e+(10,2) = storage_condition.w;
262 drawboxed_condition_type(storage_condition,simple_type_error);
265 boxit.type_error(btex \kwd{TYPE-ERROR} etex);
266 simple_type_error.sw+(15,-3) = type_error.nw;
267 drawboxed_condition_type(type_error);
270 boxit.error(btex \kwd{ERROR}\\ etex);
271 type_error.sw+(-15,-3) = error.nw;
272 drawboxed_condition_type(error);
274 boxjoin(a.sw+(0,-3) = b.nw);
275 boxit.program_error(btex \kwd{PROGRAM-ERROR} etex);
276 boxit.control_error(btex \kwd{CONTROL-ERROR} etex);
277 boxit.package_error(btex \kwd{PACKAGE-ERROR} etex);
278 boxit.print_not_readable(btex \kwd{PRINT-NOT-READABLE} etex);
279 boxit.stream_error(btex \kwd{STREAM-ERROR} etex);
280 boxit.parse_error(btex \kwd{PARSE-ERROR} etex);
281 boxit.cell_error(btex \kwd{CELL-ERROR} etex);
282 boxit.file_error(btex \kwd{FILE-ERROR} etex);
283 error.sw+(15,-3) = program_error.nw;
284 drawboxed_condition_type(program_error,control_error,package_error,print_not_readable,stream_error,parse_error,cell_error,file_error);
287 boxit.arithmetic_error(btex \kwd{ARITHMETIC-ERROR} etex);
288 file_error.sw+(-15,-3) = arithmetic_error.nw;
289 drawboxed_condition_type(arithmetic_error);
292 boxit.simple_condition(btex \kwd{SIMPLE-CONDITION} etex);
293 type_error.se+(10,-2) = simple_condition.w;
294 drawboxed_condition_type(simple_condition);
297 boxit.warning(btex \kwd{WARNING} etex);
298 condition.ne+(120,0) = warning.nw;
299 drawboxed_condition_type(warning);
301 boxjoin(a.sw+(0,-3) = b.nw);
302 boxit.style_warning(btex \kwd{STYLE-WARNING} etex);
303 warning.sw+(0,-3) = style_warning.nw;
304 drawboxed_condition_type(style_warning);
306 boxjoin(a.s+(0,-3) = b.n);
307 boxit.simple_error(btex \kwd{SIMPLE-ERROR} etex);
308 boxit.simple_warning(btex \kwd{SIMPLE-WARNING} etex);
309 simple_condition.s+(7,-10) = simple_error.n;
310 drawboxed_condition_type(simple_error,simple_warning);
312 boxjoin(a.se+(0,-3) = b.ne);
313 boxit.end_of_file(btex \kwd{END-OF-FILE} etex);
314 boxit.reader_error(btex \kwd{READER-ERROR} etex);
315 boxit.undefined_function(btex \kwd{UNDEFINED-FUNCTION} etex);
316 boxit.unbound_variable(btex \kwd{UNBOUND-VARIABLE} etex);
317 boxit.unbound_slot(btex \kwd{UNBOUND-SLOT} etex);
318 cell_error.e+(15,0) = undefined_function.w;
319 drawboxed_condition_type(end_of_file,reader_error,unbound_variable,undefined_function,unbound_slot);
321 boxjoin(a.sw+(0,-3) = b.nw);
322 boxit.division_by_zero(btex \kwd{DIVISION-BY-ZERO} etex);
323 boxit.floating_point_inexact(btex \kwd{FLOATING-POINT-INEXACT} etex);
324 boxit.floating_point_overflow(btex \kwd{FLOATING-POINT-OVERFLOW} etex);
325 boxit.floating_point_underflow(btex \kwd{FLOATING-POINT-UNDERFLOW} etex);
326 boxit.floating_point_invalid_operation(btex \kwd{FLOATING-POINT-INVALID-OPERATION} etex);
327 arithmetic_error.sw+(20,-3) = division_by_zero.nw;
328 drawboxed_condition_type(division_by_zero,floating_point_inexact,floating_point_overflow,floating_point_underflow,floating_point_invalid_operation);
332 pickup pencircle scaled .3;
334 drawarrow t.e{right} ... character.n{down};
335 drawarrow t.e{right} .. t.e+(121,0){right} .. tension 1.3 and 1.1 .. sequence.n{down};
336 drawarrow t.e{right} .. t.e+(124,0){right} .. stream.w{right};
337 drawarrow t.e{right} .. t.e+(126,0){right} .. tension .8 .. function.w{right};
338 drawarrow t.e{right} .. t.e+(270,0){right} ... pathname.n{down};
339 drawarrow t.e{right} .. t.e+(280,0){right} ... pathname.ne+(3,3) .. serious_condition.sw+(-3,-3) .. number.n{down};
340 drawarrow t.e{right} .. condition.w{right};
342 drawarrow t.s{down} ... atom.w{right};
343 drawarrow t.s{down} ... readtable.w{right};
344 drawarrow t.s{down} ... package.w{right};
345 drawarrow t.s{down} ... symbol.w{right};
347 drawarrow t.s{down} .. t.s+(0,-25){down} ... array.w+(0,3){right};
348 drawarrow t.s{down} .. t.s+(0,-25){down} ... restart.w{right};
349 drawarrow t.s{down} .. t.s+(0,-25){down} ... random_state.w{right};
350 drawarrow t.s{down} .. t.s+(0,-25){down} ... hash_table.w{right};
351 drawarrow t.s{down} .. t.s+(0,-25){down} ... structure_object.w{right};
352 drawarrow t.s{down} .. t.s+(0,-25){down} ... standard_object.w{right};
353 drawarrow t.s{down} .. t.s+(0,-25){down} ... method.w{right};
356 drawarrow standard_object.s{down} .. class.e{left};
357 drawarrow class.sw+(5,0){down} ... standard_class.w{right};
358 drawarrow class.sw+(5,0){down} ... built_in_class.w{right};
359 drawarrow class.sw+(5,0){down} ... structure_class.w{right};
360 drawarrow t.s{down} -- (xpart t.s,ypart method_combination.nw);
362 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,2){down} ... standard_method.ne+(-20,0){down} dashed evenly;
363 halfdisc_e (method.e);
365 drawarrow vector.w{left} ... vector.sw+(-6,0) ... string_.w+(0,3){right};
366 drawarrow string_.w+(0,-3){left} ... simple_string.w+(-8,0) ... base_string.w{right};
367 drawarrow vector.w{left} ... base_string.w+(-12,0) ... bit_vector.w{right};
368 drawarrow sequence.s{down} .. list.e{left};
369 drawarrow list.w{left} ... cons.nw+(23,0){down};
371 drawarrow symbol.s{down} ... keyword.w{right};
372 drawarrow symbol.s{down} ... boolean_.w{right};
374 drawarrow list.w{left} .. null.ne+(3,3) .. tension 1.5 .. symbol.e{down} .. null.w{right} dashed evenly;
375 halfdisc_e(symbol.e);
377 path array_simple_array_dashed;
378 pair array_simple_array_bifurcation,array_simple_array_common;
379 array_simple_array_dashed = array.e{down} .. simple_array.ne+(2,1) .. simple_array.e{down};
380 array_simple_array_bifurcation = directionpoint(10,1) of array_simple_array_dashed;
381 array_simple_array_common = directionpoint(1,-1) of array_simple_array_dashed;
383 drawarrow sequence.s{down} .. cons.ne+(-1,4) .. 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;
384 drawarrow sequence.s{down} .. cons.ne+(-1,4) .. 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;
385 drawarrow sequence.s{down} .. cons.ne+(-1,4) .. 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,2){down} ... simple_bit_vector.ne+(-10,0){down} dashed evenly;
386 drawarrow sequence.s{down} .. cons.ne+(-1,4) .. 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,2){down} ... simple_base_string.ne+(-10,0){down} dashed evenly;
388 halfdisc_e(simple_array.e);
389 halfdisc_e(vector.e+(0,-3));
390 halfdisc_e(string_.e);
391 halfdisc_e(simple_string.e);
392 halfdisc_e(base_string.e);
393 halfdisc_e(bit_vector.e);
395 drawarrow array.w+(0,-3){left} ... array.sw+(-7,-3).. simple_array.w{right};
397 drawarrow character.e{right} .. extended_char.w{right};
398 drawarrow character.e{right} .. extended_char.sw+(-1,-3) .. base_char.w{right};
399 drawarrow base_char.e{right} .. standard_char.ne+(-5,0){down};
401 drawarrow function.s+(-20,0){down} ... compiled_function.w{right};
402 drawarrow function.s+(-20,0){down} ... generic_function.w{right};
403 drawarrow generic_function.e{right} ... standard_generic_function.ne+(-25,0){down};
405 drawarrow number.w{left} ... complex.n+(-10,0){down};
406 drawarrow number.w{left} ... real.n+(-12,0){down};
408 drawarrow real.w{left} ... double_float.nw+(-3,3) ... rational.w+(0,3){right};
409 drawarrow real.e{right} .. float.ne+(-5,0){down};
411 drawarrow float.se+(-5,0){down} ... short_float.e{left};
412 drawarrow float.se+(-5,0){down} ... single_float.e{left};
413 drawarrow float.se+(-5,0){down} ... double_float.e{left};
414 drawarrow float.se+(-5,0){down} ... long_float.e{left};
416 drawarrow rational.w+(0,-3){left} ... rational.sw+(-5,0) ... integer.w{right};
417 drawarrow rational.w+(0,-3){left} ... integer.w+(-10,0) ... ratio.w{right};
419 drawarrow (xpart fixnum.n,ypart.integer.s){down} .. signed_byte.ne+(-5,0){down};
420 drawarrow (xpart fixnum.n,ypart.integer.s){down} .. fixnum.n{down};
421 drawarrow (xpart fixnum.n,ypart integer.s){down} .. bignum.nw+(5,0){down};
423 drawarrow signed_byte.sw+(10,0){down} ... unsigned_byte.w{right};
424 drawarrow unsigned_byte.e{right} ... bit.w{right};
426 drawarrow stream.s{down} ... file_stream.e{left};
427 drawarrow stream.s{down} ... two_way_stream.e{left};
428 drawarrow stream.s{down} ... synonym_stream.e{left};
429 drawarrow stream.s{down} ... string_stream.e{left};
430 drawarrow stream.s{down} ... concatenated_stream.e{left};
431 drawarrow stream.s{down} ... broadcast_stream.e{left};
432 drawarrow stream.s{down} ... echo_stream.e{left};
434 drawarrow pathname.e{right} .. logical_pathname.ne+(-15,0){down};
436 drawarrow condition.e{right} .. condition.e+(95,0){right} .. (xpart warning.w,ypart condition.e){right};
437 drawarrow condition.e{right} .. condition.e+(95,0){right} .. simple_condition.n+(-15,0){down};
438 drawarrow condition.e{right} ... serious_condition.ne+(-10,0){down};
440 drawarrow (xpart warning.e,ypart condition.e){right} .. style_warning.ne+(-10,0){down};
442 drawarrow serious_condition.e{right} .. storage_condition.w{right};
443 drawarrow serious_condition.se+(-10,0){down} .. tension 1.3 .. error.w{right};
445 drawarrow error.sw+(5,0){down} ... parse_error.w{right};
446 drawarrow error.sw+(5,0){down} ... program_error.w{right};
447 drawarrow error.sw+(5,0){down} ... control_error.w{right};
448 drawarrow error.nw+(5,0){up} ... type_error.w{right};
449 drawarrow error.sw+(5,0){down} ... cell_error.w{right};
450 drawarrow error.sw+(5,0){down} ... stream_error.w{right};
451 drawarrow error.sw+(5,0){down} ... package_error.w{right};
452 drawarrow error.sw+(5,0){down} ... file_error.w{right};
453 drawarrow error.sw+(5,0){down} ... print_not_readable.w{right};
454 drawarrow error.sw+(5,0){down} ... arithmetic_error.nw+(5,0){down};
456 drawarrow stream_error.e{right} .. end_of_file.w{right};
458 drawarrow cell_error.e{right} .. undefined_function.w{right};
459 drawarrow cell_error.e{right} .. unbound_variable.w{right};
460 drawarrow cell_error.e{right} .. tension 1.3 .. unbound_variable.sw+(-3,-3) .. unbound_slot.w{right};
462 drawarrow arithmetic_error.sw+(5,0){down} ... division_by_zero.w{right};
463 drawarrow arithmetic_error.sw+(5,0){down} ... floating_point_inexact.w{right};
464 drawarrow arithmetic_error.sw+(5,0){down} ... floating_point_invalid_operation.w{right};
465 drawarrow arithmetic_error.sw+(5,0){down} ... floating_point_overflow.w{right};
466 drawarrow arithmetic_error.sw+(5,0){down} ... floating_point_underflow.w{right};
468 drawarrow stream_error.e{right} .. stream_error.se+(3,-2) .. parse_error.e{down} .. tension 1.5 .. reader_error.w{right} dashed evenly;
470 halfdisc_e(parse_error.e);
472 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;
473 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;
474 drawarrow type_error.e{right} .. simple_condition.nw+(-1,2) .. simple_condition.nw+(5,0){right} .. simple_type_error.e{left} dashed evenly;
476 halfdisc_e(simple_condition.e);
477 halfdisc_s(simple_condition.sw+(5,0));
478 halfdisc_n(simple_condition.nw+(5,0));
485 boxit.type(btex \rule{1.5em}{0pt}\rule{0pt}{1ex} etex);
489 drawboxed_type(type);
493 boxit.system_class(btex \rule{1.5em}{0pt}\rule{0pt}{1ex} etex);
494 system_class.ne = (0,0);
497 drawboxed_system_class(system_class);
501 boxit.class(btex \rule{1.5em}{0pt}\rule{0pt}{1ex} etex);
505 drawboxed_class(class);
509 boxit.condition_type(btex \rule{1.5em}{0pt}\rule{0pt}{1ex} etex);
510 condition_type.ne = (0,0);
511 condition_type.dx = 0;
512 condition_type.dy = 0;
513 drawboxed_condition_type(condition_type);