10 Mar 1978

1 Rename a few external variables to make their first six letters unique. L 2 Initialize escape char to −1, not 0 [it will be set to the first character input]. §240 D 3 Fix bug: The test ‘id < ´ 200 ’ was supposed to distinguish one-letter identifiers

from longer (packed) ones, but negative values of id also pass this test. §356 L 4 Fix bug: I wrote ‘while α ∧ (β ∨ γ)’ when I meant ‘while (α ∧ β) ∨ γ’. §259 B 5 Initialize the input routines in INITEX [at this time a short, separate program

not under user control], in case errors occur. §1337 R 6 Don’t initialize mem in INITEX, it wastes time. §164 E 7 Change ‘new line’ [which denotes a lexical scanning state] to ‘next line’ [which

denotes carriage return and line feed ] in print commands. B 8 Include additional test ‘mem [p] ≠ 0 ∧’ in check mem . §168 F 9 Fix inconsistency between the eq level conventions of macro def and eq define. §277 M • About six hours of debugging time today.

• INITEX appears to work, and the test routine got through start input , chcode [the TEX78 command for assigning a cat code], get next , and back input the first time.

11 Mar 1978

10 Insert space before ‘(’ on terminal when opening a new file. §537 I 11 Put ‘p ← link (p)’ into the loop of show token list , so that it doesn’t loop

forever. §292 F 12 Shift the last item found by scan toks into the info field. [With SAIL all packing

of fields was done by arithmetic operations, not by the compiler.] §474 L

12 ↦ 13 Fix the previous bugfix: I shifted by the wrong amount. §474 B

14 Add a feature that prints a warning when the end of a file page occurs within

a macro definition or call. [System dependent.] §336 I • Unintended bugs in my test routine [a format intended eventually to typeset

The Art of Computer Programming] helped check out the error recovery mechanisms. For example, I had ‘\lft{#}’ instead of ‘\lft{##}’ inside a macro, and three cases of improper { and } nesting.

15 Add the forgotten case ‘set font :’ to eq destroy . §275 F 16 Change \require to \input. §376 C 17 Add code for the case cur cmd = 0 [later known as the case ‘ t ≥ cs token flag ’]

when scanning a tokenlist. §357 F • That’s the first “big” error I’ve spotted so far. 18 Introduce a ‘d’ option in the error routine, to facilitate debugging. §84 I 19 Assign a floating-point constant ignore depth to prev depth , instead of assigning

the integer constant flag [since prev depth is type real in TEX78]. §215 L 20 Improve the readability and spacing of show node list output. §182, 187 I 21 Set the variable v before using the case construction in show node list , because

there’s one case where v didn’t receive a value [as part of the field unpacking]. §182 F • About seven hours today.

12 Mar 1978

• One hour to enter yesterday’s corrections and recompile.

• At this point TEX correctly located further unintended syntax errors in acphdr [the test file].

22 Insert debug help into succumb, giving a chance to look at memory before the

system dies. §93 I 23 Use eq destroy wherever necessary in unsave. §283 D 24 Change ‘t ← (t − 1) mod 8’ to ‘t ← (t − 1) land 7’ in id name, since SAIL

has −1 mod 8 = −1. [At this time, id name is a routine that unpacks control sequence names, according to a scheme that will become obsolete after change #422.] L

25 Remove the space that appears at end of paragraph. (I hadn’t anticipated

that.) §816 S 26 Throw away unwanted line feed after getting a carriage return in response to

in chr w [a system routine for input from the terminal]. §83 L 27 Delete spurious call to flush list in end token list . §324 B • Why did I make such a silly mistake? 28 Fix bug in get x token : I forgot to say ‘macro call ’ (which is the main point of

that routine)! §380 F • While tracking that bug down, I found out incidentally that kerning is okay.

• Also TEX correctly caught an error 0p for 0pt. 29 Fix bug in scan spec (while instead of repeat). §404 L 30 Make the table entries for \hfill and \hskip consistent with the program

conventions. §1058 M 31 Disable unforeseen coercion: When scan spec put hsize on save stack , the value

changed from real to integer . §645 L 32 Use ‘*’ instead of ‘-1.0’ for running dimensions of rules in show node list . §176 I 33 Clear mem [head ] to null in push nest [in TEX82, this will be done by get avail ]. §216 D • A vrule link got clobbered because I forgot to do this. 34 Translate ASCII control codes to special form when displaying them. §48, 68 I • Ligatures work, but show node list showed them funny. 35 Remember to clear parameters off save stack in package routine. §1086 F • About eight hours today.

13 Mar 1978

36 Introduce a new variable hang first [later the sign of hang after ]. §849 D 36 ↦ 37 Simplify the new code, realizing that if hang indent = 0 then hang first is

irrelevant. §848 E • Time sharing is very slow today, so I’m mostly reading technical reports while

waiting three hours for compiler, editor, and loading routine.

• I’m not counting this as debugging time!

• (Came back in the evening.) 38 Spruce up the comments in the line break routine, which appears to be almost

working. §813 P 39 Rethink the setting of best line; it’s 1 too high in many cases. [The final line

of a paragraph was handled in a treacherous way.] §874 D 40 Compute proper initialization for prev depth when beginning an \hbox with

a paragraph inside. [This refers to a special ‘paragraph box’ construction, used when an hbox of specified size becomes overfull; TEX78 doesn’t have the concept of internal vertical mode.] §1083 D

41 Also initialize tail in that case. §1083 D 42 Also put the result of line-breaking into the correct list. M 43 Fix a typo in the free node routine (‘link ’ not ‘llink ’); by strange chance it had

been harmless until today. §130 T 44 Fix bug: post line break forgot to set adjust tail . §889 F 45 Update act width properly when looking for end of word while line breaking. §866 D 46 Repair the “tricky” part of get node: I used the info field when I meant to say

llink . §127 B

 • Now the \corners macro of acphdr works! [See \setcornerrules in The

TEXbook, page 417.] 47 Reset contrib tail properly in build page. §995 D 48 Fix typo (- for +) in computation of page total . §1004 T 49 Change the page-breaking logic: TEX reached fire up with best page break =

null in one case, since the badness was too bad. §1005 S 50 Perform the operation delete token ref (top mark ) only when top mark ≠ 0. §1012 M 51 Make scan toks omit the initial { of an \output routine. §473 F 52 Insert a comma to make memory usage statistics look better. §639 I • About seven good hours of debugging today.

• Tomorrow will be first-output day (I hope).

14 Mar 1978

• (Came in evening after sleeping most of day, to get computer at better time.)

• (Some day we will have personal computers and will live more normally.)

• 8:30pm, began to enter corrections to yesterday’s problems. 53 Issue an error message for non-character in filename or in font name. §771 I 54 Display ‘...’ for omitted stuff in show context routine. §643 I 55 Watch out for the SAIL syntax ‘α + β lsh γ’; it doesn’t shift α + β left (only β). §464 L • That error was very hard to track down; it created a spurious link field and

sent hash [0] = \beta to the scanner!

• I could have found this bug an hour sooner if I had looked at the correct stack entries for name and token type.

56 Show the correct page number when tracing pages before output is shipped. §638 D 57 Remember to nullify a box after using it. §1079 F 58 Issue an error message if \box255 isn’t consumed by the output routine. §1015 I • I’m having trouble with the BAIL debugger; it makes an illegal memory refer-

ence and dies, when single-stepping past the entry to recursive procedures hlist out and vlist out . So I have to reload and be careful to go thru these procedures at high speed.

59 Fix bug in comment (memory parameter description said ≥ not ≤). §11 P 60 Fix typo in definition of rule output (said x, y not x0 , y0 ). [This part of the

code went away when DVI files were introduced.] B 61 Correct the embarrassing bug in shellsort, where I said ‘≤ str [k]’ not ‘≤ t’.

[The first TEX had to sort all output by vertical position on page.] B 62 Make start input set up job name in the form needed by shipout ; it uses obso-

lete conventions. §532, 537 M 63 Insert ( and ) into the SAIL macro definition of new string . [This macro was

for pre-DVI output.] L 64 Unscramble the parameters of out rule: The declaration was (x0 , y0 , x1 , y1 )

while the call was (x0 , x1 , y0 , y1 ). M • 4:30am, TEX’s first page is successfully output!

 • (It was ‘\titlepage\setcpage1\corners\eject\end’.)

15 Mar 1978

• 10:30pm. Today I’m instrumenting the line-breaking routine and putting it through a bunch of tests.

• (The inserted instrumentation had bugs that won’t be mentioned here.) 65 Don’t abort the job when eq destroy redefines a TEX control sequence. §275 C • The first word of a paragraph won’t be hyphenated … so be it! 66 Fix the typo in line break that spoils the test for ‘letters in the same font’. §896 T • The effect of that typo was to suppress all hyphenation attempts.

25 ↦ 67 Replace the space at paragraph end by fillglue, not by zero. §816 B 68 Pack the hyphen character properly into its node. §582 L 69 Fix a typo (‘ ’ for ‘+’) in the computation of break width . §838 T 70 Change the \end maneuver; the present code doesn’t end the job, since I forgot

that back input uses cur tok . §1054 M 71 Add a parameter to try break , since the width is different at a discretionary hy-

phen. [This problem will be solved differently in TEX82, when discretionaries become much more general.] §840 A

72 Bypass kern nodes in pre-hyphenation. §896 F 73 Supply code for the forgotten case ‘< "a"’ in pre-hyphenation. [This case was

later generalized to a test of lc code.] §897 F 74 Change mem [q] to prev break (q) in the reverse-linking loop. §878 B • (Such blunders. Am I getting feeble-minded?) 75 Introduce special logic for eject penalty ; I was wrong to think that forced ejec-

tion was exactly like an infinitely negative penalty. §851 A 76 Use (1 + b)^{2} − p^{2} when computing demerits with p < 0. §859 A • 6:30am. The line-breaking algorithm appears to be working fine and efficiently.

On small measures (about 20 characters per line), it gives overfull boxes instead of spaced out ones. Surprising but satisfactory.

16 Mar 1978

• 9pm. The plan for tonight is to test page breaking and more paragraphing. 77 Insert ‘\topskip’ glue at beginning of page. §1001 G 78 Add ‘\pausing’ feature. §363 I 79 Fix discrepancy: In make accent I called vpackage with a pointer to the first

list item, but vpackage itself assumes that the parameter is a pointer to that pointer. [The vpackage of TEX82 will be different.] §668 M

• I checked for other lapses like that. Result: 14 calls OK, 12 NG. 80 Create a new temporary list head location, hold head , since there’s a case

where vpackage is improperly called with parameter temp head . [At this time vpackage uses temp head to make a list of all insertions found.] §1014 M

• 11:30pm. The machine is tied up again. 81 Write code to handle charnodes in vlists; I forgot that I’d decided to allow

them. [Later I prohibited them again!] §669 F 82 Combine the page lists before pruning off glue in fire up; otherwise the pruning

doesn’t go far enough. §1017 F

25 ↦ 83 Fix typo where line-breaking starts: ‘fill glue’ should be ‘new glue(fill glue)’. §816 B

84 Add /q to xspool command (cosmetic change). [This changes a system command that causes TEX output to be printed on the Xerox Graphics Printer (XGP), the progenitor of future laser printers; the /q option says that the queue of printing requests should be displayed on the user’s terminal.] §642 I

85 Don’t write a form feed after the last page of output. §642 E • To fix this, I reorganized ship out , and it became simpler. 86 Correct a typo (‘ ’ for ‘+’) in the vlist node case within hlist out . [The output

routines were quite different at this time, because output went directly to the XGP.] §622 T

87 Change the message ‘completed page’ to ‘Completed for page’. §638 I 48 ↦ 88 Fix yet another typo in the computation of page total : My original code said

stretch (p) instead of stretch (q) (terrible). §1004 B 89 Document the dirty trick about bot mark ’s reference count. [That trick is,

fortunately, no longer useful.] §1016 P 90 Rethink the algorithm for contributing an insertion: The original code tests

for a page break after incrementing the totals but before the contrib list is updated. [TEX78 handles insertions in a hardwired manner that will be greatly generalized in TEX82.] A 91 Fix get node again: After the variable memory overflows, control falls through

to found instead of going to the overflow call. §125 F • I spent several hours tracking down that data structure bug! 92 Change new line to next line in yet another print command (see #7). B

75 ↦ 93 Amend the line-breaking algorithm: \break in paragraph doesn’t work with

really bad breaks. §851 A • A problem to be diagnosed tomorrow: Each time I run the test program, the

amount of memory in use grows by 13 cells not returned.

• Seven hours tonight.

17 Mar 1978

94 Introduce dead cycles to keep \end active until ship out occurs. §1054 G 95 Don’t call line break with an empty list. §1096 E 96 Take proper account of the (infinite) fillglue when computing the width of a

paragraph line preceding a display. §1146 S 97 Add a new parameter to hpack so that line break won’t be called at the wrong

time. [This is for the soon-to-be-obsolete feature described in #40.] M 98 Give a warning message if there’s an \hfill in the middle of a paragraph;

fillglue upsets the line breaker, because floating-point calculations don’t have sufficient accuracy. §868 L

• I spent an hour looking for another bug in TEX, but the following one was in : The xgp height data in fonts had been supplied wrong.

• It took two hours to recompile 32 fonts with proto- . 99 Make show node list and show token list more robust in the presence of soft-

ware bugs. §182 R

97 ↦ 100 Do not remove nodes with eject penalty , when the new parameter to hpack is

true. D

97 ↦ 101 Put a fast exit into hpack ; e.g., at glue nodes, test ‘if paragraphing ∧ ⟨current

width is large⟩’. E • 2am. I have to go to bed “early” tonight.

18 Mar 1978

• 3:30pm. (Saturday) 102 Add a parameter to check mem (to suppress display unless needed). §167 I 103 Introduce a user-settable parameter \maxdepth, and pass it as a parameter to

vpackage. §668 G • I realized the need for \maxdepth while fixing insertions (see #90).

104 Introduce a user-settable parameter for line break : The constant 2.0 in my

original algorithm becomes \jpar [later \tolerance], to be set like \tracing. §828 G 105 Reclaim the eject penalty nodes removed during line-breaking. §879 D

• (Those were the 13 extra nodes reported on Thursday.)

• The init align procedure worked right the first time!

• Also init row , init col . But then … 106 Rethink the command codes: endv in a token list has too high a code for the

assumptions of get next . §207 S 107 Add a prev cmd variable for processing delimited macro parameters; the origi-

nal algorithm loses track of braces. [The rules will change slightly in TEX82, and rbrace ptr will take on a similar function.] §400 A

108 Make the get next routine intercept & and \cr tokens. §342 S

• I’d thought I could just put & and \cr into big switch [i.e., in the stomach of

TEX, not the eyes]; that was a great big mistake. 109 Make more error checks on endv ; e.g., it must not occur in a macro definition

or call. §780 R 108 ↦ 110 No, rethink alignments again; the new program still fails! §768 S

• For the first time I can glimpse the hairiness of alignment in general (e.g., ‘\halign{\u#\v&...’ when \u and \v are defined to include &’s and possible alignments themselves).

• I think there’s a “simple” solution, by considering only whether an alignment is currently active [in §342].

• 11:30pm. Went to bed.

19 Mar 1978

• Woke up with “better” idea on how to handle & and \cr.

• (Namely, to consider a special kind of \def whose parameters don’t interrupt on &’s and \cr’s.)

• But replaced this by a much better idea (to introduce align state).

• 11pm. Began to use computer. Performed major surgery (inserting align state

and updating the associated routines and documentation). 111 Pop the alignment stacks in fin align . §800 D

110 ↦ 112 Fix a (newly inserted) typo in show context . §314 T 110 ↦ 113 Set align state false when a live & or \cr is found. [Originally align state was

of type boolean .] §789 D 114 Insert \cr when ‘}’ occurs prematurely in an alignment. §1132 I 115 Remember to record glue stretch when packaging an unset node. §796 M

• I had a mistake in acphdr definition of \quoteformat; also extra spaces.

• My first test programs, used before today, were contrived to test macro expansion, line-breaking, and page layout.

• Next I’m using a test program based on Volume 2. 116 Make carriage-return, space, and tab equivalent for macro matching. §348 C 117 Omit the reference count node when displaying a mark. §176 F 118 Correct a silly slip: I wrote ‘type displacement ’ instead of ‘value displacement ’

when packing data in a penalty node. §158 B 119 Don’t go to build page after seeing \noindent; TEX isn’t ready for that. [In

the original program, this was an instance of a bad goto.] §1091 M • I had undesired spaces coming thru the scanner in my macro definitions of

\tenpoint [see The TEXbook, page 414].

• 4am. TEX now knows enough to typeset page 1 of Volume 2!

• Also it did its first “math formula” (namely ‘$X$’) without crucial error.

• (Except that the italic correction was missing for some reason.) 120 Remember to decrement cur level in fin align . [The routines will eventually

become more general and use unsave here.] §800 D 121 Remember to increment cur level in error corrections by handle right brace.

[A better procedure will be adopted later.] §1069 D 122 Fix a typo: (‘{’ instead of ‘}’) in error message for mmode + math shift . §1065 T

99 ↦ 123 Make show noad list more robust and more like the new show node list . [The

routines will be combined in TEX82.] §690 R 124 Fix a typo in char box : should say font info real . [In TEX78 a single array is

used for both real and integer ; in TEX82 things will be scaled .] §554 L 125 Fix typos in the definitions of default rule thickness and big op spacing ; they

shouldn’t start at mathex (7). §701 B 126 Reverse the before and after conventions in math nodes. §1196 B

• I had them backwards; this turned hyphenation on just before math, and off just after it!

• Seven and a half hours debugging today. Got through the test program a little more. But TEX blew up on ‘$Y+1$’; tomorrow I hope to find out why.

20 Mar 1978

• 8pm. I decided to work next on a super-hairy formula. 127 Change ‘\ascii’ to ‘\cc’ (character code). [This name will change again later,

to ‘\char’.] §265 C 128 Don’t bother to store a penalty node at the beginning of $$ when the paragraph-

so-far fits on a single line, since such a penalty has already been stored. [These conventions will change later, and the \predisplaypenalty will always be stored.] §1203 E

129 Avoid reference to tail in build page, if nest ptr > 0. §995 S 130 Correct a silly slip in math comp (the exact opposite of what I did in #118). §1158 B 131 Rectify my mental lapse in make fraction ; I said nucleus instead of thickness . §743 B 132 Mask off the math class when scanning delimiters. §1160 F 133 Allow an optional space after \def{...}. [This decision will be retracted later.] §473 C

• My test example is so complicated it causes the semantic stacks to overflow! 134 Don’t test for no pages output by looking at the channel status. §642 L 135 Fix typo in definition of \mathop (open noad not op noad ). §1156 T 136 Rewrite fin mlist , because ‘\left(...\above...\right)’ doesn’t parse cor-

rectly; the \left goes into the numerator, the \right into the denominator. §1184 A 137 Correct the use of depth threshold in print subsidiary data : Simple fields get

shown while others look empty. §692 B

78 ↦ 138 Return the carriage before showing the first line of a new file when pausing. §538 I

139 Fix bug: The call show noad list (mem [..]) should be show noad list (..), in

the incompleat noad case of show activities . §219 M • 3am. The whole messy formula has been parsed correctly into a tree.

• The easy part is done, now comes the harder part. 140 Don’t shift single characters down in make op. §749 F 141 Make clean box return a box (as its name implies), not an hlist. §720 D

• Font info still isn’t quite right, it has the wrong value of quad . 142 Retain the italic correction when doing rebox ; can make glue set ≠ 0 a flag for

this. [A better solution will be adopted later.] §715 A 143 Fix the bug that makes rebox bomb out: value(p) should be value(mem [p]). §715 B

• 6am; ten hours today. TEX didn’t do $\pi\over2$ correctly, but was close.

• I found that the rebox problem (#142) went away when I fixed the clean box problem (#141); but I will leave the extra stuff about glue set ≠ 0 in the program anyway, just for weird cases.

144 Omit extra levels of boxing when possible in clean box . §721 E

• (To do this, I need to face the rebox problem anyway.)

21 Mar 1978

• 10pm. The computer is rather heavily loaded tonight. 145 Don’t forget thickness when making a square-root sign (see #131). [The rule

thickness will later be derived from the character height.] §737 F 146 Define p local to the make fraction routine. §743 L

• Unwittingly using the global p was a disaster. 147 Don’t show the amount of glue set when it’s zero. §186 I

142 ↦ 148 Make glue set nonzero in the result of var delimiter . §706 D 149 Fix bug: The math glue function didn’t return any result. §716 F 150 Fix typo in char box (c not w); this caused a subscripted P to come out the

same width as an unsubscripted P. [Later changes in the rules will move this computation to §755.] §709 T

144 ↦ 151 Revise clean box to do operations that are needed often because of the rebox

change. §720 P 152 Use the new clean box to avoid a bug in \sqrt{\raise...}. §737 D 153 Change the definition of \not so that it’s a relation (which will butt against

the following relation). [All math symbols and Greek letters are defined in INITEX at this time, not in a changeable format definition.] Q

154 Give error message ‘Large delimiter must be in mathex font’, instead of

calling confusion , since the error can occur. [This particular error is impossible in TEX82.] §706 I

155 Change the use of p in var delimiter ; it isn’t always set when I say goto found . §706 F

• Another font problem now surfaced: The mathex meta-font didn’t compute

TEX info in a machine-independent way. (It took two hours to correct this.) 156 Don’t forget to set type(b) in all relevant cases of var delimiter . §708 D 157 Use the correct sign convention for shift amount in hpackage. §653 B 158 Always kern by delta when there’s no superscript. §755 F 159 Declare space table to be [0 . . 6, 0 . . 6] not [0 . . 7, 0 . . 7]; otherwise its entries are

preloaded into the wrong positions. [The space table in TEX78 is 7 × 7; it will become 8 × 8 in TEX82, represented as a string called math spacing .] §764 M

160 Use a negative value, not zero, to represent a null delimiter. [Actually zero will

come back again later.] §685 C

127 ↦ 161 Change \cc to \char. §265 C

162 Don’t use tricky subtraction on packed data when changing q to an ord noad

in mlist to hlist ; subtraction isn’t always safe. §729 L 163 Fix two typos in the space table (* for 0). §764 B 164 Initialize cur size everywhere (I forgot it in two places). §703 F 165 Reset op noad before resetting bin noad . §728 A 166 Treat display style + cramped the same as display style inside make op. §749 F 167 Shift the character correctly in the non-\displaystyle case of make op. §749 B

• Still another font problem: The italic corrections are wrong because the corresponding array was declared real in proto- (and italic corrections were used in nonstandard way in mathex).

168 Use depth instead of height in var delimiter . [Later, both were used.] §714 B 169 Skew the accents according to the font slant . [Soon retracted.] §741 Q

• At this point I think nearly all the math routines have been exercised.

• Tomorrow they should work!

• Eight hours debugging today.

22 Mar 1978

• (Wednesday, but actually Thursday: I began at midnight because I was proofreading a paper.)

• I checked out the font access tables, slowly (i.e., all the \mathcode and special-

character name entries were catalogued).

169 ↦ 170 Do not consider slants after all in the math accent routine, since slanted math

letters are put differently into fonts. §741 Q 171 Don’t use q for two different things simultaneously in make math accent . §738 B 172 Fix bug in compact list (I forgot to advance the loop variable). [This procedure

became unnecessary in TEX82.] F 173 Avoid conflict between var delimiter and mlist to hlist , which want to use

temp head simultaneously. §713 M 174 Fix bad typo in overbar routine (b for p). §705 T

• Finally TEX got to after math after dealing with that hairy formula … 175 Fix another bad typo: p for b this time. §1199 T 176 Insert more parentheses (twice) because of ‘lsh’ precedence in SAIL. §1199 L

36 ↦ 177 Use the new hanging-indentation conventions when formatting displayed equa-

tions. §1199 M 178 Recompute penalties so that break is allowed after punct noad s. §761 Q 179 Center the large delimiters vertically. §749 F 180 Round all rule sizes (up) before drawing them. §589 Q 181 Provide more space over x in \sqrt{x}, and more space atop vincula. §705, 737 Q 182 Make large delimiters large enough to cover formula height (important for sub-

scripts, superscripts). §762 Q 183 Insert /ntn=33 on XGP prompt message so that complex math won’t blow the

device driver. [See #84.] I

161 ↦ 184 Update the comment about the meaning of \char, since it can be used in math

mode. §208 P • Six hours today.

23 Mar 1978

• 11pm, Maundy Thursday.

104 ↦ 185 Make \tracing and \jpar follow block structure. §283 C

• It took me two hours to enter yesterday’s corrections, because the changes were

so numerous. 186 Fix bad call on begin token list when marks are to be scanned. §396 M

• Now the formula looks like it should, modulo problems in fonts. 187 Prevent an exponent from going below baseline + xheight/4. §758 Q 188 Change quad to math quad when finishing a display (several places). §1199 B 189 Don’t use append to vlist when putting an \eqno box on a separate line, because

the page shouldn’t break at glue there. [Later, the append will be used but preceded by an infinite penalty.] §1205 A

190 Increase the input stack size; TEX may need to back up a lot. §11 S 191 Don’t assume that p always points to a glue node when a page is broken. §1017 A 192 Use epsilon in scan spec (I had used a different small constant). [This was a

kludge to avoid the extra parameter later called exactly or additional .] §645 A 193 Introduce a new procedure scan positive length , to prevent negative or zero

lengths in scan rule spec. [This restrictive rule will be “overruled” later.] §463 R 194 Fix ridiculous bug in the leaders routine of vlist out : I had the initialization

inside the loop! §635 B 195 Eliminate confusion between the two temp variables named h; one is real and

the other is integer . §629 L 196 Include forgotten case (leader node) in hlist out . [Type leader node will be

absorbed into glue node in TEX82.] §622 F 197 Don’t forget to compute x0 in variable horizontal rules. §624 F

• Seven and a half hours today.

• TEX seems to be ready to tackle my test file based on Volume 2. 198 Calculate y00 in horizontal rules as an integer number of pixels from the base-

line, so that the baseline doesn’t jump. §589 S

25 Mar 1978

• 2am Saturday. (Might as well drop Friday.)

185 ↦ 199 Make def code consistent with the new \tracing conventions. [Many tracing

options are packed into a single parameter called \tracing.] §1233 D

185 ↦ 200 Don’t allow users to change nonexistent things like \catcode1000. §1232 R 110 ↦ 201 Reset align state at beginning of init align . §774 F

202 Don’t forget scan left brace after \noalign. §785 F 110 ↦ 203 Set cur cs ← 0 in get next , after \cr causes a switch to the ⟨v_{j}⟩ template. §342 F

• Ouch, that was a big bad bug, which took me three hours to find (since I thought TEX’s low-level scanning mechanism was working).

• Note to myself: I knew it would be cleaner to define get next so that it sets cur cs to zero every time it begins [i.e., in §341, where this change will in fact be made in TEX82]. But I had avoided this on grounds of efficiency in the inner loop. Well, now I have earned this tiny bit of efficiency.

204 Prohibit the first word of an unavailable node from becoming negative. [The storage allocator of TEX78 uses a negative value to signify a node that is available, just as ‘link = max halfword ’ will signal availability in TEX82.] §124 D

• That was another bad one, it’s not my night.

• At least I’m developing more subtle diagnostic techniques. 205 Remember to un-negate the top save stack entry when handle right brace fin-

ishes an insert group. [This routine was completely revised in TEX82.] §1100 M

185 ↦ 206 Initialize \jpar [i.e., \tolerance]. §240 F 207 Correct the display of insertion nodes by show node list . §188 B 208 Prevent show token list from generating really long strings when in a loop. §292 R 209 Increase the reference count of bot mark when vpackage finds it. [This was

later the job of fire up.] §1016 D 210 Remember that the tokenlist for a mark ends with a }. §1101 M 211 Don’t let vpackage lose the top insert. (It fails when the very first item is a

\topinsert.)  §1014 D

212 And when that stupid code is corrected, make it handle insertions first-in-first-

out. §1018 A • Seven hours today.

26 Mar 1978

• Easter Sunday, will work till sunrise. 213 Add an ‘i’ feature to the error recovery routine. §87 I 214 Include a prompt. §87 I 215 Ignore space after \noalign{...}. §1133 C

• Otherwise, things are going well tonight; I’m finding more bugs in my test program than in TEX.

• The ‘i’ feature is proving to be very helpful.

• I increased the size of mem (now lo mem max = 3500, mem max = 10000).

• In fact I just needed to increase it again (now lo mem max = 4500, mem max =

11000). 216 Make INITEX output mem top for consistency checking. §1307 R 217 Calculate the size of delimiters by considering the enclosed formula’s distance

from the axis, not from the baseline. §762 A • I’m having trouble with a SAIL compiler bug; I must rearrange the program,

more or less at random, until it compiles correctly. I hope the bug isn’t more severe than it appears.

210 ↦ 218 Don’t put a new group on save stack if a null mark is expanded. [TEX82 will

remove the ‘}’ from the mark text.] §386 D • I had to redo the typewriter-style font since its width tables were wrong.

• And I increased low-memory size again to 5500, then 6500.

• Finally the entire test program was TEXed. Happy Easter! Six hours today.

27 Mar 1978

• Beginning at 2:30am. 219 Move \vcenter processing to the first pass of mlist to hlist ; otherwise the

height, depth, subscripts, etc., are way off. §733 A 220 Omit space after closing $$. §1200 C

• Spacing is wrong in the formula Y_{1} + ⋯ + Y_{k}; I have to rethink the use of three dots.

221 Make conditional thin space available to user as \ . [Later will retract this.] §226 G

222 Introduce \dispaskip and \dispbskip [later called \abovedisplayshortskip
and \belowdisplayshortskip].  §226 Q

• Reminder: I need to test line-breaking with embedded math formulas. 223 Make sure that interaction ≠ error stop mode in the ‘Whoa’ error [fatal error ]. §93 I 224 Fix a big mistake in the style node routine (which points to a glue spec, not

to glue itself); somehow this didn’t cause trouble yesterday. [In TEX78, style nodes double as placeholders for math glue like thin spaces.] §732 B

225 Make \fntfam obey group structure. [TEX78’s \fntfam operation is a combi-

nation of TEX82’s \textfont, \scriptfont, and \scriptscriptfont.]  §1234 C

• At this point the test routine for Volume 2 works perfectly.

• But I will change the page width in order to check harder cases.

178 ↦ 226 Disable automatic line breaks after punctuation in math (e.g., consider f(x, y)). §761 Q

227 Represent italic corrections as boxes, not glue, so that they won’t be broken.

[The \kern command doesn’t exist yet.] §1113 S • Eight hours today.

228 Fix a bug that just clobbered the memory: Call free avail , not free node, in the ins node case of vpackage. [This logic will change completely in TEX82.] §1019 B

29 Mar 1978

• (Wednesday) Again beginning at 2:30am. 229 Put still more space above and below fraction lines in displayed formulas. §746 Q

189 ↦ 230 Install an infinite penalty feature, which positively suppresses breaks; use it in

displayed formulas whose \eqno doesn’t fit. §1205 G 231 Call build page after finishing a display; and don’t go to the \noindent routine

because of the next remark. §1200 F 232 Put \parskip glue just before a paragraph, not just after (since it interferes

with a penalty after). §1091 S • Although the test program gives correct output, it generates 46 locations of

variable-size memory and 280 of one-word memory that are not freed. 233 Recycle the ulists and vlists in fin align . §801 F

25 ↦ 234 Fix bug when deleting space at end of paragraph: delete glue ref (cur node)

not delete glue ref (value(cur node)). §816 M • There’s also a more mysterious type of uncollected garbage, a fraction noad

corresponding to $p\choose$, an incompleat noad not completed.

• Couldn’t find that one, so I recompiled with #233 and #234 corrected.

• Now it gains just 10 locations of variable-size memory and 7 of the other kind. 235 Extend search mem to search eqtb also. §255 I

143 ↦ 236 Fix bug in rebox when list ptr (b) = 0. §715 D

• The seven one-word nodes were generated by this bug; rebox put them onto a

linked list starting with mem [0], growing at the far end! 237 Remember to complete each incompleat noad . §1184 D

• This solved the other mystery. I had never noticed that my test output was actually wrong: $p\choose k$ came out as ‘k’.

• After these corrections, the test routine worked … I feel that TEX is now pretty well debugged (except perhaps for error recovery)—it’s time to celebrate!

1 Apr 1978

238 Don’t quit after file lookup fails. §530 I

2 Apr 1978

239 Add TEX font area , so that it’s easier to change the default library area associated with a device. §514 P

3 Apr 1978

240 Insert parentheses again, to cope with the precedence of lsh when packing

data. (See #55 and #176.) §1114 L • I had never tried hmode + discretionary before!

241 Remember that back error requires cur tok to be set. (Problem can arise during error recovery on parameter #n with n out of range.) §476 M

4 Apr 1978

242 Add a deletion feature to the error routine. §88 I

5 Apr 1978

243 Reset space factor after \/ [this was later rescinded] and after math in text. §1196 Q

10 Apr 1978

104 ↦ 244 Replace \jpar and \tracing by a new primitive \chpar for parameters. It allows a user to change those quantities as well as the penalties for hyphens, relations, binary ops, widows. §209 G

14 May 1978

• Beginning to typeset a real book (Volume 2, second edition), not just a test. 245 Make math in text end with spacing as if it were followed by punctuation. [This

rule will soon be rescinded.] §760 Q 246 Insert \times into the hash table; I left it out by mistake. [It will eventually

move into plain.tex.] F 247 Change the names of Scandinavian accents from \o, \oslash, \Oslash to \a,

\o, \O. [This will also move to plain.] C

17 May 1978

248 Fix a silly bug that hasn’t been tweaked until today: ‘\halign to size’ [obsolete in TEX82] used vsize instead of hsize. §645 B

19 May 1978

249 Add a \topbaseline feature [later called \topskip]. §1001 G 245 ↦ 250 Subtract the math spacing change of May 14. §760 Q

251 Skip past blanks in the scan math procedure. [This blank-skipping will even-

tually go into scan left brace.] §403 A 252 Introduce a missing brace routine [later generalized] to improve error recovery

in mmode +math shift , when the top of save stack isn’t a math shift group. §1065 I 253 Adjust the math spacing between closing parentheses and Ord, Op, Open,

Punct. §764 Q 254 Make the underline go further under. §735 Q

96 ↦ 255 Compute the proper natural width when a displayed equation follows a paragraph whose fillglue has been deleted by line break . §1146 S

20 May 1978

256 Fix the spurious value of prev depth inside alignments. §775 A 257 Consider (and defeat) the following scenario: The u and v lists are built in

init align using temp head ; then while scanning ‘\tabskip 2pt\rt{...}’ the macro \rt is expanded, clobbering temp head . §779 S

• That bug was more subtle than usual. 258 Add the parameter num3 , so that the positioning of \atop can be different

from that for fractions. §700 Q 259 Add new parameters delim1 and delim2 , so that \comb can use fixed size

delimiters, not computed as with \left. §748 Q

22 May 1978

221 ↦ 260 Change \ to \ and introduce \ as the negative of \ . [Later obsolete.] §226 C 261 Fix the display of negative penalty nodes; show node list is confused when a

negative value has been packed into the middle of a word. §194 L • Memory overflow just occurred with lo mem max = 7500 and mem max =

16384. So I have to go to 15-bit pointers. (A problem on 32-bit machines?)

23 May 1978

262 Add a new parameter big op spacing5 , for extra space above and below limits

of big displayed operators. §751 Q 263 Initialize incompleat noad in $$\halign{...}$$. §775 F

• That was another heretofore-untested operation. How much of the code has

not yet been exercised?

238 ↦ 264 Close the file when doing lookup-failure recovery. §27 F 265 Improve the error recovery for ‘Extra &’. §792 I 266 The top piece must be calculated mod 128 in var delimiter , to guarantee a

valid subscript range. [Obsolete in TEX82.] §546 R

252 ↦ 267 Fix a blunder in new missing brace code. §1065 B 262 ↦ 268 Fix a blunder in new code for limits on display operators. §751 B

26 May 1978

269 Don’t insert a new penalty after an explicit penalty in math mode. §767 Q

• The hash table overflowed; I ought to make it much bigger.

110 ↦ 270 Avoid possible bad memory references in alignment when there is erroneous input after \cr. [Instead of extra info, the value of cur align in TEX78 is negated, because we need only distinguish \cr from &.] §789 R

271 Make the dimension parameters like \hsize all global, so that they can be set

in the \output routine. §279 S • This led to major simplifications, also to major surgery.

• [But it was a kludgy decision, overruled in TEX82.] 94 ↦ 272 Don’t forget to set the type of the new null box in the \end routine. §1054 D

27 May 1978

• The data overflowed memory again, both low and high, doing Section 3.3.2.

184 ↦ 273 Mask off extra bits of \char in math mode, to avoid bad memory references. §1151 R

274 Zero out the negative \medmuskip in script styles. §732 B

29 May 1978

275 Be prepared to handle an undefined control sequence during get x token . (Can

fix this by brute force, using get token instead of get next .) §380 S 276 Correct the superscript shift when a single character is raised. §758 D

184 ↦ 277 Mask off all but 7 bits in \char routine, to avoid space-factor index out of

range. §435 R • More memory capacity overflows.

22 ↦ 278 Fix TEX’s overflow stop so that I don’t have to wait for loading of the BAIL

debug routines. [System dependent.] §93 E 279 Remember to adjust the page number when a file page ends in mid-macro.

[System dependent.] §306 F

5 Jun 1978

280 Make sure that the arguments of positioning commands don’t overflow their

field size. §610 R 281 Report the excess amount when giving an overfull box warning. §666, 677 I

7 Jun 1978

282 Use ≥ instead of > as termination criterion in var delimiter . §714 Q 283 Disallow \eject in math mode. [In TEX78, \eject is distinct from \break; in

horizontal mode it includes TEX82’s ‘\vadjust{\break}’.] §1102 R 284 Don’t put too much clearance above \sqrt in text style. §737 Q

9 Jun 1978

110 ↦ 285 Make align state an integer variable, not boolean , so that \eqalign can be

within another \eqalign. §309 G 286 A \mark should expand its input. §1101 C

10 Jun 1978

287 Provide for preloading of fonts. §1320 E 288 Close the output file before switching to edit the input file with the ‘e’ option. §84 L 289 Return adjustments found by hpack to free storage if they’re not used. [Later,

hpack will detach them only when they’re used.] §655 E 290 Strive for consistency between make under and make over . §735 Q

18 Jun 1978

236 ↦ 291 Fix a serious error in rebox (‘b’ instead of ‘list ptr (b)’). §715 B

• Strange that such a bug would now surface for the first time! 292 Remove \deg from INITEX, since macros suffice. C 293 Add an extra hyphenation penalty for two hyphenated lines in a row. §859 Q

19 Jun 1978

294 Introduce the ‘no new control sequence’ switch. Among other things, this will prevent an undefined control sequence following scan math from clobbering the save stack. §259 S

20 Jun 1978

295 Change the badness test ‘glue ≤ 0.0’ to ‘glue ≤ 0.0001’. [TEX82 will avoid such

problems by calculating badness without floating point arithmetic.] §99 L 296 Force badness to be at most 10^{19}. §108 R 297 Add end template for better error recovery in alignments. §375 I

287 ↦ 298 Make INITEX more like the real TEX; my simple scheme for font preloading was

no good because it left thousands of ‘dead’ words in memory. §8 E 299 Economize disk space by using internal arrays in load modules that aren’t being

reinitialized. [System dependent.] E 300 Move the declaration of mem to the semantics module, so that the object code

will be more efficient. [System dependent. The code of TEX78 was divided into separately compiled modules for syntax, semantics, output, extensions, and general organization.] E

21 Jun 1978

• Today I’m working on the user manual. 301 Disallow \input except in vertical mode. [I will change this in TEX82, treating

\input as a case of expansion.] §378 C 302 Add error recovery for endv and par end occurring in math mode. §1047 I 303 Generalize \ifT to \if T. §506 G

22 Jun 1978

304 Preload the \bullet [later done by plain.tex]. F 256 ↦ 305 Get the correct prev depth at the beginning of an alignment. §775 D

306 Change \eject so that it ejects only once. §1000 C

14 Jul 1978

307 Look in standard area if a file isn’t found in the user’s area. §537 I 308 Echo all online inputs in the transcript file. §71 I

19 Jul 1978

309 Equalize spacing when only one of numerator/denominator is big. §745 Q 310 Prevent subscript from getting too high above baseline. §757 Q 311 Avoid infinite loop when stack overflows: push input should say ‘if input ptr ≥

stack size ∧ interaction = error stop mode’. §321 R

22 Jul 1978

312 Make \quad meaningful outside math mode. (All fonts must be generated

again!) §558 C 313 Show the nesting level at the end of show activities . [But I decided not to do

this in TEX82.] §218 I 314 Put in \> [namely, \mskip\medmuskip; TEX78 already has \ , for conditional

\thinmuskip, as well as the negative amounts \<, \ ]. Change the name of vector accent from \> to \b. [Math spacing operators will become much more general in TEX82.] §716 C

25 Jul 1978

94 ↦ 315 Give the correct \hsize and \vsize to the null boxes created at \end. §1054 Q 94 ↦ 316 And don’t “append” them. [Later this was changed, so that it would work

better with generalized output routines.] §1054 A

297 ↦ 317 Remove the control sequence \endv, since error recovery is now better. §375 I

318 Define another mode of tracing: It says ‘OK’ and stops after \showlists. §1298 I 244 ↦ 319 Give better defaults to parameters. [Later done by plain.tex.] §209 Q

320 Allow more bits in the packed representation of \showboxdepth. §238 I 321 Scan past delimiters and/or dimensions when recovering from ambiguous frac-

tions. §1183 I 322 Reduce accent numbers modulo 128 or 512, depending on the mode. §1165 R 323 Include a warning, ‘(\end occurred on level ...)’. §1335 I

28 Jul 1978

• (I’m writing Chapter 27 of the manual: ‘Recovery From Errors’.) 324 Improve the error message in scan digit . [This procedure will change its name

to scan eight bit int , when the number of registers increases from 10 to 256.] §433 I 325 Don’t report overfull boxes if they’re less than .1 point over. §666, 677 I 326 Give the user extra chances to define the font, if read font info is unsuccessful. §560 I 327 Change default recovery for bad parameter number from #1 to ##, since #1

won’t always work and since ## is probably intended. §479 I 328 Omit the "Negative?" message on things like scan char num . §435 I 329 Improve error recovery when a large delimiter isn’t in family 3. [Obsolete.] I 330 Give a more appropriate error message when the input is ‘$\right’. §1192 I

• Currently TEX says ‘Missing $’! 331 Call back input before the error message in back error , not afterwards. §327 I

1 Aug 1978

332 Give an appropriate warning when there’s no input file and the user types ‘e’. §84 I 333 Increase the system pushdownlist size so that the manual will compile. [Pro-

cedures hlist out and vlist out can recurse deeply.] L • Yesterday I distributed 45 preliminary copies of the manual; today I took out

the “debugging hooks” and put TEX up as a system program.

2 Aug 1978

• I’m typing Volume 2 again (currently in Section 4.2.2). Culture shock! 334 Introduce a \ragged parameter, to indicate a degree of raggedness. [Previ-

ously, ragged-right setting was performed when the \tolerance/100 was odd! Eventually a better approach, with \rightskip and such things, will be discovered.] §886 G

335 Omit the ‘widow penalty’ in one-line paragraphs. §890 Q

5 Aug 1978

336 Generalize \pageno to \count⟨digit⟩. §236 G 285 ↦ 337 Update align state when recovering from ‘Missing {’ and ‘Extra }’ errors.

§1069, 1127 D

338 Show “runaway” tokens, making it easier to pinpoint an error. §306 I

22 Aug 1978

339 Add \predisplaypenalty.  §1203 G

340 Clarify error messages; they should indicate when something has been inserted, etc. §1064 I

23 Aug 1978

114 ↦ 341 Substitute ‘Extra }’ for the losing ‘Missing \cr’ error message. §1069 I 213 ↦ 342 Go past online insertions in show context . §311 I

343 Exact no penalty for breaking one line before a display. §1145 Q 338 ↦ 344 Check for runaways at end of file. §362 I

345 Give error message when a macro argument begins with }. §395 I

24 Aug 1978

213 ↦ 346 Remove extra line-feed in show context after printing insertions. [System dependent.] §318 L

25 Aug 1978

347 Leave no glue at top of page, even after \eject. §997 Q

27 Aug 1978

348 Adopt Guy Steele’s new version of the TEX source files. [He has recently made a copy and modified it by introducing compile-time switches for MIT conventions as an alternative to SUAI. This is the first time that TEX is being ported to another site; additional switches for PARC, TENEX, TOPS10, and TOPS20 will be added later, using the Steele style.] P

1 Sep 1978

349 Don’t pass over leader nodes in the try break background computation. [At

this time, leaders have not yet been unified with glue.] §837 Q

82 ↦ 350 Prune away all penalties at the top of a page. §997 Q

4 Sep 1978

338 ↦ 351 Include ‘\’ in error message about a runaway argument. §306 I

8 Sep 1978

• I just remade all the fonts, with increased ligature field size.

350 ↦ 352 Insert a necessary goto statement in the first branch of the new penalty routine within build page. §997 B

30 Sep 1978

338 ↦ 353 Make the token list for runaway arguments meaningful outside of macro call . (I just had a runaway argument ending with ‘\lcm’, which turned out to be the control sequence in hashtable location 0.) §371 M

354 Avoid infinite loop when recovering from $$ in restricted horizontal mode. §1138 R 355 Fix two hyphenation bugs related to -ages, -ers. [A completely new algorithm

for hyphenation will go into TEX82.] L 356 Add -est to hyphenation routine; also disable puz-zled and rat-tled, etc. Q

4 Oct 1978

357 Add new primitive \vtop. §1087 G 358 Treat implicit kerns properly after discretionary hyphens have been inserted. §914 Q

4 Nov 1978

359 Forget the half quad originally required at left and right when centering displayed equations without equation numbers. §1202 Q

11 Nov 1978

360 Don’t let the postamble come out empty. [This could occur if no fonts were selected.] §642 R

15 Nov 1978

361 Allow optional space after digit in scan int routine. §444 C

17 Nov 1978

362 Make the check mem procedure slightly more robust. §167 R

20 Nov 1978

363 Make the \par in a \def match the \par that comes automatically with a blank

line. (Suggested by Terry Winograd.) §351 C 364 Add new parameter \mathsurround for spacing before and after math in text. §1196 G 365 Extend \advance to allow increase by other than unity. [At this time it applies

only to the ten \count registers, and it is called \advcount.] §1238 G

25 Nov 1978

366 Add a new primitive: \unskip. §1105 G 367 Add new primitives \uppercase and \lowercase. §1288 G

28 Nov 1978

338 ↦ 368 Don’t let \mark and macro call interfere with each other’s scanner status . §306 M

369 Omit extra } after show node list shows a \mark, since the right brace is already

there. (See #210.) §176 M 370 Add a new primitive suggested by Terry Winograd: \xdef. §1218 G

29 Nov 1978

371 Delete a space following \else{...} also in the false case. [TEX78 uses braces,

not \fi, for conditionals.] S

320 ↦ 372 Make \tracing set \showboxbreadth as advertised. §198 D

373 Account properly for kerns in width calculations of line break . §866 F 364 ↦ 374 Delete a math node at the beginning of a line. §148 Q 339 ↦ 375 Guarantee that \predisplaypenalty=10000 will suppress page breaking before

a display. §1005 A

6 Dec 1978

376 Change the file opening statement to allow lines up to 150 characters long. [System dependent.] L

16 Jan 1979

365 ↦ 377 Initialize negative properly in the \advance routine with a \count as argument. §440 F

20 Jan 1979

378 Try to keep complex, buggy preambles of alignments from crashing the program. §789 R

17 Feb 1979

376 ↦ 379 Give more detailed information when warning about a long line being broken.

[System dependent; the buffer size in TEX78 is very limited.] I 380 Declare p local to try break , for the “rare” case code. [My original program

included the following comment: “This case can arise only in weird circumstances due to changing line lengths, and the code may in fact never be executed.” Later Michael Plass will discover that variable line lengths require an entirely different algorithm, using last special line.] §847 L 334 ↦ 381 Don’t omit the raggedness correction when the last line of paragraph has to

shrink. [Obsolete in TEX82.] F

22 Feb 1979

363 ↦ 382 Don’t forget to return from get x token after finding \par. §351 F 383 Add a new parameter: \lineskiplimit. §679 Q 384 Change the syntactic sugar: ‘\hbox par’ replaces ‘\hjust to ...{overfull}’.

[This vastly improves on the old idea (see #40), but there still is no internal vertical mode.] C

385 Introduce new names \hbox and \vbox for \hjust and \vjust. §1071 C 386 Add a new condition: \ifpos. [It will later be generalized to \ifnum and

\ifdim.] §513 G 387 Add vu and \varunit. [TEX82 will eventually allow arbitrary internal dimen-

sions as units of measure.] §453 G

312 ↦ 388 Add an em unit. §455 G

389 Legalize \hbox spread ⟨negative dimension⟩ [since scan spec no longer uses the sign as a flag]. §645 C

10 Mar 1979

370 ↦ 390 Make scan toks expand \count during \xdef. [This will change later when \the and \number are introduced.] §367 C

23 Mar 1979

391 Put only 100000 pt stretch at the end of a paragraph instead of 10000000000 pt. [In TEX78, “infinite” glue is actually finite but large; in the language of TEX82 we would say that \parfillskip, which is not yet user-settable, is being changed to be like \hfil instead of like \hfill.] §816 Q

392 Treat the last line of a paragraph more consistently with the other lines (e.g., when \hfil appears in mid-paragraph), by effectively inserting inf penalty at the end. §816 Q

31 Mar 1979

393 Ensure that penalty nodes aren’t wiped out, in weird cases where breaks occur at penalties that normally disappear. §879 S

27 Apr 1979

394 Correct the page number count when files begin with an empty page. [System

dependent.] A 395 Allow the math code table to be changeable via \chcode. [In TEX82, \chcode

will split into \mathcode and \catcode.] §1232 G

332 ↦ 396 Don’t accept ‘e’ after an error message if not inputting from a file. §84 I

29 May 1979

397 Don’t call end file reading if you haven’t already invoked begin file reading ; this could happen when trying to recover from an error in start input . §537 F

7 Jun 1979

306 ↦ 398 Be sure to eject two pages, when \eject comes just at the time another break is preferable (e.g., when the page has just become too full). §1005 A

27 Jun 1979

354 ↦ 399 Don’t say ‘You can't do that in math mode’ when the user says ‘$$’ in restricted horizontal mode! §1138 I

30 Jun 1979

400 Add wd, dp, ht dimension units. §455 G 307 ↦ 401 Don’t try the system area for file names whose area is explicitly indicated. §537 I

1 Jul 1979

402 Allow letters as (ASCII) numbers [without the ` marker introduced later]. §442 G

2 Jul 1979

403 Fix a \gdef bug: If the control sequence was never defined before [this later became the restore zero option], don’t remove it at group end. §282 F

16 Jul 1979

320 ↦ 404 Update show noad list to be like show node list . [The two routines, originally separate, will be merged in TEX82.] §238 I

18 Jul 1979

405 Extend capacity from 32 fonts to 64 fonts if desired. §134 G 406 Add new extra space parameter to all text fonts (requested by Frances Yao). §558 Q 407 Make each node noad print properly in show noad list . §183 F 408 Make \jpar allow any break if it is 1000000 or more. [In TEX82, a \tolerance

of 10000 or more allows any break.] §851 Q

23 Jul 1979

409 Introduce new primitives \hfil, vfil, \hfilneg, \vfilneg. §1058 E 410 Add \ifmmode. §501 G 411 Add \firstmark. §1012, 1016 G 412 Allow break at leaders (horizontal mode only). §149 C

25 Jul 1979

213 ↦ 413 Revise error so that online insertions work properly after end-of-file errors. §336 I 411 ↦ 414 Change ‘if first mark ≠ 0’ to ‘if first mark ≥ 0’ [because −1 is used to indicate

‘not yet given a value’]. §1012 B

28 Jul 1979

370 ↦ 415 Stop \xdef from expanding control sequences after \def’s. [This decision will be rescinded later, after several more years of experience with macro expansion will suggest better ways to cure the problem.] §366 C

416 Change symbolic printout for control symbols. [System dependent.] §49 I 308 ↦ 417 Avoid linefeeds in the transcript file. [System dependent.] L 370 ↦ 418 Expand topmark, etc., in \xdef. §366 C

4 Aug 1979

413 ↦ 419 Fix an error introduced recently: \par was suddenly omitted at end of page. [System dependent.] B

11 Aug 1979

420 Change error messages that use SAIL characters not in standard ASCII. §360 P

28 Aug 1979

411 ↦ 421 Move the command ‘first mark ← −1’ from vpackage to fire up. §1012 D 403 ↦ 422 Correct a serious \gdef bug: Control sequences don’t obey a last-in-first-out

discipline, so TEX loses things from the hash table when deleting a control sequence. §259 S

• To fix this, I either need to restrict TEX (so that \gdef can be used inside a group only for control sequences already defined on the outer level) or need to change the hash table algorithm. Although all applications of TEX known to me will agree to the former restriction, I’ve chosen the latter alternative, because it gives me a chance to improve the language: Control sequences of arbitrary length will now be recognized.

423 Make sure that unsave cannot call eq destroy with a value from the upper part of eqtb. §282 D • I noticed this long-standing bug while fixing #422. It had very low probability

of causing damage (e.g., it required a certain field of a floating-point number to have a certain value), but it would have been devastating on the day it first showed up!

29 Aug 1979

424 Call eq destroy when a control sequence is \gdef’ed after being \def’ed. §283 F 418 ↦ 425 Treat the first token consistently when \topmark and its cousins are expanded

in scan toks . §477 F • Now I’ve checked things pretty carefully and I think TEX is “fully debugged.”

25 Jan 1980

338 ↦ 426 Display runaway alignment preambles. §306 I

427 Introduce active characters (one-stroke control sequences). [I don’t yet go all

the way: The meanings of ‘x’ and ‘\x’ have to be identical.] §344 G

7 Feb 1980

314 ↦ 428 Fix a glaring omission: Op space \> was never implemented in math mode! §716 F

25 Feb 1980

429 Add a new dimension ‘ex’ (for units of xheight). §455 G

3 Mar 1980

427 ↦ 430 Allow the control sequence \: to be redefined [it was the ‘select font’ operator];

this allows the character : to be active. [Obsolete.] C

23 Mar 1980

• An extend-TEX-for-the-eighties party: 431 Add a new \copy feature. §204 G 432 Add a new \unbox feature. §1110 G 433 Add a new \open feature [later \openout]. §1351 G 434 Add a new \send feature [later \write]. §1352. G 435 Add a new \leqno feature, requested by MDS. §1204 G 436 Add a new \ifdimen feature [later \ifdim]. §513 G 437 Make \⟨space⟩ in vertical mode begin a paragraph. §1090 C 438 Add a new \font feature [replacing the silly previous convention that a font

must be defined when it is first selected]. §1256 G 439 Add new \parval and \codeval features [later \the ⟨whatever⟩]. §413 G

427 ↦ 440 Don’t let active characters gobble the following space. §344 C 208 ↦ 441 Add a new parameter to govern amount of token list dumped. [Obsolete.] §295 G

442 Add a new \linebreak feature [later replaced by \break]. §831 G

25 Mar 1980

• (Still working on the above, also thought of more.) 443 Add a new \mskip feature. §716 G 444 Add a new \newname feature (soon changed to \let). §1221 G

430 ↦ 445 Allow any control sequence to be redefined. §275 G

446 Send the output to the user’s current file area, even when input comes from

elsewhere. §532 I

27 Mar 1980

447 Compute the xheight for accents in math mode from family 1, not family 3.

[Obsolete.] Q

28 Mar 1980

448 Increase minimum clearance between subscript and superscript. §759 Q

29 Mar 1980

222 ↦ 449 When a display follows a display, the second should have the ‘shortskip’ glue. §1146 Q

4 Apr 1980

445 ↦ 450 Look at current token meanings when trying to recognize \tabskip in alignment

preambles. §782 A

23 Apr 1980

451 Estimate the length of printed output, for the new priority feature on our XGP

device driver. [System dependent.] I

434 ↦ 452 Break long \send lines into pieces so that the file can be read in again. [System

dependent.] C

19 May 1980

182 ↦ 453 Don’t make \left and \right delimiters too large; they need to be only 90%

of the enclosed size. [This eventually became \delimiterfactor.] §762 Q

21 May 1980

454 Add a new \pagebreak feature [later \vadjust{\break}]. §655 G

13 Jun 1980

• Today I’m beginning to overhaul the line-breaking routine, and I’ll also install

miscellaneous goodies. 455 Allow a radical sign to be in different font positions. §737 G 456 Clear empty tokenlists off input stacks to allow deeper recursions (suggested

by Jim Boyce’s macros for chess positions). §325 E 457 Make \spaceskip and \parfillskip changeable. §1228 G 458 Add a new parameter \rfudge (per request of Zippel) [later \mag]. §288 G 459 Add a new parameter \loose [later \looseness]; now parameters are allowed

to take negative values. §875 G 460 Remove the variable just par . [Obsolete; it was the real equivalent of an

integer ]. E

14 Jun 1980

461 Install new line-breaking routines, including \parshape. (These major changes

are introduced as Michael Plass and I write our article.) §813 Q 462 Add a new parameter \exhyf [later \exhyphenpenalty]. §869 G

16 Jun 1980

444 ↦ 463 Change conventions in eqtb so that glue is distinguishable from other equiva-

lents. §275 S

444 ↦ 464 Don’t expand \b in \xdef{\d\b{...}} after \let\d=\def. [Obsolete.] A 444 ↦ 465 Avoid creating dead storage when doing unsave in certain regions. §275 D

17 Jun 1980

466 Allow negative dimensions in rules. §138 C

19 Jun 1980

463 ↦ 467 Make the new test for glue at the outer level of show eqtb. §252 B

27 Jun 1980

453 ↦ 468 Don’t let \left and \right become too small for big matrices. [This eventually

became \delimitershortfall.]  §762 Q

3 Aug 1980

469 Don’t move extra-wide, numbered equations flush left unless they begin with

glue. §1202 Q

15 Sep 1980

461 ↦ 470 Say ‘≥ fz ’ instead of ‘> fz ’ in the pre-hyphenation routine; I’d forgotten my definition of fz [a variable used to test for a sequence of lowercase letters in the same font]. §897 M

395 ↦ 471 Check the range of the index in \chcode before saving the old value. §1232 R

18 Sep 1980

457 ↦ 472 Don’t forget to increase the reference count to \parfillskip, or it will mysteriously vanish. §816 D

19 Sep 1980

412 ↦ 473 Make leaders break like glue in both horizontal and vertical modes. §149 C 364 ↦ 474 Make \mathsurround break properly at left and right end of lines. §879 Q

13 Oct 1980

461 ↦ 475 Remove spurious overfull boxes generated when the looseness criterion fails.

[Obsolete.] I

461 ↦ 476 Redesign the iteration for looseness; breakpoints were not chosen optimally. §875 A 461 ↦ 477 Avoid storing a lot of breakpoints when they are dominated by others. §836 E 366 ↦ 478 Don’t say ‘cur node’ when you mean ‘mem [cur node]’. §1105 B 461 ↦ 479 Prefer the oldest break to the youngest break when two break nodes have the

same total demerits. §836 Q

461 ↦ 480 Don’t make badness too big for floating-point calculations, when forced to make an overfull box. [Obsolete.] L

10 Dec 1980

481 Make it impossible to get unmatched ‘}’ in a delimited macro argument. §392 R 482 Add new \topsep and \botsep features. [These are TEX78’s way to put space

at the edge of inserts, replaced in TEX82 by the \skip register corresponding to an \insert class.] §1009 G

6 Jan 1981 483 Install new routines for reading the font metrics, using Ramshaw’s TFM files

instead of TFX files. §539 P 484 Abort after reporting 100 errors, if not pausing on errors. §82 I 485 Add new \spacefactor and \specskip and \skip primitives. [At this time we

            write ‘\specskip3=10pt’ and ‘\skip3’ for what will become ‘\skip3=10pt’

and ‘\hskip\skip3’ in TEX82.] §1060 G

366 ↦ 486 \unskip is now allowed in internal vertical mode. §1105 G

26 Jan 1981

482 ↦ 487 Don’t say ‘mem [q]’ when you mean ‘q’. (See #143 and #478.) §1009 B

27 Feb 1981

417 ↦ 488 Put some linefeeds back into the transcript file, in order to prevent overprinting

in listings. [System dependent.] I 489 Add a new \dpenalty feature [later \postdisplaypenalty]. §1205 G 490 Add the dimension cc for European users. §458 G 491 Make scan keyword match uppercase letters as alternatives to lowercase ones

(suggested by Barbara Beeton’s experiments with \uppercase). §407 C 492 Add nonstop mode so that overnight batch processing is possible. §73 I

2 Mar 1981

422 ↦ 493 Fix a still more serious \gdef bug: The generality of \gdef almost makes it a crime to forget any control sequence names, ever! (The previous bug was only the tip of an iceberg.) §259 S

494 Issue warning message at the end of a file page if nesting level isn’t zero. [System dependent.] I

5 Mar 1981

495 Keep track of maximum memory usage, for statistical reporting. [Obsolete.] §125 I 350 ↦ 496 Prune away glue and penalties at top of page after marks, sends, inserts. §1000 Q

497 Allow \mark in horizontal mode. [Later it will be \vadjust{\mark...}.] §655 G 498 Allow optional space before a required left brace, e.g., \if AA {...}. [See

#251.] §403 C 499 Issue an incomplete \if error, to help catch a bad \if. §336 I

17 Mar 1981

494 ↦ 500 Omit the warning message at end of a file page unless the nesting level has

changed on that page. [System dependent.] I

310 ↦ 501 Fix the spacing when there is a very tall subscript with a superscript. §759 Q

20 Mar 1981

371 ↦ 502 Make space-eating after \else fully consistent between the true and false cases. [Obsolete.] S

24 Mar 1981

496 ↦ 503 Change glue spec size to ins spec size in vpackage [where insertions are done]. [Obsolete.] B

5 Apr 1981

501 ↦ 504 Fix a typo (‘+’ instead of ‘-’) in the new subscript code; this shifted certain subscripts down instead of up. §759 B

18 Apr 1981

505 Make leaders with rules of specified size act like variable rules. §626, 635 G

29 Apr 1981

461 ↦ 506 Don’t consider badness > threshold at a line \break except in an emergency. §854 A

13 Jul 1981

402 ↦ 507 Allow other characters as numbers. §442 C 294 ↦ 508 Avoid dead storage if a no new control sequence error occurs. [Obsolete.] §259 R

509 Add a new \ifx feature. §507 G 510 Add new features \xleaders and \cleaders. §626, 635 G

14 Jul 1981

507 ↦ 511 Amend the new code for constants; the ‘.’ in ‘.5’ is thought to mean ´ 056 ! §442 S 507 ↦ 512 And fix an egregious blunder in that code: New commands at the end of a

procedure are ignored when earlier statements exit via return. §442 L

4 Aug 1981

513 Accept alphabetic codes for all online error recovery options, instead of insisting on control codes like line feed or form feed. [The original error-recovery codes were suggested by the conventions of the SAIL compiler.] §84 P

514 Add a new \thebox feature [later \lastbox]. §1079 G

7 Aug 1981

515 Add fil, fill, and filll as units for glue stretching or shrinking. §454 G 516 Suppress the overfull box error when shrinkage amount is negative. §664 I

9 Aug 1981

517 Let unset boxes inherit the size of their parent in alignments. §810 Q

12 Apr 1982

518 Make INITEX dump out the font dsize array needed by the new DVI output module. §1322 F

1 May 1982

151 ↦ 519 Fix clean box so that mlist to hlist cannot make link (q) = 0 and type(q) =

glue node. §720 S • [That was the historic final change to TEX78. All subsequent entries in this log

refer to TEX82.]

15 Jul 1982

• Finished draft of test program and began debugging about 1430 [2:30 pm].

Taking my time. X1 Change eqtb[cur font ] to eqtb[cur font loc]. §232 B

• Not logging changes to the exposition.

• Compile time is about 2 minutes CPU, times 5 for time-sharing; add another half minute for linking and loading.

• Hash table and get next seem to be working, with no changes needed!

• Time out 1630–1815 for Jill’s birthday party. X2 Insert begin … end around dump int macro. §1305 L X3 Print two blank spaces before date in open log file. §536 I X4 Update x and var used outside the for loop. §1311 A X5 Change if = to if ≠ as loop exit condition. §1315, 1316 B

• The TRIP test should preload more fonts. X6 Insert begin … end around statistics output. §1334 L X7 Must get x token when scanning a number. §445 F X8 Interactive debug help needs to print a newline. §1338 I X9 Include ignore spaces and math accent in print cmd char cases. §266 F X10 Don’t call confusion when print cmd char sees unknown code. §298 I

• Compiler bug causes stack overflow. Retiring for the night at 2145. 16 Jul 1982

• Starting at 0700; DRF has fixed the compiler. X11 Allow arbitrary integer parameters in diagnostic print routines. §237, 699 R X12 Say cur tok , not cur val , when you mean cur tok . §440 T X13 Make \pause effective also on first line of a file. §538 F X14 Show context after online deletion. §88 F X15 Bypass reference count when debug help shows a token list. §1339 I X16 Change ‘case p’ to ‘case type(p)’. §1000 B X17 Fix timing of print ln when scrolling help messages. §90 F X18 Make other char the default category for ASCII control codes too. §232 P X19 Use special scanning method for font number in new font . §1257 A

• Eating lunch, 1020–1035, while the machine slowly recompiles everything. X20 Don’t forget to increase k in the while loop. §355 F X21 Adjust limit properly after line changed when pausing. §363 D X22 Remember to return a value in new spec and new penalty . §151, 158 F

• Now stepping through line break in simple case. X23 Don’t prune unwanted nodes if cur p = null . §877 A X24 Print a closing parenthesis when displaying glue nodes. §189 F X25 Use last , not limit , in term input ; else error prompt causes trouble when

state = token list . §71, 87 S X26 Set first ← limit + 1 after init terminal . §331 D X27 Make sure set trick count is always performed. §317 D

17 Jul 1982

X28 Add new diagnostic feature \tracingcommands. §299, 1031 I • Debugging of system-dependent code not shown in this log.

• Tangling TEX now takes 1.75 minutes; about 75K bytes, 108K tokens.

• Redundant semicolon sends Pascal compiler into infinite loop! X29 Initialize passive ← null . §864 F X30 Fix pseudoprinting when the line is empty. §318 A X31 Merge adjacent free areas of dynamic memory before dumping. §131 E X32 Print the word mode in print mode. §211 F X33 Improve message and help in case of weird error. §415 I X34 Allow optional space after \def and similar constructions. §473 G X35 Declare alpha to be integer in read font info. §560 M X36 Fix timing of back input in scan dimen . §448 A X37 Back up after missing number error. §446 I X38 Show the ‘at’ size that is considered improper. §1259 I X39 Streamline the dialog in debug help. §1338 I X40 Take output of the toks from the advertised place. §467, 1297 M X41 Say trie fix (q), not trie fix (p). §959 T X42 Decrease low limit of error count to −1. §76 S

18 Jul 1982

X43 Clear initial reference count of macro definitions. §473 F X44 Fix timing of back input in scan glue. §461 A X45 Use cur val level , not cur val , when checking levels. §461 B X46 Multiply fil units by 2^{16} for correct scaling. §454 B X47 Don’t confuse glue base with skip base. §1237 B X48 Fix print scaled so that 0.01 doesn’t come out 0.1. §103 A

X28 ↦ X49 Show mode changes when tracing commands. §299 I X50 Don’t say if (n = 0) ∨ ( … div n) in Pascal. §105 L X51 Don’t confuse box flag with box code. §1075 B X52 Reset offset on print ln even in no print mode. §57 S X53 Fix restarting of interrupts after big switch . §1031 S X54 Don’t loop for k ← a to b − 1 when b = 0 if k is declared nonnegative. L X55 Put ‘=’ sign into the format ident . §1328 I X56 Allow r to be any integer in get node. §125 S X57 Don’t put the output of print file name in quotes. §518 I X58 Say ‘dumped’ after dumping. §1311 I X59 Eliminate unnecessary initialization code. §1332 E X60 Get the file reading started right when beginning to undump. §1308 L X61 Give forlorn message if format file can’t be loaded. §1303 I X62 Assign value to cur val after glue arithmetic. §1239, 1240 F

19 Jul 1982

X63 Don’t say if p > max ∨ free[p] in Pascal. §169 L X64 Fix memory-undump logic; loops are out of phase with input. §1312 A X65 Undump hyph word [j], not hyph word [k]. §1325 B

• At last trip.fmt loads without bombing out. X66 Remove assignment of array to array, not allowed by IBM Pascal (Susan Plass). §167 P X67 Simplify an expression that’s too big for IBM Pascal (Susan Plass). §1009 P X68 Go to contribute, not done, after insertions. §1000 A X69 Decrease depth threshold if there’s not enough string space. §198 I X70 Show rules as ‘|’ in short displays. §175 I X71 Don’t show null glue in short displays. §175 I X72 Set job name ← 0 as part of output initialization. §528 S X73 Don’t complain of infinite shrinkage on 0pt minus 0fil. §825, 976, 1009 S X74 Use different prompt at beginning when accepting a file name. §37 I X75 Reset last glue on nonglue nodes. §996 F X76 Remember to call error after printing OK. §1293 B X77 Insert begin … end around program text of section. §1025 L X78 Define the \shipout primitive. §1071, 1073 F X79 Introduce write loc analogous to par loc. §1344, 1371 A X80 Dump and undump par loc and write loc. §1313, 1314 F X81 Allow the in scan the [later scan something internal ]. §413 F X82 Interchange command codes the :=: number [later convert ]. §210 E X83 Don’t confuse breadth with depth . §236 B X84 Add string printing feature to debug help. §1339 I X85 Set state ← mid line in begin file reading . §328 F

• Time out 2105–2200 to pick up Jenny from driving lesson. X86 Keep c ≤ 127 when deleting 99 tokens. §88 L X87 Don’t check for str room error when selector = new string . §1328 S

21 Jul 1982

X88 Gather more statistics: String usage, font info, hyphen exceptions, stacks. §1334 I X79 ↦ X89 Initialize write loc from cur val , not from cs ptr . §1344 D

X90 Remember to pack file name for \open. §1374 F X34 ↦ X91 Defuse \outer test before scanning optional space after ‘}’. §473 S

X92 Don’t allow prepare mag to cause errors after jump out . §84 S

• The first page of DVI output is perfect! Pause to play piano. X93 Don’t confuse dimen base with scaled base. §1237 B X94 Initialize link (page head ) ← null when beginning a page. §991 D X95 Correct cur height more often, since max depth might be negative. §972, 973 S X96 Calculate page dimensions properly after vertical kerns. §973 A X97 Install new page contents logic to handle interaction between insertions and

\topskip. §987, 1008 S X98 Allow top skip glue to be a valid breakpoint. §1001 S X99 Don’t forget to count dyn used in inner loop [erroneous analysis retracted later].

§1034 F

X100 Set p ← q after migration step. §655 F X101 Clear prev graf to zero at start of paragraph. §1091 F X102 Put parens into negated leader flag macro. 1078 L

• Time out 1720–1920 for John’s birthday dinner. X103 Scale best height when adjusting page goal . §1010 D X104 Simplify logic of split insertions; three states become two. §981, 1019, 1020 A X105 Don’t omit first character when showing a macro argument. §400 M X106 Prevent clobberage if macros have too many parameters. §390 R

22 Jul 1982

X107 Tell how many DVI bytes were output. §642 I X88 ↦ X108 Adjust for singular or plural statistics. §1320, 1334 I X98 ↦ X109 Consider page head a glue node, to inhibit unwanted break. §988 S

X110 Introduce new skip param to keep reference counts updated. §679, 969, 1001 D X111 Record the correct size of new insertion after it’s split. §1010 D X112 Use free node, not flush node list , when recycling insertion nodes. §1022 D X113 Make online insertions work after get next is interrupted. §87, 324, 343 S X114 Print newline on interruption stop. §98 B

X34 ↦ X115 Put space before end write token . §1371 S X116 Don’t confuse glue order with stretch order . §838 B X117 Set max dimen ← ’7777777777 , not ’777777777. §421 T X118 Make \global\textfont legal. §1211 M X119 Fetch \the\textfont with equiv , not fam font . §415 B X120 Call new ligature(f, l, …) not (f, c, …). §1035 B X121 Make show box work on random garbage. §174, 177 R X122 Count reference to zero glue from cond math glue. §1171 D

23 Jul 1982

X123 Allow avail = null when undumping. §1312 R X110 ↦ X124 Set width (glue ptr (p)), not width (p). §679 B

X125 Put begin file reading inside the start input loop. §537 A X116 ↦ X126 Don’t confuse glue stretch with stretch order [the previous fix went only half-

way]. §838 B

X127 Negate x when calculating badness of shrinkage. §667, 678 B X121 ↦ X128 Remove dangling else that parses wrong. §174 L X28 ↦ X129 Print newline before {, not after }, when tracing commands. §299 I

X130 Remove colon from overfull box messages. §663, 675 I X97 ↦ X131 Compute page goal properly when the first box arrives after inserts. §1001 D

X132 Don’t confuse page size [now page goal ] with best size. §1017 B X133 Put heldover insertions at front of contribution list. §1023 A

X88 ↦ X134 Output stats before closing DVI file, since the latter decreases font ptr . §1333 S X135 Don’t call a \vbox an \hbox. §674 T X136 Fix misplaced end caused by editing error. §675 T

24 Jul 1982

X137 Don’t eq destroy any paragraph shape when par shape is null. §275 D X138 Omit blank before \message at the beginning of a line. §1280 I

X104 ↦ X139 Don’t try to split an insertion when best node isn’t the split one. §1021 A X140 Correct another case of ‘if x ∧ y’ misunderstood by Pascal. §1021 L X141 Provide diagnostic info about insertions via \showlists. §986 I X142 Add ‘inside a group’ to clarify a warning message. §1335 I X143 Report prev depth on a separate line in \showlists. §219 I X144 Back up input to avoid unexpected clobberage of cur tok . §1090 S

• Wow what a bug: new graf calls build page, which invokes the output routine,

after which ‘goto reswitch ’ is a disaster.

X145 Add insertion glue to page so far instead of subtracting it from the goal. §1009 D X146 Put extra blank line before overfull box warning. §660 I X147 Define break at kern consistently between horizontal and vertical lists. §973, 1000 C X148 Renumber so that math nodes are nondiscardable. §147 D X149 Correct the char kern macro: #, not f. §557 T X150 Decrease l after reconstituting discretionary break. §916 F X151 Simplify the hyphen routine, knowing that link (s) = null . §918 E X152 Initialize r ← q in discretionary destruction routine. §883 F

25 Jul 1982

X153 Don’t add interline penalty after last line of paragraph. §890 A X154 Adjust spacing in diagnostic messages. §245 I X155 Avoid simultaneous use of temp head by prune page top and the page builder. §1017 D X156 Clear the post break field of simple discretionaries. §916 F X157 Split offset into independent variables term offset , file offset . §54, 57, 58 A

• Am freezing current program as version −0.25; a week of TUG lectures begins

tomorrow.

5 Aug 1982

X158 The ‘.err’ file should be ‘.log’ instead. §534 I X159 Allow \special strings to contain more than 256 bytes. §585, 1368 G

X99 ↦ X160 Undo “correction” to a non-bug. §1034 M X161 Suggest \& in help message for unexpected &. §1128 I X162 Make ‘E’ a standard option for exiting. §84 G X163 Restore the use of dead cycles à la TEX78. §1024, 1054 G

• The previous six changes were suggested during discussions with TEX82 class.

X164 Fix global variable conflict between open log file and new font . §1257 S X165 Allow optional ‘=’ when assign to font parameter. §1253 C X166 Set cur val after increasing the number of font parameters. §580 F X167 Set hash brace when matching ‘{’. §476 D

X88 ↦ X168 Clarify meaning of statistics printed. §1334 I X169 Change DVI format to include design size. §602, 1260 G X170 Introduce def ref for runaway messages. §306 D X171 Restore cur cs before calling scan toks . §1226 M

X157 ↦ X172 Update print nl to dual offset conventions. §62 A X163 ↦ X173 Move endgame logic inside main control , because the output routine becomes

active. §1054 A

6 Aug 1982

X174 Allow INITEX to load format files. §1337 C X175 Conserve input stack space by deleting finished token lists. §325 E

X74 ↦ X176 Print the opening ‘**’ in the transcript file. §534 I

• Now ready to try breaking new ground in TRIP. X177 Preserve align state from tokens deleted online. §88 S X178 Set t in all branches of scan toks . §473 D X179 Change ‘cur cmd ≤ right brace’ to ‘cur tok ≤ right brace limit ’; otherwise

\relax gets through. §477 S

X180 Allow optional = when setting \spacefactor; disallow zero. §1243 C X181 Change vpackage(head ) to vpackage(link (head )). §796 B

• Shades of 1978! X182 Insert missing begin … end. §798 L

7 Aug 1982

X183 Keep trie max declared in non-INITEX [later rescinded]. §950 L X184 Watch out for empty token list when copying. §466 D X185 Free unused reference count slot when defining \everypar. §1226 D

X163 ↦ X186 Introduce \maxdeadcycles. §1012 G

• I believe the line break routine has passed its test perfectly. X187 Don’t put discretionary after - inside a discretionary. §1039 S X188 Change ‘\minus’ to ‘\minusthe’ [this feature retracted later]. §413 C X189 Change cur p to r (three places). §875 B X190 Increase range of hc to halfword ; otherwise end-of-word mark might match a

vacant entry in the trie. §892 A

X191 Initialize b in shift case routine. §1288 F X192 Don’t back up if a space follows a decimal fraction. §452 E X193 Don’t confuse glue base with dimen base. §1145 B X194 Guard against anomalous floating-point values in glue display. §186 L

8 Aug 1982

X195 Avoid infinite loop when \outer leads to runaways. §339 S

• I worked on that problem about two hours before fixing it. X196 Move final debug help to succumb, except in batch mode. §93 I X197 Insert kern after spanned box, to defeat access to floating point. §808 R

9 Aug 1982

X198 Include \leftskip and \rightskip in displayed equations [rescinded later]. §1199 C X199 Trace line-break computations if tracing stats > 2. §846, 856 I X200 Keep prev p up to date when passing a string. §867 D

• Now stepping through math stuff; a lot is working. X201 Set link (p) ← z when making a fraction. §747 D X202 Don’t reset space factor when beginning \valign. §775 C X203 Don’t show glue setting if glue sign = normal . §186 I X204 Clear glue stretch and glue shrink when creating an unset box. §801 D X205 Do vpack in hmode and vice versa when aligning. §804 B X206 Remove fallacious call to confusion after alignment in display. §1206 A X207 Don’t test mode = vmode in display, test nest ptr = 1. §1145 A X208 Show an inner noad as well as the other types. §690, 696 F X209 Renumber mu glue and cond math glue so that the glue display logic works. §149 D X210 Don’t confuse cur size with cur style. §703 B X211 Advance p ← q during second pass over mlist. §761 F X212 Add helpful hint about \tracingonline=1. §1293 I X213 Delete spurious statement left from sloppy editing. §710 T X214 Change the subtype when mskip becomes hskip. §732 D X215 Don’t forget to use the remainder when computing math glue. §716 F

X199 ↦ X216 Improve paragraph diagnostics using short display . §857 I X199 ↦ X217 Introduce artificial badness for better diagnostics. §854, 856 I

11 Aug 1982

X218 Introduce char box subroutine so that var delimiter adds italic correction. §709 A X219 Save font and char in local variables of make math accent , since it can be

recursive. §738 S

X220 Call error after decrying an invalid character. §346 F

12 Aug 1982

X199 ↦ X221 Install new format for showing break nodes. §846 I

• I have been testing line break and I think it’s working fine. X222 Change q to p, in order to catch empty alignments. §812, 1206 B X223 Disallow third part of discretionary in math mode. §1120 S X224 Don’t change tail if discretionary third part is empty. §1120 D

X225 Say nonscript, not non_script.  §189 I

X226 Inhibit math if \scriptfont3 is improper. §1195 S X199 ↦ X227 Introduce @firstpass and @secondpass comments. §863 I

X228 Change p to r when you mean r. §1204 T X108 ↦ X229 Say page, not pages, if there’s only 1. §642 I

X230 Insert space before [] on truncated \showlists. §182 I

28 Aug 1982 • Back from vacation after having looked at hardcopy listing of TRIP test.

X231 Allow dm as a unit [later .5dm1 will be .5\dimen1]. §455 G X108 ↦ X232 Singularize prevgraf 1 lines. §219 I

X233 Omit trailing zero count registers when showing completed page numbers. §638 I X234 Avoid clobbering a by introducing a new local variable t. §986 L

X216 ↦ X235 Fix diagnostic printing of discretionaries. §858 D

X236 Don’t show unset stretch/shrink that’s zero. §185 I X198 ↦ X237 Make \halign in displays consistent with other displays. (Namely, ignore

\leftskip and \rightskip in nonaligned displays; respect the paragraph shape in aligned displays.) §800, 1199 C

X238 Parenthesize ‘If you're confused ...’. §403 I X239 Say ‘\fraction’, not ‘\xabovex’. §697 I X240 Remember to return when you should. §1153 F X241 Use absolute value to make sure div is unambiguous. §737 P

X218 ↦ X242 Don’t confuse depth with height. §709 B X243 Use delta − height , not height − delta . §736 B X244 Increase shift down to increase the clearance. §745 B X245 Don’t back up after improper use of \the. §428 I X246 Don’t give 0pt as the default result when looking for tok val . §428 I X247 Initialize second indent in the easy case. §848 F X248 Package the equation number. §1204 F X249 Don’t resort to v ← max dimen when glue doesn’t stretch or shrink. §1148 Q X250 Insert newline before showing current \botmark. I X251 Call error after giving error message. §784 F X252 Change implementation of \number; it should scan int , not something internal. §471 A X253 Introduce symbolic constants like format area length . §524 P X254 Change quit to jump out , since some compilers treat quit as a reserved word. §81 P X255 Add more parentheses to get proper parsing. §1260 L X256 Say please in order to be friendly (or at least polite). §360 I X257 Don’t confuse cur vcmd with cur chr . §508 B X258 Use & instead of ! to specify a preloaded format. §1337 I

X177 ↦ X259 Correct s3 to s4. §88 T X260 Introduce new primitive \mathchardef, to save space and time. §1224 G X261 Use the [] convention for noads as well as nodes. §692 C X262 Correct spelling in call to primitive: \xatopx should be \xoverx [later renamed,

thank goodness]. §1178 T

30 Aug 1982

X263 Don’t fetch link (null ) in malformed list. §175 R X264 Initialize align state at a better time so that align peek doesn’t see & or \span.

§785, 791 S

X265 Outlaw preamble interfering with align state = 0. §789 S X266 Add level of grouping to alignment to tabskip locality. §774 C X267 Check align state when scanning ⟨u_{j}⟩. §783 F X268 Move ‘unsave; new save level ’ from main control into fin col . §791, 1131 A

X180 ↦ X269 Remember cur chr when you’re looking for optional ‘=’. §1243 S X270 Change q to r [in code now obsolete]. §804 T X271 Disable interrupts during back error so that help messages aren’t clobbered. §327 I X272 Introduce slow print for printing control sequences. §60 S X273 Initialize del code(".") ← 0 for error recovery. §240 I X274 Call end file reading before calling check outer validity . §362 S X275 Don’t delete an extra ‘}’ when \par will help find a runaway. §395 I

31 Aug 1982

X276 Don’t confuse thin muskip with thin muskip code. §413 B X266 ↦ X277 Recover from error if new align group ends abnormally. §1132 F

X278 Recover from error if \par occurs when align state < 0. §1094 I

X279 Make \hskip\the\thinmuskip and \mskip\the\baselineskip erroneous.  §413 C

X280 Add \muskip and \setmuskip analogs to skip and \setskip. §413, 1228 G X281 Don’t output pop right after push. §601 E

• The TRIP test looks right; now to test for wasted memory.

• When memory should be empty I find dyn used = 18, var used = 267.

1 Sep 1982

• Made special MEMTEX program, designed to track all memory allocation. X282 Delete reference to last glue when a page is packaged. §1017 D X283 Include save stack in the search mem debugging routine. §285 I X284 Disallow \vfill in restricted horizontal mode. §1095 C

• Most of the memory locations I thought were wasted were actually in good use.

• Total 192 hours (approx) debugging time so far since July 15.

2 Sep 1982

• Now looking at all zero counts in profile and extending TRIP. X285 Simplify the creation of vtop boxes. §1087 E X286 Set space factor ← 1000 after \hbox. §1076 C X287 Introduce preamble into DVI format. §617 P X288 Give special chr code to \relax. §265 S X289 Don’t show ‘(null)’ when token list is null, just show nothing. §295 I X290 Delete the procedure write name string , which is never used. E

X291 Rename \xabovex to \abovewithdelims; do the same for \xatopx and \xoverx.

§1178 C

X292 Improve clean box so that it recognizes cleanliness better. §720 Q X293 Report a Missing delimiter more meaningfully. §1161 I X294 Give endv token a chr code of 128 so that it will end a file name. §289 R X295 Test present of math fonts after parsing an mlist, not before. §1138, 1195 R X296 Omit ‘recent contributions’ and/or ‘current page’ when they are empty.

§218, 986 I

X297 Display what TEX has deleted after improper discretionary list has arisen. §1121 I X298 Show what math character was undefined. §723 I X299 Improve the Incompatible magnification error; break it into two lines. §288 I X300 Put new cases into flush node list , to recycle mlist noads. §698 D

6 Sep 1982

X300 ↦ X301 Insert a necessary ‘goto done’ in that new material. §698 F

• It took two hours to diagnose that goto problem.

X295 ↦ X302 Change ‘2’ to ‘3’ in help message for extension fonts. §1195 T X303 Add a special note if material is being held over for the next output. §986 I X304 Divide before multiplying in make left right , to avoid overflow. §762 R X305 Introduce the box error routine. §992 I X306 Clear arith error after overflow has been reported. §460 F

X249 ↦ X307 Don’t confuse stretch with glue stretch . §1148 B X308 Set glue sign ← normal when packaging with glue ratio zero. §558, 664 D X309 Test for overflow before attaching the sign. §448 A

• That all worked! Now trying min_quarterword negative. X310 Take absolute value before applying mod in new trie op. §944 L X311 Say qi (c), not c, when testing TFM flags [now obsolete]. §573 L X312 Initialize token ref count (def ref ) to null , not zero. §473 L X313 Change the type of vsplit parameter n from quarterword to eight bits . §977 L X314 Initialize null-delimiter different form null character . §685 L X315 Insert qi twice in scan delimiter . §1160 L X316 Insert qi in scan math . §1151 F X317 Insert qo in fetch . §722, 723 F X318 Insert qi in set math char . §1155 F X319 Insert qi in math ac. §1165 F X320 Insert qo in mlist to hlist . §755 F X321 Use brackets around 8-bit characters in print ASCII . §68 I X322 Include hyph list in the search mem debugging routine. §933 I

• Now compiling non-INITEX to try an industrial-strength version. X323 Add return to final cleanup, because some Pascal compilers insist that each

label be used. §1335 L

X324 Compute par token when undumping. §1314 D

11 Sep 1982

X325 Emit newline before file name, if near end of line. §537 I X326 Define \ifx for arbitrary tokens. §507 C

12 Sep 1982

X327 Don’t ask users to type x twice before exiting. §84 I X328 Install new features \openin, \read, \ifeof, \closein; rename existing \open,

        \send, \close to be \openout, \write, \closeout.  §209, 313, 1275 G

X329 Install new feature \expandafter. §368 G X330 Change the default file area from ‘<TeX>’ to ‘TeXinputs:’. §574 P

13 Sep 1982

X331 Install new feature \string. §472 G X332 Remove spurious space printed by sprint_cs. §263 A

• All tests passed now! But when I played with the system I found another bug

(undetected by TRIP):

X333 Set r ← s after matching macro parameter tokens. §397 F

16 Sep 1982

X199 ↦ X334 Introduce serial numbers in line-break records, improving readability and in-

dependence. §846 I

X335 Don’t abort when file name size is exceeded. §519 I

17 Sep 1982

X336 Remove unwanted period from font capacity message. §567 I

18 Sep 1982

X329 ↦ X337 Make \expandafter more powerful by moving it from semantics to syntax [i.e., from stomach to mouth]. §368 G

19 Sep 1982

X338 Improve error recovery for ‘Missing number’. §415 I

22 Sep 1982

X339 Suppress italic correction between letters in math mode except in math fonts. §752 Q

24 Sep 1982

X340 Define null = mem bot , not min halfword , because there’s a reference to

link (null ) in try break . §115 P

X341 Initialize str start [0] ← 0. §47 D X342 Avoid blank space at beginning of line. §638 I X343 Set type of new box in math mode to ord noad , not inner noad . §1076 D

28 Sep 1982 • Here are the first changes made to the preliminary listing of TEX82 that was

published by the TEX project earlier this month. 520 Insert the missing cases letter and other char after x token looks ahead. §1038 F 521 Change ‘\pause’ to ‘\pausing’. §236 C 522 Reset overfull rule when determining tabskip glue. §804 D 523 Fix the logic for scanning \ifcase [in obsolete syntax—everything is still done

with braces since ‘\fi’ doesn’t exist yet]. §509 A

30 Sep 1982

524 Change "0.0" to "?.?" (suggested by DRF). §186 I

2 Oct 1982

525 Use conditional thin spacing next to ‘Inner’ noads. §764 Q 526 Make thick spaces conditional. §766 Q

4 Oct 1982

527 Increase trie size from 7000 to 8000, because of Frank Liang’s improved (but longer) hyphenation patterns. §11 P

6 Oct 1982

X330 ↦ 528 Change the string lengths to match the new TEX format default . §520 F • Version 0 of TEX is being released today!

8 Oct 1982

529 Fix a blunder: I decreased h mod a quarterword when it should have been decreased mod trie op hash size (HWT). §944 B

9 Oct 1982

X258 ↦ 530 Fix a typo (‘!’ not ‘&’) in the WEB documentation. §524 P

531 Remember to call initialize if a different format was preloaded (Max Díaz). §1337 F • Version 0.1 incorporates the above changes.

12 Oct 1982

532 Add the ‘\immediate’ feature, by popular request. §1375 G • Version 0.2 incorporates this (somewhat extensive) change.

13 Oct 1982

533 Introduce new WEB macros so that glue ratio is more easily changed. §109 P

• I began writing The TEXbook today: edited the old preface and searched in the library for quotations.

14 Oct 1982

534 Change the type of hd to eight bits ; it’s not a quarterword (HWT). §649 B X281 ↦ 535 Revise the optimization of DVI commands: It’s not always safe to eliminate pop

when the preceding byte is push , since DVI commands have variable length!

(Embarrassing oversight caught by DRF.) §601 S

15 Oct 1982

536 Test ‘prev depth > ignore depth ’, not ‘≠’. §679 C • Version 0.3 incorporates the above changes.

16 Oct 1982

537 Omit definition of align size; it’s never used (Bill Scherlis). §11 P 538 Inhibit error messages when packaging box 255. §1017 I

21 Oct 1982

X145 ↦ 539 Subtract width (q) from page goal , don’t add it to page so far [1]. §1009 A • Version 0.4 incorporates the above changes.

22 Oct 1982

540 Increase the amount of lower (variable-size) memory from 12000 to 13000, since the TEX program listing now needs about 11500. [At this time there still is a fixed boundary between upper and lower memory.] §12 P

541 Add a new parameter \boxmaxdepth. §1086 G • Version 0.5 incorporates the above changes.

26 Oct 1982

542 Fix an off-by-one error caught by Gabi Kuper and HWT. (I forgot ‘ + 1’). §1317 B 543 Fix the spacing of displayed control sequences: print cs should base its decision

on cat code(p − single base), not cat code(p). §262 B • The TRIP test detected this bug, but I didn’t notice.

27 Oct 1982

544 Set math type before saying fetch (nucleus (q)), since fetching can have a side effect. §752 S

28 Oct 1982

545 Install a major change: Fonts now have identifiers instead of code letters. Elim-

inate the ‘\:’ primitive, and give corresponding new features to ‘\the’. §209 G • Actually I began making these changes on October 26, but I needed two days

to debug them and to put Humpty Dumpty together again.

• At this time I’m also drafting macros for typesetting The TEXbook.

• The above changes have been incorporated into Version 0.6.

30 Oct 1982

• After years of searching, I’ve finally found a definitive definition of the printer’s point; and (unfortunately) my previous conjecture was wrong. The truth is that 83 pc = 35 cm, exactly; so I am changing TEX to conform.

546 Revise unit definitions for the ‘real’ printer’s point. §458, 617 C

• Version 0.7 incorporates the above.

1 Nov 1982

• Oops! Retract error #546, and retract TEX Version 0.7; the source of my information about points was flaky after all. My original suppositions were correct, as confirmed by NBS Circular 570.

4 Nov 1982

547 Revise the definition of dd, conforming to the definitive value shown me by

Chuck Bigelow. §458 C

545 ↦ 548 Introduce “frozen” copies of font identifiers, to be returned by \the\font, so

that font manipulation is more robust. §1257 R

5 Nov 1982

549 Reset looseness and paragraph shape when beginning a \vbox. §1083 D

6 Nov 1982

550 De-update align state when braces are in constants. §442 D X294 ↦ 551 Improve error recovery for bad alignments. §1127 I

• Today I wrapped up Chapters 4 and 5.

8 Nov 1982

552 Give more power to \let: the right-hand side needn’t be a control sequence. §1221 G 553 Amend show context to say ‘(base ptr = input ptr ) ∨ ’; otherwise undefined

control sequences can be invisible in unusual cases (John Hobby). §312 I 554 Compute demerits more suitably by adding a penalty squared, instead of adding

penalties before squaring. §859 A • Previously a slightly loose hyphenated line followed by a decent line was con-

sidered worse than a decent hyphenated line followed by a quite loose line.

10 Nov 1982

555 Save a bit of buffer space by declaring pool file only in INITEX. §50 E

11 Nov 1982

556 Introduce a new context indicator to clarify TEX’s scanning state: A special type called backed up is distinguished from other kinds of inserted lists; it is called ‘recently read’ or ‘to be read again’, while others are called ‘inserted’. §314 I

557 Append a comment, ‘treated as zero’, to the missing-number message. §446 I 558 Ignore the settings of \hfuzz or \vfuzz if \hbadness or \vbadness is less than

100. §666, 677 I

13 Nov 1982

• Major surgery on the program is planned for today, because of new ideas sug-

gested by correspondence with MDS and other macro writers. 559 Introduce a new \tokens register; this will be useful and easy to add, since

TEX already can handle \everypar and \output. §1227 G X34 ↦ 560 Change get x token to get token when scanning an optional space; then a con-

struction like \def\foo{...}\foo won’t complain that \foo is undefined. §443 C • This change was retracted when it was being debugged, because it could cause

endv to abort the job. Then it was re-established again when I found that endv needed to be more robust anyway. [But it was eventually rescinded again.]

561 Make \span mean ‘expand’ in a preamble. §782 G 562 Use three separate if tests instead of ‘∧’ in the inner loop of get next , to gain

efficiency. §342 E 563 Introduce get r token so that assignments have uniform error messages and so

that frozen equivalents cannot be changed. §1215 R • I gave a few variables more mnemonic names as I made these changes.

564 Move conditional statements from the semantics (‘stomach’) part of TEX to the syntax (‘mouth’) part, by introducing ‘\fi’. Also introduce \csname and \endcsname. §372, 489–500 C

• This makes macros much more predictable and logical, but it is by far the most drastic change ever made to TEX. The program began to come back to life only after three days of solid hacking.

• Several other things were cleaned up as part of this change because it is now more natural to handle them differently. For example, a null control sequence has now become more logical.

• The result of all this is called Version 0.8.

18 Nov 1982

• Today I resumed writing Chapter 8. Tomorrow I’m 2^{14} days old!

21 Nov 1982

565 Declare c as a local variable for hyphenation (DRF). §912 F 566 Omit the “first pass” and try hyphenations immediately, if \pretolerance is

negative (suggested by DRF). §863 E 567 Don’t ship out incredibly huge pages; they might foul up DVI files. §641 R

2 Dec 1982

568 Add new features \everymath and \everydisplay. §1139, 1145 G 569 Add a new feature \futurelet. §1221 G

• The changes above have been incorporated into Version 0.9 of TeX.

7 Dec 1982

570 Add a new \endinput primitive (suggested by FY). §362, 378 G

8 Dec 1982

571 Try off save, if \par occurs in restricted horizontal mode. (This avoids embarrassment if TEX says ‘type a command or say \end’, then when you type \end it says you can’t!) [However, I soon retracted this change.] §1094 I

21 Dec 1982

572 Redefine \relax so that its chr field exceeds 127. (This facilitates the test for

end in scan file name.) §265 A

566 ↦ 573 Call begin diagnostic when omitting the first pass of line breaking. §863 F

574 Fix the logic of glue scanning: In \hskip-1pt plus2pt the minus should apply

only to the 1pt. §461 A

23 Dec 1982

575 Renumber the decimal codes in paragraph statistics for loose and tight lines;

they were ordered backwards. §817 I 576 Treat a paragraph that ends with leaders like a paragraph that ends with glue. §816 C 577 Allow commas as alternates to radix points, for Europeans. §438 C 578 Change \hangindent to a normal dimension parameter. [It had been a combi-

nation of \hangindent and \hangafter, with special syntax.] §247 C 579 Make \prevgraf accessible to users. §422, 1244 G

580 Split \clubpenalty off from \widowpenalty.  §890 G

• I’m typing Chapter 14 while making these changes.

24 Dec 1982

581 Use back input instead of goto reswitch when inserting \par, because \par may have changed. §1095 S

25 Dec 1982

• It’s 10pm after a very Merry Christmas!

X328 ↦ 582 Don’t prompt for a new file name if \openin doesn’t find a file. §1275 I 583 Add a new \jobname primitive. §472 G 584 Give the user a way to delete the dollar sign, when TEX decides to insert one. §1047 I 585 Allow optional equals after \parshape, and implement \the\parshape. §423, 1248 C

26 Dec 1982

586 Add an if line field to the condition stack entries, so that more informative

error messages can be given. §489 I

549 ↦ 587 Introduce a normal paragraph procedure, since initialization is needed also

      within \insert, \vadjust, \valign, \output.  §1070 D

27 Dec 1982

588 Give users access to \pagetotal and \pagegoal. (Analogous to #679 and

#585, but simpler.) §1245 G

X199 ↦ 589 Introduce \tracingpages, allowing users to see page-optimization calculations.

      Also split \tracingparagraphs off from \tracingstats.  §987, 1005, 1011 I

• The changes above have been incorporated into Version 0.91 of TEX.

31 Dec 1982

590 Break the build page procedure into two parts, by extracting the section now called fire up. [This is necessary because some Pascal compilers, notably for IBM mainframes, cannot deal with large procedures.] §1012 P

564 ↦ 591 Make \ifodd1\else legal by introducing if code. §489 S

592 Improve alignments when columns don’t occur: Don’t append null boxes for columns missing before \cr, and zero out the tabskip glue after nonpresent columns. §802 Q

593 Make the error message about overfull alignment more intelligible. §801, 804 I

• The changes above have been incorporated into Version 0.92 of TEX82, which was the last version of 1982, completed at 11:59pm on December 31.

3 Jan 1983

• Today I’m beginning to write Chapter 15, and planning the \output routine

      of plain.tex.

X186 ↦ 594 Change the logic of its all over ; use max dead cycles here too, instead of the

fixed constant 100. §1054 C

X34 ↦ 595 Don’t forget to pop nest when an insert is empty. Also disallow optional space after \insert n {...}. §1100 F

4 Jan 1983

541 ↦ 596 Use the \boxmaxdepth that’s declared inside a \vbox when packaging it. §1086 C

597 Rename \groupbegin and \groupend as \begingroup and \endgroup.  §265 C

594 ↦ 598 Make \deadcycles accessible to users. §1246 G

599 Base the split insertions on natural height plus depth, not on delta . §1010 Q • The changes above have been incorporated into Version 0.93.

6 Jan 1983

600 Add push math to handle a case where I forgot to clear incompleat noad . (This

long-standing bug was unearthed today by Phyllis Winkler.) §1136 D

588 ↦ 601 Add \pageshrink, etc., too. §1245 G

602 Introduce new parameters \floatingpenalty, \insertpenalties. Also adopt a new internal representation of insertion nodes, so that \floatingpenalty, \splittopskip and \splitmaxdepth can be stored with each insertion. §140, 1008 G

7 Jan 1983

603 Improve the rules for entering new line, in particular when the end-of-line character is active. §343 Q

9 Jan 1983

604 Distinguish between implicit and explicit kerns. §155, 896 Q

605 Change the name \ignorespace to \ignorespaces.  §265 C

560 ↦ 606 Don’t omit a blank space after \def, \message, \mark, etc.; the previous hodge-

podge of rules is impossible to learn. §473 C • The above changes appear in Version 0.94.

12 Jan 1983

• Beginning to write the chapters on math today. 607 Add a new feature: active characters in math mode. §1151 G

15 Jan 1983

608 Fix a surprise bug: ‘$1-$’ treated the - as binary. §729 A 609 Initialize space factor inside discretionaries. §1117 D

16 Jan 1983

610 Fix an incredibly embarrassing bug: I forgot to update spotless in the error

routine! F • While fixing this, I decided to change spotless to a more general history vari-

able, as suggested by IBMers who want a return code. §76, 82, 1335 611 Replace two calls of confusion by attempts at error recovery, in places where

‘This can't happen’ could actually happen. §1027, 1372 I

18 Jan 1983

612 Introduce the normalize selector routine to protect against startup anomalies when the transcript file isn’t open. Also make open log file terminate in some cases. §92, 535 R

591 ↦ 613 Insert \relax, not a blank space, to cure infinite loop like \ifeof\fi (LL). §510 R

614 Change the old \limitswitch to \limits, \nolimits, and \displaylimits.

Incidentally, this fixes a bug in the former positioning of integral signs. §682, 749 G 615 Give a \char in math mode its inherited \mathcode. §1151 C

525 ↦ 616 Make underline, overline, radical, vcenter, accent noads and {...} all revert to type Ord instead of type Inner. Introduce a new primitive \mathinner. (This fixes the spacing, which got worse in some ways after change #525.) §761 Q

• I’m working on Appendix G today.

19 Jan 1983

617 Introduce a \mathchoice primitive. §1174 G 618 Move \input from the stomach to the mouth. §378 C

X260 ↦ 619 Introduce \chardef, analogous to \mathchardef. §1038, 1224 C 620 Change \unbox to \unhbox and \unvbox; also add \unhcopy. §1110 G 621 Consider \spacefactor, \pagetotal, etc., as part of prefixed command , even

though they are always global. §1211 C

20 Jan 1983

622 Switch modes when \hrule occurs in horizontal mode or \vrule in vertical.

§1090, 1094 C

623 Add a new \globaldefs feature. §1211 G

21 Jan 1983

624 Optimize the code, in places where it’s important (based on frequency counts of TEX usage accumulated during the past week): Introduce fast get avail and fast store new token ; reduce procedure-call overhead in begin token list , end token list , back input , flush node list ; change some tests from ‘if a ∧ b’ to ‘if a then if b’. §122, 371 E

22 Jan 1983

625 Save space in math lists: Don’t insert penalties within restricted horizontal

mode; simplify trivial boxes. §721, 1196 E 626 Fix a surprising oversight in the rebox routine: Ensure that b isn’t a vbox. §715 S

545 ↦ 627 Make \nullfont a primitive, so that cur font always has a value. (This is a dramatic improvement over TEX78, where a missing font was a fatal error called ‘Whoa’!) §552 C

24 Jan 1983

586 ↦ 628 List all incomplete \if’s when the job ends. §1335 I

29 Jan 1983

552 ↦ 629 Change initialization of align state so that \halign\bgroup works. §777 C

30 Jan 1983

625 ↦ 630 Be sure to test ‘is char node(q)’ when checking for a trivial box. §721 D

• By extraordinary coincidence, this bug was caught when somebody used font

number 11 (= kern node) in the second character of a list of length 2!

X168 ↦ 631 Improve format for stats at end of run, as suggested by DRF. §1334 I

• The changes above have been incorporated into Version 0.95. 632 Don’t ignore the space after a control symbol (except ‘\ ’). §354 C 633 Remove all trailing spaces at the right of input lines, so that there’s perfect

compatibility with IBM systems that extend short lines with spaces. §31 P

3 Feb 1983

634 Assume that a math accent was intended, after giving an error message in the

case mmode + accent . §1165 I 635 Add new primitives \iftrue and \iffalse. §488 G

6 Feb 1983

X304 ↦ 636 Improve the accuracy of fixed-point arithmetic when calculating sizes for \left and \right. (I had started by dividing delimiter factor , not delta1 , by 500.) §762 A

12 Feb 1983

637 Change the name \delimiterlimit to \delimitershortfall.  §248 C

638 Make \abovewithdelims.. equivalent to \above; change the order of operands

so that delimiters precede the dimension. §1182 C

607 ↦ 639 Remove the kludgy math codes introduced earlier; make \fam a normal integer

parameter and allow \mathcode to equal 2^{15}. §1233 C 640 Don’t let \spacefactor become more than 2^{15}. §1233, 1243 R

• I finished drafting Chapter 17 today.

14 Feb 1983

639 ↦ 641 Replace octal output (print octal ) by hexadecimal (print hex ) so that math

codes are clearer. §67 I

619 ↦ 642 Don’t forget char given in the math accent routine. §1124 F

17 Feb 1983

622 ↦ 643 Switch modes when \halign occurs in horizontal mode, or \valign in vertical mode. §1090, 1094 C

18 Feb 1983

644 Add a new feature \tracingrestores. This requires a new procedure called show eqtb, whose code can be interspersed with the eqtb definitions. §252 I

25 Feb 1983

622 ↦ 645 Suggest using \leaders when the user tries a horizontal rule in restricted horizontal mode. §1095 I

27 Feb 1983

646 Specify the range of source lines, when giving warning messages for underfull

or overfull boxes in alignments. §662, 675 I • Why did it take me all day to type the middle part of Chapter 18?

4 Mar 1983

647 Introduce a new feature \xcr (suggested by LL). [Changed later to ‘\crcr’.] §785 G 631 ↦ 648 Subtract out TEX’s own string requirements from the stats. §1334 I

6 Mar 1983

649 Add new features \everyhbox and \everyvbox. §1083, 1167 G

9 Mar 1983

X295 ↦ 650 Avoid accessing math quad when the symbol fonts aren’t known to be present. §1199 R 533 ↦ 651 Introduce float and unfloat macros to aid portability (HWT). §109 P

652 Introduce new names \abovedisplayskip and \belowdisplayskip for the old
      \dispskip; also \abovedisplayshortskip and \belowdisplayshortskip for
      the old \dispaskip and \dispbskip.  §226 C

10 Mar 1983

653 Unbundle \romannumeral from \number (suggested by FY). §468 C

12 Mar 1983

654 Ignore leading spaces in scan keyword . §407 C

14 Mar 1983

631 ↦ 655 Use write and write ln directly when printing stats. §1334 E

16 Mar 1983

602 ↦ 656 Refine the page-break cost function (introducing ‘deplorable’, which is not quite

‘awful bad ’), after suggestion by LL. §974, 1005 Q • The changes above have been incorporated into Version 0.96.

18 Mar 1983

657 Add a new feature \everyjob suggested by FY. §1030 G

19 Mar 1983

658 Don’t treat left braces specially when showing macros. §294 I 659 Ignore blanks that would otherwise become undelimited arguments. §393 C

21 Mar 1983

X280 ↦ 660 Make \lastskip handle mu glue as well as ordinary glue. §424 F 561 ↦ 661 Expand only one level in a preamble \span. §782 C

22 Mar 1983

662 Let a single # suffice in \tokens, \message, etc. (The previous rule, in which ## was always required as in macros, was a loser especially in \write where you had to say ####!) §477 C X328 ↦ 663 Require the keyword ‘to’ in \read. (This will avoid the common error of an

incomplete constant when no space appears before the \cs.) Also allow terminal I/O as a default when a stream number is out of range. §482, 1225, 1370 C

26 Mar 1983

664 Replace \ifeven⟨countnumber⟩ by \ifodd⟨number⟩, for better consistency of

language. §504 C

564 ↦ 665 Introduce the change if limit , to overcome a big surprise bug relating to \if\if

      aabc\fi.  §497 S

• Such examples show that cur if might not be current, in my original implementation.

28 Mar 1983

X326 ↦ 666 Tolerate non-characters as arguments to \if and \ifcat. §506 G 667 Change ‘absent’ to ‘void’, a better word. §487 C 668 Clear the shift amount in \lastbox, since I don’t want to figure out what it

means in all cases. §1081 C

29 Mar 1983

669 Wake up the terminal before giving an error message. (This means a special print err procedure is introduced.) (Suggested by DRF.) §34, 73 I

1 Apr 1983

• Today I finished Chapter 21 (boxes) and began to draft Chapter 22 (align-

ments). 670 Allow periodic preambles in alignments. §793 G 671 Make \leaders line up according to the smallest enclosing box. §627, 636 C 672 Allow hyphenation after whatsits (e.g., after items for an index). §896 Q

2 Apr 1983

673 Call build page when \par occurs in vertical mode. §1094 Q 674 Clear aux in init row , for tidyness. §786 C

4 Apr 1983

675 Let digits switch families in math mode. §232 C

7 Apr 1983

602 ↦ 676 Refine the test for not splitting an insertion. §1008 Q

8 Apr 1983

647 ↦ 677 Rename \xcr as \crcr, at LL’s request. §780 C

9 Apr 1983

• Took a day off and had a chance to help print a sample page on a 150-year-old letterpress in Murphys, California.

11 Apr 1983

678 Recover more sensibly after a runaway preamble. §339 I

12 Apr 1983

X328 ↦ 679 Make \read span several input lines, if necessary to get balanced braces. §482 C

14 Apr 1983

680 Fix a subtle bug found by JS: §882 can make q a char node, so we need to test ‘if ¬is char node(q)’. [Actually I discovered much later that the real bug was to omit ‘else’ at this point.] §881 S

15 Apr 1983

681 Make \uppercase and \lowercase apply to all characters, regardless of category. §1289 C • 7:30am. After working all night, I completed a draft of the manual thru Chapter

22, for distribution to volunteer readers.

• 5pm. The changes above have been incorporated into Version 0.97.

17 Apr 1983

682 Change ‘small number ’ to ‘0 . . 65’ in the hyphenation routine (DRF). §901 R 683 Flush patterns in the input when the user tries \patterns outside of INITEX

(suggested by DRF). §1252 I • Tomorrow I fly to England, where I’ll lecture and write a paper about ‘Literate

Programming’ [Comp. J. 27 (1984), 97–111].

14 May 1983

663 ↦ 684 Improve the behavior of \read from terminal (suggested by Todd Allen at Yale). [I’d forgotten to implement the extended stream numbers in #663. Also, the prompt is now omitted if n < 0.] §484 I

18 May 1983

685 Restrict \write n to the transcript file only, if n < 0. §1350 I X188 ↦ 686 Unify the syntax for registers and internal quantities. (Remove primitives called

‘\insthe’ and ‘\minusthe’; rename scan the to scan something internal , and change its interface accordingly; clean up command codes generally.) §209, 413 C

687 Introduce new parameters \hoffset, \voffset. §617 G

24 May 1983

688 Introduce a new parameter \everycr (suggested by MDS). §774, 799 G

• Many macro writers and preliminary-manual readers have been requesting new features; I’ll try to keep the language as concise and consistent as possible.

25 May 1983

689 Introduce \countdef, \dimendef, etc. (suggested by DRF long ago, easy now

in view of #686). §1224 G 690 Introduce \advance, \multiply, \divide (suggested by FY). §1240 G 691 Introduce \hyphenchar; this requires a new command assign font int , plus

minor changes to about 15 modules. §915 G 692 Introduce \skewchar (easy because of #691). §741 G 693 Introduce \noexpand. (I had difficulty thinking of how to implement this one!)

§358, 369 G

694 Introduce \meaning. §296 G X231 ↦ 695 Remove ‘dm’ and ‘vu’; allow the more general ‘.5\hsize’. §455 G

696 Change ‘\texinfo f n’ to ‘\fontdimen n f’. §578 C

27 May 1983

697 Add a new feature \afterassignment (suggested by ARK). §1269 G 619 ↦ 698 Adjust the timing so that commands like ‘\chardef\xx=5\xx’ behave sensibly. §1224 C

28 May 1983

699 Ignore ‘\relax’ as if it were a space, in math mode and in a few other places

where \relax would otherwise be erroneous. §404 C 700 Improve \mathaccent spacing with respect to subscripts and superscripts (sug-

gested by HWT). §742 Q

30 May 1983

598 ↦ 701 Terminate a job only when dead cycles = 0. §1054 C • The changes above constitute Version 0.98.

3 Jun 1983

• I finished the draft of Chapter 23 (output routines) today.

702 Allow \mark and \insert and \vadjust in restricted horizontal mode, and also in math mode. (This is a comparatively big change, triggered by the fact that \mark in a display presently causes TEX to crash with ‘This can't happen’!) The global variable adjust tail is introduced. §796, 888, 1085 G

6 Jun 1983

695 ↦ 703 Replace (and generalize) the previous uses of ht, wd, and dp in dimensions by

introducing the new control sequences \ht, \wd, and \dp. §1247 G 704 Display sub-parts of noads with the symbols ^and _instead of ( and [. §696 I

694 ↦ 705 Allow A..F in hex constants to be other char as well as letter . §445 C

7 Jun 1983

654 ↦ 706 Remove an instance of ⟨Scan optional space⟩, since it’s now redundant. §457 E

707 Legalize \mkern\thinmuskip and \mkern5\thinmuskip.  §456 C

708 Clean up the treatment of optional spaces in numerical specifications. §455 C

• A construction like 2.5\space\space\dimen0 was previously valid after ‘plus’ or ‘minus’ only!

• I’m obviously working on Chapter 24 today.

545 ↦ 709 Allow ‘\font’ as a ⟨font identifier⟩ for the current font. §577 C 623 ↦ 710 Don’t make \gdef global when global defs < 0. §1218 C

711 Produce zero glue as the outcome of \advance\spaceskip by-\spaceskip. §1229 E 712 Make \show do something appropriate for every possible token. §1294 I

559 ↦ 713 Replace the (single) \tokens parameter by an array of 256 token registers. §230 G

714 Allow \indent in math mode; also make \valign in math mode produce the

‘Missing $’ error. §1046, 1093 C 715 Remove redundant code: There’s no need to check cur group or call off save

when starting alignments or equation numbers in displays. §1130, 1142 E

8 Jun 1983

716 Disallow \openout-1 and \closeout-1.  §1350 C

717 Disallow \lastbox in math mode. §1080 C

9 Jun 1983

718 Call back error , not error , when \leaders aren’t followed by proper glue. §1078 I 719 Initialize for a possible paragraph, after \noalign in a \valign. §785 D

10 Jun 1983

708 ↦ 720 Expand the optional space after an ASCII constant. §442 C

12 Jun 1983

721 Set space factor ← 1000 after a rule or a constructed accent. §1056, 1123 C

14 Jun 1983

722 Correct a serious blunder: Set disc width ← 0 before testing if s is null (caught

by JS). §869 D • This is a real bug that existed since the beginning! It showed up on page 37 of

the Version 0 TRIP manual, but I didn’t notice the problem.

708 ↦ 723 Make optional spaces after ⟨dimen⟩ like those after ⟨number⟩. §448 C 568 ↦ 724 Insert every display before calling build page. §1145 C 648 ↦ 725 Report TEX’s capacity on overflow errors in a way that’s fully consistent with

other statistical reports. §42 I

17 Jun 1983

726 Make all \tracing decisions on the basis of ≥ versus <, not ≠ versus =. §581 C • Today I finished the draft of Chapter 27 (the last chapter)!

• The changes above were released as Version 0.99 on June 19, 1983.

20 Jun 1983

727 Set \catcode`\%=14 in INITEX.  §232 C

587 ↦ 728 Call normal paragraph when \par occurs in vertical mode. §1094 C • Once again I’m retiring about 8am and awaking about 4pm.

21 Jun 1983

558 ↦ 729 Don’t append an overfull rule solely because of \hbadness. §666 C 730 Don’t allow the glue-ratio of shrinking to be less than −1. §810, 811 R

22 Jun 1983

653 ↦ 731 Declare the parameter to print roman int to be of type integer , instead of

nonnegative integer (found by Debby Clark). §69 B

690 ↦ 732 Make the keyword ‘by’ optional (suggested by LL). §1236 C

24 Jun 1983

733 Say ‘preloaded’ when announcing format ident . §1328 I

25 Jun 1983

734 Add extra boxes and glue to the output of alignment. [This thwarts possible attempts at trickery by which system-dependent glue set values computed by \span could have gotten into TEX’s registers by things like \valign and \vsplit. It also has the advantage of perfect accuracy in alignment of vertical rules.] §809 R

735 Make leaders affect the height or width of the enclosing boxes. §656, 671 C

• Today I’m mainly installing a much-improved format for change files in WEB programs (suggested by DRF).

28 Jun 1983

736 Permit \unskip in vertical mode when we know that it does nothing. §1106 C

1 Jul 1983

700 ↦ 737 Avoid redundant boxes when things like ‘{\bf A}’ occur in math. §1186 E

738 Add a ‘scaled’ feature to \font input. §1258 G 700 ↦ 739 Remember to correct delta when an accented box changes. §742 D

2 Jul 1983

740 Introduce bypass eoln , to remove anomalous behavior on input files of length 1. (Suggested by DRF after the problem was discovered by LL). §31 R

4 Jul 1983

741 Allow codes like ^^b as well as ^^B. §352, 355 G

742 Introduce new parameters \escapechar, \endlinechar, \defaulthyphenchar,

and \defaultskewchar, to make TEX less dependent on the character set. (This affects many modules, since a lot of error messages must be broken up so that they use print esc.) G

7 Jul 1983

743 Use a system-dependent function erstat when opening or closing files (suggested by DRF). §27 P

11 Jul 1983

• The computer is back up after more than 50 hours down time (due to air

conditioning failure). 744 Show total glue in the output of \tracingpages. §985 I 745 Guard against insertion into an hbox. §993 R 746 Legalize the assignment ⟨tokenvar⟩=⟨tokenvar⟩. §1227 C 747 Introduce a new parameter \errhelp. §1283 I

623 ↦ 748 Don’t forget to check global defs when \tabskip is changed. §782 F

12 Jul 1983

749 Allow an \outer macro to appear after \string, \noexpand, and \meaning

(Todd Allen). §369, 471 C 750 Make ‘\the’ an expandable control sequence (i.e., move it from the stomach to

the throat); this cleans up several annoying glitches. §367 C

620 ↦ 751 Allow \unhbox and \unhcopy in math mode if the box is void. §1110 C

13 Jul 1983

• I lectured for four hours at the TUG meeting today after very little sleep!

16 Jul 1983

• The following were suggested by TUG meeting discussions. 752 Round the value of default rule more properly: It should be 26215. §463 L

700 ↦ 753 Fix \mathaccent again; it’s still not right! The final height should be the maximum of the height of accented letter without superscript and the height of unaccented letter with superscript. §742 Q

754 Add a new feature \newlinechar. §59 G 755 Allow boxes and rules in discretionaries (suggested by somebody from Hewlett-

Packard). §1121 G

X28 ↦ 756 Show all token expansions, not just macros, when \tracingcommands. §367 I 757 Allow \char in a \hyphenation list. §935 C 758 Introduce a new feature \aftergroup; it can be implemented with save stack . §326 G 759 Run the running dimensions to alignment boundaries (suggested by ARK). §806 C

17 Jul 1983

760 Zero out hyf values at the edges, so that weird pattern data cannot lead to

Pascal range checks. §965 R

X190 ↦ 761 Decrease the hc codes for hyphenation, so that code 127 cannot possibly be

matched. §937, 962 R

672 ↦ 762 Allow whatsits after hyphenatable words. §899 C 604 ↦ 763 Represent an italic correction as an explicit kern. §1113 C

18 Jul 1983

764 Allow lowercase letters in file names. §519 C 765 Change the message ‘No output file’ to: ‘No pages of output’. §642 I 766 Confirm that a quiet mode is being entered, when error interaction ends with

Q, R, or S (suggested by ARK). §86 I • Version 0.999 was finally installed today; a new program listing has been

printed.

• From now on, I plan to keep all section numbers unchanged.

• I’m done writing Appendix H; beginning to revise Chapter 20.

25 Jul 1983

663 ↦ 767 Allow space after ‘to’ in the \read command (FY). §1215 C • To bed at 1pm today.

27 Jul 1983

665 ↦ 768 Stack the current type of \if; this precaution is necessary in general (FY). §498 S • To bed at 2pm today.

29 Jul 1983

769 Avoid putting a control sequence in the hash table when it occurs after \ifx.

(Requested by Math Reviews people.) §507 E • Finished a version of The TEXbook lacking only Appendices D, E, and I, for

distribution to interested readers.

• To bed at 10:30pm, planning to arise regularly at 6am for a change.

31 Jul 1983

766 ↦ 770 Call update terminal when going quiet (HWT). §86 I

1 Aug 1983

771 Don’t put an empty line at the end of an \input file! (This simplifies the rules and the program, and also gets around a bug that occurred at the end of files with end line char < 0.) §362 C

• The changes above went into Version 0.9999, which was widely distributed.

16 Aug 1983

665 ↦ 772 Rectify a ridiculous gaffe: I initialized q every time the loop of change if limit

was performed! (Found by FY.) §497 B

648 ↦ 773 Distinguish ‘string’ from ‘strings’ when reporting statistics. §1334 I

774 Introduce lx , to correct a bug in \xleader computations (found by FY). §627 A

20 Aug 1983

775 Don’t forget to apply \/ to ligatures. §1113 F

• Today I began to read all previous issues of TUGboat, in preparation for Ap-

pendix D.

27 Aug 1983

776 Add debugging hack number 16, to help catch subtle data structure bugs. §1339 I 777 Remove redundant setting and resetting of name in progress . §531 E

618 ↦ 778 Suppress \input during a font size spec; otherwise cur name is clobbered

(found by MDS). §1258 S 779 Introduce new conditionals \ifhbox and \ifvbox. §505 G

29 Aug 1983

750 ↦ 780 Test for an empty list, if emptiness will mess up the data structure. (Found by

Todd Allen.) §478 D

624 ↦ 781 Use fast store new token in another place for efficiency. §466 E

782 Say ‘has only’ instead of ‘has’. §579 I

• These changes yield Version 0.99999, used only at Stanford.

30 Aug 1983

783 Make funny blank spaces showable. §298 C

31 Aug 1983

754 ↦ 784 Make \newlinechar affect print char , not just print . §58 C

4 Sep 1983

785 Add new features \lastkern, \lastpenalty, \unkern, \unpenalty. §424, 996, 1105 G

• OK, Appendix D is finished!!

• The above changes have been installed in Version 0.999999.

17 Sep 1983

548 ↦ 786 Don’t bother making duplicate font identifiers; that was overkill, not really

needed. §1258 P • Will this be the historic last change to TEX?

18 Sep 1983

787 Correct a minor inconsistency, ‘display’ not ‘displayed’. §211 I

20 Sep 1983

604 ↦ 788 Treat the kerns inserted for accents as explicit kerns. §1125 C

26 Sep 1983

789 Change ‘log’ to ‘transcript’ in several messages. §535, 1335 I

• The index was finished today; I mailed the entire TEXbook to Massachusetts for final proofreading before publication.

1 Oct 1983

790 Prevent uninitialized trie positions in case of overflow (found by Bernd Schulze). §944 D

7 Oct 1983

• Henceforth our weekly ‘TEX lunch’ meetings will be called ‘ lunch’.

• DRF begins to produce The TEXbook on our APS phototypesetter.

14 Oct 1983

633 ↦ 791 Ignore spaces at the ends of lines also in TEX.POOL (found by DRF). §52 P 610 ↦ 792 Initialize the history variable at start here (DRF). §1332 D

18 Oct 1983

793 Extend runaway to catch runaway text (suggested by FY). §306 I 794 Reset cur cs after back input , not after scanning the ‘=’ (found by FY). §1226 D

24 Oct 1983

638 ↦ 795 Change the error recovery for bad delimiters, in accordance with the changed syntax. (Found by Barry Smith.) §1183 I

9 Nov 1983

796 Optimize the code a bit more, based on empirical frequency data gathered during September and October: In §45, use the fact that the result is almost always true. In §380, delete ‘while true do’ since many compilers implement that badly. Rewrite §852 to avoid calling badness in the most common case. §45, 380, 852 E

3 Dec 1983

797 Don’t forget to call error after the message has been given (noticed by Gabi

Kuper). §500 F • Version 1.0 released today incorporates all of the above.

9 Dec 1983

• Dinner party with 36 guests to celebrate TEX’s coming of age.

2 Feb 1984

786 ↦ 798 Reinstall \font precautions that I thought were unnecessary. I overlooked many problematic possibilities, like ‘{\font\a=x\global\a}\the\font’ and

‘\font\a=x\font\b=x\let\b=\undefined\the\a’, etc. (Found by Mike Ur-

ban.) The new remedy involves removal of the font ident array and putting the identifiers into a frozen part of the hash table; so there’s a sprinkling of corrections in lots of modules. But basically the change is quite conservative, so it shouldn’t spawn any new bugs (it says here). §222, 267, 1257 S

9 Feb 1984

799 Remove the possibility of double interrupt, in a scenario found by Clint Cuzzo. §1031 S

12 Feb 1984

800 Improve spacing in a formula like $(A,<)$. §764 Q

13 Feb 1984

801 Avoid a bad goto, as diagnosed by Clint Cuzzo and George O’Connor. (Must

not go directly to switch .) §346 A 802 Conserve string pool space by not storing file name in two guises (suggested by

DRF). §537 E

26 Feb 1984

803 Make scaled output look cleaner by printing fewer decimals whenever this in-

volves no loss of accuracy. (Suggested by  development.)  §103 I

2 Mar 1984

804 Maintain 17-digit accuracy, not 16; now constants like ‘.00000762939453126pt’ will round correctly. §452 R

16 Mar 1984

805 Plug a loophole that permitted recursion in get next , by disallowing deletions in check outer validity . §336 R

24 Mar 1984

806 Open the terminal before trying to wake it up, when the program starts bad. §1332 I

27 Mar 1984

807 Check that k < 63, to avoid the \patterns{xxx...xxxdxxxdxxx} anomaly found by Jacques Désarménien. §962 R

11 Apr 1984

808 Supply code for the missing case adjust node in copy node list . §206 F • Yoicks, how could serious bugs like that have escaped detection?

11 Jun 1984

627 ↦ 809 Initialize char base, etc., for null font . (Found by Nick Briggs.) §552 D 810 Clear the buffer array initially (Briggs). §331 R

21 Jun 1984

811 Look ahead for ligature or kern after a \chardef’d item (Désarménien). §1038 C

4 Jul 1984

812 Make the quarterword constraint explicit with a new ‘bad ’ case (19). §111 R

7 Jul 1984

813 Optimize firm up the line slightly, to be consistent with the program. §363 E

8 Jul 1984

814 Give additional diagnostics when \tracingmacros>1. §323 I • The changes above were incorporated in Version 1.1, released July 9, 1984.

27 Jul 1984

815 Say ‘see the transcript file’ after handling offline \show commands. (Sug-

gested by  .)  §1298 I

20 Oct 1984

816 Allow ‘0’ in response to error prompts. §84 I • Those two changes led to Version 1.2.

25 Nov 1984

817 Don’t forget to check for null before looking at subfields of a node. (This was

“dirty Pascal,” with two quarterword 0’s read as a halfword.) §846 R 818 Ditto in another place! §939 R 819 Remove the fixed-at-compile-time partition between lower and upper memory.

§116, 125, 162 E

• This major change in memory management completes Version 1.3, which was published in preliminary looseleaf form as ‘TEX: The Program’.

20 Dec 1984

820 Keep the node size field from overflowing if the lower part of memory is too

large. §125 R • That was another bug in existence from the beginning!

5 Jan 1985

821 Improve the missing-format-file error (DRF). §524 I

7 Jan 1985 822 Update the terminal right away so that the welcoming message will appear as

soon as possible (DRF). §61 I

23 Jan 1985

823 Convey more uncertainty in the help message at times of confusion . §95 I 610 ↦ 824 Improve the history logic in the warning issued case. §245 I

18 Feb 1985

810 ↦ 825 Stick to standard Pascal: Don’t use first in a for loop. [Some procedures “threaten” it globally, according to British Standard 6192, section 6.8.3.9.] (Pointed out by CET.) §331 P

11 Apr 1985 826 Prevent nonexistent characters from being output by unusual combinations of

ligatures and hyphenation. §915 S

15 Apr 1985

819 ↦ 827 Compute memory usage correctly in INITEX; the previous number was wrong because of a WEB text macro without parentheses (DRF). §164 L

16 Apr 1985

828 Speed up flush list by not calling free avail (DRF). §123 E

17 Apr 1985

788 ↦ 829 Introduce a special kind of kern for accent positioning; it must not disappear after a line break. §837, 879, 1125 A

18 Apr 1985

755 ↦ 830 Prevent \lastbox and \unkern from removing discretionary replacements.

§1081, 1105 R

• That completes Version 1.4.

26 Apr 1985

831 Don’t try TEX area if a nonstandard file area has been specified (DRF). §537 C • That was #401 in TEX78; I never learn!

30 Apr 1985

754 ↦ 832 Eliminate the limitation on \write length; the reason for it has disappeared (Nancy Tuma). §1370 C

8 May 1985

819 ↦ 833 Allocate two words for the head of the active list (CET). §162 D

11 May 1985

834 Change wterm to wterm ln after a bad beginning (Bill Gropp). §1332 I 806 ↦ 835 Don’t open the terminal twice (CET). §1332 E

22 May 1985

836 Test for batch mode after trying to open the transcript file, not before (DRF). §92 R 837 Be prepared for string pool overflow while reading the command line! (This

bug was first found in  , when it could occur more easily.)  §525 R

7 Aug 1985

      838 Fix a bug in \edef\foo{\iffalse\fi\the\toks0}: TEX should stay in the

loop when expanding non-\the. (Found by Dan Brotsky.) §478 A • The above changes were incorporated in Version 1.5.

27 Nov 1985

764 ↦ 839 Make ‘plain’ a lowercase name, for consistency with the manual. §521 C 669 ↦ 840 Wake up the terminal for \show commands. §1294, 1297 I • The above changes were incorporated in Version 2.0, which was published as

Volume B of the Computers & Typesetting series.

15 Dec 1986

841 Punctuate the Poirot help message more carefully. §1283 I

28 Jan 1987

842 Make sure that max in open doesn’t exceed 127 (DRF). §14 R 680 ↦ 843 Don’t allow a \kern to be clobbered at the end of a pre-break list when a

discretionary break is taken. (A missing ‘else’ was the source of the error, diagnosed incorrectly before.) §881 D

844 Take account of discarded nodes when computing the background width after

a discretionary. §840 D • That was the first really serious bug detected for more than 17 months! I found

it while experimenting with right-to-left extensions.

• Version 2.1 was released on January 26, 1987.

5 Feb 1987

845 Remove cases in shorthand def that cannot occur (found by Pat Monardo). §1224 E

14 Apr 1987

846 Improve robustness of data structure display when debugging (Ronaldo Amá).

§174, 182 R

21 Apr 1987

847 Make the storage allocation algorithm more elegant and efficient. §127 E

22 Apr 1987

742 ↦ 848 Calculate the empty-line condition properly when end line char is absent. §360 A

• The previous three changes were found while I was teaching a class based on Volume B; they led to Version 2.2.

28 Apr 1987

849 Avoid closing a file when TEX knows that it isn’t open (JS). §560 E

3 Aug 1987

850 Clean up unfinished output if it’s necessary to jump out (Klaus Gunterman). §642 S • That makes Version 2.3; subsequent version numbers won’t be logged here.

19 Aug 1987

851 Indent rules properly in cases like

      \hangindent=1pt$$\halign{...\cr\noalign{\hrule}}$$.  §806 A

20 Aug 1987

852 Introduce co backup because of cases like \hskip 0pt plus 1fil\ifdim (Alan Guth). §366 S

9 Nov 1987

853 Change the calculation for number of leader boxes, so that it won’t be too sensitive to roundoff error near exact multiples (M. F. Bridgland). §626 S

17 Nov 1987

854 Replace my stupid algorithm for fixed-point multiplication of negatives (WGS). §572 A

12 Dec 1987

855 Fix a typo in the initialization of hyphenation tables (PB). §952 B

• That error was almost completely harmless, thus undetectable, except if some \lccode is 1 and no \patterns are given.

23 Dec 1987

564 ↦ 856 Be more cautious when “relaxing” a previously undefined \csname; you might be inside a group (CET). §372 S

20 Apr 1988 857 Make sure temp head is well-formed whenever it can be printed in a “runaway”

message: Consider constructions like \outer\def\a0{}\a\a (Silvio Levy). §391 S

24 Apr 1988

618 ↦ 858 Avoid conflicting use of the string pool in constructions like \def\\#1{}\input a\\\z (Robert Messer). §260 S

10 May 1988

859 Amend the \patterns data structure when trie min = 0 (PB). §951, 953 R

25 May 1988

860 Guarantee that trie pointer cannot be out of range. §923 R 618 ↦ 861 Avoid additional bugs like #858 in constructions like \input a\romannumeral1,

etc. §464, 465, 470 S

618 ↦ 862 Prevent similar string pool confusion that could occur during the processing of

            **\input\romannumeral6.  §525 R

19 Jun 1988

819 ↦ 863 Prevent a negative dividend from rounding upward, causing a loop (CET). §126 S 819 ↦ 864 Adopt a smoother allocation strategy when memory is nearly gone (CET). §126 E

20 Jun 1988

852 ↦ 865 Initialize cur order , now that it’s being backed up (Tsunetoshi Hayashi). §439 D

6 Nov 1988

612 ↦ 866 Disable fatal error in prompt input , so that open log file can use it safely (Tim

Morgan). §71 S

836 ↦ 867 Force terminal output whenever open log file fails. §535 S

14 Dec 1988

866 ↦ 868 Restore fatal error in prompt input , but don’t let it be unsafe for open log file.

§92, 534 P

23 Jan 1989

869 Give q a legal value when recovering from “infinite shrinkage” error. §976, 1004 D

17 Feb 1989

758 ↦ 870 Avoid spurious error message for \aftergroup\relax\dump by avoiding inaccessible \aftergroup tokens (FM and Rainer Schöpf). §280 D

20 Mar 1989

871 Don’t refer to link (null ) even when it “can’t happen” (PB). §791 R

7 Jun 1989

872 Avoid confusion from $$\begingroup\halign{#\cr}$$ (FM). §1130 S

20 Jun 1989 873 Put fraction digits into dynamic memory, not the global dig array, because of

constructions like .5\ifdim.6 (FM). §452 S

17 Jul 1989 874 Prevent embarrassing attempts to report errors before the string mechanism

has been fully initialized, for example when the command line exceeds the buffer size (WGS). §31 S

16 Aug 1989

875 Allow integer products to be 31 bits long (FM). §105 M

31 Aug 1989

441 ↦ 876 Increase the number of tokens shown by token show (J. Lavagnino). §295 C 877 Avoid confusion from $$\begingroup\eqno$$ (FM). §1140 S • The recent TUG meeting turned out to be an extend-TEX-for-the-nineties

party! I agreed that some extensions for non-English languages ought to be made while I still knew how to do them. (In other words, I broke my firm commitment to keeping TEX completely stable; but in this case nobody objected.) The following eleven changes were coded during the month of September.

30 Sep 1989

878 Install major change allowing general 8-bit code input. §38, 352 G 879 Install major change allowing multiple hyphenation tables (M. Ferguson). §923 G 880 Introduce new parameters \lefthyphenmin and \righthyphenmin. §923 G 881 Introduce major new ligature capabilities including implicit boundary charac-

ters. §908, 1037 G 882 Install new \inputlineno feature suggested by MDS. §424 G 883 Install new \holdinginserts feature suggested by FM. §1014 G 884 Install new \badness feature. §424, 664 G 885 Install new \emergencystretch feature. §863 G 886 Install new \errorcontextlines feature suggested by FM. §311 G 887 Recover from anomaly when hyphenation char_warning clobbers old_setting. §863 S 888 Make it easier to change the format extension (Don Hosek). §520, 1328 P

16 Oct 1989

889 Avoid range check in null font with bc=256 (PB). §565 R

22 Nov 1989

856 ↦ 890 Prevent save stack conflicts in {\hbox\expandafter{\csname\endcsname}} and

similar constructions (WGS). §645, 1117 S

858 ↦ 891 System-dependent parts of file names must be addressed relatively, not absolutely (FM and Rainer Schöpf). §516, 517 S

3 Dec 1989

880 ↦ 892 Allow different hyphenmins in the same paragraph (M. Ferguson). §1376 G

893 Distinguish \par from characters on \if tests. (MVL). §334 S 378 ↦ 894 Alignments need to be more robust against malicious attacks (MVL). §782 S

895 Don’t let kerns in discretionaries disappear at breaks (MVL). §869 C 881 ↦ 896 Make the new hyphenation reconstruction procedure less cautious, so that it

doesn’t lose hyphens found by the old method. §914 Q

11 Dec 1989

879 ↦ 897 Make an undumped trie dumpable again (PB). §1325 D

18 Dec 1989

588 ↦ 898 Allow access to page totals in \output routines (FM and Chris Rowley). §421 G

22 Jan 1990

611 ↦ 899 Recognize more cases of unbalanced \output (CET). §1026 R

29 Jan 1990

758 ↦ 900 Make \aftergroup work properly after \eqno (Michael Downes). §1194 S

1 Feb 1990

878 ↦ 901 Fix one more case of end line char inactive (WGS). §360 S

22 Feb 1990

902 Don’t lose the last active node when total demerits are very high (FM). §836, 854 R

13 Mar 1990

903 Doublecheck math fonts after making equation number (MVL). §1194 D 904 Don’t forget to rule out charnodes before testing type (MVL). §805, 1202 D

23 Mar 1990

881 ↦ 905 Don’t change the font of punctuation preceding a hyphenated word (Scott C.

Allendorf). §903 F 906 Balance the parentheses shown on the terminal during normal runs. §1335 I 907 Optimize \ifx\p\q after \let\p=\q (MVL). §508 E 908 Treat migration properly in displays (MVL). §1199, 1205 S

• We’re now up to Version 3.0; I sincerely hope all bugs have been found.

11 May 1990

881 ↦ 909 Initialize \nullfont ligature parameters (Lance Carnes). §552 F

22 July 1990

579 ↦ 910 Treat \prevgraf as zero within \write (Bogusław Jackowski). §422 S

26 July 1990

911 Report ‘l.1’ when first line of file overflows buffer (George Russell). §538 S

5 December 1990

878 ↦ 912 Translate unprintable characters in font identifiers (WGS). §63 S

28 December 1990

913 Avoid range check when there are 65536 or more pages (Eberhard Mattes). §642 R

20 September 1991

878 ↦ 914 Improve error message for \mathchar out of range. §436 I 878 ↦ 915 Retain unprintable internal strings in 8-bit form (FM). §59 S 881 ↦ 916 Retain right punctuation context for ligature reconstruction (problem found by

Brian Hamilton Kelly). §903 S

10 January 1992

881 ↦ 917 Also avoid producing a double kern at boundary (CET). §897 S 918 Disallow \setbox where it doesn’t work (Robert Hunt). §1241, 1270 S 919 Robustify \mskip and \mkern in presence of negative quad (WGS). §716, 717 S

679 ↦ 920 Defend against ‘}{’ in \read (Michael Downes). §483 S 798 ↦ 921 Save string memory if font occurs repeatedly (Bogusław Jackowski). §1260 E 784 ↦ 922 Don’t let \newlinechar interrupt unprintable expansion (Bernd Raichle). §59, 60 S

7 February 1992

881 ↦ 923 Restore cur_l properly when boundary character doesn’t exist (Mattes and Raichle). §1036 D

17 July 1992

892 ↦ 924 Use current language at beginning of horizontal mode (Rainer Schöpf and CET). §1091, 1200 C

17 December 1992

879 ↦ 925 Avoid (harmless) range errors (Philip Taylor and CET). §934, 960 R

25 February 1993

881 ↦ 926 Protect kerns inserted by boundary characters (William Baxter). §837, 866 C 917 ↦ 927 Don’t let boundary kern disappear after hyphenation. §897 S

26 June 1993

668 ↦ 928 Avoid potential future bug (Peter Breitenlohner). §628, 637 R

17 December 1993

881 ↦ 929 Boundary character representation shouldn’t depend on font memory size (Berthold Horn). §549, 1323 S

10 March 1994

930 Huge font parameter number may exceed array bound (CET). §549 R

4 September 1994

926 ↦ 931 Math kerns are explicit (Walter Carlip). §717 F

932 Avoid overflow on huge real-to-integer conversion. §625, 634 R

19 March 1995

933 Avoid spurious reference counts in format files (PB). §1335 R