8322 nl: misleading-indentation
[unleashed/tickless.git] / usr / src / lib / libxcurses / h / posix / mkslocal.h
bloba02b5419d1436ed14d2dd3a9053dc57244beb180
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
20 * CDDL HEADER END
23 * Copyright 1996-2003 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
27 #pragma ident "%Z%%M% %I% %E% SMI"
30 * <mkslocal.h>, POSIX Version - local <mks.h> requirements
32 * This generic POSIX version should be used as a template for creation of
33 * any new <mkslocal.h> file.
35 * Copyright 1985, 1993 by Mortice Kern Systems Inc. All rights reserved.
37 * $Header: /rd/h/posix/rcs/mkslocal.h 1.168 1995/06/21 20:33:29 jeffhe Exp mark $
40 #if 0 /* not required for POSIX systems; here for documentation only */
42 #include <sys/types.h>
44 #ifndef VERSION
45 #define VERSION "MKS InterOpen I/XCU 4.3 SB" /* Used for version# */
46 #endif
49 #define name-of-system 1 /* for identifying system (i.e. BSD, SYSV,
50 * DOS, etc)
53 #ifndef __STDC__
54 /* For non-ANSI C compilers, we need to define
55 * the character encoding for some special control characters
56 * If these are NOT defined here, then <mks.h> will use
57 * the ASCII encodings as the default values.
59 * For ANSI C compilers, there are special C character constants supported
60 * by the compiler. <mks.h> will properly handle this.
63 #define M_ALERT '\7' /* ASCII encoding for \a */
64 #define M_VTAB '\13' /* ASCII encoding for <VT> */
65 #endif /* __STDC__ */
68 /* M_ESCAPE - the system default character encoding for the <ESC> character
69 * If this is not defined here, then <mks.h> will
70 * default to use the ASCII encodings.
72 #define M_ESCAPE '\033' /* ASCII default code for <ESC> */
74 #define SETVBUF(fp,bp,f,s) setvbuf(fp,f,bp,s) /* for some SysV and Xenix
75 * systems, which have unusual
76 * calling sequences
79 #define M_DEFAULT_PATH "/bin:/usr/bin"
80 /* Default PATH. Not used yet.
84 #define M_CS_PATH "/bin:/usr/bin"
85 /* This string is a list of directories where
86 * all the POSIX.2 utilities can be found.
87 * Returned by constr(_CS_PATH, buf, len).
88 * The shell uses this search path in
89 * command -p util ...
90 * The list plus "." is used by login
91 * and sh as the default $PATH.
94 #define M_CS_SHELL "/bin/sh"
95 /* The pathname of the shell utility.
96 * Returned by confstr(_CS_SHELL, buf, len).
97 * This string defines the path to the
98 * the POSIX.2 command language interpreter,
99 * so we do not have to search M_CS_PATH.
102 #define M_CS_BINDIR "/bin"
103 #define M_CS_LIBDIR "/lib"
104 #define M_CS_TMPDIR "/tmp"
105 #define M_CS_ETCDIR "/etc"
106 #define M_CS_SPOOLDIR "/spool"
107 #define M_CS_NLSDIR "/lib/nls"
108 #define M_CS_MANPATH "/man"
109 /* the M_CS_* strings are used by MKS's version
110 * of the POSIX.2 confstr() API.
111 * The M_CS_*DIR strings point to system
112 * default directories.
113 * The M_CS_*PATH strings may be a list of
114 * colon seperated system directories
118 #define M_BINDIR(path) "/bin/" # path
119 /* M_BINDIR - directory where the POSIX.2
120 * utilities live. (e.g ed, ...)
123 #define M_LIBDIR(path) M_CS_LIBDIR # path
124 /* Define to convert a pathname relative to the
125 * library directory to an absolute pathname.
126 * Traditional systems would use "/usr/lib/"
127 * <mks.h> should always be overridden.
129 * Used by bc, cron
132 #define M_ETCDIR(path) M_CS_ETCDIR # path
133 /* Define to convert a pathname relative to the
134 * etcetera directory to an absolute pathname.
135 * Traditional systems would use "/etc/"
136 * <mks.h> should always be overridden.
137 * Used by file, vi, sh, ccg, lex, awk
140 #define M_SPOOLDIR(path) M_CS_SPOOLDIR # path
141 /* Define to convert a pathname relative to the
142 * spool directory to an absolute pathname.
143 * Traditional systems would use "/usr/spool/"
144 * <mks.h> should always be overridden.
147 #define M_NLSDIR(path) "M_CS_NLSDIR # path
148 /* Directory name used by the locale program
149 * to locate specific compiled locales.
150 * Should always be set, if using the mks
151 * supplied i18n package. Possible location
152 * might be /usr/lib/nls.
154 #define M_TMPDIR M_CS_TMPDIR /* Temporary file storage directory.
155 * Used for P_tmpdir in case its not defined
156 * in <stdio.h>
159 #define M_MANPATH M_CS_MANPATH
160 /* a list of colon seperated pathnames
161 * which the man utility uses
162 * as the default search path
163 * (e.g when MANPATH environment variable
164 * not initialized.
169 #define M_SYSTEM_HELP "help.cmd"/* help command only: If the help command
170 * doesn't know about a given request for help
171 * then pass the help request on to another
172 * help program. Note that if the name for
173 * the other is also help, there must be
174 * some form of name qualification. No attempt
175 * will be made if this is not defined.
176 * <mks.h> will default to undefined
179 #define DEF_NLSPATH "/lib/nls/locale/%L/%N.cat"
180 /* define the default path that should be used
181 * by MKS's implementation of catopen() when
182 * trying to open the message cataloges
183 * If you are not using MKS's implementation
184 * of catopen(), then this definition
185 * is not required.
188 #define M_ENDPWENT 1 /* set to 1 if system provides a endpwent()
189 * routine.
190 * Normally, systems provide this routine
191 * only if getpw*() routines allocate
192 * some resources which a user may want
193 * to deallocate when finished accessing the
194 * user getpw*() routines
195 * This is the case for conventional
196 * UNIX systems
199 #undef M_SHBLTIN_ANYCMD /* set to 1 if you want ability to create an
200 * executable with any name, using shbltin.c.
201 * [ shbltin.c was created to satisfy
202 * POSIX.2-1992 Section 2.3 "regular built-in
203 * utilities". ]
204 * If this is undefined, then the only valid
205 * command names are those listed in an
206 * internal table in shbltin.c which are
207 * are checked at run-time against
208 * basename(argv[0]).
209 * If the command name is not listed in the
210 * table, then program will exit
211 * with an error message.
213 * Normally, this is undefined, since
214 * it becomes too easy to get into an infinite
215 * loop if you name this executable to a
216 * non-bltin command.
219 /* shbltin:
220 * shbltin.c is configurable but its configuration is done
221 * in mkslocal.mk.
222 * See M_SHBLTIN_ULIMIT
223 * See M_SHBLTIN_HASH
224 * See M_SHBLTIN_TYPE
225 * See M_SHBLTIN_XPG4
228 #undef M_FNMATCH_DUALCASE /* fnmatch(): If this #define is set, then
229 * fnmatch will ignore case in file name
230 * matches *unless* the environment variable
231 * at runtime has DUALCASE set.
232 * For a conforming system, this should *not*
233 * be defined. <mks.h> will default to
234 * undefined.
237 #undef M_SMALLSTACK /* Define this to 1 on systems that have
238 * a fixed size stack compiled into programs,
239 * and a small (probably 64k) data segment.
242 #undef M_NULL /* define this if you want to change the
243 * system default defintion of NULL.
244 * (e.g #define M_NULL ((void*)0)
246 #define M_MALLOC 1 /* Define M_MALLOC if your system has either
247 * of the following two problems:
248 * 1) ANSI does not specify returning a valid
249 * errno if malloc() returns NULL.
250 * But, MKS code assumes a valid errno
251 * as is returned in most UNIX systems.
252 * 2) ANSI says it is implementation defined
253 * whether or not malloc(0) returns a valid
254 * pointer.
255 * MKS code assumes that a valid pointer
256 * is returned.
258 * Defining M_MALLOC requires an m_malloc()
259 * function, which MKS provides.
260 * Undefining M_MALLOC causes m_malloc() to be
261 * renamed to malloc(). (See mks.h)
264 #define M_REALLOC 1 /* Defining M_REALLOC will cause
265 * m_realloc() to be used in place of the
266 * systems realloc().
267 * This is necessary:
268 * a) if you do not have an ANSI realloc()
269 * b) if the system realloc()
270 * has the following problem:
271 * - ANSI does not specify returning a valid
272 * errno if malloc() returns NULL.
273 * But, MKS code assumes a valid errno
274 * as is returned in most UNIX systems.
276 * Defining M_REALLOC requires an m_realloc()
277 * function, which MKS provides.
278 * Undefining M_MALLOC causes m_malloc() to be
279 * renamed to malloc(). (See mks.h)
281 #ifdef M_REALLOC
282 #define M_WANT_ANSI_REALLOC 1 /* Use #undef M_WANT_ANSI_REALLOC
283 * if your system has an ANSI realloc() function
285 * Defining M_WANT_ANSI_REALLOC can only be
286 * done if M_REALLOC is also defined.
287 * Use M_WANT_ANSI_REALLOC if your system
288 * does not support either of the following
289 * 2 features:
291 * 1) ANSI says that if the ptr passed to
292 * realloc is NULL, then it will act like
293 * a malloc()
294 * 2) ANSI says that if the ptr passed is
295 * not NULL and the size is 0, then the
296 * object that ptr points to is freed.
298 * Defining M_REALLOC requires an m_realloc()
299 * function, which MKS provides.
300 * Undefining M_MALLOC causes m_realloc() to be
301 * renamed to realloc(). (See mks.h)
303 #endif /* M_REALLOC */
306 #define M_MAXMALLOC 64 /* Define the maximum number of kilobytes (K)
307 * that can be requested from malloc().
308 * This is intended for segmented systems
309 * where max allocation by malloc() is smaller
310 * than the total mallocable memory;
311 * some programs will assume they can do
312 * multiple mallocs of this # of K to allocate
313 * a large data structure.
314 * By default, this is not defined; malloc can
315 * allocate up to MAX_INT bytes.
318 #define __LDATA__ 1 /* DEPRECATED */
319 #define M_LDATA 1 /* For most modern systems this will be set.
320 * Some systems (e.g DOS) have a large and
321 * small program model.
322 * Thus, various programs have two buffer sizes
323 * built into them -- large and small. The
324 * small buffer size is normally sub-optimal,
325 * but permits the data to fit in the small
326 * buffer (say 64k)
329 #ifndef PATH_MAX
330 #define M_PATH_MAX 2048 /* For systems where pathconf(file,_PC_PATH_MAX)
331 * can return -1 and NOT set errno
332 * (which means that PATH_MAX for 'file'
333 * is unlimited),
334 * we provide a suitable LARGE value
335 * that can be returned by m_pathmax().
336 * This number should be sufficiently large
337 * to handle most (if not all) reasonable
338 * pathnames for a particular system.
339 * m_pathmax() is usually used to determine
340 * how large a buffer must be allocated to store
341 * pathnames.
343 #endif /* PATH_MAX */
345 #define M_EXPTIME 1 /* For systems whose files maintain an
346 * additional time field, generally expiry time.
347 * The stat structure must have a member
348 * st_etime and the utimbuf a member exptime.
349 * <mks.h> will default to undefined.
352 #undef ROOTGID
353 #undef ROOTUID /* Some systems may use a different user id
354 * to indicate the superuser.
355 * If it is not defined here, then <mks.h>
356 * will define it to be 0 which is the
357 * value used in conventional UNIX.
360 #define M_AUDIT 1 /* For systems which maintain file auditing
361 * information. M_AUDITW1 and M_AUDITW2 must
362 * be defined, and return one or two audit
363 * words from the stat structure. m_audmode
364 * must be defined in the local libraries
365 * to convert from these two words, to ls style
366 * letter information. <mks.h> will default to
367 * undefined.
369 #define M_AUDITW1(sbp) ? /* Fetch first audit word from stat pointer,
370 * if M_AUDIT defined.
372 #define M_AUDITW2(sbp) ? /* Fetch second audit word from stat pointer,
373 * if M_AUDIT defined. Define as `0' if no
374 * second audit word.
377 #undef M_DEVIO /* use #define M_DEVIO 1 on systems that
378 * requires special interfaces
379 * to perform I/O on devices.
380 * (e.g cannot use the standard open,read,write
381 * interface)
382 * See <devio.h> for details on this
383 * special interface.
384 * Default is undefined; no special device i/o
385 * interface is used.
388 #undef M_DEVBIN /* Use #define M_DEVBIN 1
389 * on systems that have devices that do not
390 * allow raw I/O be written directly
391 * to the device.
392 * These systems tend to process the data
393 * before actually writing the data to the
394 * device.
395 * (e.g DOS disk devices do some character
396 * translations. This routine is intended
397 * to disable this behaviour.)
398 * The definition of m_devbin() and m_devstd()
399 * is done in <mks.h>.
400 * If this is defined, then <mks.h> defines
401 * the prototypes m_devbin() and m_devstd()
402 * Otherwise it undefines m_devstd()
403 * and set m_devbin to return a dummy value of 0
405 * MKS has selected some utilities
406 * to recognize this fact and to handle
407 * these I/O cases specially.
408 * Such utilities include cp, mv, and pax
411 #define M_SETENV 1 /* Some systems require special preparation */
412 char **m_setenv ANSI((void));/* for use of the environment variables via
413 * environ; m_setenv call makes sure that
414 * environ is set up. <mks.h> will default to
415 * m_setenv returning environ. M_SETENV
416 * must be set to indicate to mks.h that a C
417 * function has been defined.
420 #define m_setbinary(fp) /* On systems supporting text and binary files,
421 * (i.e. "rb" and "wb" to fopen work different
422 * from "r" and "w"), there is a requirement
423 * to be able to set stdin/stdout to binary
424 * mode. m_setbinary on such systems should
425 * perform this action. On other systems, this
426 * macro should define itself out of existence.
427 * Normally this macro would be defined in
428 * <stdio.h>. <mks.h> defaults to defining
429 * it out of existence, if not defined.
432 #define M_TFGETC 0 /* Do we have POSIX.1-deficient termios?
433 * On POSIX.1 or SVID compliant systems,
434 * define it as 0 and mks.h will
435 * map m_tfgetc(fp,tp) to fgetc(fp).
436 * On deficient systems (e.g. BSD),
437 * define it as 1 and ensure a m_tfgetc()
438 * routine is provided.
441 #define M_STTY_CC 1 /* The stty command control-character setting
442 * is very system specific. The default code
443 * in stty.c works only for the ascii character
444 * set. <mks.h> will default to M_STTY_CC
445 * being undefined, resulting using the default
446 * code. arg is the string passed to stty; *cp
447 * should have the resulting value stored in it.
448 * A 0 return value indicates success; other-
449 * wise an error message will be printed.
452 #define M_LOGIN_GETTY 1 /* Use #define M_LOGIN_GETTY 1
453 * on systems that do not provide a
454 * getty utility.
455 * This is for use in the login utility to
456 * display a banner that would conventionally
457 * be displayed by the UNIX getty utility
458 * that would have run before login.
459 * If M_LOGIN_GETTY is not defined here,
460 * then login will not print this banner info.
463 #define M_MANPAGER "more -A -s"
464 /* default command that is executed
465 * by the man utility to display a man page
466 * when the user's PAGER environment
467 * variable is not set.
470 #define M_TTYGROUP "tty" /* Name of the group that owns tty's.
471 * If this isn't defined, then <mks.h>
472 * will leave it undefined.
473 * This is related to the MKS default
474 * access enforcment policy for use
475 * by m_wallow(), mesg, talk, and write.
476 * If undefined, it is assumed that no security
477 * is available on tty's.
480 #undef M_CONSOLE /* This is defined to indicate that a pc
481 * style console is used instead of a tty.
482 * This allows for the elimination of
483 * unnecessary calls to m_wallow() from
484 * pc compiles.
485 * Default is undef; m_wallow calls are made.
488 #define M_LKSUFFIX ".lock" /* Suffix for lock file used by mailx and
489 * tsmail (name of mailbox to be locked
490 * is the prefix). ".lock" is typically
491 * used by UNIX sendmail. This should be
492 * set to the same suffix as used by other
493 * mail agents on the machine.
496 #define M_LS_OPT_D 1 /* ls command: Support -D (list only dirs)
497 * This option is non-standard on any unix
498 * system, so is only an option.
499 * Default is not defined, so ls doesn't support
500 * this option.
503 #define M_LOGGER_OPTIONS (log_pid|log_user)
504 /* Set up default options for the logger utility
505 * The logger utility allows the log lines to
506 * be prefixed by pid, ppid, a timestamp,
507 * and/or the login username.
508 * If an implementation wishes to
509 * force some of these prefixes then it
510 * should OR together one or more of the
511 * appropriate constants:
512 * log_pid
513 * log_ppid
514 * log_timestamp
515 * log_user
516 * If M_LOGGER_OPTIONS is not defined here then
517 * logger.c uses the default:
518 * (log_pid|log_user).
521 #define M_LOGGER_CONSOLE "/dev/console"
522 /* logger command: If you wish to use the
523 * default, trivial, logging routines, then
524 * define M_LOGGER_CONSOLE to the name of
525 * a device or file, to which logger may
526 * append the log messages.
527 * If this variable is *not* defined, then
528 * the local system must have m_logger, and
529 * m_logger_close defined and retrieve
530 * either by the make process, or in the
531 * libraries. See the documentation for
532 * the calling sequence of these routines.
535 #undef M_COMPRESSION_AVAIL /*
536 * Not defining M_COMPRESSION_AVAIL indicates
537 * that the compression libary code is not
538 * available.
539 * Changing the #undef to #define should only
540 * be done if the code in libc/mks/m_comp.c
541 * is implemented.
543 * Because UNiSYS holds the patent on the
544 * adaptive Lempel-Ziv compression algorithm,
545 * MKS may not provide the compression
546 * source code (see libc/mks/m_comp.c)
547 * in which case the -z option in pax/tar/cpio
548 * must be disabled.
549 * If the compression algorithm is implemented
550 * in m_comp.c, then this macro can be defined.
553 #define M_TAR_TAPENAME "/dev/mt/%c%c"
554 /* Set up default file name that the pax/tar
555 * utilities will use (e.g when 'f' option
556 * not specified)
557 * This file name is usually a tape device name
558 * Two %c's field specifiers can be included
559 * in the file name;
560 * the first is replaced with tapenumber,
561 * the 2nd with tape density
562 * (l, m, or h, for low, medium or high).
563 * If you either don't have multiple
564 * tapes, or densities, you can leave off extra
565 * %c's.
567 * If this is not defined then pax/tar.h
568 * will use "/dev/mt/%c%c"
571 #undef M_GUNZIP /* When defined, m_dc_open() will test for
572 * gzip-compressed files, and call the
573 * appropriate routines to uncompress them,
574 * in addition the normal operation of testing
575 * for compress-compressed files.
578 #undef M_VI_NO_RECOVER /* vi command: when defined will not include the
579 * :preserve and :recover commands.
582 #define M_VI_COPYRIGHT 1 /* vi command: When sold as a separate product,
583 * vi prints a copyright notice. This flag
584 * causes the notice to be printed. Default is
585 * not defined, which causes vi to NOT print
586 * the copyright notice.
589 #define M_MAKEOS "OS:=POSIX" /*for $(OS) in "make" */
590 /* make command: builtin rule which defines the
591 * $(OS) variable expansion.
592 * Default is not defined, which is an error.
595 #undef M_MAKE_EXIT_DIRECT /* If this is defined, make will call exit()
596 * directly when it receives a signal, rather
597 * than clearing the handler and re-sending
598 * itself the signal. For 1003.2 conformance,
599 * this must not be defined.
602 #define M_MAKEFILES ".MAKEFILES:makefile Makefile"
603 /* rule that make uses when trying to locate
604 * the default makefile to run
607 #define M_MAKEDIRSEPSTR "/" /* Default string of characters that make
608 * will look at and use when manipulating
609 * path names.
611 #define M_GETSWITCHAR '-' /* Default character used to indicate an
612 * option to a command. Note - on some
613 * systems, this may actually be a system-call
614 * instead of a constant. As a consequence
615 * this define should not be used as a
616 * global initializer.
618 #define M_MAKE_BUFFER_SIZE 8192 /* max line length handled by make parser */
619 #define M_MAKE_STRING_SIZE 8192 /* make macro expansion max string size */
620 #define M_MAKE_PATSUB_SIZE 1024 /* make pattern/substitution max string size */
622 #define M_FLDSEP ':' /* The field separator character used in
623 * the PATH environment variable (for sh),
624 * and for the entries in the group database
625 * (e.g /etc/group) and the user database
626 * (e.g /etc/passwd) files.
627 * If this is not defined here, then <mks.h>
628 * will default to ':'.
631 #undef M_TEXT_CR /* Some systems use <cr><lf> pairs rather than
632 * simple <lf>s to delimit text lines. On
633 * these systems, this should be defined.
634 * Default is undefined.
637 #define M_FPPSLOW 1 /* This should be defined for systems whose
638 * floating point operations
639 * are slower than integral operations.
640 * If this in undefined, the assumption will
641 * be fast floating point.
644 #define __CLK_TCK 100 /* units for times() */
646 #undef M_NOOWNER /* for systems which don't have user/group
647 * owners on files.
648 * <mks.h> will default to undefined.
649 * Used by pax
652 #define M_FSDELIM(ch) ((ch)=='/') /* for systems who have special characters to
653 * delimit file systems, this returns true if
654 * the given character is a file system
655 * delimiter; <mks.h> will default to '/'.
656 * ispathdelim() is a deprecated form.
659 #define M_DRDELIM(ch) (0) /* for systems whose names parse with a leading
660 * drive separated by a drive delimiter char,
661 * (e.g. ':' on dos systems); posix systems
662 * simply return false, i.e. no, character
663 * is not a drive delimiter.
664 * <mks.h> will default to (0).
667 #define M_DIRSTAT(pathname, dirp, statbuf) stat((pathname), (statbuf))
668 /* prototype definition:
669 * int M_DIRSTAT(char* pathname,
670 * DIR* dirp,
671 * struct stat* statbuf);
672 * On POSIX and conventional UNIX systems
673 * this macro is defined as:
674 * stat((pathname), (statbuf))
675 /* On systems where the file information is
676 * maintained in the directory (not the inode)
677 * the DIR structure may contain this info,
678 * in which case the information can be returned
679 * without doing a stat(). This may be a
680 * performance enhancement.
681 * dirp is the DIR * pointer returned by opendir
684 #define M_HIDDEN(dirp, dp) ((dp)->d_name[0] == '.')
685 /* prototype definition:
686 * int M_HIDDEN(DIR* dirp, struct* dirent)
688 * Some utilities (e.g ls) recognize certain
689 * filenames as being "hidden" files.
690 * In conventional UNIX systems this has been
691 * the '.' prefix.
692 * On other systems, with other conventions
693 * the M_HIDDEN macro should be suitably
694 * modified
696 * If this is not defined, then
697 * <mks.h> defaults to traditional unix, a
698 * leading `.'.
701 #undef M_NO_FORK /* Define for non-POSIX systems that do not
702 * have a true fork(), and must use some sort
703 * of spawn call (for example, DOS).
704 * By default undefined; there is a fork.
707 #undef M_SYNC_FORK /* fork() is synchronous (DOS). (sh)
708 * Default is undefined; posix.1 fork provided.
711 #undef M_FEXEC /* Use fexec[ve] when possible.
712 * Only define if fexec is faster than fork/exec
713 * (sh, ...)
714 * By default undefined; fork is reasonable
715 * performance.
718 #undef M_EXEC_FILETYPE /* File name types for executables.
719 * For example, .exe and .ksh.
720 * For the shell, you need to define shexecve()
721 * and testpath() in sh$(ORG).c.
722 * By default undefined; no file name types.
725 #undef M_NO_IDS /* POSIX uids and gids.
726 * (sh: set -p; umask; test -[rwx])
729 #undef M_NO_ST_INO /* stat's st_ino is meaningless. (pax; test -ef)
732 #undef M_SVFS_INO /* statvfs() provides valid f_ffree and
733 * f_files fields which describe the number
734 * of free file slots and the total number
735 * of file slots in a filesystem. Used
736 * by df.
739 #undef M_NO_PIPE /* no pipe(), use temp files. (sh, popen)
740 * Default is undefined; posix.1 pipes provided.
743 #undef M_LOCKING_OPEN /* Open'd files are locked, (DOS, OS2)
744 * and cannot be unlink'd or rename'd.
747 #undef M_USE_SIGNAL /* Has no sigaction, use signal (SVR3).
748 * (sh, ...)
751 #undef M_NO_IO_EINTR /* Tty I/O does not return EINTR
752 * when SIGINT signal handler returns.
753 * (sh, ?)
756 #undef M_TTY_ICANON /* Tty is always in ICANON mode.
757 * (sh,ex,mailx)
760 #define M_TTYNAME "/dev/tty" /* Device to open to access the controlling
761 * tty; posix.2 does require this to be /dev/tty
762 * but dos for example calls it /dev/con.
763 * <mks.h> will default to /dev/tty.
766 #define M_NULLNAME "/dev/null" /* Device to open for the null device as defined
767 * by posix.2. It is required to be named
768 * /dev/null, but dos for example calls it
769 * /dev/nul. <mks.h> will default to /dev/null.
772 #define M_FCLOSE_NOT_POSIX_1 1 /* fclose() does not conform to posix.1 section
773 * 8.2. An explicit lseek must be done on the
774 * stream prior to an fclose for the seek
775 * pointer to be correct. <mks.h> will default
776 * to undefined.
779 #define M_FFLUSH_NOT_POSIX_1 1 /* fflush() does not conform to posix.1 section
780 * 8.2. <mks.h> will default to undefined.
781 * If undefined, then mks.h will turn m_fflush
782 * into fflush. If defined, then mks.h will
783 * leave m_fflush alone, and a stdio-specific
784 * routine m_fflush() must be provided which
785 * actually conforms to the standard.
789 #define M_NL_DOM "mks" /* String used as default name (domain name)
790 * to get mks utility messages via the xpg
791 * catopen/catgets message translation functions
792 * For example, in XPG:
793 * catopen (M_NL_DOM, ...)
797 #define M_L_CUSERID 16 /* Length of longest user id returned by
798 * cuserid() routine.
799 * Used for L_cuserid in case its not
800 * defined in <stdio.h>
803 #define M_FSMOUNT "/etc/mtab"
804 /* This pathname is passed as the 1st argument
805 * to setmntent() routine.
806 * On conventional UNIX systems, this
807 * pathname identifies a file that contains
808 * a list of all the actively mounted systems.
809 * The mount utility is normally responsible
810 * for adding entries to this file
811 * and umount utility deletes the entries.
813 #define M_FSALL "/etc/fstab"
814 /* this pathname identifies a file that
815 * is similar to M_FSMOUNT, but instead of
816 * the actively mounted file systems, it
817 * has a list of ALL possible filesytems
818 * that could be mounted.
819 * This file normally used by the mount
820 * command to find all the file systems
821 * to mount by default.
824 #define M_NLSCHARMAP "/usr/lib/nls/charmap/ISO_8859-1"
825 /* Name of default charmap file to use in
826 * localedef if -f charmap option isn't
827 * used.
830 #define M_ISEOV(error) (error == EINVAL)
831 /* This macro is used after an unsuccessful
832 * read() or m_devread() to determine
833 * if end-of-volume has been encountered.
834 * This macro should be invoked using the
835 * errno returned by the read().
836 * The macro should evaluate to 1 (true)
837 * if it can determine the EOV condition
838 * from this errno.
839 * Otherwise, should evaluate to 0 (false)
840 * <mks.h> defaults to 0, i.e. never EOV
843 #define M_COMPRESS_DEFBITS 16
844 /* Default # of bits to compress in compress.
845 * If not defined, compress defaults to 16.
846 * Probably only useful on systems with limited
847 * memory capacity.
850 #define M_CURSES_VERSION "MKS Interopen Curses"
851 /* Curses product version string. This
852 * string will be imbedded in the excutable
853 * for an application. This string should
854 * be set to the vendor's product code used
855 * for Curses.
858 #undef M_CURSES_MEMMAPPED /* Define this symbol to compile up curses
859 * for a memory mapped display, such as the PC.
860 * Rather than allocating memory for the main
861 * screen window, this is compiled to point
862 * directly at the mapped memory. This will
863 * require some custom code.
866 #define M_TERM_NAME "dumb"
867 /* Default terminal name used if TERM is
868 * not set in the environment.
871 #define M_TERMINFO_DIR "/usr/lib/terminfo"
872 /* Default location for the terminfo database
873 * if TERMINFO is not set in the environment.
875 * NOTE: Only define this macro if curses
876 * is available on this system since
877 * this macro is also used to
878 * determine if "curses" is available
881 #define M_BSD_SPRINTF 1 /* Defined if sprintf on this system has BSD
882 * semantics ie. if sprintf() returns a pointer
883 * to the string rather than the number of
884 * characters printed.
887 #define M_IS_NATIVE_LOCALE(s) (strcmp(s, "POSIX") == 0 || strcmp(s, "C") == 0)
888 /* Change this definition to define the locale
889 * that the machine level comparison function
890 * strcmp conforms to. On all ascii machines,
891 * strcmp will order the same as the POSIX
892 * locale. <mks.h> defaults to the def'n given
893 * here.
896 #undef M_NOT_646 /* Define this symbol if the local invariant
897 * character set does not conform to ISO646.
898 * Normally, this would only be set for
899 * EBCDIC systems.
900 * Several utilities (e.g pax/tar/cpio)
901 * are explicitly required to use 646,
902 * so if this flag is defined, then there
903 * is special code which will be
904 * compiled in to do the appropriate
905 * character set translation.
908 #define M_FILENAME_CODESET "IS8859"
909 /* If M_NOT_646 is defined, then you must
910 * define the codeset that filenames are
911 * stored in. This must be a string value,
912 * that can be passed into iconv.
913 * Theoretically, this could be a call to
914 * setlocale, to some extention that would
915 * return the name of the charmap.
918 #define M_STKCHK expression /* Define this macro on systems that have a
919 * fixed size stack.
920 * This macro should define an expression
921 * that can be used to check if the current
922 * C function stack is within some distance
923 * from the end of available stack size.
924 * Return 0 if it is -- i.e. unsafe to
925 * recurse further.
926 * <mks.h> defaults to undefined;
927 * i.e. no stack bounds checking.
928 * This is only called from a few programs
929 * which allow the user to perform recursion.
932 #define M_ST_RDEV(sb) ((sb).st_rdev)
933 #define M_DEVMAJOR(statp) ((uint)major((statp)->st_rdev))
934 /* Prototype: uint M_DEVMAJOR(struct stat *);
936 * Return the major device number given
937 * a "struct stat *".
938 * Assumes the stat structure pointer
939 * represents a special device file.
940 * MKS recommends all systems define
941 * some method of extracting this information
942 * from this structure
943 * (eg. define a st_rdev or st_major member
944 * in the struct stat.)
945 * This macro must be defined to return some
946 * unsigned integer value.
949 #define M_DEVMINOR(statp) ((uint)minor((statp)->st_rdev))
950 /* Prototype: uint M_DEVMINOR(struct stat *);
952 * Return the minor device number given
953 * a "struct stat *".
954 * Same recommendations as M_DEVMAJOR above.
957 #define M_DEVMAKE(mjr, mnr) (makedev((mjr), (mnr)))
958 /* Build a dev_t from a major and minor #
959 * M_DEVMAKE(M_DEVMAJOR(sbp), M_DEVMINOR(sbp))
960 * just returns the dev_t from the stat buf
963 #define M_INODIRENT(name, dirbuf) ((ino_t)((dirbuf)->d_ino))
964 /* Prototype:
965 * ino_t M_INODIRENT(char *, struct dirent *);
967 * Return the inode belonging to the directory
968 * entry corresponding to dirbuf. The name
969 * parameter is the path name given to a
970 * previous call to opendir().
973 #define M_ST_BLOCKS(sbp) ((sbp)->st_blocks)
974 #define M_ST_BLKSIZE(sbp) ((sbp)->st_blksize)
975 /* If the implementation supports, in the stat
976 * structure, the actual disk space allocation
977 * to a given file, then M_ST_BLOCKS should
978 * be defined to return that member from the
979 * passed stat structure pointer.
980 * M_ST_BLKSIZE should be the number of bytes
981 * in a M_ST_BLOCKS unit; normally a
982 * different member of the stat structure.
984 * These macros are not required.
985 * Programs that use these macros
986 * will fall back on computing these
987 * values from the st_size field.
990 #define M_MATHERR 0 /* If the math library supports matherr(),
991 * define with a non-zero value.
992 * MKS recommends that all ANSI-C libraries
993 * support this.
994 * By default, not defined.
997 #define M_AWK_SUBSEP "\034" /* Default SUBSEP value in awk. This value
998 * is appropriate for ASCII based character
999 * sets.
1002 #define M_FSCLOSE(fp) fclose(fp)
1003 /* define M_FSCLOSE(fp) to be the function
1004 * that cleans up the resources allocated
1005 * by m_fsopen().
1006 * Since m_fsopen() implementation is system
1007 * specific, so is M_FSCLOSE().
1010 #define M_LEX_8BIT 1 /* If this is defined, lex will produce
1011 * 8-bit tables by default (the normal
1012 * default is 7-bit tables).
1015 #define M_NUMSIZE 30 /* M_NUMSIZE should be defined to the length
1016 * in character positions, of the longest
1017 * number that can be sprintf()'d into a string
1018 * (longest of any type of number,
1019 * eg. float, long, double ...)
1020 * For example, if your system prints
1021 * 30 characters for sprintf(str, "%le", float)
1022 * then M_NUMSIZE should be set to at least 30.
1024 * This is used in awk to guess at the size
1025 * that each element of an sprintf() will be
1026 * so that it can internally allocate enough
1027 * storage.
1029 * If this is not defined, then a default
1030 * value is used from <mks.h>
1034 * File System (Naming) Attributes.
1035 * M_ONE_DOT, M_NO_LEADING_DOT, and M_SHORT_EXT are deprecated, in favour
1036 * of the m_fstype() function. However, until all code has been converted
1037 * they must be set appropriately. The obsolescent versions do not permit
1038 * supporting a system with multiple filesystem types: they are all statically
1039 * tested via pre-processor directives. The new version permits mixing for
1040 * example of a posix file system, with say a dos floppy file system, such
1041 * as is available on many unix systems today.
1042 * If your system is posix conformant, do not set any of these variables
1043 * or functions; <mks.h> will default to a #define for m_fstype to
1044 * a POSIX style naming convention.
1046 #undef M_FSTYPE /* If m_fstype is defined in mkslocal.h,
1047 * either as a #define, or a function decl.
1048 * then define M_FSTYPE, so <mks.h> won't
1049 * define m_fstype into M_FSTYPE_POSIX.
1052 #undef m_fstype(path) /* Either #define, or function returning a
1053 * combination of file naming attributes,
1054 * and the file system type. On a system
1055 * with only one file system type, this would
1056 * be a #define; on a system with multiple a
1057 * function which would decide based on the
1058 * path arg given. Either M_FSTYPE_POSIX or
1059 * M_FSTYPE_FAT, should be or'ed with any of
1060 * M_FSATTR_ONE_DOT, M_FSATTR_SHORT_EXT and
1061 * M_FSATTR_NO_LEADING_DOT. These three
1062 * M_FSATTR_ bit flags conform to the three
1063 * following obsolete defines.
1066 #undef M_ONE_DOT /* Use #define M_ONE_DOT 1
1067 * for non-posix files systems which
1068 * permit only one dot in a filename.
1069 * Thus, for example, y.tab.c, will become
1070 * ytab.c, based on this #define.
1071 * <mks.h> will default to undefined.
1074 #undef M_NO_LEADING_DOT /* Use #define M_NO_LEADING_DOT 1 for
1075 * non-posix file systems which do not
1076 * permit a leading dot in a filename.
1077 * Thus, for example, .profile will become
1078 * profile.ksh based on this #define.
1079 * <mks.h> will default to undefined.
1082 #undef M_SHORT_EXT /* Use #define M_SHORT_EXT 1
1083 * for non-posix file systems which
1084 * permit only a limited number of characters
1085 * after a dot in a filename.
1086 * Defining M_SHORT_EXT will limit filenames
1087 * to 3 characters after the dot.
1088 * For example, y.output will become y.out
1089 * <mks.h> will default to undefined.
1093 * customizations for ps field specifiers and widths
1094 * This will vary from system to system depending on the max size
1095 * of the values in the different fields
1096 * The following are UNIX (e.g SYSV and BSD) std defaults
1098 #define M_PS_FFMT { m_textstr(4865, "ruser=UID", "I"),\
1099 m_textstr(4866, "pid,ppid,pcpu=C", "I"),\
1100 m_textstr(4861, "stime,tty=TTY", "I"), "atime,args",\
1101 NULL };
1102 #define M_PS_JFMT { m_textstr(4867, "pid,sid,pgid=PGRP", "I"),\
1103 m_textstr(4862, "tty=TTY", "I"), "atime,args", NULL };
1104 #define M_PS_LFMT { m_textstr(4868, "flags,state,ruid=UID", "I"),\
1105 m_textstr(4866, "pid,ppid,pcpu=C", "I"),\
1106 m_textstr(4869, "pri,nice,addr,vsz=SZ", "I"),\
1107 m_textstr(4870, "wchan,tty=TTY", "I"),\
1108 m_textstr(4863, "atime,comm=COMD", "I"), NULL };
1109 #define M_PS_DEFFMT { m_textstr(4864, "pid,tty=TTY", "I"), "atime,comm",\
1110 NULL };
1111 #define M_PS_PID_WIDTH 5
1112 #define M_PS_XPID_WIDTH 8
1113 #define M_PS_GID_WIDTH 5
1114 #define M_PS_UID_WIDTH 5
1115 #define M_PS_TTY_WIDTH 7
1117 * The syntax for specifying and displaying terminal names in ps and who
1118 * is required to be the same.
1119 * Since who gets the names from the utmp file, the ps utility
1120 * (and the m_psread() function) needs to know what format these terminal
1121 * names are presented in the utmp file.
1122 * It would appear that all systems have devices in the /dev/ file system
1123 * and that terminal names are displayed as the name rooted from "/dev".
1124 * Since ttyname() returns a full pathname, we can just strip
1125 * off the "/dev/" prefix and we will get the correct name.
1127 * The ps utility uses ttyname() to get the name of the controlling terminal.
1128 * M_PS_TTY_PREFIX_TOSTRIP is a prefix string that must be removed from
1129 * the name that ttyname() returns in order to match the name returned
1130 * by m_psread().
1131 * If no prefix is to be removed, then a zero length string ("") should be used
1133 #define M_PS_TTY_PREFIX_TOSTRIP "/dev/"
1136 #define M_LOCALE_NLS_DIR "/usr/lib"
1137 /* Define this if you have a system that
1138 * implements the MKS rootname() function
1139 * (e.g not a no-op)
1140 * and you want to specify the absolute
1141 * pathname to the NLS directory
1142 * which is independent of semantics of rootname().
1143 * Depending on the implementation of rootname(),
1144 * it may prefix the path with $ROOTDIR environment
1145 * variable or it may return a path relative to
1146 * the know location of where the product has
1147 * been installed (or maybe something else!)
1149 * If this is not defined, then locale will
1150 * call confstr(_CS_NLSDIR), which in turn calls
1151 * rootname(M_NLSDIR), and you get this resultant
1152 * pathname.
1154 * Thus, if you want locale to look in the system native
1155 * nls directory, then define this.
1156 * Otherwise, it will probably look in a user
1157 * specified directory, or the product installation
1158 * directory.
1162 /* Cron configuration options:
1163 * M_CRON_USESFIFO define this (to 1) if your cron is implemented
1164 * using a FIFO (normally found in /usr/lib/cron/FIFO)
1165 * to accept communication from the at/batch/crontab
1166 * utilities when notifying cron of changes to the
1167 * at/batch queues or the user crontabs.
1168 * If this is not defined, then cron will expect
1169 * a signal (SIGUSR) from at/batch/crontab to indicate
1170 * a change in the at/batch queues or the crontabs
1172 * M_CRONVARS_DEFINED define this if you define the pathnames below.
1173 * If you don't define this, then the pathnames that cron
1174 * uses is defined in src/cron/cronvars.c.
1175 * (e.g it uses the rootname() and the M_SPOOLDIR,
1176 * M_LIBDIR macros )
1178 * This can be used to override cronvars.c definitions
1179 * This is useful on systems that you don't want to
1180 * use MKS's cron daemon and thus, you have to define
1181 * the directories/files where the system cron expects
1182 * things.
1184 #undef M_CRON_USESFIFO
1186 #undef M_CRONVARS_DEFINED
1188 /* the following M_CRON_* macros necessary only
1189 * if M_CRONVARS_DEFINED is defined above
1191 #undef M_CRON_SPOOLDIR /* usually /usr/spool/cron */
1192 #undef M_CRON_LIBDIR /* usually /usr/lib/cron */
1193 #undef M_CRON_CRONTABSDIR /* usually /usr/spool/cron/crontabs */
1194 #undef M_CRON_ATJOBSDIR /* usually /usr/spool/cron/atjobs */
1195 #undef M_CRON_LOGFILE /* usually /usr/lib/cron/log */
1196 #undef M_CRON_PIDFILE /* usually /usr/lib/cron/pid */
1197 #undef M_CRON_QUEUEDEFSFILE /* usually /usr/lib/cron/queuedefs */
1198 #undef M_CRON_FIFOFILE /* usually /usr/lib/cron/FIFO */
1199 /* FIFOFILE only necessary if M_CRON_USESFIFO
1200 * is defined
1203 * M_CRON_MAILER:
1204 * This is a string that specifies a utility names
1205 * or a shell filter (e.g pipeline) that gets executed by the
1206 * cron daemon to deliver mail messages.
1207 * If this is NOT defined here, the the default case is used (see <mks.h>)
1209 * Default case:
1210 * #define M_CRON_MAILER "sed -e s/^~/~~/ | mailx "
1212 * Assumes only POSIX.2 mailx is available.
1213 * Must be careful when cron sends output to mailx.
1214 * We must ensure that lines with leading '~' are escaped
1215 * so mailx doesn't interpret these lines
1216 * This string MUST include a trailing space character.
1218 #define M_CRON_MAILER "sed -e s/^~/~~/ | mailx "
1222 * Defining M_SYSTEM_TMPDIR indicates that a system global
1223 * temporary directory should be used on this system.
1224 * This will override M_TMPDIR, and any calls to rootname(M_TMPDIR)
1225 * which is relative to the product installation directory
1227 #define M_SYSTEM_TMPDIR "/tmp"
1230 * ex/vi's recover command (and the program of the same name)
1231 * requires a directory in which to store any preserved tmp files.
1232 * Normally these are stored in rootname(M_ETCDIR(recover))
1233 * which is becomes a directory name relative to ROOTDIR env variable (on DOS)
1234 * or relative to the product installation directory.
1235 * Defining M_PRESERVEDIR will ensure that this directory is used
1236 * and calls to rootname() are bypassed.
1237 * (e.g the absolute directory name defined by M_PRESERVEDIR will be used)
1239 #define M_PRESERVEDIR "/var/recover"
1242 * Defining M_SYSTEM_MAILDIR will cause mailx to use this
1243 * absolute directory name - e.g bypass the call to rootname() so
1244 * it doesn't become relative to product installation directory.
1246 #define M_SYSTEM_MAILDIR "/usr/mail"
1249 #undef M_ULIMIT_AVAIL /* define this if your system provides the SystemV
1250 * ulimit() API and the <ulimit.h> header file
1252 * This information is used by 'at' utility
1256 * Shell configuration options.
1257 * NOTE: If not defined here, then there may be
1258 * a default defined in src/sh/sh.h; NOT <mks.h>.
1260 * You must configure built-in utilities in sh/sh.mk.
1261 * Currently, test and printf can be built-in.
1262 * If you just compile the shell without -D's,
1263 * you do not get these built-in utilities.
1265 #define M_SH_ULIMIT 0 /* Shell SVR4 ulimit built-in.
1266 * Uses getrlimit/setrlimit(2).
1268 * NOTE: This may be defined in mkslocal.mk
1269 * along with the build configuration required
1270 * for shbltin.c.
1272 /* M_SH_GETCWD removed, no longer used. default for physical cd/pwd */
1273 #define M_SH_BGNICE 0 /* Set -o bgnice for interactive shell.
1275 #define M_SH_BUILTIN_SEARCH 1 /* Do path search for utility built-ins.
1276 * See POSIX.2/D12, section 3.9.1.1.
1277 * Currently they are:
1278 * [, echo, test, time, printf, pwd.
1280 #define M_SH_RSH 0 /* rsh is installed as a link to sh.
1281 * Vendor option, not required by any standard.
1282 * Not recommended on UNIX.
1284 #define M_SH_USER_FDS 10 /* Number of user file descriptors.
1285 * The value for [n] in redirection
1286 * can be between 0 and M_SH_USER_FDS-1.
1287 * Must be >= 10, should be <= OPEN_MAX/2.
1289 #define M_SH_LINE_MAX LINE_MAX /* Shell input line buffer size.
1291 #undef M_JOB_CONTROL_OFF /* Disable job control,
1292 * were _POSIX_JOB_CONTROL is defined.
1294 #undef M_COPYRIGHT /* MKS Toolkit.
1295 * Print MKS copyright on startup (sh).
1297 #undef M_SH_CRITERROR /* MKS Toolkit.
1298 * set -o criterror (DOS, OS/2).
1301 #define M_SH_MAX_FUNCTION_EVAL_DEPTH 100
1302 /* The limit on how deep function
1303 * evaluation can go when shell
1304 * functions execute shell functions.
1305 * This stops the shell from crashing
1306 * if an infinitely recursive function
1307 * is evaluated. If the value is 0
1308 * then functions can't be executed at
1309 * all, if the value is 1 then
1310 * functions can't execute other
1311 * functions, and so on. If the macro
1312 * M_STKCHK is defined then there will
1313 * be no limit and M_STKCHK will be
1314 * used to prevent a crash.
1317 #undef M_SPAWN /* This code is prototype code only. It
1318 * has not been tested, and should not be
1319 * used.
1320 * This code is not supported, except through
1321 * special arrangements with MKS.
1325 #define M_EXPR_POSIX 1
1327 * POSIX requires that numbers on the
1328 * expr command line always be considered
1329 * decimal. We support octal and hex as
1330 * as well. Defining this will turn that
1331 * extension off by default, but it is still
1332 * accessible by specifying the new '-W' flag
1335 #undef M_RE_SUB_ANCHOR /* Define this if you wish your baisc regular
1336 * expressions to support anchors
1337 * (^ and $) inside of subexpressions.
1338 * See POSIX.2 section 2.8.3.5.
1343 * In order to get full Posix.2 i18n, then you must either:
1345 * i) Use the full mks ansi-c library; mks localedef, mks locale.h file...
1346 * ii) Extend your own ansi-c library to contain the mks specified functions
1347 * as described in the mks Porting and Tuning Guide.
1349 * Otherwise, it is not possible to conform to posix .2.
1351 * You may still turn on I18N, and get as much internationalization as is
1352 * possible using a standard ANSI-C compiler.
1354 * Your options are:
1355 * i) Full posix conformance. You must have i or ii above, and must define
1356 * M_I18N and M_I18N_MKS_{FULL,XPG}.
1357 * ii) I18N at ANSI-C level. You must define I18N, do not
1358 * define M_I18N_MKS_{FULL,XPG}.
1359 * iii) No I18N. Do not define I18N, do not define M_I18N_MKS_{FULL,XPG}. */
1360 #define I18N 1 /* OBSOLESCENT version of I18N
1361 * This should be removed when all occurances
1362 * of I18N are removed from the MKS code
1364 #define M_I18N 1 /* Do we want internationalized code? To build
1365 * a system where everything gets deleted at
1366 * compile time via #define's when possible,
1367 * this flag should be set. <mks.h> does not
1368 * define I18N, but it is normal to set it.
1370 #define M_I18N_MKS_FULL 1 /* Defining this, indicates you are using
1371 * MKS i18n extension routines
1372 * (e.g m_collrange(), m_collequiv() ...
1373 * localedtconv, localeldconv() ...)
1374 * Defining this to 2 indicates that you
1375 * want to use MKS's implementation of these
1376 * routines and the implementation of MKS's
1377 * format of the locale data files.
1378 * Defining this to 1 indicates you don't want
1379 * MKS's implementation, and you must write
1380 * your own code for m_collrange(), collequiv()
1381 * ...
1382 * note: there are some routines like
1383 * localedtconv which can obtain the
1384 * necessary info from nl_langinfo()
1385 * if this is supported
1386 * See M_I18N_MKS_XPG below
1388 #define M_I18N_MKS_XPG 1 /* This is only useful if M_I18N_MKS_FULL == 1.
1389 * This flag indicates that nl_langinfo()
1390 * is available and can be used to
1391 * retrieve some of the locale information.
1392 * ( used in localeldconv() and localedtconv()
1393 * routines)
1396 #define M_I18N_M_ 1 /* MKS has defined some additions i18n API's.
1397 * (e.g m_collequiv, m_collrange ...)
1398 * This flag indicates that these API's start
1399 * with "m_".
1400 * It is the MKS intention that if these
1401 * extentions get approved/standardized
1402 * (by POSIX or ANSI or ...)
1403 * all code will have the m_ removed.
1404 * Since it is not yet approved,
1405 * we are maintaining the mks conventions of
1406 * prefixing our private libraries with m_.
1407 * If you have chosen to implement these
1408 * routines without the m_ do not define
1409 * M_I18N_M_
1412 #define M_I18N_MB 1 /* Define if multibyte character support
1413 * is required.
1416 #define M_LOCALEINFO_IN_DIRECTORY 1
1417 /* This macro indicates if the locale
1418 * information is stored in a directory,
1419 * or in a file.
1420 * For instance, many systems use
1421 * /usr/lib/locale
1422 * as a directory to store all their locale
1423 * information.
1424 * In this directory is stored the info
1425 * for each supported locale.
1426 * (e.g POSIX, C, en_US, fr, ...)
1427 * It is assumed that there is one entry here
1428 * for each supported locale.
1429 * If these entries are sub-directories,
1430 * then this macro is defined.
1431 * If these entries are files, then do not
1432 * define this macro.
1435 #undef M_I18N_LOCKING_SHIFT /* Define if any multibyte character sets
1436 * used are locking-shift character sets.
1440 #undef M_VARIANTS /* This can be defined on EBCDIC systems
1441 * where the POSIX.2 portable characters are not
1442 * invariant across all the code pages
1443 * supported.
1444 * By defineing this, user is allowed
1445 * to define the encodings
1446 * for these characters as they switch between
1447 * the various code pages by setting up
1448 * the VARIANTS environment variable..
1449 * so that the various utilities will cope
1450 * with the different encodings gracefully.
1452 /* Source code hints:
1453 * if you define this, you will need
1454 * h/variant.h, h/m_invari.h
1455 * libc/mks/getsyntx.c,
1456 * libc/mks/m_varian.c
1458 * If this is not defined, then all you need
1459 * is
1460 * h/m_invar.h
1464 * Define the following if you want the corresponding posix define with
1465 * a single leading underscore
1467 #define __POSIX_JOB_CONTROL _POSIX_JOB_CONTROL
1468 #define __POSIX_SAVED_IDS _POSIX_SAVED_IDS
1469 #define __POSIX_NO_TRUNC (-1)
1470 #define __POSIX_VDISABLE 0xff
1473 * On some systems where code size and performance are problems, it
1474 * may be desirable to use a simplified version of the m_loxclose() routine
1475 * in programs that don't require the full functionality. If this is the
1476 * case and routine m_loxqclose() has been provided, define the following
1477 * macro. (Refer to the Library/eXecutable/Object interface documentation
1478 * for more information.
1480 #undef M_LOXQCLOSE
1483 * some systems require overrides after <mks.h> is read.
1484 * If your system requires this, define M_MKSEXTRA_H here
1485 * so that the "#include <mksextra.h>" is exposed in <mks.h>
1487 #undef M_MKSEXTRA_H
1490 * mailx configuration
1494 * Many mail systems support the non-standard "Content-Length" header
1495 * which contains the length of the body of the message (not including
1496 * the headers) in bytes. Defining M_MAILX_CONTENT_LENGTH_ENABLE will
1497 * turn on code in mailx to generate this header when mail is sent and
1498 * honour it when scanning mailboxes.
1500 #undef M_MAILX_CONTENT_LENGHT_ENABLE
1502 #endif /* 0. not required for POSIX systems; here for documentation only */
1505 #define halloc(n,s) malloc((size_t)((n)*(s)))/* alloc big chunk of mem*/
1506 #define hfree(ptr) free(ptr) /* free big chunk of mem */
1507 #define m_cp(src, dest, ssb, flags) (M_CP_NOOP)
1508 #define rootname(fn) fn /* make relative to root */
1512 * MKS makes use of types that may or may not already be defined in the
1513 * system <sys/types.h> file. If not defined, then they must be defined
1514 * here. (The problem is a lack of #if directive to determine an existing
1515 * typedef.
1517 typedef unsigned char uchar;
1518 typedef unsigned short ushort;
1519 typedef unsigned int uint;
1520 typedef unsigned long ulong;
1523 * Define any Optional Facility Configuration Values here.
1524 * See POSIX.2, 2.13.2, Table 2-18
1525 * We define them here as M_ entries; this allows unistd.h to test the
1526 * M_ variable, and if defined, define the official _POSIX2_ variable.
1527 * **Note: It isn't permitted for a real conforming unistd.h to #include <mks.h>
1528 * due to name space contamination problems. A real, conforming implementation
1529 * will manually modify their unistd.h to define the _POSIX2 variables
1530 * appropriately.
1532 #define M_POSIX2_C_BIND 1
1533 #define M_POSIX2_C_DEV 1
1534 #undef M_POSIX2_FORT_DEV
1535 #undef M_POSIX2_FORT_RUN
1536 #define M_POSIX2_LOCALEDEF 1
1537 #define M_POSIX2_SW_DEV 1
1540 * New definitions for I/PSU 3.3
1543 #undef M_POSIX_PFNCS_ONLY /* define this to be true if the implementation
1544 * only supports the portable filename
1545 * set as defined in POSIX.1
1548 #undef M_NO_STIME /* set this define to be true if the system
1549 * does not support the stime() API.
1552 #undef M_TTYSTREAM /* if it isn't possible to open a new console
1553 * stream through device names, define this
1554 * macro to be true. The support library must
1555 * define a routine "m_ttystream()" that can
1556 * return the required stream.
1559 #undef M_NOT_ROOT /* this should be defined to be the name of a
1560 * library routine that returns true if the
1561 * process has appropriate privileges
1564 #undef M_NO_VI_KEYPAD /* this should be defined when the system
1565 * can't support keypad and cursor-key
1566 * functions in vi.
1569 #undef M_USERID_FMT /* format string for printing out the user
1570 * name. It is "%-8.8s" by default.
1573 #undef M_USE_M_CP /* indicates that code is to use the m_cp()
1574 * interface.
1575 * (Note - this API is not fully supported
1576 * in the IPSU.3.X development line. Full
1577 * support will be available in a future
1578 * major release.)
1581 #undef M_GUESS_FILE_TYPE /* If the system provides alternative
1582 * mechanisms for determining the type of a
1583 * file, define this macro to true. If you are
1584 * using this feature, you must provide a new
1585 * function int m_guess_file_type(char *name);
1586 * Returns true if type of file name is
1587 * successfully identified.
1588 * (Note - this API is not fully supported in
1589 * the IPSU.3.X development line. Full
1590 * support will be available in a future
1591 * major release.)
1594 #undef M_INCR_NICE /* default nice incr, if this macro is not
1595 * defined a builtin default will be used
1596 * (see the source for nice for more details.)
1599 #undef M_INCR_RENICE /* default renice incr, if this macro is
1600 * not defined a builtin default will be
1601 * used (see the source for renice for more
1602 * details.)
1605 #undef M_PS_COMM_WIDTH /* width of command field printed by PS */
1607 #undef M_PS_USER_WIDTH /* width of user and ruser fields printed by
1608 * PS
1611 #undef M_PS_PRI_WIDTH /* width of PRI field printed by PS */
1613 #undef M_UT_TIME_STRING /* true if utmp ut_time struct is a string
1614 * instead of a number.
1617 #undef M_SH_ENTRY1
1618 #undef M_SH_ENTRY2
1619 #undef M_SH_ENTRY3
1620 /* The above 3 macros are provide in the
1621 * shell to allow system-specific extensions
1622 * to be added.
1623 * (Note - this API is not fully supported in
1624 * the IPSU.3.X development line. Full
1625 * support will be available in a future
1626 * major release.)
1629 #undef M_NO_CANONICAL_MODE /* set this macro to true if the system
1630 * doesn't support tty buffering in
1631 * canonical mode.
1634 #undef M_NO_PASSWD_SCAN /* true if system doesn't provide a
1635 * mechanism for scanning a list of all
1636 * users on the system.
1639 #define M_GROUP_PASSWD(grp) ""
1640 /* prototype:
1641 * char *M_GROUP_PASSWD(struct group *grp)
1642 * This api returns a pointer to a string
1643 * that contains the password for group 'grp'.
1644 * If no password is available, then an empty string should be
1645 * returned.
1647 * On historical UNIX systems, group passwords are found in
1648 * the gr_passwd member in struct group.
1649 * Thus, this macro should be defined as
1650 * #define M_GROUP_PASSWD(grp) grp->gr_passwd
1652 * On systems that do not provide group passwords,
1653 * then macro can be defined as an empty string:
1654 * #define M_GROUP_PASSWD(grp) ""
1659 #undef M_RCS_NORCSLIB /* Set this macro to true in order
1660 * remove rcslib dependency of utilities
1661 * such as ident.
1664 #undef M_CHMOD_LINK /* Set this macro to true if the system is
1665 * able to perform a chmod() of a link as
1666 * opposed to following the link.
1669 * Include any system-specific prototypes here
1673 * Include any #define's to avoid name clashes with namespace polluting
1674 * operating system routines
1676 * e.g.: #define openfile MKSopenfile