home *** CD-ROM | disk | FTP | other *** search
Wrap
Text File | 1993-06-19 | 83.6 KB | 2,800 lines
Newsgroups: comp.sources.misc From: jeff@joyce.cs.su.oz.au (Jeff Kingston) Subject: v37i104: lout - Lout document formatting system, v2, Part06/30 Message-ID: <1993Jun1.051713.25389@sparky.imd.sterling.com> X-Md4-Signature: 01941562b58effe0e6aec7b5f3fdb1be Sender: kent@sparky.imd.sterling.com (Kent Landfield) Organization: Sterling Software Date: Tue, 1 Jun 1993 05:17:13 GMT Approved: kent@sparky.imd.sterling.com Submitted-by: jeff@joyce.cs.su.oz.au (Jeff Kingston) Posting-number: Volume 37, Issue 104 Archive-name: lout/part06 Environment: UNIX #! /bin/sh # This is a shell archive. Remove anything before this line, then feed it # into a shell via "sh file" or similar. To overwrite existing files, # type "sh file -c". # Contents: lout/doc/tr.eq/outfile.ps.B lout/doc/tr.over/s2 lout/z22.c # Wrapped by kent@sparky on Sun May 30 19:43:54 1993 PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH echo If this archive is complete, you will see the following message: echo ' "shar: End of archive 6 (of 30)."' if test -f 'lout/doc/tr.eq/outfile.ps.B' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'lout/doc/tr.eq/outfile.ps.B'\" else echo shar: Extracting \"'lout/doc/tr.eq/outfile.ps.B'\" \(49055 characters\) sed "s/^X//" >'lout/doc/tr.eq/outfile.ps.B' <<'END_OF_FILE' X/Symbol 240 fnt X3708 12411 moveto(\075)s X X/Times-Italic 240 fnt X3931 12569 moveto(df)s gsave X3911 12471 translate X226 0 0 0 240 288 0 loutgr Xgsave X0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke Xgrestore X Xgrestore X X/Times-Italic 240 fnt X3911 12260 moveto(dy)s X/Symbol 240 fnt X4194 12411 moveto(\327)s X/Times-Italic 240 fnt X4311 12569 moveto(dy)s gsave X4311 12471 translate X226 0 0 0 240 288 0 loutgr Xgsave X0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke Xgrestore X Xgrestore X X/Times-Italic 240 fnt X4311 12260 moveto(dx)s X3330 11927 moveto(dfg)s gsave X3330 11829 translate X306 0 0 0 240 288 0 loutgr Xgsave X0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke Xgrestore X Xgrestore X X/Times-Italic 240 fnt X3370 11618 moveto(dy)s X/Symbol 240 fnt X3708 11769 moveto(\075)s X/Times-Italic 240 fnt X3911 11776 moveto(f)s 4020 11927 moveto(dg)s Xgsave X4020 11829 translate X240 0 0 0 240 288 0 loutgr Xgsave X0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke Xgrestore X Xgrestore X X/Times-Italic 240 fnt X4027 11618 moveto(dx)s X/Symbol 240 fnt X4317 11769 moveto(+)s X/Times-Italic 240 fnt X4505 11776 moveto(g)s 4645 11927 moveto(df)s gsave X4625 11829 translate X226 0 0 0 240 288 0 loutgr Xgsave X0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke Xgrestore X Xgrestore X X/Times-Italic 240 fnt X4625 11618 moveto(dx)s X X/Times-Roman 240 fnt X1417 11118 moveto(As)s 1749 x(this)s 2160 x(last)s 2557 x(example)s 3433 x(shows,)s X4158 x(it)s 4356 x(is)s X/Helvetica 220 fnt X4581 11114 moveto(nextcol)s X/Times-Roman 240 fnt X5342 11118 moveto(and)s 5754 x(the)s X6112 x(various)s X/Helvetica 220 fnt X6882 11114 moveto(above)s X/Times-Roman 240 fnt X7546 11118 moveto(symbols)s 8410 x(that)s 8834 x(lay)s X9192 x(out)s 9564 x(the)s 9922 x(array;)s X/Helvetica 220 fnt X1417 10826 moveto(matrix)s X/Times-Roman 240 fnt X2096 10830 moveto(attaches)s X2947 x(the)s X/Helvetica 220 fnt X3321 10826 moveto(atleft)s X/Times-Roman 240 fnt X3878 10830 moveto(and)s X/Helvetica 220 fnt X4306 10826 moveto(atright)s X/Times-Roman 240 fnt X4997 10830 moveto(options)s X5784 x(and)s 6212 x(makes)s 6905 x(sure)s 7385 x(the)s 7759 x(result)s X8371 x(appears)s 9183 x(in)s 9451 x(the)s 9825 x(correct)s 1417 10542 moveto(vertical)s X2185 x(position)s 3009 x(relative)s 3777 x(to)s 4016 x(the)s 4361 x(rest)s X4758 x(of)s 5010 x(the)s 5355 x(equation.)s 6352 x(So)s 6658 x(the)s X7003 x(right)s 7507 x(parameter)s 8514 x(of)s X/Helvetica 220 fnt X8766 10538 moveto(matrix)s X/Times-Roman 240 fnt X9416 10542 moveto(may)s X9881 x(be)s 10160 x(any)s 1417 10254 moveto(object.)s 1897 9880 moveto(Each)s 2452 x(of)s X2728 x(the)s 3097 x(Eq)s 3440 x(symbols)s 4315 x(that)s 4750 x(takes)s X5318 x(parameters)s 6442 x(also)s 6904 x(has)s 7300 x(a)s X/Helvetica 220 fnt X7483 9876 moveto(gap)s X X/Times-Roman 240 fnt X7926 9880 moveto(option,)s 8675 x(which)s 9337 x(controls)s 10184 x(the)s 1417 9592 moveto(amount)s X2195 x(of)s 2454 x(space)s 3045 x(inserted)s 3861 x(by)s 4161 x(the)s X4513 x(symbol:)s X/Helvetica 220 fnt X1897 9039 moveto(x over y)s X/Times-Italic 240 fnt X5866 9146 moveto(x)s gsave X5866 9096 translate X106 0 0 0 240 288 0 loutgr Xgsave X0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke Xgrestore X Xgrestore X X/Times-Italic 240 fnt X5866 8942 moveto(y)s X/Helvetica 220 fnt X1897 8379 moveto(x over gap { 3p } y)s X X/Times-Italic 240 fnt X5866 8498 moveto(x)s gsave X5866 8436 translate X106 0 0 0 240 288 0 loutgr Xgsave X0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke Xgrestore X Xgrestore X X/Times-Italic 240 fnt X5866 8270 moveto(y)s X/Times-Roman 240 fnt X1417 7770 moveto(Eq)s 1743 x(usually)s 2494 x(gets)s X2939 x(the)s 3291 x(spacing)s 4082 x(right)s 4593 x(without)s 5384 x(help.)s X X/Times-Bold 240 fnt X1417 6977 moveto(3.)s 1717 x(Spacing)s X/Times-Roman 240 fnt X1897 6605 moveto(There)s 2514 x(is)s 2733 x(a)s X2899 x(basic)s 3450 x(rule)s 3881 x(governing)s 4912 x(the)s 5264 x(use)s X5643 x(of)s 5902 x(white)s 6493 x(space)s 7084 x(characters)s 8111 x(\(space,)s X8841 x(tab,)s 9253 x(and)s 9659 x(newline\))s 1417 6317 moveto(in)s 1663 x(the)s X2015 x(input)s 2567 x(to)s 2813 x(Lout:)s 3451 x(white)s 4042 x(space)s X4633 x(between)s 5490 x(two)s 5909 x(objects)s 6646 x(affects)s 7341 x(the)s X7693 x(result;)s 8349 x(white)s 8940 x(space)s 9531 x(between)s 10388 x(a)s X1417 6029 moveto(symbol)s 2182 x(and)s 2588 x(its)s 2873 x(parameter)s 3887 x(does)s X4386 x(not.)s 1897 5655 moveto(Although)s 2862 x(this)s 3267 x(rule)s 3698 x(is)s X3917 x(just)s 4322 x(right)s 4833 x(most)s 5358 x(of)s 5617 x(the)s X5969 x(time,)s 6513 x(it)s 6705 x(is)s 6924 x(not)s 7290 x(adequate)s X8200 x(for)s 8538 x(equation)s 9422 x(formatting.)s 1417 5367 moveto(Getting)s 2239 x(the)s X2636 x(horizontal)s 3710 x(spacing)s 4546 x(right)s 5102 x(in)s 5393 x(equations)s X6415 x(is)s 6679 x(a)s 6890 x(very)s 7420 x(\256ddly)s 8084 x(business,)s X9060 x(involving)s 10083 x(four)s 1417 5079 moveto(different)s 2310 x(sizes)s 2846 x(of)s X3117 x(space)s 3720 x(\(zero,)s 4342 x(thin,)s 4846 x(medium,)s 5762 x(and)s X6180 x(thick\),)s 6869 x(and)s 7287 x(different)s 8180 x(rules)s 8716 x(for)s X9066 x(spacing)s 9869 x(within)s 1417 4791 moveto(superscripts)s 2626 x(and)s 3040 x(subscripts)s X4064 x(to)s 4318 x(those)s 4891 x(applying)s 5797 x(outside,)s 6616 x(according)s X7627 x(to)s 7881 x(a)s 8055 x(leading)s 8827 x(authority)s 9758 x([)s X9837 x(6)s 9957 x(].)s 10224 x(Eq)s 1417 4503 moveto(therefore)s 2344 x(takes)s X2901 x(the)s 3259 x(spacing)s 4056 x(decisions)s 5012 x(upon)s 5558 x(itself,)s X6160 x(and)s 6572 x(con)s 6918 x(sequently)s 7901 x(chooses)s 8725 x(to)s X8977 x(ignore)s 9654 x(all)s 9958 x(white)s 1417 4215 moveto(space)s 2008 x(in)s X2254 x(its)s 2539 x(input,)s 3151 x(even)s 3663 x(between)s 4520 x(two)s X4939 x(objects.)s X/Times-Roman 153 fnt X5676 4320 moveto(1)s X/Times-Roman 240 fnt X1897 3841 moveto(Every)s 2516 x(symbol)s 3269 x(provided)s X4168 x(by)s 4456 x(Eq)s 4770 x(has)s 5137 x(a)s X/Times-Italic 240 fnt X5291 x(full)s X5657 x(name)s X/Times-Roman 240 fnt X6176 x(,)s 6284 x(which)s 6917 x(denotes)s 7696 x(the)s X8036 x(symbol)s 8789 x(without)s 9568 x(any)s 9962 x(space)s 1417 3553 moveto(attached.)s X2389 x(Many)s 3004 x(symbols)s 3858 x(also)s 4299 x(have)s 4807 x(a)s X X/Times-Italic 240 fnt X4969 x(short)s 5517 x(name)s X/Times-Roman 240 fnt X6036 x(,)s 6152 x(which)s 6793 x(denotes)s X7580 x(the)s 7928 x(same)s 8475 x(symbol)s 9236 x(with)s 9717 x(what)s X10238 x(Eq)s 1417 3265 moveto(considers)s 2388 x(to)s 2642 x(be)s 2936 x(an)s X3230 x(appropriate)s 4386 x(amount)s 5172 x(of)s 5439 x(space)s 6038 x(for)s X6384 x(that)s 6810 x(symbol)s 7583 x(attached)s 8447 x(to)s 8701 x(it.)s X9021 x(For)s 9421 x(example,)s X/Symbol 240 fnt X10359 3258 moveto(\243)s X/Times-Roman 240 fnt X1417 2977 moveto(has)s 1796 x(full)s X2187 x(name)s X/Helvetica 220 fnt X2765 2973 moveto(lessequal)s X/Times-Roman 240 fnt X3751 2977 moveto(and)s 4157 x(short)s 4695 x(name)s X X/Helvetica 220 fnt X5273 2973 moveto(<=)s X/Times-Roman 240 fnt X5529 2977 moveto(:)s gsave X1417 2442 translate X680 0 0 0 240 288 60 loutgr Xgsave X0 0 moveto xsize 0 lineto stroke Xgrestore X Xgrestore X X/Times-Roman 153 fnt X1417 2226 moveto(1)s X/Times-Roman 192 fnt X1493 2148 moveto(This)s 1876 x(effect)s X2353 x(is)s 2523 x(produced)s 3279 x(by)s 3514 x(enclosing)s 4291 x(the)s X4568 x(entire)s 5046 x(equation)s 5749 x(in)s X/Helvetica 172 fnt X5941 2146 moveto(0c @Space)s X/Times-Roman 192 fnt X6828 2148 moveto(.)s X6967 x(The)s 7308 x(simplest)s 7988 x(way)s 8350 x(to)s 8542 x(restore)s X9104 x(the)s 9381 x(effect)s 1417 1918 moveto(of)s 1628 x(white)s 2105 x(space)s X2582 x(to)s 2783 x(part)s 3132 x(of)s 3343 x(an)s 3576 x(equation)s X4288 x(is)s 4467 x(to)s 4668 x(enclose)s 5294 x(that)s 5633 x(part)s X5982 x(in)s 6183 x(a)s X/Helvetica 172 fnt X6320 1916 moveto(@Font)s X/Times-Roman 192 fnt X6888 1918 moveto(symbol.)s 7600 x(Eq)s X7865 x(also)s 8225 x(changes)s 8894 x(the)s 9180 x(value)s 9647 x(of)s X1417 1688 moveto(the)s X/Helvetica 172 fnt X1706 1686 moveto(v)s X/Times-Roman 192 fnt X1847 1688 moveto(unit,)s 2248 x(so)s 2473 x(if)s X2644 x(a)s 2784 x(paragraph)s 3604 x(of)s 3818 x(\256lled)s 4266 x(text)s X4608 x(is)s 4790 x(desired)s 5397 x(within)s 5941 x(an)s 6177 x(equation,)s X6940 x(it)s 7101 x(may)s 7486 x(be)s 7722 x(necessary)s 8520 x(to)s X8724 x(enclose)s 9353 x(it)s 9514 x(in)s 9718 x(a)s X/Helvetica 172 fnt X1417 1456 moveto(@Break)s X X/Times-Roman 192 fnt X2086 1458 moveto(symbol.)s Xpgsave restore Xshowpage X X%%Page: ? 6 X%%BeginPageSetup X0.0500 dup scale 10 setlinewidth X/pgsave save def X%%EndPageSetup X X/Times-Roman 240 fnt X5754 15258 moveto(-)s 5893 x(5)s 6073 x(-)s X/Helvetica 220 fnt X1897 14662 moveto(a lessequal b)s X/Times-Italic 240 fnt X5866 14666 moveto(a)s X X/Symbol 240 fnt X5986 14659 moveto(\243)s X/Times-Italic 240 fnt X6117 14666 moveto(b)s X/Helvetica 220 fnt X1897 14159 moveto(a <= b)s X/Times-Italic 240 fnt X5866 14163 moveto(a)s X/Symbol 240 fnt X6058 14156 moveto(\243)s X X/Times-Italic 240 fnt X6261 14163 moveto(b)s X/Times-Roman 240 fnt X1417 13704 moveto(Eq)s 1745 x(puts)s 2206 x(a)s 2374 x(thick)s X2914 x(space)s 3507 x(around)s 4234 x(relation)s 5025 x(symbols)s 5885 x(like)s X X/Helvetica 220 fnt X6305 13700 moveto(<=)s X/Times-Roman 240 fnt X6561 13704 moveto(,)s 6683 x(a)s 6851 x(medium)s 7697 x(space)s X8290 x(around)s 9017 x(binary)s 9690 x(operator)s 1417 13416 moveto(symbols)s 2272 x(like)s X X/Helvetica 220 fnt X2687 13412 moveto(+)s X/Times-Roman 240 fnt X2815 13416 moveto(,)s 2932 x(and)s 3335 x(a)s 3498 x(thin)s X3927 x(space)s 4515 x(after)s 5008 x(punctuation)s 6195 x(symbols)s 7050 x(\()s X X/Helvetica 220 fnt X7129 13412 moveto(;)s X/Times-Roman 240 fnt X7247 13416 moveto(and)s X/Helvetica 220 fnt X7650 13412 moveto(,)s X/Times-Roman 240 fnt X7711 13416 moveto(\);)s 7913 x(except)s X8594 x(that)s 9009 x(in)s 9252 x(places)s 9906 x(where)s 1417 13128 moveto(the)s X1786 x(symbols)s 2661 x(appear)s 3375 x(in)s 3638 x(a)s 3821 x(smaller)s X4600 x(size)s 5048 x(\(superscripts,)s 6405 x(subscripts,)s 7498 x(etc.\),)s 8052 x(these)s X8620 x(spaces)s 9321 x(are)s 9689 x(omitted.)s 1417 12840 moveto(No)s 1770 x(other)s X2321 x(horizontal)s 3350 x(space)s 3941 x(is)s 4160 x(ever)s 4631 x(inserted.)s X1897 12466 moveto(The)s 2325 x(short)s 2859 x(names)s 3526 x(have)s 4034 x(been)s X4542 x(carefully)s 5446 x(designed)s 6353 x(to)s 6595 x(produce)s 7422 x(good-looking)s X8769 x(mathematics)s 10032 x(most)s 1417 12178 moveto(of)s 1689 x(the)s 2054 x(time.)s X2671 x(It)s 2889 x(is)s 3121 x(best)s 3579 x(to)s 3838 x(rely)s X4282 x(on)s 4595 x(them)s 5146 x(in)s 5405 x(the)s 5770 x(\256rst)s X6214 x(instance)s 7070 x(and)s 7489 x(only)s 7988 x(think)s 8553 x(about)s X9158 x(spacing)s 9962 x(when)s 1417 11890 moveto(the)s 1769 x(result)s 2359 x(is)s X2578 x(not)s 2944 x(pleasing.)s 3921 x(In)s 4180 x(that)s 4598 x(case,)s X5129 x(Eq's)s 5627 x(space)s 6218 x(can)s 6610 x(be)s 6896 x(removed)s X7793 x(by)s 8093 x(using)s 8672 x(the)s 9024 x(full)s 9415 x(names,)s X10146 x(and)s 1417 11602 moveto(thin,)s 1909 x(medium)s 2753 x(and)s 3159 x(thick)s X3697 x(space)s 4288 x(can)s 4680 x(be)s 4966 x(added)s 5598 x(using)s X6177 x(the)s 6529 x(following)s 7519 x(symbols:)s X/Helvetica 220 fnt X1897 11061 moveto(`)s 2381 x(0.18f)s X X/Times-Roman 240 fnt X2989 11065 moveto(\()s X/Helvetica 220 fnt X3068 11061 moveto(0.018f)s X/Times-Roman 240 fnt X3738 11065 moveto(in)s 3984 x(subscripts,)s 5060 x(etc.\))s X X/Helvetica 220 fnt X1897 10773 moveto(``)s 2381 x(0.24f)s X/Times-Roman 240 fnt X2989 10777 moveto(\()s X/Helvetica 220 fnt X3068 10773 moveto(0.024f)s X/Times-Roman 240 fnt X3738 10777 moveto(in)s X3984 x(subscripts,)s 5060 x(etc.\))s X/Helvetica 220 fnt X1897 10485 moveto(```)s 2381 x(0.30f)s X/Times-Roman 240 fnt X2989 10489 moveto(\()s X X/Helvetica 220 fnt X3068 10485 moveto(0.030f)s X/Times-Roman 240 fnt X3738 10489 moveto(in)s 3984 x(subscripts,)s 5060 x(etc.\))s 1417 9948 moveto(where)s X X/Helvetica 220 fnt X2083 9944 moveto(1f)s X/Times-Roman 240 fnt X2348 9948 moveto(is)s 2589 x(the)s 2963 x(current)s 3721 x(font)s X4188 x(size.)s 4761 x(These)s 5414 x(symbols)s 6294 x(have)s 6828 x(low)s X7269 x(precedence.)s 8546 x(The)s X/Helvetica 220 fnt X9000 9944 moveto(&)s X/Times-Roman 240 fnt X9228 9948 moveto(symbol)s 10015 x(from)s X1417 9660 moveto(standard)s 2307 x(Lout)s 2839 x(is)s 3078 x(also)s 3543 x(available;)s X4551 x(the)s X/Helvetica 220 fnt X4923 9656 moveto(s)s X/Times-Roman 240 fnt X5113 9660 moveto(unit)s 5565 x(has)s 5964 x(value)s X6562 x(0)s 6762 x(and)s 7188 x(so)s 7481 x(is)s 7720 x(not)s X8106 x(very)s 8611 x(useful,)s 9335 x(but)s 9721 x(one)s 10147 x(can)s X1417 9372 moveto(write)s X/Helvetica 220 fnt X1973 9368 moveto(&2m)s X/Times-Roman 240 fnt X2490 9372 moveto(for)s 2834 x(example)s 3710 x(for)s X4054 x(a)s 4226 x(two)s 4651 x(em)s 5009 x(space.)s 5726 x(Since)s X6323 x(the)s 6681 x(full)s 7078 x(names)s 7755 x(are)s 8112 x(tedious)s X8869 x(to)s 9121 x(remember,)s 10215 x(Eq)s 1417 9084 moveto(provides)s 2288 x(a)s X2441 x(symbol)s X/Helvetica 220 fnt X3193 9080 moveto(non)s X/Times-Roman 240 fnt X3606 9084 moveto(which)s 4238 x(removes)s 5095 x(spaces)s X5766 x(from)s 6277 x(its)s 6549 x(right)s 7047 x(parameter;)s 8114 x(thus)s X X/Helvetica 220 fnt X8560 9080 moveto(non <=)s X/Times-Roman 240 fnt X9290 9084 moveto(is)s 9496 x(equivalent)s 1417 8796 moveto(to)s X/Helvetica 220 fnt X1657 8792 moveto(lessequal)s X X/Times-Roman 240 fnt X2583 8796 moveto(,)s 2697 x(for)s 3029 x(example.)s 4013 x(There)s 4624 x(are)s X4969 x(also)s 5408 x(symbols)s X/Helvetica 220 fnt X6260 8792 moveto(rel)s X/Times-Roman 240 fnt X6503 8796 moveto(,)s X/Helvetica 220 fnt X6617 8792 moveto(bin)s X X/Times-Roman 240 fnt X6909 8796 moveto(,)s 7023 x(and)s X/Helvetica 220 fnt X7423 8792 moveto(punct)s X/Times-Roman 240 fnt X8014 8796 moveto(for)s 8346 x(telling)s X9010 x(Eq)s 9330 x(to)s 9570 x(add)s 9970 x(space)s 1417 8508 moveto(to)s X1688 x(the)s 2065 x(following)s 3080 x(symbol)s 3870 x(as)s 4154 x(though)s X4905 x(it)s 5122 x(was)s 5579 x(a)s 5770 x(relation)s 6584 x(symbol,)s X7434 x(binary)s 8130 x(operator,)s 9071 x(or)s 9355 x(punctuation)s 1417 8220 moveto(symbol.)s X X/Times-Bold 240 fnt X1417 7427 moveto(4.)s 1717 x(Features)s 2666 x(from)s 3230 x(Standard)s 4247 x(Lout)s X X/Times-Roman 240 fnt X1897 7055 moveto(In)s 2149 x(this)s 2547 x(section)s 3277 x(we)s 3609 x(summarize)s X4710 x(those)s 5268 x(features)s 6076 x(of)s 6328 x(standard)s 7191 x(Lout)s X7696 x(of)s 7948 x(most)s 8466 x(relevance)s 9434 x(to)s 9673 x(equation)s X1417 6767 moveto(formatting.)s 2627 x(All)s 3014 x(are)s 3387 x(freely)s 4025 x(available)s X4969 x(within)s 5662 x(equations.)s 6781 x(Full)s 7248 x(details)s 7953 x(may)s X8447 x(be)s 8755 x(found)s 9396 x(in)s 9664 x(the)s 10038 x(Lout)s X1417 6479 moveto(reference)s 2364 x(manual)s 3128 x([)s 3207 x(4)s 3327 x(].)s X1897 6105 moveto(Standard)s 2808 x(Lout)s 3321 x(uses)s 3794 x(the)s 4147 x(symbols)s X X/Helvetica 220 fnt X5006 6101 moveto(#)s X/Times-Roman 240 fnt X5128 6105 moveto(,)s X/Helvetica 220 fnt X5249 6101 moveto({)s X/Times-Roman 240 fnt X5322 6105 moveto(,)s X/Helvetica 220 fnt X5443 6101 moveto(})s X X/Times-Roman 240 fnt X5516 6105 moveto(,)s X/Helvetica 220 fnt X5637 6101 moveto(&)s X/Times-Roman 240 fnt X5783 6105 moveto(,)s X/Helvetica 220 fnt X5904 6101 moveto(|)s X/Times-Roman 240 fnt X5961 6105 moveto(,)s X6082 x(and)s X/Helvetica 220 fnt X6489 6101 moveto(/)s X/Times-Roman 240 fnt X6611 6105 moveto(for)s 6950 x(special)s 7674 x(purposes)s X8586 x(\(the)s 9018 x(braces)s 9689 x(are)s 10041 x(used)s 1417 5817 moveto(for)s X1738 x(grouping,)s 2706 x(for)s 3027 x(example\).)s 4079 x(To)s 4388 x(get)s X4723 x(these)s 5257 x(characters)s 6267 x(into)s 6682 x(equations)s 7642 x(without)s X8416 x(using)s 8978 x(their)s 9458 x(full)s 9832 x(names,)s 1417 5529 moveto(enclose)s X2186 x(them)s 2716 x(in)s 2954 x(double)s 3658 x(quotes:)s X/Helvetica 220 fnt X4401 5525 moveto("{")s X X/Times-Roman 240 fnt X4630 5529 moveto(,)s X/Helvetica 220 fnt X4742 5525 moveto("}")s X/Times-Roman 240 fnt X4971 5529 moveto(,)s 5083 x(etc.)s 5533 x(Any)s X5998 x(sequence)s 6927 x(of)s 7178 x(characters)s 8197 x(including)s 9153 x(spaces)s X9829 x(but)s 10187 x(not)s 1417 5241 moveto(newlines)s 2327 x(may)s 2799 x(be)s X3085 x(so)s 3358 x(enclosed,)s 4315 x(and)s 4721 x(the)s 5073 x(effect)s X5675 x(is)s 5894 x(to)s 6140 x(turn)s 6585 x(off)s 6923 x(any)s X7329 x(special)s 8052 x(meaning)s 8936 x(that)s 9354 x(the)s 9706 x(symbols)s X1417 4953 moveto(within)s 2088 x(it)s 2280 x(might)s 2898 x(have.)s 1897 4579 moveto(Eq)s X2250 x(sets)s 2695 x(letters)s 3364 x(in)s 3637 x(Slope)s 4269 x(\(Lout's)s X5059 x(name)s 5664 x(for)s 6029 x(Italic\),)s 6744 x(digits)s 7362 x(in)s X7635 x(Base)s 8187 x(\(i.e.)s 8645 x(Roman\),)s 9563 x(and)s 9996 x(other)s X1417 4291 moveto(symbols)s 2275 x(in)s 2521 x(various)s 3285 x(fonts,)s 3883 x(mostly)s X4594 x(the)s 4946 x(Symbol)s 5751 x(font.)s 6316 x(To)s 6642 x(change)s X7380 x(fonts,)s 7978 x(use)s 8357 x(the)s X/Helvetica 220 fnt X8709 4287 moveto(@Font)s X/Times-Roman 240 fnt X9431 4291 moveto(symbol:)s X X/Helvetica 220 fnt X1897 3784 moveto(Slope @Font "2")s X/Times-Italic 240 fnt X5866 3788 moveto(2)s X/Times-Roman 240 fnt X1417 3286 moveto(In)s 1696 x(Eq)s 2042 x(it)s X2254 x(will)s 2705 x(often)s 3276 x(be)s 3582 x(necessary)s 4591 x(to)s X4857 x(enclose)s 5654 x(the)s 6026 x(right)s 6557 x(parameter)s 7591 x(in)s X7857 x(double)s 8589 x(quotes,)s 9354 x(because)s 10191 x(the)s 1417 2998 moveto(symbol)s X2212 x(2)s 2422 x(includes)s 3309 x(a)s 3505 x(built-in)s 4298 x(change)s X5066 x(back)s 5608 x(to)s 5884 x(Base)s 6439 x(font.)s 7034 x(Changing)s X8056 x(fonts)s 8624 x(makes)s 9325 x(white)s 9946 x(space)s 1417 2710 moveto(between)s X2275 x(objects)s 3013 x(in)s 3260 x(the)s 3613 x(right)s 4125 x(parameter)s X5140 x(appear)s 5838 x(in)s 6085 x(the)s 6438 x(result.)s 7149 x(The)s X X/Helvetica 220 fnt X7582 2706 moveto(@Font)s X/Times-Roman 240 fnt X8305 2710 moveto(operator)s 9162 x(also)s 9608 x(does)s 10108 x(size)s X1417 2422 moveto(changes:)s X/Helvetica 220 fnt X1897 1905 moveto(sum)s X/Symbol 240 fnt X5866 1902 moveto(\345)s Xpgsave restore Xshowpage X X%%Page: ? 7 X%%BeginPageSetup X0.0500 dup scale 10 setlinewidth X/pgsave save def X%%EndPageSetup X X/Times-Roman 240 fnt X5754 15260 moveto(-)s 5893 x(6)s 6073 x(-)s X/Helvetica 220 fnt X1897 14634 moveto("+2p" @Font sum)s X/Symbol 280 fnt X5866 14621 moveto(\345)s X X/Helvetica 220 fnt X1897 14001 moveto(2.0f @Font sum)s X/Symbol 480 fnt X5866 13938 moveto(\345)s X/Times-Roman 240 fnt X1417 13437 moveto(Here)s X/Helvetica 220 fnt X1923 13433 moveto("+2p" @Font)s X/Times-Roman 240 fnt X3216 13437 moveto(sets)s X3616 x(its)s 3883 x(right)s 4376 x(parameter)s 5372 x(in)s 5600 x(a)s X5748 x(font)s 6175 x(two)s 6576 x(points)s 7203 x(larger)s 7801 x(than)s X8255 x(it)s 8429 x(would)s 9070 x(otherwise)s 10041 x(have)s 1417 13149 moveto(been;)s X X/Helvetica 220 fnt X1998 13145 moveto(2.0f @Font)s X/Times-Roman 240 fnt X3150 13149 moveto(sets)s 3571 x(its)s 3859 x(right)s 4373 x(parameter)s X5390 x(in)s 5639 x(a)s 5808 x(font)s 6256 x(twice)s 6836 x(the)s X7191 x(original)s 7997 x(size.)s 8551 x(Sizes)s 9118 x(should)s 9820 x(always)s X1417 12861 moveto(be)s 1713 x(speci\256ed)s 2633 x(relative)s 3418 x(to)s 3674 x(the)s X4036 x(enclosing)s 5023 x(size)s 5464 x(as)s 5733 x(we)s 6082 x(have)s X6604 x(done)s 7140 x(here,)s 7681 x(since)s 8242 x(then)s 8724 x(they)s X9206 x(don't)s 9781 x(need)s 10303 x(to)s 1417 12573 moveto(be)s 1700 x(changed)s X2555 x(if)s 2757 x(a)s 2920 x(decision)s 3774 x(is)s 3990 x(made)s X4565 x(to)s 4808 x(set)s 5130 x(the)s 5479 x(entire)s 6079 x(document)s X7080 x(in)s 7323 x(a)s 7486 x(different)s 8364 x(size.)s 8912 x(It)s X9114 x(is)s 9330 x(necessary)s 10316 x(to)s 1417 12285 moveto(enclose)s X/Helvetica 220 fnt X2187 12281 moveto(+2p)s X X/Times-Roman 240 fnt X2612 12285 moveto(in)s 2851 x(double)s 3556 x(quotes)s 4234 x(within)s 4898 x(Eq,)s X5277 x(because)s 6087 x(otherwise)s 7069 x(the)s X/Helvetica 220 fnt X7414 12281 moveto(+)s X/Times-Roman 240 fnt X7595 12285 moveto(will)s X8019 x(be)s 8298 x(taken)s 8869 x(as)s 9121 x(the)s 9466 x(Eq)s X9785 x(symbol)s 1417 11997 moveto(for)s X/Symbol 240 fnt X1812 11990 moveto(+)s X/Times-Roman 240 fnt X2000 11997 moveto(.)s 2180 x(The)s X2612 x(right)s 3123 x(parameter)s 4137 x(may)s 4609 x(be)s 4895 x(any)s X5301 x(object.)s 1897 11623 moveto(Whenever)s 2956 x(similar)s 3694 x(equations)s 4687 x(or)s X4962 x(parts)s 5502 x(of)s 5777 x(equations)s 6770 x(are)s 7137 x(being)s X7745 x(typed)s 8353 x(repeatedly,)s X/Times-Italic 240 fnt X9484 x(de\256nitions)s X/Times-Roman 240 fnt X1417 11335 moveto(should)s 2116 x(be)s X2402 x(used)s 2901 x(to)s 3147 x(save)s 3632 x(time.)s 4236 x(Suppose)s X5108 x(for)s 5446 x(example)s 6316 x(that)s X/Times-Italic 240 fnt X6734 x(p)s X/Times-Italic 168 fnt X6854 11249 moveto(i)s X X/Times-Roman 240 fnt X6943 11335 moveto(log)s X/Symbol 168 fnt X7249 11241 moveto(\062)s X/Times-Italic 240 fnt X7376 11335 moveto(p)s X/Times-Italic 168 fnt X7496 11249 moveto(i)s X/Times-Roman 240 fnt X7602 11335 moveto(occurs)s X8286 x(frequently.)s 9448 x(Then)s X/Helvetica 220 fnt X1897 10793 moveto(def epi { p sub i ` log sub 2 ` p sub i })s X/Times-Roman 240 fnt X1417 10294 moveto(makes)s 2088 x(the)s X2440 x(symbol)s X/Helvetica 220 fnt X3205 10290 moveto(epi)s X/Times-Roman 240 fnt X3557 10294 moveto(stand)s 4122 x(for)s 4460 x(the)s X4812 x(object)s 5456 x(between)s 6313 x(the)s 6665 x(braces:)s X/Helvetica 220 fnt X1897 9622 moveto(big sum from i=1 to n ` epi)s X X/Times-Italic 168 fnt X5943 9880 moveto(n)s X/Symbol 312 fnt X5874 9601 moveto(\345)s X/Times-Italic 168 fnt X5866 9415 moveto(i)s X/Symbol 168 fnt X5920 9410 moveto(\075)s 6020 x(\061)s X X/Times-Italic 240 fnt X6147 9626 moveto(p)s X/Times-Italic 168 fnt X6267 9540 moveto(i)s X/Times-Roman 240 fnt X6356 9626 moveto(log)s X/Symbol 168 fnt X6662 9532 moveto(\062)s X/Times-Italic 240 fnt X6789 9626 moveto(p)s X X/Times-Italic 168 fnt X6909 9540 moveto(i)s X/Times-Roman 240 fnt X1417 8960 moveto(Symbols)s 2315 x(may)s 2787 x(be)s 3073 x(given)s X3665 x(parameters:)s X/Helvetica 220 fnt X1897 8460 moveto(def ep)s 1897 8172 moveto( right x)s 1897 7884 moveto({ p sub x ` log sub 2 ` p sub x)s 1897 7596 moveto(})s X X/Times-Roman 240 fnt X1417 7099 moveto(The)s 1849 x(parameter)s X/Helvetica 220 fnt X2863 7095 moveto(x)s X/Times-Roman 240 fnt X3033 7099 moveto(will)s 3464 x(be)s X3750 x(replaced)s 4619 x(by)s 4919 x(the)s 5271 x(object)s 5915 x(just)s X6320 x(to)s 6566 x(the)s 6918 x(right)s 7429 x(of)s X/Helvetica 220 fnt X7688 7095 moveto(ep)s X X/Times-Roman 240 fnt X7932 7099 moveto(:)s X/Helvetica 220 fnt X1897 6599 moveto(big sum from j=1 to k ` ep i +)s 1897 6311 moveto(big sum from j=k+1 to n ep j)s X/Times-Italic 168 fnt X5948 6645 moveto(k)s X/Symbol 312 fnt X5874 6366 moveto(\345)s X X/Times-Italic 168 fnt X5866 6180 moveto(j)s X/Symbol 168 fnt X5920 6175 moveto(\075)s 6020 x(\061)s X/Times-Italic 240 fnt X6147 6391 moveto(p)s X/Times-Italic 168 fnt X6267 6305 moveto(i)s X X/Times-Roman 240 fnt X6356 6391 moveto(log)s X/Symbol 168 fnt X6662 6297 moveto(\062)s X/Times-Italic 240 fnt X6789 6391 moveto(p)s X/Times-Italic 168 fnt X6909 6305 moveto(i)s X/Symbol 240 fnt X7012 6384 moveto(+)s X X/Times-Italic 168 fnt X7366 6645 moveto(n)s X/Symbol 312 fnt X7297 6366 moveto(\345)s X/Times-Italic 168 fnt X7200 6176 moveto(j)s X/Symbol 168 fnt X7254 6171 moveto(\075)s X/Times-Italic 168 fnt X7354 6176 moveto(k)s X X/Symbol 168 fnt X7434 6171 moveto(+)s 7532 x(\061)s X/Times-Italic 240 fnt X7616 6391 moveto(p)s X/Times-Italic 168 fnt X7736 6305 moveto(j)s X/Times-Roman 240 fnt X7825 6391 moveto(log)s X X/Symbol 168 fnt X8131 6297 moveto(\062)s X/Times-Italic 240 fnt X8258 6391 moveto(p)s X/Times-Italic 168 fnt X8378 6305 moveto(j)s X/Times-Roman 240 fnt X1417 5691 moveto(The)s 1849 x(precedence)s X2984 x(of)s 3243 x(such)s 3742 x(symbols)s 4600 x(will)s 5031 x(be)s X5317 x(100)s 5737 x(by)s 6037 x(default.)s 1897 5317 moveto(To)s 2237 x(make)s X2829 x(the)s 3195 x(symbols)s 4067 x(of)s 4340 x(Eq)s 4680 x(available)s X5616 x(within)s 6301 x(such)s 6814 x(de\256nitions,)s 7958 x(each)s 8470 x(must)s X9009 x(be)s 9309 x(preceded)s 10246 x(by)s X/Helvetica 220 fnt X1417 5025 moveto(import @Eq)s X/Times-Roman 240 fnt X2578 5029 moveto(.)s X2758 x(The)s 3190 x(best)s 3635 x(place)s 4199 x(to)s 4445 x(keep)s X4957 x(them)s 5495 x(is)s 5714 x(in)s 5960 x(the)s 6312 x(setup)s X6877 x(\256le,)s 7302 x(which)s 7947 x(might)s 8565 x(then)s 9037 x(look)s X9523 x(like)s 9941 x(this:)s X/Helvetica 220 fnt X1897 4527 moveto(@SysInclude { ft })s 1897 4239 moveto(@SysInclude { dl })s 1897 3951 moveto(@SysInclude { eq })s X1897 3663 moveto()s 1897 3375 moveto(import @Eq)s 1897 3087 moveto(def epi { p sub i ` log sub 2 ` p sub i })s 1897 2799 moveto()s 1897 2511 moveto(import @Eq)s X1897 2223 moveto(def ep right x { p sub x ` log sub 2 ` p sub x })s 1897 1935 moveto()s 1897 1647 moveto(@Use { @DocumentLayout })s Xpgsave restore Xshowpage X X%%Page: ? 8 X%%BeginPageSetup X0.0500 dup scale 10 setlinewidth X/pgsave save def X%%EndPageSetup X X/Times-Roman 240 fnt X5754 15264 moveto(-)s 5893 x(7)s 6073 x(-)s 1417 14673 moveto(Use)s 1849 x(of)s X X/Helvetica 220 fnt X2108 14669 moveto(epi)s X/Times-Roman 240 fnt X2460 14673 moveto(and)s X/Helvetica 220 fnt X2866 14669 moveto(ep)s X/Times-Roman 240 fnt X3170 14673 moveto(outside)s 3921 x(equations)s X4898 x(will)s 5329 x(cause)s 5920 x(an)s 6206 x(error.)s 1897 14299 moveto(Equations)s X2921 x(can)s 3320 x(appear)s 4024 x(within)s 4702 x(a)s 4875 x(paragraph)s X5898 x(of)s 6164 x(text,)s 6649 x(or)s 6915 x(they)s 7394 x(can)s X7793 x(be)s 8086 x(displayed.)s 9190 x(Eq's)s 9695 x(job)s 10068 x(is)s X10294 x(to)s 1417 14011 moveto(produce)s 2258 x(a)s 2434 x(Lout)s 2956 x(object)s X3610 x(containing)s 4690 x(the)s 5052 x(equation;)s 6012 x(it)s 6214 x(neither)s X6947 x(knows)s 7643 x(nor)s 8032 x(cares)s 8592 x(where)s 9246 x(this)s X9661 x(equation)s 1417 13723 moveto(goes.)s 2041 x(To)s 2372 x(get)s 2729 x(an)s X3020 x(equation)s 3909 x(within)s 4585 x(a)s 4756 x(paragraph,)s 5837 x(simply)s X6553 x(place)s X/Helvetica 220 fnt X7122 13719 moveto(@Eq { ... })s X/Times-Roman 240 fnt X8190 13723 moveto(at)s 8427 x(the)s 8784 x(desired)s X9539 x(point.)s 10216 x(To)s 1417 13435 moveto(prevent)s 2213 x(it)s 2424 x(spreading)s X3433 x(over)s 3937 x(two)s 4375 x(lines,)s 4965 x(use)s X/Helvetica 220 fnt X5363 13431 moveto(@OneCol @Eq { ... })s X X/Times-Roman 240 fnt X7393 13435 moveto(.)s 7592 x(To)s 7937 x(display)s 8707 x(an)s 9012 x(equation,)s X9975 x(use)s 10373 x(a)s 1417 13147 moveto(display)s 2190 x(symbol)s 2977 x(from)s X3523 x(some)s 4110 x(other)s 4683 x(Lout)s 5217 x(package.)s 6203 x(For)s X6617 x(example,)s 7569 x(the)s 7943 x(DocumentLayout)s 9700 x(package)s 1417 12859 moveto([)s X1496 x(5)s 1616 x(])s 1762 x(has)s X/Helvetica 220 fnt X2148 12855 moveto(@IndentedDisplay)s X/Times-Roman 240 fnt X4010 12859 moveto(or)s X X/Helvetica 220 fnt X4276 12855 moveto(@ID)s X/Times-Roman 240 fnt X4785 12859 moveto(for)s 5130 x(an)s 5423 x(indented)s 6314 x(display,)s X7132 x(and)s X/Helvetica 220 fnt X7545 12855 moveto(@CentredDisplay)s X/Times-Roman 240 fnt X9333 12859 moveto(or)s X/Helvetica 220 fnt X9599 12855 moveto(@CD)s X/Times-Roman 240 fnt X10205 12859 moveto(for)s X1417 12571 moveto(a)s 1583 x(centred)s 2346 x(display,)s 3157 x(so)s X/Helvetica 220 fnt X1897 12069 moveto(@CD @Eq { int supp pi on 0 sin ` x = 0 })s X X/Times-Roman 240 fnt X1417 11571 moveto(produces)s gsave X5453 11033 translate X-180.0000 rotate Xgsave X0 -159 translate X180.0000 rotate X X/Symbol 312 fnt X0 -285 moveto(\362)s Xgrestore X Xgrestore X X/Symbol 312 fnt X5453 10907 moveto(\362)s X/Symbol 168 fnt X5538 11150 moveto(\160)s 5538 10832 moveto(\060)s X X/Times-Roman 240 fnt X5630 10980 moveto(sin)s X/Times-Italic 240 fnt X5952 x(x)s X/Symbol 240 fnt X6130 10973 moveto(\075)s 6333 x(\060)s X/Times-Roman 240 fnt X1417 10380 moveto(DocumentLayout)s X3197 x(also)s 3687 x(provides)s 4616 x(display)s 5412 x(symbols)s 6315 x(that)s X6778 x(make)s 7401 x(it)s 7638 x(easy)s 8168 x(to)s 8459 x(produce)s X9335 x(aligned)s 10144 x(and)s 1417 10092 moveto(numbered)s 2434 x(equations.)s X/Times-Bold 240 fnt X1417 9299 moveto(5.)s X1717 x(Summary)s X/Times-Roman 240 fnt X1897 8927 moveto(This)s 2422 x(section)s 3199 x(is)s 3458 x(a)s X3664 x(complete)s 4640 x(list)s 5031 x(of)s 5330 x(the)s 5722 x(symbols)s X6620 x(provided)s 7571 x(by)s 7911 x(Eq.)s 8397 x(We)s 8829 x(divide)s X9527 x(them)s 10105 x(into)s 1417 8639 moveto(auxiliary,)s 2431 x(parameterized,)s 3948 x(short)s X4531 x(names)s 5247 x(\(further)s 6080 x(divided)s 6903 x(into)s 7380 x(relations,)s X8367 x(binary)s 9083 x(operators,)s 10137 x(and)s 1417 8351 moveto(punctuation\),)s 2746 x(and)s X3152 x(full)s 3543 x(names.)s 4334 x(The)s 4766 x(auxiliary)s 5675 x(symbols)s X6533 x(are:)s X/Helvetica 220 fnt X1897 7810 moveto(`)s X/Times-Roman 240 fnt X2945 7814 moveto(Thin)s 3457 x(space)s X/Helvetica 220 fnt X1897 7522 moveto(``)s X X/Times-Roman 240 fnt X2945 7526 moveto(Medium)s 3816 x(space)s X/Helvetica 220 fnt X1897 7234 moveto(```)s X/Times-Roman 240 fnt X2945 7238 moveto(Thick)s 3563 x(space)s X X/Helvetica 220 fnt X1897 6946 moveto(bin x)s X/Times-Roman 240 fnt X2945 6950 moveto(Treat)s X/Helvetica 220 fnt X3508 6946 moveto(x)s X/Times-Roman 240 fnt X3678 6950 moveto(as)s 3937 x(a)s X4103 x(binary)s 4774 x(operator)s X/Helvetica 220 fnt X1897 6658 moveto(rel x)s X/Times-Roman 240 fnt X2945 6662 moveto(Treat)s X/Helvetica 220 fnt X3508 6658 moveto(x)s X X/Times-Roman 240 fnt X3678 6662 moveto(as)s 3937 x(a)s 4103 x(relation)s X/Helvetica 220 fnt X1897 6370 moveto(punct x)s X/Times-Roman 240 fnt X2945 6374 moveto(Treat)s X X/Helvetica 220 fnt X3508 6370 moveto(x)s X/Times-Roman 240 fnt X3678 6374 moveto(as)s 3937 x(a)s 4103 x(punctuation)s 5293 x(symbol)s X X/Helvetica 220 fnt X1897 6082 moveto(non x)s X/Times-Roman 240 fnt X2945 6086 moveto(Remove)s 3803 x(spaces)s 4487 x(normally)s 5410 x(put)s X5776 x(into)s X/Helvetica 220 fnt X6208 6082 moveto(x)s 1897 5794 moveto(vctr x)s X/Times-Roman 240 fnt X2945 5798 moveto(Centre)s X/Helvetica 220 fnt X3642 5794 moveto(x)s X X/Times-Roman 240 fnt X3812 5798 moveto(vertically)s X/Helvetica 220 fnt X1897 5506 moveto(big x)s X/Times-Roman 240 fnt X2945 5510 moveto(Make)s X/Helvetica 220 fnt X3550 5506 moveto(x)s X/Times-Roman 240 fnt X3720 5510 moveto(larger)s X1417 4969 moveto(Here)s 1999 x(are)s 2408 x(all)s 2764 x(the)s 3174 x(parameterized)s X4644 x(symbols,)s 5620 x(shown)s 6364 x(in)s 6668 x(groups)s 7438 x(of)s X7755 x(equal)s 8391 x(precedence,)s 9644 x(with)s 10187 x(the)s 1417 4681 moveto(precedence)s X2552 x(itself)s 3088 x(at)s 3320 x(right:)s X/Helvetica 220 fnt X1897 4176 moveto(matrix not)s X/Times-Roman 240 fnt X2920 4180 moveto(\(100\))s X X/Helvetica 220 fnt X1897 3888 moveto(dot dotdot hat tilde vec dyad overbar underbar)s X/Times-Roman 240 fnt X6445 3892 moveto(\(62\))s X/Helvetica 220 fnt X1897 3600 moveto(sup sub supp)s X/Times-Roman 240 fnt X3263 3604 moveto(\(60\))s 3841 x(on)s X4141 x(\(61\))s X/Helvetica 220 fnt X1897 3312 moveto(from to widefrom wideto)s X/Times-Roman 240 fnt X4284 3316 moveto(\(58\))s X/Helvetica 220 fnt X1897 3024 moveto(sqrt root)s X/Times-Roman 240 fnt X2762 3028 moveto(\(56\))s X X/Helvetica 220 fnt X1897 2736 moveto(over)s X/Times-Roman 240 fnt X2384 2740 moveto(frac)s 2814 x(\(54\))s X/Helvetica 220 fnt X1897 2448 moveto(above labove cabove rabove mabove)s X/Times-Roman 240 fnt X5605 2452 moveto(\(52\))s X X/Helvetica 220 fnt X1897 2160 moveto(nextcol)s X/Times-Roman 240 fnt X2652 2164 moveto(\(50\))s 1417 1671 moveto(See)s 1822 x(page)s 2334 x(3)s X2514 x(for)s 2852 x(examples)s 3815 x(of)s 4074 x(matrices.)s 5062 x(Here)s X5586 x(are)s 5937 x(some)s 6502 x(examples)s 7465 x(of)s 7724 x(the)s X8076 x(other)s 8627 x(symbols:)s Xpgsave restore Xshowpage X X%%Page: ? 9 X%%BeginPageSetup X0.0500 dup scale 10 setlinewidth X/pgsave save def X%%EndPageSetup X X/Times-Roman 240 fnt X5754 15261 moveto(-)s 5893 x(8)s 6073 x(-)s X/Helvetica 220 fnt X1897 14640 moveto(x dot)s X/Times-Italic 168 fnt X5904 14795 moveto(.)s X X/Times-Italic 240 fnt X5866 14644 moveto(x)s X/Helvetica 220 fnt X1897 14155 moveto(x dotdot)s X/Times-Italic 168 fnt X5883 14310 moveto(..)s X/Times-Italic 240 fnt X5866 14159 moveto(x)s X/Helvetica 220 fnt X1897 13636 moveto(x hat)s X X/Times-Roman 168 fnt X5886 13752 moveto(^)s X/Times-Italic 240 fnt X5866 13640 moveto(x)s X/Helvetica 220 fnt X1897 13162 moveto(x tilde)s X/Times-Roman 168 fnt X5880 13286 moveto(~)s X/Times-Italic 240 fnt X5866 13166 moveto(x)s X X/Helvetica 220 fnt X1897 12629 moveto(x vec)s X/Symbol 168 fnt X5878 12784 moveto(\256)s X/Times-Italic 240 fnt X5901 12633 moveto(x)s X/Helvetica 220 fnt X1897 12096 moveto(x dyad)s X/Symbol 168 fnt X5878 12251 moveto(\253)s X X/Times-Italic 240 fnt X5906 12100 moveto(x)s X/Helvetica 220 fnt X1897 11580 moveto(x+y overbar)s gsave X5866 0 translate X3.4885 1.0000 scale X X/Symbol 240 fnt X0 11691 moveto(-)s Xgrestore X X/Times-Italic 240 fnt X5866 11584 moveto(x)s X/Symbol 240 fnt X6029 11577 moveto(+)s X X/Times-Italic 240 fnt X6217 11584 moveto(y)s X/Helvetica 220 fnt X1897 11085 moveto(x+y underbar)s X/Times-Italic 240 fnt X5866 11089 moveto(x)s X/Symbol 240 fnt X6029 11082 moveto(+)s X/Times-Italic 240 fnt X6217 11089 moveto(y)s Xgsave X5866 0 translate X3.4885 1.0000 scale X X/Symbol 240 fnt X0 10927 moveto(-)s Xgrestore X X/Times-Roman 240 fnt X1417 10533 moveto(These)s 2053 x(marks)s 2702 x(are)s 3058 x(centred)s X3826 x(over)s 4316 x(the)s 4673 x(left)s 5055 x(parameter,)s 6134 x(except)s X6823 x(the)s 7180 x(last)s 7576 x(two)s 8000 x(which)s 8650 x(are)s X9006 x(extended)s 9935 x(to)s 10186 x(the)s 1417 10245 moveto(width)s 2022 x(of)s X2281 x(the)s 2633 x(object.)s X/Helvetica 220 fnt X1897 9675 moveto(a sup b)s X/Times-Italic 168 fnt X5986 9791 moveto(b)s X/Times-Italic 240 fnt X5866 9679 moveto(a)s X X/Helvetica 220 fnt X1897 9180 moveto(a sub b)s X/Times-Italic 240 fnt X5866 9184 moveto(a)s X/Times-Italic 168 fnt X5986 9104 moveto(b)s X/Helvetica 220 fnt X1897 8584 moveto(a supp b on c)s X/Times-Italic 240 fnt X5866 8588 moveto(a)s X X/Times-Italic 168 fnt X5986 8700 moveto(b)s 5986 8508 moveto(c)s X/Times-Roman 240 fnt X1417 8056 moveto(Note)s 1942 x(that)s X/Helvetica 220 fnt X2360 8052 moveto(supp)s X X/Times-Roman 240 fnt X2896 8056 moveto(and)s X/Helvetica 220 fnt X3302 8052 moveto(on)s X/Times-Roman 240 fnt X3606 8056 moveto(must)s 4131 x(be)s 4417 x(used)s X4916 x(together)s 5759 x(as)s 6018 x(shown.)s X/Helvetica 220 fnt X1897 7503 moveto(big sum from i)s X/Symbol 312 fnt X5866 7482 moveto(\345)s X X/Times-Italic 168 fnt X5954 7296 moveto(i)s X/Helvetica 220 fnt X1897 6605 moveto(big prod to j)s X/Times-Italic 168 fnt X5971 6896 moveto(j)s X/Symbol 312 fnt X5866 6584 moveto(\325)s X/Helvetica 220 fnt X1897 6105 moveto({a, ... , z} widefrom)s X1897 5817 moveto({90d @Rotate blbrace})s X/Times-Italic 240 fnt X5866 6109 moveto(a)s X/Symbol 240 fnt X5986 6102 moveto(\054)s 6089 x(\274)s 6329 x(\054)s X X/Times-Italic 240 fnt X6432 6109 moveto(z)s gsave X6235 0 translate X0.9140 1.0000 scale Xgsave X0 5905 translate X90.0000 rotate X X/Symbol 240 fnt X0 182 moveto(\354)s 0 -60 moveto(\355)s 0 -302 moveto(\356)s Xgrestore X Xgrestore X X/Helvetica 220 fnt X1897 5316 moveto({a, ... , z} wideto minus)s Xgsave X5866 0 translate X5.0305 1.0000 scale X X/Symbol 240 fnt X0 5413 moveto(-)s Xgrestore X X/Times-Italic 240 fnt X5866 5320 moveto(a)s X/Symbol 240 fnt X5986 5313 moveto(\054)s 6089 x(\274)s 6329 x(\054)s X X/Times-Italic 240 fnt X6432 5320 moveto(z)s X/Helvetica 220 fnt X1417 4815 moveto(widefrom)s X/Times-Roman 240 fnt X2364 4819 moveto(and)s X/Helvetica 220 fnt X2768 4815 moveto(wideto)s X/Times-Roman 240 fnt X3459 4819 moveto(are)s X3808 x(like)s X/Helvetica 220 fnt X4224 4815 moveto(from)s X/Times-Roman 240 fnt X4721 4819 moveto(and)s X/Helvetica 220 fnt X5125 4815 moveto(to)s X/Times-Roman 240 fnt X5366 4819 moveto(except)s X6048 x(that)s 6464 x(they)s 6934 x(horizontally)s 8147 x(scale)s 8682 x(the)s X9032 x(right)s 9541 x(parameter)s 1417 4531 moveto(to)s 1663 x(the)s 2015 x(width)s X2620 x(of)s 2879 x(the)s 3231 x(left.)s X/Helvetica 220 fnt X1897 3983 moveto(sqrt {x over y})s gsave X0 3928 translate X1.0000 1.9476 scale X X/Symbol 240 fnt X5866 -60 moveto(\326)s X Xgrestore Xgsave X5997 4239 translate X149 0 0 0 240 288 0 loutgr Xgsave X0 0 moveto xsize 0 lineto 0.03 ft setlinewidth 2 setlinecap stroke Xgrestore X Xgrestore X X/Times-Italic 240 fnt X6040 4090 moveto(x)s gsave X6040 4040 translate X106 0 0 0 240 288 0 loutgr Xgsave X0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke Xgrestore X Xgrestore X X/Times-Italic 240 fnt X6040 3886 moveto(y)s X/Helvetica 220 fnt X1897 3249 moveto(3 root {x over y})s X/Symbol 168 fnt X5866 3360 moveto(\063)s X/Times-Italic 240 fnt X5866 3253 moveto()s Xgsave X0 3194 translate X1.0000 1.9476 scale X X/Symbol 240 fnt X5866 -60 moveto(\326)s Xgrestore Xgsave X5997 3505 translate X149 0 0 0 240 288 0 loutgr Xgsave X0 0 moveto xsize 0 lineto 0.03 ft setlinewidth 2 setlinecap stroke Xgrestore X Xgrestore X X/Times-Italic 240 fnt X6040 3356 moveto(x)s gsave X6040 3306 translate X106 0 0 0 240 288 0 loutgr Xgsave X0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke Xgrestore X Xgrestore X X/Times-Italic 240 fnt X6040 3152 moveto(y)s X/Times-Roman 240 fnt X1417 2609 moveto(The)s 1849 x(left)s X2226 x(parameter)s 3240 x(of)s X/Helvetica 220 fnt X3499 2605 moveto(root)s X/Times-Roman 240 fnt X3937 2609 moveto(may)s 4409 x(be)s X4695 x(any)s 5101 x(object.)s X/Helvetica 220 fnt X1897 2000 moveto(2 over 3)s X/Symbol 240 fnt X5866 2105 moveto(\062)s gsave X5866 2057 translate X120 0 0 0 240 288 0 loutgr Xgsave X0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke Xgrestore X Xgrestore X X/Symbol 240 fnt X5866 1845 moveto(\063)s X Xpgsave restore Xshowpage X X%%Page: ? 10 X%%BeginPageSetup X0.0500 dup scale 10 setlinewidth X/pgsave save def X%%EndPageSetup X X/Times-Roman 240 fnt X5754 15261 moveto(-)s 5893 x(9)s 6073 x(-)s X/Helvetica 220 fnt X1897 14629 moveto(2 frac 3)s X/Symbol 168 fnt X5866 14715 moveto(\062)s X5950 14644 moveto(\244)s 5978 14571 moveto(\063)s X/Times-Roman 240 fnt X1417 14119 moveto(The)s 1849 x(following)s 2839 x(short)s X3377 x(names)s 4048 x(de\256ne)s 4693 x(relations)s 5575 x(\(that)s 6072 x(is,)s X6351 x(they)s 6823 x(have)s 7335 x(a)s 7501 x(thick)s 8039 x(space)s X8630 x(on)s 8930 x(each)s 9428 x(side\):)s X/Helvetica 220 fnt X3017 13657 moveto(<)s X/Symbol 240 fnt X3505 13654 moveto(\074)s X X/Helvetica 220 fnt X5885 13657 moveto(>)s X/Symbol 240 fnt X6373 13654 moveto(\076)s X/Helvetica 220 fnt X8753 13657 moveto(=)s X/Symbol 240 fnt X9241 13654 moveto(\075)s X/Helvetica 220 fnt X2889 13369 moveto(<=)s X X/Symbol 240 fnt X3505 13366 moveto(\243)s X/Helvetica 220 fnt X5586 13369 moveto(prec)s gsave X6430 13426 translate X-90.0000 rotate X X/Symbol 108 fnt X-41 -27 moveto(\366)s 0 x(\346)s Xgrestore X X/Helvetica 220 fnt X8210 13369 moveto(preceq)s Xgsave X9298 13426 translate X-90.0000 rotate X X/Symbol 108 fnt X-41 -27 moveto(\366)s 0 x(\346)s Xgrestore X X/Symbol 240 fnt X9241 13292 moveto(-)s X/Helvetica 220 fnt X2889 13081 moveto(<<)s X/Symbol 240 fnt X3505 13078 moveto(\074)s X3636 x(\074)s X/Helvetica 220 fnt X5366 13081 moveto(subset)s X/Symbol 240 fnt X6373 13078 moveto(\314)s X/Helvetica 220 fnt X7990 13081 moveto(subseteq)s X/Symbol 240 fnt X9241 13078 moveto(\315)s X X/Helvetica 220 fnt X2022 12793 moveto(sqsubseteq)s gsave X3505 12790 translate X131 120 0 60 240 288 0 loutgr Xgsave Xxsize 0 moveto X0 0 lineto X0 ysize lineto Xxsize ysize lineto X0.04 ft setlinewidth stroke Xgrestore X Xgrestore X X/Symbol 240 fnt X3505 12697 moveto(-)s X/Helvetica 220 fnt X5843 12793 moveto(in)s X/Symbol 240 fnt X6373 12790 moveto(\316)s X/Helvetica 220 fnt X8295 12793 moveto(vdash)s Xgsave X9301 12850 translate X-180.0000 rotate Xgsave X0 -78 translate X180.0000 rotate Xgsave X0 0 translate X-90.0000 rotate X X/Symbol 240 fnt X0 -60 moveto(\136)s Xgrestore X Xgrestore X Xgrestore Xgsave X9301 12929 translate X-90.0000 rotate X X/Symbol 240 fnt X0 -60 moveto(\136)s Xgrestore X X/Helvetica 220 fnt X2634 12505 moveto(smile)s gsave X3606 12562 translate X-180.0000 rotate Xgsave X0 -39 translate X180.0000 rotate Xgsave X0 -79 translate X90.0000 rotate X X/Symbol 240 fnt X0 -60 moveto(\050)s Xgrestore X Xgrestore X Xgrestore Xgsave X3606 12523 translate X90.0000 rotate X X/Symbol 240 fnt X0 -60 moveto(\050)s X Xgrestore X X/Helvetica 220 fnt X5477 12505 moveto(frown)s gsave X6474 12562 translate X-180.0000 rotate Xgsave X0 -39 translate X180.0000 rotate Xgsave X0 -79 translate X90.0000 rotate X X/Symbol 240 fnt X0 -60 moveto(\051)s Xgrestore X Xgrestore X Xgrestore Xgsave X6474 12523 translate X90.0000 rotate X X/Symbol 240 fnt X0 -60 moveto(\051)s Xgrestore X X/Helvetica 220 fnt X8625 12505 moveto(>=)s X/Symbol 240 fnt X9241 12502 moveto(\263)s X X/Helvetica 220 fnt X2693 12217 moveto(succ)s gsave X3577 12274 translate X90.0000 rotate X X/Symbol 108 fnt X-41 -27 moveto(\366)s 0 x(\346)s Xgrestore X X/Helvetica 220 fnt X5317 12217 moveto(succeq)s gsave X6445 12274 translate X90.0000 rotate X X/Symbol 108 fnt X-41 -27 moveto(\366)s X0 x(\346)s Xgrestore X X/Symbol 240 fnt X6373 12140 moveto(-)s X/Helvetica 220 fnt X8625 12217 moveto(>>)s X/Symbol 240 fnt X9241 12214 moveto(\076)s 9372 x(\076)s X X/Helvetica 220 fnt X2498 11929 moveto(supset)s X/Symbol 240 fnt X3505 11926 moveto(\311)s X/Helvetica 220 fnt X5122 11929 moveto(supseteq)s X/Symbol 240 fnt X6373 11926 moveto(\312)s X/Helvetica 220 fnt X7758 11929 moveto(sqsupseteq)s Xgsave X9241 11926 translate X131 120 0 60 240 288 0 loutgr Xgsave X0 0 moveto xsize 0 lineto Xxsize ysize lineto X0 ysize lineto X0.04 ft setlinewidth stroke Xgrestore X Xgrestore X X/Symbol 240 fnt X9241 11833 moveto(-)s X/Helvetica 220 fnt X2975 11641 moveto(ni)s gsave X3676 11698 translate X180.0000 rotate X X/Symbol 240 fnt X0 -60 moveto(\316)s Xgrestore X X/Helvetica 220 fnt X5427 11641 moveto(dashv)s gsave X6474 11698 translate X-180.0000 rotate Xgsave X0 -78 translate X180.0000 rotate Xgsave X0 -157 translate X90.0000 rotate X X/Symbol 240 fnt X0 -60 moveto(\136)s X Xgrestore X Xgrestore X Xgrestore Xgsave X6474 11620 translate X90.0000 rotate X X/Symbol 240 fnt X0 -60 moveto(\136)s Xgrestore X X/Helvetica 220 fnt X8528 11641 moveto(mid)s X/Times-Roman 240 fnt X9241 11645 moveto(|)s X/Helvetica 220 fnt X2440 11353 moveto(parallel)s X/Times-Roman 240 fnt X3505 11357 moveto(||)s X X/Helvetica 220 fnt X5757 11353 moveto(==)s X/Symbol 240 fnt X6373 11350 moveto(\272)s X/Helvetica 220 fnt X8753 11353 moveto(~)s X/Symbol 240 fnt X9241 11350 moveto(\176)s X/Helvetica 220 fnt X2944 11065 moveto(-~)s X X/Symbol 240 fnt X3505 11089 moveto(\176)s 3505 11037 moveto(-)s X/Helvetica 220 fnt X5366 11065 moveto(asymp)s gsave X6444 11123 translate X90.0000 rotate X X/Symbol 168 fnt X0 -42 moveto(\050)s Xgrestore Xgsave X6444 11066 translate X90.0000 rotate X X/Symbol 168 fnt X0 -42 moveto(\051)s X Xgrestore X X/Helvetica 220 fnt X8625 11065 moveto(~~)s X/Symbol 240 fnt X9241 11062 moveto(\273)s X/Helvetica 220 fnt X2889 10777 moveto(=~)s X/Symbol 240 fnt X3505 10774 moveto(\100)s X/Helvetica 220 fnt X5380 10777 moveto(bowtie)s Xgsave X6430 10834 translate X-90.0000 rotate Xgsave X-57 -57 translate X114 114 57 57 192 0 48 loutgr Xgsave X0 0 moveto xsize 0 lineto Xxsize 2 div ysize lineto closepath X0.04 ft setlinewidth stroke Xgrestore X Xgrestore X Xgrestore Xgsave X6544 10834 translate X90.0000 rotate Xgsave X-57 -57 translate X114 114 57 57 192 0 48 loutgr Xgsave X0 0 moveto xsize 0 lineto Xxsize 2 div ysize lineto closepath X0.04 ft setlinewidth stroke Xgrestore X Xgrestore X Xgrestore X X/Helvetica 220 fnt X8259 10777 moveto(propto)s X/Symbol 240 fnt X9241 10774 moveto(\265)s X/Helvetica 220 fnt X2438 10489 moveto(models)s gsave X3505 10546 translate X-180.0000 rotate Xgsave X0 -81 translate X180.0000 rotate X X/Times-Roman 240 fnt X0 -162 moveto(|)s Xgrestore X Xgrestore X X/Times-Roman 240 fnt X3505 10465 moveto(|)s Xgsave X3517 10546 translate X-180.0000 rotate Xgsave X0 -29 translate X180.0000 rotate X X/Symbol 240 fnt X0 -93 moveto(\075)s Xgrestore X Xgrestore X X/Symbol 240 fnt X3517 10483 moveto(\075)s X/Helvetica 220 fnt X5464 10489 moveto(doteq)s X/Symbol 240 fnt X6408 10564 moveto(\327)s 6373 10486 moveto(\075)s X X/Helvetica 220 fnt X8442 10489 moveto(perp)s X/Symbol 240 fnt X9241 10486 moveto(\136)s X/Helvetica 220 fnt X2486 10201 moveto(notsub)s X/Symbol 240 fnt X3505 10198 moveto(\313)s X/Helvetica 220 fnt X5538 10201 moveto(notin)s X X/Symbol 240 fnt X6373 10198 moveto(\317)s X/Helvetica 220 fnt X8692 10201 moveto(!=)s X/Symbol 240 fnt X9241 10198 moveto(\271)s X/Helvetica 220 fnt X2816 9913 moveto(<->)s X/Symbol 240 fnt X3505 9910 moveto(\253)s X X/Helvetica 220 fnt X5739 9913 moveto(<--)s X/Symbol 240 fnt X6373 9910 moveto(\254)s X/Helvetica 220 fnt X8607 9913 moveto(-->)s X/Symbol 240 fnt X9241 9910 moveto(\256)s X/Helvetica 220 fnt X2901 9625 moveto(up)s X X/Symbol 240 fnt X3505 9622 moveto(\255)s X/Helvetica 220 fnt X5489 9625 moveto(down)s X/Symbol 240 fnt X6373 9622 moveto(\257)s X/Helvetica 220 fnt X8497 9625 moveto(<=>)s X/Symbol 240 fnt X9241 9622 moveto(\333)s X X/Helvetica 220 fnt X2761 9337 moveto(<==)s X/Symbol 240 fnt X3505 9334 moveto(\334)s X/Helvetica 220 fnt X5629 9337 moveto(==>)s X/Symbol 240 fnt X6373 9334 moveto(\336)s X/Helvetica 220 fnt X8345 9337 moveto(dblup)s X X/Symbol 240 fnt X9241 9334 moveto(\335)s X/Helvetica 220 fnt X2329 9049 moveto(dbldown)s X/Symbol 240 fnt X3505 9046 moveto(\337)s X/Helvetica 220 fnt X5952 9049 moveto(:)s X/Symbol 240 fnt X6373 9046 moveto(\072)s X X/Helvetica 220 fnt X8759 9049 moveto(::)s X/Symbol 240 fnt X9241 9046 moveto(\072)s 9350 x(\072)s X/Helvetica 220 fnt X2956 8761 moveto(:=)s X/Symbol 240 fnt X3505 8758 moveto(\072)s X3571 8746 moveto(\075)s X/Times-Roman 240 fnt X1417 8304 moveto(These)s 2053 x(can)s 2450 x(be)s 2741 x(negated)s X3550 x(by)s 3855 x(preceding)s 4863 x(them)s 5406 x(with)s X/Helvetica 220 fnt X5896 8300 moveto(not)s X X/Times-Roman 240 fnt X6201 8304 moveto(,)s 6326 x(as)s 6590 x(in)s X/Helvetica 220 fnt X6841 8300 moveto(not ==)s X/Times-Roman 240 fnt X7463 8304 moveto(,)s X7588 x(for)s 7931 x(example,)s 8866 x(which)s 9516 x(yields)s X/Symbol 240 fnt X10224 8297 moveto(\272)s X10256 x(\057)s X/Times-Roman 240 fnt X10427 8304 moveto(.)s 1417 8016 moveto(The)s 1849 x(following)s 2839 x(short)s X3377 x(names)s 4048 x(de\256ne)s 4693 x(binary)s 5364 x(operators)s 6313 x(\(medium)s X7236 x(space)s 7827 x(on)s 8127 x(each)s 8625 x(side\):)s X/Helvetica 220 fnt X3017 7525 moveto(+)s X X/Symbol 240 fnt X3490 7522 moveto(+)s X/Helvetica 220 fnt X5940 7525 moveto(-)s X/Symbol 240 fnt X6358 7522 moveto(-)s X/Helvetica 220 fnt X8680 7525 moveto(+-)s X/Symbol 240 fnt X9226 7522 moveto(\261)s X X/Helvetica 220 fnt X2944 7237 moveto(-+)s gsave X3621 7294 translate X180.0000 rotate X X/Symbol 240 fnt X0 -60 moveto(\261)s Xgrestore X X/Helvetica 220 fnt X5135 7237 moveto(setminus)s X/Times-Italic 240 fnt X6358 7241 moveto(\\)s X/Helvetica 220 fnt X8466 7237 moveto(cdot)s X X/Symbol 240 fnt X9226 7234 moveto(\327)s X/Helvetica 220 fnt X2621 6949 moveto(times)s X/Symbol 240 fnt X3490 6946 moveto(\264)s X/Helvetica 220 fnt X5928 6949 moveto(*)s X/Symbol 240 fnt X6358 6946 moveto(\052)s X X/Helvetica 220 fnt X8540 6949 moveto(circ)s gsave X9226 6934 translate X168 144 0 72 240 288 0 loutgr Xgsave Xxsize ysize 2 div moveto Xxsize 2 div ysize 2 div xsize 2 div 0 360 arc X0.04 ft setlinewidth stroke Xgrestore X Xgrestore X X/Helvetica 220 fnt X2865 6661 moveto(div)s X/Symbol 240 fnt X3490 6658 moveto(\270)s X/Helvetica 220 fnt X5659 6661 moveto(cap)s X/Symbol 240 fnt X6358 6658 moveto(\307)s X X/Helvetica 220 fnt X8527 6661 moveto(cup)s X/Symbol 240 fnt X9226 6658 moveto(\310)s X/Helvetica 220 fnt X2621 6373 moveto(uplus)s X/Symbol 168 fnt X3536 6436 moveto(+)s X/Symbol 240 fnt X3490 6370 moveto(\310)s X X/Helvetica 220 fnt X5427 6373 moveto(sqcap)s gsave X6358 6358 translate X144 144 72 72 240 288 0 loutgr Xgsave X0 0 moveto 0 ysize lineto xsize ysize lineto Xxsize 0 lineto X0.04 ft setlinewidth stroke Xgrestore X Xgrestore X X/Helvetica 220 fnt X8295 6373 moveto(sqcup)s gsave X9427 6430 translate X180.0000 rotate Xgsave X57 -72 translate X144 144 72 72 240 288 0 loutgr Xgsave X0 0 moveto 0 ysize lineto xsize ysize lineto Xxsize 0 lineto X0.04 ft setlinewidth stroke Xgrestore X Xgrestore X Xgrestore X X/Helvetica 220 fnt X2135 6085 moveto(triangleleft)s gsave X3547 6142 translate X90.0000 rotate Xgsave X-57 -57 translate X114 114 57 57 192 288 48 loutgr Xgsave X0 0 moveto xsize 0 lineto Xxsize 2 div ysize lineto closepath X0.04 ft setlinewidth stroke Xgrestore X Xgrestore X Xgrestore X X/Helvetica 220 fnt X4869 6085 moveto(triangleright)s gsave X6415 6142 translate X-90.0000 rotate Xgsave X-57 -57 translate X114 114 57 57 192 288 48 loutgr Xgsave X0 0 moveto xsize 0 lineto Xxsize 2 div ysize lineto closepath X0.04 ft setlinewidth stroke Xgrestore X Xgrestore X Xgrestore X X/Helvetica 220 fnt X8650 6085 moveto(wr)s Xgsave X9239 6142 translate X-180.0000 rotate Xgsave X0 -65 translate X180.0000 rotate Xgsave X0 -131 translate X90.0000 rotate X X/Symbol 240 fnt X0 -60 moveto(\176)s Xgrestore X Xgrestore X Xgrestore Xgsave X9239 6077 translate X90.0000 rotate X X/Symbol 240 fnt X0 -60 moveto(\176)s Xgrestore X X/Helvetica 220 fnt X2512 5797 moveto(bigcirc)s gsave X3490 5768 translate X201 172 0 86 288 288 72 loutgr Xgsave Xxsize ysize 2 div moveto Xxsize 2 div ysize 2 div xsize 2 div 0 360 arc X0.04 ft setlinewidth stroke Xgrestore X Xgrestore X X/Helvetica 220 fnt X4759 5797 moveto(bigtriangleup)s gsave X6358 5768 translate X172 172 86 86 288 288 72 loutgr Xgsave X0 0 moveto xsize 0 lineto Xxsize 2 div ysize lineto closepath X0.04 ft setlinewidth stroke Xgrestore X Xgrestore X X/Helvetica 220 fnt X7347 5797 moveto(bigtriangledown)s Xgsave X9312 5854 translate X180.0000 rotate Xgsave X-86 -86 translate X172 172 86 86 288 288 72 loutgr Xgsave X0 0 moveto xsize 0 lineto Xxsize 2 div ysize lineto closepath X0.04 ft setlinewidth stroke Xgrestore X Xgrestore END_OF_FILE if test 49055 -ne `wc -c <'lout/doc/tr.eq/outfile.ps.B'`; then echo shar: \"'lout/doc/tr.eq/outfile.ps.B'\" unpacked with wrong size! elif test -f 'lout/doc/tr.eq/outfile.ps.A' && test -f 'lout/doc/tr.eq/outfile.ps.C'; then echo shar: Combining \"'lout/doc/tr.eq/outfile.ps'\" \(157394 characters\) cat 'lout/doc/tr.eq/outfile.ps.A' 'lout/doc/tr.eq/outfile.ps.B' 'lout/doc/tr.eq/outfile.ps.C' > 'lout/doc/tr.eq/outfile.ps' if test 157394 -ne `wc -c <'lout/doc/tr.eq/outfile.ps'`; then echo shar: \"'lout/doc/tr.eq/outfile.ps'\" combined with wrong size! else rm lout/doc/tr.eq/outfile.ps.A lout/doc/tr.eq/outfile.ps.B rm lout/doc/tr.eq/outfile.ps.C fi fi # end of 'lout/doc/tr.eq/outfile.ps.B' fi if test -f 'lout/doc/tr.over/s2' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'lout/doc/tr.over/s2'\" else echo shar: Extracting \"'lout/doc/tr.over/s2'\" \(1739 characters\) sed "s/^X//" >'lout/doc/tr.over/s2' <<'END_OF_FILE' X@Section X @Title { The non-expert's view } X@Begin X@PP XThe non-expert user perceives Lout as text interspersed with special Xsymbols, in a style reminiscent of many other batch formatters: X@ID @Code { X"@Doc @Text @Begin" X"@Heading { Standard Integrals }" X"@PP" X"The following list of standard" X"integrals should be memorized:" X"@NumberList" X"@Item @Eq {int e sup x dx = e sup x}" X"@Item @Eq {int dx over" X" sqrt { 1 - x sup 2 } = arc sin x}" X"@EndList" X"@End @Text" X} XBraces are used for grouping parameters to the features. The symbols Xare all taken from two of the standard packages: DocumentLayout, which Xprovides headings, paragraphs, lists, footnotes, sections, and so on, Xand Eq, which provides mathematical typesetting in a style copied from Xthe eqn language of Kernighan and Cherry [{@Ref kernighan75}]. X@PP XAt the time of writing, packages exist for formatting general documents, Xtechnical reports, and books, the latter providing an automatic table of Xcontents, running page headers and footers, access to bibliographic Xdatabases, and a sorted index, among many other features. Specialized Xpackages exist for mathematical typesetting, drawing figures, and Xformatting Pascal programs. X@PP XThe advanced features maintain the simple style established above. To Xproduce a footnote, for example, one simply types X@ID @Code "@FootNote { ... }" Xat the appropriate point, and it will be numbered and placed at the Xbottom of the page; to add an item to the index, X@ID @Code "expert @Index { Expert user }" Xis typed, and the right parameter will appear in the index, with a page Xnumber, at a place determined by the alphabetical ranking of the left Xparameter. No technical knowledge is required to use these features. X@End @Section END_OF_FILE if test 1739 -ne `wc -c <'lout/doc/tr.over/s2'`; then echo shar: \"'lout/doc/tr.over/s2'\" unpacked with wrong size! fi # end of 'lout/doc/tr.over/s2' fi if test -f 'lout/z22.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'lout/z22.c'\" else echo shar: Extracting \"'lout/z22.c'\" \(28732 characters\) sed "s/^X//" >'lout/z22.c' <<'END_OF_FILE' X/*@z22.c:Galley Service:FlushInners(), Promote(), KillGalley()@***************/ X/* */ X/* LOUT: A HIGH-LEVEL LANGUAGE FOR DOCUMENT FORMATTING (VERSION 2.03) */ X/* COPYRIGHT (C) 1993 Jeffrey H. Kingston */ X/* */ X/* Jeffrey H. Kingston (jeff@cs.su.oz.au) */ X/* Basser Department of Computer Science */ X/* The University of Sydney 2006 */ X/* AUSTRALIA */ X/* */ X/* This program is free software; you can redistribute it and/or modify */ X/* it under the terms of the GNU General Public License as published by */ X/* the Free Software Foundation; either version 1, or (at your option) */ X/* any later version. */ X/* */ X/* This program is distributed in the hope that it will be useful, */ X/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ X/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ X/* GNU General Public License for more details. */ X/* */ X/* You should have received a copy of the GNU General Public License */ X/* along with this program; if not, write to the Free Software */ X/* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ X/* */ X/* FILE: z22.c */ X/* MODULE: Galley Service */ X/* EXTERNS: FlushInners(), ExpandRecursives(), Promote(), */ X/* KillGalley(), FreeGalley(), Interpose(), */ X/* TargetSymbol(), CheckConstraint() */ X/* */ X/*****************************************************************************/ X#include "externs" X#define LAST_ADJUST 1 X#define ALL_ADJUST 2 X X X/*****************************************************************************/ X/* */ X/* static MakeDead(y) */ X/* */ X/* Convert object y into a DEAD object and remove it to the dead store. */ X/* */ X/*****************************************************************************/ X Xstatic MakeDead(y) XOBJECT y; X{ static int dead_count = 0; /* number of DEAD objects seen */ X static OBJECT dead_store = nil; /* where DEAD objects are kept */ X X debug1(DGS, DDD, "MakeDead( %s )", Image(type(y))); X if( dead_store == nil ) dead_store = New(ACAT); X type(y) = DEAD; X MoveLink(Up(y), dead_store, PARENT); X if( dead_count >= 100 ) DisposeChild(Down(dead_store)); X else dead_count++; X debug1(DGS, DDD, "MakeDead returning (dead_count = %d).", dead_count); X} /* end MakeDead */ X X/*****************************************************************************/ X/* */ X/* FlushInners(inners, hd) */ X/* */ X/* Flush each galley on the list inners. These have become flushable */ X/* by being promoted off the top of galley hd; if hd is the root galley, */ X/* identifiable by having PrintSym as target, don't flush inners at all. */ X/* */ X/*****************************************************************************/ X XFlushInners(inners, hd) XOBJECT inners, hd; X{ OBJECT y, z, tmp, dest_index; X X /* check for root galley case */ X if( hd != nil ) X { assert( Up(hd) != hd, "FlushInners: Up(hd)!" ); X Parent(dest_index, Up(hd)); X if( actual(actual(dest_index)) == PrintSym ) X { DisposeObject(inners); X return; X } X } X X while( Down(inners) != inners ) X { Child(y, Down(inners)); X DeleteLink(Down(inners)); X switch( type(y) ) X { X X case DEAD: X X break; X X X case RECEIVING: X case UNATTACHED: X X assert( Down(y) != y, "FlushInners: UNATTACHED!"); X Child(z, Down(y)); X debug0(DGF, D, " calling FlushGalley from FlushInners (a)"); X FlushGalley(z); X break; X X X case PRECEDES: X X Child(tmp, Down(y)); X if( Up(tmp) != LastUp(tmp) ) X { Parent(tmp, LastUp(tmp)); X assert(type(tmp)==FOLLOWS, "FlushInners: FOLLOWS!"); X if( blocked(tmp) ) X { blocked(tmp) = FALSE; X Parent(z, Up(tmp)); X debug0(DGF, D, " calling FlushGalley from FlushInners (b)"); X FlushGalley(z); X } X } X break; X X X default: X X Error(INTERN,&fpos(y),"FlushInners %s", Image(type(y))); X break; X } X } X Dispose(inners); X} /* end FlushInners */ X X X/*@@**************************************************************************/ X/* */ X/* ExpandRecursives(recs) */ X/* */ X/* Expand each of the recursive definite objects in the list recs. */ X/* */ X/*****************************************************************************/ X XExpandRecursives(recs) XOBJECT recs; X{ CONSTRAINT non_c, hc, vc; X OBJECT target_index, target, z, n1, inners, newrecs, hd, tmp, env; X debug0(DCR, D, "ExpandRecursives(recs)"); X SetConstraint(non_c, MAX_LEN, MAX_LEN, MAX_LEN); n1 = nil; X assert(recs != nil, "ExpandRecursives: recs == nil!"); X while( Down(recs) != recs ) X { Child(target_index, Down(recs)); X DeleteLink( Down(recs) ); X assert( type(target_index) == RECURSIVE, "ExpandRecursives: index!" ); X target = actual(target_index); X debug2(DCR, DD, " expanding %s %s", Image(type(target_index)), X EchoObject(null, target)); X X /* expand body of target, convert to galley, and check size */ X hd = New(HEAD); actual(hd) = actual(target); X whereto(hd) = ready_galls(hd) = nil; must_expand(hd) = TRUE; X backward(hd) = sized(hd) = FALSE; X tmp = CopyObject(target, &fpos(target)); X env = DetachEnv(tmp); X Link(hd, tmp); Link(target_index, hd); X SizeGalley(hd, env, external(target), threaded(target), FALSE, FALSE, X &save_style(target), &non_c, nil, &n1, &newrecs, &inners); X debug0(DCR, DDD, " as galley:"); X ifdebug(DCR, DDD, EchoObject(stderr, hd)); X Constrained(target, &hc, COL); X debug2(DSC, D, "Constrained( %s, COL ) = %s", X EchoObject(null, target), EchoConstraint(&hc)); X debug3(DCR, DD, " horizontal size: (%s, %s); constraint: %s", X EchoLength(back(hd, COL)), EchoLength(fwd(hd, COL)), EchoConstraint(&hc)); X if( !FitsConstraint(back(hd, COL), fwd(hd, COL), hc) ) X { DisposeChild(Up(hd)); X if( inners != nil ) DisposeObject(inners); X if( newrecs != nil ) DisposeObject(newrecs); X DeleteNode(target_index); X debug0(DCR, DD, " rejecting (too wide)"); X continue; X } X if( !external(target) ) X { Constrained(target, &vc, ROW); X debug2(DSC, D, "Constrained( %s, ROW ) = %s", X EchoObject(null, target), EchoConstraint(&vc)); X Child(z, LastDown(hd)); X debug3(DCR, DD, " vsize: (%s, %s); constraint: %s", X EchoLength(back(z, ROW)), EchoLength(fwd(z, ROW)), EchoConstraint(&vc)); X if( !FitsConstraint(back(z, ROW), fwd(z, ROW), vc) ) X { DisposeChild(Up(hd)); X if( inners != nil ) DisposeObject(inners); X if( newrecs != nil ) DisposeObject(newrecs); X DeleteNode(target_index); X debug0(DCR, DD, " rejecting (too high)"); X continue; X } X } X X /* object fits; adjust sizes and promote */ X debug0(DSA, D, "calling AdjustSize from ExpandRecursives (a)"); X AdjustSize(target, back(hd, COL), fwd(hd, COL), COL); X if( !external(target) ) X { debug0(DSA, D, "calling AdjustSize from ExpandRecursives (b)"); X AdjustSize(target, back(z, ROW), fwd(z, ROW), ROW); X Interpose(target, VCAT, z, z); X } X Promote(hd, hd, target_index); DeleteNode(hd); X DeleteNode(target_index); X if( inners != nil ) FlushInners(inners, nil); X if( newrecs != nil ) MergeNode(recs, newrecs); X } /* end while */ X Dispose(recs); X debug0(DCR, D, "ExpandRecursives returning."); X} /* end ExpandRecursives */ X X X/*****************************************************************************/ X/* */ X/* OBJECT FindSplitInGalley(hd) */ X/* */ X/* Search simply joined galley hd for a SPLIT object, which must be there. */ X/* */ X/*****************************************************************************/ X Xstatic OBJECT FindSplitInGalley(hd) XOBJECT hd; X{ OBJECT link, y; X debug0(DGF, D, "FindSplitInGalley(hd)"); X for( link = Down(hd); link != hd; link = NextDown(link) ) X { Child(y, link); X if( is_definite(type(y)) ) break; X } X if( link == hd ) X { debug0(DGF, D, "FindSplitInGalley failing, no definite component; hd ="); X ifdebug(DGF, D, EchoObject(stderr, hd)); X Error(INTERN, &fpos(hd), "missing galley component"); X } X while( type(y) != SPLIT ) switch( type(y) ) X { X case VCAT: X case ONE_ROW: X case WIDE: X case HIGH: X case VCONTRACT: X case VEXPAND: X case PADJUST: X case VADJUST: X X Child(y, Down(y)); X break; X X X case CLOSURE: X case NULL_CLOS: X case HCAT: X case WORD: X case ACAT: X case ROW_THR: X case COL_THR: X case ONE_COL: X case SCALE: X case HSCALE: X case VSCALE: X case HCONTRACT: X case HEXPAND: X case HADJUST: X case ROTATE: X case INCGRAPHIC: X case SINCGRAPHIC: X case GRAPHIC: X X debug0(DGF, D, "FindSplitInGalley(hd) failing, hd ="); X ifdebug(DGF, D, EchoObject(stderr, hd)); X Error(INTERN, &fpos(y), "FindSplitInGalley failed", Image(type(y))); X break; X X X default: X X Error(INTERN, &fpos(y), "FindSplitInGalley found %s", Image(type(y))); X break; X X } X debug0(DGF, D, "FindSplitInGalley returning."); X return y; X} /* end FindSplitInGalley */ X X/*@@**************************************************************************/ X/* */ X/* Promote(x, stop_link, dest_index) */ X/* */ X/* Promote components of galley x into its destination (dest), up to but */ X/* not including the one linked to x by link stop_link, which always */ X/* follows a component. No size adjustments are made, except that when */ X/* two col_thr nodes are merged, a COL adjustment is made to the result. */ X/* */ X/*****************************************************************************/ X XPromote(x, stop_link, dest_index) XOBJECT x, stop_link, dest_index; X{ X /* these four variables refer to the root galley only */ X static BOOLEAN first = TRUE; /* TRUE when the first component not written */ X static int prec_back; /* back value of preceding component */ X static int prec_fwd; /* fwd value of preceding component */ X static GAP prec_gap; /* preceding gap */ X X OBJECT dest, link, y, z, tmp1, tmp2; X int dim; CONSTRAINT c; X debug1(DGS, D, "Promote(%s, stop_link)", SymName(actual(x))); X X assert( type(x) == HEAD, "Promote: x!" ); X assert( type(stop_link) == LINK || stop_link == x, "Promote: stop_link!" ); X assert( stop_link != Down(x), "Promote: stop_link == Down(x)!" ); X type(dest_index) = RECEIVING; X dest = actual(dest_index); X X /* insert final gap if galley is ending */ X if( stop_link != x ) X { Child(y, stop_link); X assert( type(y) == GAP_OBJ, "Promote: missing GAP_OBJ!" ); X stop_link = NextDown(stop_link); X } X else X { y = New(GAP_OBJ); X FposCopy(fpos(y), fpos(x)); X hspace(y) = 0; vspace(y) = 1; X ClearGap(gap(y)); X Link(stop_link, y); X } X X /* error if promoting a seen_nojoin galley into a threaded destination */ X if( seen_nojoin(x) && threaded(dest) ) X Error(FATAL, &fpos(x), "galley %s must have a single column mark", X SymName(actual(x))); X if( seen_nojoin(x) ) join(gap(y)) = FALSE; /* to make nojoin status clear */ X X /* if promoting out of root galley, do special things */ X if( actual(dest) == PrintSym ) X { CONSTRAINT c; X link = x; X while( NextDown(link) != stop_link ) X { Child(y, NextDown(link)); X debug1(DGS, D, "root promote %s", EchoObject(null, y)); X if( type(y) == SPLIT ) Child(y, DownDim(y, ROW)); X switch( type(y) ) X { X X case PRECEDES: X X DisposeChild(NextDown(link)); X break; X X X case UNATTACHED: X X assert( Down(y) != y, "FlushRootGalley: UNATTACHED!" ); X Child(z, Down(y)); X assert( type(z) == HEAD, "FlushRootGalley: unattached HEAD!" ); X if( sized(z) ) X { X /* galley is part flushed, leave it here */ X link = NextDown(link); X } X else if( backward(z) ) X { X /* galley is preceding, send to CrossSequence */ X OBJECT t; X type(y) = GALL_PREC; X Child(t, Down(z)); X actual(y) = CrossMake(whereto(z), t, GALL_PREC); X DisposeChild(Down(y)); X CrossSequence(actual(y)); X DisposeChild(NextDown(link)); X } X else X { X /* galley was never attached, print message and kill it */ X Error(WARN, &fpos(z), "Galley %s deleted - never attached", X SymName(actual(z))); X KillGalley(z); X } X break; X X X case EXPAND_IND: X X /* expand @HExpand or @VExpand to occupy everything possible */ X dim = type(actual(y)) == HEXPAND ? COL : ROW; X debug1(DGP, D, " flushing %s", EchoObject(null, y)); X Constrained(actual(y), &c, dim); X if( constrained(c) ) X { LENGTH b = back(actual(y), dim); X LENGTH f = fwd(actual(y), dim); X EnlargeToConstraint(&b, &f, &c); X debug2(DGP, D, "FlushRoot call AdjustSize(x, %s,%s, dim)", X EchoLength(b), EchoLength(f)); X debug1(DSA, D, "Promote %s AdjustSize", Image(type(actual(y)))); X AdjustSize(actual(y), b, f, dim); X } X DisposeChild(NextDown(link)); X break; X X X case GALL_PREC: X case GALL_FOLL: X case GALL_TARG: X case CROSS_PREC: X case CROSS_FOLL: X case CROSS_TARG: X X CrossSequence(actual(y)); X DisposeChild(NextDown(link)); X break; X X X case WORD: X case ONE_COL: X case ONE_ROW: X case WIDE: X case HIGH: X case HSCALE: X case VSCALE: X case HCONTRACT: X case VCONTRACT: X case HEXPAND: X case VEXPAND: X case PADJUST: X case HADJUST: X case VADJUST: X case ROTATE: X case SCALE: X case INCGRAPHIC: X case SINCGRAPHIC: X case GRAPHIC: X case ACAT: X case HCAT: X case ROW_THR: X X case CLOSURE: X case NULL_CLOS: X case CROSS: X X /* print this component */ X debug0(DCR, D, "Promote --"); X if( !is_indefinite(type(y)) && size(y, ROW) != 0 ) X { X /* move down as specified by the gap */ X if( first ) X { PrintPrologue(size(x, COL), size(y, ROW)); X first = FALSE; X } X else PrintOriginIncrement(prec_back - back(y, ROW) X + MinGap(prec_fwd, back(y, ROW), fwd(y, ROW), &prec_gap)); X debug1(DGF,D, " Promote calling FixAndPrint %s", Image(type(y))); X /* old interface *** X SetConstraint(c, back(x, COL), size(x, COL), fwd(x, COL)); X FixAndPrintObject(y, back(x, COL), &c, COL, FALSE, 0, 0); X SetConstraint(c, back(y, ROW), size(y, ROW), fwd(y, ROW)); X FixAndPrintObject(y, back(y,ROW), &c, ROW, FALSE, size(y,ROW), 0); X *** */ X FixAndPrintObject(y, back(x, COL), back(x, COL), fwd(x, COL), X COL, LAST_ADJUST, FALSE, LAST_ADJUST, 0, 0); X FixAndPrintObject(y, back(y,ROW), back(y, ROW), fwd(y, ROW), X ROW, LAST_ADJUST, FALSE, LAST_ADJUST, size(y,ROW), 0); X prec_back = back(y, ROW); prec_fwd = fwd(y, ROW); X } X DisposeChild(NextDown(link)); X break; X X X case GAP_OBJ: X X GapCopy(prec_gap, gap(y)); X DisposeChild(NextDown(link)); X break; X X X default: X X Error(INTERN, &fpos(y), "Promote (root): %s", Image(type(y))); X break; X X } X } X debug0(DGS, D, "Promote returning (root galley)."); X return; X } X X /* prepare the promotion */ X if( external(dest) ) X { if( threaded(dest) ) X { Parent(tmp1, UpDim(dest, COL)); X assert( type(tmp1) == COL_THR, "Promote: tmp1 not COL_THR!" ); X y = FindSplitInGalley(x); X assert( type(y) == SPLIT, "Promote: FindSplitInGalley!" ); X Child(tmp2, DownDim(y, COL)); X assert( type(tmp2) == COL_THR, "Promote: tmp2 not COL_THR!" ); X if( tmp1 != tmp2 ) X { LENGTH b = max(back(tmp1, COL), back(tmp2, COL)); X LENGTH f = max(fwd(tmp1, COL), fwd(tmp2, COL)); X debug0(DSA, D, "calling AdjustSize(tmp1) from Promote (node merging)"); X AdjustSize(tmp1, b, f, COL); X debug0(DSA, D, "calling AdjustSize(tmp2) from Promote (node merging)"); X AdjustSize(tmp2, b, f, COL); X MergeNode(tmp1, tmp2); X } X } X link = Up(dest_index); X } X else X { for( link = x; NextDown(link) != stop_link; ) X { Child(y, NextDown(link)); X if( is_index(type(y)) ) MoveLink(NextDown(link), Up(dest_index), PARENT); X else link = NextDown(link); X } X assert( Down(x) != stop_link, "Promote: Down(x) == stop_link!" ); X assert( UpDim(dest, ROW) == UpDim(dest, COL), "Promote: dims!" ); X link = Up(dest); X } X X /* promote components */ X TransferLinks(Down(x), stop_link, link); X X debug0(DGS, D, "Promote returning."); X} /* end Promote */ X X X/*@@**************************************************************************/ X/* */ X/* KillGalley(hd) */ X/* */ X/* Kill galley hd, which may be sized or unsized. The galley's index must */ X/* be UNATTACHED; it is moved out of its present location to a secret spot. */ X/* */ X/*****************************************************************************/ X XKillGalley(hd) XOBJECT hd; X{ OBJECT prnt, link, y, z; X debug2(DGA, D, "[ KillGalley(Galley %s into %s)", X SymName(actual(hd)), SymName(whereto(hd))); X assert( type(hd) == HEAD && Up(hd) != hd, "KillGalley: precondition!" ); X Parent(prnt, Up(hd)); X assert( type(prnt) == UNATTACHED, "KillGalley: UNATTACHED precondition!" ); X assert( Up(prnt) != prnt, "KillGalley: prnt!" ); X X if( ready_galls(hd) != nil ) X { DisposeObject(ready_galls(hd)); X ready_galls(hd) = nil; X } X link = hd; X while( NextDown(link) != hd ) X { Child(y, NextDown(link)); X switch( type(y) ) X { X case RECEIVING: while( Down(y) != y ) X { Child(z, Down(y)); X DetachGalley(z); X } X DeleteNode(y); X break; X X case RECEPTIVE: assert( Down(y) == y, "KillGalley: RECEPTIVE!" ); X DeleteNode(y); X break; X X case UNATTACHED: assert( Down(y) != y, "KillGalley: UNATTACHED!" ); X Child(z, Down(y)); X KillGalley(z); X break; X X case HEAD: Error(INTERN, &fpos(y), "KillGalley: HEAD!"); X break; X X default: DisposeChild(NextDown(link)); X break; X } X } X X /* move index into dead_store */ X MakeDead(prnt); X debug0(DGA, D, "] KillGalley returning."); X} /* end KillGalley */ X X X/*@@**************************************************************************/ X/* */ X/* FreeGalley(hd, stop_link, inners, relocate_link, sym) */ X/* */ X/* Free galley hd up to but not including stop_link. *Inners is well- */ X/* defined, either nil or an ACAT of galleys to be flushed. */ X/* */ X/* Relocate_link defines what to do any galley attached to one of the */ X/* freed targets. If it is non-nil, galley hd is searched onwards from */ X/* it to see if a target can be found there. If so, the galley is */ X/* relocated to just before that point. If not, or if relocate_link is */ X/* nil, the galley is freed and added to *inners for flushing. If such */ X/* galley's whereto() is sym, it is freed, not relocated, because the */ X/* cause of this call to FreeGalley is also targeted to sym, and it will */ X/* consume all possible targets of sym. */ X/* */ X/*****************************************************************************/ X XFreeGalley(hd, stop_link, inners, relocate_link, sym) XOBJECT hd, stop_link, *inners, relocate_link, sym; X{ OBJECT link, y, z, zlink, srch, index; X assert( type(hd) == HEAD && sized(hd), "FreeGalley: pre!"); X assert( Up(hd) != hd, "FreeGalley: Up(hd)!" ); X assert( *inners == nil || type(*inners) == ACAT, "FreeGalley: ACAT!" ); X debug3(DGA, D, "[ FreeGalley(Galley %s into %s); rl %s nil", X SymName(actual(hd)), SymName(whereto(hd)), relocate_link==nil ? "==":"!="); X X /* close targets and move or flush any inner galleys */ X for( link = Down(hd); link != stop_link; link = NextDown(link) ) X { Child(y, link); X if( type(y) == RECEIVING && actual(actual(y)) == InputSym ) X Error(WARN, &fpos(actual(y)), "forcing galley past input point"); X else if( type(y) == RECEIVING ) X { X /* either relocate or free each galley */ X for( zlink = Down(y); zlink != y; ) X { Child(z, zlink); X zlink = NextDown(zlink); X assert( type(z) == HEAD, "FreeGalley/RECEIVING: type(z) != HEAD!" ); X debug1(DGA, D, "FreeGalley examining galley %s", SymName(actual(z))); X if( relocate_link != nil && whereto(z) != sym && X (srch = SearchGalley(relocate_link, whereto(z), TRUE, X FALSE, TRUE, FALSE)) != nil ) X { DetachGalley(z); X Parent(index, Up(z)); X MoveLink(Up(index), Up(srch), PARENT); /* just before new dest */ X } X else X { debug0(DGA, D, " calling FreeGalley from FreeGalley"); X FreeGalley(z, z, inners, nil, sym); X if( *inners == nil ) *inners = New(ACAT); X Link(*inners, y); X } X } X non_blocking(y) = TRUE; X } X else if( type(y) == RECEPTIVE ) non_blocking(y) = TRUE; X } X debug0(DGA, D, "] FreeGalley returning."); X} /* end FreeGalley */ X X X/*****************************************************************************/ X/* */ X/* Interpose(z, typ, x, y) */ X/* */ X/* Insert a new typ object above z. Its sizes are to be taken from x */ X/* (column) and y (row). */ X/* */ X/*****************************************************************************/ X XInterpose(z, typ, x, y) XOBJECT z; int typ; OBJECT x, y; X{ OBJECT encl = New(typ); X FposCopy(fpos(encl), fpos(y)); X ReplaceNode(encl, z); Link(encl, z); X back(encl, COL) = back(x, COL); X fwd(encl, COL) = fwd(x, COL); X back(encl, ROW) = back(y, ROW); X fwd(encl, ROW) = fwd(y, ROW); X} /* end Interpose */ X X/*@@**************************************************************************/ X/* */ X/* BOOLEAN TargetSymbol(x, sym) */ X/* */ X/* Examine the parameters of closure x, which is known to have a @Target. */ X/* Return TRUE if the target is preceding, and set sym to the symbol value. */ X/* */ X/*****************************************************************************/ X XBOOLEAN TargetSymbol(x, sym) XOBJECT x, *sym; X{ OBJECT y, link, cr, lpar, rpar; X debug1(DGS, D, "TargetSymbol( %s )", EchoObject(null, x)); X assert( type(x) == CLOSURE, "TargetSymbol: type(x) != CLOSURE!" ); X assert( has_target(actual(x)), "TargetSymbol: x has no target!" ); X X /* search the free variable list of x for @Target */ X cr = nil; X for( link = Down(x); link != x; link = NextDown(link) ) X { Child(y, link); X if( type(y) == PAR && is_target(actual(y)) ) X { assert( Down(y) != y, "TargetSymbol: Down(PAR)!" ); X Child(cr, Down(y)); X break; X } X } X X /* search the children list of actual(x) for a default value of @Target */ X if( cr == nil ) X for( link = Down(actual(x)); link != actual(x); link = NextDown(link) ) X { Child(y, link); X if( is_target(y) ) X { cr = sym_body(y); X break; X } X } X X if( cr != nil ) X { X /* check that cr is indeed a cross-reference object */ X debug1(DGS, DD, "TargetSymbol examining %s", EchoObject(null, cr)); X debug1(DGS, DD, " type(cr) = %s", Image( (int) type(cr)) ); X if( type(cr) != CROSS ) X Error(FATAL, &fpos(cr), "target of %s is not a cross-reference", X SymName(actual(x))); X X /* extract *sym from the left parameter */ X Child(lpar, Down(cr)); X if( type(lpar) != CLOSURE ) X Error(FATAL,&fpos(lpar),"left parameter of %s is not a symbol",KW_CROSS); X *sym = actual(lpar); X X /* extract direction from the right parameter */ X Child(rpar, NextDown(Down(cr))); X if( type(rpar) != WORD || (strcmp(string(rpar), KW_PRECEDING) != 0 && X strcmp(string(rpar), KW_FOLLOWING) != 0) ) X Error(WARN, &fpos(rpar), "replacing %s%s? by %s%s%s", X SymName(actual(lpar)), KW_CROSS, SymName(actual(lpar)), X KW_CROSS, KW_FOLLOWING); X return type(rpar) == WORD && strcmp(string(rpar), KW_PRECEDING) == 0; X } X else X { Error(INTERN, &fpos(x), "TargetSymbol: couldn't find x's @Target"); X return FALSE; X } X} /* end TargetSymbol */ X X X/*@@**************************************************************************/ X/* */ X/* int CheckConstraint(preceder, follower) */ X/* */ X/* Check the ordering relation between components preceder and follower, */ X/* and return its current status: */ X/* */ X/* CLEAR follower definitely follows preceder, and always will; */ X/* PROMOTE follower is not prevented from following preceder; */ X/* CLOSE follower must move down its galley to follow preceder; */ X/* BLOCK follower cannot be guaranteed to follow preceder. */ X/* */ X/*****************************************************************************/ X Xint CheckConstraint(preceder, follower) XOBJECT preceder, follower; X{ OBJECT prec_galley, foll_galley, z; int res; X debug2(DGS, D, "CheckConstraint( %s, %s )", X EchoObject(null, preceder), EchoObject(null, follower)); X Parent(prec_galley, Up(preceder)); X Parent(foll_galley, Up(follower)); X if( prec_galley == foll_galley ) X { res = CLOSE; X for( z = Up(follower); z != foll_galley; z = pred(z, CHILD) ) X if( z == Up(preceder) ) X { res = CLEAR; X break; X } X } X else X { res = PROMOTE; X while( Up(prec_galley) != prec_galley ) X { Parent(z, Up(prec_galley)); /* index of galley */ X Parent(prec_galley, Up(z)); /* enclosing galley */ X if( prec_galley == foll_galley ) X { res = BLOCK; X break; X } X } X } X debug1(DGS, D, "CheckConstraint returning %s", Image(res)); X return res; X} /* end CheckConstraint */ END_OF_FILE if test 28732 -ne `wc -c <'lout/z22.c'`; then echo shar: \"'lout/z22.c'\" unpacked with wrong size! fi # end of 'lout/z22.c' fi echo shar: End of archive 6 \(of 30\). cp /dev/null ark6isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 30 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still must unpack the following archives: echo " " ${MISSING} fi exit 0 exit 0 # Just in case...