Dec 212017
List of corrections to the first printing of "Basic Techniques and Utilities" by Ethan Winer, published by Ziff Press.
File ETHAN.ZIP from The Programmer’s Corner in
Category BASIC Language
List of corrections to the first printing of “Basic Techniques and Utilities” by Ethan Winer, published by Ziff Press.
File Name File Size Zip Size Zip Type
BOOKBUGS.DOC 5315 2231 deflated
ETHAN 325 230 deflated
TPCREAD.ME 199 165 deflated

Download File ETHAN.ZIP Here

Contents of the BOOKBUGS.DOC file

This file documents the known errors and typos in the book, "BASIC Techniques
and Utilities" by Ethan Winer. Note that there are very few errors of fact,
and most of the corrections are simply to correct typos, or clarify slightly.
Each error is listed by page number so you can easily find it, and make the
correction directly on the page.


Table of contents, Chapter 2, Dynamic Strings:

Add an "S" to make "PDS"

Page 9, first complete paragraph, the second sentence should read:

"Interrupts are made possible by a direct physical connection between
the hardware's circuitry--for example, the keyboard--and the PC's

Page 11, the second line of the code at the bottom of the page should be:

Y% = X% * 3

Page 34, middle of the bottom paragraph:

Change "64k" to "640k".

Page 50, middle of bottom paragraph:

Change "Word% = LoByte% AND 255" to "LoByte% = Word% AND 255".

Page 69, the three line labels should be Label1, Label2, and Label3.

Page 92, code fragment in third paragraph:

Add a percent sign (%) to the second occurrence of MaxRows so the
statement reads "IF CurRow > MaxRows% THEN CurRow = MaxRows%"

Page 148, first paragraph (/nologo option):

Add a second sentence, "This option is available only with the LINK
that comes with BASIC 7 PDS."

Page 256, middle of page, second line within FOR/NEXT loop:

Change "1" to "BuffOff" so the entire line reads as follows:

FldArray(X).FName = MID$(Buffer$, BuffOff, FTerm - BuffOff)

Page 278, bottom paragraph, add "is" before "loaded":

"You can avoid runtime errors by being able to determine ahead of time
if this file is loaded."

Page 281, bottom, change "CDP Associates" to "CDP Consultants".

Page 382, LPTReady function, (a real bug folks!), change ">>" lines to read:

>> Regs.AX = 32 'first print a space
>> Regs.DX = LPTNumber - 1 'convert to 0-based
CALL INTERRUPT(&H17, Regs, Regs)

Result = (Regs.AX \ 256) OR 128 'get AH, ignore busy
Result = Result AND 191 'and acknowledge
IF Result = 144 THEN 'it worked!
>> Regs.AX = 8 'print a backspace
CALL INTERRUPT(&H17, Regs, Regs) ' to undo CHR$(32)
LPTReady% = -1 'return success

Page 411, middle paragraph, third sentence, change to read as follows:

... but when floppy-disk systems were the norm this let a program
ensure that the correct data disk..."

Page 427, the artists screwed up the figure, make it look like this:

7 6 5 4 3 2 1 0 <--- bits
n/a 64 32 16 n/a 4 2 1 <--- Numeric values
^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | |
| | | | | +-----+-----+------ Access mode
| | | | +------------------------ Reserved
| +-----+-----+------------------------------ Sharing mode
+------------------------------------------------ Inheritence

Page 434, end of last paragraph before the MOUSE.BAS program starts:

Add "and DEFINT" to the end of the sentence, since it too must remain.

Page 451, Figure 11.4, the artists *really* screwed this one up:

The caption should be, "How EMS logical pages in far memory are mapped
onto physical pages in conventional memory."

Also, the connecting lines are poorly drawn. RAM physical Page 3 is
connected to EMS page 73, RAM page 2 to EMS page 72, RAM page 1 to EMS
page 45, and RAM page 0 to EMS page 38.

Page 483, code example, fourth from last line:

Change this:

Mov [SI], AX ;then store the answer into Drive%

to this:

Mov [BX],AX ;then store the answer into Drive%

Page 491, very bottom of page:

Delete the end of the last sentence so it reads, "This next example does
cause BASIC to create a temporary copy:"

Page 505, last complete paragraph:

Change the second sentence to read, "First, the address of the incoming
value is retrieved from the system stack, and then the data at that
address is loaded onto the coprocessor's stack using the...."

Page 543, third code fragment, change Shl to Shr as follows:

Mov CL,5 ;prepare to divide BP by 32

Page 551 (Index), top left of page, just before "A" heading, extend "@":

@ (at sign)
assember directive, 503-504
response file, 153, 162 << add this

Page 554 (Index), add after "Currency data type":

Cursor, control codes, 229

Page 549 (Appendix), the fourth paragraph says that object files for the
various assembler routines are contained in the ASM.ZIP file. This is not
true; however, you can extract selected .OBJ files if you really need to
using LIB.EXE as described on page 159.

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

And that's it -- you are now current with the second printing!

--Ethan Winer

 December 21, 2017  Add comments

Leave a Reply