+#ifdef unix
+ memset (lock, 0, sizeof(lock));
+
+ lock->l_type = F_WRLCK;
+ lock->l_len = sizeof(struct BtPage_);
+ lock->l_whence = 0;
+
+ if( fcntl (bt->idx, F_SETLKW, lock) < 0 )
+ return bt_close (bt), NULL;
+#else
+ memset (ovl, 0, sizeof(ovl));
+ len = sizeof(struct BtPage_);
+
+ // use large offsets to
+ // simulate advisory locking
+
+ ovl->OffsetHigh |= 0x80000000;
+
+ if( mode == BtLockDelete || mode == BtLockWrite || mode == BtLockParent )
+ flags |= LOCKFILE_EXCLUSIVE_LOCK;
+
+ if( LockFileEx (bt->idx, flags, 0, len, 0L, ovl) )
+ return bt_close (bt), NULL;
+#endif