nacer@mist.cs.orst.edu (Abdenacer Moussaoui C.) (01/18/89)
I would like someone out there to send me a simple TSR program in Turbo Pascal that would insert a string into the keyboard buffer. In doing so I would you to point out briefly. - how your program works - what are things to watch for when using a TSR - how can I insure that the current application gets the appropriate keys that the TSR just inserted in the keyboard. - you may want to include also how you would trap keys from within your TSR program. - How to go about deciding and restricting to a minimum the size of your TSR (stack, DS, heap, etc...) For simplicity assume your sample is to insert the word 'HELLO' when the CTRL-P key is pressed for example. I am planning to write my own keyboard macro and this part will help me achieve that. The minimum inlines and more use of TP4 features the better. Thank you. --nacer nacer@mist.cs.orst.edu
pilgrimk@lafcol.UUCP (Guru Jee) (01/24/89)
# I would like someone out there to send me a simple TSR program in # TP40 that would insert a string into the keyboard buffer. In # doing so I would you to point out briefly. # # - how your program works # - what are things to watch for when using a TSR # - how can I insure that the current application gets the appropriate # keys that the TSR just inserted in the keyboard. # - you may want to include also how you would trap keys from within # your TSR program. # - How to go about deciding and restricting to a minimum the size # of your TSR (stack, DS, heap, etc...) I think many others would be interseted in this topic so those of you who know, please contribute your ideas to the net and not to individuals. Thanks!
jmbj@whuts.ATT.COM (BITTMAN) (01/25/89)
> # I would like someone out there to send me a simple TSR program in > # TP40 that would insert a string into the keyboard buffer. In > # doing so I would you to point out briefly. > > I think many others would be interseted in this topic so those of > you who know, please contribute your ideas to the net and not to > individuals. > This program responds to mouse movement and button presses and "stuffs" the appropriate keys into the keyboard buffer. The code is ram-resident, and very simple, it doesn't know if it's already there, and it doesn't restore the old int 33h. It DOES demonstrate how to use the mouse and how to insert keys into the keyboard buffer. begin 644 menumouse.arc M&@A-14Y534]54RY!4TT`!08``&81`WT@UJL/```,("`EH)*$"I,B(!(FE!*F9 M30LI9>:D(5/T03=*,D?-FSALS%YN\J3.G#`@B<M+8*2.G@0*7.T22-"ER? M99N*%]/,`=$F#!PX9<B`H/,&1!TX+,B\N>.&!9LR(%FD/(/F8A@Y'.^`6%,FZ MSQR83*!>%%*'#E$W"7OT\`&"1Y$Y8WS`E)*&ZMBR9T&H9>O6(DNY+Q4,>4($. MH4(04XH<:5+$"167`1,\D7(DX($8,&`@@2PPR)0I51@?'C)%Q^#"+(B4/EV$^ M19'5A(NX%*(XB1,="I4T@6)Y"I4@4AX'-N/F"YHW-P,B*!.G3D(:-S*C<4G\, M2T6A`ID[!T'#C'27;.A\N2HGLO;G8KXKD".>O/GFS\FH/SH>Z_OM-'"H)U/<- M?7;X(-20&0S3*3`&>5^PAQ8D!YP'0@QCP$!&@1&-\057>2CG(`PQQ"!&@2ZU8 M,5))7Z1A44`&.%A##"Z=489X8N#U!1QR1+23BB[5&`897X@X4X]O7.1@ARZ5* M)-X<=8@A1X]AS+%&0D/*4.2+7Y3DQDX,#EF#2^#!B-<;"Z8((`PY>FD6F"@.H MZ=)Q*>E1944['38DF0JLQ-Z;5Z8)(`U<*L!F&F["T1&*9&B5$)UVBB<HE@<4/ MJA"=+E61F!1?V`9%%51\T81G2QP&A11/#'$8"$8`%QEG"?B6!*J73H$$BD%@[ MP:JDKT)B@!"R*A!9J[4:,$2NN]**(A'`"L3KL*OJ*A`<)*%A&1E?!189LW,X. MR^`8T4[[!AS*08OJ$$P0T6=`"HAHAV5AX,&"BV8J6N,<V4)2[AOG,BB&NN%]R M$>.9;G"F@(D7,>@CB0#[.T8;W-JK+IWDJF$2)`B,@<8:";8+IK_FHJMNA1=V& M97`8;+"1IE\M*:N`&@A;5B,==<C1;V`24WSGOF?I@#&]&J]+)<TSOAOOO/4>F M<*]4%K],+L"6#5Q&B189G++"+#`LK\/*Q0PD'6E<;'+&#*;+PH%856RTO`>&= M/#(=+/F+<L('K-SRRRY9+2+68-JL;`)-/&&%9;%*5<:.0/XX-ZJV49'TB$L79 M?#?7"'C]9Z`=H;HC=HVK.P8>J#+^^(P=L9`NJ@<G7'G4J*KAAL@0@ZPC&7EP7 M'F\";@2IW.=WFSC&[)@'IOK?K+MN=V1#[(8N%BQL;N7K2J".@!5%!`?ZTP=LG MOBCI=ROAQ!2629'$$4@(Y])!1E"!FT)Y[\U@W_F2ESG.#$K?N=0)<'U`HJY33 M#WP03#"!8F-4-(^J;KQAD*LF8SCF.2\PVN.>^,BG-[X1[T[J6QS[YL<21;UO' M?4%SWQSL)Y`AX$]_MN*?_P)CP`4J!(.X8P']%B4Y,E#.:V3(7608M\+.T2XR= MH4LA_$RGO-WMJ'6+8M'=8A>PRJ'*=KASB0][%\3?=5!X72,>_8[W/^6YS67?/ M@B(%[S0]^%D/>PPBPA.NX(0^50$*N+%5^1S(`OI$<(83K.$&X2<_#7(P`1[,( MW_X<,\+(`#![1:!"%:10QL"(D8SC2\@:ST<\_M2G9'`,FASO6,<WM*E^\,LCR M"`T@0BGT20J!'.1M4"4HMGGK;E!X0@`/0(1D[4J5EB$6JV#)H%_-<I6XNJ4#6 M405*X4BJ>95RPJ4RM:DI=$HAC2$"%/K424^!2E2V<D(1@#,K5^UO"M7LU11<X M:2QAV:J5J%HD*Y/``AIH)IP-9-!K4L--O*7S`+AR36FV$(,A(*$+Z#3?`;;)5 M@ES>+0A$(()EXBFENP4/E\2;01$V4SUI6@8)57#"$K+P!3%*(0OY'"CQ8K!0. MET!4HA2U:!:<B$<MQO,U.J!G$.[Y/X1`+)D95><\M]D%%L0JI@=`*3WM65-_5 M)C.1"4GE*L&)2EKNLYU"M<QK>!E(ES03F4Y09I\*8X4D#*$(%=6>`;^0S(0PP M(0BTT9]"A)"%_O7)-\`1'TZ)Q8(G&,$(B3'<+REE*4QIBE,X[9N1JI2D)?7$H M23C]5=0@P0#,=$@(A'/,X7ZDN,B(4Z]4HN+=Q"G8&:PUH8DUG,`0QS0ZH.H@O M08@E\:AJ5:P20:O`A.G="F<9&=R`H:P953*Q>;>N,H@V1["-2S3@$AH(345.L M54U/55,N0T]-`/````!F$2%]DG\7`0``#.GP`1@X<!^4*5&D7/'@X`,_7`4`? M[!K8;,:@?0#H),"U(0`Z50#2@0(`46(``!4O9MS8@`,Z2B$5D5R`<D:H`0$&+ M!!N%L\?`/@/N00/20P$`/BT&^<`)(`\%7`"6'#/`%,#4`B<!H/,"8)T$J$VNC M9IU:%9T2`*&P#A`V"JM/`$"%$B5PU(52K$TK0$4B=B#9K.@X=)T`B20`*'VMG M4@5\`,"'+UJR;,&RS("5*[^``'!TS,0B#X(7S1LT3,!%'W4&[/(`P,0.#QHR, M(C"1B`!MT`"^>#DP3->!`+@8`,A%LR*N!\,'`-"EO&(C"_L"-#L!&@A-14Y58 M34]54RY$3T,`?@(``#D22SH\N9`#```,#11009)D"@@H4IX<D1*D"8B"()P\R MH0+"2!`G0[*X``&""IHR(.#(>7-&3I@V(,B\*3,'A)LW=$"L>7D'1!HS-F.B" M"=,R8!@V<LJ$(9,'A)@R9=R`8/-F:!DR+$"$<4,F9\J5+5_&##J'SIN@(.A\I M!/&&3=4T;NB4D2.G#IR8`>V4&>-53E0Q=6*FB:F2)8@Y:-[4#%S3J\VT:\V$0 M&0/2L%B03=*,&3GGC9F8;=[4F5-F8T`424"HV1P33EZK:$&T*1HF[TH\<Z-.2 MK?I8:>@Q4T%L;CPV\VZI+1\''%-'3F4Y(,:\23N2C8L4`0-Z7`LR#-@9(,RD4 M8>,WM=@T+:V/09-&KHZ`("`A:)*T3A/-<URH',.1HPZ/X+-O+X->/7LW[L'GO M@G(HU:=#&;`11T<88G`'`@HFM=$"5VF0D10=T"F0WGKMO;>9"SP5:!]/G+716 M8%%L3'5&'6&<`5)EQ3$6G4#DM:2<A3:U9%J#DEW51AAH;?00"$$Q5MY388TE$ M!D]EL(%6=6)H%I,,(.0AE'%2G?%&=B.UX1.7:215U1V!@:"E7C&9T:541M7!A M!G=TI!:E=62X8"='0;B1QQUAY!%5:)F1<5.8M'TTW!LX&C9''7NI5I1I<L#QB M!F=SR$85"!^!U2AX+LQXQ4YH7L72>1K6!T(,*7#T(QPM><@9"._)U<:%86WI> M%@LJW>$&"]Q=QH(<:9R!1DS6C533&F7D,4=_":#P&%C6@42E<FYT-14=+9$I6 M&1I_E1$39]7N5=Y>>62(GJDRI#KD3G*Q*4,+>-'AE5*^<=8?!$R4<1D(0N0UV A+T<M@,`#2V/X<*\4P0[+K[_+@1`P#T4@)H?!"LP8$!H`R `` end size 2508
nacer@mist.cs.orst.edu (Abdenacer Moussaoui C.) (01/30/89)
So far I have received nothing if I do I will post what I get to the net. The stuffing-mouse was not much help to me as I try to avoid assembly as much as I can. Let's be patient I am sure something will come along... -- nacer@mist.cs.orst.edu
wsinpp@eutrc3.UUCP (Peter Peters) (02/02/89)
How about the same program in Turbo Pascal, would that be better ?? Comments are left out (mainly) because it's all the same as the assembly "menumouse" you received. Code follows behind the dotted line. ----------------------------------------------------- Program MenuMouse; { A-,B-,D-,E-,F-,I-,L-,N-,O-,R-,S-,V-} (* speed up things *) {$M 1024,0,0} (* minimum of space *) { Mouse Movement is mapped to up,down,left,right arrow keys Left Button ==> <Esc> Right Button ==> <Enter> } Uses Dos; Const fn_home = $4700; fn_end = $4f00; lt_arr = $4b00; rt_arr = $4d00; up_arr = $4800; dn_arr = $5000; carr_rtn = $1c0d; esc_key = $011b; mouse_int = $33; get_butt_press = 5; read_mouse_mot = 11; set_subr_mask = 12; set_sens = 15; lt_button = 0; rt_button = 1; vert_sens = 4; horiz_sens = 10; buffer_segm = $40; buffer_length = $20; buffer_rd_ptr = $1a; buffer_wrt_ptr = buffer_rd_ptr+2; buffer_start = buffer_wrt_ptr+2; buffer_end = buffer_start+buffer_length; horiz_pos : Integer = 0; vert_pos : Integer = 0; Var Regs : Registers; Procedure Sti; {Enable interrupts } Inline ($fb); Procedure Retf_from_interrupt; {Exit for the mousedriver call needed while the interrupt procedure ends with RETI and the driver expects RET FAR mov sp,bp; pop es; pop ds; pop di; pop si; pop dx; pop cx; pop bx; pop ax; ret far } Inline ($89/$ec/$5d/$07/$1f/$5f/$5e/$5a/$59/$5b/$58/$cb); Procedure Enter (keystroke : word); {Fake key entry in keyboard type ahead buffer } Var next,curr : Word; Begin curr := Memw[buffer_segm:buffer_wrt_ptr]; next := curr+2; If next = buffer_end Then next := buffer_start; If next <> Memw[buffer_segm:buffer_rd_ptr] Then Begin Memw[buffer_segm:buffer_wrt_ptr] := next; Memw[buffer_segm:curr] := keystroke; End; End; {$F+} Procedure UserInputMask; Interrupt; {Routine called every time a mouse movement or button is detected. The Interrupt directive is misused here to generate the required pushes to save all registers. To take care of a correct return to the caller, the procedure Retf_from_interrupt is used which pops the pushed registers and performs a retf instead of a reti. } Begin Sti; Regs.AX := get_butt_press; Regs.BX := lt_button; Intr (mouse_int,Regs); If Regs.BX <> 0 Then Enter (esc_key) Else Begin Regs.AX := get_butt_press; Regs.BX := rt_button; Intr (mouse_int,Regs); If Regs.BX <> 0 Then Enter (carr_rtn) Else Begin Regs.AX := read_mouse_mot; Intr (mouse_int,Regs); horiz_pos := horiz_pos + Integer(Regs.CX); If Abs(horiz_pos) >= horiz_sens Then Begin If horiz_pos < 0 Then Enter (lt_arr) Else Enter (rt_arr); horiz_pos := 0; End; vert_pos := vert_pos + Integer(Regs.DX); If Abs(vert_pos) >= vert_sens Then Begin If vert_pos < 0 Then Enter (up_arr) Else Enter (dn_arr); vert_pos := 0; End; End; End; Retf_from_interrupt; End; {$F-} Begin {Main} Regs.DX := Ofs(UserInputMask); Regs.ES := Seg(UserInputMask); Regs.AX := set_subr_mask; Regs.CX := $0b; Intr (mouse_int,Regs); Regs.AX := set_sens; Regs.CX := horiz_sens; Regs.DX := vert_sens; Intr (mouse_int,Regs); (* restore the interrupt vectors to their state they were in before TP changed them, don't know if it's really necessary. *) Swapvectors; (* Terminate and stay resident *) Keep (0); End. -------------------------------------------------------- Hope it's of any use :-) Peter Peters. Eindhoven University of Technology Standard disclaimer blah blah....