+/* Choose the right backend */
+void DEVICE::init_backend()
+{
+
+#ifdef HAVE_WIN32
+ if (is_tape()) {
+ d_open = win32_tape_open;
+ d_write = win32_tape_write;
+ d_close = win32_tape_close;
+ d_ioctl = win32_tape_ioctl;
+ d_read = win32_tape_read;
+
+ } else {
+ d_open = ::open;
+ d_close = ::close;
+ d_ioctl = win32_ioctl; /* dummy function */
+ d_write = win32_write; /* win32 read/write are not POSIX */
+ d_read = win32_read;
+ }
+
+#else /* POSIX / UNIX Interface */
+ if (is_vtape()) { /* test backend */
+ d_open = vtape_open; /* vtape isn't available for WIN32 or FreeBSD */
+ d_write = vtape_write;
+ d_close = vtape_close;
+ d_ioctl = vtape_ioctl;
+ d_read = vtape_read;
+
+ } else { /* tape and file are using normal io */
+ d_open = ::open;
+ d_write = ::write;
+ d_close = ::close;
+ d_ioctl = ::ioctl;
+ d_read = ::read;
+ }
+#endif
+}
+