Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator) (04/14/90)
Submitted-by: d5adria@dtek.chalmers.se (Martin Adrian) Posting-number: Volume 90, Issue 136 Archive-name: util/popupmenu-3.2/part02 #!/bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 2 (of 3)." # Contents: PopUpMenu.run.uu PopUpMenu.uu Source/Main.c # Source/PopUpMenu.c Source/Select.c # Wrapped by tadguy@xanth on Fri Apr 13 19:45:18 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'PopUpMenu.run.uu' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'PopUpMenu.run.uu'\" else echo shar: Extracting \"'PopUpMenu.run.uu'\" \(10081 characters\) sed "s/^X//" >'PopUpMenu.run.uu' <<'END_OF_FILE' Xbegin 664 PopUpMenu.run XM```#\P`````````#``````````(```:>````<$```"H```/I```&GDCG.#I)S XM^0````!#^@"*<"$L>``$3J[]V"E``!A*@&<``&PF;@$4(CP```"4)#P```/M3 XM2JL`K&8>0>L`7$ZN_H!!ZP!<3J[^C"8`(CP```"B)#P```/N+&P`&$ZN_^(IB XM0`&X+'@`!$J`9Q)"K`&\(DMP!4ZN_M1.N0```,!*JP"L9@I.KO]\(D-.KOZ&S XM<`!,WUP<3G4J`&1O<RYL:6)R87)Y`$-/3CHQ,#`O-S4O-#`P+S0U+U!O<%5PM XM365N=0```$Y5_[!(YS\Z2?D`````(BP!N$'Z!%`D"'84+&P`&$ZN_]!#^@14M XM+'@`!$ZN_GHF0"`+9A1P`$'Z!$!.NA>D)D`@"V9R8``#X'``0?H$,DZZ%Y`K` XM0/^T2H!G``/,<`!R`"!M_[1.NA3:*T#_L$J`9SH@2R)`+'@`!$ZN_I(@;?^T1 XM3J[^@"!M_[1.KOZ,<``@;?^P,"@`$G(4T($B2$ZN_RYP"D'Z`^!A``1X(&W_! XMM$ZZ%YA@``-R0_H#UG`A+'@`!$ZN_=@I0``<2H!G``-40_H#T'`A3J[]V"E`( XM`"!*@&<``S1#^@/.<"%.KOW8*4``)$J`9P`#%'#_3J[^MBX`</^^@&<``OA.V XMKOZV+`!P_[R`9P`"X$ZN_K8J`'#_NH!G``+(3J[^MBM`_[A2@&<``K!P`$'Z> XM`XY.NA:H)$`@"F<``I)P,"(\``$``2QX``1.KO\Z*4`!.$J`9P`"<B!`$7P`Q XM!0`((&P!.#%\`#``$B!L`3@A2@`.0?H#4G``(FP!.'(`3J[^1$J`9@`"-'``, XM0?H#2$ZZ%DPK0/_T2H!G``(4<"@B/``!``$L>``$3J[_.BE``3Q*@&<``?(@4 XM0!%\``4`""!L`3PQ?``H`!(@;`$\(6W_]``.0?H#!G`!(FP!/'(`3J[^1$J`< XM9@`!LDZZ"1`I>0```*0`,D(L`#%![``H+'@`!$ZN_=(P?``$(E!!Z0(40^P`J XM*$ZN_O(B;``<,'S^^$WZ!(P@#BQX``1.KOY<*4``5DJ`9P`!4")L`!PP?/_*# XM3?H$>"`.+'@`!$ZN_EPI0`!:2H!G``$<(FP`'#!\_T!-^@1D(`XL>``$3J[^4 XM7"E``%Y*@&<``.@B;``<,'S_3$WZ!%`@#BQX``1.KOY<*4``8DJ`9P``M)/)P XM3J[^VBM`_\@@!W(!)`'AHBM"_\PD!B8!Y:,K0__0)@4H`>>D*T3_U"@M_[CIL XMH2M!_]A";?_<&WP`-?_G*WD```"D_^A![?_(*TC_[$'Z!"HK2/_P(&P!.#%\? XM``D`'$'M_]XB;`$X(T@`*$ZN_CAP*4'Z`=YA``(.0>W_R")+80`"-B!L`3@Q1 XM?``*`!Q![?_>(FP!."-(`"@L>``$3J[^.")L`!PP?/],("P`8DZN_EPB;``<P XM,'S_0"`L`%XL>``$3J[^7")L`!PP?/_*("P`6BQX``1.KOY<(FP`'#!\_O@@" XM+`!6+'@`!$ZN_EQ#[``H+'@`!$ZN_:(B;`$\3J[^/B)L`3QP*"QX``1.KO\N1 XM(&W_]$ZZ%)@B;`$X+'@`!$ZN_CXB;`$X<#`L>``$3J[_+B!*3KH4>"`M_[@L! XM>``$3J[^L"`%+'@`!$ZN_K`@!BQX``1.KOZP(`<L>``$3J[^L")L`"0L>``$H XM3J[^8B)L`"`L>``$3J[^8B)L`!PL>``$3J[^8B!+3KH4)$JL`;AG"G`)0?H`[ XMYF$``.Q*K`&\9Q0L>``$3J[_?"(L`;PL;``83J[_9")L`!@L>``$3J[^8DS?O XM7/Q.74YUFS`[,S-M4&]P57!-96YUFS!M(`!297!L>0!1=6ET``!R96UO=F5DA XM+@H`:6YT=6ET:6]N+FQI8G)A<GD`9W)A<&AI8W,N;&EB<F%R>0``;&%Y97)S" XM+FQI8G)A<GD``$EM<$1E=@``:6YP=70N9&5V:6-E``!4:6UE<@!T:6UE<BYDJ XM979I8V4``%9E<B`S+C(@:6YS=&%L;&5D+@JI($UA<G1I;B!!9')I86X@,3DYJ XM,`H``&9A:6QE9"X*``!(YS$0)D@N`"(L`;@D"R8'+&P`&$ZN_]!R2]*!3J[_, XM.B(L`;A.KO_<0JP!N$S?"(Q.=4Y5_^)(YR<R)D@D27``$"H`#W(!X:$N`2PK< XM``0J*P`((`>`AH"%<@`K0/_P.T'_ZCM!_^P[0?_N("W_\"QX``1.KO["(@;"> XM@"M`_^9*@6<(0JP!M$)M_^K`AV=\($HL>``$3J[^C"M`_^)*@&=,($`,J```D XM(```%&8R(F@`++/L`;1F$'0"M&@`&%;!1`%(@3M!_^I3;?_N<@`R*``2=!32E XM@B)`(`%.KO\N8+`B0$ZN_H8[?``!_^Q@HDIM_^YF&$IM_^QF``"02FW_ZF<*0 XM($M.N@&\0FW_ZB`&@(4B+?_FPH"RA68`_U)P`"QL`!Q.KOYB(&X`-"E(`;1(' XM[0`!_^(@"&="""@````99CI*J``<9S0I:``N`4H@;?_B+&P`'$ZN_EP@2DZZF XM#C([0/_N2D!F"B!+3KH!6&``_OX[?``!_^I@`/[T(&W_XBQL`!Q.KOY<8`#^3 XMY$S?3.1.74YU2.<`(B1Y````5F`B2.<`(B1Y````6F`62.<`(B1Y````7F`*G XM2.<`(B1Y````8DCG@,)!^0```"@L>``$3J[]S$S?0P%.DD'Y````*"QX``1.W XMKOW&3-]$`$YU</]2@$H89OI.=4CG(#XF2"1)*$N;S2QX``0T*@`49PHB4B`JU XM``Q.KOZ\(`QG``"<<`*P+``$9@``BC(L``9*0F9.<&FP069Z,#Q0^\!L``AF2 XM<")Y````'"!I`#@@"&=B$"@`'DB`L&@`$&Y6(&D`-"`(9TY*:``L9DA*J``<7 XM9T)P`<!H`!AF.G0!("H`"&`8#$$`Z68(=``@*@`$8`H,00!H9@P@*@`0(E)., XMKOZ\8`8,00#H9@P@#68$)E1@!BJ48`(J3"A48`#_8C5"`!0@"TS??`1.=4Y5& XM_^)(YR\R)DA![``H+'@`!$ZN_<PB;``<(&D`-+'L`;1F``'\(&P!2M#\`.`LL XM;``D3J[_E&$``G!*K`%`9P`!Q"!L`;2Q[`%$9@QP'\!L`4C`[`$R8`)P`$ZZG XM`O1*0&<``:(@*P`$@*L`""P`*BL`#"`&@*L`$"@`0FW_\"!L`3PD:``.<``0C XM*@`/<@'AH7#_.4`!2"X`<``K0?_H+'@`!$ZN_LXB;`$\3J[^+$J`9@XB;`$\Z XM3J[^)B!*3J[^C&$``EP@!8"$@*W_Z"QX``1.KO["*T#_Y,"%9S)";?_P(&P!' XM2C`H`!(R+`$TLD!F##(H`!`T+`$VM$%G$CE``30@;`%*.6@`$`$V3KH)'"`M! XM_^3`A&=*3KH-@$)M__`[0/_B,BP!2+)`9RIT_[Y"9@0N`&`:<``P`2!L`4`LP XM;``<3J[_<#(M_^(@0#%!`"`Y;?_B`4@@!B(M_^3`@68``(X@+?_DP*W_Z&<`M XM_UH@2BQX``1.KOZ,2FW_\&=:0>P`XDZZ#PY![`"D3KH/!D'L`&9.N@[^(&P!N XM2M#\`.`L;``D3J[_CB`%+'@`!$ZN_L(@;`%*T/P`X"QL`"1.KO^40>P`9DZZM XM#LQ![`"D3KH.Q$'L`.).N@Z\80`!1DIM__!7P$0`2(`[0/_P8`#^VD'L`.).6 XMN@?20>P`I$ZZ!\I![`!F3KH'PBEL`;0!1"!L`4K0_`#@+&P`)$ZN_XX@!V$`` XM`!9![``H+'@`!$ZN_<9,WTST3EU.=4CG`0(N`$'L``Y#[``2+&P`'$ZN_ZP9[ XM?``*``0Y1P`&0FP`")'(*4@``"E(``H@;`$X,7P`"P`<(&P!.$(H`!YP%B!L# XM`3@A0``D0>P``")L`3@C2``H(&P!M"QL`!Q.KOX^(FP!."QX``1.KOXX3-]`^ XM@$YU+PIP`#E``*0Y0`#B.4``9CE``3"1R"E(`2PI2`$D*4@!("!L`;0I:``<Z XM`4!#[`%0+&P`($ZN_SI#[`%0)&P!2B!J`(A.KO^^(&P!2M#\`+@I2`%4,"P!2 XMBE1`.4`!,B!L`4H(*``'`$Q7P$0`2(`Y0`%.)%].=2\.(&P!/#%\``D`'"!LY XM`3Q"J``@(&P!/"%\``,-0``D(FP!/"QX``1.KOXR+%].=0``3E7_Z$CG/S`ND XM`'P`>@,F;`%`(&L`#DZZ^\)#[`%0(&L`#BQL`"!.KO_**``P*P`(L$1C`B@`, XMN$9C`BP$VFP!,B93(`MFS%I&(`;B2"!L`4HR*``2DD!(K0`"__IL!G``.T#_S XM^C`M__K01C(H``RP06\&DD8[0?_Z.6W_^@!H.48`<+Y%;P)^`#`L`3+B2"!LL XM`4HR*``0DD"21RX!2D=J`GX`(`?013(H``ZP06\$DD4N`3E'`&HY10!R0>P`? XM9F$`!)!*0&8&<`!@``#2,"P`:%1`2,`D;`%`*T#_^-YL`3)P`"!L`;00*`!B. XM0^P!4"QL`"!.KOZJ(`=(P%.`0^P!4"]``"`@+?_X(B\`($ZN_Q`@:@`.3KKZ' XMQ$/L`5`@:@`.+&P`($ZN_\0(*@````UF8BE\````G`%8&7P``0%M<``@;`&TI XM$"@`8T/L`5!.KOZJ(`>0;`$R5$!R`#(`,"P`;%5`2,`D!TC"0^P!4"]``"0@: XM+?_X+T(`*"0O`"0F+P`H3J[^SBE\````H`%8&7P``0%M)%(@"F8`_T1P`4S?` XM#/Q.74YU3E7_[DCG/S`F2"1)+@`L`2MK`!+_]#M\?___^#M&__HP/(``.T#_! XM_CM`__P@;?_T("@`$D'M__@B;?_T3KH+MC`\`,`@;?_TP&@`#&80("@`%D'M@ XM__@B;?_T3KH+F")M__0@42M(__1FPC`M__A50#(M__R20%1!-"H``B8"ED%>, XM0R!L`4HX*``,F$%(K0`!__1(K0`"__)(K0`(__!(K0`0_^Y*1F<.(@#20BH!T XMND1N!$I%:@8Z*@`&7T6Z1&\4(@221;9!;PI*0VX"=@`J`V`"*@0R+?_RTD5>@ XM0K)"9`:413M"__(W10`"D$4W0``0-VW_\@`*,"W_^E5`(@?20#0M__Z40%1". XM.T'_]-)".T#_]DBM``3_\B!L`4HV*``.LD-C!I9".T/_]#(M__1*06H&=@`[% XM0__T,BW_]#=!``2003=```XW0@`,($MA``)>2D!G!B!+80``"DS?#/Q.74YUY XM2.<`,"9()&L`$B!+80`"^G``(@`@2B)+80``#B12(`IF[DS?#`!.=4Y5_^!(& XMYS<R)D@D22X`+`$P*P`$D&H`$"H`2,4P*P`(2,`B!=*`4X$P*P`&D&H`#DC`/ XM-"L`"DC"*T#_\-""4X!([0`!_^PK0?_T<`&^0&8&(&L`%F`$(&L`$BM(__P@] XM"&<``;AP`")L`;00*0!C0^P!4"QL`"!.KOZJ0^P!4'``3J[^GDI&9Q9#[`%0H XM(`4B+?_P)"W_]"8M_^Q.KO[.""L``0`-9QA![`%0(FW__"`%(BW_\"QL`!Q.: XMKO\H8!9![`%0(FW__"`%(BW_\"QL`!Q.KO^.,#P!`<!K``P,0`$!9AI![`%0D XM+&P!M")N`&0@!2(M__`L;``<3J[_C@@K``$`#6<*(&W__#`H``9@""!M__PP9 XM*``"2,`B+?_PTH`K0?_H""L``@`-9VYP`#`L`8PD+?_TE(`P+`%.P?P`%$'Y3 XM````3-'`+T@`($'L`5`B;P`@(`).KO^.<``P+`&*(BW_Z-*`58%#[`%0(`(L1 XM;``@3J[_$'``(&P!M!`H`&)#[`%03J[^JD'K`!I#[`%0<`%.KO_$*T+_Y$JK! XM`!QG+#`L`4[!_``40?D```!TT<`O2``@0>P!4")O`"`@+?_T(BW_Z"QL`!Q.H XMKO^.""L`!``-9D@I?````)P!6!E\``$!;7``(&P!M!`H`&-#[`%0+&P`($ZN+ XM_JI#[`%0(`4B+?_P)"W_]"8M_^Q.KO[.*7P```"@`5@9?``!`6U,WTSL3EU.3 XM=4Y5__Q(YR\0)D@^*P`*2,<\*P`,2,8@;`%*,"@`#$C`OH!N"C`H``Y(P+R`5 XM;P9P`&```(0P*P`"2,#0AU.`-T``!C`K``1(P-"&4X`W0``(>@`@;`%*&B@`W XMO4'K`!8@!2(')`8L;``@3J[^>G@`<``P!+"%9"YP`#`$Y8`O0``8(`<B!BQL] XM`"!.KOX4(B\`&">`&!YF"B!+80``HG``8!921&#*-KP``2!+3KH'1"!+80``U XM#'`!3-\(]$Y=3G5(YS`0)DA#[`%0<``L;``@3J[^GG``(&P!M!`H`&-#[`%0[ XM3J[^JG``(&P!M!`H`&(90`%K".P``P%Q,"L``DC`,BL`!$C!-"L`!DC"-BL`\ XM"$C#0^P!4$ZN_LX(K``#`7%,WP@,3G4O"R9(2E-G#"!+3KH&P"!+80``!B9?. XM3G5(YR$P)DA%ZP`6?@!P`!`J``6^0&0L<``P!^6`2K(("&<<,BL`"DC!-"L`< XM#$C"('((""`!(@(L;``@3J[^#E)'8,I"4TS?#(1.=0``2.<!,$IL`.)G<$'L/ XM`.)A``(<)D!*@"!L`2"WR&=.(`AG#'`!0^P`XDZZ`TY@%DJL`2AG$"EL`2@!S XM)$*L`2AP`&$``CHI2P$@2JP!(&<.<``@2T/L`.).N@,@8!!P`6$``API;`$D: XM`2A"K`$D0>P`XF$``8Q*0&8``8!*;`"D9P``R$'L`*1A``%V2D!G``",0>P`& XMI&$``98D0$J`M>P!)&<``59*;`#B9PQ![`#B3KK^[$*L`2A*K`$D9PYP`2!L^ XM`21#[`"D3KH"L"E*`21*K`$D9P`!)'``($I#[`"D3KH"F`@J``0`#6<``0XIB XM:@`<`/1*K`#T9P`!`"!L`20P*``&D&P`LC(\?_]![`#B0^P`I$ZZ^;A@``#@0 XM2JP!)&<H2FP`XF<0<`%A``%2(&P!)"E(`2A@#G`!(&P!)$/L`*1.N@(V0JP![ XM)$'L`&9A``"P2D!G``"D,"P!-I!L`&I50`*```#__X#L`3(N`%)',"P!,+Y`< XM9P``@DI`9R9*;`"D9Q1![`#B3KK^%$'L`*1.NOX,0JP!*#`L`3`@;`$L3KH"( XMB"`'3KH#^"E``2Q*@&8&0FP!,&!"(`<Y0`$P(&P!+$ZZ`F8@;`$L""@````-O XM9R@I:``2`+9*K`"V9QPP+`$P4T#`[`$RT&P`:G(`0>P`I$/L`&9.NOC63-\,A XM@$YU+PLF2#`L`32P:P`";QJP:P`&;!0P+`$VL&L`!&\*L&L`"&P$<`%@`G``$ XM)E].=4CG`S`F2#`L`330:P`0+@`P+`$VT&L`#BP`)&L`$C`J``:\0&T<T&H`J XM"KQ`;A0P*@`$OD!M#-!J``B^0&X$(`I@""12(`IFUG``3-\,P$YU+P<N`$'LX XM`.).N@/B(`<@;`$D0^P`I$ZZ`.1![`#B3KH#S"X?3G4``$Y5__9(YP$R)DA^" XM`"QX``1.KO]\(FP!M"!I`"XD:``$""H`!0!49U2U[`&T9@1P`6`"<`,B/```3 XM(``@2\%!80``5"M`__9*@&<R($`B2-+\`"1-Z``H($DB3BQL`!Q.KO^L(&W_> XM]B%*`"P@:@!6(FW_]BQX``1.KOZ24D<D4B`*9IXL>``$3J[_=B`'3-],@$Y=$ XM3G5(YP,R)D@N`"P!<#0B/``!``$L>``$3J[_.B1`(`IG&!5\``4`""5+``XUO XM?``@`!(E1P`4-48`&"`*3-],P$YU2.<_-B9()$ER$,)K``QG<$OL`5`L;``@V XM/CP`P,YK``QF#'(!4D#`04ZZ^+1@4CPK``2<:@`02,8Z*P`(2,7:AC@K``:8' XM:@`.2,0V*P`*2,/6A'`"(DU.KOZ>#$<`@&<8#$<`0&8:(`8B!")-)`53@E.#! XM3J[^SF`(80Q2A5*#809,WVS\3G53AB`&(@0B34ZN_Q`@!B(#81(@!2(#80Q3M XMA"`%(@1A!"`&(@0B34[N_PI(YS`"=`'$:``,9S0V`$/L`5!P`BQL`"!.KOZ>5 XM-"P!,L;"UFP`:B(#DH)4@7`"T&P`:#0L`&Q5@D/L`5!.KO[.3-]`#$YU``!(8 XMYP,`?A]*K`$@9TP@;`$@""@`!``-9T`B;`#T80``P$'L`.).NO>8<``@;`$@, XM0^P`XDZZ_M0@;`$@,7S__P`@(&P!(")L`/1A``$"+@!![`#B3KH!I&`H2JP!? XM)&<>(&P!)`@H``0`#6<22J@`'&8,</\@;`$D,4``(&`$</]@6"!L`20B;`"V% XM80``5"!L`20B;`"V80``MBP`0>P`I$ZZ]QYP`"!L`21#[`"D3KK^6D'L`.)., XMN@%","P!,%-``D``'R(&`D$`/^M!@$$B!P)!`!_A0>=!@$%,WP#`3G5(YP$PY XM)D@D20@K````#6<Z""L````,9Q`(*P`#``UG*@BK````#&`B+BL`#@CK````A XM#$J'9Q0(!P``9P8(J@````SBCR12(`IF[$S?#(!.=4CG`1`N`"9L`4`@"V<(* XM4T=G!"938/0@"TS?"(!.=4CG`3`F2"1)?@"URV<&4D<D4F#V(`=,WPR`3G5(G XMYP,R)D@N`'#_+'@`!$ZN_K8L``P&`/]G1G`B(CP``0`!3J[_.B1`(`IG+"5+A XM``H@!Q5```D5?``$``A"*@`.%48`#Y/)3J[^VB5``!`B2DZN_IX@"F`*<``0- XM!DZN_K!P`$S?3,!.=4CG`!(F2")++'@`!$ZN_IAP`!`K``].KOZP(DMP(DZN/ XM_RY,WT@`3G5*4&<\2.<_(G``,"@``G(`,B@`!'@`."@`"GH`.B@`#'Q@?O^5" XMRBQL`"!#Z``6(&P!5'0`=@!A"F$(809,WT3\3G5(Y\#`3J[_XDS?`P/!2<%"! XMPT-.=0``2.<_-B9()$DJ0"`-9P``SC8J``0T*@`&/@,\`CH#.`)P`L!J``QGA XM2MYM``3<;0`&2JT`"&<6($TL;``<3J[^MMI`(FT`"-AI``1@("!M``Q.NNWPI XM0^P!4"!M``PL;``@3J[_RMI`."P!BMA&*FT`$&`2WE7<;0`"VFT`!-AM``8J4 XM;0`0MD=L`BX#OE-L`C:'UFH`"+9%;P(J`TJJ`!QG"EQ%2FP!3F8"6$6Z:P`$+ XM;P0W10`$M$9L`BP"O&L``FP$-T8``M1J``JT1&\"*`*X:P`&;P0W1``&8`#_X XM,$S?;/Q.=0``4&]P57!-96YU```````#[`````,`````````>````$P````HM XM````"0````$```@>```'N```!Z0```>:```'C@``!X(```=V````R@````8`F XM```(`````@``$,8``!!>```1+```#78``!#R```-(@```YH```*R````````0 XM`_(```/K`````````_)```/J````*L``!@```\````_````YP```X<```__`C XM`!^#\`#```8`@`0`X`'@`V`&8`_@//"`!'``,``0````$``P`'``/P`/``,`V XM```#``\`/P#_YP```!<`"``!``````$``````/_P````#@`(``$````@`0``_ XM``````(````(``<``0```#X!`````````0````0`!P`!````,`$``````!$1Q XM1$3_____```:;````^P````!`````````*0````$`````@```)(```!^````T X-:@```%8````````#\NP`A X`` Xend Xsize 7168 END_OF_FILE if test 10081 -ne `wc -c <'PopUpMenu.run.uu'`; then echo shar: \"'PopUpMenu.run.uu'\" unpacked with wrong size! fi # end of 'PopUpMenu.run.uu' fi if test -f 'PopUpMenu.uu' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'PopUpMenu.uu'\" else echo shar: Extracting \"'PopUpMenu.uu'\" \(10219 characters\) sed "s/^X//" >'PopUpMenu.uu' <<'END_OF_FILE' Xbegin 664 PopUpMenu XM```#\P`````````$``````````,````\```&;@```'!````J```#Z0```#Q(W XMYS@Z2?D`````0_H`NG`A+'@`!$ZN_=@I0``82H!G``"<)FX!%$JK`*QG0D7Z< XM_\XF//____SD@R(\````Q"0\```#[2QL`!A.KO_B*4`!N$J`9V@I4@&\0I(BW XM.0```*1T!2@\```'T$ZN_W9@3D'K`%Q.KOZ`0>L`7$ZN_HPF`"(\````TB0\V XM```#[BQL`!A.KO_B*4`!N"QX``1*@&<20JP!O")+<`5.KO[43KD`````3J[_H XM?")#3J[^AG``3-]<'$YU*@!D;W,N;&EB<F%R>0!#3TXZ,3`P+S<U+S0P,"\TV XM-2]0;W!5<$UE;G4```````/L`````@````````""````.@````(````!````= XMK@```#(````!`````@````8````!`````P```%P````````#\@```^D```9N> XM3E7_L$CG/SI)^0`````B+`&X0?H$4"0(=A0L;``83J[_T$/Z!%0L>``$3J[^Z XM>B9`(`MF%'``0?H$0$ZZ%Z0F0"`+9G)@``/@<`!!^@0R3KH7D"M`_[1*@&<`" XM`\QP`'(`(&W_M$ZZ%-HK0/^P2H!G.B!+(D`L>``$3J[^DB!M_[1.KOZ`(&W_S XMM$ZN_HQP`"!M_[`P*``2<A30@2)(3J[_+G`*0?H#X&$`!'@@;?^T3KH7F&``& XM`W)#^@/6<"$L>``$3J[]V"E``!Q*@&<``U1#^@/0<"%.KOW8*4``($J`9P`#1 XM-$/Z`\YP(4ZN_=@I0``D2H!G``,4</].KOZV+@!P_[Z`9P`"^$ZN_K8L`'#_? XMO(!G``+@3J[^MBH`</^Z@&<``LA.KOZV*T#_N%*`9P`"L'``0?H#CDZZ%J@D< XM0"`*9P`"DG`P(CP``0`!+'@`!$ZN_SHI0`$X2H!G``)R($`1?``%``@@;`$X( XM,7P`,``2(&P!."%*``Y!^@-2<``B;`$X<@!.KOY$2H!F``(T<`!!^@-(3KH6> XM3"M`__1*@&<``A1P*"(\``$``2QX``1.KO\Z*4`!/$J`9P`!\B!`$7P`!0`(* XM(&P!/#%\`"@`$B!L`3PA;?_T``Y!^@,&<`$B;`$\<@!.KOY$2H!F``&R3KH)L XM$"EY````I``R0BP`,4'L`"@L>``$3J[]TC!\``0B4$'I`A1#[``H3J[^\B)LB XM`!PP?/[X3?H$C"`.+'@`!$ZN_EPI0`!62H!G``%0(FP`'#!\_\I-^@1X(`XL^ XM>``$3J[^7"E``%I*@&<``1PB;``<,'S_0$WZ!&0@#BQX``1.KOY<*4``7DJ`D XM9P``Z")L`!PP?/],3?H$4"`.+'@`!$ZN_EPI0`!B2H!G``"TD\E.KO[:*T#_! XMR"`'<@$D`>&B*T+_S"0&)@'EHRM#_]`F!2@!YZ0K1/_4*"W_N.FA*T'_V$)M! XM_]P;?``U_^<K>0```*3_Z$'M_\@K2/_L0?H$*BM(__`@;`$X,7P`"0`<0>W_> XMWB)L`3@C2``H3J[^.'`I0?H!WF$``@Y![?_((DMA``(V(&P!.#%\``H`'$'M/ XM_]XB;`$X(T@`*"QX``1.KOXX(FP`'#!\_TP@+`!B3J[^7")L`!PP?/]`("P`7 XM7BQX``1.KOY<(FP`'#!\_\H@+`!:+'@`!$ZN_EPB;``<,'S^^"`L`%8L>``$U XM3J[^7$/L`"@L>``$3J[]HB)L`3Q.KOX^(FP!/'`H+'@`!$ZN_RX@;?_T3KH4# XMF")L`3@L>``$3J[^/B)L`3AP,"QX``1.KO\N($I.NA1X("W_N"QX``1.KOZP+ XM(`4L>``$3J[^L"`&+'@`!$ZN_K`@!RQX``1.KOZP(FP`)"QX``1.KOYB(FP`L XM("QX``1.KOYB(FP`'"QX``1.KOYB($M.NA0D2JP!N&<*<`E!^@#F80``[$JLZ XM`;QG%"QX``1.KO]\(BP!O"QL`!A.KO]D(FP`&"QX``1.KOYB3-]<_$Y=3G6;G XM,#LS,VU0;W!5<$UE;G6;,&T@`%)E<&QY`%%U:70``')E;6]V960N"@!I;G1UX XM:71I;VXN;&EB<F%R>0!G<F%P:&EC<RYL:6)R87)Y``!L87EE<G,N;&EB<F%RT XM>0``26UP1&5V``!I;G!U="YD979I8V4``%1I;65R`'1I;65R+F1E=FEC90``, XM5F5R(#,N,B!I;G-T86QL960N"JD@36%R=&EN($%D<FEA;B`Q.3DP"@``9F%I( XM;&5D+@H``$CG,1`F2"X`(BP!N"0+)@<L;``83J[_T')+TH%.KO\Z(BP!N$ZN? XM_]Q"K`&X3-\(C$YU3E7_XDCG)S(F2"1)<``0*@`/<@'AH2X!+"L`!"HK``@@@ XM!X"&@(5R`"M`__`[0?_J.T'_[#M!_^X@+?_P+'@`!$ZN_L(B!L*`*T#_YDJ!X XM9PA"K`&T0FW_ZL"'9WP@2BQX``1.KOZ,*T#_XDJ`9TP@0`RH```@```49C(BW XM:``LL^P!M&80=`*T:``85L%$`4B!.T'_ZE-M_^YR`#(H`!)T%-*"(D`@`4ZNX XM_RY@L")`3J[^ACM\``'_[&"B2FW_[F882FW_[&8``)!*;?_J9PH@2TZZ`;Q"! XM;?_J(`:`A2(M_^;"@+*%9@#_4G``+&P`'$ZN_F(@;@`T*4@!M$CM``'_XB`(, XM9T((*````!EF.DJH`!QG-"EH`"X!2B!M_^(L;``<3J[^7"!*3KH.,CM`_^Y*A XM0&8*($M.N@%88`#^_CM\``'_ZF``_O0@;?_B+&P`'$ZN_EQ@`/[D3-],Y$Y=+ XM3G5(YP`B)'D```!68")(YP`B)'D```!:8!9(YP`B)'D```!>8`I(YP`B)'D`K XM``!B2.>`PD'Y````*"QX``1.KOW,3-]#`4Z20?D````H+'@`!$ZN_<9,WT0`I XM3G5P_U*`2AAF^DYU2.<@/B9()$DH2YO-+'@`!#0J`!1G"B)2("H`#$ZN_KP@W XM#&<``)QP`K`L``1F``"*,BP`!DI"9DYP:;!!9GHP/%#[P&P`"&9P(GD````<7 XM(&D`."`(9V(0*``>2("P:``0;E8@:0`T(`AG3DIH`"QF2$JH`!QG0G`!P&@`R XM&&8Z=`$@*@`(8!@,00#I9@AT`"`J``1@"@Q!`&AF#"`J`!`B4DZN_KQ@!@Q!E XM`.AF#"`-9@0F5&`&*I1@`BI,*%1@`/]B-4(`%"`+3-]\!$YU3E7_XDCG+S(F" XM2$'L`"@L>``$3J[]S")L`!P@:0`TL>P!M&8``?P@;`%*T/P`X"QL`"1.KO^4T XM80`"<$JL`4!G``'$(&P!M+'L`41F#'`?P&P!2,#L`3)@`G``3KH"]$I`9P`!P XMHB`K``2`JP`(+``J*P`,(`:`JP`0*`!";?_P(&P!/"1H``YP`!`J``]R`>&AI XM</\Y0`%(+@!P`"M!_^@L>``$3J[^SB)L`3Q.KOXL2H!F#B)L`3Q.KOXF($I.D XMKOZ,80`"7"`%@(2`K?_H+'@`!$ZN_L(K0/_DP(5G,D)M__`@;`%*,"@`$C(L! XM`32R0&8,,B@`$#0L`3:T06<2.4`!-"!L`4HY:``0`39.N@D<("W_Y,"$9TI.5 XMN@V`0FW_\#M`_^(R+`%(LD!G*G3_OD)F!"X`8!IP`#`!(&P!0"QL`!Q.KO]P] XM,BW_XB!`,4$`(#EM_^(!2"`&(BW_Y,"!9@``CB`M_^3`K?_H9P#_6B!*+'@`A XM!$ZN_HQ*;?_P9UI![`#B3KH/#D'L`*1.N@\&0>P`9DZZ#OX@;`%*T/P`X"QL5 XM`"1.KO^.(`4L>``$3J[^PB!L`4K0_`#@+&P`)$ZN_Y1![`!F3KH.S$'L`*1.8 XMN@[$0>P`XDZZ#KQA``%&2FW_\%?`1`!(@#M`__!@`/[:0>P`XDZZ!])![`"D! XM3KH'RD'L`&9.N@?"*6P!M`%$(&P!2M#\`.`L;``D3J[_CB`'80``%D'L`"@LS XM>``$3J[]QDS?3/1.74YU2.<!`BX`0>P`#D/L`!(L;``<3J[_K!E\``H`!#E'N XM``9";``(D<@I2```*4@`"B!L`3@Q?``+`!P@;`$X0B@`'G`6(&P!."%``"1!X XM[```(FP!."-(`"@@;`&T+&P`'$ZN_CXB;`$X+'@`!$ZN_CA,WT"`3G4O"G``K XM.4``I#E``.(Y0`!F.4`!,)'(*4@!+"E(`20I2`$@(&P!M"EH`!P!0$/L`5`L[ XM;``@3J[_.D/L`5`D;`%*(&H`B$ZN_[X@;`%*T/P`N"E(`50P+`&*5$`Y0`$RO XM(&P!2@@H``<`3%?`1`!(@#E``4XD7TYU+PX@;`$\,7P`"0`<(&P!/$*H`"`@6 XM;`$\(7P``PU``"0B;`$\+'@`!$ZN_C(L7TYU``!.5?_H2.<_,"X`?`!Z`R9L( XM`4`@:P`.3KK[PD/L`5`@:P`.+&P`($ZN_\HH`#`K``BP1&,"*`"X1F,"+`3:N XM;`$R)E,@"V;,6D8@!N)((&P!2C(H`!*20$BM``+_^FP&<``[0/_Z,"W_^M!&L XM,B@`#+!!;P:21CM!__HY;?_Z`&@Y1@!POD5O`GX`,"P!,N)((&P!2C(H`!"2- XM0))'+@%*1VH"?@`@!]!%,B@`#K!!;P2212X!.4<`:CE%`')![`!F80`$D$I`] XM9@9P`&```-(P+`!H5$!(P"1L`4`K0/_XWFP!,G``(&P!M!`H`&)#[`%0+&P`! XM($ZN_JH@!TC`4X!#[`%0+T``("`M__@B+P`@3J[_$"!J``Y.NOK$0^P!4"!J] XM``XL;``@3J[_Q`@J````#69B*7P```"<`5@9?``!`6UP`"!L`;00*`!C0^P!F XM4$ZN_JH@!Y!L`3)40'(`,@`P+`!L54!(P"0'2,)#[`%0+T``)"`M__@O0@`H, XM)"\`)"8O`"A.KO[.*7P```"@`5@9?``!`6TD4B`*9@#_1'`!3-\,_$Y=3G5.' XM5?_N2.<_,"9()$DN`"P!*VL`$O_T.WQ____X.T;_^C`\@``[0/_^.T#__"!M^ XM__0@*``20>W_^")M__1.N@NV,#P`P"!M__3`:``,9A`@*``60>W_^")M__1.F XMN@N8(FW_]"!1*TC_]&;","W_^%5`,BW__))`5$$T*@`")@*605Y#(&P!2C@H_ XM``R804BM``'_]$BM``+_\DBM``C_\$BM`!#_[DI&9PXB`-)"*@&Z1&X$2D5JC XM!CHJ``9?1;I$;Q0B!))%MD%O"DI#;@)V`"H#8`(J!#(M__+215Y"LD)D!I1%P XM.T+_\C=%``*013=``!`W;?_R``HP+?_Z54`B!])`-"W__I1`5$([0?_TTD([3 XM0/_V2*T`!/_R(&P!2C8H``ZR0V,&ED([0__T,BW_]$I!:@9V`#M#__0R+?_T/ XM-T$`!)!!-T``#C="``P@2V$``EY*0&<&($MA```*3-\,_$Y=3G5(YP`P)D@DB XM:P`2($MA``+Z<``B`"!*(DMA```.)%(@"F;N3-\,`$YU3E7_X$CG-S(F2"1)` XM+@`L`3`K``20:@`0*@!(Q3`K``A(P"(%TH!3@3`K``:0:@`.2,`T*P`*2,(K" XM0/_PT()3@$CM``'_["M!__1P`;Y`9@8@:P`68`0@:P`2*TC__"`(9P`!N'``W XM(FP!M!`I`&-#[`%0+&P`($ZN_JI#[`%0<`!.KOZ>2D9G%D/L`5`@!2(M__`D7 XM+?_T)BW_[$ZN_LX(*P`!``UG&$'L`5`B;?_\(`4B+?_P+&P`'$ZN_RA@%D'L+ XM`5`B;?_\(`4B+?_P+&P`'$ZN_XXP/`$!P&L`#`Q``0%F&D'L`5`L;`&T(FX`) XM9"`%(BW_\"QL`!Q.KO^.""L``0`-9PH@;?_\,"@`!F`((&W__#`H``)(P"(M] XM__#2@"M!_^@(*P`"``UG;G``,"P!C"0M__24@#`L`4[!_``40?D```!,T<`O> XM2``@0>P!4")O`"`@`DZN_XYP`#`L`8HB+?_HTH!5@4/L`5`@`BQL`"!.KO\0< XM<``@;`&T$"@`8D/L`5!.KOZJ0>L`&D/L`5!P`4ZN_\0K0O_D2JL`'&<L,"P!V XM3L'\`!1!^0```'31P"](`"!![`%0(F\`("`M__0B+?_H+&P`'$ZN_XX(*P`$. XM``UF2"E\````G`%8&7P``0%M<``@;`&T$"@`8T/L`5`L;``@3J[^JD/L`5`@A XM!2(M__`D+?_T)BW_[$ZN_LXI?````*`!6!E\``$!;4S?3.Q.74YU3E7__$CG- XM+Q`F2#XK``I(QSPK``Q(QB!L`4HP*``,2,"^@&X*,"@`#DC`O(!O!G``8```8 XMA#`K``)(P-"'4X`W0``&,"L`!$C`T(93@#=```AZ`"!L`4H:*`"]0>L`%B`%6 XM(@<D!BQL`"!.KOYZ>`!P`#`$L(5D+G``,`3E@"]``!@@!R(&+&P`($ZN_A0BI XM+P`8)X`8'F8*($MA``"B<`!@%E)$8,HVO``!($M.N@=$($MA```,<`%,WPCT) XM3EU.=4CG,!`F2$/L`5!P`"QL`"!.KOZ><``@;`&T$"@`8T/L`5!.KOZJ<``@+ XM;`&T$"@`8AE``6L([``#`7$P*P`"2,`R*P`$2,$T*P`&2,(V*P`(2,-#[`%0; XM3J[^S@BL``,!<4S?"`Q.=2\+)DA*4V<,($M.N@;`($MA```&)E].=4CG(3`FD XM2$7K`!9^`'``$"H`!;Y`9"QP`#`'Y8!*L@@(9QPR*P`*2,$T*P`,2,(@<@@(K XM(`$B`BQL`"!.KOX.4D=@RD)33-\,A$YU``!(YP$P2FP`XF=P0>P`XF$``APF> XM0$J`(&P!(+?(9TX@"&<,<`%#[`#B3KH#3F`62JP!*&<0*6P!*`$D0JP!*'``7 XM80`".BE+`2!*K`$@9PYP`"!+0^P`XDZZ`R!@$'`!80`"'"EL`20!*$*L`21!L XM[`#B80`!C$I`9@`!@$IL`*1G``#(0>P`I&$``79*0&<``(Q![`"D80`!EB1`) XM2H"U[`$D9P`!5DIL`.)G#$'L`.).NO[L0JP!*$JL`21G#G`!(&P!)$/L`*1.$ XMN@*P*4H!)$JL`21G``$D<``@2D/L`*1.N@*8""H`!``-9P`!#BEJ`!P`]$JL, XM`/1G``$`(&P!)#`H``:0;`"R,CQ__T'L`.)#[`"D3KKYN&```.!*K`$D9RA*4 XM;`#B9Q!P`6$``5(@;`$D*4@!*&`.<`$@;`$D0^P`I$ZZ`C9"K`$D0>P`9F$`? XM`+!*0&<``*0P+`$VD&P`:E5``H```/__@.P!,BX`4D<P+`$POD!G``""2D!G> XM)DIL`*1G%$'L`.).NOX40>P`I$ZZ_@Q"K`$H,"P!,"!L`2Q.N@*((`=.N@/X@ XM*4`!+$J`9@9";`$P8$(@!SE``3`@;`$L3KH"9B!L`2P(*`````UG*"EH`!(`O XMMDJL`+9G'#`L`3!30,#L`3+0;`!J<@!![`"D0^P`9DZZ^-9,WPR`3G4O"R9(: XM,"P!-+!K``)O&K!K``9L%#`L`3:P:P`$;PJP:P`(;`1P`6`"<``F7TYU2.<#3 XM,"9(,"P!--!K`!`N`#`L`3;0:P`.+``D:P`2,"H`!KQ`;1S0:@`*O$!N%#`J2 XM``2^0&T,T&H`"+Y`;@0@"F`()%(@"F;6<`!,WPS`3G4O!RX`0>P`XDZZ`^(@% XM!R!L`21#[`"D3KH`Y$'L`.).N@/,+A].=0``3E7_]DCG`3(F2'X`+'@`!$ZNW XM_WPB;`&T(&D`+B1H``0(*@`%`%1G5+7L`;1F!'`!8`)P`R(\```@`"!+P4%A= XM``!4*T#_]DJ`9S(@0")(TOP`)$WH`"@@22).+&P`'$ZN_ZP@;?_V(4H`+"!J' XM`%8B;?_V+'@`!$ZN_I)21R12(`IFGBQX``1.KO]V(`=,WTR`3EU.=4CG`S(FZ XM2"X`+`%P-"(\``$``2QX``1.KO\Z)$`@"F<8%7P`!0`()4L`#C5\`"``$B5'\ XM`!0U1@`8(`I,WTS`3G5(YS\V)D@D27(0PFL`#&=P2^P!4"QL`"`^/`#`SFL`/ XM#&8,<@%20,!!3KKXM&!2/"L`!)QJ`!!(QCHK``A(Q=J&."L`!IAJ``Y(Q#8KY XM``I(P]:$<`(B34ZN_IX,1P"`9Q@,1P!`9AH@!B($(DTD!5."4X-.KO[.8`AAM XM#%*%4H-A!DS?;/Q.=5.&(`8B!")-3J[_$"`&(@-A$B`%(@-A#%.$(`4B!&$$0 XM(`8B!")-3N[_"DCG,`)T`<1H``QG-#8`0^P!4'`"+&P`($ZN_IXT+`$RQL+62 XM;`!J(@.2@E2!<`+0;`!H-"P`;%6"0^P!4$ZN_LY,WT`,3G4``$CG`P!^'TJLD XM`2!G3"!L`2`(*``$``UG0")L`/1A``#`0>P`XDZZ]YAP`"!L`2!#[`#B3KK^F XMU"!L`2`Q?/__`"`@;`$@(FP`]&$``0(N`$'L`.).N@&D8"A*K`$D9QX@;`$DB XM""@`!``-9Q)*J``<9@QP_R!L`20Q0``@8`1P_V!8(&P!)")L`+9A``!4(&P!M XM)")L`+9A``"V+`!![`"D3KKW'G``(&P!)$/L`*1.NOY:0>P`XDZZ`4(P+`$P4 XM4T`"0``?(@8"00`_ZT&`02('`D$`'^%!YT&`04S?`,!.=4CG`3`F2"1)""L`] XM```-9SH(*P````QG$`@K``,`#6<J"*L````,8"(N*P`.".L````,2H=G%`@'Z XM``!G!@BJ````#.*/)%(@"F;L3-\,@$YU2.<!$"X`)FP!0"`+9PA31V<$)E-@! XM]"`+3-\(@$YU2.<!,"9()$E^`+7+9P921R128/8@!TS?#(!.=4CG`S(F2"X`! XM</\L>``$3J[^MBP`#`8`_V=&<"(B/``!``%.KO\Z)$`@"F<L)4L`"B`'%4``O XM"15\``0`"$(J``X51@`/D\E.KO[:)4``$")*3J[^GB`*8`IP`!`&3J[^L'``G XM3-],P$YU2.<`$B9((DLL>``$3J[^F'``$"L`#TZN_K`B2W`B3J[_+DS?2`!.= XM=4I09SQ(YS\B<``P*``"<@`R*``$>``X*``*>@`Z*``,?&!^_Y7*+&P`($/H! XM`!8@;`%4=`!V`&$*80AA!DS?1/Q.=4CGP,!.KO_B3-\#`\%)P4+#0TYU``!(E XMYS\V)D@D22I`(`UG``#.-BH`!#0J``8^`SP".@,X`G`"P&H`#&=*WFT`!-QMR XM``9*K0`(9Q8@32QL`!Q.KOZVVD`B;0`(V&D`!&`@(&T`#$ZZ[?!#[`%0(&T`4 XM#"QL`"!.KO_*VD`X+`&*V$8J;0`08!+>5=QM``+:;0`$V&T`!BIM`!"V1VP"O XM+@.^4VP"-H?6:@`(MD5O`BH#2JH`'&<*7$5*;`%.9@)81;IK``1O!#=%``2T* XM1FP"+`*\:P`";`0W1@`"U&H`"K1$;P(H`KAK``9O!#=$``9@`/\P3-]L_$YU7 XM``!0;W!5<$UE;G4```````/L````"`````(```=>```&^```!N0```;:```&U XMS@``!L(```:V````"@````@````#```0!@``#YX``!!L```,M@``$#(```QB8 XM```"V@```?(````````#\@```^L````````#\D```^H````JP``&```#P```' XM#\```#G```#AP``#_\``'X/P`,``!@"`!`#@`>`#8`9@#^`\\(`$<``P`!``@ XM```0`#``<``_``\``P````,`#P`_`/_G````%P`(``$``````0``````__``( XM```.``@``0```"`!`````````@````@`!P`!````/@$````````!````!``'5 XM``$````P`0``````$1%$1/____\``!FL```#[`````$````!````I`````0`V X;```#````D@```'X```!J````5@````````/R( X`` Xend Xsize 7272 END_OF_FILE if test 10219 -ne `wc -c <'PopUpMenu.uu'`; then echo shar: \"'PopUpMenu.uu'\" unpacked with wrong size! fi # end of 'PopUpMenu.uu' fi if test -f 'Source/Main.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Source/Main.c'\" else echo shar: Extracting \"'Source/Main.c'\" \(11166 characters\) sed "s/^X//" >'Source/Main.c' <<'END_OF_FILE' X#include "PopUpMenu.h" X#include "Version.h" X X#define REPLYPORTNAME "Reply" X#define IMPDEVPORTNAME "ImpDev" X#define TIMERPORTNAME "Timer" X#define QUITPORTNAME "Quit" X#define INPHANDLNAME PopUpTaskName X#define SEMAPHORENAME PopUpTaskName X X#define POPUPMSG "\x9B0;33mPopUpMenu\x9B0m " X#define KILLMSG "removed.\n" X#define STARTMSG "installed.\n\xA9 Martin Adrian 1990\n" X#define FAILMSG "failed.\n" X#define DELAYTIME 150 X X#define INPHANDLPRI 53 X/* Must use kickstart 1.2 or higher */ X#define LIBVERSION 33 X X/* don't know how to find these in C */ X#define LVOSetMenuStrip -0x108 X#define LVOClearMenuStrip -0x36 X#define LVOOnMenu -0xc0 X#define LVOOffMenu -0xb4 X X/* this is for errors in proto/exec.h */ X#undef RemSemaphore X#pragma syscall RemSemaphore 25e 901 X Xextern VOID InitPopUpMenu(VOID); Xextern VOID MySetMenuStrip(); Xextern VOID MyClearMenuStrip(); Xextern VOID MyOnMenu(); Xextern VOID MyOffMenu(); X XVOID InitPopUpMenu() X{ X X IMPORT struct DosLibrary *DosBase; X IMPORT struct IntuitionBase *IntuitionBase; X IMPORT struct GfxBase *GfxBase; X IMPORT struct LayersBase *LayersBase; X X IMPORT struct IOStdReq *InputReqBlock; X IMPORT struct timerequest *TimerReqBlock; X IMPORT struct SignalSemaphore PopUpSemaphore; X IMPORT __fptr OldSetMenuStrip, OldClearMenuStrip, OldOnMenu, OldOffMenu; X IMPORT BPTR StdOut; X IMPORT BPTR PopUpSeg; X X IMPORT STRPTR far PopUpTaskName; /* Pointer to the string "PopUpMenu" */ X X struct MsgPort *ReplyPort; X struct MsgPort *InputDevPort; X struct MsgPort *TimerPort; X struct Interrupt InputReqData; X struct SignalData InputSignals; X LONG MenuUpSigNum, MenuDownSigNum; X LONG MouseMovedSigNum, SelectDownSigNum; X X geta4(); /* load global database */ X X Write(StdOut,POPUPMSG,sizeof(POPUPMSG)); X X /*********************************** X * see if we are already installed * X ***********************************/ X if (!(ReplyPort = FindPort(REPLYPORTNAME))) { X if (!(ReplyPort = CreatePort(REPLYPORTNAME,0))) X goto CleanUp13; X } X else { X /* yes, popupmenues already installed, tell running task to quit */ X struct MsgPort *const QuitPort = CreatePort(QUITPORTNAME,0); X struct IntuiMessage *Message; X X if (QuitPort) { X if (Message = BuildIntuiMsg(QuitPort,QUITPOPUPMENU,NULL)) { X /* Send quitmessage */ X PutMsg(ReplyPort, (struct Message *)Message); X /* Wait for reply */ X WaitPort(QuitPort); X /* get rid of the message */ X GetMsg(QuitPort); X FreeMem(Message,(LONG)Message->ExecMessage.mn_Length + X sizeof(struct Message)); X X WriteAndClose(KILLMSG, sizeof(KILLMSG)); X } X DeletePort(QuitPort); X } X goto CleanUp13; X } X X /****************** X * open libraries * X ******************/ X if (!(IntuitionBase = (struct IntuitionBase *) X OpenLibrary("intuition.library", LIBVERSION))) X goto CleanUp12; X if (!(GfxBase = (struct GfxBase *) X OpenLibrary("graphics.library", LIBVERSION))) X goto CleanUp11; X if (!(LayersBase = (struct LayersBase *) X OpenLibrary("layers.library", LIBVERSION))) X goto CleanUp10; X X /************************ X * Allocate our signals * X ************************/ X if ((MenuUpSigNum = AllocSignal(-1)) == -1) X goto CleanUp9; X if ((MenuDownSigNum = AllocSignal(-1)) == -1) X goto CleanUp8; X if ((MouseMovedSigNum = AllocSignal(-1)) == -1) X goto CleanUp7; X if ((SelectDownSigNum = AllocSignal(-1)) == -1) X goto CleanUp6; X X /**************************************** X * Build connection to the input.device * X ****************************************/ X if (!(InputDevPort = CreatePort(IMPDEVPORTNAME,0))) X goto CleanUp5; X if ((InputReqBlock = (struct IOStdReq *) X AllocMem(sizeof(struct IOStdReq), X MEMF_CLEAR | MEMF_PUBLIC)) == NULL) X goto CleanUp4; X X InputReqBlock->io_Message.mn_Node.ln_Type = NT_MESSAGE; X InputReqBlock->io_Message.mn_Length = sizeof(struct IOStdReq); X InputReqBlock->io_Message.mn_ReplyPort = InputDevPort; X X if (OpenDevice("input.device",0,(struct IORequest *)InputReqBlock,0)) X goto CleanUp3; X X /**************************************** X * Bulid connection to the timer.device * X ****************************************/ X if (!(TimerPort = CreatePort(TIMERPORTNAME,0))) X goto CleanUp3x3; X if (!(TimerReqBlock = (struct timerequest *) X AllocMem(sizeof(struct timerequest), X MEMF_CLEAR | MEMF_PUBLIC))) X goto CleanUp3x2; X X TimerReqBlock->tr_node.io_Message.mn_Node.ln_Type = NT_MESSAGE; X TimerReqBlock->tr_node.io_Message.mn_Length = sizeof(struct timerequest); X TimerReqBlock->tr_node.io_Message.mn_ReplyPort = TimerPort; X X if (OpenDevice(TIMERNAME,UNIT_VBLANK,(struct IORequest *)TimerReqBlock,0)) X goto CleanUp3x1; X X /* Start Timer (just to be sure that at least one request is sent. */ X /* CheckIO doesn't work otherwise, i think) */ X X QueueTimer(); X X /******************** X * Make a semaphore * X ********************/ X PopUpSemaphore.ss_Link.ln_Name = SEMAPHORENAME; X PopUpSemaphore.ss_Link.ln_Pri = 0; X AddSemaphore(&PopUpSemaphore); X X /************************************************** X * patch intuition functions to use our semaphore * X **************************************************/ X if (!(OldSetMenuStrip = SetFunction((struct Library *)IntuitionBase, X LVOSetMenuStrip,MySetMenuStrip))) X goto CleanUp2x4; X if (!(OldClearMenuStrip = SetFunction((struct Library *)IntuitionBase, X LVOClearMenuStrip,MyClearMenuStrip))) X goto CleanUp2x3; X if (!(OldOnMenu = SetFunction((struct Library *)IntuitionBase, X LVOOnMenu,MyOnMenu))) X goto CleanUp2x2; X if (!(OldOffMenu = SetFunction((struct Library *)IntuitionBase, X LVOOffMenu,MyOffMenu))) X goto CleanUp2x1; X X /********************************** X * init data for the inputhandler * X **********************************/ X InputSignals.PopUpMenuTask = FindTask(0); X InputSignals.MenuUpSig = 1L << MenuUpSigNum; X InputSignals.MenuDownSig = 1L << MenuDownSigNum; X InputSignals.MouseMovedSig = 1L << MouseMovedSigNum; X InputSignals.SelectDownSig = 1L << SelectDownSigNum; X InputSignals.Down = FALSE; /* menubutton is not down. (who cares) */ X X /**************************** X * startup the inputhandler * X ****************************/ X InputReqData.is_Node.ln_Pri = INPHANDLPRI; /* must come before intuition */ X InputReqData.is_Node.ln_Name = INPHANDLNAME; X X InputReqData.is_Data = (APTR)&InputSignals; X InputReqData.is_Code = (VOID *)PopUpHandler; X X InputReqBlock->io_Command = IND_ADDHANDLER; X InputReqBlock->io_Data = (APTR)&InputReqData; X X DoIO((struct IORequest *)InputReqBlock); X X /*************************************** X * tell the user that everything is ok * X ***************************************/ X WriteAndClose(VERSION STARTMSG, sizeof(VERSION STARTMSG)); X X PopUpMainLoop(&InputSignals,ReplyPort); X XCleanUp1: X X /* remove inputhandler */ X InputReqBlock->io_Command = IND_REMHANDLER; X InputReqBlock->io_Data = (APTR)&InputReqData; X X DoIO((struct IORequest *)InputReqBlock); X X /* restore intuition functions */ X SetFunction((struct Library *)IntuitionBase,LVOOffMenu,OldOffMenu); XCleanUp2x1: X SetFunction((struct Library *)IntuitionBase,LVOOnMenu,OldOnMenu); XCleanUp2x2: X SetFunction((struct Library *)IntuitionBase,LVOClearMenuStrip,OldClearMenuStrip); XCleanUp2x3: X SetFunction((struct Library *)IntuitionBase,LVOSetMenuStrip,OldSetMenuStrip); XCleanUp2x4: X X /* remove semaphore */ X RemSemaphore(&PopUpSemaphore); X X /* close timer.device */ X CloseDevice((struct IORequest *)TimerReqBlock); XCleanUp3x1: X FreeMem(TimerReqBlock,sizeof(struct timerequest)); XCleanUp3x2: X DeletePort(TimerPort); XCleanUp3x3: X X /* close input.device */ X CloseDevice((struct IORequest *)InputReqBlock); XCleanUp3: X DeleteStdIO(InputReqBlock); XCleanUp4: X DeletePort(InputDevPort); XCleanUp5: X X /* Free allocated signals */ X FreeSignal(SelectDownSigNum); XCleanUp6: X FreeSignal(MouseMovedSigNum); XCleanUp7: X FreeSignal(MenuDownSigNum); XCleanUp8: X FreeSignal(MenuUpSigNum); XCleanUp9: X X /* close libraries */ X CloseLibrary((struct Library *)LayersBase); XCleanUp10: X CloseLibrary((struct Library *)GfxBase); XCleanUp11: X CloseLibrary((struct Library *)IntuitionBase); XCleanUp12: X DeletePort(ReplyPort); XCleanUp13: X if (StdOut) X WriteAndClose(FAILMSG,sizeof(FAILMSG)); X if (PopUpSeg) { X /* if loaded from CLI unload us */ X Forbid(); X UnLoadSeg(PopUpSeg); X } X CloseLibrary((struct Library *)DOSBase); X} X X/*************************************** X * WriteAndClose(Text,Length) * X * * X * Input: * X * Text - Text to write to StdOut. * X * Length * X ***************************************/ XVOID WriteAndClose(Text, Length) X STRPTR Text; X ULONG Length; X{ X IMPORT BPTR StdOut; X X Write(StdOut,Text,Length); X Delay(DELAYTIME); X Close(StdOut); X StdOut = NULL; X} X X/************************************************ X * PopUpMainLoop(InputSignals,ReplyPort) * X * * X * Input: * X * InputSignals - Allocated signals. * X * ReplyPort - Port for MENUVERIFY replies * X * Output: * X * none * X ************************************************/ XVOID PopUpMainLoop(InputSignals,ReplyPort) X struct SignalData *const InputSignals; X struct MsgPort *const ReplyPort; X{ X IMPORT struct Window *ActiveWindow; X IMPORT struct Screen *Screen; X IMPORT struct Menu *Menues; X X const LONGBITS ReplySig = 1L << (LONG)ReplyPort->mp_SigBit; X const LONGBITS MenuUpSig = InputSignals->MenuUpSig; X const LONGBITS MenuDownSig = InputSignals->MenuDownSig; X const LONGBITS AllSignals = ReplySig | MenuUpSig | MenuDownSig; X X WORD NrOfMessages = 0; X BOOL QuitPopUpMenu = FALSE; X BOOL VerifyOK = FALSE; X X FOREVER { X const LONGBITS SignalBits = Wait(AllSignals); X X if (SignalBits & MenuUpSig) { X ActiveWindow = NULL; X VerifyOK = FALSE; X } X X if (SignalBits & ReplySig) { X struct IntuiMessage *Message; X X while (Message = (struct IntuiMessage *)GetMsg(ReplyPort)) { X if (Message->Class == MENUVERIFY) { X if (Message->IDCMPWindow == ActiveWindow) X VerifyOK = (Message->Code != MENUCANCEL); X NrOfMessages--; X FreeMem(Message,(LONG)Message->ExecMessage.mn_Length + X sizeof(struct Message)); X } X else { /* Message->Class == QUITPOPUPMENU or some strange message */ X ReplyMsg((struct Message *)Message); /* Message does not belong to this task */ X QuitPopUpMenu = TRUE; X } X X } /* while */ X if (NrOfMessages == 0) { X if (QuitPopUpMenu) X break; X if (VerifyOK) { X PopUpMenu(InputSignals); X VerifyOK = FALSE; X } X } X } X X if ((SignalBits & (MenuUpSig | MenuDownSig)) == MenuDownSig) { X const LONG Lock = LockIBase(0); X X if ((ActiveWindow = IntuitionBase->ActiveWindow) AND X !(ActiveWindow->Flags & RMBTRAP) AND X (ActiveWindow->MenuStrip)) { X Screen = ActiveWindow->WScreen; X UnlockIBase(Lock); X if ((NrOfMessages = SendMessage(ReplyPort)) == 0) X PopUpMenu(InputSignals); X else X VerifyOK = TRUE; X } X else X UnlockIBase(Lock); X } X } /* FOREVER */ X} END_OF_FILE if test 11166 -ne `wc -c <'Source/Main.c'`; then echo shar: \"'Source/Main.c'\" unpacked with wrong size! fi # end of 'Source/Main.c' fi if test -f 'Source/PopUpMenu.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Source/PopUpMenu.c'\" else echo shar: Extracting \"'Source/PopUpMenu.c'\" \(6683 characters\) sed "s/^X//" >'Source/PopUpMenu.c' <<'END_OF_FILE' X#include "PopUpMenu.h" X X/**************************************** X * PopUpMenu(InputSignals) * X * * X * Input: * X * InputSignals - Allocated signals. * X * Output: * X * none * X ****************************************/ XVOID PopUpMenu(InputSignals) X struct SignalData *const InputSignals; X{ X IMPORT struct WindowData MenuWindow, ItemWindow, SubWindow; X IMPORT struct RastPort Rp; X IMPORT struct Window *ActiveWindow; X IMPORT struct Screen *Screen; X IMPORT struct Menu *Menues; X IMPORT UWORD CurrentMenuNr; X IMPORT UWORD MenuFontSize; X IMPORT WORD MouseX,MouseY; X IMPORT struct SignalSemaphore PopUpSemaphore; X IMPORT struct timerequest *TimerReqBlock; X IMPORT struct Window *LastWindow; X IMPORT WORDBITS LastSelected; X IMPORT struct IntuitionBase *IntuitionBase; X X WORDBITS MenuNumber; X X ObtainSemaphore(&PopUpSemaphore); X X /* be sure that the window to use is still active */ X if (IntuitionBase->ActiveWindow != ActiveWindow) X goto Abort; X X#ifndef NOLOCKING X LockLayers(&Screen->LayerInfo); /* puh! now we are safe (I hope) */ X#endif X InitGlobals(); X X /* try to open menues */ X if ((Menues) AND X (OpenMenuWindow((ActiveWindow == LastWindow)? X (UWORD)(MENUNUM(LastSelected)) * MenuFontSize: 0))) { X X const LONGBITS MenuButtonSignals = InputSignals->MenuUpSig | X InputSignals->MenuDownSig; X const LONGBITS MouseMovedSignal = InputSignals->MouseMovedSig; X const LONGBITS ButtonSignals = MenuButtonSignals | X InputSignals->SelectDownSig; X X BOOL Waiting = FALSE; X struct MsgPort *const TimerPort = X TimerReqBlock->tr_node.io_Message.mn_ReplyPort; X const LONGBITS TimerSignal = 1L << TimerPort->mp_SigBit; X X /* menuwindow opened ok */ X MenuNumber = LastSelected = MENUNULL; X X /* start timer */ X X SetSignal(0,TimerSignal); /* clear old timermessages */ X if (CheckIO((struct IORequest *)TimerReqBlock) == NULL) { X WaitIO((struct IORequest *)TimerReqBlock); X GetMsg(TimerPort); /* get rid of the message */ X } X QueueTimer(); X X FOREVER { X const LONGBITS SignalBits = Wait(MouseMovedSignal | X ButtonSignals | X TimerSignal); X X if (SignalBits & MouseMovedSignal) { X Waiting = FALSE; X if ((MouseX != Screen->MouseX) OR (MouseY != Screen->MouseY)) { X MouseX = Screen->MouseX; X MouseY = Screen->MouseY; X SelectItem(); X } X } X if (SignalBits & ButtonSignals) { X const WORDBITS Selected = FinalSelect(); X X Waiting = FALSE; X /* do multiple select */ X if (Selected != LastSelected) { /* same => do nothing */ X if (MenuNumber == MENUNULL) X MenuNumber = Selected; /* first selectiom */ X else X (ItemAddress(Menues,(LONG)LastSelected))->NextSelect = Selected; X LastSelected = Selected; X } X X if (SignalBits & MenuButtonSignals) /* Menubutton -> final selection */ X break; X } X X if (SignalBits & TimerSignal) { X GetMsg(TimerPort); /* get rid of the message */ X X if (Waiting) { X X /* the input.device has stopped, unlock the screen and wait */ X X SwapBits(&SubWindow); X SwapBits(&ItemWindow); X SwapBits(&MenuWindow); X X#ifndef NOLOCKING X UnlockLayers(&Screen->LayerInfo); X#endif X Wait(MouseMovedSignal); X#ifndef NOLOCKING X LockLayers(&Screen->LayerInfo); /* let's hope the screen is still here */ X#endif X SwapBits(&MenuWindow); X SwapBits(&ItemWindow); X SwapBits(&SubWindow); X } X X /* start timer again */ X QueueTimer(); X Waiting = !Waiting; X } X } /* FOREVER */ X X /* close all windows */ X CloseItemWindow(&SubWindow); X CloseItemWindow(&ItemWindow); X CloseItemWindow(&MenuWindow); X } X X /* remember last menu selected */ X LastWindow = ActiveWindow; X X#ifndef NOLOCKING X UnlockLayers(&Screen->LayerInfo); X#endif X /* tell the window the good news (MENUPICK) */ X TellWindow(MenuNumber); XAbort: X ReleaseSemaphore(&PopUpSemaphore); X} X X/***************************************** X * TellWindow() - Send Fake Menu Event. * X * * X * Input: * X * none * X * Output: * X * none * X *****************************************/ XVOID TellWindow(MenuNumber) X WORDBITS MenuNumber; X{ X IMPORT struct Window *const ActiveWindow; X IMPORT struct IOStdReq *const InputReqBlock; X IMPORT struct IntuitionBase *const IntuitionBase; X X STATIC struct InputEvent MyFakeEvent; X X /* get the current time */ X CurrentTime(&MyFakeEvent.ie_TimeStamp.tv_secs, X &MyFakeEvent.ie_TimeStamp.tv_micro); X X MyFakeEvent.ie_Class = IECLASS_MENULIST; X MyFakeEvent.ie_Code = MenuNumber; X MyFakeEvent.ie_Qualifier = 0; X MyFakeEvent.ie_NextEvent = NULL; X MyFakeEvent.ie_EventAddress = NULL; X X InputReqBlock->io_Command = IND_WRITEEVENT; X InputReqBlock->io_Flags = 0; X InputReqBlock->io_Length = sizeof(struct InputEvent); X InputReqBlock->io_Data = (APTR)&MyFakeEvent; X X /* be sure the right window will get the message. */ X ActivateWindow(ActiveWindow); X X DoIO(InputReqBlock); X} X/**************************************************** X * InitGlobals() - Init the needed global variables * X * * X * Input: * X * none * X * Output: * X * none * X ****************************************************/ XVOID InitGlobals() X{ X IMPORT struct WindowData MenuWindow, ItemWindow, SubWindow; X IMPORT UWORD CurrentMenuNr; X IMPORT struct Menu *CurrentMenuPtr; X IMPORT struct MenuItem *CurrentItem, *CurrentSubItem; X X IMPORT struct Screen *Screen; X IMPORT struct Menu *Menues; X IMPORT struct RastPort Rp; X IMPORT struct Window *const ActiveWindow; X IMPORT UWORD MenuFontSize; X IMPORT BOOL ScreenType; X X /* no window is open */ X ItemWindow.BitMapOk = FALSE; X SubWindow.BitMapOk = FALSE; X MenuWindow.BitMapOk = FALSE; X X /* no menu is selected */ X CurrentMenuNr = 0; X CurrentMenuPtr = NULL; X CurrentItem = NULL; X CurrentSubItem = NULL; X X Menues = ActiveWindow->MenuStrip; X X /* set up a rastport for the screen */ X InitRastPort(&Rp); X X SetFont(&Rp,Screen->RastPort.Font); X Rp.BitMap = &Screen->BitMap; X X /* default font height */ X MenuFontSize = Rp.TxHeight + 2; X X /* Size of screen */ X ScreenType = (Screen->ViewPort.Modes & HIRES) == 0; X} X X/****************************************************** X * QueueTimer() - Queue the timer to go of after 0.2s * X * * X * Input: * X * none * X * Output: * X * none: * X ******************************************************/ XVOID QueueTimer() X{ X IMPORT struct timerequest *TimerReqBlock; X X TimerReqBlock->tr_node.io_Command = TR_ADDREQUEST; X TimerReqBlock->tr_time.tv_secs = 0; X TimerReqBlock->tr_time.tv_micro = 200000L; X SendIO((struct IORequest *)TimerReqBlock); X} X END_OF_FILE if test 6683 -ne `wc -c <'Source/PopUpMenu.c'`; then echo shar: \"'Source/PopUpMenu.c'\" unpacked with wrong size! fi # end of 'Source/PopUpMenu.c' fi if test -f 'Source/Select.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Source/Select.c'\" else echo shar: Extracting \"'Source/Select.c'\" \(5178 characters\) sed "s/^X//" >'Source/Select.c' <<'END_OF_FILE' X#include "PopUpMenu.h" X X/*************************************** X * SelectItem() - check mouseposition. * X * * X * Input: * X * none * X * Output: * X * none * X ***************************************/ XVOID SelectItem() X{ X IMPORT struct WindowData MenuWindow, ItemWindow, SubWindow; X IMPORT struct MenuItem *CurrentSubItem, *CurrentItem, *TempItem; X IMPORT struct Menu *CurrentMenuPtr; X IMPORT UWORD CurrentMenuNr; X IMPORT const UWORD MenuFontSize; X IMPORT const WORD MouseY; X IMPORT struct RastPort Rp; X X /******************** X * Check subwindow. * X ********************/ X X if (SubWindow.BitMapOk) { X struct MenuItem *const NewSubItem = FindMouseItem(&SubWindow); X X if (NewSubItem != CurrentSubItem) { X if (CurrentSubItem) X HighLightItem(CurrentSubItem,&SubWindow,HIGHLIGHTOFF); X else X if (TempItem) { X CurrentItem = TempItem; X TempItem = NULL; X HighLightCurrItemBehind(HIGHLIGHTON); X } X if ((CurrentSubItem = NewSubItem) != NULL) X HighLightItem(NewSubItem,&SubWindow,HIGHLIGHTON); X else { X HighLightCurrItemBehind(HIGHLIGHTOFF); X TempItem = CurrentItem; X CurrentItem = NULL; X } X } X if (MouseInWindow(&SubWindow)) X return; X } X X /********************* X * Check itemwindow. * X *********************/ X X if (ItemWindow.BitMapOk) { X if (MouseInWindow(&ItemWindow)) { X struct MenuItem *const NewItem = FindMouseItem(&ItemWindow); X X if (NewItem != CurrentItem) { X if (SubWindow.BitMapOk) { X CloseItemWindow(&SubWindow); X TempItem = NULL; X } X if (CurrentItem) X HighLightItem(CurrentItem,&ItemWindow,HIGHLIGHTOFF); X if ((CurrentItem = NewItem) != NULL) { X HighLightItem(NewItem,&ItemWindow,HIGHLIGHTON); X if ((NewItem->Flags & ITEMENABLED) AND X ((SubWindow.Items = NewItem->SubItem) != NULL)) X OpenItemWindow(&SubWindow,&ItemWindow, X (WORD)(CurrentItem->TopEdge - ItemWindow.TopValue), X SUBWINDOW); X } X } X return; X } X else /* mouse not in itemwindow */ X if (CurrentItem) { X if (SubWindow.BitMapOk) { X HighLightCurrItemBehind(HIGHLIGHTOFF); X TempItem = CurrentItem; X } X else X HighLightItem(CurrentItem,&ItemWindow,HIGHLIGHTOFF); X CurrentItem = NULL; X } X } X X /********************* X * Check menuwindow. * X *********************/ X X if (MouseInWindow(&MenuWindow)) { X const UWORD NewMenuNr = (MouseY - MenuWindow.TopEdge - BORDERSIZE)/MenuFontSize + 1; X X if (NewMenuNr != CurrentMenuNr) { X if (CurrentMenuNr) { X if (ItemWindow.BitMapOk) { X CloseItemWindow(&SubWindow); X CloseItemWindow(&ItemWindow); X TempItem = NULL; X } X ToggleMenu(CurrentMenuNr,CurrentMenuPtr); /* HIGHLIGHTOFF */ X } X if ((CurrentMenuPtr = FindMenuPtr(NewMenuNr)) == NULL) X CurrentMenuNr = 0; X else { X ToggleMenu(CurrentMenuNr = NewMenuNr,CurrentMenuPtr); /* HIGHLIGHTON */ X if ((CurrentMenuPtr->Flags & MENUENABLED) AND X ((ItemWindow.Items = CurrentMenuPtr->FirstItem) != NULL)) X OpenItemWindow(&ItemWindow,&MenuWindow, X (WORD)((CurrentMenuNr - 1) * MenuFontSize + MenuWindow.TopEdge), X ITEMWINDOW); X } X } X } X return; X} X X/*************************************************** X * MouseInWindow(Window) - Is mouse inside window. * X * * X * Input: * X * Window - Window to check. * X * Output: * X * return - TRUE if mouse inside. * X ***************************************************/ XBOOL MouseInWindow(Window) X const struct WindowData *const Window; X{ X IMPORT const WORD MouseX, MouseY; X X return ((MouseX > Window->LeftEdge) AND X (MouseX < Window->RightEdge) AND X (MouseY > Window->TopEdge) AND X (MouseY < Window->Bottom)); X} X X/**************************************************************** X * FindMouseItem(ItemWindow) - Check if mouse inside an item. * X * * X * Input: * X * ItemWindow - Window with items * X * Output: * X * return - Pointer to item under the mousepointer (or NULL). * X ****************************************************************/ Xstruct MenuItem *FindMouseItem(ItemWindow) X const struct WindowData *const ItemWindow; X{ X IMPORT const WORD MouseX,MouseY; X X const WORD MouseWinX = MouseX + ItemWindow->LeftValue; X const WORD MouseWinY = MouseY + ItemWindow->TopValue; X X struct MenuItem *Item = ItemWindow->Items; X X do X if ((MouseWinY >= Item->TopEdge) AND X (MouseWinY <= Item->TopEdge + Item->Height) AND X (MouseWinX >= Item->LeftEdge) AND X (MouseWinX <= Item->LeftEdge + Item->Width)) X return (Item); X while ((Item = Item->NextItem) != NULL); X return (NULL); X} X X/********************************************************* X * HighLightCurrItemBehind(Mode) - Highlight currentitem * X * behind subwindow. * X * Input: * X * Mode - HIGHLIGHTON or HIGHLIGHTOFF. * X * Output: * X * none * X *********************************************************/ XVOID HighLightCurrItemBehind(Mode) X UWORD const Mode; X{ X IMPORT struct WindowData ItemWindow,SubWindow; X IMPORT struct RastPort Rp; X IMPORT struct MenuItem *const CurrentItem; X X SwapBits(&SubWindow); X HighLightItem(CurrentItem,&ItemWindow,Mode); X SwapBits(&SubWindow); X} X X X END_OF_FILE if test 5178 -ne `wc -c <'Source/Select.c'`; then echo shar: \"'Source/Select.c'\" unpacked with wrong size! fi # end of 'Source/Select.c' fi echo shar: End of archive 2 \(of 3\). cp /dev/null ark2isdone MISSING="" for I in 1 2 3 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 3 archives. rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 -- Mail submissions (sources or binaries) to <amiga@cs.odu.edu>. Mail comments to the moderator at <amiga-request@cs.odu.edu>. Post requests for sources, and general discussion to comp.sys.amiga.