This is the display math translation table, one of three reverse translation tables. The capital E in the table means equals equivalent. Before the equals, here are the meaning of any capital letters in the table: A - unused B - blank (space) C - unused D - letters a-j E - equals F - space swallow (for, with, and, the, & a) G - literary parenthesis H - unused I - initial (a.m. or p.m.) J - number in back translation K - a Nemeth symbol of comparison L - a letter M - capital, blank or punctuation N - numbers O - not a letter sign P - punctuation Q - blank or punctuation R - literary brace flag set S - stop the search (search declared unsucessful) T - test a flag U - unused V - unused W - a Nemeth arrow segment X - unused Y - not a letter Z - unused The entries that start with T like TQS mean test Q flag set TUC means test U flag clear. At the end FHC means also clear the H flag, FSS means set the S flag. There are up to 26 different flags. Here is the list: A - subscript or superscript B - translation mode (set for literary, clear for math mode) C - capitalizatin (N=none, H = single caps, D=double caps) D - sign of comparison E - unused F - simple fraction G - complex fraction H - default numeric subscript I - hyper complex fraction J - capital letter K - spread top and bottom further (i.e. summation sign) L - unused M - mixed number N - unused O - binomial flag P - unused Q - move a subscript down further R - index of radical flag S - if "under" is used (i.e. both an "over" and "under" modified expression T - unused U - whether under and over are being used V - chemistry W - integral "from" and "to" X - unused Y - construct a horizontal arrow Z - unused ----------------------------------------------- The output of the math translator is a linear description of the layout that is kind of a junior page description language. A very complex program (source code is DISP.ASM) takes this intermediate text and makes the actual output. I will use the abbreviation MIT (math intermeadiate text) to describe the strange output from the math display translator. The accent mark (`) is a kind of escape character. To form a Greek letter, the MIT sequence is `ga for alpha. The accent means special alphabet, the g alphabet is Greek, the letter is a. Be aware that in the crude system I used on the Apple II, each character fit inside an 8x7 matrix (8 bits high, 7 wide, the high bit is used to "toggle" the whole row half a bit, a useful feature when defining characters. Unfortunately, the printed output cannot take advantage of the toggle bit, so the output from the software always looks better on the screen than on paper. Most of the special alphabets are arbitrary. Here is a list of the "c" alphabet: a - part of summation sign b - part of summation sign c - part of product sign d - part of product sign e - "is to" sign f - bold equals sign g - inverted caret h - tilda i - part of big union sign j - part of big union sign k - part of big intersection sign l - part of big intersection sign m - reverse restriction (topology sign used by Caryn) n - turnstile (topology sign used by Caryn) o - double turnstile (topology sign used by Caryn) If necessary, I can document all of the different characters. My problem is that I only have a print copy (I cannot find the disk copy), so I need to retype this information in. Four alphabets are special operators. They are l - change vertical level, but remember your position (subscript, superscript) z - change vertical level, but consider the new position to be the baseline p - perform a stack operation For the l and z alphabets, the letter m means baseline or no movement. Higher letters go up, lower letters go down. Each element on the stack has 4 bytes: -- the current x position (on screen or paper) -- the current y position (on screen or paper) -- the vertical offset performed by an alphabet l command -- the kind of operation that requested the stack operation. Here are the "letter" codes used by the "p" stack alphabet: pa - change "type" for overbar pb - backup one character, used for overbar pc - notalk (used in verbalize output) pd - resume talking (used in verbalize output) pe - express talk (used in verbalize output) pf - start a fraction pg - fraction midline ph - finish fraction pk - deliberatly crash the software (used for debugging) pl - switch to literary pn - switch to Nemeth code po - pop from stack pq - push for index of radical pt - swap for modified expression (up and down) pu - push for modified expression pv - push for fraction pw - push for radical px - generic push py - change type for overbar pz - save into stack for both above and below mod. expression Lets look at some sample table entries: $_4E`du Here ed dots 4-5-6 dropped d becomes accent du. When the display processor (DISP.ASM) it displays "alphabet d", letter "u" which is a filled square shape. TRS>E`pq`pw FRC >E`pw TRS means test R flag S. The R flag is the index of radical flag. We execute this line if we have an "ar" sign when we previously had an index of radical. If so, we push for an index, push for a radical, leave a space, and clear the radical flag. Without the R flag set, we just push for the radical. ]E`poFUCFSCFKC Here is the generic handler for the termination sign. accent po pops the stack. The actual operation depends on what pushed things on the stack. The modified expression flags are cleared. Here is another example. a start fraction pushes onto the stack twice, and then moves up using the "z" operator (resetting the baseline). The slash line in a fraction swaps the current position with the top of the stack, and then moves down. The end a fraction does a special "end of fraction". This pops the stack twice. The popped data contains the starting position of the fraction line, the end of the dominator is available because of the "swap" operation. The end of the denominator is available because that is the current position at the time of the pops. Thus the fraction line is correctly drawn by DISP, and the new current position is correctly calculated. !E`px`px`zt`ma`po`zf`mc`po`mbFACFQSFKS This puts in an integral sign. Made up of three letters in the "m" alphabet. Read it in triplets: "push" "push" "move up" "print top" "pop" "move down" "print bottom" "pop" "print middle" clear the subscript/superscript flag, set the flag to spread subscripts and superscripts further, spread top and bottom further. Enough random examples. Here is the real table: ------------------------------------------------------------------ E catagory table for control characs & space TQSTACEFQC THSE`lmFHC WTYSEFYC TDSEFDC TUCTKSEFKC TQSTACEFQC catagory table for lower case letters THSE`lmFHC no table for uppercase LTACTHCE`liFHSFCN table for numbers L"NEFHS for punctuation THS"E`lmFHC THSE`lmFHC TCDEFCN TASE`lmFACFQC for space as a character !E`px`px`zt`ma`po`zf`mc`po`mbFACFQSFKS for ! (integral sign) "k@"k]E`nl for dot 5 B"k".1BE<> "k".k".1E<=> B"kBE< "k:E`na "k.kE`nc B"1BE`ce ".k .k.1E`pu`zs=`po> .k"kE`pu`zs=`po< B..1BE> ."kE< .,,sE`px`zq`ca`po`li`cb`lm FKS .,,pE`px`zq`cc`po`li`cd`lm FKS .LE`g .,LE`gFCH .;LE`s .;,LE`sFCH .@sE`xa .@fE`xb .&E`xcZa .,&E`xCZa .!E`xdZa .:E`ghZa .,:E`gHZa .?E`gjZa .,?E`gJZa .1@.1]E`nk .1""kE>< .1".k""kE>=< .1:E`nb .1.kE`nd .$E`mt .+:E`pu`zf`mv`po`nu .+.kE`pu`zf=`po`nu .+E`px`px`zq`cj`po`zi`ci`po FKSFDS .%E`px`px`zq`cl`po`zi`ck`po FKSFDS .XE ..(E< ..)E> ./E`fr .-E`fR TYS.*WE`mHFYC TYS.*E`mG .*E`fq .#E# J."E.Z' J.BE.Z0 .(E{ .)E} .,(E`px`px`zt`ap`po`zf`aq`po`an .,)E`px`px`zt`ar`po`zf`as`po`aoFQS /$lE`ml /$pE`mk /.kE`nh /@eE`fG TFC/E/ /E`pg`zf TYS33WE`mAFYC TYS33E`mA TYS3E`mA B:KE`pu`zp`mv`po :.1E`pu`zp`mv`po> :"kE`pu`zp`mv`po< B:E`mA TDS:E`pu`pb`ze`mv`poFDC :E`pu`pb`zp`mv`po B;2BE`fp TQS;;;E`l`FAS TQS;;^E`ldFAS TQS;^;E`lhFAS TQS;^^E`llFAS TQS;;E`lbFAS TQS;^E`ljFAS ;;;E`lfFAS ;;^E`lhFAS ;^;E`ljFAS ;^^E`llFAS ;;E`lgFAS ;^E`lkFAS ;E`pq`pw FRC >E`pw TFC?E`pf`zsFFS @notalkE`pc @talkE`pd @expressE`pe B@lBE`plFBS @lE`ff B@mBE`pnFBC B@-BE`pnFBC @dE`mu @b(E`px`px`zt`ac`po`zf`ad`po`aa`pu`ztFOS @eE`mg @<,E`fj @:"@:E`ch`ch @:@:.kE`px`zq`my`po= @:@:E`myFDS @:E`chFDS @;LE`s @;,LE`sFCH @=E`nj @&E`ni @rE`mh @(E[ @)E] @,(E`px`px`zt`ai`po`zf`aj`po`ag @,)E`px`px`zt`ak`po`zf`al`po`ahFQS @0E% @aE@ @sE$ @^(E`ai @^)E`ak @;(E`aj @;)E`al @_0E`mo @ E $$p-1 Z TYS[WE`meFYC TYS[E`me [