Practical C Programming, 3rd edition by Steve Oualline Here are the changes from the 4/98 reprint: {43} in the box, replaced the final two lines with: (add-hook 'c-mode-hook '(lambda () (define-key c-mode-map "\C-cb" 'c-begin-comment-box) (define-key c-mode-map "\C-ce" 'c-end-comment-box) ) ) (44, 45) reprinted for pagebreak {65} added missing a closing curly bracket to last bit of code. {69} 4th line from the bottom: changed 100 to 200 {74} para. 3: changed "curly braces" to "brackets", the "{}" in parens to "[]", and "element" to "dimension {76} added missing a closing curly bracket to 1st code example. {101} 3rd line from bottom (not counting footnote): changed "cc" to "gcc" {102} changed: $(CC) $(FLAGS) -o clac1 calc1.c to: $(CC) $(FLAGS) -o calc1 calc1.c (124) In the figure: changed "nubmer" to "number". {125} changed "centigrade" to "celsius" twice {147} changed last line of next-to-last code to: #endif /* DEBUG */ {148} put "UNDEF" in comment delimiters in last line of 1st code {150} 2nd line: put _CONST_H_INCLUDED_ in comment delimiters {163} added this footnote to the table (anchored at "Sign Bit(1)"): The ANSI standard specifies that right shifts may be arithementic (sign bit fill) or logical (zero bit fill). Almost all compilers use the arithmetic right shift. {177} changed all the "#const"s to "const" {189} example 13-2: changed line 4 to: (*count_ptr)++; {190} figure 13-5: second code between illustrations changed to: void inc_count(int *count_ptr) (241) added "Your results may vary." just before the example {253} changed "part_number" to "point_number" in the last code block {266} "+3.3000E+5 ". changed the +5 to +4 {267} item 3: changed "less than or equal to" to "greater than or equal to" {268} item 4: same fix as on previous page {279} last para.: changed "item" to "node" {280} figure 17-2: changed "item" to "node" , and the caption now says "Node" {284} changed void add_list(in item) to void add_list(char *item) {286} code line 7 was: current_ptr = current_ptr->next; is now: current_ptr = (*current_ptr).next; {330} Near the top, changed float data; to float data[]; {346} in the last code related to "The , Operator", changed "three += 2" to "three += 3" {355} Changed "char_type" to "ch_type" in the last heading and next line {364, 365} fixed the lines that said "HARDSPACE" in them. Here's the (big) new code (not the whole program): /********************************************************* * init_char_type -- initialize the char type table * *********************************************************/ static void init_char_type(void) { fill_range(0, 255, C_WHITE); fill_range('A', 'Z', C_ALPHA); fill_range('a', 'z', C_ALPHA); type_info['_'] = C_ALPHA; fill_range('0', '9', C_DIGIT); type_info['!'] = C_OPERATOR; type_info['#'] = C_OPERATOR; type_info['$'] = C_OPERATOR; type_info['%'] = C_OPERATOR; type_info['^'] = C_OPERATOR; type_info['&'] = C_OPERATOR; type_info['*'] = C_OPERATOR; type_info['-'] = C_OPERATOR; type_info['+'] = C_OPERATOR; type_info['='] = C_OPERATOR; type_info['|'] = C_OPERATOR; type_info['~'] = C_OPERATOR; type_info[','] = C_OPERATOR; type_info[':'] = C_OPERATOR; type_info['?'] = C_OPERATOR; type_info['.'] = C_OPERATOR; type_info['<'] = C_OPERATOR; type_info['>'] = C_OPERATOR; type_info['/'] = C_SLASH; type_info['\n'] = C_NEWLINE; type_info['('] = C_L_PAREN; type_info[')'] = C_R_PAREN; type_info['{'] = C_L_CURLY; type_info['}'] = C_R_CURLY; type_info['"'] = C_DOUBLE; type_info['\''] = C_SINGLE; } {391} item 4 in 1st table: put the "32" in the "Bits" column, and shifted the following entries in that row to the right accordingly. (426) the index entry for preprocessor had an extra a on the end.