ncpascal@ndsuvax.UUCP (Freeman Pascal) (12/17/87)
Hello,
This is a little utility that I wrote when I first started to use
MINIX. It behaves just like tty(1) for UNIX. In writing it I also
needed to write ttyname(3) library call. I hope both the tty(1) and
ttyname(3) is usefile. Just follow the instructions in the "INSTALL"
file and enjoy.
Freeman P. Pascal IV
ncpascal@ndsuvax
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of archive 1 (of 1)."
# Contents: INSTALL Makefile makelibc tty.c ttyname.c
# Wrapped by ncpascal@ndsuvax on Wed Dec 16 23:30:02 1987
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f INSTALL -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"INSTALL\"
else
echo shar: Extracting \"INSTALL\" \(692 characters\)
sed "s/^X//" >INSTALL <<'END_OF_INSTALL'
XManifest:
X--------
X Makefile makefile for tty
X makelibc shell script to make C library
X tty.c utility to return tty name
X ttyname.c library function to return tty name (see ttyname(3))
X
XInstallation instructions:
X-------------------------
X
X1. Compile ttyname.c as a library routine and place in /usr/lib/libc.a.
X If you are using the makelibc shell script that was posted quite
X awhile back just append "ar av ttyname.s" to the beginning and run.
X I am including my version if you don't have it.
X
X2. Run makefile to compile tty.c. It will automatically locate "tty" in
X the /usr/bin direcory, set it's mode to "r-xr-xr-x" (555), and set it's
X stack size to 1k.
X
X3. Enjoy
END_OF_INSTALL
if test 692 -ne `wc -c <INSTALL`; then
echo shar: \"INSTALL\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f Makefile -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"Makefile\"
else
echo shar: Extracting \"Makefile\" \(229 characters\)
sed "s/^X//" >Makefile <<'END_OF_Makefile'
X#
X# Makefile for /usr/bin/tty
X#
XCFLAGS= -T. -i -O
XDEST= /usr/bin
XMODE= 555
XMEMSIZ= 1024
X
X$(DEST)/tty: tty.c
X cc $(CFLAGS) -o $(DEST)/tty tty.c
X @chmod $(MODE) $(DEST)/tty
X @chmem =$(MEMSIZ) $(DEST)/tty >/dev/null
X @echo "done."
X
END_OF_Makefile
if test 229 -ne `wc -c <Makefile`; then
echo shar: \"Makefile\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f makelibc -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"makelibc\"
else
echo shar: Extracting \"makelibc\" \(2053 characters\)
sed "s/^X//" >makelibc <<'END_OF_makelibc'
X#
X# makelibc - Make C library
X#
X# - NOTE -
X#
X# This shell script will -REMOVE- the old version of libc.a if it
X# exists in the current directory. It will also -REPLACE- the old
X# /usr/lib/libc.a with version just packaged.
X#
Xif (test -f ./libc.a) # remove old libc.a if it exists
X then rm ./libc.a
Xfi
Xar av libc.a getgrp.s # process groups
Xar av libc.a termcap.s gtty.s stty.s # v1.2 update
Xar av libc.a popen.s ctime.s system.s qsort.s # v1.2 upgrade
Xar av libc.a regexp.s regsub.s
Xar av libc.a getopt.s getgrent.s getpwent.s crypt.s
Xar av libc.a ttyname.s
Xar av libc.a fdopen.s
Xar av libc.a fgets.s fprintf.s fputs.s fread.s freopen.s fclose.s
Xar av libc.a fopen.s fseek.s ftell.s fwrite.s gets.s scanf.s getc.s printdat.s
Xar av libc.a fflush.s setbuf.s sprintf.s doprintf.s putc.s ungetc.s strcmp.s
Xar av libc.a access.s chdir.s chmod.s chown.s chroot.s creat.s dup.s dup2.s
Xar av libc.a exec.s exit.s cleanup.s fork.s isatty.s fstat.s getegid.s getenv.s
Xar av libc.a geteuid.s getgid.s getpass.s close.s getuid.s ioctl.s kill.s
Xar av libc.a link.s lseek.s malloc.s brk.s brk2.s brksize.s mknod.s mktemp.s
Xar av libc.a getpid.s mount.s open.s perror.s pipe.s prints.s read.s setgid.s
Xar av libc.a setuid.s sleep.s alarm.s pause.s signal.s catchsig.s stat.s
Xar av libc.a stime.s strcat.s strcpy.s strlen.s strncat.s strncmp.s strncpy.s
Xar av libc.a ftime.s
Xar av libc.a sync.s time.s times.s umask.s umount.s unlink.s utime.s wait.s
Xar av libc.a stderr.s write.s syslib.s call.s atoi.s message.s sendrec.s
Xar av libc.a printk.s abort.s itoa.s stb.s abs.s atol.s ctype.s index.s bcopy.s
Xar av libc.a getutil.s rand.s rindex.s adi.s and.s cii.s cms.s cmu4.s com.s
Xar av libc.a csa2.s csb2.s cuu.s .dup.s dvi.s dvi4.s dvu.s dvu4.s exg.s fakfp.s
Xar av libc.a gto.s iaar.s ilar.s inn.s ior.s isar.s lar2.s loi.s mli.s mli4.s
Xar av libc.a ngi.s nop.s rck.s rmi.s rmi4.s rmu.s rmu4.s rol.s ror.s sar2.s
Xar av libc.a sbi.s set.s sli.s sri.s sti.s xor.s error.s unknown.s trp.s
Xar av libc.a setjmp.s
X
Xcp libc.a /usr/lib
Xecho
Xecho "Done."
Xecho
X
END_OF_makelibc
if test 2053 -ne `wc -c <makelibc`; then
echo shar: \"makelibc\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f tty.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"tty.c\"
else
echo shar: Extracting \"tty.c\" \(437 characters\)
sed "s/^X//" >tty.c <<'END_OF_tty.c'
X/*
X * tty.c - Return tty name
X *
X * Freename P. Pascal IV
X *
X */
X/*
X * History:
X *
X * 31 July 87 fpp Creation
X */
X#include <stdio.h>
X
Xchar *ttyname();
X
Xmain(argc, argv)
Xint argc;
Xchar *argv[];
X{
X char *tty_name;
X
X tty_name = ttyname( 0 );
X if(( argc == 2 ) && ( !strcmp(argv[1], "-s") ))
X /* do nothing - shhh! we're in silent mode */;
X else
X printf("%s\n", ((tty_name) ? tty_name : "not a tty"));
X exit((tty_name) ? 0 : 1 );
X}
X
END_OF_tty.c
if test 437 -ne `wc -c <tty.c`; then
echo shar: \"tty.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ttyname.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"ttyname.c\"
else
echo shar: Extracting \"ttyname.c\" \(1517 characters\)
sed "s/^X//" >ttyname.c <<'END_OF_ttyname.c'
X/*
X * char *tty_name( fd )
X * FILE fd;
X *
X * EFFECTS:
X *
X * returns the path to the tty DEVice referenced by 'fd'.
X * if 'fd' does not reference a tty a NULL is returned.
X */
X#include <sys/file.h>
X#include <sys/types.h>
X#include <sys/dir.h>
X#include <sys/stat.h>
X
X#define STDIN 0
X#define NULL 0
X#define DEV_PATH "/dev/"
X
Xchar *strcpy();
Xchar *strcat();
Xchar *ttyname();
X
Xchar *ttyname(fd)
X register fd;
X{
X struct stat fd_stat, dev_stat;
X static char buf[40];
X struct direct dir;
X register dev_fd;
X
X if (!isatty(fd)) /* is fd a tty? */
X return( NULL );
X
X if (fstat(fd, &fd_stat) < 0) /* get tty status */
X return( NULL );
X
X if (( fd_stat.st_mode & S_IFMT ) != S_IFCHR) /* is it a char device? */
X return( NULL );
X
X if (( dev_fd = open( DEV_PATH, O_RDONLY) ) < 0) {
X perror( DEV_PATH );
X return( NULL );
X }
X
X /*
X * read throuh /dev/ and look at each entry an compare. If the inode
X * equal then we have found our match. else continue looking
X */
X while ( read(dev_fd, &dir, sizeof(dir) )) {
X if (dir.d_ino == NO_ENTRY) /* there's no file here */
X continue;
X if (dir.d_ino != fd_stat.st_ino)
X continue;
X
X strcpy( buf, DEV_PATH ); /* build new device name */
X strcat( buf, dir.d_name );
X if ( stat( buf, &dev_stat ) < 0 ) { /* get device status */
X perror( buf );
X continue;
X }
X /*
X * if the inodes match we have found our tty.
X */
X if ( dev_stat.st_ino == fd_stat.st_ino ) {
X close( dev_fd );
X return( buf );
X }
X }
X close( dev_fd );
X return( NULL );
X}
END_OF_ttyname.c
if test 1517 -ne `wc -c <ttyname.c`; then
echo shar: \"ttyname.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
echo shar: End of archive 1 \(of 1\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 1 archives.
rm -f ark[1-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0