Set the Phone line to what you want! (UNIX PC source)
Lenny Tropiano
lenny at icus.UUCP
Mon Apr 4 11:10:27 AEST 1988
-----------------------------------------------------------------------
Prerequisite: Must be running the 3.51 release of the Operating System
-----------------------------------------------------------------------
This source will allow you to set the phone line (that you use for both
VOICE and DATA) to what you want. Unlike, phtoggle, which just toggles the
setting, this program supplied with the argument of either VOICE or DATA,
will set the line to that. This can be use within a cron script, or
a /etc/rc startup script to set the line to the particular setting depending
on the time.
Edit the Makefile if and add -DSINGLE_LINE to the CFLAGS definition if you
are using only /dev/ph0 for VOICE and DATA. Otherwise just type: make install
as root.
--- cut here --- --- cut here --- --- cut here --- --- cut here ---
#! /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 shell archive."
# Contents: Makefile phset.c
# Wrapped by lenny at icus on Sun Apr 3 21:06:03 1988
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f Makefile -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"Makefile\"
else
echo shar: Extracting \"Makefile\" \(653 characters\)
sed "s/^X//" >Makefile <<'END_OF_Makefile'
X#
X# Makefile to compile phset.c (Phone Set)
X# By Lenny Tropiano
X# (c)1988 ICUS Computer Group UUCP: ...icus!lenny
X#
X# add -DSINGLE_LINE to CFLAGS if using only /dev/ph0 as the line to toggle,
X# else leave undefined.
XCFLAGS=-v -O
XLDFLAGS=-s
XLIBS=/lib/crt0s.o /lib/shlib.ifile
XDEST=/usr/lbin/
X#
Xphset.o:
X $(CC) $(CFLAGS) -c phset.c
X#
Xphset: phset.o
X @echo "Loading ..."
X $(LD) $(LDFLAGS) -o phset phset.o $(LIBS)
X#
X# Need to be root for this
X#
X/usr/lbin:
X mkdir /usr/lbin
X#
Xinstall: phset /usr/lbin
X cp phset ${DEST}
X chown root ${DEST}/phset
X chgrp bin ${DEST}/phset
X chmod 4755 ${DEST}/phset
X#
Xclean:
X rm -f phset *.o *.shar
END_OF_Makefile
if test 653 -ne `wc -c <Makefile`; then
echo shar: \"Makefile\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f phset.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"phset.c\"
else
echo shar: Extracting \"phset.c\" \(3497 characters\)
sed "s/^X//" >phset.c <<'END_OF_phset.c'
X/************************************************************************\
X** **
X** Program name: phset.c (Phone line set) **
X** Programmer: Lenny Tropiano UUCP: ...icus!lenny **
X** Organization: ICUS Computer Group (c)1988 **
X** Date: April 3, 1988 **
X** **
X**************************************************************************
X** **
X** Program use: Program is run to set the phone line to a specific **
X** setting. This checks the phone line status to **
X** see what the line is set at currently, and calls **
X** /usr/bin/phtoggle if necessary. This will solve the **
X** problems inherent in using phtoggle in your crontab **
X** to adjust the line status. If the status gets to the **
X** wrong setting you'll be toggling to the wrong setting. **
X** **
X**************************************************************************
X** Permission is granted to distribute this program by any means as **
X** long as credit is given for my work. I would also like to see **
X** any modifications or enhancements to this program. **
X\************************************************************************/
X
X#include <stdio.h>
X#include <sys/types.h>
X#include <sys/ph.h>
X#include <sys/phone.h>
X#include <nlist.h>
X
X#define PHNDEF 0
X#define UNIX "/unix"
X#define KMEM "/dev/kmem"
X
X#ifdef SINGLE_LINE /* if defined, then check ph0 */
X# define OFFSET 0
X#else /* else, then check ph1 */
X# define OFFSET sizeof(struct phdef)
X#endif
X
Xstruct nlist unixsym[] = { /* /unix name list of symbols */
X { "phndef", },
X { NULL, },
X};
X
Xmain(argc,argv)
Xint argc;
Xchar *argv[];
X{
X void read_kmem();
X struct phdef phblock;
X int kmem;
X ushort phone_mode;
X
X if (argc != 2) {
X printf("usage: %s [VOICE|DATA]\n", argv[0]);
X exit(1);
X }
X
X if (strcmp(argv[1],"VOICE") != 0 &&
X strcmp(argv[1],"DATA") != 0) {
X printf("usage: %s [VOICE|DATA]\n", argv[0]);
X exit(1);
X }
X
X /*
X * Open unix namelist.
X */
X
X if (nlist(UNIX, unixsym) < 0) {
X fprintf(stderr, "%s: no namelist.\n", UNIX);
X exit(1);
X }
X
X /*
X * Open kernel memory.
X */
X
X if ((kmem = open(KMEM, 0)) < 0) {
X perror(KMEM);
X exit(1);
X }
X
X /*
X * Read memory location out of /dev/kmem.
X */
X
X read_kmem(kmem, &phblock,
X (unixsym[PHNDEF].n_value + OFFSET),
X (long)sizeof (struct phdef));
X
X if (phblock.p_lineparam & DATA) { /* check to see if DATA */
X if (strcmp(argv[1],"DATA") == 0) /* do you want it this way? */
X exit(0);
X } else { /* it must be VOICE then */
X if (strcmp(argv[1],"VOICE") == 0) /* do you want it this way? */
X exit(0);
X }
X
X /* if not set, call phtoggle, to change mode */
X
X putenv("IFS=\" \n\t\""); /* prevent any security breaches */
X
X execl("/usr/bin/phtoggle","phtoggle", 0);
X
X perror("execl() failed");
X
X}
X
Xvoid read_kmem(fd, caddr, kaddr, nbytes)
Xint fd;
Xchar *caddr;
Xlong kaddr;
Xlong nbytes;
X{
X if (lseek(fd, kaddr, 0)<0L ||
X read(fd, caddr, (unsigned)nbytes) != nbytes )
X perror("can't read /dev/kmem");
X}
X
END_OF_phset.c
if test 3497 -ne `wc -c <phset.c`; then
echo shar: \"phset.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
echo shar: End of shell archive.
exit 0
--
US MAIL : Lenny Tropiano, ICUS Computer Group IIIII CCC U U SSS
PO Box 1 I C U U S
Islip Terrace, New York 11752 I C U U SS
PHONE : (516) 968-8576 [H] (516) 582-5525 [W] I C U U S
TELEX : 154232428 [ICUS] IIIII CCC UUU SSS
AT&T MAIL: ...attmail!icus!lenny
UUCP : ...{mtune, ihnp4, boulder, talcott, sbcs, bc-cis}!icus!lenny
More information about the Comp.sys.att
mailing list