allbery@ncoast.UUCP (08/19/87)
Enclosed is a shell archive containing my modifications to the serial mouse routines written by John Chapman (john@bby-bc.UUCP) I added error checking along with some modularization and efficiency changes. Also included is a small program called "track" to test these routines. These routines were tested with a Microsoft compatible PC mouse and Microport UNIX 2.2. ----- Anthony J. Starks ...{ihnp4 | seismo}!iuvax!hpuinda!mdri!ajs Merrell Dow Research Institute P.O. Box 68470 Indianapolis, IN 46268 #------------------cut here------------------------------------------------ #! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # Makefile # smouse.h # smouse.c # track.c # This archive created: Fri Aug 7 13:13:33 1987 export PATH; PATH=/bin:$PATH if test -f 'Makefile' then echo shar: will not over-write existing file "'Makefile'" else cat << \SHAR_EOF > 'Makefile' # # Makefile for smouse routines # track: track.o smouse.o cc $(CFLAGS) track.o smouse.o -o track track.o: track.c smouse.h cc $(CFLAGS) -c track.c smouse.o: smouse.c smouse.h cc $(CFLAGS) -c smouse.c shar: shar Makefile smouse.h smouse.c track.c >smouse.shar clean: rm -f track.o SHAR_EOF fi # end of overwriting check if test -f 'smouse.h' then echo shar: will not over-write existing file "'smouse.h'" else cat << \SHAR_EOF > 'smouse.h' /* * Constants and definitions for the Microsoft serial mouse routines */ #define MOUSE_DEV "/dev/tty1" #define NCOORD 4 #define NBUTTON 3 #define SYSERR (-1) #define SUCCESS (0) typedef struct { int dx; int dy; int button[NBUTTON]; } Mouse; SHAR_EOF fi # end of overwriting check if test -f 'smouse.c' then echo shar: will not over-write existing file "'smouse.c'" else cat << \SHAR_EOF > 'smouse.c' /* * Mouse routines for the Microsoft serial mouse and compatibles. * * Adapted from routines posted by john@bby-bc.UUCP in <146@bby-bc.UUCP>. * * Anthony J. Starks (ajs@mdri) */ #include <fcntl.h> #include <errno.h> #include <termio.h> #include "smouse.h" static int mfd; MouseInit() { struct termio t; errno = 0; if ((mfd = open(MOUSE_DEV, O_RDONLY)) < 0) { perror("mouse open"); return SYSERR; } if (ioctl(mfd,TCGETA, &t) < 0) { perror("mouse get parameter"); return SYSERR; } t.c_iflag &= ~(IXON|IXOFF|ISTRIP|INLCR|IGNCR|ICRNL|IUCLC|INPCK); t.c_cflag = B1200 | CS8 | CLOCAL | CREAD ; t.c_lflag = 0; if (ioctl(mfd,TCSETA, &t) < 0) { perror("mouse set parameter"); return SYSERR; } return SUCCESS; } MouseRead(m) Mouse *m; { unsigned char b; char coord[NCOORD]; /* * Synchronize on a button byte */ for (b=0; (b&0370) != 0200 ; ) if (read(mfd, &b, 1) < 0) return SYSERR; /* * Read the coordinates */ if (read(mfd, coord, NCOORD) < 0) return SYSERR; /* * Read button bits */ m->button[2] = (~b) & 1; m->button[1] = (~(b>>1)) & 1; m->button[0] = (~(b>>2)) & 1; /* * Pack up the coordinate half-words */ m->dx = (int)(coord[0] + coord[2]); m->dy = (int)(coord[1] + coord[3]); return SUCCESS; } MouseClose() { close(mfd); } SHAR_EOF fi # end of overwriting check if test -f 'track.c' then echo shar: will not over-write existing file "'track.c'" else cat << \SHAR_EOF > 'track.c' /* * track -- track the mouse using the serial mouse routines. */ #include "smouse.h" main() { Mouse m; if (MouseInit() < 0) exit(1); while (!m.button[2]) { if (MouseRead(&m) < 0) break; printf("dx = %4d dy = %4d b1 = %1d b2 = %1d b3 = %1d\n", m.dx, m.dy, m.button[0], m.button[1], m.button[2]); } MouseClose(); } SHAR_EOF fi # end of overwriting check # End of shell archive exit 0