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.