+#elif defined __QNX__ /* QNX */
+ if ((fp->_Mode & 0x2000 /* _MWRITE */) != 0)
+ return 0;
+ /* fp->_Buf <= fp->_Next <= fp->_Rend,
+ and fp->_Rend may be overridden by fp->_Rsave. */
+ return ((fp->_Rsave ? fp->_Rsave : fp->_Rend) - fp->_Next)
+ + (fp->_Mode & 0x4000 /* _MBYTE */
+ ? (fp->_Back + sizeof (fp->_Back)) - fp->_Rback
+ : 0);
+#elif defined __MINT__ /* Atari FreeMiNT */
+ if (!fp->__mode.__read)
+ return 0;
+ return (fp->__pushed_back
+ ? fp->__get_limit - fp->__pushback_bufp + 1
+ : fp->__get_limit - fp->__bufp);
+#elif defined EPLAN9 /* Plan9 */
+ if (fp->state == 4 /* WR */ || fp->rp >= fp->wp)
+ return 0;
+ return fp->wp - fp->rp;
+#elif defined SLOW_BUT_NO_HACKS /* users can define this */
+ abort ();
+ return 0;