home *** CD-ROM | disk | FTP | other *** search
-
- /*
- * DMOUSE.C V1.20 3 August 1989
- *
- * (c)Copyright 1989 by Matthew Dillon, All Rights Reserved
- *
- * DMOUSE QUIT
- * DMOUSE -a# -t# -s# -m# -c# -p# -w# -Ln -lqqqq -Rqqqq -An -Kcccc -Qqqqq -C c
- d
- * -d#
- *
- * -a# # = acceleration, default 3. 1 to disable
- * -t# # = mouse threshold before acceleration takes effect, def. 0
- * (in pixels/event)
- * -s# # = screen timeout, default 5min, 0 to disable
- * -m# # = pointer timeout, default 5 secs,0 to disable
- * -c# # = # of clicks to bring window to front
- * -p# # = input device priority
- * -w# 1 = Use WindowToFront()/WindowToBack() else (workbench users)
- * 0 = Use UpFrontLayer(), etc... (cli users)
- * -L0 Disable LeftMouseButton->WindowToFront (LMB+RMB->ToBack)
- * -L1 Enable it
- * -lqqqq Set qualifier + LMB for Window to front (default none)
- * -Rqqqq Set qualifier + RMB for Window/ScreenToBack (default LMB)
- * -A0 Disable Auto-Activate window on mouse move
- * -A1 Enable it, keyhit-auto-activate disabled (bit 0 = mouse aa)
- * -A3 Enable it, keyhit-auto-activate enabled (bit 1 = key aa)
- * -Kcccc Set key code in hex that activates cmd, def is escape
- * -Qqqqq Set key qualifier in hex for keycode, def is left-amiga
- * -C cmd Set command (must be last option on command line), def NewCli
- *
- * -d# Debug mode (if compiled in)
- */
-
- #include <stdio.h>
- #include "dmouse.h"
-
- #define VERSION 20
-
- #ifdef LATTICE
- #include <dos.h>
- #include <stdlib.h>
- #include <string.h>
-
- int __stdargs CXBRK(void);
-
- __stdargs /* bug in lcr.lib */
- CXBRK()
- {
- return(0);
- }
-
- #else
- extern int Enable_Abort; /* CLI break enable */
- #endif
-
- long ahtoi ARGS((char *));
- void main ARGS((int, char **));
-
- void
- main(ac, av)
- int ac;
- char *av[];
- {
- reg short i, j, len;
- reg long val;
- reg char *ptr;
- reg DMS *dms = (DMS *)FindPort(PORTNAME);
- short exists = (dms != NULL);
- short create = (dms == NULL);
- short quit = 0;
-
- #ifndef LATTICE
- Enable_Abort = 0;
- #endif
- if (create) {
- dms = AllocMem(sizeof(DMS), MEMF_PUBLIC|MEMF_CLEAR);
- dms->IPri = 51;
- dms->Version = VERSION;
- dms->Acc = 3;
- dms->STo = 5*60;
- dms->MTo = 5;
- dms->Code = 0x45;
- dms->Qual = 0x8040;
- dms->RQual= 0x4000;
- dms->Clicks = 1;
- dms->CLeft = dms->Clicks;
- strcpy(dms->Cmd, "newcli");
- dms->LMBEnable = 1;
- dms->AAEnable = 3;
- dms->NoSprData = AllocMem(12, MEMF_PUBLIC|MEMF_CHIP|MEMF_CLEAR);
- dms->NoSprData[0] = 0xFE00;
- dms->NoSprData[1] = 0xFF00;
- }
-
- for (i = 1; i < ac; ++i) {
- ptr = av[i];
- if (strcmp(ptr, "QUIT") == 0 || strcmp(ptr, "quit") == 0) {
- quit = 1;
- create = 0;
- break;
- }
- val = atoi(ptr+2);
- if (*ptr != '-')
- goto def;
-
- switch(ptr[1]) {
- case 'd':
- dms->Debug = val;
- break;
- case 'a':
- dms->Acc = val;
- break;
- case 'c':
- if (val < 1)
- val = 1;
- dms->Clicks = dms->CLeft = val;
- break;
- case 'w':
- dms->Workbench = val;
- break;
- case 'p':
- dms->IPri = val;
- break;
- case 't':
- dms->AThresh = val;
- break;
- case 's':
- dms->STo = val;
- break;
- case 'm':
- dms->MTo = val;
- break;
- case 'L':
- dms->LMBEnable = val;
- break;
- case 'l':
- dms->LQual = ahtoi(ptr+2);
- break;
- case 'R':
- dms->RQual = ahtoi(ptr+2);
- break;
- case 'A':
- dms->AAEnable = val;
- break;
- case 'K':
- dms->Code = ahtoi(ptr+2);
- break;
- case 'Q':
- dms->Qual = ahtoi(ptr+2) | 0x8000;
- break;
- case 'S':
- case 'M':
- puts("-S and -M options obsolete");
- break;
- case 'C':
- for (len = strlen(ptr+2) + 2, j = i + 1; j < ac; ++j)
- len += strlen(av[j]) + 1;
- strcpy(dms->Cmd, ptr + 2);
- for (j = i + 1; j < ac; ++j) {
- if (dms->Cmd[0])
- strcat(dms->Cmd, " ");
- strcat(dms->Cmd, av[j]);
- }
- i = ac;
- break;
- default: def:
- puts("DMOUSE QUIT or");
- puts("DMOUSE -a# -t# -s# -m# -Ln -Rqqqq -An -Kcccc -Qqqqq -C cmd");
- printf("DMouse (c)Copyright 1989, Matthew Dillon, All Rights Reserved\nV1.
- 02d, 3 August 1989\n\n", VERSION);
- puts("Freeware, redistributable for non-profit only");
- puts(" -a# Acceleration (default 3)");
- puts(" -t# Accel. threshold (default 0)");
- puts(" -s# Screen timeout (default 300)");
- puts(" -m# Mouse timeout (default 5)");
- puts(" -c# Set # of clicks for wintofront (default 1)");
- puts(" -p# # = input device priority");
- puts(" -w# 0 = use UpFrontLayer().. 1 = use WindowToFront()");
- puts(" -L0/1 LMB disable/enable (default 1=enabled)");
- puts(" -lqqqq LMB qualifier wintofront (default 0=none)");
- puts(" -Rqqqq RMB qualifier wintoback (default 4000=LMB)");
- puts(" -A0-3 Auto-Activate Window disable/enable. B0=mouse B1=keyboard"
- ;
- puts(" -Kcccc Command Key Code, default 45 = esc");
- puts(" -Qqqqq Command Key Qualifier, default 40 = Left Amiga");
- puts(" -C cmd cmd to run, must be last option");
- puts("Note: LMB(or -R qualifier)(hold)+RMB = WindowToBack");
- puts("\n");
- puts("Additionaly, Most options may be modified while DMOUSE is active");
- create = 0;
- i = ac;
- break;
- }
- }
- dms->Reset = 1;
- if (!exists && create) {
- PROC *proc;
- printf("Installing DMouse, ");
- fflush(stdout);
- dms->Port.mp_Flags = PA_IGNORE;
- dms->Port.mp_Node.ln_Pri = 0;
- dms->Port.mp_Node.ln_Type= NT_MSGPORT;
- dms->Port.mp_Node.ln_Name= AllocMem(sizeof(PORTNAME), MEMF_PUBLIC);
- strcpy(dms->Port.mp_Node.ln_Name, PORTNAME);
- NewList(&dms->Port.mp_MsgList);
- dms->Segment = (long)LoadSeg("l:DMouse-Handler");
- if (!dms->Segment)
- dms->Segment = (long)LoadSeg("DMouse-Handler");
- if (!dms->Segment) {
- puts("Unable to find L:DMouse-Handler");
- FreeMem(dms->Port.mp_Node.ln_Name, sizeof(PORTNAME));
- create = 0;
- } else {
- AddPort(&dms->Port);
- dms->ShakeTask = FindTask(NULL);
- dms->ShakeSig = AllocSignal(-1);
- proc = (PROC *)CreateProc(dms->Port.mp_Node.ln_Name, 1, dms->Segment, 4096
- ;
- Wait(1 << dms->ShakeSig);
- FreeSignal(dms->ShakeSig);
- exists = 1;
- quit = dms->StartupError;
- if (quit)
- puts("Handler error");
- else
- printf("ok. DMouse V1.%02d, by Matthew Dillon.\n(c)Copyright 1989, Matthew D
- llon, All Rights Reserved\n", VERSION);
- }
- }
- if (quit) {
- if (exists) {
- printf("Removing, ");
- fflush(stdout);
- dms->ShakeTask = FindTask(NULL);
- dms->ShakeSig = AllocSignal(-1);
- Signal(dms->HandTask, SBF_C);
- Wait(1 << dms->ShakeSig);
- FreeSignal(dms->ShakeSig);
- RemPort(&dms->Port);
- FreeMem(dms->Port.mp_Node.ln_Name, sizeof(PORTNAME));
- UnLoadSeg(dms->Segment);
- puts("ok");
- }
- exists = 0;
- create = 0;
- }
- if (!exists) {
- FreeMem(dms->NoSprData, 12);
- FreeMem(dms, sizeof(DMS));
- }
- }
-
- long
- ahtoi(str)
- reg char *str;
- {
- reg long val = 0;
- reg char c;
- while (c = *str) {
- val <<= 4;
- if (c >= '0' && c <= '9')
- val |= (c & 15);
- else
- val |= (c & 15) + 9;
- ++str;
- }
- return(val);
- }
-
-
-