[comp.sys.amiga] DMOUSE V1.03 SHAR

dillon@CORY.BERKELEY.EDU (Matt Dillon) (05/11/88)

	OK.  This is the *ultimate*... It's got everything except multiple
	key mappings (because it would take too long for me to do it right).

	-works with interlace now (stupid mistake on my part)
	-separate dmouse-handler is only 3K
	-DMouse installs the handler and returns (no need to run or runback)
	-You can modify options on the fly.
	-You can ENDCLI the cli.

	-Now activates window when you type if the window is not already
	 active.

	Thanks for all your suggestions.  Unless any blatent bugs are found
	I will not release the next version for a while.... keep those
	comments comming!

					-Matt


#! /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:
#	dmouse-handler.c
#	dmouse-handler.uue
#	dmouse.c
#	dmouse.doc
#	dmouse.h
#	dmouse.uue
# This archive created: Wed May 11 00:16:40 1988
export PATH; PATH=/bin:/usr/bin:$PATH
echo shar: "extracting 'dmouse-handler.c'" '(7101 characters)'
if test -f 'dmouse-handler.c'
then
	echo shar: "will not over-write existing file 'dmouse-handler.c'"
else
cat << \!Funky!Stuff! > 'dmouse-handler.c'

/*
 *  DMOUSE-HANDLER.C		compile 32 bit integers (+L)
 *				AZTEC COMPILATION
 */

#include "dmouse.h"

#define IBASE IntuitionBase

DMS	*Dms;
struct IntuitionBase *IntuitionBase;
struct GfxBase	     *GfxBase;
long		     *LayersBase;

NS	Ns = {	0, 0, 64, -1, 1, -1, -1, 0, CUSTOMSCREEN|SCREENQUIET };

IE *handler();

_main()
{
    register DMS *dms;
    IOR  *ior;
    INT addhand;

    {
	register PROC *proc = (PROC *)FindTask(NULL);
	proc->pr_ConsoleTask = NULL;
    }
    dms = Dms = FindPort(PORTNAME);
    if (!dms)
	_exit(0);
    dms->Port.mp_Flags = PA_SIGNAL;
    dms->Port.mp_SigBit = AllocSignal(-1);
    dms->Port.mp_SigTask = FindTask(NULL);
    dms->HandTask = dms->Port.mp_SigTask;
    ior = CreateStdIO(&dms->Port);
    IntuitionBase = OpenLibrary("intuition.library", 0);
    GfxBase = OpenLibrary("graphics.library", 0);
    LayersBase = OpenLibrary("layers.library", 0);

    if (!IntuitionBase || !GfxBase || !LayersBase)
	goto startupfail;
    addhand.is_Node.ln_Pri = 51;
    addhand.is_Code = (FPTR)handler;
    addhand.is_Data = NULL;

    if (OpenDevice("input.device", 0, ior, 0)) {
	goto startupfail;
    } else {
	SCR *scr = NULL;
	uword *SprSavePtr = NULL;

	Signal(dms->ShakeTask, 1 << dms->ShakeSig);
	ior->io_Command = IND_ADDHANDLER;
	ior->io_Data = (APTR)&addhand;
	DoIO(ior);
	for (;;) {
	    register long sigs = Wait(SBF_C|(1<<dms->Port.mp_SigBit));
	    if (sigs & (1 << dms->Port.mp_SigBit)) {
		register MSG *msg;
		while (msg = GetMsg(&dms->Port)) {
		    switch((long)msg->mn_Node.ln_Name) {
		    case REQ_SCREENON:
			if (scr)
			    CloseScreen(scr);
			scr = NULL;
			break;
		    case REQ_SCREENOFF:
			if (!scr && (scr = OpenScreen(&Ns)))
			    SetRGB4(&scr->ViewPort, 0, 0, 0, 0);
			break;
		    case REQ_MOUSEON:
			if (SprSavePtr) {
			    register COPINIT *ci = GfxBase->copinit;
			    ci->sprstrtup[1] = (ulong)SprSavePtr >> 16;
			    ci->sprstrtup[3] = (uword)(long)SprSavePtr;
			    SprSavePtr = NULL;
			}
			break;
		    case REQ_MOUSEOFF:
			if (!SprSavePtr) {
			    register COPINIT *ci = GfxBase->copinit;
			    SprSavePtr = (uword *)((ci->sprstrtup[1] << 16) | ci->sprstrtup[3]);
			    ci->sprstrtup[1] = (ulong)dms->NoSprData >> 16;
			    ci->sprstrtup[3] = (uword)(long)dms->NoSprData;
			}
			break;
		    case REQ_DOCMD:
			{
			    long fh = Open("nil:", 1006);
			    Execute(dms->Cmd, NULL, fh);
			    if (fh)
				Close(fh);
			}
			break;
		    }
		    FreeMem(msg, msg->mn_Length);
		}
	    }
	    if (sigs & SBF_C)
		break;
	}
	ior->io_Command = IND_REMHANDLER;
	ior->io_Data = (APTR)&addhand;
	DoIO(ior);
	CloseDevice(ior);
	{
	    register MSG *msg;
	    while (msg = GetMsg(&dms->Port))
		FreeMem(msg, msg->mn_Length);
	}
	if (scr)
	    CloseScreen(scr);
	if (SprSavePtr) {
	    register COPINIT *ci = GfxBase->copinit;
	    ci->sprstrtup[1] = (ulong)SprSavePtr >> 16;
	    ci->sprstrtup[3] = (uword)(long)SprSavePtr;
	    SprSavePtr = NULL;
	}
    }
    goto closedown;
startupfail:
    dms->StartupError = 1;
    Signal(dms->ShakeTask, 1 << dms->ShakeSig);
    Wait(SBF_C);
closedown:
    DeleteStdIO(ior);
fail:
    if (IntuitionBase)
	CloseLibrary(IntuitionBase);
    if (GfxBase)
	CloseLibrary(GfxBase);
    if (LayersBase)
	CloseLibrary(LayersBase);
    Forbid();
    Signal(dms->ShakeTask, 1 << dms->ShakeSig);
}


#asm
	    ;	A0 = pointer to event linked list
	    ;	A1 = pointer to my data segment
	    ;	return new event linked list in D0

	    public  _CHandler

_handler:
	    movem.l D2/D3/A0/A1/A4/A6,-(sp)
	    jsr     _CHandler
	    movem.l (sp)+,D2/D3/A0/A1/A4/A6
	    rts

#endasm

/*
 *  (1) Accellerate mouse movements.
 *  (2) Auto-Select window
 */

IE *
CHandler(scr0, scr1, Ev)
IE *Ev;
{
    register IE *ev;
    register DMS *dms;
    static char STimedout;
    static char MTimedout;
    static long STime, MTime;

    geta4();
    dms = Dms;
    for (ev = Ev; ev; ev = Ev->ie_NextEvent) {
	switch(ev->ie_Class) {
	case IECLASS_RAWMOUSE:
	    STime = ev->ie_TimeStamp.tv_secs + dms->STo;
	    MTime = ev->ie_TimeStamp.tv_secs + dms->MTo;
	    if (STimedout)
		sendrequest(REQ_SCREENON);
	    if (MTimedout)
		sendrequest(REQ_MOUSEON);
	    STimedout = MTimedout = 0;
	    {
		register short n;

		if (dms->Acc != 1) {
		    if (n = ev->ie_X)
			ev->ie_X = (n>0)? (n-1)*dms->Acc+1 : (n+1)*dms->Acc-1;
		    if (n = ev->ie_Y)
			ev->ie_Y = (n>0)? (n-1)*dms->Acc+1 : (n+1)*dms->Acc-1;
		}
	    }
	    if (dms->AAEnable || dms->LMBEnable) {
		register LAYER *layer;

		Forbid();
		layer = WhichMouseLayer();
		if (dms->LMBEnable && ev->ie_Code == IECODE_RBUTTON && (ev->ie_Qualifier & dms->RQual)) {
		    register WIN *win;
		    if (layer && (win = (WIN *)layer->Window) && !(win->Flags & BACKDROP) && (win->NextWindow || win->WScreen->FirstWindow != win))
			WindowToBack(layer->Window);
		    else if (IBASE->FirstScreen)
			ScreenToBack(IBASE->FirstScreen);
		    ev->ie_Class = IECLASS_NULL;    /*	remove event	*/
		}
		if (layer && layer->Window) {
		    if (dms->LMBEnable && ev->ie_Code == IECODE_LBUTTON && layer->ClipRect && layer->ClipRect->Next)
			WindowToFront(layer->Window);
		    if (dms->AAEnable && ev->ie_Code == IECODE_NOBUTTON && !(ev->ie_Qualifier & 0x7000) && layer->Window != IBASE->ActiveWindow)
			ActivateWindow(layer->Window);
		}
		Permit();
	    }
	    break;
	case IECLASS_RAWKEY:
	    {
		register LAYER *layer;

		Forbid();
		layer = WhichMouseLayer();
		if (layer && layer->Window) {
		    if (dms->AAEnable && layer->Window != IBASE->ActiveWindow)
			ActivateWindow(layer->Window);
		}
		Permit();
	    }
	    STime = ev->ie_TimeStamp.tv_secs + dms->STo;
	    if (STimedout)
		sendrequest(REQ_SCREENON);
	    STimedout = 0;
	    if (ev->ie_Code == dms->Code && ev->ie_Qualifier == dms->Qual) {
		sendrequest(REQ_DOCMD);
		ev->ie_Class = IECLASS_NULL;	/*  remove event    */
	    }
	    break;
	case IECLASS_TIMER:
	    if (dms->STo && !STimedout && (long)ev->ie_TimeStamp.tv_secs > STime) {
		if (STime == 0) {
		    STime = ev->ie_TimeStamp.tv_secs + dms->STo;
		    break;
		}
		MTimedout = 1;
		STimedout = 1;
		sendrequest(REQ_SCREENOFF);
		sendrequest(REQ_MOUSEOFF);
	    }
	    if (dms->MTo && !MTimedout && (long)ev->ie_TimeStamp.tv_secs > MTime) {
		if (MTime == 0) {
		    MTime = ev->ie_TimeStamp.tv_secs + dms->MTo;
		    break;
		}
		MTimedout = 1;
		sendrequest(REQ_MOUSEOFF);
	    }
	    break;
	}
    }
    return(Ev);
}


sendrequest(req)
long req;
{
    register MSG *msg = AllocMem(sizeof(MSG), MEMF_PUBLIC);

    if (msg) {
	msg->mn_Node.ln_Name = (char *)req;
	msg->mn_ReplyPort = NULL;
	msg->mn_Length = sizeof(MSG);
	PutMsg(&Dms->Port, msg);
    }
}

LAYER *
WhichMouseLayer()
{
    register struct IntuitionBase *ib = IBASE;
    register LAYER *layer = NULL;
    register SCR *scr = ib->FirstScreen;

    for (scr = ib->FirstScreen; scr; scr = scr->NextScreen) {
	register short mousey = ib->MouseY;
	if (!(scr->ViewPort.Modes & LACE))
	    mousey >>= 1;
	if (layer = WhichLayer(&scr->LayerInfo, ib->MouseX, mousey - scr->ViewPort.DyOffset))
	    break;
	if (mousey >= scr->ViewPort.DyOffset)
	    break;
    }
    return(layer);
}

!Funky!Stuff!
fi  # end of overwriting check
echo shar: "extracting 'dmouse-handler.uue'" '(4309 characters)'
if test -f 'dmouse-handler.uue'
then
	echo shar: "will not over-write existing file 'dmouse-handler.uue'"
else
cat << \!Funky!Stuff! > 'dmouse-handler.uue'
begin 644 dmouse-handler
M```#\P`````````#``````````(```+I````(`````$```/I```"Z4[Z!WY.
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
M<$[N_WP```/L`````0````$```?T`````````_(```/J````"0``````0/__
L``'__P```0\``````````````````````!0``````_(```/K`````0```_+_
`
end
!Funky!Stuff!
fi  # end of overwriting check
echo shar: "extracting 'dmouse.c'" '(4782 characters)'
if test -f 'dmouse.c'
then
	echo shar: "will not over-write existing file 'dmouse.c'"
else
cat << \!Funky!Stuff! > 'dmouse.c'

/*
 *  DMOUSE.C	V1.03  10 May 1988	(Aztec Compile, +L  ... 32 bit ints)
 *					 and link w/ c32.lib
 *
 *  DMOUSE QUIT
 *  DMOUSE -a# -s# -m# -L0 -Rqqqq -A0 -Kcccc -Qqqqq -C cmd
 *
 *  -a#     # = acceleration, default 3.	1 to disable
 *  -s#     # = screen timeout, default 5min,	0 to disable
 *  -m#     # = pointer timeout, default 5 secs,0 to disable
 *  -L0     Disable LeftMouseButton->WindowToFront (LMB+RMB->ToBack)
 *  -L1     Enable it
 *  -Rqqqq  Set qualifier + RMB for Window/ScreenToBack (default LMB)
 *  -A0     Disable Auto-Activate window on mouse move
 *  -A1     Enable it
 *  -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
 *
 *	Note:	Qualifiers usually must be or'd with x8000
 *
 *  To remove, BREAK the CLI it ran under.
 */

#include <stdio.h>
#include "dmouse.h"

int	Enable_Abort;	    /*	CLI break enable	*/

main(ac, av)
char *av[];
{
    register short i, j, len;
    register long val;
    register char *ptr;
    register DMS  *dms = FindPort(PORTNAME);
    short   exists = (dms != NULL);
    short   create = (dms == NULL);
    short   quit = 0;

    Enable_Abort = 0;
    if (create) {
	dms = AllocMem(sizeof(DMS), MEMF_PUBLIC|MEMF_CLEAR);
	dms->Acc = 3;
	dms->STo = 5*60;
	dms->MTo = 5;
	dms->Code = 0x45;
	dms->Qual = 0x8040;
	dms->RQual= 0x4000;
	strcpy(dms->Cmd, "newcli");
	dms->LMBEnable = 1;
	dms->AAEnable = 1;
	dms->NoSprData = AllocMem(8, 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 == '-') {
	    switch(ptr[1]) {
	    case 'a':
		dms->Acc = val;
		break;
	    case 's':
		dms->STo = val;
		break;
	    case 'm':
		dms->MTo = val;
		break;
	    case 'L':
		dms->LMBEnable = val;
		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);
		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]);
		}
		break;
	    default:
		puts("DMOUSE QUIT  or");
		puts("DMOUSE -a# -s# -m# -L0 -Rqqqq -A0 -Kcccc -Qqqqq -C cmd");
		puts("V1.03 PUBLIC DOMAIN, Matthew Dillon, 10 May 1988\n");
		puts("Acceleration (3)  Screen to (300)  Mouse to (5)");
		puts("Lmb disable, Rmb qualifier, Activate disable, Key code & Qual");
		puts("(default ESC=45, left-Amiga=40), Command to run");
		puts("Note: LMB(hold)+RMB = WindowToBack");
		puts("\n");
		puts("Additionaly, Any option may be modified while DMOUSE is active");
		create = 0;
		break;
	    }
	}
    }
    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 = LoadSeg("l:DMouse-Handler");
	if (!dms->Segment)
	    dms->Segment = 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 = 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
		puts("ok.  DMouse V1.03, by Matthew Dillon.  PUBLIC DOMAIN.");
	}
    }
    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, 8);
	FreeMem(dms, sizeof(DMS));
    }
}

ahtoi(str)
register char *str;
{
    register long val = 0;
    register char c;
    while (c = *str) {
	val <<= 4;
	if (c >= '0' && c <= '9')
	    val |= (c & 15);
	else
	    val |= (c & 15) + 9;
	++str;
    }
    return(val);
}


!Funky!Stuff!
fi  # end of overwriting check
echo shar: "extracting 'dmouse.doc'" '(2995 characters)'
if test -f 'dmouse.doc'
then
	echo shar: "will not over-write existing file 'dmouse.doc'"
else
cat << \!Funky!Stuff! > 'dmouse.doc'

V1.03			   DMOUSE.DOC	       10 May 1988

			  Matthew Dillon
			  891 Regal Rd
			  Berkeley, California 94708
			  USA

	YAIH (Yet Another Input Handler)... nahh, like DMouse better...
for "Dillon's Mouse"???   Placed in PUBLIC DOMAIN because it's such a
great example.

	After looking at and rejecting several mouse-intuition input
handler enhancers (you know, accelerate the mouse, click-to-front, etc...)
and finding them ALL useless, I have written my own.

	- Any option can be turned off.

	- Screen blanker after N1 seconds inactivity (def. 300 secs)

	- Mouse blanker after N2 seconds inactivity (def. 5 secs)

	- Auto Activate window when mouse moved over it

	- Mouse Accelerator.  Back feeds power into the mouse unit;
	  give it a nudge and it is guarenteed to penetrate up to an
	  inch and a half of wall plaster.

	- Programmable command-key and command string ala PopCli, default
	  left-Amiga ESC.

	- Left Mouse Button click in window brings it to the front
	    DOES NOT BRING THE WINDOW TO THE FRONT IF IT IS ALREADY
	    IN FRONT.  Other programs would call WindowToFront() on
	    every click, which is horrible if you have a simple-refresh
	    window.

	- Hold LMB, click Right Mouse Button .. Window to Back!  Great
	  for cycling windows.	See next feature for more info.

	- Same sequence as above, but if there is no window under the
	  current mouse position, cycles through screens.  NOTE:  If
	  the window under the mouse is a BACKDROP window, or there is only
	  one window on the screen, you will also cycle through screens.

	- NO DAMN CLOCK.  Use another utility to get a clock.

	- Does not use a CLI, suitable for workbench startup.

INSTALLATION:

    Place dmouse-handler in L: (or in the 'current' directory when DMOUSE
    is run).

RUN FROM CLI or WORKBENCH STARTUP SCRIPT, example:

    1> dmouse -C newcli "<nil: >nil: con:320/120/320/80/Shell c:shell.exe"


TO KILL:

    1> dmouse QUIT

SOURCE:

    Source is compileable under Aztec, +L (32 bit ints) and suitable
    precompiled include file (remember the precompiled include file must
    be precompiled under +L also)

COMMAND LINE ARGUMENTS:

    If DMouse is already running, any specified options will be
    incorporated.

    quit	QUIT .. remove DMouse
    -h		HELP
    -a# 	Set acceleration to #.	Default 3,	     1 disables option
    -s# 	Set screen timeout to # (secs), Default 300, 0 disables option
    -m# 	Set mouse timeout to # (secs), Defalut 5,    0 disabled option
    -L0 	Disable LMB Window To Front and LMB/RMB Window To Back
    -A0 	Disable Auto-Activate when mouse moved over a window
    -Rqqqq	Set Qualfier (HEX) with RMB for Window To Back (default is
		 the LMB qualifier).
    -Kcccc	Set Keycode (HEX)   for command key (default 0045)
    -Qqqqq	Set Qualifier (HEX) for command key (default 8040)
		    (For keycode and qualfier, must specify 4 hex digits)
    -C CMD	Set Command to run.  Default is NEWCLI.  Remaining arguments
		on command line is the command.


!Funky!Stuff!
fi  # end of overwriting check
echo shar: "extracting 'dmouse.h'" '(1534 characters)'
if test -f 'dmouse.h'
then
	echo shar: "will not over-write existing file 'dmouse.h'"
else
cat << \!Funky!Stuff! > 'dmouse.h'

/*
 *  DMOUSE.H
 */

#define DMS struct _DMS

#define PORTNAME    "DMouse"

#define REQ_SCREENON	-1
#define REQ_SCREENOFF	-2
#define REQ_MOUSEON	-3
#define REQ_MOUSEOFF	-4
#define REQ_DOCMD	-5

#define SBF_C	SIGBREAKF_CTRL_C
#define SBF_D	SIGBREAKF_CTRL_D
#define SBF_E	SIGBREAKF_CTRL_E
#define SBF_F	SIGBREAKF_CTRL_F

typedef unsigned short	    uword;
typedef unsigned long	    ulong;

typedef struct copinit	    COPINIT;
typedef struct Message	    MSG;
typedef struct Custom	    CUST;
typedef struct Preferences  PREFS;
typedef struct InputEvent   IE;
typedef struct MsgPort	    PORT;
typedef struct IOStdReq     IOR;
typedef struct Interrupt    INT;
typedef struct Screen	    SCR;
typedef struct Window	    WIN;
typedef struct Layer	    LAYER;
typedef struct NewScreen    NS;
typedef struct Task	    TASK;
typedef struct Process	    PROC;
typedef void		    (*FPTR)();


DMS {
    PORT    Port;
    short   Acc;
    long    STo;
    long    MTo;
    uword   Code;
    uword   Qual;
    uword   RQual;
    char    Cmd[256];
    char    LMBEnable;
    char    AAEnable;
    TASK    *HandTask;
    TASK    *ShakeTask;
    short   ShakeSig;
    short   StartupError;
    uword   *NoSprData;
    long    Segment;
};

extern IOR *CreateStdIO();
extern SCR *OpenScreen();
extern void *AllocMem();
extern void *malloc();
extern void *GetMsg();
extern void *OpenLibrary();
extern PORT *CreatePort();
extern TASK *FindTask();
extern PROC *CreateProc();
extern LAYER *WhichMouseLayer();
extern LAYER *WhichLayer();
extern DMS   *FindPort();

!Funky!Stuff!
fi  # end of overwriting check
echo shar: "extracting 'dmouse.uue'" '(10105 characters)'
if test -f 'dmouse.uue'
then
	echo shar: "will not over-write existing file 'dmouse.uue'"
else
cat << \!Funky!Stuff! > 'dmouse.uue'
begin 644 dmouse
M```#\P`````````#``````````(```9[````IP````$```/I```&>T[Z!^Q.
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
M`@("`@("`@("`D!`0$`@``````````````````$``````0``````````````
M```````!`0````$``````````````````````0(````!````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
:`````````!0``````_(```/K`````0```_(`
`
end
!Funky!Stuff!
fi  # end of overwriting check
exit 0
#	End of shell archive

dyl@cory.Berkeley.EDU (dylan mcnamee) (05/13/88)

I don't mean to be picky about a program that I already love after
less than an half an hour of use, BUT here's a way to lock up your
(at least my) amiga using Dmouse...

Have a CLI window on the screen overlapping another window (anything that
has folders or something in it).  Click the window with the icons in it
to the front, and click on an icon in that window, and keep holding
the left mouse button down.  Now press the right mouse button, which
should send this window to the back.  Instead, my amiga locks up.
No guru, no blinking power led, but definately locked up.

My amiga is an old 1000 with 2.5 Meg of ram.  No Extra halfbrite (That's
the problem!)

Great program...obscure bug (as evidenced by the complex instructions)

Sorry if this is confusing,

dylan
(dyl@ji.berkeley.edu)
(if this message gets garbled, it's because my amiga
locked up trying out the bug again...  8)

dillon@CORY.BERKELEY.EDU (Matt Dillon) (05/13/88)

:Have a CLI window on the screen overlapping another window (anything that
:has folders or something in it).  Click the window with the icons in it
:to the front, and click on an icon in that window, and keep holding
:the left mouse button down.  Now press the right mouse button, which
:should send this window to the back.  Instead, my amiga locks up.
:No guru, no blinking power led, but definately locked up.

	I was playing a game I wrote a *long* time ago but never
distributed (Maybe I should distribute it for the hell of it... it's
kind of cute).  In anycase, the LMB does one thing, the RMB does the other.
Except with DMouse running I have to be careful not to hit an LMB-RMB
combo or it does a screen-to-back!  Poof, up comes my workbench and meanwhile
I've died on the game screen.

	Actually, there is an easy way to fix this problem.  You can SET
the qualifier (-Rqqqq) that goes with the right mouse button to do
window/screentoback.  For instance, -R1 will set it to shift (shift-RMB).

>My amiga is an old 1000 with 2.5 Meg of ram.  No Extra halfbrite (That's
>the problem!)

	Same here!

				-Matt

juan@gatech.edu (Juan M. Orlandini) (05/15/88)

This isn't about a lockup condition, rather about the non disapearing pointer.

If for some reason the screen blanks normally (as in during a long download),
and you get a message requester, the screen un-blanks, and then re-blanks, but
this time it leaves the pointer on. 

The mouse pointer also does not disapear if a screen/window gets created/
deleted, and the mouse is not moved.

If I may suggest, could you not change the pointer to something interesting
(like a amiga checkmark) when the screen blanks, and then make it bounce
around the screen until the mouse/keyboard/drive (or other event) makes the
screen come back alive. Then you could restore the pointer to its original
shape and position. Make sense? Is it posible? it's a cludgy solution to the
non-disapearing pointer, but an aesthetic one.



        //     _______                   //      "Honesty is the best policy
       //         |       __            //       but, insanity is a better
    \\//          | |  | |__| |\ |   \\//        defense."
     \/        |__| |__| |  | | \|    \/

School of Information & Computer Science, Georgia Tech, Atlanta GA 30332
uucp:	...!{decvax,hplabs,ihnp4,linus,rutgers}!gatech!juan
Internet: juan@gatech.edu            BIX: juan

dillon@CORY.BERKELEY.EDU (Matt Dillon) (05/16/88)

>The mouse pointer also does not disapear if a screen/window gets created/
>deleted, and the mouse is not moved.
>
>shape and position. Make sense? Is it posible? it's a cludgy solution to the
>non-disapearing pointer, but an aesthetic one.

	My solution in 1.04 was to simply re-blank the mouse every N seconds...
takes almost no CPU to do this.  But I'm holding off doing a third 
distribution to the NET until I am absolutely sure there isn't something
else I want to add.

	So if, for some reason, you feel you must absolutely have the
next version immediately, just mail me!

					-Matt