Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

v20i001: POSIX 1003.1 #include file tester

6 views
Skip to first unread message

Rich Salz

unread,
Sep 18, 1989, 5:19:29 PM9/18/89
to
Submitted-by: aixsm!bbo...@uunet.UU.NET (Barry Books)
Posting-number: Volume 20, Issue 1
Archive-name: posix.h-tester

This test sorts thru the POSIX and ANSI include files and reports missing
items, additional items in the standard, additional items allowed by the
standard, and items not allowed by the standard. References to the
standards document are included in the source code and the report.

The test assumes a traditional implementation of include files and
requires two things not stated in the POSIX standard or the ANSI C ( Dec
1988 ). The first is the include files must be readable. This is the
case for almost all installations I know of ( even the ones with
precompiled include files have readable ones also ). The other is the -E
option to the C compiler. This option is available on most UNIX C
compilers and possibly others. This option runs only the C preprocessor
and writes the results to stdout. If your compiler does not support this
option I suggest getting one the public domain C preprocessors such as
GNU.


# This is a shell archive. Remove anything before this line,
# then unpack it by saving it in a file and typing "sh file".
# Then read the README and WARRANTY files.
# Contents: include/ include/inc/ include/structs/ include/types/
# include/WARRANTY include/defines include/defines.awk include/catinc
# include/squash include/catinc.awk include/inc/dirent include/inc/errno
# include/inc/fcntl include/inc/grp include/inc/limits include/inc/pwd
# include/inc/signal include/inc/stdio include/inc/termios
# include/inc/unistd include/inc/utime include/inc/stat include/inc/times
# include/inc/types include/inc/utsname include/inc/wait
# include/inc/assert include/inc/ctype include/inc/float
# include/inc/locale include/inc/math include/inc/setjmp
# include/inc/stdarg include/inc/stddef include/inc/stdlib
# include/inc/string include/inc/time include/inc/tar include/testinc
# include/README include/report include/incfiles include/files
# include/struct include/struct.awk include/functions
# include/structs/assert include/structs/ctype include/structs/dirent
# include/structs/errno include/structs/fcntl include/structs/float
# include/structs/grp include/structs/limits include/structs/locale
# include/structs/math include/structs/pwd include/structs/setjmp
# include/structs/signal include/structs/stat include/structs/stdarg
# include/structs/stddef include/structs/stdio include/structs/stdlib
# include/structs/string include/structs/tar include/structs/termios
# include/structs/time include/structs/times include/structs/types
# include/structs/unistd include/structs/utime include/structs/utsname
# include/structs/wait include/structs/grp.h include/structs/locale.h
# include/structs/pwd.c include/structs/stdlib.h include/report.str.awk
# include/struct1.awk include/types/assert include/types/ctype
# include/types/dirent include/types/errno include/types/fcntl
# include/types/float include/types/grp include/types/limits
# include/types/locale include/types/math include/types/pwd
# include/types/setjmp include/types/signal include/types/stat
# include/types/stdarg include/types/stddef include/types/stdio
# include/types/stdlib include/types/string include/types/tar
# include/types/termios include/types/time include/types/times
# include/types/types include/types/unistd include/types/utime
# include/types/utsname include/types/wait include/typedef
# include/typedef.awk include/ctypes include/report.t include/tr.testrig

echo mkdir - include
mkdir include
chmod u=rwx,g=rx,o=rx include

echo x - include/WARRANTY
sed 's/^@//' > "include/WARRANTY" <<'@//E*O*F include/WARRANTY//'

NOTICE STATEMENT

This code was developed by IBM Corporation. Copyright is
disclaimed.

WARRANTY DISCLAIMER

THE CODE AND ITS DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT
WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED. THE ENTIRE
RISK AS TO THE QUALITY AND PERFORMANCE OF THE CODE IS WITH
THE USER. SHOULD THE CODE PROVE DEFECTIVE, THE USER (AND
NOT IBM) ASSUMES THE ENTIRE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

IBM does not warrant that the function contained in the code
will meet the user's requirements or that the operation of
the code will be uninterrupted or error free or that code
defects will be corrected.

IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS CODE AND
DOCUMENTATION, EXPRESS OR IMPLIED, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE.

IN NO EVENT WILL IBM BE LIABLE FOR ANY ACTUAL DAMAGES FOR
ANY CAUSE WHATSOEVER, NOR WILL IBM BE LIABLE FOR ANY LOST
PROFITS, LOST SAVINGS OR OTHER INCIDENTAL OR CONSEQUENTIAL
DAMAGES ARISING OUT OF THE USE OF OR INABILITY TO USE THE
CODE OR DOCUMENTATION EVEN IF IBM HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER
PARTY.

Nothing contained herein shall be construed as granting
permission to use IBM's trademark or trade name in
connection with any advertising or publicity pertaining
directly or indirectly to the distribution of the code or
documentation without the prior written approval of IBM.

@//E*O*F include/WARRANTY//
chmod u=r,g=r,o=r include/WARRANTY

echo x - include/defines
sed 's/^@//' > "include/defines" <<'@//E*O*F include/defines//'
#
#**********************************************************************
# THERE MUST BE A SPACE in the first character of the first line.
#**********************************************************************
#
# NOTICE STATEMENT
#
# This code was developed by IBM Corporation. Copyright is disclaimed.
#
# IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS CODE. IN NO EVENT
# WILL IBM BE LIABLE FOR ANY DAMAGES, LOST PROFITS, OR LOST SAVINGS.
#
# "@(#) This code was developed by IBM Corporation. "
# "@(#) Copyright is disclaimed. "
#
#**********************************************************************
# Written by: Barry Books
#**********************************************************************

# set up environment
NAME=`$MKTEMP`
rm -f $NAME.f
touch $NAME.f
export NAME
for x in $INCLUDES
do
TIF="$TIF -I $x"
done
if [ -n "$IFLAGS" ]
then
IFLAGS=$TIF
fi
#BSD could not handle this
#IFLAGS=${IFLAGS:-$TIF}

# write C code
# header for each file
echo "#include \"$1\"" > $NAME.c
echo "main() {" >> $NAME.c

# find all possible defines in the include files
@./catinc $1 | sh | awk -f defines.awk >> $NAME.c 2> /dev/null

# trailer for each file
echo "}" >> $NAME.c

# compile the file
# the _POSIX_SOURCE flag should eleminate all defines not found in POSIX 1003.1
# or ANSI (1003.1 2.8.2)
cc $CFLAGS $IFLAGS -D_POSIX_SOURCE $NAME.c -o $NAME > /dev/null

#generate a report
@./report -d $1 $NAME

# cleanup
rm -f $NAME.f $NAME $NAME.c
@//E*O*F include/defines//
chmod u=rwx,g=rx,o=rx include/defines

echo x - include/defines.awk
sed 's/^@//' > "include/defines.awk" <<'@//E*O*F include/defines.awk//'
#
#**********************************************************************
# THERE MUST BE A SPACE in the first character of the first line.
#**********************************************************************
#
# NOTICE STATEMENT
#
# This code was developed by IBM Corporation. Copyright is disclaimed.
#
# IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS CODE. IN NO EVENT
# WILL IBM BE LIABLE FOR ANY DAMAGES, LOST PROFITS, OR LOST SAVINGS.
#
# "@(#) This code was developed by IBM Corporation. "
# "@(#) Copyright is disclaimed. "
#
#**********************************************************************
# Written by: Barry Books
#**********************************************************************

# this awk script finds defines and writes C code to print them
# #ifdef DEFINE
# printf("DEFINE\n");
# #endif

/^[ ]*#[ ]*define/ {
if ( i = index($2,"(") )
def = substr($2,1,i-1);
else
def = $2;
printf("#ifdef %s\n",def);
printf("printf(\"%s\\n\");\n",def);
printf("#endif\n");
}
@//E*O*F include/defines.awk//
chmod u=rw,g=r,o=r include/defines.awk

echo x - include/catinc
sed 's/^@//' > "include/catinc" <<'@//E*O*F include/catinc//'
#
#**********************************************************************
# THERE MUST BE A SPACE in the first character of the first line.
#**********************************************************************
#
# NOTICE STATEMENT
#
# This code was developed by IBM Corporation. Copyright is disclaimed.
#
# IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS CODE. IN NO EVENT
# WILL IBM BE LIABLE FOR ANY DAMAGES, LOST PROFITS, OR LOST SAVINGS.
#
# "@(#) This code was developed by IBM Corporation. "
# "@(#) Copyright is disclaimed. "
#
#**********************************************************************
# Written by: Barry Books
#**********************************************************************

# run the awk script that follows includes of other include files
awk -f catinc.awk < $1 2> /dev/null
@//E*O*F include/catinc//
chmod u=rwx,g=rx,o=rx include/catinc

echo x - include/squash
sed 's/^@//' > "include/squash" <<'@//E*O*F include/squash//'
#
#**********************************************************************
# THERE MUST BE A SPACE in the first character of the first line.
#**********************************************************************
#
# NOTICE STATEMENT
#
# This code was developed by IBM Corporation. Copyright is disclaimed.
#
# IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS CODE. IN NO EVENT
# WILL IBM BE LIABLE FOR ANY DAMAGES, LOST PROFITS, OR LOST SAVINGS.
#
# "@(#) This code was developed by IBM Corporation. "
# "@(#) Copyright is disclaimed. "
#
#**********************************************************************
# Written by: Barry Books
#**********************************************************************

# finds include files using include path
# get rid of junk like # define and # include
# don't include things twice

grep $1 $NAME.f
if [ $? -ne 0 ]
then
for x in $INCLUDES
do
if [ -s $x/$1 ]
then
sed 's/[ ]*#[ ]*define/#define/
s/[ ]*#[ ]*include/#include/
s/[ ]*#[ ]*if/#if/
s/[ ]*#[ ]*end/#end/' < $x/$1
break
fi
done
fi

echo $1 >> $NAME.f
@//E*O*F include/squash//
chmod u=rwx,g=rx,o=rx include/squash

echo x - include/catinc.awk
sed 's/^@//' > "include/catinc.awk" <<'@//E*O*F include/catinc.awk//'
#
#**********************************************************************
# THERE MUST BE A SPACE in the first character of the first line.
#**********************************************************************
#
# NOTICE STATEMENT
#
# This code was developed by IBM Corporation. Copyright is disclaimed.
#
# IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS CODE. IN NO EVENT
# WILL IBM BE LIABLE FOR ANY DAMAGES, LOST PROFITS, OR LOST SAVINGS.
#
# "@(#) This code was developed by IBM Corporation. "
# "@(#) Copyright is disclaimed. "
#
#**********************************************************************
# Written by: Barry Books
#**********************************************************************

# this awk script writes a shell script which to recursivly follow
# includes of other include files. It attempts to resolve the
# problem of two include files including each other by
# only reading each file once.
#!/bin/awk -f $1

BEGIN {
EOF = "EnDoFfIlE"
printf("cat <<%s\n",EOF);
}

# if it is an include line follow it down
#it seems this is allowed
/#include</ {
printf("%s\n",EOF);
a = substr($1,10);
a = substr(a,1,length(a)-1);
printf("./squash %s | ./catinc 2> /dev/null | sh\n",a);
printf("cat <<%s\n",EOF);
next;
}


/#include/ {
printf("%s\n",EOF);
a = substr($2,2);
a = substr(a,1,length(a)-1);
printf("./squash %s | ./catinc 2> /dev/null | sh\n",a);
printf("cat <<%s\n",EOF);
next;
}

# just copy input to output
/./ {
print $0
}

END {
printf("%s\n",EOF);
}


@//E*O*F include/catinc.awk//
chmod u=rw,g=r,o=r include/catinc.awk

echo mkdir - include/inc
mkdir include/inc
chmod u=rwx,g=rx,o=rx include/inc

echo x - include/inc/dirent
sed 's/^@//' > "include/inc/dirent" <<'@//E*O*F include/inc/dirent//'

@//E*O*F include/inc/dirent//
chmod u=rw,g=r,o=r include/inc/dirent

echo x - include/inc/errno
sed 's/^@//' > "include/inc/errno" <<'@//E*O*F include/inc/errno//'
EDOM
ERANGE

E2BIG
EACCES
EAGAIN
EBADF
EBUSY
ECHILD
EDEADLK
EEXIST
EFAULT
EFBIG
EINTR
EINVAL
EIO
EISDIR
EMFILE
EMLINK
ENAMETOOLONG
ENFILE
ENODEV
ENOENT
ENOEXEC
ENOLCK
ENOMEM
ENOSPC
ENOSYS
ENOTDIR
ENOTEMPTY
ENOTTY
ENXIO
EPERM
EPIPE
EROFS
ESPIPE
ESRCH
EXDEV
@//E*O*F include/inc/errno//
chmod u=rw,g=r,o=r include/inc/errno

echo x - include/inc/fcntl
sed 's/^@//' > "include/inc/fcntl" <<'@//E*O*F include/inc/fcntl//'
F_DUPFD
F_GETFD
F_GETLK
F_SETFD
F_GETFL
F_SETFL
F_SETLK
F_SETLKW
FD_CLOEXEC
F_RDLCK
F_WRLCK
F_UNLCK
O_CREAT
O_EXCL
O_NOCTTY
O_TRUNC
O_APPEND
O_NONBLOCK
O_RDONLY
O_RDWR
O_WRONLY
O_ACCMODE
@//E*O*F include/inc/fcntl//
chmod u=rw,g=r,o=r include/inc/fcntl

echo x - include/inc/grp
sed 's/^@//' > "include/inc/grp" <<'@//E*O*F include/inc/grp//'

@//E*O*F include/inc/grp//
chmod u=rw,g=r,o=r include/inc/grp

echo x - include/inc/limits
sed 's/^@//' > "include/inc/limits" <<'@//E*O*F include/inc/limits//'
CHAR_BIT
CHAR_MAX
CHAR_MIN
INT_MAX
INT_MIN
LONG_MAX
LONG_MIN
MB_LEN_MAX
SCHAR_MAX
SCHAR_MIN
SHRT_MAX
SHRT_MIN
UCHAR_MAX
UINT_MAX
ULONG_MAX
USHRT_MAX

_POSIX_ARG_MAX
_POSIX_CHILD_MAX
_POSIX_LINK_MAX
_POSIX_MAX_CANON
_POSIX_MAX_INPUT
_POSIX_NAME_MAX
_POSIX_NGROUPS_MAX
_POSIX_OPEN_MAX
_POSIX_PATH_MAX
_POSIX_PIPE_BUF

NGROUPS_MAX
ARG_MAX
CHILD_MAX
OPEN_MAX
LINK_MAX
MAX_CANON
MAX_INPUT
NAME_MAX
PATH_MAX
PIPE_BUF

CLK_TCK
@//E*O*F include/inc/limits//
chmod u=rw,g=r,o=r include/inc/limits

echo x - include/inc/pwd
sed 's/^@//' > "include/inc/pwd" <<'@//E*O*F include/inc/pwd//'

@//E*O*F include/inc/pwd//
chmod u=rw,g=r,o=r include/inc/pwd

echo x - include/inc/signal
sed 's/^@//' > "include/inc/signal" <<'@//E*O*F include/inc/signal//'
SIG_DFL
SIG_IGN
SIG_ERR

SIGABRT
SIGFPE
SIGILL
SIGINT
SIGSEGV
SIGTERM

SIGALRM
SIGHUP
SIGKILL
SIGPIPE
SIGQUIT
SIGUSR1
SIGUSR2
SIGCHLD
SIGCONT
SIGSTOP
SIGTSTP
SIGTTIN
SIGTTOU
SIG_BLOCK
SIG_UNBLOCK
SIG_SETMASK

SA_NOCLDSTOP
@//E*O*F include/inc/signal//
chmod u=rw,g=r,o=r include/inc/signal

echo x - include/inc/stdio
sed 's/^@//' > "include/inc/stdio" <<'@//E*O*F include/inc/stdio//'
_IOFBF
_IOLBF
_IONBF
BUFSIZ
EOF
FILENAME_MAX
FOPEN_MAX
L_tmpnam
NULL
SEEK_CUR
SEEK_END
SEEK_SET
stdin
stdout
stderr
TMP_MAX

L_ctermid
L_cuserid
@//E*O*F include/inc/stdio//
chmod u=rw,g=r,o=r include/inc/stdio

echo x - include/inc/termios
sed 's/^@//' > "include/inc/termios" <<'@//E*O*F include/inc/termios//'
NCCS
BRKINT
ICRNL
IGNBRK
IGNCR
IGNPAR
INLCR
INPCK
ISTRIP
IXOFF
IXON
PARMRK
OPOST
CLOCAL
CREAD
CSIZE
CS5
CS6
CS7
CS8
CSTOPB
HUPCL
PARENB
PARODD
ECHO
ECHOE
ECHOK
ECHONL
ICANON
IEXTEN
ISIG
NOFLSH
TOSTOP
VEOF
VEOL
VERASE
VINTR
VKILL
VMIN
VQUIT
VSUSP
VTIME
VSTART
VSTOP
B0
B50
B75
B110
B134
B150
B200
B300
B600
B1200
B1800
B2400
B4800
B9600
B19200
B38400
TCSANOW
TCSADRAIN
TCSAFLUSH
TCIFLUSH
TCOFLUSH
TCIOFLUSH
TCIOFF
TCION
TCOOFF
TCOON
@//E*O*F include/inc/termios//
chmod u=rw,g=r,o=r include/inc/termios

echo x - include/inc/unistd
sed 's/^@//' > "include/inc/unistd" <<'@//E*O*F include/inc/unistd//'
NULL

R_OK
W_OK
X_OK
F_OK

SEEK_SET
SEEK_CUR
SEEK_END

_POSIX_JOB_CONTROL
_POSIX_SAVED_IDS
_POSIX_VERSION

_POSIX_CHOWN_RESTRICTED
_POSIX_NO_TRUNC
_POSIX_VDISABLE

_SC_ARG_MAX
_SC_CHILD_MAX
_SC_JOB_CONTROL
_SC_NGROUPS_MAX
_SC_OPEN_MAX
_SC_SAVED_IDS
_SC_VERSION

_PC_CHOWN_RESTRICTED
_PC_LINK_MAX
_PC_MAX_CANON
_PC_MAX_INPUT
_PC_NAME_MAX
_PC_NO_TRUNC
_PC_PATH_MAX
_PC_PIPE_BUF
_PC_VDISABLE

STDIN_FILENO
STDOUT_FILENO
STDERR_FILENO
@//E*O*F include/inc/unistd//
chmod u=rw,g=r,o=r include/inc/unistd

echo x - include/inc/utime
sed 's/^@//' > "include/inc/utime" <<'@//E*O*F include/inc/utime//'

@//E*O*F include/inc/utime//
chmod u=rw,g=r,o=r include/inc/utime

echo x - include/inc/stat
sed 's/^@//' > "include/inc/stat" <<'@//E*O*F include/inc/stat//'
S_IRWXU
S_IRUSR
S_IWUSR
S_IXUSR

S_IRWXG
S_IRGRP
S_IWGRP
S_IXGRP

S_IRWXO
S_IROTH
S_IWOTH
S_IXOTH

S_ISUID
S_ISGID
@//E*O*F include/inc/stat//
chmod u=rw,g=r,o=r include/inc/stat

echo x - include/inc/times
sed 's/^@//' > "include/inc/times" <<'@//E*O*F include/inc/times//'

@//E*O*F include/inc/times//
chmod u=rw,g=r,o=r include/inc/times

echo x - include/inc/types
sed 's/^@//' > "include/inc/types" <<'@//E*O*F include/inc/types//'

@//E*O*F include/inc/types//
chmod u=rw,g=r,o=r include/inc/types

echo x - include/inc/utsname
sed 's/^@//' > "include/inc/utsname" <<'@//E*O*F include/inc/utsname//'

@//E*O*F include/inc/utsname//
chmod u=rw,g=r,o=r include/inc/utsname

echo x - include/inc/wait
sed 's/^@//' > "include/inc/wait" <<'@//E*O*F include/inc/wait//'
WNOHANG
WUNTRACED
@//E*O*F include/inc/wait//
chmod u=rw,g=r,o=r include/inc/wait

echo x - include/inc/assert
sed 's/^@//' > "include/inc/assert" <<'@//E*O*F include/inc/assert//'

@//E*O*F include/inc/assert//
chmod u=rw,g=r,o=r include/inc/assert

echo x - include/inc/ctype
sed 's/^@//' > "include/inc/ctype" <<'@//E*O*F include/inc/ctype//'

@//E*O*F include/inc/ctype//
chmod u=rw,g=r,o=r include/inc/ctype

echo x - include/inc/float
sed 's/^@//' > "include/inc/float" <<'@//E*O*F include/inc/float//'
FLT_ROUNDS
DBL_DIG
DBL_MANT_DIG
DBL_MAX_10_EXP
DBL_MAX_EXP
DBL_MIN_10_EXP
DBL_MIN_EXP
FLT_DIG
FLT_MANT_DIG
FLT_MAX_10_EXP
FLT_MAX_EXP
FLT_MIN_10_EXP
FLT_MIN_EXP
FLT_RADIX
LDBL_DIG
LDBL_MANT_DIG
LDBL_MAX_10_EXP
LDBL_MAX_EXP
LDBL_MIN_10_EXP
LDBL_MIN_EXP
DBL_MAX
FLT_MAX
LDBL_MAX
DBL_EPSILON
DBL_MIN
FLT_EPSILON
FLT_MIN
LDBL_EPSIOLON
LDBL_MIN
@//E*O*F include/inc/float//
chmod u=rw,g=r,o=r include/inc/float

echo x - include/inc/locale
sed 's/^@//' > "include/inc/locale" <<'@//E*O*F include/inc/locale//'
NULL
LC_ALL
LC_COLLATE
LC_CTYPE
LC_MONETARY
LC_NUMERIC
LC_TIME
@//E*O*F include/inc/locale//
chmod u=rw,g=r,o=r include/inc/locale

echo x - include/inc/math
sed 's/^@//' > "include/inc/math" <<'@//E*O*F include/inc/math//'
HUGE_VAL
@//E*O*F include/inc/math//
chmod u=rw,g=r,o=r include/inc/math

echo x - include/inc/setjmp
sed 's/^@//' > "include/inc/setjmp" <<'@//E*O*F include/inc/setjmp//'

@//E*O*F include/inc/setjmp//
chmod u=rw,g=r,o=r include/inc/setjmp

echo x - include/inc/stdarg
sed 's/^@//' > "include/inc/stdarg" <<'@//E*O*F include/inc/stdarg//'

@//E*O*F include/inc/stdarg//
chmod u=rw,g=r,o=r include/inc/stdarg

echo x - include/inc/stddef
sed 's/^@//' > "include/inc/stddef" <<'@//E*O*F include/inc/stddef//'
NULL
@//E*O*F include/inc/stddef//
chmod u=rw,g=r,o=r include/inc/stddef

echo x - include/inc/stdlib
sed 's/^@//' > "include/inc/stdlib" <<'@//E*O*F include/inc/stdlib//'
EXIT_FAILURE
EXIT_SUCCESS
MB_CUR_MAX
NULL
RAND_MAX
@//E*O*F include/inc/stdlib//
chmod u=rw,g=r,o=r include/inc/stdlib

echo x - include/inc/string
sed 's/^@//' > "include/inc/string" <<'@//E*O*F include/inc/string//'
NULL
@//E*O*F include/inc/string//
chmod u=rw,g=r,o=r include/inc/string

echo x - include/inc/time
sed 's/^@//' > "include/inc/time" <<'@//E*O*F include/inc/time//'

@//E*O*F include/inc/time//
chmod u=rw,g=r,o=r include/inc/time

echo x - include/inc/tar
sed 's/^@//' > "include/inc/tar" <<'@//E*O*F include/inc/tar//'
TMAGIC
TMAGLEN
TVERSION
TVERSLEN
REGTYPE
AREGTYPE
LNKTYPE
SYMTYPE
CHRTYPE
BLKTYPE
DIRTYPE
FIFOTYPE
CONTTYPE
TSUID
TSGID
TSVTX
TUREAD
TUWRITE
TUEXEC
TGREAD
TGWRITE
TGEXEC
TOREAD
TOWRITE
TOEXEC
@//E*O*F include/inc/tar//
chmod u=rw,g=r,o=r include/inc/tar

echo x - include/testinc
sed 's/^@//' > "include/testinc" <<'@//E*O*F include/testinc//'
#
#**********************************************************************
# THERE MUST BE A SPACE in the first character of the first line.
#**********************************************************************
#
# NOTICE STATEMENT
#
# This code was developed by IBM Corporation. Copyright is disclaimed.
#
# IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS CODE. IN NO EVENT
# WILL IBM BE LIABLE FOR ANY DAMAGES, LOST PROFITS, OR LOST SAVINGS.
#
# "@(#) This code was developed by IBM Corporation. "
# "@(#) Copyright is disclaimed. "
#
#**********************************************************************
# Written by: Barry Books
#**********************************************************************

# set up environment
# put the include paths to search the INCLUDES variable
INCLUDES="/usr/include"
export INCLUDES

# if you need move C flags put them here
#CFLAGS=
#export CFLAGS

# This is the command the test will use to create tmp files
MKTEMP="echo /tmp/t$$"
export MKTEMP

cat report.t
# infiles is the list of all include files in POISX 1003.1 and ANSI dec. 88
for x in `cat incfiles`
do
FILE=$x
for y in $INCLUDES
do
if [ -r $y/$x ]
then
./defines $y/$x
./struct $y/$x
./typedef $y/$x
FILE=""
break
fi
done
if [ "$FILE" != "" ]
then
echo "--------------------------------------------------------------------------"
echo "!!!!!!!!!!!!!!!!!!!!!!!!! $FILE not found !!!!!!!!!!!!!!!!!!!!!!!!!!!!"
echo "--------------------------------------------------------------------------"
echo ""
fi
done
@//E*O*F include/testinc//
chmod u=rwx,g=rx,o=rx include/testinc

echo x - include/README
sed 's/^@//' > "include/README" <<'@//E*O*F include/README//'
#
#**********************************************************************
# THERE MUST BE A SPACE in the first character of the first line.
#**********************************************************************
#
# NOTICE STATEMENT
#
# This code was developed by IBM Corporation. Copyright is disclaimed.
#
# IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS CODE. IN NO EVENT
# WILL IBM BE LIABLE FOR ANY DAMAGES, LOST PROFITS, OR LOST SAVINGS.
#
# "@(#) This code was developed by IBM Corporation. "
# "@(#) Copyright is disclaimed. "
#
#**********************************************************************
# Written by: Barry Books
#**********************************************************************

OVERVIEW:
This test sorts thru the POSIX and ANSI include files and reports missing
items, additional items in the standard, additional items allowed by the
standard, and items not allowed by the standard. References to the
standards document are included in the source code and the report.

The test assumes a traditional implementation of include files and requires
two things not stated in the POSIX standard or the ANSI C ( Dec 1988 ).
The first is the include files must be readable. This is the case for
almost all installations I know of ( even the ones with precompiled
include files have readable ones also ). The other is
the -E option to the C compiler. This option is available on most
UNIX C compilers and possibly others. This option runs only the C
preprocessor and writes the results to stdout. If your compiler does
not support this option I suggest getting one the public domain C
preprocessors such as GNU.

The test makes a few assumptions about the include files. The biggest is
in order to pass the requirement that include files may be used in any
order, an include file will include everything it needs to compile. The
define test finds all the defines in an include file then
writes a C program using ifdef and printf to print all the defines that
can be seen. The typedef and struct test just use cc -E to get the structs
and typedefs then parse the output. This strategy works on AIX, System V
rel 3, and BSD 4.3. My experience is the more conforming the system the
more meaningful the results. This makes the test most useful for keeping
extra things from creeping into the include files of conforming systems.

OPERATION:
The test is a bunch of shell and awk scripts which use the files in inc, structs
and types as samples of what should be in the include files. Unfortunately
there are exceptions to the rules and currently these are taken care of
by report. These should be moved to an exception directory but at least
they are in one file.

SETUP:
If you need to search other directories add them to INCLUDES in testinc.
If you need other compiler flags set CFLAGS.
Put something in MKTEMP that will make tmp files. If your system is 1003.2
you can use mktemp.

RUN:
To run just type ./testinc and the report goes to stdout.

PROBLEMS:
Since the parser is nowhere near a full C compiler I'm sure it can be fooled.

The construct typedef thing[num]; yields incorrect results.

@//E*O*F include/README//
chmod u=rw,g=r,o=r include/README

echo x - include/report
sed 's/^@//' > "include/report" <<'@//E*O*F include/report//'
#
#**********************************************************************
# THERE MUST BE A SPACE in the first character of the first line.
#**********************************************************************
#
# NOTICE STATEMENT
#
# This code was developed by IBM Corporation. Copyright is disclaimed.
#
# IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS CODE. IN NO EVENT
# WILL IBM BE LIABLE FOR ANY DAMAGES, LOST PROFITS, OR LOST SAVINGS.
#
# "@(#) This code was developed by IBM Corporation. "
# "@(#) Copyright is disclaimed. "
#
#**********************************************************************
# Written by: Barry Books
#**********************************************************************

# this sh script writes a report to stdout
# -d for defines
# -s for structs
# -t for typedefs

USAGE="usage: $0"

case $1 in
-d)
# $1 is option
# $2 include file
# $3 program

echo ""
echo "--------------------------------------------------------------------------"
echo " report for include file $2"
echo "--------------------------------------------------------------------------"
echo "*************************** defines section ****************************"
# should be -x but none in BSD
if [ -s $3 ]
then
echo "extra other missing macros"
TMP=`$MKTEMP`
# this is what should be there
sort inc/`basename $2 .h` | grep -v '^$' > $TMP.g
# these could be macros for functions
sort functions | grep -v '^$' > $TMP.f
# one file could include another
cat inc/* | sort | grep -v '^$' > $TMP.o

# this gives all extra stuff
$3 | sort -u | comm -23 - $TMP.g | grep -v "^_" > $TMP.e
# this gives extra stuff not in standard
case `basename $2`
in
errno.h)
# get rid of E([0-9]|[A-Z]) in errno.h as per ansi future lib directions
cat $TMP.f $TMP.o | sort | comm -23 $TMP.e - | grep -v "^_" | grep -v "^E[0-9]" | grep -v "^E[A-Z]" > $TMP.1
;;
signal.h)
# get rid of SIG(_|[A-Z]) in errno.h as per ansi future lib directions
cat $TMP.f $TMP.o | sort | comm -23 $TMP.e - | grep -v "^_" | grep -v "^SIG_" | grep -v "^SIG[A-Z]" > $TMP.1
;;
*)
cat $TMP.f $TMP.o | sort | comm -23 $TMP.e - | grep -v "^_" > $TMP.1
;;
esac
# things elsewhere in standard
comm -23 $TMP.e $TMP.1 > $TMP.t
cat $TMP.f $TMP.o | comm -23 $TMP.t - | sed "s/^/ /" > $TMP.2
# these are missing
$3 | sort -u | comm -13 - $TMP.g | grep -v "^_" | sed "s/^/ /" > $TMP.3
# macros for funtions
comm -12 $TMP.e $TMP.f | sed "s/^/ /" > $TMP.4

cat $TMP.1 $TMP.2 $TMP.3 $TMP.4 | sort -b

echo
rm -f $TMP.*
else
echo "!!!!!!!!! problem compiling with $2 !!!!!!!!!"
echo
fi
;;

# structure report
-s)
# $1 option
# $2 include file

echo "************************** structure section ***************************"
echo "extra structures extra elements"
TMP=`$MKTEMP`
sort > $TMP.i
#get what should be there
sort structs/`basename $2 .h` | grep -v '^$' > $TMP.g
cat structs/* | sort | grep -v '^$' > $TMP.o
#difference between what should be and what is
awk '{print $1}' $TMP.i | uniq | comm -23 - $TMP.o

# types ending in _t are OK (1003.1 2.6)
join $TMP.o $TMP.i | sort | uniq | grep -v "_t$" > $TMP.t
sort ctypes | join -j1 1 -j2 2 -o 2.1 2.2 - $TMP.t | comm -13 - $TMP.t | uniq | sed "s/^/ /"
;;

# typedef report
-t)
# $1 option
# $2 include file

echo "*************************** typedef section ****************************"
TMP=`$MKTEMP`
# sort them and save them for now
sort > $TMP.i
# this is what should be there
sort types/`basename $2 .h` | grep -v '^$' > $TMP.g
# one file could include another
cat types/* | sort | grep -v '^$' > $TMP.o


echo "extra other missing"

# this gives all extra stuff
# types ending in _t are ok (POSIX 1003.1 2.6)
cat $TMP.i | sort -u | comm -23 - $TMP.g > $TMP.e

# this gives extra stuff not in standard
# types ending in _t are ok (POSIX 1003.1 2.6)
cat $TMP.o | sort | comm -23 $TMP.e - | grep -v "_t$" > $TMP.1

# things elsewhere in standard
# types ending in _t are ok (POSIX 1003.1 2.6)
comm -23 $TMP.e $TMP.1 > $TMP.t
cat $TMP.o | comm -23 $TMP.t - | grep -v "_t$" | sed "s/^/ /" > $TMP.2

# these are missing
cat $TMP.i | sort -u | comm -13 - $TMP.g | sed "s/^/ /" > $TMP.3


cat $TMP.1 $TMP.2 $TMP.3 | sort -b

;;
*)
echo $USAGE
;;
esac

#clean up
rm -f $TMP.c $TMP.g $TMP.i $TMP.o
@//E*O*F include/report//
chmod u=rwx,g=rx,o=rx include/report

echo x - include/incfiles
sed 's/^@//' > "include/incfiles" <<'@//E*O*F include/incfiles//'
assert.h
ctype.h
dirent.h
errno.h
fcntl.h
float.h
grp.h
limits.h
locale.h
math.h
pwd.h
setjmp.h
signal.h
stdarg.h
stddef.h
stdio.h
stdlib.h
string.h
sys/stat.h
sys/times.h
sys/types.h
sys/utsname.h
sys/wait.h
tar.h
termios.h
time.h
unistd.h
utime.h
@//E*O*F include/incfiles//
chmod u=rw,g=r,o=r include/incfiles

echo x - include/files
sed 's/^@//' > "include/files" <<'@//E*O*F include/files//'
defines
defines.awk
catinc
squash
catinc.awk
inc/dirent
inc/errno
inc/fcntl
inc/grp
inc/limits
inc/pwd
inc/signal
inc/stdio
inc/termios
inc/unistd
inc/utime
inc/stat
inc/times
inc/types
inc/utsname
inc/wait
inc/assert
inc/ctype
inc/float
inc/locale
inc/math
inc/setjmp
inc/stdarg
inc/stddef
inc/stdlib
inc/string
inc/time
inc/tar
testinc
README
report
incfiles
files
functions
@//E*O*F include/files//
chmod u=rw,g=r,o=r include/files

echo x - include/struct
sed 's/^@//' > "include/struct" <<'@//E*O*F include/struct//'
#
#**********************************************************************
# THERE MUST BE A SPACE in the first character of the first line.
#**********************************************************************
#
# NOTICE STATEMENT
#
# This code was developed by IBM Corporation. Copyright is disclaimed.
#
# IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS CODE. IN NO EVENT
# WILL IBM BE LIABLE FOR ANY DAMAGES, LOST PROFITS, OR LOST SAVINGS.
#
# "@(#) This code was developed by IBM Corporation. "
# "@(#) Copyright is disclaimed. "
#
#**********************************************************************
# Written by: Barry Books
#**********************************************************************

#finds structure declarations in include files

#copy the .h to a .c for some cc commands
TMP=`$MKTEMP`
touch $TMP.c
cp $1 $TMP.c

#run the preprocessor with _POSIX_SOURCE defined
#change all the white space to newlines so there is one token per line
#run the awk parser to find struct defs
cc -D _POSIX_SOURCE -E $TMP.c | tr -s " " "\012\012" | awk -f struct.awk | awk '{ if ( NF > 1) print $0}' | ./report -s $1

#clean up
rm -f $TMP.c
@//E*O*F include/struct//
chmod u=rwx,g=rx,o=rx include/struct

echo x - include/struct.awk
sed 's/^@//' > "include/struct.awk" <<'@//E*O*F include/struct.awk//'
#
#**********************************************************************
# THERE MUST BE A SPACE in the first character of the first line.
#**********************************************************************
#
# NOTICE STATEMENT
#
# This code was developed by IBM Corporation. Copyright is disclaimed.
#
# IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS CODE. IN NO EVENT
# WILL IBM BE LIABLE FOR ANY DAMAGES, LOST PROFITS, OR LOST SAVINGS.
#
# "@(#) This code was developed by IBM Corporation. "
# "@(#) Copyright is disclaimed. "
#
#**********************************************************************
# Written by: Barry Books
#**********************************************************************

# this awk script is a state machine that find structure definetions
# it outputs the structure name and each element in the structure
# in the form
#NAME ELEMENT_TYPE

#the order of expressions to find is important

BEGIN {
STRUCT=0;
OPEN = 0;
SEMI = 1;
TYPEDEF = 0;
}

#ignore a few keywords
/unsigned/ {
next;
}

/extern/ {
next;
}

/signed/ {
next;
}

#braces signal begining structure elements
/{/ {
OPEN += 1;
SEMI = 1;
next;
}

/}/ {
OPEN -= 1;
next;
}

#semi colon signals end of statement
#now we can look for a struct
/;/ {
SEMI = 1;
next;
}

# this matches anything
#typedefs look like structures so weed them out
# if struct == 1 just print the name of the structure
# if struct == 2 print the name and the element type
/^/ {
if ( TYPEDEF == 1 )
{
if ( OPEN == 0 )
{
if ( SEMI == 1 )
SEMI = 0;
TYPEDEF = 0;
}
next;
}
if ( STRUCT == 1 )
{
printf("%s\n",$1);
STRUCT = 2;
NAME = $1;
next;
}
if ( STRUCT == 2 )
{
if ( OPEN == 1 )
{
if ( SEMI == 1 )
{
printf("%s %s\n",NAME,$1);
SEMI = 0;
}

}
if ( OPEN == 0 )
{
STRUCT = 0;
}
}
}

# set flags for keywords
/typedef/ {
TYPEDEF=1;
next;
}

/struct/ {
STRUCT=1;
next;
}


@//E*O*F include/struct.awk//
chmod u=rw,g=r,o=r include/struct.awk

echo x - include/functions
sed 's/^@//' > "include/functions" <<'@//E*O*F include/functions//'
assert
isalnum
isalpha
iscntrl
isdigit
isgraph
islower
isprint
ispunct
isspace
isupper
isxdigit
tolower
toupper
setlocale
localeconv
acos
asin
atan
atan2
cos
sin
tan
cosh
sinh
tanh
exp
frexp
lsexp
log
log10
modf
pow
sqrt
ceil
fabs
floor
fmod
setjmp
longjmp
signal
raise
va_start
va_arg
va_end
remove
rename
tmpfile
tmpnam
fclose
fflush
fopen
freopen
setbuf
setvbuf
fprintf
fscanf
printf
scanf
sprinf
sscanf
vfprintf
vprintf
vsprintf
fgetc
fgets
fputc
fputs
getc
getchar
gets
putc
putchar
puts
ungetc
fread
fwrite
fgetpos
fseek
fsetpos
ftell
rewind
clearerr
feof
ferror
perror
atof
atoi
atol
strtod
strtol
strtoul
rand
srand
calloc
free
malloc
realloc
abort
atexit
exit
getenv
systems
bsearch
qsort
abs
div
labs
ldiv
mblen
mbtowc
wctomb
mbstowcs
wcstombs
memcpy
memmove
strcpy
strncpy
strcat
strncat
memcmp
strcmp
strcol
strncmp
strxfrm
memchr
strchr
strcspan
strpbrk
strrchr
strspn
strstr
strtok
memset
strerror
strlen
clock
difftime
mktime
time
asctime
ctime
gmtive
lcoaltime
strftime
access
alarm
asctime
cfgetispeed
cfgetospeed
cfsetispeed
cfsetospeed
chdir
chmod
chown
close
closedir
creat
ctermid
cuserid
dup
dup2
execl
execle
execlp
execv
execve
execvp
_exit
fcntl
fdopen
fileno
fork
fpathconf
fstat
getcwd
getegid
getenv
geteuid
getgid
getgrgid
getgrnam
getgroups
getlogin
getpgrp
getpid
getppid
getpwnam
getpwuid
getuid
isatty
kill
link
lingjmp
lseek
mkdir
mkfifo
open
opendir
pathconf
pause
pipe
read
readdir
rename
rewinddir
rmdir
setgid
setjmp
setlocale
setpgid
setsid
setuid
sigaction
sigaddset
sigdelset
sigemptyset
sigfillset
sigismember
siglongjmp
sigpending
sigprocmask
sigsetjmp
sigsuspend
sleep
stat
sysconf
tcdrain
tcflow
tcflush
tcgetattr
tcgetpgrp
time
times
ttyname
tzset
umask
uname
unlink
utime
wait
waitpid
write

S_ISDIR
S_ISCHR
S_ISBLK
S_ISREG
S_ISFIFO
WIFEXITED
WEXITSTATUS
WIFSIGNALED
WTERMSIG
WIFSTOPPED
WSTOPSIG
@//E*O*F include/functions//
chmod u=rw,g=r,o=r include/functions

echo mkdir - include/structs
mkdir include/structs
chmod u=rwx,g=rx,o=rx include/structs

echo x - include/structs/assert
sed 's/^@//' > "include/structs/assert" <<'@//E*O*F include/structs/assert//'
@//E*O*F include/structs/assert//
chmod u=rw,g=r,o=r include/structs/assert

echo x - include/structs/ctype
sed 's/^@//' > "include/structs/ctype" <<'@//E*O*F include/structs/ctype//'
@//E*O*F include/structs/ctype//
chmod u=rw,g=r,o=r include/structs/ctype

echo x - include/structs/dirent
sed 's/^@//' > "include/structs/dirent" <<'@//E*O*F include/structs/dirent//'
dirent
@//E*O*F include/structs/dirent//
chmod u=rw,g=r,o=r include/structs/dirent

echo x - include/structs/errno
sed 's/^@//' > "include/structs/errno" <<'@//E*O*F include/structs/errno//'
@//E*O*F include/structs/errno//
chmod u=rw,g=r,o=r include/structs/errno

echo x - include/structs/fcntl
sed 's/^@//' > "include/structs/fcntl" <<'@//E*O*F include/structs/fcntl//'
flock
@//E*O*F include/structs/fcntl//
chmod u=rw,g=r,o=r include/structs/fcntl

echo x - include/structs/float
sed 's/^@//' > "include/structs/float" <<'@//E*O*F include/structs/float//'
@//E*O*F include/structs/float//
chmod u=rw,g=r,o=r include/structs/float

echo x - include/structs/grp
sed 's/^@//' > "include/structs/grp" <<'@//E*O*F include/structs/grp//'
@//E*O*F include/structs/grp//
chmod u=rw,g=r,o=r include/structs/grp

echo x - include/structs/limits
sed 's/^@//' > "include/structs/limits" <<'@//E*O*F include/structs/limits//'
@//E*O*F include/structs/limits//
chmod u=rw,g=r,o=r include/structs/limits

echo x - include/structs/locale
sed 's/^@//' > "include/structs/locale" <<'@//E*O*F include/structs/locale//'
@//E*O*F include/structs/locale//
chmod u=rw,g=r,o=r include/structs/locale

echo x - include/structs/math
sed 's/^@//' > "include/structs/math" <<'@//E*O*F include/structs/math//'
@//E*O*F include/structs/math//
chmod u=rw,g=r,o=r include/structs/math

echo x - include/structs/pwd
sed 's/^@//' > "include/structs/pwd" <<'@//E*O*F include/structs/pwd//'
@//E*O*F include/structs/pwd//
chmod u=rw,g=r,o=r include/structs/pwd

echo x - include/structs/setjmp
sed 's/^@//' > "include/structs/setjmp" <<'@//E*O*F include/structs/setjmp//'
@//E*O*F include/structs/setjmp//
chmod u=rw,g=r,o=r include/structs/setjmp

echo x - include/structs/signal
sed 's/^@//' > "include/structs/signal" <<'@//E*O*F include/structs/signal//'
sigset
sigaction

@//E*O*F include/structs/signal//
chmod u=rw,g=r,o=r include/structs/signal

echo x - include/structs/stat
sed 's/^@//' > "include/structs/stat" <<'@//E*O*F include/structs/stat//'
stat
@//E*O*F include/structs/stat//
chmod u=rw,g=r,o=r include/structs/stat

echo x - include/structs/stdarg
sed 's/^@//' > "include/structs/stdarg" <<'@//E*O*F include/structs/stdarg//'
@//E*O*F include/structs/stdarg//
chmod u=rw,g=r,o=r include/structs/stdarg

echo x - include/structs/stddef
sed 's/^@//' > "include/structs/stddef" <<'@//E*O*F include/structs/stddef//'
@//E*O*F include/structs/stddef//
chmod u=rw,g=r,o=r include/structs/stddef

echo x - include/structs/stdio
sed 's/^@//' > "include/structs/stdio" <<'@//E*O*F include/structs/stdio//'
@//E*O*F include/structs/stdio//
chmod u=rw,g=r,o=r include/structs/stdio

echo x - include/structs/stdlib
sed 's/^@//' > "include/structs/stdlib" <<'@//E*O*F include/structs/stdlib//'
@//E*O*F include/structs/stdlib//
chmod u=rw,g=r,o=r include/structs/stdlib

echo x - include/structs/string
sed 's/^@//' > "include/structs/string" <<'@//E*O*F include/structs/string//'
@//E*O*F include/structs/string//
chmod u=rw,g=r,o=r include/structs/string

echo x - include/structs/tar
sed 's/^@//' > "include/structs/tar" <<'@//E*O*F include/structs/tar//'
@//E*O*F include/structs/tar//
chmod u=rw,g=r,o=r include/structs/tar

echo x - include/structs/termios
sed 's/^@//' > "include/structs/termios" <<'@//E*O*F include/structs/termios//'
termios
@//E*O*F include/structs/termios//
chmod u=rw,g=r,o=r include/structs/termios

echo x - include/structs/time
sed 's/^@//' > "include/structs/time" <<'@//E*O*F include/structs/time//'
tm
@//E*O*F include/structs/time//
chmod u=rw,g=r,o=r include/structs/time

echo x - include/structs/times
sed 's/^@//' > "include/structs/times" <<'@//E*O*F include/structs/times//'
tms
@//E*O*F include/structs/times//
chmod u=rw,g=r,o=r include/structs/times

echo x - include/structs/types
sed 's/^@//' > "include/structs/types" <<'@//E*O*F include/structs/types//'
@//E*O*F include/structs/types//
chmod u=rw,g=r,o=r include/structs/types

echo x - include/structs/unistd
sed 's/^@//' > "include/structs/unistd" <<'@//E*O*F include/structs/unistd//'
@//E*O*F include/structs/unistd//
chmod u=rw,g=r,o=r include/structs/unistd

echo x - include/structs/utime
sed 's/^@//' > "include/structs/utime" <<'@//E*O*F include/structs/utime//'
utimbuf
@//E*O*F include/structs/utime//
chmod u=rw,g=r,o=r include/structs/utime

echo x - include/structs/utsname
sed 's/^@//' > "include/structs/utsname" <<'@//E*O*F include/structs/utsname//'
utsname
@//E*O*F include/structs/utsname//
chmod u=rw,g=r,o=r include/structs/utsname

echo x - include/structs/wait
sed 's/^@//' > "include/structs/wait" <<'@//E*O*F include/structs/wait//'
@//E*O*F include/structs/wait//
chmod u=rw,g=r,o=r include/structs/wait

echo x - include/structs/grp.h
sed 's/^@//' > "include/structs/grp.h" <<'@//E*O*F include/structs/grp.h//'
group
@//E*O*F include/structs/grp.h//
chmod u=rw,g=r,o=r include/structs/grp.h

echo x - include/structs/locale.h
sed 's/^@//' > "include/structs/locale.h" <<'@//E*O*F include/structs/locale.h//'
lconv

@//E*O*F include/structs/locale.h//
chmod u=rw,g=r,o=r include/structs/locale.h

echo x - include/structs/pwd.c
sed 's/^@//' > "include/structs/pwd.c" <<'@//E*O*F include/structs/pwd.c//'
passwd
@//E*O*F include/structs/pwd.c//
chmod u=rw,g=r,o=r include/structs/pwd.c

echo x - include/structs/stdlib.h
sed 's/^@//' > "include/structs/stdlib.h" <<'@//E*O*F include/structs/stdlib.h//'
div_t
ldiv_t
@//E*O*F include/structs/stdlib.h//
chmod u=rw,g=r,o=r include/structs/stdlib.h

echo x - include/report.str.awk
sed 's/^@//' > "include/report.str.awk" <<'@//E*O*F include/report.str.awk//'
#
#**********************************************************************
# THERE MUST BE A SPACE in the first character of the first line.
#**********************************************************************
#
# NOTICE STATEMENT
#
# This code was developed by IBM Corporation. Copyright is disclaimed.
#
# IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS CODE. IN NO EVENT
# WILL IBM BE LIABLE FOR ANY DAMAGES, LOST PROFITS, OR LOST SAVINGS.
#
# "@(#) This code was developed by IBM Corporation. "
# "@(#) Copyright is disclaimed. "
#
#**********************************************************************
# Written by: Barry Books
#**********************************************************************

# just ignore these
/ char/ { next; }
/ const/ { next; }
/ double/ { next; }
/ float/ { next; }
/ int/ { next; }
/ long/ { next; }
/ short/ { next; }
/ signed/ { next; }
/ unsigned/ { next; }
/ void/ { next; }

# this is a structure name
$1 ~ /^\t/ {
}
@//E*O*F include/report.str.awk//
chmod u=rw,g=r,o=r include/report.str.awk

echo x - include/struct1.awk
sed 's/^@//' > "include/struct1.awk" <<'@//E*O*F include/struct1.awk//'
#
#**********************************************************************
# THERE MUST BE A SPACE in the first character of the first line.
#**********************************************************************
#
# NOTICE STATEMENT
#
# This code was developed by IBM Corporation. Copyright is disclaimed.
#
# IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS CODE. IN NO EVENT
# WILL IBM BE LIABLE FOR ANY DAMAGES, LOST PROFITS, OR LOST SAVINGS.
#
# "@(#) This code was developed by IBM Corporation. "
# "@(#) Copyright is disclaimed. "
#
#**********************************************************************
# Written by: Barry Books
#**********************************************************************

# this awk script strips off C types and typedefs ending in _t

# regular C types
$2 ~ /^char$/ { next; }
$2 ~ /^const$/ { next; }
$2 ~ /^double$/ { next; }
$2 ~ /^float$/ { next; }
$2 ~ /^int$/ { next; }
$2 ~ /^long$/ { next; }
$2 ~ /^short$/ { next; }
$2 ~ /^signed$/ { next; }
$2 ~ /^unsigned$/ { next; }
$2 ~ /^void$/ { next; }

# additional ansi types

# additional posix types

# posix says _t is ok
$2 ~ /.*_t/ { next; }

/^/ { print $0 }
@//E*O*F include/struct1.awk//
chmod u=rw,g=r,o=r include/struct1.awk

echo mkdir - include/types
mkdir include/types
chmod u=rwx,g=rx,o=rx include/types

echo x - include/types/assert
sed 's/^@//' > "include/types/assert" <<'@//E*O*F include/types/assert//'

@//E*O*F include/types/assert//
chmod u=rw,g=r,o=r include/types/assert

echo x - include/types/ctype
sed 's/^@//' > "include/types/ctype" <<'@//E*O*F include/types/ctype//'

@//E*O*F include/types/ctype//
chmod u=rw,g=r,o=r include/types/ctype

echo x - include/types/dirent
sed 's/^@//' > "include/types/dirent" <<'@//E*O*F include/types/dirent//'
DIR
@//E*O*F include/types/dirent//
chmod u=rw,g=r,o=r include/types/dirent

echo x - include/types/errno
sed 's/^@//' > "include/types/errno" <<'@//E*O*F include/types/errno//'

@//E*O*F include/types/errno//
chmod u=rw,g=r,o=r include/types/errno

echo x - include/types/fcntl
sed 's/^@//' > "include/types/fcntl" <<'@//E*O*F include/types/fcntl//'

@//E*O*F include/types/fcntl//
chmod u=rw,g=r,o=r include/types/fcntl

echo x - include/types/float
sed 's/^@//' > "include/types/float" <<'@//E*O*F include/types/float//'

@//E*O*F include/types/float//
chmod u=rw,g=r,o=r include/types/float

echo x - include/types/grp
sed 's/^@//' > "include/types/grp" <<'@//E*O*F include/types/grp//'

@//E*O*F include/types/grp//
chmod u=rw,g=r,o=r include/types/grp

echo x - include/types/limits
sed 's/^@//' > "include/types/limits" <<'@//E*O*F include/types/limits//'

@//E*O*F include/types/limits//
chmod u=rw,g=r,o=r include/types/limits

echo x - include/types/locale
sed 's/^@//' > "include/types/locale" <<'@//E*O*F include/types/locale//'

@//E*O*F include/types/locale//
chmod u=rw,g=r,o=r include/types/locale

echo x - include/types/math
sed 's/^@//' > "include/types/math" <<'@//E*O*F include/types/math//'

@//E*O*F include/types/math//
chmod u=rw,g=r,o=r include/types/math

echo x - include/types/pwd
sed 's/^@//' > "include/types/pwd" <<'@//E*O*F include/types/pwd//'

@//E*O*F include/types/pwd//
chmod u=rw,g=r,o=r include/types/pwd

echo x - include/types/setjmp
sed 's/^@//' > "include/types/setjmp" <<'@//E*O*F include/types/setjmp//'
jmp_buf
sigjmp_buf
@//E*O*F include/types/setjmp//
chmod u=rw,g=r,o=r include/types/setjmp

echo x - include/types/signal
sed 's/^@//' > "include/types/signal" <<'@//E*O*F include/types/signal//'
sigset_t
sig_atomic_t
@//E*O*F include/types/signal//
chmod u=rw,g=r,o=r include/types/signal

echo x - include/types/stat
sed 's/^@//' > "include/types/stat" <<'@//E*O*F include/types/stat//'

@//E*O*F include/types/stat//
chmod u=rw,g=r,o=r include/types/stat

echo x - include/types/stdarg
sed 's/^@//' > "include/types/stdarg" <<'@//E*O*F include/types/stdarg//'
va_list
@//E*O*F include/types/stdarg//
chmod u=rw,g=r,o=r include/types/stdarg

echo x - include/types/stddef
sed 's/^@//' > "include/types/stddef" <<'@//E*O*F include/types/stddef//'
ptrdiff_t
size_t
wchar_t
@//E*O*F include/types/stddef//
chmod u=rw,g=r,o=r include/types/stddef

echo x - include/types/stdio
sed 's/^@//' > "include/types/stdio" <<'@//E*O*F include/types/stdio//'
FILE
fpos_t
@//E*O*F include/types/stdio//
chmod u=rw,g=r,o=r include/types/stdio

echo x - include/types/stdlib
sed 's/^@//' > "include/types/stdlib" <<'@//E*O*F include/types/stdlib//'
size_t
fpos_t
div_t
ldiv_t
@//E*O*F include/types/stdlib//
chmod u=rw,g=r,o=r include/types/stdlib

echo x - include/types/string
sed 's/^@//' > "include/types/string" <<'@//E*O*F include/types/string//'
size_t
@//E*O*F include/types/string//
chmod u=rw,g=r,o=r include/types/string

echo x - include/types/tar
sed 's/^@//' > "include/types/tar" <<'@//E*O*F include/types/tar//'

@//E*O*F include/types/tar//
chmod u=rw,g=r,o=r include/types/tar

echo x - include/types/termios
sed 's/^@//' > "include/types/termios" <<'@//E*O*F include/types/termios//'
tc_flag_t
cc_t
speed_t
@//E*O*F include/types/termios//
chmod u=rw,g=r,o=r include/types/termios

echo x - include/types/time
sed 's/^@//' > "include/types/time" <<'@//E*O*F include/types/time//'
size_t
time_t
@//E*O*F include/types/time//
chmod u=rw,g=r,o=r include/types/time

echo x - include/types/times
sed 's/^@//' > "include/types/times" <<'@//E*O*F include/types/times//'
clock_t
@//E*O*F include/types/times//
chmod u=rw,g=r,o=r include/types/times

echo x - include/types/types
sed 's/^@//' > "include/types/types" <<'@//E*O*F include/types/types//'
clock_t
dev_t
gid_t
ino_t
mode_t
nlink_t
off_t
pid_t
size_t
time_t
uid_t
@//E*O*F include/types/types//
chmod u=rw,g=r,o=r include/types/types

echo x - include/types/unistd
sed 's/^@//' > "include/types/unistd" <<'@//E*O*F include/types/unistd//'

@//E*O*F include/types/unistd//
chmod u=rw,g=r,o=r include/types/unistd

echo x - include/types/utime
sed 's/^@//' > "include/types/utime" <<'@//E*O*F include/types/utime//'

@//E*O*F include/types/utime//
chmod u=rw,g=r,o=r include/types/utime

echo x - include/types/utsname
sed 's/^@//' > "include/types/utsname" <<'@//E*O*F include/types/utsname//'

@//E*O*F include/types/utsname//
chmod u=rw,g=r,o=r include/types/utsname

echo x - include/types/wait
sed 's/^@//' > "include/types/wait" <<'@//E*O*F include/types/wait//'

@//E*O*
--
Please send comp.sources.unix-related mail to rs...@uunet.uu.net.
Use a domain-based address or give alternate paths, or you may lose out.

0 new messages