#include #include #include #include #include #include #include #include #define MOUSEDEV "/dev/mouse" /* * Program to reinitialize Logitech MouseMan to Microsoft-compatible mode. * Donated to the public domain. Robert K. Nichols, 1996. * */ int main(int argc, char **argv) { char *cmd; char *devname = NULL; int fd; int pbits = 0; if((cmd = strrchr(argv[0], '/')) != NULL) ++cmd; else cmd = argv[0]; for( ; argc > 1; ++argv, --argc) { if(strcmp(argv[1], "DTR") == 0) { pbits |= TIOCM_DTR; continue; } else if(strcmp(argv[1], "RTS") == 0) { pbits |= TIOCM_RTS; continue; } else if(strncmp(argv[1], "/dev/", 5) == 0) { devname = argv[1]; continue; } else { fprintf(stderr, "%s: Unknown arg: \"%s\"\n", cmd, argv[1]); exit(1); } } if(pbits == 0) pbits = TIOCM_RTS; if(devname == NULL) devname = MOUSEDEV; if((fd = open(devname, O_RDWR | O_NDELAY)) < 0) { fprintf(stderr, "%s: Can't open %s: (%d) %s\n", cmd, devname, errno, (errno < sys_nerr) ? sys_errlist[errno] : "???"); exit(1); } /* Port is opened, so controls signal(s) are high. Clear them. */ if(ioctl(fd, TIOCMBIC, &pbits) < 0) { fprintf(stderr, "%s: ioctl(TIOCMBIC): (%d) %s\n", cmd, errno, (errno < sys_nerr) ? sys_errlist[errno] : "???"); exit(1); } /* Now set them high again. */ if(ioctl(fd, TIOCMBIS, &pbits) < 0) { fprintf(stderr, "%s: ioctl(TIOCMBIS): (%d) %s\n", cmd, errno, (errno < sys_nerr) ? sys_errlist[errno] : "???"); } /* Initialize mouse */ write(fd, "*n", 2); return(0); }