home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / jove-4.16-src.tgz / tar.out / bsd / jove / sysdep.h < prev    next >
C/C++ Source or Header  |  1996-09-28  |  18KB  |  609 lines

  1. /************************************************************************
  2.  * This program is Copyright (C) 1986-1996 by Jonathan Payne.  JOVE is  *
  3.  * provided to you without charge, and with no warranty.  You may give  *
  4.  * away copies of JOVE, including sources, provided that this notice is *
  5.  * included in all the files.                                           *
  6.  ************************************************************************/
  7.  
  8. /*
  9.  * System Feature Selection: describe OS and C system to JOVE.  See sysdep.doc
  10.  * for a better description of what the different #define feature symbols
  11.  * mean.  If you add new ones, please keep the syntax of the first #ifdef, so
  12.  * that "grep System: sysdep.h" catches the first line of all symbols.
  13.  */
  14.  
  15. /* System: Solaris 2.0, SunOS 5.0 -- use SYSVR4 and GRANTPT_BUG */
  16.  
  17. /* System: Solaris 2.x, SunOS 5.x -- use SYSVR4 */
  18.  
  19. #ifdef SUNOS41    /* System: SunOS4.1 to 4.1.3 */
  20. # define TERMIOS    1
  21. # define USE_GETCWD    1
  22. # define POSIX_UNISTD    1
  23. # define USE_SELECT    1
  24. # define PTYPROCS    1
  25. # define BSD_PTYS    1
  26. # define POSIX_PROCS    1
  27. # define BSD_SIGS    1
  28. # define JOB_CONTROL    1
  29. # define BSD_SETPGRP    1
  30. # define USE_KILLPG    1
  31. # define USE_GETPWNAM    1
  32. # define USE_GETHOSTNAME    1
  33. # define NO_STRERROR    1
  34. # define USE_FSYNC    1
  35. # define USE_FSTAT    1
  36. # define USE_FCHMOD    1
  37. # define USE_CTYPE    1
  38. #endif
  39.  
  40. #ifdef SUNOS40    /* System: SunOS4.0 to 4.0.3c */
  41. /* Almost identical to SUNOS41, main difference is that SUNOS41 uses
  42.  * POSIX_PROCS, this one uses BSD_WAIT/WAIT3, USE_MEMORY_H.
  43.  * Beware: TERMIO under SunOS 4.0 does not allow VSUSP to be changed,
  44.  * so we cannot use it.
  45.  */
  46. /* try to patch over <termios.h> problems */
  47. # define TERMIOS    1
  48. # define setsid()    /* SunOS 4.0 apparently has no concept of session */
  49. # define cfgetospeed(p)    (CBAUD & (p)->c_cflag)
  50. # define tcgetattr(fd, p)    ioctl((fd), TCGETS, (UnivPtr)(p))
  51. # define tcsetattr(fd, oa, p)    ioctl((fd), (oa), (UnivPtr)(p))
  52. /* fake values for "optional_actions" (oa) arg to tcsetattr */
  53. #  define TCSANOW    TCSETS
  54. #  define TCSADRAIN    TCSETSW
  55. #  define TCSAFLUSH    TCSETSF
  56. /* end of <termios.h> patches */
  57.  
  58. # define USE_GETCWD    1
  59. # define USE_SELECT    1
  60. # define PTYPROCS    1
  61. # define BSD_PTYS    1
  62. # define BSD_WAIT    1
  63. # define WAIT3        1
  64. # define BSD_SIGS    1
  65. # define JOB_CONTROL    1
  66. # define USE_VFORK    1
  67. # define BSD_SETPGRP    1
  68. # define USE_KILLPG    1
  69. # define USE_GETPWNAM    1
  70. # define USE_GETHOSTNAME    1
  71. # define NO_STRERROR    1
  72. # define USE_FSYNC    1
  73. # define USE_FSTAT    1
  74. # define USE_FCHMOD    1
  75. # define USE_MEMORY_H    1
  76. #endif
  77.  
  78. #ifdef SUNOS3    /* System: SunOS before 4.0, eg. 3.5. not recently tested */
  79. /* This is very close to BSD4 */
  80. # define SGTTY        1
  81. # define USE_GETWD    1
  82. # define USE_SELECT    1
  83. # define PTYPROCS    1
  84. # define BSD_PTYS    1
  85. # define BSD_WAIT    1
  86. # define WAIT3        1
  87. # define BSD_SIGS    1
  88. # define JOB_CONTROL    1
  89. # define USE_VFORK    1
  90. # define BSD_SETPGRP    1
  91. # define USE_KILLPG    1
  92. # define BSD_DIR    1
  93. # define USE_GETPWNAM    1
  94. # define SIGRESTYPE    int
  95. # define SIGRESVALUE    0
  96. # define USE_GETHOSTNAME    1
  97. # define NO_STRERROR    1
  98. # define USE_FSYNC    1
  99. # define USE_FSTAT    1
  100. # define USE_FCHMOD    1
  101. /* # define USE_BCOPY    1 */
  102. /* # define USE_INDEX    1 */
  103. #endif
  104.  
  105. #ifdef AIX3_2    /* System: IBM RS6000 running AIX 3.2 */
  106. # define AIX        1
  107. # define FULL_UNISTD    1
  108. # define USE_GETWD    1
  109. # define TERMIOS    1    /* uses termio struct for terminal modes */
  110. # define USE_UNAME    1
  111. # define USE_SELECT    1
  112. # define USE_SELECT_H    1
  113. # define PTYPROCS    1
  114. # define BSD_PTYS    1
  115. # define NO_EOF_FROM_PTY    1    /* BUG! */
  116. # define POSIX_PROCS    1
  117. # define WAIT3        1
  118. # define POSIX_SIGS    1
  119. # define JOB_CONTROL    1
  120. # define USE_GETPWNAM    1
  121. # define USE_UNAME    1
  122. # define USE_FSYNC    1
  123. # define USE_FSTAT    1
  124. # define USE_FCHMOD    1
  125. # define USE_CTYPE    1
  126. #endif
  127.  
  128. #ifdef __QNX__    /* System: QNX OS for x86 family */
  129. /* Note: this must be placed before BSDPOSIX ifdef (we define BSDPOSIX). */
  130. # define BSDPOSIX    1
  131. # define ONLCR        OPOST    /* how to do ONLCR */
  132. # define USE_SELECT_H    1
  133. #endif
  134.  
  135. #ifdef BSDPOSIX    /* System: Posix system with BSD flavouring for ptys */
  136. /* System: BSDI, 386BSD, BSD4.4, NetBSD -- BSDPOSIX */
  137. /* System: DEC Ultrix 4.2 -- BSDPOSIX */
  138. /* System: DEC OSF/1 V1.3 -- BSDPOSIX + NO_TIOCREMOTE + NO_TIOCSIGNAL */
  139. /* System: LINUX (MCC-Interim release) -- BSDPOSIX */
  140. /* Also seems to work for SunOS4.1.3! */
  141. # define TERMIOS    1
  142. # define USE_GETCWD    1
  143. # define FULL_UNISTD    1
  144. # define USE_SELECT    1
  145. # define PTYPROCS    1
  146. # define BSD_PTYS    1
  147. # define POSIX_PROCS    1
  148. # define POSIX_SIGS    1
  149. # define JOB_CONTROL    1
  150. # define BSD_SETPGRP    1
  151. # define USE_KILLPG    1
  152. # define USE_GETPWNAM    1
  153. # define USE_GETHOSTNAME    1
  154. # define USE_FSYNC    1
  155. # define USE_FSTAT    1
  156. # define USE_FCHMOD    1
  157. #endif
  158.  
  159. #ifdef IRIX
  160. # define _BSD_COMPAT    1    /* Turn on BSD setpgrp and other neat things */
  161. # define TERMIOS    1
  162. # define USE_GETCWD    1
  163. # define FULL_UNISTD    1
  164. # define USE_SELECT    1
  165. # define PTYPROCS    1
  166. # define POSIX_PROCS    1
  167. # define POSIX_SIGS    1
  168. # define JOB_CONTROL    1
  169. # ifdef IRIX4
  170.    /* Should work for IRIX 4.0.4 back to 3.2 or 3.3.  This is a Posix system
  171.     * with its own way of doing PTYS.  Older versions may need MIPS_CC_BUG
  172.     * defined as well.
  173.     */
  174. #  define IRIX_PTYS    1
  175. #  define NO_TIOCREMOTE    1
  176. #  define SIGRESTYPE    int
  177. #  define SIGRESVALUE    0
  178. # else
  179.    /* IRIX 5 and later */
  180. #  define SVR4_PTYS    1
  181. #  define NO_TIOCREMOTE    1
  182. #  define NO_TIOCSIGNAL    1
  183. #  define SIGRESTYPE    void
  184. #  define SIGRESVALUE    /*void!*/
  185. # endif
  186. # define BSD_SETPGRP    1
  187. # define USE_GETPWNAM    1
  188. # define USE_KILLPG    1
  189. # define USE_GETHOSTNAME    1
  190. # define USE_CTYPE    1
  191. #endif
  192.  
  193. #ifdef SYSVR4    /* System: System V, Release 4 and derivatives */
  194. /* System: Consensys V4 -- use SYSVR4 and GRANTPT_BUG */
  195. /* System: DEC OSF/1 V2.0 or later -- use SYSVR4 */
  196. /* System: DEC OSF R1.3MK -- use SYSVR4 */
  197. /* System: Solaris 2.0, SunOS 5.0 -- use SYSVR4 and GRANTPT_BUG */
  198. /* System: Solaris 2.x, SunOS 5.x -- use SYSVR4 */
  199. /* Note: some versions of System V Release 4 have a bug in that affects
  200.  * interactive processes.  Examples include Consensys V4 and SunOS 5.0
  201.  * also known as Solaris 5.0.  See the description of GRANTPT_BUG in
  202.  * sysdep.doc
  203.  */
  204. # define TERMIOS    1
  205. # define USE_GETCWD    1
  206. # define FULL_UNISTD    1
  207. # define USE_SELECT    1
  208. # define PTYPROCS    1
  209. # define SVR4_PTYS    1
  210. # define POSIX_PROCS    1
  211. # define POSIX_SIGS    1
  212. # define JOB_CONTROL    1
  213. # define USE_UNAME    1
  214. # define USE_GETPWNAM    1
  215. # define USE_FSYNC    1
  216. # define USE_FSTAT    1
  217. # define USE_FCHMOD    1
  218. # define REALSTDC    1
  219. # define USE_CTYPE    1
  220. #endif
  221.  
  222. #ifdef HPUX    /* System: Hewlett-Packard HP-UX 9.01 */
  223. # define TERMIOS    1
  224. # define USE_BSDTTYINCLUDE    1    /* No other way to turn off ^Y */
  225. # define USE_GETCWD    1
  226. # define FULL_UNISTD    1
  227. # define USE_SELECT    1
  228. # define PTYPROCS    1
  229. # define BSD_PTYS    1
  230. # define POSIX_PROCS    1
  231. # define NO_EOF_FROM_PTY    1    /* BUG! */
  232. # define POSIX_SIGS    1
  233. # define JOB_CONTROL    1
  234. # define USE_UNAME    1
  235. # define DEFINE_PC_BC_UP_OSPEED    1    /* May be needed for all SYSVR2 */
  236. #endif
  237.  
  238. #ifdef BSD4    /* System: Berkeley BSD4.x, 2.9, 2.10, MIPS RiscOS 4.x */
  239. /* MIPS needs -systype bsd43, older releases (before 4.50?) may need
  240.  * MIPS_CC_BUG defined as well.
  241.  */
  242. # define SGTTY        1
  243. # define USE_GETWD    1
  244. # define USE_SELECT    1
  245. # define PTYPROCS    1
  246. # define BSD_PTYS    1
  247. # define BSD_WAIT    1
  248. # define WAIT3        1
  249. # define BSD_SIGS    1
  250. # define JOB_CONTROL    1
  251. # define USE_VFORK    1
  252. # define BSD_SETPGRP    1
  253. # define USE_KILLPG    1
  254. # define BSD_DIR    1
  255. # define SIGRESTYPE    int
  256. # define SIGRESVALUE    0
  257. # define USE_GETHOSTNAME    1
  258. # define NO_STRERROR    1
  259. # define USE_FSYNC    1
  260. # define USE_FSTAT    1
  261. # define USE_FCHMOD    1
  262. # define USE_BCOPY    1
  263. # define USE_INDEX    1
  264. #endif
  265.  
  266. #ifdef SCO    /* System: SCO ODT 3.0 */
  267. # define TERMIOS    1
  268. # define FULLUNISTD    1
  269. # define USE_GETCWD    1
  270. # define POSIX_UNISTD    1
  271. # define USE_SELECT    1
  272. # define PTYPROCS    1
  273. # define BSD_PTYS    1
  274. # define POSIX_PROCS    1
  275. # define JOB_CONTROL    1
  276. # define USE_UNAME    1
  277. /* In SCO ODT 3.0, a wait() will never finish if SIGCHLD is being held.
  278.  * We think that this is a bug.  It's rumoured to be "fixed" in the next
  279.  * release.  JOVE's IPROCS code no longer triggers this bug.
  280.  */
  281. # define PTYPROCS    1
  282. # define USE_CTYPE    1
  283. #endif
  284.  
  285. #ifdef _MSC_VER    /* System: Microsoft C for the IBM-PC under MSDOS or WIN32 */
  286. # if defined(_WIN32) && !defined(WIN32)
  287. #  define WIN32 _WIN32
  288. # endif
  289. # ifdef WIN32
  290. #  define WINRESIZE    1
  291. # else /* ! WIN32 => MSDOS */
  292. #  define IBMPCDOS        1
  293. #  define MALLOC_CACHE    1    /* DGROUP gets full otherwise */
  294. #  if defined(M_I86LM)    /* large memory model */
  295. #   define NBUF        62    /* NBUF*JBUFSIZ must be less than 64 kB */
  296. #  else
  297. #   define NBUF        3
  298. #   define FAR_LINES    1    /* to squeeze larger files, distance Lines */
  299. #  endif
  300. # endif
  301. # define REALSTDC    1    /* MS C only defines __STDC__ if you use /Za */
  302. #endif
  303.  
  304. #ifdef ZTCDOS    /* System: Zortech C V3.0 for the IBM-PC under MSDOS */
  305. # define IBMPCDOS        1
  306. # define getch        jgetch    /* UGH!  Zortech steals from our namespace. */
  307. # define MALLOC_CACHE    1    /* DGROUP gets full otherwise */
  308. # define REALSTDC    1    /* close enough for us, but ZTCDOS doesn't define __STDC__ */
  309. # ifdef M_I86LM        /* large memory model */
  310. #  define NBUF        62    /* NBUF*JBUFSIZ must be less than 64 kB */
  311. # else
  312. #  define NBUF        3
  313. #  define FAR_LINES    1    /* to squeeze larger files, distance Lines */
  314. # endif
  315.   /* (1) specify stack size, and
  316.    * (2) request support of wildcards in command-line args (UGH!)
  317.    */
  318. # define STACK_DECL    unsigned int _stack = 0x2000; WILDCARDS
  319. # define dostime_t    dos_time_t    /* is Zortech out of step? */
  320. # define _dos_gettime    dos_gettime
  321. #endif
  322.  
  323. #if defined(__WATCOMC__) && defined(MSDOS)    /* System: Watcom C V10.0 for the IBM-PC under MSDOS */
  324. # define IBMPCDOS        1
  325. # define MALLOC_CACHE    1    /* DGROUP gets full otherwise */
  326. # define REALSTDC    1    /* close enough for us, but ZTCDOS doesn't define __STDC__ */
  327. # ifdef M_I86LM        /* large memory model */
  328. #  define NBUF        62    /* NBUF*JBUFSIZ must be less than 64 kB */
  329. # else
  330. #  define NBUF        3
  331. #  define FAR_LINES    1    /* to squeeze larger files, distance Lines */
  332. # endif
  333. #endif
  334.  
  335. #ifdef __BORLANDC__    /* System: Borland C/C++ (v3.1) for the IBM-PC under MSDOS */
  336. # define IBMPCDOS        1
  337. # define MALLOC_CACHE    1    /* DGROUP gets full otherwise */
  338. # define REALSTDC    1    /* close enough for us, but not strict ANSI */
  339. # ifdef __LARGE__
  340. #  define NBUF        62    /* NBUF*JBUFSIZ must be less than 64 kB */
  341. #  define FAR_LINES 1    /* to squeeze larger files, distance Lines */
  342. # else
  343. #  ifdef __MEDIUM__
  344. #    define NBUF    3
  345. #    define FAR_LINES 1    /* to squeeze larger files, distance Lines */
  346. #  endif
  347. # endif
  348. # define STACK_DECL    unsigned int _stklen = 0x2000;        /* Borland's way of specifying stack size */
  349. #endif
  350.  
  351. #ifdef __amigaos__
  352. # define TERMIOS    1
  353. #endif
  354.  
  355. /* All the systems marked with XXX_ are ones that this version of Jove (4.16)
  356.  * has not been tested on.  4.15 was the transition from implicit #ifdefs
  357.  * scattered throughout the code to feature-based ifdefs that MUST be
  358.  * enabled in sysdep.h.  The #ifdef XXX_* below have been left in to provide a
  359.  * guide to re-porting this version to those architectures.  If you do so
  360.  * successfully, please send a copy of these changes to
  361.  * jovehacks@cs.toronto.edu and we'll try to incorporate those changes above
  362.  * and get rid of the XXX_.
  363.  */
  364.  
  365. #ifdef XXX_M_XENIX    /* System: Microsoft or SCO Xenix */
  366. /* #define NBUF    48 */    /* if we are on a 286, NBUF*JBUFSIZ must be less than 64 kB */
  367. # define BSD_DIR    1
  368. #endif
  369.  
  370. #ifdef XXX_SYSV        /* System: System V Rel. 2, System III */
  371. # define TERMIO        1
  372. # define USE_PWD
  373. # define NONBLOCKINGREAD    1
  374. # define USE_MEMORY_H    1
  375. # define DIRENT_EMULATE    1    /* for truly old versions? */
  376. #endif
  377.  
  378. #ifdef XXX_A_UX        /* System: A/UX on a MacII (Do *not* define "MAC") */
  379. /* It might be better to try BSDPOSIX for newer A/UX. */
  380. # define BSD_WAIT    1
  381. # define BSD_DIR    1
  382. # define WAIT3        1
  383. # define BSD_SIGS    1    /* ??? */
  384. # define USE_KILLPG    1
  385. # define TERMIO        1    /* uses termio struct for terminal modes */
  386. # define USE_GETHOSTNAME    1
  387. # define USE_SELECT    1
  388. #endif
  389.  
  390. #ifdef XXX_OLDMIPS    /* System: MIPS-SYSV, Irix before 3.3. */
  391. /* Older MIPS (UMIPS-SYSV, anything other than their 4.3 port before
  392.  * RISCOS4.x) and SGI 4D OSes (anything before Irix3.3) have BSD style wait,
  393.  * and directory routines if you link -lbsd and define -I/usr/include/bsd on
  394.  * the compile line. But they have SysV style signals.  Jove was ported to the
  395.  * SGI 68K boxes once, but it the mods seem to have been lost.
  396.  */
  397. # define BSD_WAIT    1    /* Berkeley style sys/wait.h */
  398. # define BSD_DIR    1    /* Berkeley style dirent routines */
  399. #endif
  400.  
  401. #ifdef XXX_MSC51    /* System: Microsoft C 5.1 on IBM PC under DOS*/
  402. /* This hasn't been tested recently.  Consider stealing ZTCDOS settings. */
  403. # define IBMPCDOS        1
  404. # define NO_PTRPROTO    1
  405. # define REALSTDC    1    /* well, almost */
  406. # ifdef M_I86LM        /* large memory model */
  407. #  define NBUF        62    /* NBUF*JBUFSIZ must be less than 64 kB */
  408. # else
  409. #  define SMALL        1
  410. # endif
  411. #endif
  412.  
  413. #ifdef THINK_C    /* System: Think C version 5.0 on the Macintosh */
  414. # define MAC 1
  415. # define REALSTDC    1    /* we hope */
  416. # define MALLOC_CACHE    1   /* Only 32K of static space on Mac, so... */
  417.   typedef long    off_t;
  418. # define USE_GETCWD    1
  419. # define USE_INO    1    /* we fake it */
  420.   typedef int    dev_t;
  421.   typedef int    ino_t;
  422. # define DIRECTORY_ADD_SLASH 1
  423. # define EOL    '\r'    /* end-of-line character for files */
  424. # define WINRESIZE    1
  425. # define AUTO_BUFS    1    /* slim down data segment */
  426. #endif
  427.  
  428. /**************** Common Characteristics ****************/
  429.  
  430. #ifdef pdp11
  431. /* On the PDP-11, UNIX allocates at least 8K for the stack.
  432.  * In order not to waste this space, we allocate
  433.  * a bunch of buffers as autos.
  434.  */
  435. # define AUTO_BUFS    1
  436. #endif
  437.  
  438. #ifdef IBMPCDOS    /* Common characteristics for IBM-PC MS-DOS systems. */
  439. # ifndef MSDOS
  440. #  define MSDOS    1
  441. # endif
  442. # define PCNONASCII    0xFF    /* prefix for peculiar IBM PC key codes */
  443. # define NO_JSTDOUT    1    /* don't use jstdout */
  444. # define CODEPAGE437    1    /* Code Page 437 English display characters */
  445. # define PCSCRATTR    1    /* exploit IBMPC screen attributes */
  446. # define HIGHLIGHTING    1    /* highlighting is used for mark and scrollbar */
  447. #endif
  448.  
  449. #ifdef MSDOS    /* Common characteristics for MS-DOS systems. */
  450. # define MSDOS_PROCS    1    /* spawn et al */
  451. # define FILENAME_CASEINSENSITIVE 1
  452. # define USE_CRLF 1
  453. # define DIRECTORY_ADD_SLASH 1
  454. # define MSFILESYSTEM 1
  455. #endif
  456.  
  457. #ifdef WIN32    /* Common characteristics for WIN32 systems. */
  458. # define PCNONASCII    0xFF    /* prefix for peculiar IBM PC key codes */
  459. # define NO_JSTDOUT    1    /* don't use jstdout */
  460. # define CODEPAGE437    1    /* Code Page 437 English display characters */
  461. # define PCSCRATTR    1    /* exploit IBMPC screen attributes */
  462. # define HIGHLIGHTING    1    /* highlighting is used for mark and scrollbar */
  463. # define MSDOS_PROCS    1    /* spawn et al */
  464. # define FILENAME_CASEINSENSITIVE 1
  465. # define USE_CRLF 1
  466. # define DIRECTORY_ADD_SLASH 1
  467. # define MSFILESYSTEM 1
  468. #endif
  469.  
  470. /* The operating system (MSDOS, WIN32, or MAC) must be defined by this point. */
  471. #if !(defined(MSDOS) || defined(WIN32) || defined(MAC))
  472. # define UNIX    1    /* default to UNIX */
  473. #endif
  474.  
  475. #ifdef UNIX    /* Common characteristics for UNIX systems. */
  476. /* Our defaults tend to be conservative and lean towards pure SYSV */
  477. # define USE_INO    1
  478. # define TERMCAP    1
  479. # define WINRESIZE    1
  480. # define MOUSE        1
  481. # if !(defined(NO_IPROCS) || defined(PIPEPROCS) || defined(PTYPROCS))
  482. #  define PIPEPROCS    1    /* use pipes */
  483. # endif
  484. # if !defined(TERMIOS) && !defined(SGTTY)
  485. #  define TERMIO    1    /* uses termio struct for terminal modes */
  486. # endif
  487. /* At the moment, the PTY code mandates having select().  One day, this might
  488.  * change.
  489.  */
  490. # if defined(PTYPROCS) && !defined(USE_SELECT)
  491.    sysdep.h: Sorry, PTYPROCS requires the select() system call.  You must
  492.    either define USE_SELECT or undefine PTYPROCS.
  493. # endif
  494. # if defined(SIGCLD) && !defined(SIGCHLD)
  495. #  define SIGCHLD    SIGCLD
  496. # endif
  497. #endif /* UNIX */
  498.  
  499. /*************************************************************************
  500.  *
  501.  * The things below here aren't meant to be tuned, but are included here
  502.  * because they're dependent on the things defined earlier in the file.
  503.  */
  504. #ifdef USE_BCOPY
  505. # define byte_copy(from, to, len)    bcopy((UnivConstPtr)(from), (UnivPtr)(to), (size_t)(len))
  506. # define byte_zero(s, n)    bzero((UnivPtr)(s), (size_t)(n))
  507. #endif
  508.  
  509. #ifndef byte_copy
  510. # ifdef USE_MEMORY_H
  511. #  include <memory.h>
  512. # endif
  513. # define byte_copy(from, to, count)    memcpy((UnivPtr)(to), (UnivConstPtr)(from), (size_t)(count))
  514. # define byte_zero(s, n)        memset((UnivPtr)(s), 0, (size_t)(n))
  515. #endif
  516.  
  517. #ifdef USE_INDEX
  518. # define strchr        index
  519. # define strrchr    rindex
  520. #endif
  521.  
  522. #ifdef FULL_UNISTD
  523. # define POSIX_UNISTD    1
  524. #endif
  525.  
  526. /* SSIZE_T: result type of read() and write() */
  527. #ifdef FULL_UNISTD
  528. # define SSIZE_T    ssize_t
  529. #endif
  530.  
  531. #ifndef SSIZE_T
  532. # define SSIZE_T    int
  533. #endif
  534.  
  535. /* Determine if really ANSI C */
  536. #ifdef __STDC__
  537. # if __STDC__ > 0
  538. #  define REALSTDC 1
  539. # endif
  540. #endif
  541.  
  542. /* Determine number of buffers and the size of a buffer
  543.  * (and hence the maximum length of a line, among other things).
  544.  */
  545.  
  546. #ifdef SMALL
  547. # ifndef NBUF
  548. #  define NBUF        3
  549. # endif
  550. # ifndef JLGBUFSIZ
  551. #  define JLGBUFSIZ    9
  552. # endif
  553. #endif
  554.  
  555. #ifndef NBUF
  556. # define NBUF 64
  557. #endif
  558.  
  559. #ifndef JLGBUFSIZ
  560. # define JLGBUFSIZ 10
  561. #endif
  562.  
  563. #define JBUFSIZ    (1<<JLGBUFSIZ)
  564.  
  565.  
  566. #ifndef NCHARS
  567. # define NCHARS 0400
  568. #endif
  569.  
  570. #ifndef EOL
  571. # define EOL    '\n'    /* end-of-line character for files */
  572. #endif
  573.  
  574. #ifndef MSDOS    /* maximum path length (including '\0') */
  575. # define FILESIZE    256
  576. #else /* MSDOS */
  577. # define FILESIZE    128    /* currently, 2+1+64+3+1+3+1 == 80 ought to be OK */
  578. #endif /* MSDOS */
  579.  
  580. #ifndef SIGRESTYPE    /* default to void, correct for most modern systems */
  581. # define SIGRESTYPE    void
  582. # define SIGRESVALUE    /*void!*/
  583. #endif
  584.  
  585. /* daddr: tmp file index type (see temp.h)
  586.  *
  587.  * On a system which limits JOVE to a very small data segment,
  588.  * it may be worthwhile limiting daddr to a short.  This reduces
  589.  * the size of a Line descriptor, but reduces the addressable size
  590.  * of the temp file.  This is reasonable on a PDP-11 and perhaps
  591.  * an iAPX*86.
  592.  * NOTE: logically, daddr is unsigned, but a signed type will work
  593.  * if you cannot use an unsigned type.
  594.  */
  595.  
  596. #ifdef SMALL
  597.   typedef unsigned short    daddr;
  598. #else
  599.   typedef unsigned long    daddr;
  600. #endif /* SMALL */
  601.  
  602. #define NULL_DADDR        ((daddr) 0)
  603.  
  604. #ifndef CHAR_BITS
  605. # define CHAR_BITS    8    /* factor to convert sizeof => bits */
  606. #endif
  607.  
  608. #define DDIRTY    ((daddr)1 << (sizeof(daddr)*CHAR_BITS - 1))    /* daddr dirty flag */
  609.