xref: /plan9/sys/src/ape/cmd/pax/port.h (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1 /* $Source: /u/mark/src/pax/RCS/port.h,v $
2  *
3  * $Revision: 1.2 $
4  *
5  * port.h - defnitions for portability library
6  *
7  * DESCRIPTION
8  *
9  *	Header for maintaing portablilty across operating system and
10  *	version boundries.  For the most part, this file contains
11  *	definitions which map functions which have the same functionality
12  *	but different names on different systems, to have the same name.
13  *
14  * AUTHORS
15  *
16  *	Mark H. Colburn, NAPS International (mark@jhereg.mn.org)
17  *	John Gilmore (gnu@hoptoad)
18  *
19  * Sponsored by The USENIX Association for public distribution.
20  *
21  * Copyright (c) 1989 Mark H. Colburn.
22  * All rights reserved.
23  *
24  * Redistribution and use in source and binary forms are permitted
25  * provided that the above copyright notice and this paragraph are
26  * duplicated in all such forms and that any documentation,
27  * advertising materials, and other materials related to such
28  * distribution and use acknowledge that the software was developed
29  * by Mark H. Colburn and sponsored by The USENIX Association.
30  *
31  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
32  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
33  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
34  */
35 
36 #ifndef _PAX_PORT_H
37 #define _PAX_PORT_H
38 
39 /*
40  * Everybody does wait() differently.  There seem to be no definitions for
41  * this in V7 (e.g. you are supposed to shift and mask things out using
42  * constant shifts and masks.)  In order to provide the functionality, here
43  * are some non standard but portable macros.  Don't change to a "union wait"
44  * based approach -- the ordering of the elements of the struct depends on the
45  * byte-sex of the machine.
46  */
47 
48 #define	TERM_SIGNAL(status)	((status) & 0x7F)
49 #define TERM_COREDUMP(status)	(((status) & 0x80) != 0)
50 #define TERM_VALUE(status)	((status) >> 8)
51 
52 /*
53  * String library emulation definitions for the different variants of UNIX
54  */
55 
56 #if defined(USG)
57 
58 #   include <string.h>
59 #ifndef _POSIX_SOURCE
60 #   include <memory.h>
61 #endif
62 
63 #else /* USG */
64 
65 /*
66  * The following functions are defined here since func.h has no idea which
67  * of the functions will actually be used.
68  */
69 #  ifdef __STDC__
70 extern char *rindex(char *, char);
71 extern char *index(char *, char);
72 extern char *bcopy(char *, char *, unsigned int);
73 extern char *bzero(char *, unsigned int);
74 extern char *strcat(char *, char *);
75 extern char *strcpy(char *, char *);
76 #  else /* !__STDC__ */
77 extern char *rindex();
78 extern char *index();
79 extern char *bcopy();
80 extern char *bzero();
81 extern char *strcat();
82 extern char *strcpy();
83 #  endif /* __STDC__ */
84 
85 /*
86  * Map ANSI C compatible functions to V7 functions
87  */
88 
89 #   define memcpy(a,b,n)	bcopy((b),(a),(n))
90 #   define memset(a,b,n)	bzero((a),(n))
91 #   define strrchr(s,c)		rindex(s,c)
92 #   define strchr(s,c)		index(s,c)
93 
94 #endif /* USG */
95 #endif /* _PAX_PORT_H */
96