>EOF() and BOF() return .T. whenever you try to move *beyond* the end or beginning of the file (depending on the direction). So if you're on the last record, you won't get EOF() until you attempt to SKIP -- leaving you at a "phantom" record at RECCOUNT()+1. Likewise, if you're on the first record, you won't get a BOF() until you try SKIP -1 -- though in this case you're still on RECNO()=1. EOF() does give you what you might expect when the table is empty (it returns .T.).
Yes, I know. All this is a little confusing to the beginner, especially the inconsistency between BOF() and EOF().
Difference in opinions hath cost many millions of lives: for instance, whether flesh be bread, or bread be flesh; whether whistling be a vice or a virtue; whether it be better to kiss a post, or throw it into the fire... (from Gulliver's Travels)