Path: utzoo!mnetor!uunet!husc6!uwvax!oddjob!ncar!ames!pasteur!ucbvax!CORY.BERKELEY.EDU!dillon From: dillon@CORY.BERKELEY.EDU (Matt Dillon) Newsgroups: comp.sys.amiga Subject: DMOUSE V1.00 Message-ID: <8805091849.AA11920@cory.Berkeley.EDU> Date: 9 May 88 18:49:17 GMT Sender: daemon@ucbvax.BERKELEY.EDU Lines: 727 Please report any bugs! -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.doc # dmouse.uue # dmouse.c # This archive created: Mon May 9 11:46:43 1988 export PATH; PATH=/bin:/usr/bin:$PATH echo shar: "extracting 'dmouse.doc'" '(2611 characters)' if test -f 'dmouse.doc' then echo shar: "will not over-write existing file 'dmouse.doc'" else cat << \!Funky!Stuff! > 'dmouse.doc' V1.00 DMOUSE.DOC 8 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. - Same sequence as above, but if there is no window under the current mouse position, cycles through screens - NO DAMN CLOCK. Use another utility to get a clock. - Uses a CLI (sorry). The executable could be smaller if I wrote my own startup so stdio isn't included. BREAK the CLI to exit the program. RUNable, of course. RUN FROM CLI, example: 1> run dmouse [CLI 4] OR (another example) 1> run >nil: nil: con:320/120/320/80/Shell c:shell.exe" [CLI 4] TO KILL: 1> Break 4 (or whichever CLI it was run under) COMMAND LINE ARGUMENTS: -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.uue'" '(11857 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`````````#``````````(```;D````Y`````$```/I```&Y$[Z#&1N M97=C;&D``$Y5_\Y(YP\@>`%@``($,`1(P.6`(&T`#"1P"``@2E2(+PA.N0`` M"^I83RX`#!(`+68``=P0*@`!2(!(P&```8HSQP````!@``'&(\<````"8``! MO"/'````!F```;(3QP```!1@``&H($I4B"\(3KH)MEA/,\`````.8``!DA/' M````%6```8@@2E2(+PA.N@F66$\SP`````I@``%R($I4B"\(3KH)@%A/,\`` M```,8``!7"!*5(@O"$ZY```1)EA/5(`\`#($2,%2@3H!2,%@'#`%2,#E@"!M M``PO,`@`3KD``!$F6$]2@-Q`4D4P!4C`L*T`"&W:,`9(P"\`3KD``!2`6$\C MP````!`@2E2(+P@O.0```!!.N0``$"103S`$2,!2@#H`8#H@>0```!!*$&<2 M2'H$%B\Y````$$ZY```/^E!/,`5(P.6`(&T`#"\P"``O.0```!!.N0``#_I0 M3U)%,`5(P+"M``AMO&```)Y(>@/:3KD``!`T6$](>@0%3KD``!`T6$](>@0H M3KD``!`T6$](>@1,3KD``!`T6$](>@1^3KD``!`T6$](>@2B3KD``!`T6$]( M>``!3KD``!9"6$]@1I"\````06<`_JY5@&<`_MY1@&<`_JQ3@&<`_GQ;@&<` M_K93@&<`_GJ0O`````]G`/Y(D+P````,9P#^4EV`9P#^0F``_V921#`$2,"P MK0`(;0#]]$AY``$``TAX``A.N0``&?I03RM`_^(@;?_B,+S^`"!M_^(Q?/\` M``)"ITZY```:(EA/(\````-*0J="ITZY```8:%!/(\````-2+SD```-23KD` M`!E26$\K0/_\2'@$`TZY```+6EA/0KD```-&&WP`,__O0?H#\"M(__A"K?_T M0J@//3KD``!J`3^\`$$J`9@`"6$*M_]Y"K?_:(&W__#%\``D` M'$'M_^8B;?_\(T@`*"\M__Q.N0``&@Q83R!Y```#4G``$"@`#W(!X:$(P0`, M+P%.N0``&N983RM`_]8@>0```U)P`!`H``]R`>&APJW_UF<``4HO.0```U). MN0``&EY83RM`_])G``$T(&W_TB`H``I@``#T2JW_WF<,+RW_WDZY```;0EA/ M0JW_WF```/)*K?_>9BY(>0```!9.N0``&TY83RM`_]YG&D*G0J="IT*G(&W_ MWDAH`"Q.N0``&OY/[P`48```NDJM_]IG*B!Y```#"BMH`";_SB`M_]IR$.*H M(&W_SC%```H@;?_.,6W_W``.0JW_VF```(9*K?_:9D0@>0```PHK:``F_\X@ M;?_.<``P*``*9PPO+?_>3KD``!M"6$]*K?_:9RH@ M>0```PHK:``F_]8@+?_:2!C;V1E("8@475A M;``H9&5F875L="!%4T,]-#4L(&QE9G0M06UI9V$]-#`I+"!#;VUM86YD('1O M(')U;@!.;W1E.B!,34(H:&]L9"DK4DU"(#T@5VEN9&]W5&]"86-K`&EN<'5T M+F1E=FEC90!(YS#*809,WU,,3G5.50``2.<(,$ZY```,V"1M`!!@``*^<``0 M*@`$8``"G"`J``[0N0````(CP````OX@*@`.T+D````&(\````,"2CD```+\ M9PI(>/__3KH"EEA/2CD```+]9PI(>/_]3KH"A%A/0CD```+]0CD```+\#'D` M`0````!G>#@J``IG-DI$;Q@P!$C`4X`R.0````!(P4ZY```7GE*`8!8P!$C` M4H`R.0````!(P4ZY```7GE.`-4``"C@J``QG-DI$;Q@P!$C`4X`R.0````!( MP4ZY```7GE*`8!8P!$C`4H`R.0````!(P4ZY```7GE.`-4``#$HY````%68* M2CD````49P``U$ZY```:,DZZ`AHF0$HY````%&=.#&H`:0`&9D8P*@`(P'D` M```.9SH@"V<42JL`*&<.+RL`*$ZY```;9EA/8!X@>0```PY*J``\9Q(@>0`` M`PXO*``\3KD``!M:6$]"*@`$(`MG9DJK`"AG8$HY````%&/__3KH`[%A/0CD```+\,"H`!K!Y M````"F8:,BH`"+)Y````#&8.2'C_^TZZ`,183T(J``1@``"B2KD````"9SY* M.0```OQF-B`J``ZPN0```OYO*DJY```"_F82("H`#M"Y`````B/````"_F!J M$_P``0```OQ(>/_^87183TJY````!F<^2CD```+]9C8@*@`.L+D```,";RI* MN0```P)F$B`J``[0N0````8CP````P)@)!/\``$```+]2'C__&$N6$]@$E.` M9P#_'%.`9P#]7%F`9P#_8B!M`!`D4"`*9@#]0"`M`!!,WPP03EU.=4Y5```O M"DAX``%(>``43KD``!GZ4$\D0"`*9R`E;0`(``I"J@`.-7P`%``2+PHO.0`` M`U).N0``&K)03R1?3EU.=4Y5``!(YP@P)'D```,.E\LH*@`\*"H`/&!*,"H` M1$C`XH`@1#(H`$I(P9"!+P`T*@!&2,(O`B)$2&D`X$ZY```;?D_O``PF0$J` M9APP*@!$2,#B@"!$,B@`2DC!L(%L""!$*!!*A&:R(`M,WPP03EU.=4Y5``!( MYPP@)&T`"'@`&A)G-NF$NCP`,&T6NCP`.6X0$`5(@$C`P+P````/B(!@%!`% M2(!(P,"\````#]"\````"8B`4HI@QB`$3-\$,$Y=3G5.50``2.<((#@M``I! M^0```#8D2&`F"`0``&<<(&H`!$J09Q0@:@`$+Q!.N0``&%A83R!J``1"D.), M4(I*1&<$2I)FTDS?!!!.74YU9W)A<&AI8W,`:6YT=6ET:6]N`&5X<&%N#$U`'@Q-@``3E7_O"\*<``P+0`**T#_O$'Y````-B1( M8$H(+0````MG/"\22&W_P$ZY```0)%!/2'H`5$AM_\!.N0``#_I03R!J``1* MD&860J=(;?_`3KD``!J64$\@:@`$((!G&.+M``I0BDIM``IG!$J29JQP`21? M3EU.=2\M_[Q.N0``"H183W``8.HN;&EB0``3E4``$CG#"`D;0`(#!(` M(&<&#!(`"68$4HI@\'H`#!(`+68&>@%2BF`(#!(`*V8"4HIX`&`@($I2BA`0 M2(!(P'(*+P`@!$ZZ"VPD']2`*`*8O````#`0$DB`2,!![(#!"#```@@`9LY* MA6<&(`1$@&`"(`1,WP0P3EU.=6%P0^R"_D7L@OZUR68.,CP`)&L(=``BPE') M__PI3X,4+'@`!"E.@QA(YX"`""X`!`$I9Q!+^@`(3J[_XF`&0J?S7TYS0_H` M($ZN_F@I0(,<9@PN/``#@`=.KO^48`1.N@`:4$].=61O`/M2'H`+$ZZ"AQ03R!L@R`A0``,+RR#+"\L@S!.NO("4$]"ITZZ"#!8 M3R1?3EU.=2H`3E4``$CG##`D;0`0(&T`""`H`*SE@"@`($0@*``0Y8`F0!`3 M2(!(P-"M``Q4@"E`@S1"IR\L@S1.N@NF4$\I0(,X9@A,WPPP3EU.=1`32(!( MP"\`($M2B"\(+RR#.$ZZ`5I/[P`,2'H!4!`32(!(P-"L@S@O`$ZZ`8Y03R\M M``PO"B\L@SA.N@%:3^\`#$*L@S`F;(,X)$L0$TB`2,`J`+"\````(&<@NKP` M```)9QBZO`````QG$+J\````#6<(NKP````*9@12BV#,#!,`(&T``(P,$P`B M9C)2BR!+4HL0$$B`2,`J`&<@($I2BA"%NKP````B9A`,$P`B9@12BV`&0BK_ M_V`"8-)@1"!+4HL0$$B`2,`J`&@`F;(,X8!H@!>6` M(&R#+"&+"``O"TZZ`7!83U*`U\!2A;JL@S!MX"`%Y8`@;(,L0K`(`&``_HX@ M`$SO`P``!"`((B\`#&`"$-E7R?_\9P9206`"0AA1R?_\3G4P/'__8`0P+P`. M(&\`!$H89OQ32")O``A30!#95\C__&<"0A`@+P`$3G4@;P`$(`@B;P`($-EF M_$YU3E4``"\*)&T`"$H29R0@2E**$!!(@$C`+P!.N@#H6$^PO/____]F"'#_ M)%].74YU8-A(>``*3KH`S%A/8.Q.50``2.<.,"1M``A"ITAZ`(Y.N@H44$\I M0(-D9@A,WPQP3EU.=2!M``PB:``D+RD`!$ZZ"H183R@`9U)(>@!M($0O*``V M3KH*5E!/)D!*@&@`X3KH'(%!/)4``H"\$3KH*(EA/+RR#9$ZZ!U)83T*L@V1@@&EC M;VXN;&EB0!724Y$3U<`*@`@;P`$(`A*&&;\D<`@"%.`3G5.50``2&R! M6"\M``A.N@`(4$].74YU3E4``"\$*"T`""\M``PO!$ZZ`#103[B\````"F8F M(&T`#!`H``Q(@$C`"```!V<42'C__R\M``Q.N@#^4$\H'TY=3G5@^$Y5```O M"B1M``P@4K'J``1E&B`M``C`O````/\O`"\*3KH`T%!/)%].74YU(%)2DA`M M``L0@$B`2,#`O````/]@Y$Y5```O"D'L@4(D2"!*U?P````6+PAA$%A/0>R" M^K7(9>HD7TY=3G5.50``2.<(("1M``AX`"`*9@IP_TS?!!!.74YU2BH`#&=4 M""H``@`,9PQ(>/__+PIA5E!/*``0*@`-2(!(P"\`3KH%"%A/B(`(*@`!``QG M"B\J``A.N@(\6$\(*@`%``QG%"\J`!).N@+86$\O*@`23KH"(%A/0I)"J@`$ M0JH`"$(J``P@!&",3E7__DCG""`D;0`(0?K_0BE(@SP(*@`$``QG"G#_3-\$ M$$Y=3G4(*@`"``QG,B@2F*H`""\$+RH`"!`J``U(@$C`+P!.N@*63^\`#+"$ M9Q`(Z@`$``Q"DD*J``1P_V"^#*W_____``QF$`BJ``(`#$*20JH`!'``8*1* MJ@`(9@@O"DZZ`*183PQJ``$`$&8P&VT`#___2'@``4AM__\0*@`-2(!(P"\` M3KH",D_O``RPO`````%FF"`M``Q@`/]@)*H`"#`J`!!(P-"J``@E0``$".H` M`@`,(%)2DA`M``\0@$B`2,#`O````/]@`/\P3E4``"\*0>R!0B1(2BH`#&<8 MU?P````60>R"^K7(90AP`"1?3EU.=6#B0I)"J@`$0JH`""`*8.I.5?_\+PHD M;0`(2'@$`$ZZ`,)83RM`__QF\``$`$"`*T+P````.)4``""1?3EU.=35\ M!```$`CJ``$`#"5M__P`"!`J``U(@$C`+P!.N@#>6$]*@&<&`"H`@``,8,Q. M50``2.<`,"1L@PA@%"92("H`!%"`+P`O"DZZ!AA03R1+(`IFZ$*L@PA,WPP` M3EU.=4Y5```O"D'Z_\8I2(-`0J<@+0`(4(`O`$ZZ!:103R1`2H!F"'``)%]. M74YU)*R#""5M``@`!"E*@P@@"E"`8.9.50``+RT`"&&V6$].74YU3E4``$CG M`#"7RR1L@PA@#B!M``A1B+'*9Q(F2B12(`IF[G#_3-\,`$Y=3G4@"V<$)I)@ M!"E2@P@@*@`$4(`O`"\*3KH%;E!/<`!@V$Y5```O"G(&("T`"$ZZ`K0D0-7L M@R!*K0`(;1(P+(+Z2,`B+0`(LH!L!$J29A`I?`````*#1'#_)%].74YU<@8@ M+0`(3KH"?"!L@R`O,`@`3KH"UEA/2H!G!'`!8`)P`?E4``"\M``A.N@*2 M6$]*@&8.3KH"JBE`@T1P_TY=3G5P`Ϥ``$CG#"`H+0`(3KH`=G(&(`1. MN@(F)$#5[(,@2H1M#C`L@OI(P+B`;`1*DF82*7P````"@T1P_TS?!#!.74YU M,"H`!,!\``-F#"E\````!8-$@`>3KH!^B\`3KH! M_$_O``Q(>``!3KH`#%A/3EU.=5Y#"@!.50``2JR#/&<&(&R#/$Z0+RT`"$ZZ M``A83TY=3G5.5?_\+P0K;0`(__Q*K(,@9RQX`&`*+P1.N@#.6$]2A#`L@OI( MP+B`;>PP+(+ZP?P`!B\`+RR#($ZZ`ZA03TJL@T!G!B!L@T!.D$JL@VQG"B\L M@VQ.N@&F6$]*K(-H9PHO+(-H3KH!EEA/2JR#<&<*+RR#<$ZZ`8983RQX``0( M+@`$`2EG%"\-2_H`"DZN_^(J7V`&0J?S7TYS2JR#*&8J2JR#.&/__ M3KH`T%A/*`"PO/____]F"G``3-\$$$Y=3G5(>0`!``%(>``B3KH!8%!/)$!* M@&8,+P1.N@&J6$]P`)6T`"``*%6T`#P`)%7P`!``(0BH`#A5$``]"ITZZ M`5183R5``!!*K0`(9PHO"DZZ`%I83V`*2&H`%$ZZ`8)83R`*8)).50``+PHD M;0`(2JH`"F<(+PI.N@&X6$\5?`#_``@E?/____\`%'``$"H`#R\`3KH!+EA/ M2'@`(B\*3KH!#E!/)%].74YU(F\`!"QL@QA.[OZ>("\`!"QL@QA.[OZV3E4` M`$AX`#`O+0`(3KH`&E!/3EU.=4Y5```O+0`(3KH`3%A/3EU.=4Y5```O"DJM M``AF"'``)%].74YU2'D``0`!+RT`#$ZZ`&!03R1`2H!F!'``8.`5?``%``@U M;0`.`!(E;0`(``X@"F#*3E4``"\*)&T`""`*9@8D7TY=3G45?`#_``@E?/__ M__\`%"5\_____P`8<``P*@`2+P`O"DZZ`$I03V#23OH``DSO``,`!"QL@QA. M[O\Z2.<#`")O``PL;(,83J[^.$S?`,!.=4[Z``(B;P`$+&R#&$[N_MI.^@`" M+&R#&$[N_WQ.^@`"(F\`!"`O``@L;(,83N[_+B`O``0L;(,83N[^L$[Z``(@ M;P`$+&R#&$[N_HP@;P`$((A8D$*H``0A2``(3G4@;P`$3.\"`0`((B\`$"QL M@QA.[OY$3OH``BQL@Q@B;P`$("\`"$[N_=@L;(,83N[_=DSO`P``!"QL@QA. M[OZ2(F\`!"QL@QA.[OZ8(F\`!"QL@QA.[OZ&3.\``P`$+&R#&$[N_LX@+P`$ M+&R#&$[N_L(@;P`$+&R#&$[N_H`@;P`$3.\`#P`(+&R##$[N_N!,[P,```0L M;(-D3N[_H"!O``0L;(-D3N[_IB!O``0L;(-D3N[_LB!O``0L;(,03N[^/B!O M``0L;(,03N[_OB!O``0L;(,03N[_.B!O``0L;(,03N[_"B!O``0L;(,03N[^ MSB!O``0L;(,03N[^R"!O``1,[P`#``@L;(-X3N[_?````^P````X```````` M`#````#(````[@```0P```$F```!3````6@```&$```!D````9P```&H```! MM````<````',```"-````E0```)F```">@```HH```*V```"Z````P8```,P M```#5@```W(```.0```$*```!&8```28```$I```!+(```30```$Y```!2(` M``4N```%.@``!4H```:D```'+@``!T8```=J```'@@``!Z````?6```']@`` M""X```AD```(;```"8X```FT```)_@``"K````N$```+E```"ZH```O6```` M2@````$```!.````6````&(```!L````@@```(P```"B````N````10```$@ M```!.````48```%B```"7````FX```)T```"D@```O````,2```#*@```VP` M``.D```#V```!"(```2L```$\@``!1P```;````&Q@``!M````;6```&W``` M!NX```<````'!@``!PX```L```' MP```!^````?L```(#```"#8```A0```(>@``"(````B&```(F```"*(```BN M```(R```"-````C<```(Y```"/````CV```)````"0X```D6```)(@``"2H` M``DV```)/```"48```FN```)R@``"I(```ML```,V@````````/R```#Z@`` M`+\``P```2P````%`$6`0$``````!`$!``````!`__\``?__```!#P`````` M``````````````````K0```#"@``"MD```,.```*XP```U8```KM```#6@`` M"O8```->```+`0```V(```L&```#9@``"PX```-J```+&````VX```LH```# M<@``"S@```-V```+/P```WH```M%```#?@``"TL```."```+40```X8```M5 M```#B@```````````"`@("`@("`@(#`P,#`P("`@("`@("`@("`@("`@("`@ MD$!`0$!`0$!`0$!`0$!`0`P,#`P,#`P,#`Q`0$!`0$!`"0D)"0D)`0$!`0$! M`0$!`0$!`0$!`0$!`0%`0$!`0$`*"@H*"@H"`@("`@("`@("`@("`@("`@(" M`D!`0$`@``````````````````$``````0`````````````````````!`0`` M``$``````````````````````0(````!```````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M`````````````````````````````````````````````````````````!0` M`````^P````0`````0```#H```!"````2@```%(```!:````8@```&H```!R M````>@```((```"*````D@```)H```"B````J@```+(````1`````````!`` M```V````/@```$8```!.````5@```%X```!F````;@```'8```!^````A@`` F`(X```"6````G@```*8```"N`````````_(```/K`````0```_)^ ` end !Funky!Stuff! fi # end of overwriting check echo shar: "extracting 'dmouse.c'" '(9888 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 * * 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 (NI) * -L0 Disable LeftMouseButton->WindowToFront (LMB+RMB->ToBack) * -Rqqqq Set qualifier + RMB for Window/ScreenToBack (default LMB) * -A0 Disable Auto-Activate window on mouse move * -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. * * TODO: mouse timeout * multiple screens * everything else */ #asm FAR DATA FAR CODE #endasm #include #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 void (*FPTR)(); extern IOR *CreateStdIO(); extern SCR *OpenScreen(); extern void *AllocMem(); extern void *malloc(); extern void *GetMsg(); extern PORT *CreatePort(); extern TASK *FindTask(); extern LAYER *WhichMouseLayer(); extern LAYER *WhichLayer(); extern struct IntuitionBase *IntuitionBase; extern struct GfxBase *GfxBase; #define IBASE IntuitionBase int Enable_Abort; /* CLI break enable */ short Acc = 3; /* Accelleration */ long STo = 5*60; /* screen timeout */ long MTo = 5; /* pointer timeout */ uword Code = 0x45; /* CLI command activation */ uword Qual = 0x8040; /* LAmiga-ESC */ uword RQual= 0x4000; /* LMB (with RMB) */ char *Cmd = "newcli"; char LMBEnable = 1; /* enable left mouse but. */ char AAEnable = 1; /* enable auto activate */ TASK *Task; WIN *LastWin; PORT *Port; NS Ns = { 0, 0, 64, -1, 1, -1, -1, 0, CUSTOMSCREEN|SCREENQUIET }; IE *handler(); main(ac, av) char *av[]; { IOR *ior; INT addhand; uword *NoSprData; { register short i, j, len; register long val; register char *ptr; for (i = 1; i < ac; ++i) { ptr = av[i]; val = atoi(ptr+2); if (*ptr == '-') { switch(ptr[1]) { case 'a': Acc = val; break; case 's': STo = val; break; case 'm': MTo = val; break; case 'L': LMBEnable = val; break; case 'R': RQual = ahtoi(ptr+2); break; case 'A': AAEnable = val; break; case 'K': Code = ahtoi(ptr+2); break; case 'Q': Qual = ahtoi(ptr+2); break; case 'C': for (len = strlen(ptr+2) + 2, j = i + 1; j < ac; ++j) len += strlen(av[j]) + 1; Cmd = malloc(len); strcpy(Cmd, ptr + 2); for (j = i + 1; j < ac; ++j) { if (Cmd[0]) strcat(Cmd, " "); strcat(Cmd, av[j]); } break; default: puts("DMOUSE -a# -s# -m# -L0 -Rqqqq -A0 -Kcccc -Qqqqq -C cmd"); puts("V1.00 PUBLIC DOMAIN, Matthew Dillon, 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"); exit(1); } } } } NoSprData = AllocMem(8, MEMF_PUBLIC|MEMF_CHIP|MEMF_CLEAR); NoSprData[0] = 0xFE00; NoSprData[1] = 0xFF00; Task = FindTask(NULL); Port = CreatePort(NULL, 0); ior = CreateStdIO(Port); openlibs(INTUITION_LIB|GRAPHICS_LIB|LAYERS_LIB); Enable_Abort = 0; addhand.is_Node.ln_Pri = 51; addhand.is_Code = (FPTR)handler; addhand.is_Data = NULL; if (!OpenDevice("input.device", 0, ior, 0)) { SCR *scr = NULL; uword *SprSavePtr = NULL; ior->io_Command = IND_ADDHANDLER; ior->io_Data = (APTR)&addhand; DoIO(ior); for (;;) { register long sigs = Wait(SBF_C|(1<mp_SigBit)); if (sigs & (1 << Port->mp_SigBit)) { MSG *msg; while (msg = GetMsg(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; /* printf("mon %08lx %08lx\n", GfxBase, ci); */ 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; /* printf("moff %08lx %08lx\n", GfxBase, ci); printf("cl: %04lx %04lx %04lx %04lx %04lx %04lx %04lx %04lx %04lx\n", ci->sprstrtup[0], ci->sprstrtup[1], ci->sprstrtup[2], ci->sprstrtup[3], ci->sprstrtup[4], ci->sprstrtup[5], ci->sprstrtup[6], ci->sprstrtup[7] ); */ SprSavePtr = (uword *)((ci->sprstrtup[1] << 16) | ci->sprstrtup[3]); ci->sprstrtup[1] = (ulong)NoSprData >> 16; ci->sprstrtup[3] = (uword)(long)NoSprData; } break; case REQ_DOCMD: Execute(Cmd, NULL, NULL); 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); { MSG *msg; while (msg = GetMsg(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; } } DeletePort(Port); DeleteStdIO(ior); closelibs(-1); FreeMem(NoSprData, 8); } #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; static char STimedout; static char MTimedout; static long STime, MTime; geta4(); for (ev = Ev; ev; ev = Ev->ie_NextEvent) { switch(ev->ie_Class) { case IECLASS_RAWMOUSE: STime = ev->ie_TimeStamp.tv_secs + STo; MTime = ev->ie_TimeStamp.tv_secs + MTo; if (STimedout) sendrequest(REQ_SCREENON); if (MTimedout) sendrequest(REQ_MOUSEON); STimedout = MTimedout = 0; { register short n; if (Acc != 1) { if (n = ev->ie_X) ev->ie_X = (n>0)? (n-1)*Acc+1 : (n+1)*Acc-1; if (n = ev->ie_Y) ev->ie_Y = (n>0)? (n-1)*Acc+1 : (n+1)*Acc-1; } } if (AAEnable || LMBEnable) { register LAYER *layer; Forbid(); layer = WhichMouseLayer(); if (LMBEnable && ev->ie_Code == IECODE_RBUTTON && (ev->ie_Qualifier & RQual)) { if (layer && layer->Window) WindowToBack(layer->Window); else if (IBASE->FirstScreen) ScreenToBack(IBASE->FirstScreen); ev->ie_Class = IECLASS_NULL; /* remove event */ } if (layer && layer->Window) { if (LMBEnable && ev->ie_Code == IECODE_LBUTTON && layer->ClipRect && layer->ClipRect->Next) WindowToFront(layer->Window); if (AAEnable && ev->ie_Code == IECODE_NOBUTTON && !(ev->ie_Qualifier & 0x7000) && layer->Window != IBASE->ActiveWindow) ActivateWindow(layer->Window); } Permit(); } break; case IECLASS_RAWKEY: STime = ev->ie_TimeStamp.tv_secs + STo; if (STimedout) sendrequest(REQ_SCREENON); STimedout = 0; if (ev->ie_Code == Code && ev->ie_Qualifier == Qual) { sendrequest(REQ_DOCMD); ev->ie_Class = IECLASS_NULL; /* remove event */ } break; case IECLASS_TIMER: if (STo && !STimedout && (long)ev->ie_TimeStamp.tv_secs > STime) { if (STime == 0) { STime = ev->ie_TimeStamp.tv_secs + STo; break; } STimedout = 1; sendrequest(REQ_SCREENOFF); } if (MTo && !MTimedout && (long)ev->ie_TimeStamp.tv_secs > MTime) { if (MTime == 0) { MTime = ev->ie_TimeStamp.tv_secs + 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(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) { if (layer = WhichLayer(&scr->LayerInfo, ib->MouseX, (ib->MouseY>>1)-scr->ViewPort.DyOffset)) break; if (ib->MouseY>>1 >= scr->ViewPort.DyOffset) break; } return(layer); } 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 exit 0 # End of shell archive