ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Changes to "Clipper 5: A Developer's Guide" (1st printing) ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The ISPORT.OBJ file is missing from the diskette. It is included with this file. TABLE OF CONTENTS ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Chapter 25, "The TBrown Object Class" should be "TBrowse". ACKNOWLEDGEMENTS ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ We forgot to credit someone who contributed numerous small functions. Add to 3rd paragraph: "Thanks also to Ted Means who wrote the numerous small but vital .ASM routines that make our lives a bit easier." CHAPTER 9: Arrays ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ p287: Middle para, "The assignment to A as compared to B" should be reversed, "assigment to B as compared to A". p301 Could the sample code on the next page be moved onto this page? The two paras go together, comparing one to the other. Would be nice to have on same page. p323 Example in middle of page, eliminate the FOR..NEXT components andmake it into the following line: i := len(afill(q, "")) Then, replace the latter half of the next sentance with: "All it does is allow you to both fill and then find the length of an array without introducing any additional variables. Obfuscation or elegance? Used when appropriate you get elegance." p367 Line up /*..*/ comments in listing 9.17, the word "gets" sticks out three-tenths of a hair. p371 missing last sentence. CHAPTER 12: Program Design ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ p476 BUG! in listing 12.12: Change the SaveEnv("GR+/B",1) to SaveEnv(msgColor, 1) Chapter 13: The Art of the User Interface ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ p521 Drop "as noted previously with sound and light shows" from last sent in para. We never did discuss this, so the comment should be: However, if you use any graphic too often it wil... p557 The following sentence: "DEVOUTPICT() also accepts a third parameter, which is a character string representing the PICTURE clause to use for displaying the value." should have read: "DEVOUTPICT() also accepts a third parameter, which is a character string representing the color to use for displaying the value. Note that this applies only to screen output." Listing 13.15 (fourth line from bottom of page): "devoutpict(cstring,,"@!") // goes to printer, all upper-case" Please make those two commas into one, so it reads: "devoutpict(cstring,"@!") // goes to printer, all upper-case" The label for Listing 13.15 refers to DEVPICTOUT(). It should be DEVOUTPICT(). CHAPTER 25: The TBrowse Object Class ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ p1114-5 Major Bug! Replace entire listing 25.6 with the Navigate() function found at the end of this document. p1131 Source code example in middle of page, line starting with "lastKey" should be changed to: lastKey := firstKey +chr(255) p1133 part of listing 25.10, in "case how == `bottom'" area, change line starting with "seek (left(firstKey..." to: seek firstKey +chr(255) p1134 Middle of page, change the all-caps GOTO BOTTOM to SKIP, as in Only the SKIP block has to be concerned with... p1135 Special graphic symbols, use a longer dash, the one used currently makes it look like spaces are on either side of the dash. list:headSep := "-" p1138 Same as above in listing 25.12 p1142 Example in middle of page, code blocks { || ... } should line up, currently there's some extra indentation. CHAPTER 27: The Error Object Class ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ p1229 Change WUSE(0) to DBUSE(0) in Traceback column of figure 27.6. Appendix A: Charts ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ The labels for the two ASCII character charts are reversed. Secondly, the term "irrational" is not meant to be applied to the chart itself, but to the range of characters it covers. The label should be more along the lines of "ASCII CHART for the IRRATIONAL RANGE: 128..255" Finally, on page 1256, the "Char" heading in the first column needs to be right-justified like all the others. Appendix B: Long Source Code Listings ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ p1276 lower half of page, "browse:headSep", needs connected graphic symbol (currently shows a gap between the characters). Also, remove leading and trailing spaces. browse:headSep := "---" browse:colSep := " | " browse:footSep := "--- p1277 Lower quarter of page, needs check-mark symbol, "û", in column:colorBlock line. Currently it's shown as a "degree" dot. Also,move the lone "/*" at the bottom of the page onto next page. p1283 Decrement operator, "--", got smushed into a single em-dash. (Two places, :width-- and --w) This is located in the "case key == K_CTRL_LEFT" area near the top of the page. p1285 same as above, four places (r1--, r2--, c1--, c2--) p1286 same as above, three places (r1--, r2--, c1--) p1287 same as above, one place (c2--) p1295 same as above, one place (actual--) p1296 check mark, "û", got converted to "ú" in middle of page if(ascan(... " ", " û ") p1294 Top of page, bad graphic symbols, should be-- @ maxrow() -3, 0 say replicate("ß", 36) @ maxrow() -2, 0 say " MaxiBrow by Craig Yellick " @ maxrow() -1, 0 say " Ver 1.4a 20-Apr-91 " @ maxrow(), 0 say replicate("Ü", 36) The symbols are the upper and lower halves of a solid box. p1299 Yikes! Major blunder. Replace the entire function Called Navigate() with the one at the end of this document. I've placed the source code file on the diskette, so you don't have to type it all in. p1316 BUG! Top of page, static function XtoS(). Change "local s" line to: local s := "" ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Replacement for listing 25.10 and page 1299 in appendix B. function Navigate(br, k) /* Establish standard navigation keystrokes and the cursor movement method to associate with each key. This function gets passed a browse object and a potential navigation key. If the key is defined it's associated navigation message is sent to the browse. Function returns .t. if navigation was handled, .f. if not. */ local did := .t. if k == K_UP br:up() elseif k == K_DOWN br:down() elseif k == K_LEFT br:left() elseif k == K_RIGHT br:right() elseif k == K_PGUP br:pageUp() elseif k == K_PGDN br:pageDown() elseif k == K_CTRL_PGUP br:goTop() elseif k == K_CTRL_PGDN br:goBottom() elseif k == K_HOME br:home() elseif k == K_END br:end() elseif k == K_CTRL_HOME br:panHome() elseif k == K_CTRL_END br:panEnd() elseif k == K_TAB br:panRight() elseif k == K_SH_TAB br:panLeft() else did := .f. endif return did