+// read page from permanent location in Btree file
+
+BTERR bt_readpage (BtDb *bt, BtPage page, uid page_no)
+{
+off64_t off = page_no << bt->page_bits;
+
+#ifdef unix
+ if( pread (bt->idx, page, bt->page_size, page_no << bt->page_bits) < bt->page_size ) {
+ fprintf (stderr, "Unable to read page %.8x errno = %d\n", page_no, errno);
+ return bt->err = BTERR_read;
+ }
+#else
+OVERLAPPED ovl[1];
+uint amt[1];
+
+ memset (ovl, 0, sizeof(OVERLAPPED));
+ ovl->Offset = off;
+ ovl->OffsetHigh = off >> 32;
+
+ if( !ReadFile(bt->idx, page, bt->page_size, amt, ovl)) {
+ fprintf (stderr, "Unable to read page %.8x GetLastError = %d\n", page_no, GetLastError());
+ return bt->err = BTERR_read;
+ }
+ if( *amt < bt->page_size ) {
+ fprintf (stderr, "Unable to read page %.8x GetLastError = %d\n", page_no, GetLastError());
+ return bt->err = BTERR_read;
+ }
+#endif
+ return 0;
+}