123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- #! /bin/sh -
- #
- # A mouse configuration tool for gpm(8)
- #
- # Copyright (c) 2018 Matias Fonzo, <selk@dragora.org>.
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- # Exit immediately on any error
- set -e
- PROGRAM="${0##*/}"
- TMPDIR="${TMPDIR:-/tmp}"
- TMPFILE="${TMPDIR}/${PROGRAM}.${RANDOM-0}$$"
- LOCKFILE="${TMPDIR}/dragora-mouse.lockfile"
- chkstatus_or_exit()
- {
- status=$?
- # Clean up temporary files
- rm -f -- "$TMPFILE" "$LOCKFILE"
- if test $status -ne 0
- then
- echo "Return status = $status" 1>&2
- exit 2;
- fi
- unset status
- }
- # Sanity checks
- if test ! -d "$TMPDIR"
- then
- echo "${PROGRAM}: \`${TMPDIR}' is not a qualified temporary directory" 1>&2
- exit 1;
- fi
- if test ! -w "$TMPDIR"
- then
- echo "${PROGRAM}: \`${TMPDIR}' is not a writable temporary directory" 1>&2
- exit 1;
- fi
- trap 'chkstatus_or_exit' EXIT HUP INT QUIT ABRT TERM
- umask 077; # Remove access for all but user.
- # Unfortunately, gpm(8) is limited to the superuser;
- # we set a lock to allow only one instance of the script.
- if ( set -C ; echo ": $PROGRAM - locked" > $LOCKFILE ) 2> /dev/null
- then
- true
- else
- if test -e "$LOCKFILE"
- then
- echo "Only one instance of \`${PROGRAM}' is allowed." 1>&2
- exit 1;
- else
- echo "${PROGRAM}: \`${LOCKFILE}' lock failed." 1>&2
- exit 2;
- fi
- fi
- dialog --colors \
- --backtitle "\Zb${PROGRAM} - Mouse Configuration" \
- --title "MAIN MENU" --menu \
- "Welcome to \Zb${PROGRAM}\Zn!\n\
- A configuration tool for the mouse selection.\n\n\
- The following list is ordered by mouse type and brief description.\n\
- \Zbp\Zns2 is the most common model for laptops. Otherwise, you can\n\
- select the \Zbu\Znsb model from the list below.\n\n\
- Select a mouse type:" 19 71 5 \
- "ps2" "Common protocol for PS2 mice" \
- "usb" "Common protocol for USB mice" \
- "bare" "Microsoft compatible, 2 buttons" \
- "exps2" "IntelliMouse Explorer, 3 buttons" \
- "imps2" "Microsoft Intellimouse, 2 or 3 buttons" \
- "js" "Mouse emulation with a Joystick" \
- "logi" "Logitech devices" \
- "logim" "Logitech into Mouse-Systems compatible" \
- "mman" "The MouseMan and similar devices" \
- "ms" "Microsoft-compatible, 3 buttons" \
- "ms3" "Microsoft Intellimouse, 3 buttons" \
- "msc" "Mouse-Systems compatible, most 3-button mice" \
- "ncr" "Ncr3125pen found on some laptops" \
- "netmouse" "Genius NetMouse, 4 buttons" \
- "pnp" "Plug and Play mice, does not work with 'ms'" \
- "twid" "Twidddler keyboard" \
- "acecad" "Acecad tablet, in absolute mode" \
- "genitizer" "Genitizer tablet, in relative mode" \
- "wacom" "Wacom Protocol IV tablets" \
- "wp" "Genius WizardPad tablet" \
- 2> $TMPFILE
- # Read answer from 'TMPFILE'
- echo "" >> $TMPFILE; # Append new line for reading.
- IFS= read -r REPLY < $TMPFILE || exit 2;
- # Check cases to determine the corresponding device name
- case $REPLY in
- ps2 | imps2 | exps2 | ncr | netmouse)
- DEVICE=psaux
- ;;
- usb)
- REPLY=imps2
- DEVICE=input/mice
- ;;
- acecad | bare | genitizer | logi* | twid | wacom | mman | ms* | pnp | wp)
- dialog --colors \
- --backtitle "\Zb${PROGRAM} - Serial Port" \
- --title "MOUSE DEVICE" \
- --no-cancel --menu \
- "The protocol \Zb${REPLY}\Zn requires a serial port.\n\n\
- Which device name would you like to use?" 13 52 4 \
- "ttyS0" "Serial port 0, COM1 under DOS" \
- "ttyS1" "Serial port 1, COM2 under DOS" \
- "ttyS2" "Serial port 2, COM3 under DOS" \
- "ttyS3" "Serial port 3, COM4 under DOS" \
- 2> $TMPFILE
- echo "" >> $TMPFILE; # Append new line for reading.
- IFS= read -r DEVICE < $TMPFILE || exit 2;
- ;;
- js)
- DEVICE=js0
- ;;
- esac
- # The temporary file is not needed anymore
- rm -f -- "$TMPFILE"
- umask 022; # Remove write permission for group and other.
- printf "%s\n" \
- "#! /bin/sh -" \
- "# Stop/Start gpm(8) the mouse server." \
- "# Automatically generated by dragora-mouse(8)." \
- "" \
- "if pidof gpm > /dev/null" \
- "then" \
- " echo \"Stopping running gpm instance: gpm -k\"" \
- " if ! gpm -k" \
- " then" \
- " echo \"Sending the TERM signal to gpm\"" \
- " killall -TERM gpm" \
- " fi" \
- " sleep 1" \
- "fi" \
- "" \
- "echo \"(Startup) Starting gpm: gpm -m /dev/${DEVICE} -t $REPLY\"" \
- "gpm -m /dev/${DEVICE} -t $REPLY" \
- "" \
- > /etc/rc.d/rc.gpm-sample
- chmod 755 /etc/rc.d/rc.gpm-sample
- dialog --colors \
- --backtitle "\Zb${PROGRAM} - Startup File" \
- --title "RUN CONTROL" --yesno \
- "A run control file could be created to load your settings at \
- boot time. This file will be saved\nas \Zb/etc/rc.d/rc.gpm\Zn.\n\n\
- Would you like to load \Zbrc.gpm\Zn at boot time?" 10 54 && \
- mv -f -- /etc/rc.d/rc.gpm-sample /etc/rc.d/rc.gpm
- dialog --colors \
- --backtitle "\Zb${PROGRAM} - Current Session" \
- --title "MOUSE" --yesno \
- "\ZbGPM\Zn is a cut and paste utility and mouse server \
- for virtual consoles. It is useful to avoid\n\
- typing everything by hand\Zb!\Zn\n\n\
- Would you like to run it now?" 10 54 &&
- {
- echo "Stopping any running gpm instance"
- gpm -k 2> /dev/null || killall gpm 2> /dev/null || true;
- sleep 1
- echo "Starting gpm: gpm -m /dev/${DEVICE} -t $REPLY"
- gpm -m /dev/${DEVICE} -t $REPLY
- } || { echo "Okay!" ; exit 1 ; }
|