2IMGCdrP@@@ )4   "D}, M ) TiTWiWg2 Ԣ` H i`iK ԩ`GៀL` HK!HKH@L,0 )i/ XA)Lb +)D\]g_ ?/"p@͸  ɜUUɛ`ff  ܪ330 ˩ʙppʙppp˩pwp̺ppwwwwp&Xb0qqwqqwqwqwwqwqwwwwwwwqwqqwqwwwqwwqwqwwqwqqwwwwwqwwqqqqqqqqqqqwqqqqqqqqqwqqqqqqqwqqwqwwqwqwqwwqwqwwwwwqqwqqwwqqwwwqwqwqqwwqqqqqqqqqwqqqqqqqqqwqqqqqqqqqqwwwwqwwqwwwqwwqqwwwwqwqwqqqwqqwwwqwqwwqqqGSINF.52Q' @*GSINFOS.II0]$ $ -GSINFOS.MENUSA,<,'COUV.52iAICONS8$ARTICLES7 /INFOS.VO$.$'CONTENU FINDER.DATAɺmpLES.PLUS# 2COUV.51oA++GREFn J.REY DELVERTo9 COPIEUR.ROM7o FINDER.ROOT opCONTENU o4o5`  !"#$%&'()*+,-./0123456]^,A 6B "]B"R"A"R;8 [ " U " U " U H " U " U " U " U " U " UH "" Uh " U " U " U"9>"O  +;i kGSInfos.II ne peut donc pas continuer. Tapez RETURN pour revenir au Finder : ;8 [H"WOڅh{i H"O"R5-{iH  {iH"O +;ik;8 [{iH"O+;ik;8 [ h څ h{iH"O "" "R"!+;i k;8" [,*ii e. e0  Ș )) ch)M2 hchch)A2 hchch)I2 hchch)N< 8hhh)H hchchh  - B H{i&HY" Uh hchch hchch)JJJɠ#""U""UH8e hchchi  7  HH+" U chh i  ch h hh  hchch)  !H H{iH{i!H'" Uh ch h i d$0#/+;i.k53/Pas de bloc MAIN trouv dans l'image *0./^Continuer;8d [jhH">( B H{ihH Y" UhijhH"WOڅh{iH"O#%'"_Z>#%%'HhhI. B H{ihH Y" Uh" {i H"OHH H*BH " Uhh a " HH" """ U,Jhchc+" UJhchc+" U#H H)" U%'HhhK hh HH H{iH{i H'" Uh%'HhhH )" U hh} " UH"HHhchc" H8hhh{iH{i H'" Uh_%'Hhh> HHjhH"JI" UH" U0BHHH%" Uhchchhl*HH%" Uhh)H*{i7H " UhI,Jhchc+" UJhchc+" UH*" Uh" UH" Uflek+;ijk53/Image *0 inexistante./^Continuer53/Le fichier *0 n'est pas une image ou est dans un format non trait./^ContinuerM{moire insuffisante pour charger l'image.Erreur @ la lecture de l'image.;8  [) )")?H"P 0::   c8:hh)HH"Oڅh d"hhh) )")  ) "H"P &H"PH Hhchch "&" H"PH Hhchch H"5XHhhhHHhh "")  HH"`PHH"O "" HH"O)p  :)  " !+;i kSyntaxe incorrecte : param}tre absent.Syntaxe incorrecte : param}tre absent.M{moire insuffisante pour charger les menus.;82 ["> -"{i HJ" ک) J J"O)  Jhh-)H"R)  J"#P"5X  "B B  BB   " )  ) {iHhchch\)  {iHhchchN)  {iHhchc i0)  {iHhchch)  1{iH"O{iH> iH)HH" ih BBH i hhh BBgCJ"#PB B K""5X " BBHHhhF BBd"] BBihhh1ihhh\)  N) {iHhchcd""Ui0)  {iHhchcd""U ""Ui0)  {iHhchc ""Ui0)  {iHhchch )  {iHhchch)  {iHiH,)H{iHH" chhiH,)H{iHH" chhi H)HH" ihwJ"#PX{iH)HH" H"9O<"Z0B0B0BH"X J"#PF{iH)HH" H"+H"XJ"#Pj2B,)H{iHH" chh&B)HH" 6J"#P,,B)HH" J"#P, B)HH" J"#P+B)HH" zJ"#P+B)HH" <J"#P)B)HH" "L "B B 4"+;i2k1/GSInfos.MenusGS Infos II ne peut fonctionner sans le fichier GSInfos.Menus qui doit se trouver dans le meme r{pertoire que le programme GSInfos.II.MENUM{moire insuffisante pour charger les menus.Il ne peut y avoir que 6 menus d{finis dans le fichier GSInfos.Menus. == \N299 . >> ARTICLESyntaxe incorrecte : Les articles doivent etre associ{s @ un menu.M{moire insuffisante pour charger les menus.== p PAUSEIMAGECONTENU p TITREABOUT1ABOUT2ABOUT3ABOUT4Erreur lors de la lecture du fichier GSInfos.Menus.Aucun menu n'est d{fini dans le fichier GSInfos.Menus.;8 [ " U BB  HH H-" U " U   F H H" U  +" U    ?HH2-" U " UHH-" U " UHHQ-" U " U B." U" U" U&B (B 1" U" UH" Uh*" U+;ik>> Edition \N3 ==Annuler\N250*ZzD ==-\DN256 ==Couper\N251*XxD ==Copier\N252*CcD ==Coller\N253*VvD ==Effacer\N254D . >> Fichier \N2 ==Contenu du numro\N261 ==Rserv aux non-membres...\N262 ==Fermer\N255*WwD ==-\DN256 ==Imprimer un article...\N263*Ii ==-\DN256 ==Quitter\N260*Qq . >>@\XN1 ==A propos de GS Infos...\N257*?? ==-\DN256 . ==-\DN256 ==Afficher presse-papiers\N259;8 [{iHF:J" UHH{iH " Uh h H" U(:" U,B .Ba" U.B,BH" U:" U{" U(:" U" U" U (:" U" U" U B B" 2:" UB BH" UB B" <:" UBBH" UB B" F:" UBBH" UB B" P:" UBBH" U " U d:" U" U" U x:" U" U :" U) " U{iH|UdJ" U H{iH k  " UH" Uh H " U+;ikGS Infos (c) GS Club 1994v2.1Le magazine du GS pour les membres du club exclusivement.Ont particip ce numro double :Editeur : GSClubCe programme contient des lments de la librairie ORCA/C,copyright 1987-1993 Byte Works, Inc., utiliss avec sa permissionVu;8 [{iHP0J" UHH{iH " Uh h H" U{iHJ" UF H{iH{iH " U:" U=#" U:" Um#" U#:" U#" U-:" U#" U7:" U#" U A:" U" U$" U K:" U $" U U:" UE$" U _:" U~$" U i:" U$" U s:" U$" U:" U" U%" U{iHixJ" U H{iH ?% " UH" Uh H " U+;ikPour recevoir GSInfos, devenez membre du club !Cotisation annuelle : 400 F.Vous bnficierez des services du club : des domaines publics gratuits; vous recevrez GS Infos tous les deux mois.ATTENTION :GS Infos et ses articles ne sont pas du domaine public;cette disquette est l'organe de liaison interne du club.Si vous ne dsirez pas devenir membre, effacez-la.Le GS Club est une association loi 1901,et un groupe d'utilisateurs agr Apple.GS CLUB 6 Impasse la Croix Pommier 94120 FONTENAY-SOUS-BOISVu;8 [{iHF(:iJ" UHH{iH " Uh h H" U :" U " U&" U" U:" U&" U(:" U8'" U2:" Uy'" U<:" U'" U{iH-<J" U H{iH ' " UH" Uh H " U+;ikVous voulez imprimer un article : Rcuprez le fichier avec un traitement de texte et imprimez-le.Les fichiers sont des fichiers de type texte avec fonte tendue.Choisissez une fonte approprie et supprimez les retours chariots ventuels.Vu;8. [{iH " Ud-{i+-+-+8{iHU" U2%{i%H"Ohh ə Yd-{i'+J8hh-+HHhchc-+hhh{i%H"O{i HJ2" Lb O+"  ʽJ)  ک ) J J!# ) 6De q) ) !#Ș!8hhh#!#!8hhhi  :" UH" U#!chh8ʆ !#m) ) *#!)  )   p Yd-{i'+J8hh-+HHhchc-+hhh{i%H"O02/1+;i0kErreur lors de la lecture de l'article.;8d [jhH">- B H{ihH1Y" Uh  B0::NN" Unl%Hhh8   H"+9" U*" U@ H   H"w+.2" U*.)-+;i,k53/Menu non trouv dans la liste !/^Continuer53/Article non trouv dans la liste !/^Continuer;8 [ V"vo4B2BH(B&BH"w+Y"o S"C%MHH" Uh h 0"M2& 8 d5H`4C5&5455 5C5," U+;ik;8 [HH" UhhBB3Ș#HHL" UhIx1" U1" U1" U1" U1" U1" U B " U," Uv0" U0" U0" U0" U0" U0" U B " U," UBB+;ik;8< [#h%I"5 B0::HHk" Uh h H{iH" Uh 1!H#h#hH"Th"4* 8  7H`l77777777l77M+;i<k;8  [${8hh 8hh {iH"O"RV," U :" U$8" U8" UH "" Uh"$!#+;i"k*/System1/GSInfos.MenusRemettez la disquette GSInfos et appuyez sur la touche retour. Vous avez un seul lecteur, remettez la disquette SYSTEME et appuyez sur retour.;8* [  !#%')" U"R E<"H" Uh*B"R c<"" U"R <"HH*BH " Uh"Bh$B"R <"$B"B*BH" U"R <"iH*BH" U"R <"" U#F:" U" U" U=" U#Z:" U=" U"7{i H" U"R \="" U*BH" U"R ="*BHiH" U"R ="*BHiH" U"R ="*BHiH" U"R ="*BH" U"R ="*BHiH" U"R >"" U" U"7+;i*kErreur d{marrage Tool LocatorErreur d{marrage Memory ManagerErreur d{marrage Misc ToolsErreur allocation m{moire pour les outilsErreur d{marrage QuickDraw IIErreur d{marrage Event ManagerA Certains...Si vous n'tes pas membre du club, soyez positif, prenez une adhsion !Erreur lors du chargement des outilsErreur d{marrage Window ManagerErreur d{marrage Control ManagerErreur d{marrage Menu ManagerErreur d{marrage Line EditErreur d{marrage Dialog ManagerErreur d{marrage Font Manager;8 [" U" U" U" U" U" U" U" U" U" U" U$B"BH" U" U*BH" U" U+;ik;8 [*{iH"O)R) v?") B B2) B B BЀ+;ikGS Infos II n{cessite le syst}me 3.1 au minimum. ;8 [ BB0B(B&B4B2B.B,BB BBBBBBBBB HH" Uh6D+;ik;8 [ BB v H"X H"X   H"X  H"X H"X   H"X &B (B (B&BH"X2B 4B 4B2BH"X,B .B .B,BH"X B BB BH"XB BBBH"XB BBBH"XB BBBH"X+;ik;8 [">"G9" U"?"9" U"mH" Uh"7 " U"@"9>+;ikN J"Xkl(d@ ; [O!O#O" U+;ik H H"Phhk;8 [K0RVQV0QV  +;ik ATLXHH; [  e    +;i k; [  e+hhhk; [       +;ikHH; [    +;i k; [  +hhk; [   )QU)   )-+  H HHHH H H"gQU hh8+;ik; [   )QU)   )+  #  )0 )_X )_0X i  k )0]:)_AP[K6)?HHHHHHHH "hhhze   U  +;ik UkhQU))_kkH ATh\XKzZڭbXH`XH; [TT"TWi # " Ȁ " Ȁ  ?TZ8czHHHUH "$ Out of memoryES "\Xh h  ;T=Tm?T  Ȁ  =T ;T )s  "   i  ")0"!)    =T ;T +hhkKTHTH ;[$TjhHHhk֯YWWWYWHWWH"+hh`uW[WWWWWWWSWUWWWWWWWk; [ & dd  !F f+hhk'H; [*8e쪥+zzkh@k(((((‚Ą)WWWW  WWW; [8"Y"X+hhk "/["F\hhklXrXzX   XXk X")XXHX "X"ZUH"h`HHH8H; [  "Z % Q8  0 "] "] "Ze i @< "] "]   "ZZ "]"Y+;i kHH8H; [n^ȷp^ȷ HH"+hhhhkH; [E  ȥ  +;ikH; ["^r^ȿt^r^t^+hhkKn^p^&r^k ;8[:IȅIFejf0I{ih[k{ih[@kHiH;8  [  "^ r^t^O$>"F\^^ȩȗ na i  U GEt^r^ "]F e i  "Z "Z8  0 E r^t^ "]) i+;iki]]]HH]H]HUH]@@]H "hh] ]kHH; [n^ȗp^ȗȥȥȩn^p^ n^p^i+zzzzkHHHHH; ["^r^t^  ȷݠr^ȷt^ ȷ+;i kH ;[Fe+kK UbX`X;iX HUH "];[tXc:zZګH "htXHitX "X rXfXdXXXXXXXXXkInsufficient bank zero memory=^ "V:JJJJkD Mjn2eq=u0G|;Q L?+@ 0M&0Cr+>j|-4j+psa"I_) "/an *7S`{:h2FZnJ &I)^-dz~S &JPhnv(cm JTXiov!NSZ`ejo},06jrB(5BR_lyтG\f (Sgy:\6YzՁN 1<[(![^z}v| :@MSY 5;Tsy 1S]jr|( !)38;GW]gw} -03?BEWZ]iv3DW%5;EU[eu{"(2BHRbhr 3 h  &,6FLVug&+U+ $*Rfl.M{ q*BWpx{4a`VY:LV(2t :dfhjlnpr %2?LOdt-Gd-:DLVd,36S^k '4BEP]dx*4IS]gq{08JRZ #&"%*-69>AJMRU^afiruz}irwWvy}-2EI׃ŁȂ  #&),/258_|Y  va  JJV J JK d  -J9J`JJ%1>CJKsyJJ7=JJPV2B&BJ,BJ B28JQBpvJBJB 4P2oQ&aZ{z) k  F8!=#X!m#x!#!#!#!$" $%"E$E"~$e"$"$"%"?%%&%& &8')&y'I&'&'d(J(J(O+0)J*J+1+N+N+6F!,J',2c,Ni,&2,F,52,N,F2~-6B1N1N24I347{878788I889E<9c<9<):<h:<:<:=;=1;\=Z;=;=;=;=;=<>?v?|OQVTSESVTjTYTjTTWWTWTW\^=^ARTICLESv ' '&MAC.52R 7(ANNONCES< Z+7,GALACTICA.52 $.7EDITO))7*FOCUS.INFO(7-JUICEDGS.INFO` < 7/HYPERQUART.INFOG 7$AIDEZ5,-7LES.PLUS7+GSINF.52BIS{   7.DOMAINE.PUBLIC 9~97CONTENU ++7ICONSv' 'WDESKTOP9//8FINDER.DATAHB9'p*/8.GSINFOS52.ICONI '8:ppdosE>x>t  ?@i@Hz @z@Hy)@As+[@, @4x Dont Fret!.(C) 1997 Kelvin Sherlock ksherloc@m=>?@^_Je vends (les logiciels sont tous des originaux accompagns de leur documentation, le matriel fonctionne impec); le port est en plus mais on peut passer prendre les articles chez moi (rgion parisienne) pour viter les frais. Matriel :  Carte RAMkeeper de Applied Engineering : 100F  Carte stro : 100F  Lecteur 3 pouces 1/2 : 500F  Joystick Apple : 50F  Clavier Apple IIGS standard : 100F  Souris Apple : 50F Utilitaires GS :  Kangaroo (extension des botes de dialogue Standard File, en franais) : 100F  Platinum Paint (version entirement en franais) : 100F  TypeWest (polices TrueType pour Pointless) : 50F  Printshop GS : 100F  Design Your Home Architecture (logiciel de dessin technique) : 100F  GSPaint et GSWrite : 30F chaque, 50F les 2. Jeux GS :  Chessmaster 2100 (checs) : 50F Logiciels 8 bits :  Arlequin (dessin double haute rsolution), Talk is Cheap (programme de tlcommunications), Prosel 8 (lanceur de programmes et utilitaires disques et fichiers), PFS: Fichier (base de donnes), Budget Familial, MAX (moniteur tendu, MicroScrabble (jeu), Copy II+ (copieur de disquettes protges et utilitaires), Apple SuperPilot (pour programmer dans le langage Pilot) [programmes et documentations en franais, sauf pour ProSel 8 (doc seule en VF) et TIC] : 20F chaque, 150F les 9.  AppleWorks 1.4 Franais : 100F Livres et revues :  Clefs pour Apple IIGS : 30F  Systme ProDOS de lApple IIGS : 30F  Using AppleWorks GS : 30F  Le IIGS pluch : 100F  Exploring GS/OS and ProDOS 8 (exemples en assembleur) : 60F  Exploring the Apple IIGS (exemples en assembleur) : 60F  Advanced Programming Techniques for the Apple IIGS ToolBox (exemples en assembleur, Pascal et C) : 60F  Les 3 livres ci-dessus pour 150F  BASIC Computer Games et More BASIC Computer Games (environ 200 programmes de jeux programmer en BASIC, ou pourquoi ne pas sinspirer des ides pour faire des jeux GS en mode graphique !) : 50F les deux  La pratique de lApple II : 10F  Apple Pascal sur le bBCDtitre "GSInfos n52 et 52 bis (c) GS Club 1997" about2 "P.Manet, D.Melchior, J.Rey, B.Tomeno " about3 " " about4 Des articles ! des articles ! des articles ! (=0 contenu "Contenu de ce numro", 1/contenu pause 10 image 1/couv.52 menu Sommaire article Editorial, "L'ditorial du Prsident", /GSINF.52/Articles/Edito article Aide, " Appel laide", /GSINF.52/Articles/aide article Galactica, "Par D.Melchior...", /GSINF.52/articles/galactica.52 article HyperQuaterly, "News V.O...", /GSINF.52/articles/HYPERQUART.INFO article JuicedGS, "News V.O", /GSINF.52/articles/JUICEDGS.INFO article Annonces, "Les petites annonces", /GSINF.52/articles/annonces menu Divers article Mac, "ParJ.Rey, /GSINF.52/articles/Mac.52 article LAMP de Mai en VO, "Par P.Manet.", /GSINF.52/INFOS.VO/LAMP.MAY97.A2 article LAMP de Juin en VO, "Recueilli par P.Manet, /GSINF.52/INFOS.VO/LAMP.JUN97.A2 menu "Le coin hard et soft" article Disques Focus, "Les prix.", /GSINF.52/ARTICLES/FOCUS.INFO article Les plus, Les softs de GS Infos 52 , /GSINF.52/articles/Les.plus article "Domaine Public", "Les domaines publics de GS Infos 52", /GSINF.52/articles/domaine.public article GS Infos 52BIS,Divers, /GSINF.52/articles/GSINF.52BIS ;FGole.uvm.edu$:GSINF.51:Les.plus:DontFret:DontFret/""""2/#"2#/""2""#/"""2""#"/"#32"/"#32"/""#32""""""/""""/"""/""""/ <<<303 3330 33 3 0 <0 <H  DontFret*^8Dont Fret! Tuning File(FD$*GSINFOS49.ICONtJKLMNOPQ */GSINFOS/GSinfos GSINFOS.II%$ffffoffffffffffffffwwwzwwzwwwzwzww /GS.INFOS/GSinfosGSINF*OSDU]UU]QU]UU]UU]UU]UUUUUUUUUUUUUUUUUUUUUUU\UU\UUU\UUU\UU\U"/""/""""ofofoo/ooofooff"/"/""/oofoo//oofooffoooooo"/"//"/ooffoooff STUVWXYApp Sizer ********* Nous, toujours utilisateurs de notre cher GS, sommes toujours un peu drouts par les messages que nous dlivre le Mac OS. Le GS distribue la mmoire de faon dynamique aux applications qui, dans la mesure o des pages sont disponibles, sattribuent de lespace supplmentaire si ncessaire. Avec Mac OS vous pouvez bien avoir 80 Mo de mmoire vive, vous nՎchapperez pas de temps autre au message Pas assez de mmoire pour.... au lancement dune application ou au chargement dun gros fichier, ou bien encore au moment deffectuer une opration de transformation dans votre logiciel prfr de dessin vectoris. En effet cest lutilisateur de fixer la taille mmoire alloue chaque application en fonction du type de traitement envisag ou de la taille des fichiers que lon compte charger. Cette opration est simple puisquil suffit dindiquer la taille souhaite dans la fentre dinfos obtenue en cliquant une fois sur lapplication et en activant la fonction Lire les informations du menu Fichier du FINDER ou en tapant Commande - I. Mais, comme la plupart du temps vos applications sont loges dans des sous dossiers difficilement accessibles, une fois que vous avez chang la taille dun programme vous ny retouchez plus et risquez de nouveau un problme lorsque vous souhaitez lancer plusieurs applications. Pour contourner cet inconvnient PIERCE Software nous gratifie dun excellent tableau de bord en shareware ( $ 19.95 ), du type de ceux dont on se demande comment on pouvait faire avant. Le tableau de bord lui-mme ne vous donne accs quՈ laide, la notice shareware et le choix entre deux touches: Control ou Commande. Ensuite tout est simple, vous envisagez de charger de gros fichiers de dessin dans ClarisWorks ? il suffit de maintenir la touche Control ( ou Commande suivant votre choix ) pendant que vous double-cliquez sur lapplication, son alias ou un fichier gnr par elle. Une fentre souvre alors indiquant: La taille mmoire de votre Mac Le plus large bloc inutilis La taille mmoire dapplication suggre La taille mmoire dapplication minimale La taille mmoire dapplication souhaite Cette dernire est dj prslecte et il suffit dentrer la nouvelle valeur et cliquer sur lun des quatre boutons disponibles: OK La valeur est accepte et lapplication lance Save La valeur choisie est sauvegarde Revert Retrouve la valeur prcdente en cas derreur de frappe Cancel Annule tout et lapplication quitte Lintrt du systme tient dans le fait que si vous ne sauvegardez pas la valeur choisie, celle-ci ne sera prise en compte que pour votre session de travail et donc il ny a plus de risque de se retrouver avec une crise du logement au moment de lancer plusieurs applications quand on a oublier de faire dgrossir ses programmes. Essayez AppSizer, vous ne voudrez plus vous en passer. J. Rey [\Stphane Barloy a des problmes avec son Quickie, ou plutt le logiciel qui va avec. Si le NDA fonctionne correctement, lapplication GS/OS, elle, abandonne en cours de numrisation et seule une partie de limage est saisie. Si quelquun a t confront ce type dincident quil nous crive ou contacte directement Monsieur Barloy. Son adresse est dans lannuaire 95620 Parmain. Robert Santelli cherche un pilote pour GS/OS faisant fonctionner une jet dencre couleur en couleur. Si vous en connaissez un, nous aussi, nous sommes trs intresss, crivez-nous.pBALLOONMAKERv1' '^BALLOONMAKERGSU|x9](GENEVA.9 ]out des doigts : 10F  Apple II Users Guide : 10F  Guide Pratique de VisiCalc : 10F  Les 4 livres ci-dessus pour 30F Anciennes revues Apple II; je prfre vendre les collections compltes plutt que les numros individuellement, mais cela est quand mme possible; dans ce cas, je vends chaque numro pour 5F :  Nibble (27 numros : fvrier, avril, mai, aot dcembre 88, janvier 89 aot 90 sauf juin 90) : 100F la collection.  A+ (25 numros de juillet 89 septembre 91 sauf octobre et novembre 89, ainsi que dcembre 1990, mais avec novembre 92) : 100F la collection.  Poms (28 numros de 14 50) avec les disquettes des numros 41 50 : 100F la collection. Philippe Manet 40 rue Victor Hugo 94700 Maisons Alfort (1) 43.76.61.08 aprs 19h manet_p@decus.fr abcdefghLe numro de printemps de la revue trimestrielle Juiced GS est sorti. Elle compte actuellement 281 abonns. Les numros de 1996 sont disponibles. Labonnement depuis la France vous cotera $20 adresser : Max Jones Juiced.GS 2217 Lakeview Drive Sullivan, IN 47882 les cartes de crdit ne sont pas acceptes. -------------------------------------------------------------- Announcing ... ===== Juiced.GS, Volume 2, Issue 2 ===== The Spring 1997 edition of Juiced.GS, the Apple II world's premier IIGS-specific magazine, is now arriving in subscriber mail boxes in the U.S., Canada, Mexico, and other points around the world. This issue is being mailed to 271 paid subscribers in 43 states and 10 foreign countries. Here's what you'll find in this issue: ============ FEATURES Cover Story: The Animated Apple ... Longtime Compuserve sysop Joe T. Walters takes users through the lively process of converting animation files of various formats into Paintworks animation files that can be viewed on the Apple IIGS. Walters discusses how FLI files can be converted with a useful IIGS utility, and gets a little help from his friendly Macintosh in doing conversions for Quicktime, AVI and MPEG. Graphics: Using Platinum Paint to do cool things to type ... Apple II programmer and graphic artist Bret Victor reveals one of his painting tricks and discusses a few techniques for using Platinum Paint. Not only is this article entertaining, it invites the user to follow along in Platinum Paint in a step-by-step tutorial. Hardware: Hacksaw hacking the Stealth GS ... Apple II hardware guru Stephen Buggie explains how IIGS sophistication can be added to the IIe by exchanging its motherboard for one specially designed for IIe casing. COLUMNS Desktop Publishing: Working with white space ... Dave Bennett, an associate professor of journalism, explains how the desktop publisher should use white space to add emphasis and contrast to documents. My Home Page: A productive season ... Juiced.GS editor and publisher Max Jones recounts a busy first six months of 1997 in which software publishers -- commercial, shareware and freeware -- have brought a number of new and amazing products to the IIGS marketplace. II Be Named Later: "Real" geeks ... Our columnist, Ryan Suenaga, muses about the many and varied qualifications for becoming a "real" geek. DEPARTMENTS Shareware Spotlight: Shifty List 2.0, SIS Bookmark Editor, and StolenBASE are the featured programs in the spotlight this issue. DumplinGS: All roads lead to Kfest ... From the latest on the planning phase for Kfest '97 to news about that long-awaited SuperConvert update, if it's being talked about in the Apple II world, you'll read about it in this compilation of newsy notes. Letters from the Land of Rom ... Juiced.GS readers ask questions, get answers, and tell us what's on their minds. ============ Juiced.GS is a quarterly, printed publication available by subscription only. A subscription for 1997 is $14 in the U.S., Canada or Mexico, $20 elsewhere. To subscribe, send a check or money order U.S. funds to: Max Jones Juiced.GS 2217 Lakeview Drive Sullivan, IN 47882 Makes checks or money orders payable to Max Jones. Sorry, no credit cards or purchase orders can be accepted. A complete set of 1996 issues is also available for $14. If you would like to purchase only a specific single copy (or copies) of 1996 issues, they are available for $4 each. An index and brief description of articles published in 1996 are available on the Juiced.GS web site. See URL below. Apple II Forever! Max Jones Juiced.GS Genie: M.JONES145 -- Delphi: JuicedGS Internet: m.jones145@genie.com -or- juicedgs@delphi.com World Wide Web: http://users.ids.net/~kerwood/juiced.gs ajklmzwzzzzzzzzwzzwwwwzzzzwzwzzwzzzzwzwzzwzzwzzzwzzzzzopqrstuvwxyz{|}~ |||||| |||||| || || |||||| |||||| || || ||| || || || || ||| |||| |||||| || |||| Your || || || || ||| || || |||||| |||||| || || |||||| |||||| GenieLamp Computing || |||||| || || |||||| RoundTable || || || ||| ||| || || || |||||| |||||||| |||||| RESOURCE! || || || || || || || ||||| || || || || || ~ WELCOME TO GENIELAMP APPLE II! ~ """""""""""""""""""""""""""""" ~ A2/PRO_DUCTIVITY: More Decoding ~ FILE BANDWAGON: Top 10 Files for April ~ REFRACTIONS: Copyright and Permissions ~ HOT NEWS, HOT FILES, HOT MESSAGES ~ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//////////////////////////////////// GenieLamp Apple II ~ A T/TalkNET Publication ~ Vol.6, Issue 64 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Editor...................................................Ryan M. Suenaga Editor Emeritus................................................Doug Cuff \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//////////////////////////////////// ~ GenieLamp IBM ~ GenieLamp ST ~ GenieLamp PowerPC ~ ~ GenieLamp A2Pro ~ GenieLamp Macintosh ~ GenieLamp TX2 ~ ~ GenieLamp Windows ~ GenieLamp A2 ~ LiveWire (ASCII) ~ ~ Member Of The Digital Publishing Association ~ GE Mail: GENIELAMP Internet: genielamp@genie.com ////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ >>> WHAT'S HAPPENING IN THE APPLE II ROUNDTABLE? <<< """""""""""""""""""""""""""""""""""""""""""""""""""" ~ June 15, 1997 ~ FROM MY DESKTOP ......... [FRM] HEY MISTER POSTMAN ...... [HEY] Notes From The Editor. Is That A Letter For Me? A2/PRO_ductivity ........ [A2P] REFRACTIONS ............. [RFR] A2Pro Bits & Bytes. Pretty Please? FILE BANDWAGON ...........[BAN] LOG OFF ................. [LOG] Top 10 files for April 1997 GenieLamp Information [IDX]"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" READING GENIELAMP GenieLamp has incorporated a unique indexing system """"""""""""""""" to help make reading the magazine easier. To utilize this system, load GenieLamp into any ASCII word processor or text editor. In the index you will find the following example: HUMOR ONLINE ............ [HUM] Genie Fun & Games. To read this article, set your find or search command to [HUM]. If you want to scan all of the articles, search for [EOA]. [EOF] will take you to the last page, whereas [IDX] will bring you back to the index. MESSAGE INFO To make it easy for you to respond to messages reprinted """""""""""" here in GenieLamp, you will find all the information you need immediately following the message. For example: (SMITH, CAT6, TOP1, MSG:58/M475) _____________| _____|__ _|___ |____ |_____________ |Name of sender CATegory TOPic Msg.# Page number| In this example, to respond to Smith's message, log on to page 475 enter the bulletin board and set CAT 6. Enter your REPly in TOPic 1. A message number that is surrounded by brackets indicates that this message is a "target" message and is referring to a "chain" of two or more messages that are following the same topic. For example: {58}. ABOUT Genie Genie has pricing plans to fit almost any budget. Genie's """"""""""" services include email, software downloads, bulletin boards, chat lines, and an Internet gateway included at a non-prime time connect rate of $2.75. Some pricing plans include uncharged online connect time. As always, prices are subject to change without notice. To sign up for Genie, call (with modem) 1-800-638-8369 in the USA or 1-800-387-8330 in Canada. Upon connection wait for the U#= prompt. Type: JOINGENIE and hit RETURN. The system will then prompt you for your information. Need more information? Call Genie's customer service line (voice) at 1-800-638-9636. GET GENIELAMP ON THE NET! Now you can get your GenieLamp issues from """"""""""""""""""""""""" the Internet. If you use a web browser, connect to "gopher://gopher.genie.com/11/magazines". When using a gopher program, connect to "gopher.genie.com" and then choose item 7 (Magazines and Newsletters from Genie's RoundTables). *** GET INTO THE LAMP! *** """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" ///////////////////////////////////////// Genie_QWIK_QUOTE ///// / "I'm still organizing right now." / / / / "'still' implies there's an end." / /////////////////////////////////////// C.KNOBLOCK & A2LAMP /// [EOA] [FRM]////////////////////////////// FROM MY DESKTOP / ///////////////////////////////// Notes From The Editor """"""""""""""""""""" by Ryan M. Suenaga, M.S.W., L.S.W. [A2LAMP] >>> I CAN BEGIN AGAIN <<< """"""""""""""""""""""""" I recently celebrated the first anniversary of my graduate school commencement with the realization that I had stopped doing a lot of things that were important to me due to the time crunch school created. . . and never resumed them. I concluded that I simply replaced one thing I was obsessed with another; once I was done with graduate school, I became obsessed with getting _GenieLamp A2_ done. I made a conscious decision to start those things up again, the first of which was to invite an old friend of mine over for dinner. Lianne and I have known each other since 1989, when we both started doing part time work for a social service agency here in town. I was still and undergrad, and she, a few years older than me, was just starting her graduate program in social work. We've followed similar paths, though she's always been a few steps ahead of me: she finished her graduate program before I started, she got her social work license before I became eligible, and she now has her national certification, a year before I can even apply. And while we've never lost track of each other, we've gone as long as a year between phone calls. So, instead of being involved in an electronic conference on a national online service talking about my favorite computer and my labors editing an electronic newsletter, I took a night off in late spring so Lianne, her husband, and her one year old daughter could come over to have some home cooked vegetarian spaghetti and to restart some old traditions. I found that since the last time Lianne had been over for dinner, we both had finished graduate school and gotten our careers in order; she had gotten married and had her baby; and I had gone through major relationships which hadn't panned out. But although we're clearly different people than we were eight years ago, we still have importance to each other. And there's a need to break from the habits of what you're obsessed with to return to the things that're really important. [*] [*] [*] I must start business this month with an apology to Tony Ward, the A2 librarian. In quoting him in the "HEY MISTER POSTMAN" column last month, I totally butchered what he had originally written. I don't have much of an explanation, except that I composed most of last month's issue on a Macintosh and it crashed several times before I was done, which makes me wonder if it's bad karma to compose an Apple II periodical on a Mac. Onto new business: with this issue of _GenieLamp A2_, we also welcome our readers to the Official Unofficial home of _GenieLamp A2_ on the World Wide Web. Point your web broswer to: http://people.delphi.com/rsuenaga The page is not yet complete, but when it is done, you will find links to home pages of our staff, a history of the publication, email links, and archives of the complete _GenieLamp A2_ collection. It is 100% lynx friendly, compliant with Nathan Mates' _Viewable on A Real Apple II_ guidelines, and will eventually be enhanced for viewing by the _Spectrum Internet Suite_. [*] [*] [*] Finally, in case you've been living under a virtual rock the last few months, I thought I'd remind you about the annual Apple II event of the year: KansasFest 1997 is approaching rapidly. Mark your calendars for July 30 through August 3, and plan on joining us over at Avila College in Kansas City, Missouri -- Ryan Genie Mail: A2LAMP Internet: a2lamp@genie.com __________________________________________________________ | | | LES.PLUSv# '  'BALLOONMAKER])2FIRSTSTARTB) "PICTURESAVERC$ x"QUIETDISKD+ "GIFTOIFF^& E+7FINDER.DATA,p/7 REPRINTING GENIELAMP | | | | If you want to reprint any part of GenieLamp, or | | post it to a bulletin board, please see the very end | | of this file for instructions and limitations. | |__________________________________________________________| ASCII ART BEGINS _____ _ _ ___ ___ / ____| (_) | | / _ \|__ \ | | __ ___ _ __ _ ___| | __ _ _ __ ___ _ __ | |_| | ) | | | |_ |/ _ \ '_ \| |/ _ \ | / _` | '_ ` _ \| '_ \ | _ | / / | |__| | __/ | | | | __/ |___| (_| | | | | | | |_) | | | | |/ /_ \_____|\___|_| |_|_|\___|______\__,_|_| |_| |_| .__/ |_| |_|____| | | |_| ASCII ART ENDS [EOA] [HEY]////////////////////////////// HEY MISTER POSTMAN / ///////////////////////////////// Is That A Letter For Me? """""""""""""""""""""""" by Ryan Suenaga [A2LAMP] o BULLETIN BOARD HOT SPOTS o A2 POT-POURRI o HOT TOPICS o WHAT'S NEW o THROUGH THE GRAPEVINE o MESSAGE SPOTLIGHT >>> BULLETIN BOARD HOT SPOTS <<< """""""""""""""""""""""""""""""" [*] CAT 3, TOP 32 ....... Disk of the What? [*] CAT 4, TOP 46 ....... A Close Call for Appleworks? [*] CAT 5, TOP 3 ....... Tiger Learning Computer [*] CAT 35, TOP 26 ....... Spam, Spam, Spam, Spam, Spam, Spam. . . . [*] CAT 35, TOP 28 ....... Which Road to 56k? [*] CAT 43, TOP 16 ....... Pages or Pagers? [*] CAT 44, TOP 7 ....... The Excitement Builds >>> A2 POT-POURRI <<< """"""""""""""""""""" EUNICHS WHO LOVE UNIX CONTINUED I have a question regarding the Internet """"""""""""""""""""""""""""""" and Lynx: [I can't recall where I read about this, SSII or in an answer you gave here on Genie][I've got it saved _somewhere_ -- for all the good that knowledge does me.] You mentioned a method for downloading [IMAGE]s via Lynx. What was it? I tried (D)ownloading (a JPEG image); but, how do I go about saving the picture to disk? I have a IIgs and use Proterm 3.1. Mike Sakarias, Juneau Alaska (M.SAKARIAS, CAT28, TOP4, MSG:276/M645;1) >>>>> Depends on how you have Lynx configured. """"" Default, Lynx can usually save to your workspace, and when you quit Lynx, you can download it from your isp by your usual method (ZModem in my case). You can also configure Lynx to send the file to you via XModem, YModem, or ZModem. Someone else will have to help you with that, though. Took me a long time to get mine right :) Ryan http://www.keystroke.net/~rsuenaga "There's no shortage of windmills to tilt at."--Logan ANSITerm and CoPilot v2.55 (A2LAMP, CAT28, TOP4, MSG:277/M645;1) >>>>> Lynx can be configured to do darned near anything, provided you can create your own lynx.cfg file. I've never tried it on Genie, but I'm asuming it won't work because we don't have permanant private storage. If you use Lynx on an ISP and want to customize it, here's what you do. Find your ISP's default lynx.cfg file and copy it to your home directory. If you don't know where it's located, try 'whereis lynx' to find it. Once you have a copy of your own, you can customize it anyway you want, but you have to tell Lynx at startup time where your personal lynx.cfg is located. Like this: 'lynx -cfg=/mydir/lynx.cfg'. You can make that an alias and put it in your .login (or .profile or whatever) file so you don't have to type it all out everytime. In the lynx.cfg file there is a section called "Downloader definitions". This lets you customize the options presented when you ownload a file. Here's what mine looks like for adding a zmodem option: DOWNLOADER:Zmodem download: /home2/tward/lynx.sz %s %s:TRUE That's pretty cryptic, let me try to explain. 'DOWNLOADER' is required. The colons are separators. 'Zmodem download' is what will be displayed on the screen as an option when I ownload a file. '/home2/tward/lynx.sz %s %s' is the command that will be run when I choose 'Zmodem download'. 'TRUE' (or 'FALSE') determines if this downloader definition will be availble for anonymous users. You're asking, "Why can't I just use 'sz' as the command name instead of that '/home2/tward/lynx.sz %s %s' mess? Good question. You see, when lynx downloads a file from a remote site, it saves it somewhere on your ISP's system (a /tmp directory somewhere) with what is probably an unrecognizable filename like temp06783541. But Lynx is a little smarter than that, it provides a "suggested" filename that matches the real filename. The first '%s' is the ugly temporary name, the second '%s' is the nicer "suggested" filename. However, we can only pass the first one to sz, which would result in the incorrect filename when you download. Sooo...we need a little "stub" command in our home directory to grab that second "suggested" filename and pass =that= to sz. I call that stub program 'lynx.sz' but you can call it anything you want. Here's what it looks like: cp $1 ~/lynx.temp/$2 sz ~/lynx.temp/$2 rm ~/lynx.temp/$2 Ouch, that's ugly! Not really. All it does is copy the temporary file $1 (which was the first %s, the one with the ugly name) to a file with the correct name $2 (the second %s, "suggested" filename) in a directory called 'lynx.tmp' in my home directory. Then it uses sz to send it zmodem, then it deletes the file. Sorry for the long post. The UNIX junkie in me got carried away. :) - Tony (A2.TONY, CAT28, TOP4, MSG:278/M645;1) >>>>> When using lynx, there are two different graphic types that you're """"" likely to encounter: [IMAGE] - All versions of lynx can download these easily. Just place your lynx cursor on the [IMAGE] link and press D. The file will be transfered from the remote computer to your ISP's system, and then lynx will display a message asking if you want to save the file to your home directory on your ISP's computer, or whether you want to use zmodem to download it directly to your machine. If the above process is not happening, then lynx was probably not installed properly, and you should contact your ISP. [INLINE] - If you are using any version of lynx prior to v2.6, it's somewhat of a pain to download these, but it is possible (I'll get to that below). Graphics of the [INLINE] type can easily be downloaded with lynx v2.6 or 2.7. When you hit a page with an [INLINE] that you want to download, just press the * key. When you do that, lynx will re-retrieve the page, and the [INLINE] will become an active link and the graphic will then be able to be downloaded just as if it were an [IMAGE] graphic. If you are using an older version of lynx that doesn't directly support downloading of [INLINE] graphics, the only way I know how to download those is by hitting the \ key (to display the html source code), noting the complete URL for the graphic (by capturing it in my scrollback) and then hitting lynx's G (Go To) command and when prompted for the URL, to send the captured URL as the destination. I hope that answers the question... Joe (JOE.KOHN, CAT28, TOP4, MSG:279/M645;1) >>> HOT TOPICS <<< """""""""""""""""" KANSASFEST FOREVER > Are we waiting for a minimum no. of attendees before """""""""""""""""" > declaring that the KFest is on? Yes, but we are almost there. I'm not even worried about it this year. However, if you haven't signed up yet, and you'd like me to be able to sleep at night now so that we can all stay awake in July, get your registration info in to InTrec SOON. As soon as we hit the "magic number" the whole world will know. :) Cindy (aka The Big Cheese) (CINDY.A, CAT44, TOP7, MSG:109/M645;1) >>>>> Once again, we hope to have so many excellent KFest Sessions that """"" you'll have a hard time deciding which ones to attend:) The best way to do that is for you to let us know what sessions you would like at KFest this year. So.....Let's hear it!!! I'd like to hear from any potential presenters also! If you have an idea for a dynamite session, we need to get you on the schedule. Once again I'll need your proposals and any special requirements you may have. It takes some time and juggling to handle this, so the sooner you get your proposals in the better we can accommodate you. Looking forward to seeing everyone at KFest '97!! Just remember that KFest is what YOU make it, so crank out those ideas and let's make this year even better than last year! Steve ("Godzilla/ScheduleMeister/and a few others I'd rather not mention") P.S. In an effort to retain any sanity I may still have, it would be appreciated if you answer in the A2 RT (Category 44 Topic 7) or send email to "Mac.BB". Except for "special situations", I would rather see the discussions in public (C44T7) so everyone can respond and help make this a very special year at KFest. Thanks all! (MAC.BB, CAT44, TOP7, MSG:113/M645;1) >>>>> I would dearly love to see a session on how to write a Hyperstudio """"" NBA / Hypercard XCMD in either Orca Pascal or Orca C. Of course, it would have to be pretty step-by-step. :) _________ | homas (T.COMPTER, CAT44, TOP7, MSG:114/M645;1) >>>>> I don't know about dynamite, but I'm sure I can arrange a "bomb". """"" :) Actually, I would very much like to do a hands-on, GraphicWriter/AWGS specific desktop publishing session. Last year, I talked mostly about DTP concepts and theory and how to apply those to the IIGS. This year, I would like to get down and dirty doing some real-world stuff, answering real-world questions and talking about real-world issues that concern those of us who do DTP on the IIGS. I may be bringing my GS to Kfest, but if I don't I would need to arrange the use of a IIGS for this session. So, would anyone be interested in this sort of thing? If so, any suggestions on carrying out such a session from you all would be most appreciated. Max (M.JONES145, CAT44, TOP7, MSG:115/M645;1) >>>>> Another thought ... """"" With everything going on concerning Spectrum and SIS, I would suggest a session devoted exclusively to those products. I understand Ewen won't be attending this year, but surely we can arrange someone to do this sort of demo. In fact, Geoff Weiss may be planning to attend, and he would be a natural for a SIS demo. Max (M.JONES145, CAT44, TOP7, MSG:116/M645;1) >>>>> We should lock Geoff into this as soon as possible. :-) """"" I also intend to do at least one if not two sessions on some stuff I've been working on recently. Regards, Richard (RICHARD.B, CAT44, TOP7, MSG:117/M645;1) >>>>> To do at least one thing totally off the wall and weird this year, """"" I'd like to do a session on doing Apple II friendly HTML pages. Ewen's email to me specifically hinted very strongly that Geoff Weiss would demo SIS at KansasFest 1997. Of course, I've received no message from _Geoff_ that would indicate that, but you never know what turns up in your mailbox. . . . . . including the revelation that this year at the Apple II Publisher's Forum, -five- different Apple II publications shall be represented. :) Ryan http://www.keystroke.net/~rsuenaga "There's no shortage of windmills to tilt at."--Logan ANSITerm and CoPilot v2.55 (A2LAMP, CAT44, TOP7, MSG:118/M645;1) <<<<< > I also intend to do at least one if not two sessions on some """"" > stuff I've been working on recently. YEAH!!!! Cindy (CINDY.A, CAT44, TOP7, MSG:119/M645;1) >>>>> I think Geoff is really looking forward to K'Fest, and I am sure he """"" will do the demo. Whoever is organising the sessions, will need to contact him at geoff@the-hermes.net. Unfortunately I can't be there this year, but I will be there in spirit, if not code! :) Ewen (Speccie) Delivered by: CoPilot v2.5.5 and Spectrum 2.1 (E.WANNOP, CAT44, TOP7, MSG:120/M645;1) >>>>> Thomas, """"" >> I would dearly love to see a session on how to write a Hyperstudio NBA / >> Hypercard XCMD in either Orca Pascal or Orca C... Can't promise anything right now, but your request in "on the list" so there's a good chance someone will be willing and able to present this type of session. Thanks for the input! Max, >> I would very much like to do a hands-on, GraphicWriter/AWGS specific >> desktop publishing session... Judging from your session last year, I'd say we can/should give this the "green light" and take into account any comments that are mentioned here. The GS should be no problem but thanks for mentioning it. We don't want any presenter scheduled for 2 places at the same time - ditto for the equipment:) >> With everything going on concerning Spectrum and SIS, I would suggest >> a session devoted exclusively to those products... Hmmm. Geoff was one of the 1st presenters to offer help with KFest '97 - received his email on August 13th (1996)! He offered to do a UNIX session this year but maybe we can talk him into a SIS session also:) No doubt this is an important session to include this year. Richard, >> We should lock Geoff into this as soon as possible. :-) >> I also intend to do at least one if not two sessions on some stuff I've >> been working on recently... I'll email Geoff about a SIS session in addition (or in place of) his UNIX session. (We could always "convince" Tony to handle UNIX) Will pencil YOU in for 2 sessions! If you have any special requirements, please let me know. The reason you get 2 "automatic" sessions is that I've never heard you talk without something worthwhile to say:) Thank you Thomas,Max,and Richard!! Let's here from the rest of you! Steve (MAC.BB, CAT44, TOP7, MSG:121/M645;1) I received email a few days ago that indicaated that Steve Cavanaugh, editor of The Apple Blossom and HyperQuarterly, has decided to make this year's KFest his first! This'll be a great opportunity to see what we can get with a great paper publication and the new HyperCard disk subscription! Ryan http://www.keystroke.net/~rsuenaga "There's no shortage of windmills to tilt at."--Logan ANSITerm and CoPilot v2.55 (A2LAMP, CAT44, TOP7, MSG:130/M645;1) >>>>> I'm looking forward to meeting Steve C. I hope he'll be willing to """"" do a HyperQuarterly demo, and perhaps even join in on a HyperCard session for us beginning HCGS scripters. :) BTW, spread the word near and far that the May 20 date for getting the super-duper early bird special Kfest '97 registration price of $300 is growing near. After that day, the price goes up. So be sure to take advantage of the savings by registering early. If you can't lay your hands on a registration form, check out the A2 Library. You'll find it there. As Ryan's announcement about Steve Cavanaugh's planned attendance shows, things are shaping up quite nicely for another rousingly successful Kfest. Max (M.JONES145, CAT44, TOP7, MSG:131/M645;1) SHEPPY AND SHIFTY LIST 2.0 Sheppy, """""""""""""""""""""""""" Shifty List 2.0 is a great program. I created a script for use before running Spectrum. I added Spectrum to the list, but I can't seem to get it to run automatically as the startup application. I tried two ways: with Spectrum at the end of the list and with SetStart Control Panel followed by Spectrum at the end of the list. The documentation is not clear (at least to me) if SetStart is required on the list or not. My SetStart is set to run Autopilot (a program launcher from GS+) as my startup application. When I do a Shifty-Boot, everything works as expected except I end up in Autopilot (not Spectrum). What am I doing wrong? - Ken Watanabe (K.WATANABE5, CAT13, TOP18, MSG:86/M645;1) >>>>> I'm pretty sure you have to put the application =before= SetStart """"" in your script. That way by the time SetStart loads, Shifty List can tell it which application to launch. - Tony (A2.TONY, CAT13, TOP18, MSG:87/M645;1) >>>>> Yeah, the application needs to be before SetStart in your script. """"" When the application is seen, Shifty List alters SetStart's preferences temporarily, so that when SetStart is loaded, it will select the correct application. I apologize if the documentation is unclear on this. Sheppy (SHEPPY, CAT13, TOP18, MSG:88/M645;1) THE SIS SPECTACLE Arggggggh!!!! """"""""""""""""" I installed SIS, set preferences, and when I start it (START.SIS), it hangs. When I click on Quit SIS, I have to click it 3 times and then I get a message saying that Browser needs Spectrum 2.1 or later. The next message I get tells me to install SIS. I've re-install several times. I've shift-booted. Same thing...nothing. Also, I could not intall SIS using Finder. I get an application not found error. I had to install using Spectrum's Run Script method. Help!!!! +------+ | Norm | +------+ (N.LEE, CAT43, TOP17, MSG:153/M645;1) >>>>> Monday, May 12, 1997 - 23:40 """"" I received SIS today. I have wasted the last two hours trying to get it to work. I installed it as instructed and restarted Spectrum. When I run the Start.SIS script, I see the SIS splash screen with "Loading...." at the bottom. The first time I then get the prefs screen. After the prefs are saved nothing else happens. The splash screen remains with a large white square in the center where the prefs screen was and "Loading...." at the bottom. Subsequent attempts to run the script result in the splash screen and the loading message being displayed. Eventually the cursor square appears on the splash screen upper left in white. Nothing else happens. In both cases, I then tried all the menu choices, none of which did anything. Eventually, a message appears stating that version 2.1 of Spectrum is required. I am running version 2.1. This is followed by a message that I have to use the installer to install the Browser. I did that already. I have reinsstalled three times with the same results. How do I get this thing to work? MT Steve (S.BERNBAUM, CAT43, TOP17, MSG:154/M645;1) >>>>> A little patience is required... You should start off with a fully installed Spectrum v2.1. Now run the Install script on the SIS disk. This should start Spectrum and run that script. When it has finished installing all the files to the right places, it will say the process is finished and Quit Spectrum. Now run Spectrum again, and run the Start.SIS script to configure SIS. If you are currently offline, or have no modem connected, or your modem is turned off, you will need to have a little patience as SIS loads. Just sit and wait for the appropriate prompts. Trying to click things will not help, as SIS is running under Spectrum scripts, you just have to wait till you get the appropriate response dialog, screen, or menu becoming active. The first time you will be taken to the Configuration dialog. If you intend to use SIS offline, it is a good idea not to put in a Home page until you are used to the way SIS and the World Wide Wait works. That way SIS will not try to look for one when it starts up. If you are always going to run SIS after you have connected to your Host, then you can put in the page you like most. In general, you do need a lot of patience with SIS. This is because SIS connects to the great World Wide Wait. The World Wide Wait is notorious for very long waits, with nothing happening. SIS has to allow for that, so sometimes it may seem a long time before something happens on screen or to the menus if there is no response from a particular action. Nothing we can do about that... If you are online at either a Genie prompt, or a Unix prompt of your host system, it will speed things up. Once configured, you should be sailing away on the surf... >> Received my copy of SIS today. Install..no problem...Had it up and >> running within 10 min. :) >> Great job guys !! Well worth the wait. It can be done as you can see, and Max's surfboard shows the signs of being well used... Ewen (Speccie) Delivered by: CoPilot v2.5.5 and Spectrum 2.1 (E.WANNOP, CAT43, TOP17, MSG:155/M645;1) >>>>> I received SIS today too. I had the same problems that Norm """"" mentioned. Basically, after installation and running the script START.SIS, I got two message boxes with OK button. First one said - The Browser will only work with Spectrum v.2.1 or later. Strange, since that's what I have. Second one said - Please run the Installer from the Spectrum Internet Suite to install the Browser X Display. Obviously, I did this already. The solution that worked for me - I removed the Spectrum preference file from my System/Preferences directory (on my boot volume). I believe it's called spectrum2.pref. The next time I started Spectrum, it created a new "default" preference file. After that (and setting up my configuration again), SIS worked! WARNING - You will have to set up Spectrum's configurations again if you remove or delete the preference file. This includes phone numbers and port/display settings. Hopefully, someone will provide a more elegant solution, but this one worked for me. I haven't played with SIS very much yet, but it does work... BTW - Joe Kohn's "unofficial instructions" in March 1997 Shareware Solutions II were very helpful. - Ken Watanabe (K.WATANABE5, CAT43, TOP17, MSG:156/M645;1) >>>>> I had one small problem with SIS install that was 100% my fault: I """"" ran out of hard drive space. Quick observations: remarkably fast, simple to set up, and so much what I expected it seemed like I designed it :) One quirk: when viewing my own page (http://www.kestrok.com/~rsuenaga), there is a piece of ASCII art designed by David Kerwood which appears to be screwy, though it looks fine in Lynx. I -suspect- this is a linefeed problem, but if someone could take a look. . . :) Ryan Who won't claim that GenieLamp will be later because of SIS (But could :) (A2LAMP, CAT43, TOP17, MSG:157/M645;1) >>>>> Ryan burbled (the result of too much late night cold poi): """"" >One quirk: when viewing my own page (http://www.kestrok.com/~rsuenaga), >there is a piece of ASCII art designed by David Kerwood which appears to >be screwy, though it looks fine in Lynx. I -suspect- this is a linefeed >problem, but if someone could take a look. . . :) Well, it is and it isn't. :) You ran into a problem that we discovered in the very last day of testing, that being that there is a character limit on the amount of preformatted text in an ALT tag that can be displayed by SIS. If you want your wonderful artwork (!) to be displayed correctly in SIS as well as Lynx, change it from this:

    __ __ ______          __     _ ____  _____
   / //_// ____/__  _____/ /_   ( ) __ \/__  /
  / ,<  / /_  / _ \/ ___/ __/   |/ /_/ /  / /
 / /| |/ __/ /  __(__  ) /_      \__, /  / /
/_/ |_/_/    \___/____/\__/     /____/  /_/
 
To this:

      __ __ ______          __     _ ____  _____
     / //_// ____/__  _____/ /_   ( ) __ \/__  /
    / ,<  / /_  / _ \/ ___/ __/   |/ /_/ /  / /
   / /| |/ __/ /  __(__  ) /_      \__, /  / /
  /_/ |_/_/    \___/____/\__/     /____/  /_/

Really. That'll work. There's a few extra space characters in the first version that causes SIS to not wrap the lines correctly. Look at the KFest page on A2-Web for an example of how this figlet should actually display. For those of you who run into the problem of SIS telling you that it requires v2.1 of Spectrum to run, that's true enough. That includes the preferences file that Spectrum v2.1 creates. If you try to use the same preferences file from a previous version of Spectrum, it won't work. Deleting that preferences file, and letting Spectrum v2.1 build it's own, will fix that problem. Be aware that deleting your old preferences file will cause you to lose all your settings, so be sure and make some notes on how you have Spectrum set up before you do this (phone numbers, etc.) David K. - A2-Web! Get tangled at http://www.syndicomm.com/a2web/ (A2.DAD, CAT43, TOP17, MSG:158/M645;1) >>>>> > BTW - Joe Kohn's "unofficial instructions" in March 1997 """"" > Shareware Solutions II were very helpful. Thank you. When I wrote about SIS in the latest issue of Shareware Solutions II, I tried to do as complete a job as possible. I also figured that a lot of folks would be purchasing the Spectrum/SIS bundle, and that's the main reason why I included installation instructions for both Spectrum and SIS. I welcome you all to the wonderful world of Spectrum Internet Suite. I know you're all going to love it ;-) Joe (JOE.KOHN, CAT43, TOP17, MSG:161/M645;1) >>> WHAT'S NEW <<< """"""""""""""""'" BLATANT KFEST PLUG """""""""""""""""" ______ _____ ( ) ( ) ____________________________________________ | | / / ( _____________________________'97____) | | / / | | | |/ / | | II Infinitum!! | / | |______ | |\ \ | _______) __________ ________ ________ | | \ \ | | ( _____) ( ___) (__ __) | | \ \ | | | |__ \ \ | | | | \ \ | | | __) \ \ | | | | \ \ | | | |_____ ___\ \ | | (______) (________) (_______) (__________) (_________) |___| We still have some space available for KansasFest 1997! KFest '97 will again be held on the campus of Avila College in Kansas City, Missouri. It will take place from July 30 - August 3, 1997. The cost will be only $375, which _includes_ use of a double room in the Avila College dorms _and_ meals! There are also a limited number of single rooms available. (If you wish to stay at one of the many hotels or motels near the college then the cost is $300, but you would, of course, have to find and pay for your own room and meals.) The last date pre-registrations will be accepted is July 20th. Featured presenters this year include Max Jones, editor and publisher of _Juiced.GS_; Geoff Weiss, co-author of the first Apple II web browser, the _Spectrum Internet Suite_; and Ryan Suenaga, editor of _GenieLampA2_. The annual Apple II writer's and publisher's forum will feature the editors of five Apple II publications, our keynote speaker will be the webmeister of the hot new Mother Of All Apple II Web Sites, David Kerwood, and this year's roastee will be Richard Bennett, the world famous Australian programmer! Check-in will be on Wedensday from 1-4 pm, and check-out from 11 am - 1 pm on Sunday. Computer sessions will be conducted on Thursday and Friday. A vendor fair is scheduled for Saturday morning, with software and hardware demos slated for Saturday afternoon. Meals included in the registration price are Thursday breakfast through Sunday breakfast, with the exception of Saturday dinner. All children under 18 years must be accompanied by a parent or legal gu-T$ *6B GSINFOS.II6 GSINFOS.MENUSCOUV.52TICONSARTICLESVDINFOS.VOoCONTENU FINDER.DATA04LES.PLUS5 FINDER.ROOTardian. ++ Please Note++ Dinner on Wednesday and Saturday are NOT included this year. Attendees can dine on their own at one of the many fine restaurants near the Avila campus, or join the Kfest '97 group for their annual treks to KC Masterpiece and Jess & Jim's Steak House. KFest this year is being sponsored by InTrec Software, Inc.. If you have questions about KFest, or wish to make suggestions, you can find answers via the InterNet. Just send an email message to Cindyadams@delphi.com, or visit the World Wide Web page at http://www.primenet.com/~adams/kfest.html Why wait? Register now! Join us today! KFest 1997 approaches! (CINDY.A, CAT44, TOP7, MSG:162/M645;1) VAV-WARE, TAKE TWO I have uploaded a new version of all of my finder """""""""""""""""" extensions....Seems that since they were all written in the same manner, they all contained the same bug....damn those bugs. Anyhow, I have fixed the pesky little bug (previous versions wouldn't close out completly when the finder exited). Let me know what you think When they are release the will be the following: Number: 28543 Name: FF101.BXY FinderFlipper V1.0.1 Number: 28544 Name: FR101.BXY FinderRefresher V1.0.1 Number: 28545 Name: WORKSETS101.BXY WorkSets V1.0.1 Number: 28542 Name: CDR101.BXY CD Remember V1.0.1 FinderFlipper V1.0.1: FinderFlipper is a finder extension that aids in the task of bringing windows up front. No longer will you have to move windows around in order to find one that you have buried. No longer will you have to move your mouse all the way to the Windows menu to select the window you want. <<<>>> FinderRefresher V1.0.1: FinderRefresher is a finder extension that will force the front most window to refresh itself. <<<>>> WorkSets V1.0.1: If you work with different files in multiple folders often and dont like to clutter up the desktop of the Finder with aliases then WorkSets is for you. WorkSets is a finder extension that allows the user to record the open folders on the desktop in a list for later retrieval. <<<>>> CD Remember V1.0.1: Have you ever been surfing through a CD checking out what is there weaving your way through all of the directory structures....wait, something strikes your fancy, it's an application...Double-click....hey, this stinks or worse yet, a system crash. After you return to the Finder you have to start all over surfing your way back down the directory tree to get back to the point at which you left. Well, no longer will you have to spend your time retracing your steps, let CD Remember remember where you were. CD Remember will remember folders you have open when you leave the finder until you return. <<<>>> (C.VAVRUSKA1, CAT13, TOP10, MSG:3/M645;1) FRESH BLOSSOMS We're pleased to announce that the latest issue of Apple """""""""""""" Blossom, Volume 3 Number 2 is completed and will be mailed out to subscribers on Tuesday, May 27. This issue has several press releases and news bits, a HyperTalking article on sound in HyperCard IIGS stacks, a very interesting interview with David Kerwood by Ryan Suenaga, a review of the Tiger Learning Computer, and a brief history of ProDOS 8's last few version upgrades by Jerry Cline of Intrec. Hyper Quarterly, our HyperCard IIGS disk-subscription is also nearing readiness, and the first issue should ship in the next two weeks. More information on that when it is ready for publication. Regards, Steve Cavanaugh The Apple Blossom Apple Blossom Publishing Hyper Quarterly http://members.aol.com/newblossom/ The Apple II Modem Starter Disk email: stevec1021@aol.com abpub@ziplink.net appleblossom@delphi.com (A2LAMP, CAT13, TOP17, MSG:60/M645;1) >>> THROUGH THE GRAPEVINE <<< """"""""""""""""""""""""""""" JOKO AND EGO A few years ago, right after EGO Systems became the """""""""""" publisher for Addressed For Success, I contacted Steve Disbrow to suggest that we offer an AFS/Contacts GS bundle. The reason for an AFS/Contacts GS bundle seemed obvious to me at the time. After all, the two programs complement each other and go hand-in-hand. What AFS can't do, Contacts can and what Contacts can't do, AFS can. Well, to make a long story short, Steve and I never did reach an agreement on offering that bundle. But...that should be changing soon, as Shareware Solutions II is (if all goes according to plan) going to become the new publisher of Addressed For Success after EGO closes the doors at the end of June, 1997. I just thought you'd all want to know that. Of course, details will be provided once they are worked out. Joe (JOE.KOHN, CAT28, TOP4, MSG:294/M645;1) <<<<< Steve Disbrow posted a message in the EGO Systems category a few """"" weeks back that said he was closing down his mail order operations on June 27th. Some of the products that EGO sells are already sold out. So, if there is _anything_ that you want to purchase from EGO, you better do it now. At this point, some of the products are "up for grabs" to the highest bidder. It looks like I submitted the high bid for Addressed For Success, so SSII will be publishing that. Additionally, since Diz was a distributor of WestCode Software products, I've been in contact with WestCode, and SSII plans to be the new distributor of their product line...once Diz sends me whatever he has left over. At this point, I do not know who else, if anyone, has bid on EGO products. So, get what you need by June 27, 1997. Joe Kohn (JOE.KOHN, CAT28, TOP4, MSG:297/M645;1) >>> MESSAGE SPOTLIGHT <<< """"""""""""""""""""""""" Category 35, Topic 26 Message 210 Sat May 10, 1997 A2.TONY [Librarian] at 17:31 EDT With all the recent talk about spam email, I thought I'd let you all know how I handle it. First, my signature: ____________________________ ____________________________________ /----------------------------\__/------------------------------------\ \ tward@interaccess.com /__\ Unsolicited email ads are not / / a2.tony@genie.com \__/ welcome and will not be tolerated. \ \___ tonyw1@delphi.com ______/ \_______ Just say NO to SPAM! _______/ Depending on where I'm sending the email, I'll add a pointer to a great website for information about spam. Check it out: http://spam.abuse.net/spam/ I won't go into procmail filtering unless someone asks because it's really complex and it doesn't work on Genie anyway. If you want to take some time to respond to the spammers, here are some tips. 1) Look at the header. The =whole= header. Genie provides the whole header but many mail programs (such as pine) don't unless you tell them to. The "From:" and "Reply To:" addresses are rarely the person who sent the spam. You have to do some detective work with the header and possibly some other tools like traceroute, whois and nslookup. Play with those commands on your ISP to see how they work. 2) Send your response to as many recipients as possible. Once you've nailed down the originating site, send email to sysadmin, abuse, root, postmaster, and anything else you can think of. 3) Be polite. Crude rants and raves won't get you anywhere. 4) Include the entire piece of spam you received, with the =whole= header. Sometimes the site will use this information to give a spammer the boot. Some people use a slightly different method. After receiving the first spam they will send a reply like this: "Thank you for the unsolicited email advertisement. I will be more than happy to look at any future advertisements for the standard consultant's fee of $100/page. Any further email advertisements I receive from you will result in a bill for the above amount. If you believe you have received this note in error, please let me know." If you do receive another email ad from them, send them a bill. I'm quite serious about this. Most people who use this method will never hear from spammers a second time, for obvious reasons. But it does involve some work unless you're very adept with procmail or some other email filter. - Tony [*][*][*] While on Genie, do you spend most of your time downloading files? If so, you may be missing out some excellent information in the Bulletin Board area. The messages listed above only scratch the surface of what's available and waiting for you in the bulletin board area. If you are serious about your Apple II, the GenieLamp staff strongly urge you to give the bulletin board area a try. There are literally thousands of messages posted from people like you from all over the world. [EOA] [A2P]////////////////////////////// A2/PRO_ductivity / ///////////////////////////////// By Ryan M. Suenaga, M.S.W. [A2LAMP] >>> A2PRO BITS & BYTES <<< """""""""""""""""""""""""" BASE ON BALLS In his DEBASED program just released, Robert Hardman """"""""""""" [R.HARDMAN] sharedhis assembly source code for shifting 4 6-bit bytes into 3 8-bit bytes. While Robert has done a fine job with this code, I'm wondering if there isa shorter, quicker way to do it. First take a look at Robert's code: ***************************** * * Turn 4x6-bits into 3x8-bits * * inbyte1 inbyte2 inbyte3 * inbyte1 xx|654321 | | * inbyte2 | xx65|4321 | * inbyte3 | | xx6543|21 * inbyte4 | | |xx654321 * ***************************** * * rotate bits 5/4 of inbyte2 * into inbyte1 to make outbyte1 * M6I8 LDA inbyte2 ASL ASL ;discard unused bits ASL ROL outbyte1 ;shove lower 6 to upper 6 ASL ;and insert upper 2 as ROL outbyte1 ;lower 2 * * The upper 4 bits of Acc are now the upper 4 bits of * OB2, and the lower 4 are clear. * STA outbyte2 ;save that half... LDA inbyte3 ;turn middle 4 bits of IB3 LSR ;into lower 4 bits of OB2 LSR ORA outbyte2 ;combine with upper 4 STA outbyte2 ;and save * * finally, overwrite hi 2 of IB4 with lo 2 of * IB3 to make OB3 * LDA inbyte3 ASL ;move lo 2 to hi 2 ASL ASL ASL ASL ASL ORA inbyte4 ;combine with lo 6 STA outbyte3 ;and save * * That's it * ************ RTS outcount dfb 1 strlen dfb 1 inbyte1 dfb 1 outbyte1 = inbyte1 inbyte2 dfb 1 outbyte2 = inbyte2 inbyte3 dfb 1 outbyte3 = inbyte3 inbyte4 dfb 1 Now, here's my challenge. Can anyone tighten this code? Assume that the 4 6-bit bytes are already in inbyte1, inbyte2, inbyte3, and inbyte4. The job is to get rid of the leading two bits of each byte and then put the remaining 6 bits of each one together in a line with the other ones to create 3 8-bit bytes. For example, the binary code for the word "God" is G = 71 or 01000111 o = 111 or 01101111 d = 100 or 01100100 Put those three in a line and then divide them into 4 6-bit parts and you get... 0 1 0 0 0 1-1 1 0 1 1 0-1 1 1 1 0 1-1 0 0 1 0 0 Tack on two leading zeros and you have the four bytes 00010001 00110110 00111101 00100100 Now the challenge is to turn those 4 bytes back into the original 3 bytesthat spell "God". Can you do it better than the code given here? Show us! :) Charlie (A2.CHARLIE, CAT2, TOP6, MSG:158/M530;1) >>>>> How do you want it, optimised for cycles, code length or number of """"" instructions? You said "tighten", but just wanted to be sure. Regards, Richard (RICHARD.B, CAT2, TOP6, MSG:159/M530;1) <<<<< Optimised for cycles is what I had in mind. I'm looking for code """"" taht performs the task as quickly as possible without introducing potential errors. I can imagine that there would be a _significant_ increase in either code length or number of instructions anyway. Have at it. :) Charlie (A2.CHARLIE, CAT2, TOP6, MSG:160/M530;1) >>>>> Give me a 16meg lookup table and I can have that thing running so """"" fast it'd make your eyes spin in their sockets :) But 16meg is a little impractical :) Dave (JUST.DAVE, CAT2, TOP6, MSG:161/M530;1) [EOA] [RFR]////////////////////////////// REFRACTIONS / ///////////////////////////////// Pretty Please? """""""""""""" by Douglas Cuff [D.CUFF] >>> PERMISSION GRANTED <<< """""""""""""""""""""""""" Home pages are everywhere. It's not just TV commercials and newspaper advertisements--either you have a web page yourself, or you know someone who does. The world wide web has brought publishing within the reach of anyone with enough money to afford a computer. Unfortunately, the web page has shown us the horror of technology--or, rather, the horror of humans let loose upon it--even more clearly than desktop publishing did. Now hundreds of thousands of people have been granted the power of publishing without being taught about the responsibilities. A frequently ignored responsibility is taking good care not to steal. If you want to include a logo on your web page to show how much you enjoy a singer or television show, you must ask the permission of the person who owns that logo. (You will of course have heard and dismissed the lame cry that the owner should be grateful for the "free advertising".) If you are denied permission, you don't include the logo. (You will have run into self-centred folk who still have not realized that the Stewart's Law of Retraction--"It is easier to get forgiveness than permission."--is meant to be a joke.) You can't always get what you want. People sometimes avoid asking for permission because it's a hassle. Well, in the first place, because a rule or a law something inconveniences you doesn't mean it doesn't apply to you. And in the second place, it's not a hassle; in fact, most of the time, it's a snap. Let me tell you about three times I've asked for permission to reproduce material belonging to someone else. In my still-incomplete HyperStudio stack about Canada, I wanted to include sound samples of two voices familiar to many Canadians--Peter Gzowski, host of CBC Radio's nationally-broadcast programme _Morningside_ (6 September 1982-30 May 1997) and Shelagh Rogers, deputy host. Through CBC Enterprises, I legitimately acquired a tape of Peter and Shelagh saying my name. (I wrote _Morningside_ a letter, and they read the letter over the air.) Although I bought a legitimate copy of that part of the programme, that was just so I could listen to it whenever I liked--I had not purchased the right to distribute it. So I wrote Morningside again and asked permission to distribute sound samples of Peter and Shelagh saying my name. One of the production staff, Shelley Ambrose, phoned to tell me it was fine, corrected my spelling, and wished me luck. No demands for credit, no stickiness nor stuffiness. Plain sailing. My next request was equally uncomplicated. I wrote Purity Factories, a small biscuit- and confectionery-manufacturer, to ask for permission to reproduce their logo on a sub-section of my home page. Their sales manager thought it was a great idea, and promised to hand my letter to their general manager. I waited several weeks before telephoning the general manager to prompt him for a decision. He said no. He went on to explain: They guard their trademarks pretty closely. They liked my Purity page and were grateful for it, but it wasn't worth the legal hassle to give me permission to use their logo. I thanked him for his time, and that was it. Simple. (Accepting a refusal isn't always easy, but you get plenty of chances to get good at it.) My third request was the only one that lived up to the scenario that alarmists dream up. I wrote to Paramount Pictures. Paramount is one of the companies that employs zealots to protect their meal-ticket. Those of us who respect intellectual property wince whenever Paramount's name is brought up. Either their executives or their lawyers--or both--have no idea when to stop. When you try to send Paramount a comment from their web site, they ask that your letter not contain any *ideas*. Not story ideas--they've already covered that legitimate worry separately. They don't want your letter to express any ideas. It must be a "suit" thing. What I wanted to do was attach part of the _Mission: Impossible_ theme to the Task Impossible event in my Sound Control Panel. Normally, that's the kind of action I avoid. Use a copyrighted sound, particularly one from the popular media? No thanks. However, I knew that Paramount had sound clips from last summer's movie starring Tom Cruise on their web site. What's more, their legal text said that it was okay for me to have one copy of any material downloaded from the site. So, no problem, right? Well, there wouldn't have been, if I had been willing to attach the entire 2- or 3-minute song to the Task Impossible event. I just wanted eight or possibly four notes--that's enough for most people to get the reference and the joke. Paramount's standard legal text informed me: "You also agree that you will not alter, disassemble, decompile, reverse engineer or otherwise modify the Downloaded Material." Well, to clip out a short section counts as altering and modifying, so I wrote to them to ask permission for that. Several weeks ago I wrote them. Have I heard back them? Of course not. They're probably still wondering if it will weaken their position if they acknowledge having received it. Meanwhile, of course, I do nothing about the sound event. I can't. It's their material. Until I have their permission, I can't go ahead. It's not enough just to ask permission--I must wait until I get it. Fortunately, Paramount and their ilk are still the exception. When you ask for permission to reproduce people's work in a way that doesn't hurt the person who owns it, you'll most often get a prompt and cheerful yes, or a reasonably prompt and polite no. My favourite permissions story predates the world wide web by several years. A master's student wanted permission to reproduce a comic strip in her thesis, so she asked the cartoonist who created and owned the strip. The cartoonist wrote back that no one had ever asked him for that before. He had had little education, and was honoured to think of something he had created being a small part of a thesis. Only occasionally will your request to reproduce be swallowed by a faceless bureaucracy. Most of the time, you'll get to talk to another person, someone who will listen to what it is that you want, and let you know quickly whether that's possible. Even if your request is denied, you'll end up feeling good that you made a real contact with another human being. You'll end up feeling good that someone listened to you. You'll end up feeling good that you're respecting the rights of others, and that your web page and computer are free from copyright violations. You'll be doing the right thing, and you'll end up feeling good. [EOA] [BAN]////////////////////////////// FILE BANDWAGON / ///////////////////////////////// Top 10 Files for April """""""""""""""""""""" by Douglas Cuff [D.CUFF] This feature lists the ten most popular files for the month. To give files a chance to seek their own levels, no files will be added to the list until they've been in place at least a month. This month, we look at the files uploaded 1-30 April 1997. This isn't the Academy Awards ceremony, folks; it's more like the People's Choice Awards (both of which are trademarked, by the way). The Top 10 doesn't necessarily tell you what's new and interesting--what files _you_ might find interesting--it simply tells you what files have been downloaded a lot--what other people found interesting! This month, GenieLamp A2 occupies four spots on the list, but we're just counting that one file. We hope this explains why there are 13 files on the Top 10 list. File # Filename Bytes DLs Short description ------ --------------- ------ --- ------------------------------------- 28522 SLDEMO2.0.BXY 94464 108 Shifty List 2.0 DEMO 28454 SPAMMASTER.BXY 9844 57 NDA to take care of e-mail spam!! 28457 ALMP9704TXT.BXY 64896 46 GenieLamp A2, Apr 97 (text) 28459 ALMP9704.HS.BXY 95872 40 GenieLamp A2, Apr. 1997 (HyprStudio) 28456 ALMP9704AWP.BXY 72704 38 GenieLamp A2, Apr 97 (AppleWorks) 28497 JUPITER.BXY 1443968 37 Cartoon animation on Jupiter 28492 FISH2.BXY 630144 36 Animation of aquarium 28460 PLAYBALL.BXY 917592 33 Baseball INIs & Slide Show. 28530 PLAYCD.BXY 16896 32 Play CDs with RamFAST card and CDA 28496 INVOKE.BXY 491904 29 Animation of metallic woman 28458 ALMP9704.HC.BXY 83456 27 GenieLamp A2, Apr. 1997 (HyperCard) 28483 COUNT2.BXY 1114752 25 Animation of a neat countdown 28472 BURGER.BXY 1136384 25 Animation of building a burger SLDEMO2.0.BXY The Shifty List v2.0 demo by Eric "Sheppy" Shepherd is a """"""""""""" utility that allows you to select which extensions and desk accessories are loaded when you shift-boot your Apple IIgs. (The first release of Shifty List, version 1.0, appeared on issue #57 of _Softdisk G-S_ in 1995.) Shareware ($20) SPAMMASTER.BXY SpamMaster by Bret "Slixter" Victor is a New Desk """""""""""""" Accessory (NDA) that works with CoPilot to let you reply to those who send unsolicited internet E-mail ("spam") to your Genie account. Shareware. ALMP9704---.BXY Four editions of the February issue of GenieLamp A2 """"""""""""""" (edited by Ryan Suenaga) grace our Top 10 list this month--text file, HyperStudio stack, AppleWorks word processor, and HyperCard stack. All editions feature the same great articles--a behind-the-scenes interview with the Spectrum Internet Suite development team from Max Jones, the return of Peter Brickell's "Real World Apple" column, and a "PD_Quickview" column on Change-A-File. (If that seems familiar, that's because I goofed and gave that description last month. What I meant to say about ALMP9703 was that it includes a look at the Focus Hard Card and a caution about believing Internet rumors, particularly those from unverified sources.) Freeware. JUPITER.BXY In April, Russell Nielson converted a bunch of animations to """"""""""" Apple IIgs format, and they make up half of our top 10 list this month. This animation is a monochrome look at Lost in Space that features a robot, a spaceship, and a surface vehicle. It's 1439K and lasts about 1 minute and 12 seconds. FISH2.BXY This colourful underwater animation features a entertaining """"""""" fish that blows some amusing bubbles. It's 645K (it will fit on a 3.5" disk) and lasts about 10 seconds. PLAYBALL.BXY A collection of baseball pictures, sounds, and even a little """""""""""" music from Pat Kern--91 desktop backgrounds, 9 conventional IIgs pictures, 8 rSounds, and 1 synthLAB song--"Take Me Out to the Ball Game". Lots of baseball team logos in this batch, plus a few pictures to make you wonder if Ms Kern isn't something of a Cubs fan. PLAYCD.BXY Play CD by Aaron Pulver is a beta ("unfinished") version of a """""""""" Classic Desk Accessory (CDA) for RamFAST SCSI card and CD-ROM owners that will play your audio CDs from any non-desktop application--including ProDOS 8! It only plays CDs--it can't stop or skip tracks or rewind. It works with CD drives with ID strings of APPLE, SONY, TEXEL, ShinaKen, NEC, and has been found to work with the second-hand Toshiba drives Vitesse was selling. Freeware. INVOKE.BXY This animation features a metallic female form genuflecting in """""""""" from of a cube... no, it's a sphere... no, wait.... Anyway, it's 503K (it will fit on a 3.5" disk) and lasts about 4 seconds. COUNT2.BXY This animation may be useful for video producers out """""""""" there--it's an updated film leader that counts from 10 down to 2. Unfortunately, the timing isn't quite right, so each count takes longer than a second, but with some animation viewers you can adjust the speed to fix this. This animation is 1340K and lasts about 17 seconds. BURGER.BXY This animation shows you the necessary layers in order to """""""""" create a perfect hamburger. The animation file is 1247K and lasts about 28 seconds. [EOA] //////////////////////////////////////// Genie_QWIK_QUOTE //// / "Today I read that the new 'Pentium II' chip has a bug.' / / / / "It's not a bug, it's a feature!" / ////////////////////////////////// T.SMITH59 & MAC.LIB.RON /// [EOA] [LOG]////////////////////////////// LOG OFF / ///////////////////////////////// GenieLamp Information """"""""""""""""""""" o COMMENTS: Contacting GenieLamp o GenieLamp STAFF: Who Are We? GenieLamp Information GenieLamp A2 is published on the first of every """"""""""""""""""""" month in library 55 of Genie's A2 RoundTable (page 645;3). GenieLamp is also distributed on CrossNet and many public and commercial BBS systems worldwide. o To reach GenieLamp on Internet send mail to genielamp@genie.com or to reach GenieLamp _A2_, send mail to a2lamp@genie.com o Back issues of GenieLamp A2 are available in the A2 RoundTable Library #55 on page 645 (m645;3). o We welcome and respond to all E-mail. To leave comments, suggestions or just to say hi, you can contact me in the A2 RoundTable (Category 3, Topic 3) or send GenieMail to Ryan Suenaga at [A2LAMP] on page 200. >>> GENIELAMP STAFF <<< """"""""""""""""""""""" GenieLamp o John Peters [GENIELAMP] Publisher """"""""" o Mike White [MWHITE] Managing Editor APPLE II o Ryan M. Suenaga [A2LAMP] Editor """""""" o Doug Cuff [D.CUFF] Editor Emeritus o Peter C. Brickell [P.BRICKELL] A2 Staff Writer o Max Jones [M.JONES145] A2 Staff Writer A2Pro o Tim Buchheim [A2PRO.GELAMP] Editor """"" ATARI o Sheldon H. Winick [GELAMP.ST] Editor """"" IBM o Sharon Molnar [SHARON.LAMP] Editor """ MACINTOSH o Richard Vega [GELAMP.MAC] Editor """"""""" POWER PC o Ben Soulon [BEN.GELAMP] Editor """""""" \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//////////////////////////////////// Opinions expressed herein are those of the individual authors, and do not necessarily represent the opinions of Genie Online Services, Yovelle Renaissance Corp., GenieLamp Online Magazines, or T/TalkNet Online Publishing. Bulletin board messages are reprinted verbatim and are included in this publication with permission from Genie Online Services and the source RoundTable. Genie Online Services, GenieLamp Online Magazines, and T/TalkNet Publishing do not guarantee the accuracy or suitability of any information included herein. We reserve the right to edit all letters and copy. Material published in this edition may be reprinted under the fol- lowing terms only. Reprint permission granted, unless otherwise noted, to registered computer user groups and not for profit publications. All articles must remain unedited and include the issue number and author at the top of each article reprinted. Please include the fol- lowing at the end of all reprints: \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/////////////////////////////////// The preceding article is reprinted courtesy of GenieLamp Online Magazine. (c) Copyright 1996 T/TalkNET Publishing and Genie Online Services. To join Genie, set your modem to half duplex (local echo). Have your modem dial 1-800-638-8369 in the United States or 1-800-387-8330 in Canada. When you get a CONNECT message, wait for the U#= prompt, type: JOINGENIE and hit the RETURN key. Genie will then prompt you for your signup information. If the signup server is unavailable, call (voice) 1-800-638-9636 for more information. ////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ [EOF] Alltech Electronics diffuse toujours les cartes disques durs internes FOCUS pour Apple IIGS. Prix et caractristiques ci-dessous. ----------------------------------------------------------- FocusDrive: The Internal Apple II Hard Disk. Focus 20.............$59.00 (HP KittyHawk 1.3" drive, they're back!) Focus 60.............$99.00 Focus 80............$119.00 Focus 120...........$159.00 Focus 200+..........$199.00 Focus 800...........$259.00 All drives feature pre-installed operating system and utilities for either the Apple //e or IIgs. Drives ordered for IIgs use have a good selection of Finder rSounds and other software installed. For the Apple //e, Add $19.00 and get the highly acclaimed ProSEL 8 program launcher and utility package. A Single card design, Extended Smartport Compatible, Damn near DMA speed without DMA hardware. Works with any memory card and access is enhanced with an accellerator. (As with most other hard disks) User upgradable too. Available soon, Focus card to standard 40 pin IDE adapter. Increase the speed and capacity of your Vulcan or InnerDrive by using a Focus card and 3.5" higher capacity Hard Disk assembly. Faster than Vulcan Gold. Completly custom partition configurable, or go with the defaults. Use a Focus Drive in conjunction with any existing hard disky you may already have, Focus Drivers have been tested in many many configurations. Focus FDOS DOS 3.3 Emulator now included. Mention this post and get free AppleWorks 3.0 or AppleWorks GS 1.1 installed on your drive. Original AppleWorks Disks Included, no manuals are available at this time. AppleWorks 3.0, the "Bullet Proof" AppleWorks. For more information please contact: Alltech Electronics info@allelec.com http://www.allelec.com 760/724-2404 - Fax 760/724-8808 -- 2618 Temple Heights, Oceanside, CA 92056   !"#%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{ |||||| |||||| || || |||||| |||||| || || ||| || || || || ||| |||| |||||| || |||| Your || || || || ||| || || |||||| |||||| || || |||||| |||||| GenieLamp Computing || |||||| || || |||||| RoundTable || || || ||| ||| || || || |||||| |||||||| |||||| RESOURCE! || || || || || || || ||||| || || || || || ~ WELCOME TO GENIELAMP APPLE II! ~ """""""""""""""""""""""""""""" ~ A2/PRO_DUCTIVITY: BASIC Basics and Advancements ~ FILE BANDWAGON: Top 10 Files for February ~ REAL WORLD APPLE: Pushing Your Buttons ~ HOT NEWS, HOT FILES, HOT MESSAGES ~ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//////////////////////////////////// GenieLamp Apple II ~ A T/TalkNET Publication ~ Vol.6, Issue 63 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Editor...................................................Ryan M. Suenaga Editor Emeritus................................................Doug Cuff \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//////////////////////////////////// ~ GenieLamp IBM ~ GenieLamp ST ~ GenieLamp PowerPC ~ ~ GenieLamp A2Pro ~ GenieLamp Macintosh ~ GenieLamp TX2 ~ ~ GenieLamp Windows ~ GenieLamp A2 ~ LiveWire (ASCII) ~ ~ Member Of The Digital Publishing Association ~ GE Mail: GENIELAMP Internet: genielamp@genie.com ////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ >>> WHAT'S HAPPENING IN THE APPLE II ROUNDTABLE? <<< """""""""""""""""""""""""""""""""""""""""""""""""""" ~ May 15, 1997 ~ FROM MY DESKTOP ......... [FRM] HEY MISTER POSTMAN ...... [HEY] Notes From The Editor. Is That A Letter For Me? A2/PRO_ductivity ........ [A2P] FILE BANDWAGON .......... [BAN] A2Pro Bits & Bytes. Top 10 files for March 1997. REAL WORLD APPLE .........[RWA] LOG OFF ................. [LOG] Pushing Your Buttons GenieLamp Information [IDX]"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" READING GENIELAMP GenieLamp has incorporated a unique indexing system """"""""""""""""" to help make reading the magazine easier. To utilize this system, load GenieLamp into any ASCII word processor or text editor. In the index you will find the following example: HUMOR ONLINE ............ [HUM] Genie Fun & Games. To read this article, set your find or search command to [HUM]. If you want to scan all of the articles, search for [EOA]. [EOF] will take you to the last page, whereas [IDX] will bring you back to the index. MESSAGE INFO To make it easy for you to respond to messages reprinted """""""""""" here in GenieLamp, you will find all the information you need immediately following the message. For example: (SMITH, CAT6, TOP1, MSG:58/M475) _____________| _____|__ _|___ |____ |_____________ |Name of sender CATegory TOPic Msg.# Page number| In this example, to respond to Smith's message, log on to page 475 enter the bulletin board and set CAT 6. Enter your REPly in TOPic 1. A message number that is surrounded by brackets indicates that this message is a "target" message and is referring to a "chain" of two or more messages that are following the same topic. For example: {58}. ABOUT Genie Genie has pricing plans to fit almost any budget. Genie's """"""""""" services include email, software downloads, bulletin boards, chat lines, and an Internet gateway included at a non-prime time connect rate of $2.75. Some pricing plans include uncharged online connect time. As always, prices are subject to change without notice. To sign up for Genie, call (with modem) 1-800-638-8369 in the USA or 1-800-387-8330 in Canada. Upon connection wait for the U#= prompt. Type: JOINGENIE and hit RETURN. The system will then prompt you for your information. Need more information? Call Genie's customer service line (voice) at 1-800-638-9636. GET GENIELAMP ON THE NET! Now you can get your GenieLamp issues from """"""""""""""""""""""""" the Internet. If you use a web browser, connect to "gopher://gopher.genie.com/11/magazines". When using a gopher program, connect to "gopher.genie.com" and then choose item 7 (Magazines and Newsletters from Genie's RoundTables). *** GET INTO THE LAMP! *** """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" ///////////////////////////////////////// Genie_QWIK_QUOTE ///// / "When I bought my Sportster, I didn't spend the extra bucks / / for a Sportster Vi (voicemail and Caller ID) because I / / knew the GS couldn't use either feature." / / / / "Pessimist :)" / ////////////////////////////////////////// A2.TONY & A2LAMP /// [EOA] [FRM]////////////////////////////// FROM MY DESKTOP / ///////////////////////////////// Notes From The Editor """"""""""""""""""""" by Ryan M. Suenaga, M.S.W., L.S.W. [A2LAMP] >>> PACK MY THINGS AND RUN AWAY <<< """"""""""""""""""""""""""""""""""" Those of you who've read my work (not just in _GenieLamp A2_, but in other Apple II publications) know that I'm not just a computer geek, I'm a bicycling fiend (even though, especially since I started graduate school, I haven't even been close to being in decent shape). That said, recently two of our local bicycle shops closed their doors. These weren't exactly Mom & Pop operations, nor were they sports superstores. They were just stores that specialized in one thing with people who worked there who were about as interested in what they did as the clientele they attracted. A lot of the people who worked there could've taken a different job where they'd make more money, but they were vested in cycling, and decided it wouldn't just be what they did for fun, it would be what they'd do to live. So while I was happy to have an opportunity to pick up parts and equipment at a discount price, it was sad to see two businesses that serviced the enthusiast rather than the casual rider close, and I was left to ponder the fact that we had lost yet another great resource for cyclists on the island, and how few were left. It was the first Sunday in May when I ran into a buddy of mine in an electronic conference room on a national online service who greeted me with a private message: "Did you hear about EGO?" So, a day before the world at large heard the news, I learned that EGO Systems, the former publisher of _GS+_ magazine and the distributor of one of the most varied assortments of Apple II and IIgs software still available, was planning to close its Apple II mail order operations on June 27, 1997. I didn't know Tom Weishaar when _A2-Central_ ceased publication, or Joe Kohn when _inCider/A+_ published its last. I didn't know the gang at _Ingenuity_ or _CheckMate_ or _Applied Engineering_ when the plug was pulled there. Those were sad times as well. But this time, it's even sadder: you see, our world has become so small that like so many other of these times over the last few years, I know the people involved. Steve Disbrow gave everything he had into _GS+_ magazine, then when he found he couldn't do it profitably anymore, he kept going strong with EGO's mail order business. Unfortunately, the harsh realities of the ever-shrinking Apple II marketplace made it tougher and tougher to keep operating, and finally, it just no longer made sense to keep the mail order business alive. To Steve and Noreen, I wish only the best. EGO Systems Apple II Mail Order: R.I.P. And I am left to ponder the fact that we had lost yet another great resource for Apple II enthusiasts in the community, and how few are left. [*] [*] [*] One of my best friends at the hospital I work with is our Child Life Specialist, a delightful young woman named Elma (and if you don't know what a Child Life Specialist is, don't worry--I didn't until I started working at a hospital). She's young, bright, absolutely great with kids, and already has her master's degree (she's _only_ seven years younger than I was when I got _my_ master's degree). In the last year, she's also gotten married _and_ gotten pregnant. She's already done more things at age 23 than most of us do in a lifetime. Unfortunately, this has been a really rough pregnancy for Elma. She's called in sick--or at least it's seemed like she has--every week throughout her pregnancy. It's gotten to the point that I've begun to kid her that she ought to save herself a few phone calls--instead of calling us to let us know she's feeling sick and staying home, she ought to call us to let us know she's feeling well and coming in. Now, why do I bring up the story of Elma here in an Apple II publication, you ask? To set the stage for this: this edition of _GenieLamp A2_ is late, as it's been regularly since I became editor. In fact, I've been late more times in the first six months of publication than my predecessor, Doug Cuff, was in his entire (prodigious) 40 issue run as editor. I've posted so many notes in the A2 RoundTable about _GenieLamp A2_ being late that I think I would post a lot less notes if I just did it to tell everyone when it'll be on time. I find this entire matter totally unacceptable, and since it's my responsibility to do something about it, I've come up with a plan. Henceforth, _GenieLamp A2_ 's new publication date will be the fifteenth of the month. There's two reasons for this. First, I get totally bombed at both of my jobs at the end of the month, so I think the middle of the month is just a better time for me. Second, since we cover everything happening in Genie's A2 and A2Pro RoundTables right to the end of the month, it gives me a few more days to catch up with any hot potatoes thrown out on the 30th or 31st. [*] [*] [*] If this month sounds like a bummer so far, at least there's The Mother Of All Silver Linings to this dark cloud of an editorial: KansasFest 1997, _THE_ premier Apple II event of the year, is just around the corner. For the third year (and my first as editor of this publication), I plan to be in attendance, and we'll again have full coverage in the August issue of _GenieLamp A2_. . . which will be out around the fifteenth of the month. -- Ryan Genie Mail: A2LAMP Internet: a2lamp@genie.com __________________________________________________________ | | | REPRINTING GENIELAMP | | | | If you want to reprint any part of GenieLamp, or | | post it to a bulletin board, please see the very end | | of this file for instructions and limitations. | |__________________________________________________________| ASCII ART BEGINS _____ _ _ ___ ___ / ____| (_) | | / _ \|__ \ | | __ ___ _ __ _ ___| | __ _ _ __ ___ _ __ | |_| | ) | | | |_ |/ _ \ '_ \| |/ _ \ | / _` | '_ ` _ \| '_ \ | _ | / / | |__| | __/ | | | | __/ |___| (_| | | | | | | |_) | | | | |/ /_ \_____|\___|_| |_|_|\___|______\__,_|_| |_| |_| .__/ |_| |_|____| | | |_| ASCII ART ENDS [EOA] [HEY]////////////////////////////// HEY MISTER POSTMAN / ///////////////////////////////// Is That A Letter For Me? """""""""""""""""""""""" by Ryan Suenaga [A2LAMP] o BULLETIN BOARD HOT SPOTS o A2 POT-POURRI o HOT TOPICS o WHAT'S NEW o THROUGH THE GRAPEVINE o MESSAGE SPOTLIGHT >>> BULLETIN BOARD HOT SPOTS <<< """""""""""""""""""""""""""""""" [*] CAT 10, TOP 2 ....... David Kerwood's Modem Impressions [*] CAT 10, TOP 3 ....... Telecomm Program Roll Call [*] CAT 13, TOP 18 ....... Shifty List 2.0 Ships! [*] CAT 17, TOP 25 ....... Do Not Feed The Energy Creature [*] CAT 28, TOP 8 ....... LemminGS Hints [*] CAT 35, TOP 33 ....... A Mime Stealing Home [*] CAT 44, TOP 7 ....... KFest! KFest! KFest! KFest! KFest! >>> A2 POT-POURRI <<< """"""""""""""""""""" THE NEWER PRINT SHOP I have uploaded 2 new New Print Shop files to the A2 """""""""""""""""""" library. They are file #28514, version 2.2 of the PIX.WHIZ program, and #28515, a design aid for people wanting to make NPS graphics with "NO" signs in them. The latest upgrade of PIX.WHIZ features sigmnificantly faster file operations than before. It can now load Print Shop GS graphics and convert them to New Print Shop format. I fixed the hardware conflict that prevented PIX.WHIZ from running while some clocks were installed, as well as the conflict with some RAM drives. I remedied the hardware conflict with the IIgs that caused the drawing screen to be scrambled. There are some other bug fixes, mostly related to the error recovery routine. There is even a prettier splash screen! File #28515, NO.SIGN.KIT, contains graphics grids with red slashed circles superimposed on them to help you design "NO" signs. There are 5 grids: 1 to design the lo-res picture of an NPS graphic, and 1 for each quarter of the hi-res picture in an NPS graphic. These grids are NPS full panels, so you can print them out using NPS. There is also a hi-res color graphic with the red slashed circle, so all you have to do is add the item inside the circle. (G.WRIGHT12, CAT6, TOP34, MSG:4/M645;1) MORE WITH HUGH ON PI!4 To all my PublishIt! friends: """""""""""""""""""""" Sorry I haven't written lately, and it has been intentional. By now, I had planned to make public much of the PI patch work I had been hacking on. Several weeks ago I was made aware of a pending important announcement concerning the PublishIt! program for the Apple II. As a result, I have temporarily refrained from uploading any of the patches or 'work arounds' that I've been working on. If things go well, perhaps PublishIt! will be improved even more than I had imagined. So, please don't give up on PublishIt! At least, not yet. Hugh... (H.HOOD, CAT8, TOP18, MSG:168/M645;1) >>> HOT TOPICS <<< """""""""""""""""" NIBBLING ON HISTORY What was that last issue date of Nibble magazine? I """"""""""""""""""" was just going through my collection and my last issue is June 1990, but the address label says my subscription ran through May 1991. I figure I either misplaced some forgot issues, to pay my renewal, or June 1990 was the last one. It was fun to go back and read some of them. My collection goes back to 1983 (its fourth year, I think.) - Tony (A2.TONY, CAT2, TOP4, MSG:24/M645;1) >>>>> July 1992 (Vol 13 No 7), I'm afraid, Tony. Looks as though you've """"" misplaced a lot. Doug C. (D.CUFF, CAT2, TOP4, MSG:29/M645;1) THIS MIME DOESN'T TALK EITHER I hope this counts as a "hard to place" """"""""""""""""""""""""""""" question. Lately I've been receiving Email through the internet in which attached files, even text files, have been converted to something called "64-bit encoding". The sender did not specifically choose it, so I assume it's a default somewhere. It's not binhex, uuencode, apack, BINSCII, or anything else I've checked. Does anyone know of an Apple II or IIgs program that can decode these things? - Phil Albro (P.ALBRO, CAT2, TOP4, MSG:53/M645;1) >>>>> Those are Base64 encoded files, also known as MIME files. """"" || Does anyone know of an Apple II or IIgs program that can decode these || things? Yep. A program called StolenBASE was recently released by Aaron Pulver. Unfortunately, it's available on-line only on Delphi. The author stipulated it could not be distributed anywhere else on-line. If you have an account on Delphi, you're all set. Just check out the Databases (Libraries) on Delphi A2 or A2pro. Otherwise, StolenBASE will also be available as a featured program on the Juiced.GS Collection Shareware '97/Spring two-disk set, to be released on or around June 1. Cost of the two-disk set is $7. Of course, there will be tons of other stuff on the disk as well as StolenBASE. Max Jones Juiced.GS http://users.ids.net/~kerwood/juiced.gs (M.JONES145, CAT2, TOP4, MSG:54/M645;1) SEE A DIFFERENT SHRINK Why do various versions of ShrinkIt save .BXY """""""""""""""""""""" files under different filetypes? I have them as TXT files and as LBR or $E0 files. Charlie (A2.CHARLIE, CAT3, TOP29, MSG:78/M645;1) >>>>> ShrinkIt 3.4 and GSHK 1.1 both use the proper filetype of $E0/$8000 """"" when creating a Binary II file. They also use the proper filetype of $E0/$8002 on the actual archive inside the Binary II. ($E0 and LBR are hexadecimal and textual versions of the identical filetype, by the way.) The problem may come when you download Binary II files. If your telecom program strips the Binary II during the download, the internal archive will arrive on your disk with the proper filetype and filename (at least for files on Genie and Delphi, where they are carefully checked.) However, if you download without stripping the Binary II, then the file will arrive on your disk with whatever filetype your telecom program defaults to (usually BIN or TXT.) The whole point of Binary II (and MacBinary on the Mac) is to avoid the mess of downloading files with unknown filetypes and having to manually change the8m. If you choose to download files with the Binary II intact, you'll run into TXT and/or BIN files instead of $E0 (LBR) files. Does that answer your question? - Tony (A2.TONY, CAT3, TOP29, MSG:79/M645;1) >>> WHAT'S NEW <<< """"""""""""""""'" END OF AN ERA EGO Systems Mail Order Operation Closes Down on Friday, """"""""""""" June 27th 1997 Well folks, it s been fun, but I m afraid that it s time for me to pull the plug on EGO Systems Mail Order operation. There are two reasons for this: 1) Money. Specifically, a lack of it. The Apple II mail order business is about as dead as it can get. 2) Time. Given that there was little or no money coming in from the mail order operation, I had to take part-time employment as a consultant. I ve been far more successful at this than I had anticipated, and it s left me very little time for anything else. I ve also been doing some freelance writing (which has resulted in even more consulting), so I just don t have the time to continue to run the mail order business. So, here s the plan: o - Friday, June 27th 1997 will be the last day that EGO Systems takes orders for any of the products listed in our last catalog. (Assuming that we have anything left.) o - The EGO Systems web site (http://www.hypermall.com/ego/index.html) will be updated as often as possible to reflect which items are still in stock and which items are sold out. o - EGO Systems will no longer accept purchase orders or invoices. o - I am almost never in my office any more (due to my consulting work). Because of this I strongly encourage everyone to mail, Fax or e-mail any orders. You can also call and leave a message. I WILL call you back (assuming you leave a daytime phone number), but it will be either on Saturday or after 6 PM Eastern Time. o - From this point on, items will be sold on a first-come, first-served basis--when I sell out of an item, that s it, it s gone for good. I m down to my last 10 or so copies of most items, so if you want something, be sure to place your order now to make sure you get your copy. (If you want to pay by check and want to make sure we don t sell out of something, CALL AND LEAVE ME A MESSAGE and I ll hold a you a copy for ONE WEEK.) If you order by mail, be sure to include an e-mail address so that I can notify you if an item is sold out. (If we are out of stock on an item, I ll fill as much of your order as I can and issue you a refund check.) Of course, there are a few items that I m overstocked on. So, I m lowering the prices on the following items in order to move them out as quickly as possible (all otherINFOS.VOv5' 'HYPERQUART.INFOG $JUICEDGS.INFO` < $-LAMP.JUN97.A2n  ;$FOCUS.INFO($-LAMP.MAY97.A2 :$A2FAQ.REFU4~8$ prices remain the same due to the low quantities I have in stock): HardPressed - $25 Pointless - $25 TypeSet - $15 TypeWest - $15 The following items are already out of stock and will NOT be reordered (as items sell out, I ll post announcements on the EGO Systems web site): Animasia 3D TimeOut AboutTime Module ZipGS accelerator Any backorders for these items are hereby CANCELED. If you want to get any of these, you ll need to contact the publisher directly. And, while I hate to do this, I m also pulling the plug on the KansasFest 96 video. (We actually got about halfway finished with it when my consulting business took off.) Unfortunately, we never got more than 10 orders for the video, so there was very little impetus to actually finish the video. So, what will become of the EGO Systems product line (Balloon, AutoArk, etc.)? Well, I hope to sell the rights to most or all of these titles to new publishers. If you are interested in acquiring the rights to one or more of these products, contact me as soon as possible. I am also looking for someone to take over the distribution of all of the GS+ Magazine back issues I have left. However, I am NOT releasing ANYTHING into the public domain (or as shareware)! So if anyone tells you otherwise, they are either lying or misinformed.. Well, that about all I ve got to say, except Thanks! Because so many of you were willing to actually put your money where your mouth was, I was able to stay in the Apple II business for over 7 years! Not too bad, not too bad at all... (DIZ, CAT33, TOP2, MSG:25/M645;1) KFEST! KFEST! KFEST! KFEST! KFEST """"""""""""""""""""""""""""""""""""" ______ _____ ( ) ( ) ________________________________________ | | / / ( _________________________'97____) | | / / | | | |/ / | | II Infinitum!! | / | |______ | |\ \ | _______) __________ ________ ________ | | \ \ | | ( _____) ( ___) (__ __) | | \ \ | | | |__ \ \ | | | | \ \ | | | __) \ \ | | | | \ \ | | | |_____ ___\ \ | | (______) (________) (_______) (__________) (_________) |___| KFest '97 will again be held on the campus of Avila College in Kansas City, Missouri. It will take place from July 30 - August 3, 1997. The cost will be only $300 until May 20, which _includes_ use of a double room in the Avila College dorms _and_ meals! There are also a limited number of single rooms available for $375. (If you wish to stay at one of the many hotels or motels near the college then the cost is $225, but you would, of course, have to find and pay for your own room and meals.) These prices will go up by $75 on May 21, so sign up early. The last date pre-registrations will be accepted is July 20th. Check-in will be on Wedensday from 1-4 pm, and check-out from 11 am - 1 pm on Sunday. Computer sessions will be conducted on Thursday and Friday. A vendor fair is scheduled for Saturday morning, with software and hardware demos slated for Saturday afternoon. Meals included in the registration price are Thursday breakfast through Sunday breakfast, with the exception of Saturday dinner. All children under 18 years must be accompanied by a parent or legal guardian. ++ Please Note++ Dinner on Wednesday and Saturday are NOT included this year. Attendees can dine on their own at one of the many fine restaurants near the Avila campus, or join the Kfest '97 group for their annual treks to KC Masterpiece and Jess & Jim's Steak House. *** KFest this year is being sponsored by InTrec Software, Inc.. You can send your completed registration forms to: KFest '97 c/o Intrec Software 3035 E. Topaz Circle Phoenix, AZ 85028-4423 * Please make checks payable to: InTrec Software *** Credit Card registration is also available. Just call InTrec Software, Inc. with your VISA, MasterCard, Discovery, or American Express number at (602) 992-1345, Mon-Fri 8:00AM-5:00PM Mountain Standard Time. If you prefer, you can FAX your registration with credit card account number and expiration date to: (602) 992-0232 Mon-Fri 8:00AM-5:00PM Mountain Standard Time. If you prefer registering by Email, and are using a VISA, MasterCard, Discovery, or American Express for payment, you can send the completed registration form via InterNet Email to: proterm@intrec.com *** If you have questions about KFest, or wish to make suggestions, you can find answers via the InterNet. Just send an email message to Cindyadams@delphi.com, or visit the World Wide Web page at http://www.primenet.com/~adams/kfest.html ****** (cut here)****** - - - - - - - - - - - - - - - - - - - KFest '97 Registration Form Name: Address: City, State, Zip: Phone (w): (h): Email address: Roommate preference (if any): Do you prefer a smoker or non-smoker? Howbout a collectible, soft and thrilling KFest '97 T-Shirt? Yes I want One (Many)!!! [ ] T-shirts are $15.00 each and are available in Small, Medium, Large, X-Large. Please circle size(s) Small Medium Large X-Large Check here [] for additional X's on your X-Large T-shirt and indicate size needed: _________ Send this completed registration form and fee to: KFest '97 c/o Intrec Software 3035 E. Topaz Circle Phoenix, AZ 85028-4423 * Please make checks payable to: InTrec Software Credit Card registration is also available. Just call InTrec Software, Inc. with your VISA, MasterCard, Discovery, or American Express number at (602) 992-1345, Mon-Fri 8:00AM-5:00PM Mountain Standard Time. If you prefer, you can FAX your registration with credit card account number and expiration date to: (602) 992-0232 Mon-Fri 8:00AM-5:00PM Mountain Standard Time. If you prefer registering by Email, and are using a VISA, MasterCard, Discovery, or American Express for payment, you can send the completed registration form via InterNet Email to: proterm@intrec.com For Credit Card registration please check: [] Visa [] MasterCard [] Discovery [] American Express Please charge my account number: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Expiration: _ _ / _ _ (CINDY.A, CAT44, TOP7, MSG:98/M645;1) SHIFTY LIST 2.0: SHAREWARE The Shifty List 2.0 Demo has been uploaded! """""""""""""""""""""""""" Once it's been released by our friendly neighborhood librarians, it will be file #28522 here in A2! The Shifty List 2.0 demo supports all the features of the full Shifty List 2.0, except -- 1. You can't print out your scripts in the demo. 2. The boot-time script menu is limited to five scripts. 3. Although your scripts can have as many items in them as you like, when you boot, only the first five items in the script will actually be loaded. Also, the demo pauses while booting your system and reminds you to pay your $20.00 shareware fee. Once you pay the shareware fee you will receive an unrestricted copy of Shifty List 2.0. If you include your email address with your registration, you will be emailed a copy, and will receive a copy on disk a few days later. If you don't include your email address, you'll just get the disk copy. Note that the unregistered demo version of Shifty List 2.0 can be distributedonline, on disks of the month, etc. The registered version CANNOT BE DISTRIBUTED without written permission from myself. I hope you enjoy Shifty List 2.0! :) Sheppy (SHEPPY, CAT13, TOP18, MSG:74/M645;1) CHRIS VAVRUSKA'S NEW STUFF I have uploaded some finder extension that """""""""""""""""""""""""" some of you may find useful. Let me know what you think Current available 'vav-ware' programs: Number: 28531 Name: FF1.0.BXY FinderFlipper V1.0 Number: 28534 Name: FR10.BXY FinderRefresher V1.0 Number: 28532 Name: WORKSETS1.0.BXY WorkSets V1.0 Number: 28533 Name: CDR1.0.BXY CD Remember V1.0 FinderFlipper V1.0: FinderFlipper is a finder extension that aids in the task of bringing windows up front. No longer will you have to move windows around in order to find one that you have buried. No longer will you have to move your mouse all the way to the Windows menu to select the window you want. <<<>>> FinderRefresher V1.0: FinderRefresher is a finder extension that will force the front most window to refresh itself. <<<>>> WorkSets V1.0: If you work with different files in multiple folders often and dont like to clutter up the desktop of the Finder with aliases then WorkSets is for you. WorkSets is a finder extension that allows the user to record the open folders on the desktop in a list for later retrieval. <<<>>> CD Remember V1.0: Have you ever been surfing through a CD checking out what is there weaving your way through all of the directory structures....wait, something strikes your fancy, it's an application...Double-click....hey, this stinks or worse yet, a system crash. After you return to the Finder you have to start all over surfing your way back down the directory tree to get back to the point at which you left. Well, no longer will you have to spend your time retracing your steps, let CD Remember remember where you were. CD Remember will remember folders you have open when you leave the finder until you return. <<<>>> (C.VAVRUSKA1, CAT13, TOP10, MSG:1/M645;1) >>> THROUGH THE GRAPEVINE <<< """"""""""""""""""""""""""""" BYTEWORKS REPRINTS APDA While I have not sent out a mailing announcing """"""""""""""""""""""" the books we put back in print, I did announce it a few places. This topic wasn't one of them. Shame on me. These books are now back in print as APDA reprints. They are laserprinted on 8.5x11 paper, drilled for standard notebooks. APDA-53 Apple IIGS Toolbox Reference Volume 1 769 pages $45 APDA-54 Apple IIGS Toolbox Reference Volume 2 730 pages $45 APDA-55 Apple IIGS Toolbox Reference Volume 3 1063 pages $55 APDA-56 Apple IIGS GS/OS Reference 526 pages $30 APDA-57 Apple IIGS Firmware Reference 345 pages $30 APDA-58 Apple IIGS Hardware Reference 346 pages $30 Mike Westerfield (BYTEWORKS, CAT4, TOP32, MSG:23/M645;1) >>> MESSAGE SPOTLIGHT <<< """"""""""""""""""""""""" Category 44, Topic 7 Message 69 Tue Apr 15, 1997 CINDY.A [Cindy] at 19:08 EDT For the past nine years, Apple II enthusiasts from around the globe have made an annual pilgrimage to Kansas City, Missouri, to learn more about their computers, share their knowledge with others, and rekindle the spirit that has made their virtual community unique and powerful. Kfest has become a rich tradition. We are pleased to announce that in 1997, the tradition continues ... From July 30 through August 3, Kfest '97 will once again be in session on the campus of Avila College in Kansas City. Sessions on a wide variety of Apple II topics will be conducted July 31 and August 1. A vendor fair and product demos will occur on August 2. The dorms, however, will be available for attendees between Wednesday, July 30, through Sunday, August 3. As always, the Kfest committee is working to make this year's event the best ever. Kfest '97 will provide the perfect opportunity for attendees to make new friends, renew acquaintances, see the faces of on-line neighbors they've chatted with through the years, meet some of the programmers, developers, writers and publishers who help keep their computer platform viable is today's world, and hear lectures on computer issues and witness demonstrations of new and old hardware and software. Most of all, they'll have fun! So, you may ask, does this mean Kfest has everything an Apple II user would want? Well, no. There are some things Kfest '97 won't provide. We can almost guarantee you won't get much sleep. We can also guarantee that you won't mind a bit. In fact, you won't want to sleep much for fear that you'll miss something! Last year's Kfest was special for a number of reasons. It provided the first demonstration of Gus, the IIGS emulator for the Power Macintosh; marked the release of Spectrum v2.1; roasted Apple II luminary Joe Kohn; and gave birth to the first Apple IIGS web browser, Spectrum Internet Suite. It's too early to know what magic Kfest '97 will conjure up. Be assured it will once again produce special magic. Now is the time to make plans and get registered for Kfest '97. As always, staying in the Avila dorms is the recommended method of attendance. Much of the special magic occurs after hours, and being on hand for informal, spontaneous events will make your Kfest experience even more enjoyable. Avila College will be providing up to 80 rooms for Kfest '97 attendees. So there should be plenty of room for everybody on campus. If you would prefer to stay off-campus, there are a number of hotels and motels close by. Off-campus registrations are also available. Ready to sign up? We thought so! You won't regret it. Stay tuned for registration information as soon as it is available. Cindy (KFest Big Cheese) [*][*][*] While on Genie, do you spend most of your time downloading files? If so, you may be missing out some excellent information in the Bulletin Board area. The messages listed above only scratch the surface of what's available and waiting for you in the bulletin board area. If you are serious about your Apple II, the GenieLamp staff strongly urge you to give the bulletin board area a try. There are literally thousands of messages posted from people like you from all over the world. [EOA] [A2P]////////////////////////////// A2/PRO_ductivity / ///////////////////////////////// By Ryan M. Suenaga, M.S.W. [A2LAMP] >>> A2PRO BITS & BYTES <<< """""""""""""""""""""""""" LEARNING THE BASICS """"""""""""""""""" _________________________________________________________________________ | | | Complete Applesoft Course Now Available! | |_________________________________________________________________________| Now is a perfect time to learn Applesoft programming! Former A2 University Dean, Charles Hartley, has written a beginner's course on programming in Applesoft BASIC. Applesoft is built into every Apple II computer, so no compiler or special software is needed. Charlie has written quite a few outstanding programs including Computer Keyboarding 5, Scavenger Hunt World, and Scavenger Hunt USA. Learn from one of the masters, download the complete five lesson course from the A2Pro Software Libraries. Files: 5186 APPLESOFT01.BXY 5204 APPLESOFT04.BXY 5193 APPLESOFT02.BXY 5205 APPLESOFT05.BXY 5203 APPLESOFT03.BXY Discussion of all lessons will be held in the A2Pro Bulletin Board in Category 22, Topic 20. Type 'm530;1' to get there, without the quotes. ___________________________________________________________________________ (RUSSELL.N, CAT1, TOP17, MSG:194/M530;1) DO IT YOURSELF HTML I took the HTML course last year. Now I'm doing some """"""""""""""""""" casual page writing and decided to invest in a good book. I looked at Lemay's "Teach Yourself HTML" as recommended by Charlie in the lessons. It was $30, though, and seemed to cover much Netscape and the like. I picked up instead the "10 Minute Guide to HTML", only $15. It says right in the introduction: "We don't make any assumptions about the kind of computer system you're using because HTML is completely system-independent." That was good to see. The book covers some things A2U's lessons don't, but also vice-versa. I recommend both. Now a quick question. When do I have to use reserved characters - such as & for ampersand, % for percentages, etc? Lesson 7 in A2U gives a full list that includes substitutes for everything, even commas. Can't I use any punctuation in my web pages? -Ken (KEN.GAGNE, CAT22, TOP22, MSG:163/M530;1) >>>>> Sure you can. Just because a character has an code equivelent like """"" &char doesn't mean that you can't just use the character straight, as long as it isn't reserved for something. Like, you have to use the equivelents for "<" and "&" itself, and be careful about quotation marks when you are already within quotes like in a link name, . The &chars also give you access to a much larger set of characters than you could type, such as accented letters and stuff. But yeah, feel free to go ahead and use all the commas you want. :) -Bret (B.VICTOR1, CAT22, TOP22, MSG:164/M530;1) >>>>> The only escape codes that you must use are """"" < < > > & & For example,

if x < 0 thended as

if x < 0 then print i

Otherwise the browser will think that the less than symbol is the beginning of a tag and get confused. There is also an escape code for the quotation mark, but most browsers don't need it. Charlie (A2.CHARLIE, CAT22, TOP22, MSG:165/M645;1) >>>>> Here is a bit of new information about the " entity for those """"" of you who are writing HTML code. This comes from the official source of information for the latest version of HTML (3.2). From: http://www.w3.org/pub/WWW/MarkUp/Wilbur/ What happened to "? Several people have commented on the absence of the " entity in the HTML 3.2 Recommendation. This disappeared in a rationalization of the entities, and with hindsight should not have been removed. In general, you don't need it, and here are two work arounds: When you want to include a double quote mark in a CDATA attribute value, you can go ahead and do so provided you use single quote marks around the attribute value itself, e.g. ALT='and then he said "Let it be done" and it was so' Another approach is to use the numeric entity " as in: ALT="and then he said "Let it be done" and it was so" This latter method is perhaps better suited to authoring tools as it doesn't depend on any contextual clues and can be used in normal text as well as in CDATA attribute values. (A2.CHARLIE, CAT22, TOP22, MSG:170/M530;1) <<<<< I've been using the

and

tags to center text """"" ON the page. I was looking at the source for another A2er's page and he used
and
. Are there any other easier justification commands I don't know about? :) -Ken (KEN.GAGNE, CAT22, TOP22, MSG:172/M530;1) >>>>> The
and
tags were originally NetScape specific, """"" but are now generally recognized by most up-to-date browsers. I believe (without looking) that the

tag that you are using is recommended in the HTML 3.2 specs. Charlie (A2.CHARLIE, CAT22, TOP22, MSG:173/M530;1) WHITHER GSOFT? ...is there any word yet on when GSoft will be """""""""""""" available... I'd guess late May to mid June. Alpha test should start in mid May. A lot of things could change the schedule, though, so don't make firm plans based on this estimate. Mike Westerfield (BYTEWORKS, CAT36, TOP35, MSG:23/M530;1) >>>>> To what extent do us old Applesoft types have to retrain our """"" brains? For instance, Applesoft likes this just fine: Q$ = LEFT$ (AZ$, 40) That is, Applesoft isn't bothered by the fact that AZ$ is only 26 characters long, despite the fact that we're trying to take the leftmost 40 characters of it. (No wisecracks about D coming before E, okay?) Doug C. (D.CUFF, CAT36, TOP35, M26:19/M530;1) <<<<< Quite a bit, but not for reasons like the one you gave. """"" Applesoft was designed for a very specific operating environment: The 48K tape based 8 bit Apple ][ computer. Disk commands were hacked in later, and it shows. The limited space available forced you to do things with PEEK, POKE and CALL that just won't port to any other platform--including GS/OS. THESE are the areas where you will need to retrain a bit. On the other hand, the benefit is enormous. You have a full set of disk I/O commands built right in. You get long integer, byte and double precision variables in addition to Applesofts integer, real and string. You get records and pointers so you can manipulate the toolbox the way it was designed to be used--and a complete Apple IIGS toolbox interface, too. GSoft supports ORCA compatible editors and debuggers (and can run from the ORCA environment, although it ships with it's own Applesoft-like environment). You get structured statements, like IF-THEN-ELSE-ENDIF, WHILE-WEND, SELECT-CASE and DO-WHILE. You get PRINT USING (formatted output) and LINE INPUT (input that works with commas). Line numbers are optional. DEF FN takes multiple parameters, or you can create _true_ subroutines and functions with passed parameters and local variables. Of course, the 48K barier is shattered: you can use all of available RAM for program and variable space. And since floating point is not done inSANE, it's fast. (Some compiled floating-point programs actually run slower on the GS that the same program in Applesoft. GSoft is faster still.) In short, GSoft is not (and cannot be) 100% Applesoft compatible. Old programs will have to be ported, and although tools included with GSoft will help, they won't make it 100% automatic. But the added features, added memory, and extra speed will defintely make GSoft the choice for new programs--and will make it worth while to port many old ones. Mike Westerfield (BYTEWORKS, CAT36, TOP35, MSG:20/M530;1) [EOA] [BAN]////////////////////////////// FILE BANDWAGON / ///////////////////////////////// Top 10 Files for March """""""""""""""""""""" by Douglas Cuff [D.CUFF] This feature lists the ten most popular files for the month. To give files a chance to seek their own levels, no files will be added to the list until they've been in place at least a month. This month, we look at the files uploaded 1-31 March 1997. This isn't the Academy Awards ceremony, folks; it's more like the People's Choice Awards (both of which are trademarked, by the way). The Top 10 doesn't necessarily tell you what's new and interesting--what files _you_ might find interesting--it simply tells you what files have been downloaded a lot--what other people found interesting! This month, GenieLamp A2 occupies two spots on the list, but we're just counting that one file. We hope this explains why there are 11 files on the Top 10 list. File # Filename Bytes DLs Short description ------ --------------- ------ --- ------------------------------------- 28404 SIS.SCREENS.BXY 48512 76 Screen shots of SIS in action 28395 RTC.SIS.BXY 43648 62 Transcript of SIS RTC celebration 28394 FOGHORN.BXY 29356 58 rSound of old SF Bay foghorn. 28403 PAUG.SIS.BXY 19328 57 Transcript of PAUG-SIS 28368 DESKPLAY202.BXY 42240 51 Deskplay 2.02 plays Amiga MOD songs 28357 ALMP9703TXT.BXY 37248 42 GenieLamp A2, Mar. 97 (text) 28356 ALMP9703AWP.BXY 41472 42 GenieLamp A2, Mar. 97 (AppleWorks) 28422 MIME64.BXY 18816 40 base64 en/decoder for IIGS! 28424 SARA.GIF 51044 34 Color GIF of Sara Hussong 28438 ENVEL.PRINT.BXY 5376 28 Envelope Printer 28402 A2QWK23.BXY 95744 27 Freeware QWK mailer version 2.03 SIS.SCREENS.BXY Nine sample screens from Spectrum Internet Suite, as """"""""""""""" provided by beta tester Max Jones. You get a look at Syndicomm's A2 Web page, Ewen Wannop's page, Geoff Weiss's page, the official SIS site, and the Alta Vista web search engine site (with and without SIS's text input-window interface). You'll also see SIS's bookmarks and options screens. Freeware. RTC.SIS.BXY Transcript of the late-night conference at which Spectrum """"""""""" Internet Suite was announced to the world--Friday, 7 March 1997. Special guests present are Dave Hecker, partner in Seven Hills Software; Ewen Wannop, author of Spectrum telecommunications program for the Apple IIgs; and Geoff Weiss, a system administrator for an east coast internet service provider, who worked on the scripts for SIS. Freeware. FOGHORN.BXY An rSound of a foghorn--the one of the old foghorn heard on """"""""""" San Francisco Bay, to be exact. Suitable for use with the IIgs sound control panel. Freeware. PAUG.SIS.BXY Transcript of the Planetary Apple Users Group conference for """""""""""" those who missed the Spectrum Internet Suite roll-out conference. SIS beta testers Cindy Adams and Max Jones field questions about the capacities without Seven Hills looking over their shoulders. :-) Freeware. DESKPLAY202.BXY Deskplay v2.0.2 by Jesse Blue and Clue of Ninjaforce is a """"""""""""""" new desk accessory that allows you to play MOD (Amiga music module) files from your desktop. Deskplay depends on Shellplay by Brian C. Bening to play the songs, but provides an attractive CD-style playing interface. This new version fixes two minor bugs, adds keyboard equivalents for some commands, and allows viewing of pathnames in the song list. Freeware? ALMP9703---.BXY Two editions of the February issue of GenieLamp A2 grace """"""""""""""" our Top 10 list this month--and, for a wonder, both the AppleWorks and the standard text file edition had exactly the same number of downloads. All editions feature the same great articles--a behind-the-scenes interview with the Spectrum Internet Suite development team from Max Jones, the return of Peter Brickell's "Real World Apple" column, and a "PD_Quickview" column on Change-A-File. Freeware. MIME64.BXY Mime64 by Aaron Pulver is a base 64 decoder for the Apple IIgs """""""""" ported from a decoder by Karl Hahn. It allows you to handle the mime attachments that people on other platforms keep e-mailing you and posting on usenet newsgroups. It requires a shell like ORCA or GNO. (A desktop version is now available, but only on Delphi.) Freeware. SARA.GIF A color GIF graphic portrait of A2 regular Sara Hussong. """""""" Freeware. ENVEL.PRINT.BXY Enveloper by John "Honeybee" Shaver is a BASIC program """"""""""""""" intended for those times when you want to address several envelopes. It will work with envelopes as small as 4" x 2.5" or as big as 8" x 11". Freeware? A2QWK23.BXY The 2qwk! by Tom Larson is an offline mail reader for qwk """"""""""" mail systems. Offline mail readers allow you to download new messages and mail in a compact format and read and reply to them offline, and qwk is pretty popular on other platforms. Requires at least an 128k enhanced Apple IIe. Freeware? [EOA] [RWA]////////////////////////////// THE REAL WORLD APPLE / ///////////////////////////////// Connecting to the World Outside """"""""""""""""""""""""""""""" by Peter C. Brickell [P.BRICKELL] >>> PART 4: PUSHING YOUR APPLE'S BUTTONS <<< """"""""""""""""""""""""""""""""""""""""""""" So far in this series I have talked about timing sequences and the paddle inputs. This time I will be describing the push button inputs or PB lines as they are known. Before I start, I should warn you that the push button inputs work slightly differently on all the various Apple II models. The //c actually lacks one of the PB lines that the other models have. So some caution must be used with selecting an appropriate project for your particular machine. I will give some details on the differences at the end of this article. With that said, the PB input lines are useful for a wide range of projects that you might not think of right away. Everyone has used these PB lines at one time or another with a joystick or paddles (the "firing" buttons) or when using the Open Apple (OA) or Solid Apple (SA) keys on the newer Apples. The PB lines are simply a way of inputting an "on" or "off" signal to the Apple. They are actually the essence of digital logic as they can only have on of two values - high/on or low/off. They are in fact, TTL (transistor-transistor logic) inputs for those who are familiar with such things. With that information out of the way I will leave digital theory behind for the rest of this article! The three lines are found on both the internal 16 pin DIP connector and on the external DB-9 connector (on models where it exists). Their operation is very simple. If a high voltage (in digital terms) is applied to a PB line, its corresponding memory location will hold a value greater than 127. If a low voltage is applied to the line, then the same memory location will hold a value of less than 128. The actual value stored in each case is not important (actually it is random). One can easily determine whether the PB line voltage is high or low by checking to see if its memory location is greater than or less than 127. Here is where the PB lines are found on the Apple 16 pin DIP connector. 16 PIN I/O CONNECTOR (from above): _________ __________ | \____/ | +5 V | 1 X 16 | | | PB0 | 2 X 15 | | | PB1 | 3 X 14 | | | PB2 | 4 X 13 | | | | 5 12 | | | | 6 11 | | | | 7 10 | | | GND | 8 X 9 | |_________________________| On the DB-9 pin connector on the newer Apple IIs, here is the relevant pin number assignment: +5 V = Pin 2 GND = Pin 3 PB0 = Pin 7 PB1 = Pin 1 PB2 = Pin 6 (not available on //c or //c+) To be specific, a TTL high voltage is greater than 2 volts DC and a low voltage is less than 0.8 volts DC. The range between 0.8 and 2 volts is a digital waste land where the results will be unpredictable, so good project design avoids producing this in-between condition. From Applesoft it is a simple matter to check the condition of a given PB line. The addresses to check for each line are as follows: PB0 = 49249 decimal, $C061 hexadecimal (same number for those who don't have 16 fingers) PB1 = 49250 decimal, $C062 hex PB2 = 49251 decimal, $C063 hex To continuously check and display the status of PB0 one can write something like this: 10 X = PEEK(49249) 20 IF X > 127 THEN PRINT "PB0 IS HIGH" 30 IF X <= 127 THEN PRINT "PB0 IS LOW" 40 GOTO 10 Obviously by substituting the other addresses listed above the other PB lines can be checked. Try this with a joystick or paddle. If you have a model other than a II or II Plus, you can use the Open Apple key to activate PB0. Those of you who were paying attention in class will remember that in my installment on timing loops I used the WAIT command to check the status of a PB line and used the joystick button to change its condition to start a timing sequence. This is an example of a very straightforward use of the PB lines. On a joystick or set of paddles connected to your Apple, you have access to PB0 and PB1. The same lines can be operated on later model Apple IIs by pushing the OA and SA keys respectively as well as by using the joystick/paddles. So what is the big deal about telling when the joystick buttons or a key is presses you may ask (and probably will!). The real usefulness of the PB lines for interfacing become apparent when you build your own "switch" or "button" to push. This need not be a physical button or switch as we will see later. But first, let's look at the wiring of a simple PB circuit using a mechanical switch. It looks like this: +5 V ________________ | | / / Switch / | PB0 _______________| | | / \ / Resistor \ / | GND ________________| As the circuit is pictured above, any voltage present at the PB0 line is drained to ground through the resistor. Thus the voltage at the PB0 line is essential 0 volts and the PB line is low (or "off" in this case). When the switch is closed, voltage will be applied to the PB0 line from the +5 volt source. If the resistor is of a sufficiently high value then the voltage will not be drained to ground quickly enough and the voltage at PB0 will rise. If the resistance is high enough to allow the voltage at PB0 to rise above 2 volts, then the PB0 line will be high (or "on" in this case). This is how the push buttons on a joystick are wired. Typical resistor values would be 200 to 500 ohms. The resistor is essential in this circuit not only to raise the voltage at the PB line, but also to prevent shorting the Apple's power supply +5V line to ground and possibly resulting in damage to the power supply, the computer, or both. If you think about the schematic of the switch circuit for a moment, you will realize that any device which can change its resistance from a very high value to a very low value could be substituted in place of the mechanical switch in this circuit. You may think that a thermistor (temperature sensitive resistor) such as was discussed in the last installment might work here. Unfortunately, the lowest resistance of most thermistors is still too high for this circuit. However, a simple replacement for the switch is a phototransistor. Under normal conditions its resistance is high (tens of thousands of ohms or more) thus producing an "off" when testing PB0. When a beam of bright light hits these phototransistors, their resistance drops to a few hundred ohms or less. In this case, the circuit above would produce an "on" signal when tested with an Applesoft program. Here we have the makings of a simple intrusion alarm or automatic door bell. Simply place a permanently lit light source (or even an invisible infrared radiation source) such that it illuminates a phototransistor across some pathway that you wish to monitor. A fairly simple Applesoft program could be written to repeatedly check the condition of the PB line. When the beam of light is broken by a person's body, the phototransistor will cease to conduct and the PB line will go low or off. The program could then beep the Apple's speaker to notify the owner of the presence of another person. Other possible security related "switches" are magnetic proximity switches for doors and windows and conductive tape for monitoring window glass. An enhancement to this type of device is a program which uses timing loops to measure how long the light beam is broken or intact. I am well acquainted with this idea as I have been using such a device and program over the last couple of weeks to test my camera shutters for accuracy and consistency of timing. A beam of light is broken when the camera's shutter is placed between the light source and the phototransistor. When the shutter opens, the Apple senses the high PB line and starts "counting" (i.e. the switch is "on"). When the shutter closes, the computer senses the return to a low condition at the PB line and stops counting (the switch is "off"). The counts are converted to milliseconds (by using a previous known time interval) and the shutter speed is reported on the screen as a fraction of a second. As you might suspect from my previous articles, this is a project from the Vernier Software book "How to Build a Better Mousetrap". See any of these articles for references. There are a myriad of other uses for sensing the PB lines. Some are quite complex in design. For example another Vernier project uses an integrated circuit chip which converts a voltage applied to its input pins to a certain and precise frequency of on/off pulses at its output pins. As the applied voltage changes, so does the frequency of pulses. By directing these output pulses to one of the PB lines, and using a machine language program to do the very fast counting required, the original applied voltage can be determined by the Apple. This device then becomes a way of turning your Apple into an accurate digital voltmeter. The ability to precisely measure voltage with your computer opens the door to many other uses for the venerable Apple II. I use this particular device for measuring nickel-cadmium battery voltages during controlled discharging and charging operations. With a simple amplifier circuit added on, an accurate temperature probe can be built using a thermocouple sensor. I will conclude by giving some details on the various circuits built into the different Apple II models. I do not know the exact circuit layouts for all the computers, but here are the major differences that you need to be aware of in order to use them for PB interfacing. First, let me say that the best machine for these projects is the Apple II or II Plus. Apart from being almost (or entirely) free if you know where to look these days, they have no interfering circuitry built in to them. They also have the full complement of PB lines available (i.e. three). Apple //e and GS: The OA and SA keys are wired to the PB0 and PB1 lines. Problems arise using these lines since there are internal resistors between the PB lines and ground. This could make some external circuits not behave as expected if they are very sensitive to resistance changes. Also, if the PB1 line is held high by an external circuit during boot up, this will have the same effect as depressing the SA key. The result is that the computer will execute a self test, rather than boot normally. The solution to these problems is to use the PB2 line wherever possible. It is not wired to any key and so has no extra resistors, nor will it affect the Apple's behaviour during boot up. Apple //c: Unfortunately this model has both OA and SA keys wired to PB0 and PB1 but has no PB2 line available. Use with caution. Platinum //e (with numeric keyboard): This model, in addition to the normal problems with the OA and SA keys, has capacitors wired to its PB lines. This slows down the rate at which they can change from high to low and vice versa. For simple on/off devices this will not matter. However it will affect circuits which depend on very high speed changes in these lines. The voltage monitor and the high speed phototransistor timer described above are candidates for trouble with this model of Apple II. With these caveats in mind, the lowly push buttons are some of the most useful "ports" on the Apple II computer. Have fun experimenting with them. As always, if you do not feel confident of your electronics skills, have someone who is experienced in this area give you a hand with project building and inspection. Happy button pushing! Next time - Introduction to the Annunciator Outputs //////////////////////////////////////// Genie_QWIK_QUOTE //// / "This seems like a perfect time for a Pentium joke." / / / / "Using 'perfect' and 'Pentium' in the same sentence / / is the joke." / ////////////////////////////////// CINDY.A & R.SCHUERGER1 //// [EOA] [LOG]////////////////////////////// LOG OFF / ///////////////////////////////// GenieLamp Information """"""""""""""""""""" o COMMENTS: Contacting GenieLamp o GenieLamp STAFF: Who Are We? GenieLamp Information GenieLamp A2 is published on the first of every """"""""""""""""""""" month in library 55 of Genie's A2 RoundTable (page 645;3). GenieLamp is also distributed on CrossNet and many public and commercial BBS systems worldwide. o To reach GenieLamp on Internet send mail to genielamp@genie.com or to reach GenieLamp _A2_, send mail to a2lamp@genie.com o Back issues of GenieLamp A2 are available in the A2 RoundTable Library #55 on page 645 (m645;3). o We welcome and respond to all E-mail. To leave comments, suggestions or just to say hi, you can contact me in the A2 RoundTable (Category 3, Topic 3) or send GenieMail to Ryan Suenaga at [A2LAMP] on page 200. >>> GENIELAMP STAFF <<< """"""""""""""""""""""" GenieLamp o John Peters [GENIELAMP] Publisher """"""""" o Mike White [MWHITE] Managing Editor APPLE II o Ryan M. Suenaga [A2LAMP] Editor """""""" o Doug Cuff [D.CUFF] Editor Emeritus o Peter C. Brickell [P.BRICKELL] A2 Staff Writer o Max Jones [M.JONES145] A2 Staff Writer A2Pro o Tim Buchheim [A2PRO.GELAMP] Editor """"" ATARI o Sheldon H. Winick [GELAMP.ST] Editor """"" IBM o Sharon Molnar [SHARON.LAMP] Editor """ MACINTOSH o Richard Vega [GELAMP.MAC] Editor """"""""" POWER PC o Ben Soulon [BEN.GELAMP] Editor """""""" \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//////////////////////////////////// Opinions expressed herein are those of the individual authors, and do not necessarily represent the opinions of Genie Online Services, Yovelle Renaissance Corp., GenieLamp Online Magazines, or T/TalkNet Online Publishing. Bulletin board messages are reprinted verbatim and are included in this publication with permission from Genie Online Services and the source RoundTable. Genie Online Services, GenieLamp Online Magazines, and T/TalkNet Publishing do not guarantee the accuracy or suitability of any information included herein. We reserve the right to edit all letters and copy. Material published in this edition may be reprinted under the fol- lowing terms only. Reprint permission granted, unless otherwise noted, to registered computer user groups and not for profit publications. All articles must remain unedited and include the issue number and author at the top of each article reprinted. Please include the fol- lowing at the end of all reprints: \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/////////////////////////////////// The preceding article is reprinted courtesy of GenieLamp Online Magazine. (c) Copyright 1996 T/TalkNET Publishing and Genie Online Services. To join Genie, set your modem to half duplex (local echo). Have your modem dial 1-800-638-8369 in the United States or 1-800-387-8330 in Canada. When you get a CONNECT message, wait for the U#= prompt, type: JOINGENIE and hit the RETURN key. Genie will then prompt you for your signup information. If the signup server is unavailable, call (voice) 1-800-638-9636 for more information. ////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ [EOF]  pUpdos0Pb:STAK@\Ba :  N 6<3??@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~DDDDDDDDDDDDDDDDDDPPPUPUPPPUPUdFDffDFdFdfDDfdFdFDffDFdFdfDDfdFODDOwwwwwwwwaaaaaaaaaaaaaaaaOOOOOOOOOOOOOOOOuuuuWWWWuuuuWWWWuuuuWWWWuuuuWWWWooooooooooooooooGil Amelio a quitt Apple. La socit dans la panade na plus de capitaine. Mais comme le dit la presse Macintosh : Je vais bien, tout va bien... Le 2 juin est sorti le premier numro dHyperQuaterly. Consacr Hypercard GS, ce premier numro contient onze piles. Labonnement depuis la France cote $40 adresser : Steve Cavanaugh Apple Blossom Publishing P.O. Box 120434 Boston, MA 02112-0434 Les cartes de crdit ne sont pas acceptes. -------------------------------------------------------------- After 9 months of planning and scripting, the first issue of Hyper Quarterly will be mailed out to subscribers on Monday, June 2, 1997. Our premier issue contains 11 stacks including the Front End designed by HangTime. Contents of Issue 1 =================== TZ Rolodex - Keep track of your contacts while this stack tracks their time and keeps them sorted for you. Good Eats! - Dozens of recipes for you to sample, and plenty of room for your own culinary creations Quarknet - Offline message processor for Delphi--tons of great features that will make browsing Delphi forums easier and more productive. PostScripter - Resize and reposition PostScript files you create in IIGS graphics programs, and print them in stunning detail! HC.Word - A text editor for HyperCard with advanced features like automatic "fancy text" (ligatures, etc.) and HTML export A la Carte - Automatically create menus for your own HyperCard stacks with no fuss or bother. ScriptMenu - put a Scripts menu in every stack as you work on it -- lists every object in your stack and lets you instantly open scripts associated with those objects. TableMaker - Need to create a quick HTML table for your Web page? With this stack, no knowledge of HTML is needed, just fire up this stack and create away. BookMark Manager - Is your Lynx Bookmark file getting unruly? Wish for a better editing option than VI or emacs? Here it is! HTML.to.WP - Need to download and print some web pages -- with formatting? This stack converts HTML to WordPerfect format so you can do it. Hyper Quarterly is a quarterly (of course) disk-based subscription from the publisher of The Apple Blossom. Our first issue features the work of Josh Calvin, Brian Gillespie, Gareth Jones, HangTime and Steve Cavanaugh. Stacks are created with HyperCard IIGS, and are delivered on two disks via first class mail. To effectively use Hyper Quarterly you'll need a IIGS with 2 MB of RAM, a hard drive and, of course, HyperCard IIGS. Subscriptions to Hyper Quarterly cost $35.00 for a one year subscription in the United States or Canada, $40.00 in other countries. Single issues are available for $11.95 in the US/Canada, $15.00 outside those countries. If you don't have HyperCard IIGS, we can sell you that (all 6 disks) too for $12.00 ($15.00 outside the US/Canada). Send subscriptions (with checks or money orders made out to "Apple Blossom Publishing"--sorry, no credit cards) to: Steve Cavanaugh Apple Blossom Publishing P.O. Box 120434 Boston, MA 02112-0434 rzzwwzwwwwwwwwzwwwwwwwwwwwzzzzzwzzwzwzzwwwzzwzzwwzwzwzwfgfwwwwwwwwwwwwwwwwwzwwwwzwwwzwwzzwwwwzwwwwwwwwwwwfwvvfgzwwgffgwwwwwwwwwwwwwwwwwwwwwwwwwzwzvgwwwwwwwwwwwwzzzzzwzwwwwwwwwwfgzvffwgggwwwwwvwwwwwwwwwwvwwwwwwwwwwzwwwwwwzwwzwwwzzwwwwwwwwwwwwwwwwwwzwzwgwvwwwwwzwwwwwwwwwggzzwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwzwwwc3D0@D@@@@@@@@@@@@@@@D@@@@@@@Dfwzzzzwtzzpzwz@zzzzzzzzzzA"""""R"R""RRB""RRRR"!"BBBR!!"BB!"R"RRB!"RBR!"B"RR""RR""@zwzwzzAUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPzzzzwUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPozzzAUUUUUUUUUUUUUUUUUUUZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPjz@UUUUUUUUUUUUUUUUUUuUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPozAUUUUUUUUUUUUUUUUUUzUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPozzUUUUUUUUUUUUUUUUUPuUUUUUUUUUUUUUUUUUUUUUUUUWwuwwyUPjzwzAUUUUUUUUUUUUUUUUZp%UUUUUUUUUUUUUUUUUUUUWwwwUQozzzAUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwwwyuPozzz@UUUUUUUUUUUUUUUU UUUUUUUUUUUUUUUUyy陙QozzzAUUUUUUUUUUUUUUUU UUUUUUUUUUUUUUU陙陙qowzAUUUUUUUUUUUUUUU_pUUUUUUUUUUUUW鞙陙ozzAUUUUUUUUUUUUUUUU`JUUUUUUUUUUUy陙陙ozzzzzAUUUUUUUUUUUUUUUU zUUUUUUUUU陙陙owvgvwgwwwwwfvwwwwwwwzwzzzzzzAUUUUUUUU"%%%""U@JUUUUUWzy陞鞙aozwwwwwwwwwwwwwwwwwwwwwwgvvffwzzzAUUUUUUUT`ZwrDw"$"uWy陙陞owwwzwwwwzzzzUUUUUU'`EU_py陞陙鞙陙OzwwwwwzzzAUUUUUR%UW9陙鞙鞙OzzzzUUUUUU@i陙鞙OwwwwwwwwwwwwwwwwwzwwwzwzzzwzzzzzzUUUUUUi鞙陞OzzwwwzwzwwwwwwwwwwwzwwwwwwwzzzAUUUU Ui陞OvffgffvgfgwfvwwwwwwwwwwwwzwwwzzzzzUUUUPUUIn鞞OzzwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvjwAUUUUpUU @iOzjzzUUUU UUUm陙陙p OwjzUUUU UUUDDI9pMݑOzw:AUUUUPUUUUݙi鞙`M̱Ow:UUUU UUUZipḵOw:UUUUPUUU`ݐkݱOw:zzAUUUU U6p@ḴOw:AUUUUP陙͐Iͼ́OwzzzUUUZnDFg@FFDDw@ݘٙݱOwfffwzzzAUUU_igޞkw@K@ ͑OwzzzAUUUW`i`DI͠9IܱOzzwzAUwnF;@@0 @}{@ͱOzzAٞyp~ Ͱ}}Owz~@Lݐ}|́OzzA@@ mݰOwwzwwwwwwwwzwwzzwwwzzzA9t ͐́OzzzzwwwwwwwwzwwwzwwwwwwwzzwwwwwwwwA`` M݀OzzwwwzwwzwwwzwwwzwwzzzzwwwwAi ̀́OzzwwwzwwzwwzwwwzwzzwzzzwzwA ̀_wwwzzwwwwzwzwzzzwzzA鞞@`i ̀́owzzwwzwzwzwzzA߶g@ Owwwwzwzwwzzwzwzwwzzwzzw@;} ̀́_wzwwwzwwwzzwzwzwzwzwwwA@ UQOzwzwzwwwwwzwwzwzwzzzwzzwwgdDDD@jC̀̀UUUUQOzzwzzzwwwwwwzzzzwwzzzwwwwi ȄEtDEUUUUQOwzwzzwzwzzwwwwzzwzzzwwwzȦUUUUUUUQOwzwzzzwwwzwwwwwzwwwwzwẇwUUUUUUUUUUUQOwwwzwwwzzwwwwzwzwzzwwwzzͽuwUUUUUUUUUUUUUQOwzzwwwzwwwzwwwzwwwzwwzUUUUUUUUUUUUUUUUQowwwwzwzwwwwzwwwzzwwzwzwzzzzwAUUUUUUUUUUUUUUUUUUQwwwwwzwwwwwwwwwwzwwwzwwwwwwwwzzUUUUUUUUUUUUUUUUUUUQzwwwwwzwwwwwwzwwwzwwwzwwwzwzwzzzzzwÄUUUUUUUUUUUUUUUUUUUUQwwwwwwwwwwwwwwwwwwwzzwwzwwzwwzwwzwwzzAȇUUUUUUUUUUUUUUUUUUUUUUQozwwwwwwwwwwwwzwwwwwwwwwzwwwwwwwwwzwwwz˵UUUUUUUUUUUUUUUUUUUUUUUQzwwwwwwwwwwwwwwwwwwzwwwwwwwwwzwzwwwwwzwwܽ̇uUUUUUUUUUUUUUUUUUUUUUUUQowwwwwwwwwwwwwwwwwwwwzwzwwwwwwwwwzwwwwwwwzAwUUUU_UUUUUUUUUUUUUUUUUUUUQowwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwzwwwwwwzzWUUUUUUUUUUUUUUUUUUUUUUUUUUUUQowwwwwwwwwwwwwwwwzzwwzwwwwwwwwwwwwwwwwwwzwAU̵UUUU_UUUUUUUUUUUUUUUUUUUUUQwwwwwwwwwwwwwwwwwwwwwwwwwwwwgwwwwwwwwwwwwwwAUǓܻ̌̌UUUUUUUUUUUUUUUUUUUUUUUUUUUUUQwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwzwwwzwzAvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwzAwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwzAzwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwzAwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww!J333333333333333333333333333333363666ffffgww0@C@J06wwz06fgw0067wwwfwwgwvfwfffffffffffffc33333333333333370wwwffggwwwwwwwwwzz037wwzzzzwzzwzzzzzwz03333333636ffcfffffffffffgwwwvfjzwzzz06gjzzzc33333333333333000007zjzvws37zgzwzz3zzzwzzzzzzwwzzzzgwzzwwwzwwzwwzzzzwwwzzz3gzzwzwwcfc3333333633f66cfff6fc6fffffffffffffffcf3fc6f636c6f66c336c33633333c33f3333cv337zssjwwz33333zcfc6ffcfffffffffffffffffffffffffffffffffff6cffffffcfffffffffffc6fffc6fc3cf6663gwwwwzzzzzwwzwwzwwzwwzwwwzzwwwwwwwwwwwwwwwwwzwwwzwwwzzzzwwwwwwwwwwwwzwwwwwwwwwwwwwwwwwgvgvfgvgggwvffgfvgf6wwzwwzzwwwzwwzs0zwwwzszwwfzwwzzv6zzzwwwzzwzw03333033zzzwzzwwwz333333333wwwwwwzzzzzwwzwwzzzzzz7wvwgwwwwwwwwwwwwvwwwwwwwwwwwwwvwwwwgwwwwwwwwwz7wwwwwwwwwwwwwwwzzzzzwwzwwwwwwwwwwwwwwwwwwwwwgwgwwwwzwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwzwwwzz7wwwwwwwwwwwzzwwwzwzzw7wwwwwwwwzwwzwwwzzwzzzzwwwwwwzzzwwzzzzzwwwwwwgwwwwwwwwwwwwwwwwwwwwwzwgffccfffffffffffffffvfffffffwzzww6wwwwwwwwwwwwwwwwzwwwwwzzzw360zjzz6wwwwzwwwzwzzwzwz633jcfffjvwvzwwwwwwwzwwwzwzwwwzzwzs6ssz`pjwzwwwwzwzzwwzwzzwwzwwzwzz:wvgffzvwwwzz3wwwwwwzwzwwwwwzwwzwzwwzwz0vzwwwwwwwwwwwzwwwzwwwzwwzzwwwwwwwwwwwzwwzzwwzzzzwzzwwzzzz6wwwwwwwwzzwwwwzzzwwwzwwzwzw6wwwwwwwwwzwwwwwwwwwwzzwzww6wwwwwwwwwwwzwwwzwwwzzzzzzwzwzwwwwwzwwzzwwwwwwwwzwwwwzwzwwwwwwwzzzwws0330333333333333333333333333333333333333333333333333333333333333333333333fwwwwwwzwzwwwwwwwzwzzwwzzwzzzwwgfffwgfffffffffgggvvwgwwwwwgwwwwwwvwgvgwvggwwwwwwvwffvffvffwwvgg6fg6ccff6cffffvvg3wwwwwwwwwwwwwwzwwzwwzwwwwzzzz6www3zwwwwwwzwwzwwwwzwwwzwwwwzwwfwwwzzzzwvggvgfffvgfffgvfvwfvwwwgwgwwwwvzzjzjzwwwwwzwwwzvvwffvfgvfvgvgffgwffwwgvfgfvgwwwwwgww?wwwwwzowwowwzwwwzwzwwwzwzwwwzgjwwwzwwzwwzzwwwwwzvjzzwzowwwwwzwwwwww:zzvwwwzwwwwwwwwwwzzwzzzgwwwwzwwzwzzzwzzzwwwwwwzwzjwzwzwzwzwwwzwzwwwzwzzjzw0wzvwwwwwgwwwgzzwzzzzzzwwwzzw z zwzvwfwvwwvpwwzwwwgfvwgwfwgpwvwvwwwgwwzgwwwwwwwwwwwwszwgfzvvwpwvffwwwwwwwwc6ggvz wpwwvgfwvwwwwwzwwfffvvfvgwvgpvvffffgvvvfgffwvwfwwwwvwvgfvgfgfcf`ffvcffv`fwvwpwwffggvj z  zwwwwggwwww wwwwwwwwpwwwwwzzwwww zzzzwwwwwgwwwwggwpfvwgvgzv66`ffff`fffffffffffgfffffffffffffffffffffffgfgffwggwvwwfgvvffvffffffffffvfff`wffffffvfvgwvg`fcwffvgfffzzz z wwpwwzwww p pwww wzzzz z zzzzwwpwzww wwpwwwwwwwwwwwwwzzzzw z wwwwwwwwwzwzwzwzwwwwwwwwwwwwwwwwwwvpfvgffgv3333333333333333333330330333333633333333033333333333333333330zvffff6cfffffff6fffff`ffgffgff`ffgv`fgfvfgfvpfgfwggvfffffffffffffffff`fffggfz            l"9U f l"9U f l"9U f l"9U f l"9U f l"9U f l"9U f l"9U f l"9U f l"9U f l"9U f l"9U f l"9U f l"9U f l"9U f l"9U f Apple PC Expo -------------------- PC Expo salon new-yorkais ddi la plateforme PC a vu pour la premire fois Apple en son sein. Ellen Hancock a prsent le futur OS Rhapsody qui fonctionnera indiffremment sous plateforme Power PC et plateforme Intel. Apple fait ainsi un appel du pied aux dveloppeurs pour leur permettre de rentabiliser leur production dans les deux mondes et les inciter programmer pour le Macintosh qui en a bien besoin. Apple blues -------------- Les pertes d'Apple continuent et son action en bourse s'est mme offert son niveau le plus bas pour la simple raison que Power Computing, un des principaux cloneurs, a exprim son intention de construire du compatible Wintel PC base de Pentium. Le PDG Gil Amelio est dbarqu le 9 juillet. La socit la pomme semble poursuivie par ses vieux dmons : une structure trs instable et son incapacit prvoir les ventes. Apple n'a pas t capable de fournir la demande concernant les modles qui marchent suite des problmes d'approvisionnement. En France, cest le temps des vaches maigres avec un march qui est pass de 14% moins de 4%. Apple France est gravement touche dans les restructurations. La division franaise qui n'employait dj plus que cent cinquante personnes a encore perdu trente-quatre employs. Georges Bongi directeur depuis aot 1996 a quitt la socit. Les relations avec les Apple User Group sont devenues virtuelles... pourtant, le client final est peut-tre l'lment le plus important d'un march ! Auchan brade plus fort --------------------------- Le Performa 5260, le tout en un quip d'un Power PC 603e 120 mhz, d'un disque 1,2 Go, de 12 Mo de Ram, d'un CD 8 et de ClarisWorks 3.0, baisse encore. On peut le trouver Auchan pour 4990 F au lieu des 5990F habituels. Dans la limite des stocks des magasins. No comprendo ----------------- Apple n'arrive pas fournir en quantit suffisante les machines qui marchent la vente. Motorola et les gros revendeurs de clone baissent leurs prix de manire significative : le StarMax 3000/180 passe 7300 F TTC. Le Pentium II 266 Mhz arrive en force avec des configurations compltes 17 pouces couleur, disque de 6 Go, CD 16, Zip intgr, 64 Mo de RAM et MicroSoft Office pour 25 000 F soit le prix d'un PowerMac 9600/200 32Mo/4 Go/CD 12 sans cran ni logiciels. Quelle est la rponse d'Apple cet tat de fait ? augmenter les prix et cela jusqu' 10 % pour le 9600... Etonnant non! Embellie ----------- Dataquest prvoit de meilleurs jours pour Apple en automne. C'est normal, c'est l'poque de la cueillette des pommes... Beaucoup d'utilisateurs de Mac ont des bcanes vieilles de cinq ans qu'il va falloir remplacer. Net PC --------- Le PC de rseau sort des cartons. Intel, Compaq et IBM ont prsent le leur la PC Expo New York. Il se prsente en gnral comme une bote ferme de manire ce que l'utilisateur ne puisse pas lui voler des composants ou ajouter les siens...virus via le lecteur de disquette, jeux rcratifs. Big Boss est de retour. Le NetPC se distingue du NC d'Oracle et de Sun par le fait qu'il a besoin des logiciels de Microsoft pour fonctionner. Pentium II 300 Mhz ------------------------- Intel pour contrer Cyrix et AMD a prsent son Pentium II 300 Mhz. Son systme de refroidissement intgre en plus d'un radiateur plus petit que l'ancien modle, un ventilateur. Il fonctionne toujours avec un bus 66 Mhz et un cache de 512 Ko. Le progs par rapport la version 266 Mhz n'est pas impressionnant et il est vendu 1980 dollars, plus du double du 266. Ces performances relativement dcevantes des Pentium II viennent surtout du fait des limitations des cartes mres. Le jeu de circuit capable de grer correctement ce processeur n'est pas encore disponible. La premire tape, le 440LX d'Intel, ne sera disponible qu' l'automne mais le trs attendu 440 BX capable de grer des cartes mres 100 Mhz avec des Pentium II plus de 300 Mhz ne devrait apparatre qu'au dbut 1998. ----------------- Script info for this Stack ----------------- HANDLERS: openStack closeStack suspend resume compactCheck -- HandleMenu doMenu aboutMe enable -- disable showBMBalloon hideBMBalloon -- deleteBMBalloon BMDev BMProd createScrollDialog -- deleteScrollDialog FUNCTIONS: uppercase Size of script: 13395 chars. 7/11/96 Brendan Bellina ----------------------------------------------------------- on openStack fontZ load,"Geneva.9" global g_BB_Platform -- g_BB_Platform is used on Prefs and Utilities screens if the screenRect is "0,0,320,200" then put "GS" into g_BB_Platform else put "Mac" into g_BB_Platform end if -- get the preferences set cursor to watch lock screen set lockMessages to true push this card go to card "Prefs" send "getPreferences" to this card pop card set lockMessages to false unlock screen HandleMenu "DRAW" end openStack on closeStack HandleMenu compactCheck end closeStack on suspend HandleMenu end suspend on resume HandleMenu "DRAW" end resume on compactCheck --This script is copyright () 1991 HangTime & Southern Rock Software --find out how big the stack is and store it put the size of this stack div 1024 into theSize --If Mr. User isn't pressing the optionKey then continue if the optionKey is up then --Find out if there is more then 10% free space in this stack --if there is more, then continue if freesize of this stack div 1024 > (.1 * theSize) then --Finally see if there's enough disk space to do the compact --If there is enough space then LET'S DO IT! if the diskSpace > theSize then --Tell the user what's going on, and do the compact menu cmd show msg at 10,110 -- position the message box put " Compacting Stack ... Please Wait ..." doMenu "Compact Stack" put empty -- clear the msg box hide msg -- hide the msg box end if end if end if end compactCheck on HandleMenu Draw_Flag global BalloonMakerMenu, g_Balloon_Status if BalloonMakerMenu is not empty then deleteMenu BalloonMakerMenu put empty into BalloonMakerMenu end if if Draw_Flag is "DRAW" then hide menuBar put addMenu(" BalloonMaker ", "About BalloonMaker..." & return & "BalloonMaker Main Screen..." & return & "BalloonMaker Preferences..." & return & "BalloonMaker Examples..." & return & "BalloonMaker Utilities..." & return & "-" & return & "Show My Balloons" & return & "Hide My Balloons" & return & "-" & return & "Quit BalloonMaker") into BalloonMakerMenu if g_Balloon_Status is empty then disableMItem BalloonMakerMenu,8 -- disable "Hide My Balloons" else disableMItem BalloonMakerMenu,7 -- disable "Show My Balloons" end if else show menubar end if end HandleMenu on doMenu menuItem global BalloonMakerMenu, g_Balloon_Status if menuItem is "About BalloonMaker..." then aboutMe else if menuItem is "BalloonMaker Main Screen..." then set cursor to watch visual effect venetian blinds go to card "Main" else if menuItem is "BalloonMaker Preferences..." then set cursor to watch visual effect venetian blinds go to card "Prefs" else if menuItem is "BalloonMaker Examples..." then set cursor to watch visual effect venetian blinds go to card "Examples" else if menuItem is "BalloonMaker Utilities..." then set cursor to watch visual effect venetian blinds go to card "Utilities" else if menuItem is "Show My Balloons" then put "on" into g_Balloon_Status disableMItem BalloonMakerMenu,7 -- disable "Show My Balloons" enableMItem BalloonMakerMenu,8 -- enable "Hide My Balloons" else if menuItem is "Hide My Balloons" then put "off" into g_Balloon_Status disableMItem BalloonMakerMenu,8 -- disable "Hide My Balloons" enableMItem BalloonMakerMenu,7 -- enable "Show My Balloons" else if menuItem is "Quit BalloonMaker" then go home else pass doMenu end if end doMenu on aboutMe answer " * * * B a l l o o n M a k e r G S * * *" & return & return & "Author: Brendan Bellina Date: 7/11/96" & return & "Freeware Version: 1.0.0" & return & "Size: " & round(Size of this stack/1024) & "K Free in stack: " & round(freeSize of this stack/1024) & "K"& return & return & "e-mail address: bbellina@aol.com" end aboutMe on enable the_item -- This handler and the disable handler can be used to simulate -- the enable and disable button commands used in Mac HyperCard. -- A button is enabled by setting its textColor to black -- The autohilite property of each button that can be -- disabled/enabled must be set to false, and hiliting handled -- in the mouseUp handler. Also, the button must check the textColor -- to ensure that a button is enabled before selecting it. It is -- assumed that an enabled button is black and a disabled button -- is gray. -- The parameter the_item should be the name of the item to -- enable. For example to enable a cd btn with short name "Home", -- use the command: -- enable name of cd btn "Home" -- [Note: The format of the Mac enable command would be: -- enable cd btn "Home" ] set the textColor of the_item to 1 -- black end enable on disable the_item -- A button is disabled by setting its textColor to gray. -- The parameter the_item should be the name of the item to -- disable. For example to disable a bg btn with short name "Home", -- use the command: -- disable name of bg btn "Home" -- [Note: The format of the Mac disable command would be: -- disable cd btn "Home" ] -- For more info see the enable handler above. set the textColor of the_item to 13 -- gray end disable function uppercase theText -- by Peter Meyer -- Examine every character in theText repeat with x = 1 to number of chars in theText -- Get the ASCII value of the current character get the charToNum of char x of theText if it < 97 or it > 122 then -- The current character is not lowercase next repeat else -- Convert the current character to uppercase by -- subtracting 32 from its ASCII value and putting -- the character equivalent of the ASCII value back -- into the character's position in the text subtract 32 from it put the numToChar of it into char x of theText end if end repeat return theText end uppercase -- Start of the BalloonMaker stack script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on showBMBalloon BM_targetName, BM_targetType, BM_targetText set cursor to watch lock screen if BM_targetType is "cd" then set visible of cd btn (BM_targetName && "*BM1*") to true set visible of cd btn (BM_targetName && "*BM2*") to true set visible of cd fld (BM_targetName && "*BMF*") to true if BM_targetText is not empty then put BM_targetText into cd fld (BM_targetName && "*BMF*") end if if style of cd fld (BM_targetName && "*BMF*") is "scrolling" then set scroll of cd fld (BM_targetName && "*BMF*") to 0 end if else set visible of bg btn (BM_targetName && "*BM1*") to true set visible of bg btn (BM_targetName && "*BM2*") to true set visible of bg fld (BM_targetName && "*BMF*") to true if BM_targetText is not empty then put BM_targetText into bg fld (BM_targetName && "*BMF*") end if if style of bg fld (BM_targetName && "*BMF*") is "scrolling" then set scroll of bg fld (BM_targetName && "*BMF*") to 0 end if end if unlock screen with dissolve very fast end showBMBalloon on hideBMBalloon BM_targetName, BM_targetType, BM_Override -- do not hide a balloon if it has a scrolling field unless override is specified lock screen if BM_targetType is "cd" then if style of cd fld (BM_targetName && "*BMF*") is not "scrolling" or BM_Override is "override" then set visible of cd btn (BM_targetName && "*BM1*") to false set visible of cd btn (BM_targetName && "*BM2*") to false set visible of cd fld (BM_targetName && "*BMF*") to false set lockText of cd fld (BM_targetName && "*BMF*") to true end if else -- must be a background balloon if style of bg fld (BM_targetName && "*BMF*") is not "scrolling" or BM_Override is "override" then set visible of bg btn (BM_targetName && "*BM1*") to false set visible of bg btn (BM_targetName && "*BM2*") to false set visible of bg fld (BM_targetName && "*BMF*") to false set lockText of bg fld (BM_targetName && "*BMF*") to true end if end if unlock screen with dissolve very fast end hideBMBalloon on deleteBMBalloon BM_targetname, BM_targetType lock screen put the tool into the_tool -- get the current tool name showBMBalloon BM_targetName, BM_targetType choose field tool if BM_targetType is "cd" then select cd fld (BM_targetName && "*BMF*") else select bg fld (BM_targetName && "*BMF*") end if if the screenRect is "0,0,320,200" then -- if IIGS doMenu "Clear Field" else -- else Mac doMenu "Clear Field" without dialog end if choose button tool if BM_targetType is "cd" then select cd btn (BM_targetName && "*BM1*") doMenu "Clear Button" select cd btn (BM_targetName && "*BM2*") doMenu "Clear Button" else select bg btn (BM_targetName && "*BM1*") doMenu "Clear Button" select bg btn (BM_targetName && "*BM2*") doMenu "Clear Button" end if choose the_tool unlock screen end deleteBMBalloon on BMDev global g_BM_Mode put "D" into g_BM_Mode answer "Balloon Maker Development mode ON. To return to production mode type BMProd." end BMDev on BMProd global g_BM_Mode put empty into g_BM_Mode answer "Balloon Maker Production mode ON." end BMProd on createScrollDialog f_the_caller, f_the_title_text, f_the_body_text -- Create field to hold object names choose field tool doMenu "New Field" put the number of cd flds into i_save if the screenRect is "0,0,320,200" then -- IIGS set rect of cd fld i_save to "75,27,250,49" else -- Mac set rect of cd fld i_save to "157,65,371,103" end if put name of cd fld i_save & return after cd fld i_save -- Create back button choose button tool doMenu "New Button" put the number of cd btns into i set style of cd btn i to "shadow" set autoHilite of cd btn i to false if the screenRect is "0,0,320,200" then -- IIGS set rect of cd btn i to "62,22,261,166" else -- Mac set rect of cd btn i to "150,54,378,256" end if put name of cd btn i & return after cd fld i_save -- Create Title Text field choose field tool doMenu "New Field" put the number of cd flds into i set style of cd fld i to "transparent" if the screenRect is "0,0,320,200" then -- IIGS set rect of cd fld i to "75,27,250,49" else -- Mac set rect of cd fld i to "157,65,371,103" end if put f_the_title_text into cd fld i set textStyle of cd fld i to "bold" set lockText of cd fld i to true put name of cd fld i & return after cd fld i_save -- Create Body Text field doMenu "New Field" put the number of cd flds into i put i into i_body_save set style of cd fld i to "scrolling" if the screenRect is "0,0,320,200" then -- IIGS set rect of cd fld i to "75,50,250,150" else -- Mac set rect of cd fld i to "157,102,371,215" end if put f_the_body_text into cd fld i put name of cd fld i & return after cd fld i_save -- Create OK Button choose button tool doMenu "New Button" put the number of cd btns into i if the screenRect is "0,0,320,200" then -- IIGS set rect of cd btn i to "145,152,190,163" else -- Mac set rect of cd btn i to "223,223,292,245" end if set name of cd btn i to "OK" set style of cd btn i to "roundRect" set autoHilite of cd btn i to true put name of cd btn i & return after cd fld i_save put "on mouseUp" & return & "put" && quote & "returnScrollDialog" & quote && "&& quote & short name of me & quote & comma &" && i_save && "into temp" & return & "send temp to" && f_the_caller & return & "end mouseUp" & return into tempScript set script of cd btn i to tempScript -- Create Cancel Button doMenu "New Button" put the number of cd btns into i set autoHilite of cd btn i to true if the screenRect is "0,0,320,200" then -- IIGS set rect of cd btn i to "197,152,242,163" else -- Mac set rect of cd btn i to "298,223,367,245" end if set name of cd btn i to "Cancel" set style of cd btn i to "roundRect" put name of cd btn i & return after cd fld i_save set script of cd btn i to tempScript choose browse tool unlock screen click at the loc of cd fld i_body_save -- set insertion point end createScrollDialog on deleteScrollDialog the_list set cursor to watch lock screen put cd fld the_list into the_list repeat with i = number of lines in the_list down to 1 if word 2 of line i of the_list is "button" then choose button tool else choose field tool end if put "select" && line i of the_list into temp do temp if word 2 of line i of the_list is "button" then doMenu "Clear Button" else doMenu "Clear Field" end if end repeat choose browse tool unlock screen end deleteScrollDialog -- End of the BalloonMaker stack script -- DO NOT DELETE THIS LINE -- MASTE=u $ <V<q̖xm'C`/ۗN'LISTNDPAGEN vvƿ*D9s<l"R4=]e7$Xzu .~}nmv?XfJQ3K]@[p_oJ/=#8*q{/7#oC~_?oo DBKGD @ .C  (s Documentationon mouseUp if lockText of me is false then hide the msg box put cd fld "Documentation PopUp Line" into chosenItem -- adjust for the divider lines if chosenItem > 25 then subtract 1 from chosenItem if chosenItem > 22 then subtract 1 from chosenItem if chosenItem > 17 then subtract 1 from chosenItem ask "Put text into which Doc field (1-23)?" with chosenItem if it is not empty then put "Doc" && it into docFld put me into cd fld docFld end if end if end mouseUpFP bkgnd button 3 *BM1* K bkgnd button 3 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialog)5  About-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp aboutMe end mouseUp4  Home-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp go home end mouseUpt O BM Balloon Help-- Created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_Balloon_Status, BalloonMakerMenu if the commandKey is not up then answer "Apple II Infinitum" if g_Balloon_Status is "on" then put empty into g_Balloon_Status -- update the pull-down menu if there is one if BalloonMakerMenu is not empty then enableMItem BalloonMakerMenu,7 -- enable "Show My Balloons" disableMItem BalloonMakerMenu,8 -- disable "Hide My Balloons" end if else put "on" into g_Balloon_Status -- update the pull-down menu if there is one if BalloonMakerMenu is not empty then disableMItem BalloonMakerMenu,7 -- disable "Show My Balloons" enableMItem BalloonMakerMenu,8 -- enable "Hide My Balloons" end if end if end mouseUp -- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- F H bkgnd button 3 *BM2*F)t  bkgnd button 1 *BM1*.o  bkgnd button 1 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogF$;! H bkgnd button 1 *BM2*F^  bkgnd button 2 *BM1*Y  bkgnd button 2 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogF %" H bkgnd button 2 *BM2*A Balloon... Created by Balloon Maker GS.About Button Click to display the copyright notice and version information. Home Button Click to return to the Home stack.BMAP..#Ѓ Ђ! 0#<0<),̓  )Ί0 0...#<80<Њ .?,0   ? 0=00#0<!?30 00?Њ Ё? 0<000 0.100   =>3>(#002  3? 8? Њ 00. .> 0 000 ́<30?=>030(=0̊ #00# 0 ? ? 0 0? ! 0# 0Њ0 0 0# 0<? < = 0 00 0<<=, Ί#?#,= ? ?0? OOOE.." & return & "-BKGD= @ <<"9 square back`BMAP=  OOOO+argetName && "*BMF*") iABKGD@ @ -- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- FO bkgnd button 4 *BM1* J bkgnd button 4 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogbrq Background Button-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- t O BM Balloon Help-- Created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_Balloon_Status, BalloonMakerMenu if the commandKey is not up then answer "Apple II Infinitum" if g_Balloon_Status is "on" then put empty into g_Balloon_Status -- update the pull-down menu if there is one if BalloonMakerMenu is not empty then enableMItem BalloonMakerMenu,7 -- enable "Show My Balloons" disableMItem BalloonMakerMenu,8 -- disable "Hide My Balloons" end if else put "on" into g_Balloon_Status -- update the pull-down menu if there is one if BalloonMakerMenu is not empty then disableMItem BalloonMakerMenu,7 -- disable "Show My Balloons" enableMItem BalloonMakerMenu,8 -- enable "Hide My Balloons" end if end if end mouseUp -- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- F H bkgnd button 4 *BM2*DE)  bkgnd field 2 *BM1*J$ bkgnd field 2 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogD L bkgnd field 2 *BM2*F}b  bkgnd button 1 *BM1*] bkgnd button 1 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogFPlg G bkgnd button 1 *BM2*A Balloon... Created by Balloon Maker GS. This balloon has a custom handle and location.A Balloon... Created by Balloon Maker GS.`BMAP OOOO+o item 1 of the_balloonBKGD@ R-R] Documentationon mouseUp if lockText of me is false then hide the msg box put cd fld "Documentation PopUp Line" into chosenItem ask "Put text into which Doc field (1-4)?" with chosenItem if it is not empty then put "Doc" && it into docFld put me into cd fld docFld end if end if end mouseUpA Balloon... Created by Balloon Maker GS.BMAPww"* wt* @*   wwtwwt wwwpwwwKw@www@www@wwt 0 C 0 Cs  < @78??0 L Lwp  |7@ |7@ |7@7w ? w7w w7w0?p <@ 00 |4 |4 |47t?0 @7wp @ @00wp??#0?00<0 0)<@?  ??ǂwwOOOCCARD @ [l/uJ List of Objects-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if -- The pass ... line below was commented out and the -- mouseEnter2 line added because a bug in HCGS -- prevents a handler in an object from receiving a passed msg if -- both the source and target handlers have the same name. (Mac -- HyperCard handles this correctly, with the second handler -- getting control). -- pass mouseEnter mouseEnter2 end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if -- The pass ... line below was commented out and the -- mouseLeave2 line added because a bug in HCGS -- prevents a handler in an object from receiving a passed msg if -- both the source and target handlers have the same name. (Mac -- HyperCard handles this correctly, with the second handler -- getting control). -- pass mouseLeave mouseLeave2 end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if -- The pass ... line below was commented out and the -- mouseDown2 line added because a bug in HCGS -- prevents a handler in an object from receiving a passed msg if -- both the source and target handlers have the same name. (Mac -- HyperCard handles this correctly, with the second handler -- getting control). -- pass mouseDown mouseDown2 end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- The following three handlers are required because the -- balloon function usurps these three handlers. On a Mac -- running HyperCard a handler can pass itself to another handler -- with the same name in the same object, but a bug in HCGS -- prevents this from working. If there was no balloon for this -- object then these three handlers would not be needed and -- the standard names could be used instead of the "2" names. on mouseEnter mouseEnter2 end mouseEnter on mouseLeave mouseLeave2 end mouseLeave on mouseDown mouseDown2 end mouseDown on mouseEnter2 global g_listField_btnID, g_listField_btnName set itemDelimiter to comma put getScrollControlInfo() into temp put first item of temp into g_listField_btnID put second item of temp into g_listField_btnName end mouseEnter2 on mouseLeave2 choose browse tool hiliteScrollLines end mouseLeave2 on mouseWithin if the mouseV > the right of me - 14 then choose browse tool hiliteScrollLines end if end mouseWithin function getScrollControlInfo -- Any handlers that can be called externally (via send) should -- use this function to get the appropriate values. Handlers -- that can only occur after a mouseEnter event can use the -- global variables (it is a bit faster). -- Any handler that updates the button name must also update -- the global variable g_listField_btnName. -- This function returns the button ID of the hilite btn for this -- field and the short name of the hilite btn, separated by commas. put 137 into the_btnID put word 1 of name of me into the_btnType put "put short name of" && the_btnType && "btn ID" && the_btnID && "into the_btnName" into temp do temp put the_btnID & "," & the_btnName into the_result return the_result end getScrollControlInfo function getScrollLine the_mouseV if style of me is not "scrolling" then answer "Error:" && short name of me && "is not a scrolling field." return "error" exit getScrollLine end if put top of me into the_top put textHeight of me into the_textHeight put scroll of me into the_scroll put the number of lines in me into the_numLines put (1+the_scroll+trunc((the_mouseV - the_top)/the_textHeight)) into the_result -- if the line is beyond end of data return "eod #" if the_result > the_numLines then put "eod" && the_result into the_result else -- if the line is empty return "empty #" if line the_result of me is empty then put "empty" && the_result into the_result end if return the_result end getScrollLine on hiliteScrollLines -- can be executed externally via send lock screen set itemDelimiter to comma put getScrollControlInfo() into temp put item 1 of temp into the_btnID put item 2 of temp into the_btnName put the number of me into the_fldNumber put word 1 of name of me into the_fldType set itemDelimiter to colon put item 2 of the_btnName into the_top_selectedLine put item 3 of the_btnName into the_bottom_selectedLine set itemDelimiter to comma if the_top_selectedLine is 0 and the_bottom_selectedLine is 0 then deselectScrollLines exit hiliteScrollLines end if put textHeight of me into the_textHeight put height of me into the_height put scroll of me into the_scroll put 1 + the_scroll into the_top_displayLine put the_top_displayLine + trunc(the_height / the_textHeight) - 1 into the_bottom_displayLine if the_bottom_selectedLine < the_top_displayLine or the_top_selectedLine > the_bottom_displayLine then -- selected lines are outside of viewing range, no hiliting if the_fldType is "card" then hide cd btn ID the_btnID else hide bg btn ID the_btnID else -- some lines are inside viewing range, so figure out hiliting put (the_bottom_displayLine - the_top_displayLine + 1) into the_max_lines -- if selection range starts before or at the display range if the_top_selectedLine <= the_top_displayLine then put 1 into the_hilite_start put (the_bottom_selectedLine - the_top_selectedLine + 1) - (the_top_displayLine - the_top_selectedLine) into the_hilite_length else -- selection range must start after the first line but within -- the display range put (the_top_selectedLine - the_top_displayLine + 1) into the_hilite_start put (the_bottom_selectedLine - the_top_selectedLine + 1) into the_hilite_length end if -- adjust the hilited lines to the max allowed if the_hilite_start + the_hilite_length - 1 > the_max_lines then put the_max_lines + 1 - the_hilite_start into the_hilite_length end if -- determine the appropriate rect of the hilite button put rect of me into tempRect add 1 to item 1 of tempRect add (((the_hilite_start - 1) * the_textHeight) + 1) to item 2 of tempRect subtract 13 from item 3 of tempRect put item 2 of tempRect + (the_hilite_length * the_textHeight) into item 4 of tempRect if the_fldType is "card" then set rect of cd btn ID the_btnID to tempRect show cd btn ID the_btnID else set rect of bg btn ID the_btnID to tempRect show bg btn ID the_btnID end if end if unlock screen end hiliteScrollLines on getSelectedLines -- use the command -- send getSelectedLines to cd fld "Scroll Control" from -- another object and check "the result" for the response. -- can be executed externally via send set itemDelimiter to comma put getScrollControlInfo() into temp put item 2 of temp into the_btnName put the number of me into the_fldNumber put word 1 of name of me into the_fldType set itemDelimiter to colon put item 2 of the_btnName into the_top_selectedLine put item 3 of the_btnName into the_bottom_selectedLine set itemDelimiter to comma put "line" && the_top_selectedLine && "to" && the_bottom_selectedLine && "of" && the_fldType && "field" && the_fldNumber into the_result if word 2 of the_result is "0" and word 4 of the_result is "0" then put empty into the_result return the_result end getSelectedLines function fcnSelectedLines -- use this function to get the selectedLines from within this -- field set itemDelimiter to comma put getScrollControlInfo() into temp put item 1 of temp into the_btnID put item 2 of temp into the_btnName put the number of me into the_fldNumber put word 1 of name of me into the_fldType set itemDelimiter to colon put item 2 of the_btnName into the_top_selectedLine put item 3 of the_btnName into the_bottom_selectedLine set itemDelimiter to comma put "line" && the_top_selectedLine && "to" && the_bottom_selectedLine && "of" && the_fldType && "field" && the_fldNumber into the_result if word 2 of the_result is "0" and word 4 of the_result is "0" then put empty into the_result return the_result end fcnSelectedLines on getSelectedText -- use the command -- send getSelectedText to cd fld "Scroll Control" from -- another object and check "the result" for the response. -- can be executed externally via send set itemDelimiter to comma put getScrollControlInfo() into temp put item 2 of temp into the_btnName put the number of me into the_fldNumber put word 1 of name of me into the_fldType set itemDelimiter to colon put item 2 of the_btnName into the_top_selectedLine put item 3 of the_btnName into the_bottom_selectedLine set itemDelimiter to comma put "line" && the_top_selectedLine && "to" && the_bottom_selectedLine && "of" && the_fldType && "field" && the_fldNumber into the_result if word 2 of the_result is "0" and word 4 of the_result is "0" then put empty into the_result else put "put" && the_result && "into the_result" into temp do temp end if return the_result end getSelectedText on setSelectedLines the_topLine,the_bottomLine,the_anchorLine -- can be executed externally via send set itemDelimiter to comma put getScrollControlInfo() into temp put item 1 of temp into the_btnID put item 2 of temp into the_btnName put word 1 of name of me into the_fldType set itemDelimiter to colon put the_topLine into item 2 of the_btnName put the_bottomLine into item 3 of the_btnName if the_anchorLine is empty then put "0" into the_anchorLine put the_anchorLine into item 4 of the_btnName set itemDelimiter to comma if the_fldType is "card" then set the name of cd btn ID the_btnID to the_btnName else set the name of bg btn ID the_btnID to the_btnName end setSelectedLines on deselectScrollLines -- can be executed externally via send set itemDelimiter to comma put getScrollControlInfo() into temp put item 1 of temp into the_btnID put item 2 of temp into the_btnName put word 1 of name of me into the_fldType -- clear the selected lines item and hide the hilite button set itemDelimiter to colon put "0" into item 2 of the_btnName put "0" into item 3 of the_btnName put "0" into item 4 of the_btnName set itemDelimiter to comma if the_fldType is "card" then set the name of cd btn ID the_btnID to the_btnName hide cd btn ID the_btnID else set the name of bg btn ID the_btnID to the_btnName hide bg btn ID the_btnID end if end deselectScrollLines on scrollFldUp global g_scroll_LoO global g_listField_btnID, g_listField_btnName set itemDelimiter to comma put g_listField_btnID into the_btnID put g_listField_btnName into the_btnName put the number of me into the_fldNumber put word 1 of name of me into the_fldType set itemDelimiter to colon put item 2 of the_btnName into the_top_selectedLine put scroll of me into the_scroll if the_scroll > 0 then set cursor to watch lock screen set scroll of me to (the_scroll - 1) subtract 1 from the_top_selectedLine put the_top_selectedLine into item 2 of the_btnName if the_fldType is "card" then set the name of cd btn ID the_btnID to the_btnName else set the name of bg btn ID the_btnID to the_btnName put the_btnName into g_listField_btnName hiliteScrollLines unlock screen end if set itemDelimiter to comma end scrollFldUp on scrollFldDown global g_scroll_LoO global g_listField_btnID, g_listField_btnName set itemDelimiter to comma put g_listField_btnID into the_btnID put g_listField_btnName into the_btnName put the number of me into the_fldNumber put word 1 of name of me into the_fldType set itemDelimiter to colon put item 2 of the_btnName into the_top_selectedLine put item 3 of the_btnName into the_bottom_selectedLine put textHeight of me into the_textHeight put height of me into the_height put scroll of me into the_scroll put 1 + the_scroll into the_top_displayLine put the_top_displayLine + trunc(the_height / the_textHeight) - 1 into the_bottom_displayLine put the number of lines in me into the_numLines if the_numLines > the_bottom_displayLine then set cursor to watch lock screen set scroll of me to (the_scroll + 1) add 1 to the_bottom_selectedLine put the_bottom_selectedLine into item 3 of the_btnName if the_fldType is "card" then set the name of cd btn ID the_btnID to the_btnName else set the name of bg btn ID the_btnID to the_btnName put the_btnName into g_listField_btnName hiliteScrollLines unlock screen end if set itemDelimiter to comma end scrollFldDown on mouseDown2 global g_listField_btnID, g_listField_btnName set cursor to watch set itemDelimiter to comma put the mouseV into the_MouseV put the shiftKey into the_shiftState put g_listField_btnID into the_btnID put g_listField_btnName into the_btnName put word 1 of name of me into the_fldType if the_shiftState is "up" then -- select the currently clicked line put getScrollLine(the_MouseV) into the_selectedLine if the_selectedLine is "error" or word 1 of the_selectedLine is "empty" or word 1 of the_selectedLine is "eod" then exit mouseDown2 else -- update the button name section of the control info set itemDelimiter to colon put the_selectedLine into item 2 of the_btnName put the_selectedLine into item 3 of the_btnName put the_selectedLine into item 4 of the_btnName set itemDelimiter to comma if the_fldType is "card" then set the name of cd btn ID the_btnID to the_btnName else set the name of bg btn ID the_btnID to the_btnName put the_btnName into g_listField_btnName hiliteScrollLines end if else -- the_shiftState is "down" mouseStillDown end if end mouseDown2 on mouseStillDown global g_listField_btnID, g_listField_btnName set cursor to hand set itemDelimiter to comma put the mouseV into the_MouseV if the_MouseV - 4 < top of me then scrollFldUp exit mouseStillDown else if the_MouseV + 4 > bottom of me then scrollFldDown exit mouseStillDown else put g_listField_btnID into the_btnID put g_listField_btnName into the_btnName put word 1 of name of me into the_fldType set itemDelimiter to colon put item 2 of the_btnName into the_top_selectedLine put item 3 of the_btnName into the_bottom_selectedLine put item 4 of the_btnName into the_anchoredLine put getScrollLine(the_MouseV) into the_selectedLine if the_selectedLine is "error" or word 1 of the_selectedLine is "empty" or word 1 of the_selectedLine is "eod" then exit mouseStillDown else if the_anchoredLine is empty or the_anchoredLine is 0 then if the_selectedLine > the_top_selectedLine then put the_top_selectedLine into item 2 of the_btnName put the_selectedLine into item 3 of the_btnName else put the_selectedLine into item 2 of the_btnName put the_bottom_selectedLine into item 3 of the_btnName end if -- set the new anchored line put the_selectedLine into item 4 of the_btnName else if the_selectedLine > the_anchoredLine then put the_anchoredLine into item 2 of the_btnName put the_selectedLine into item 3 of the_btnName else put the_selectedLine into item 2 of the_btnName put the_anchoredLine into item 3 of the_btnName end if end if -- update the control field info if the_fldType is "card" then set the name of cd btn ID the_btnID to the_btnName else set the name of bg btn ID the_btnID to the_btnName put the_btnName into g_listField_btnName hiliteScrollLines end if set itemDelimiter to comma end if end mouseStillDown on mouseUp global g_listField_btnID, g_listField_btnName set cursor to watch set itemDelimiter to comma put g_listField_btnID into the_btnID put g_listField_btnName into the_btnName put word 1 of name of me into the_fldType --clear the fixed anchor line set itemDelimiter to colon put 0 into item 4 of the_btnName set itemDelimiter to comma if the_fldType is "card" then set the name of cd btn ID the_btnID to the_btnName else set the name of bg btn ID the_btnID to the_btnName put the_btnName into g_listField_btnName -- enable the Remove Obj button if items are selected put fcnSelectedLines() into the_selectedLines if the_selectedLines is not empty then enable name of cd btn "Remove Obj" end mouseUp Du- Short Instructionsx{G Stack Name-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. put "Stack Shortcut" & return & return & "Click to go directly to" && "the selected stack " & cd fld "Long Stack Name" & "." into targetText showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp global g_BM_the_stackName go to stack g_BM_the_stackName end mouseUp^~K Long Stack Nameon mouseUp hide me end mouseUp'"b BalloonStackScripton mouseUp set the script of cd btn "temp for Stack" to me edit the script of cd btn "temp for Stack" get the script of cd btn "temp for Stack" put it into me end mouseUp"l BalloonBtnScripton mouseUp set the script of cd btn "temp for Button" to me edit the script of cd btn "temp for Button" get the script of cd btn "temp for Button" put it into me end mouseUp("z BalloonFldScripton mouseUp set the script of cd btn "temp for Field" to me edit the script of cd btn "temp for Field" get the script of cd btn "temp for Field" put it into me end mouseUp6,,z Doc 16-2 Doc 26.7 Doc 36/<  Doc 460C  Doc 561H Doc 662M  Doc 763T# Doc 864Z& Doc 985`* Doc 1086f - Doc 1187n$0 Doc 1288t'4 Doc 1389z*7 Doc 148:s0= Doc 158;k3@ Doc 168<\+8 Doc 178=R%2 Doc 188>K - Doc 198?E) Doc 208@>% Doc 218A6! Doc 22b)F BB_BalloonMaker #1on mouseUp hide me end mouseUpb )-G BB_BalloonMaker #2on mouseUp hide me end mouseUpb 2)AH BB_BalloonMaker #3on mouseUp hide me end mouseUpb F*UI BB_BalloonMaker #4on mouseUp hide me end mouseUpb Y*hJ BB_BalloonMaker #5on mouseUp hide me end mouseUpbm*|K BB_BalloonMaker #6on mouseUp hide me end mouseUpb+L BB_BalloonMaker #7on mouseUp hide me end mouseUpb+M BB_BalloonMaker #8on mouseUp hide me end mouseUp!/] temp for Field-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialog/ =Y temp for Button-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- =J^ temp for Stack-- Start of the BalloonMaker stack script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on showBMBalloon BM_targetName, BM_targetType, BM_targetText set cursor to watch lock screen if BM_targetType is "cd" then set visible of cd btn (BM_targetName && "*BM1*") to true set visible of cd btn (BM_targetName && "*BM2*") to true set visible of cd fld (BM_targetName && "*BMF*") to true if BM_targetText is not empty then put BM_targetText into cd fld (BM_targetName && "*BMF*") end if if style of cd fld (BM_targetName && "*BMF*") is "scrolling" then set scroll of cd fld (BM_targetName && "*BMF*") to 0 end if else set visible of bg btn (BM_targetName && "*BM1*") to true set visible of bg btn (BM_targetName && "*BM2*") to true set visible of bg fld (BM_targetName && "*BMF*") to true if BM_targetText is not empty then put BM_targetText into bg fld (BM_targetName && "*BMF*") end if if style of bg fld (BM_targetName && "*BMF*") is "scrolling" then set scroll of bg fld (BM_targetName && "*BMF*") to 0 end if end if unlock screen with dissolve very fast end showBMBalloon on hideBMBalloon BM_targetName, BM_targetType, BM_Override -- do not hide a balloon if it has a scrolling field unless override is specified lock screen if BM_targetType is "cd" then if style of cd fld (BM_targetName && "*BMF*") is not "scrolling" or BM_Override is "override" then set visible of cd btn (BM_targetName && "*BM1*") to false set visible of cd btn (BM_targetName && "*BM2*") to false set visible of cd fld (BM_targetName && "*BMF*") to false set lockText of cd fld (BM_targetName && "*BMF*") to true end if else -- must be a background balloon if style of bg fld (BM_targetName && "*BMF*") is not "scrolling" or BM_Override is "override" then set visible of bg btn (BM_targetName && "*BM1*") to false set visible of bg btn (BM_targetName && "*BM2*") to false set visible of bg fld (BM_targetName && "*BMF*") to false set lockText of bg fld (BM_targetName && "*BMF*") to true end if end if unlock screen with dissolve very fast end hideBMBalloon on deleteBMBalloon BM_targetname, BM_targetType lock screen put the tool into the_tool -- get the current tool name showBMBalloon BM_targetName, BM_targetType choose field tool if BM_targetType is "cd" then select cd fld (BM_targetName && "*BMF*") else select bg fld (BM_targetName && "*BMF*") end if if the screenRect is "0,0,320,200" then -- if IIGS doMenu "Clear Field" else -- else Mac doMenu "Clear Field" without dialog end if choose button tool if BM_targetType is "cd" then select cd btn (BM_targetName && "*BM1*") doMenu "Clear Button" select cd btn (BM_targetName && "*BM2*") doMenu "Clear Button" else select bg btn (BM_targetName && "*BM1*") doMenu "Clear Button" select bg btn (BM_targetName && "*BM2*") doMenu "Clear Button" end if choose the_tool unlock screen end deleteBMBalloon on BMDev global g_BM_Mode put "D" into g_BM_Mode answer "Balloon Maker Development mode ON. To return to production mode type BMProd." end BMDev on BMProd global g_BM_Mode put empty into g_BM_Mode answer "Balloon Maker Production mode ON." end BMProd on createScrollDialog f_the_caller, f_the_title_text, f_the_body_text -- Create field to hold object names choose field tool doMenu "New Field" put the number of cd flds into i_save if the screenRect is "0,0,320,200" then -- IIGS set rect of cd fld i_save to "75,27,250,49" else -- Mac set rect of cd fld i_save to "157,65,371,103" end if put name of cd fld i_save & return after cd fld i_save -- Create back button choose button tool doMenu "New Button" put the number of cd btns into i set style of cd btn i to "shadow" set autoHilite of cd btn i to false if the screenRect is "0,0,320,200" then -- IIGS set rect of cd btn i to "62,22,261,166" else -- Mac set rect of cd btn i to "150,54,378,256" end if put name of cd btn i & return after cd fld i_save -- Create Title Text field choose field tool doMenu "New Field" put the number of cd flds into i set style of cd fld i to "transparent" if the screenRect is "0,0,320,200" then -- IIGS set rect of cd fld i to "75,27,250,49" else -- Mac set rect of cd fld i to "157,65,371,103" end if put f_the_title_text into cd fld i set textStyle of cd fld i to "bold" set lockText of cd fld i to true put name of cd fld i & return after cd fld i_save -- Create Body Text field doMenu "New Field" put the number of cd flds into i put i into i_body_save set style of cd fld i to "scrolling" if the screenRect is "0,0,320,200" then -- IIGS set rect of cd fld i to "75,50,250,150" else -- Mac set rect of cd fld i to "157,102,371,215" end if put f_the_body_text into cd fld i put name of cd fld i & return after cd fld i_save -- Create OK Button choose button tool doMenu "New Button" put the number of cd btns into i if the screenRect is "0,0,320,200" then -- IIGS set rect of cd btn i to "145,152,190,163" else -- Mac set rect of cd btn i to "223,223,292,245" end if set name of cd btn i to "OK" set style of cd btn i to "roundRect" set autoHilite of cd btn i to true put name of cd btn i & return after cd fld i_save put "on mouseUp" & return & "put" && quote & "returnScrollDialog" & quote && "&& quote & short name of me & quote & comma &" && i_save && "into temp" & return & "send temp to" && f_the_caller & return & "end mouseUp" & return into tempScript set script of cd btn i to tempScript -- Create Cancel Button doMenu "New Button" put the number of cd btns into i set autoHilite of cd btn i to true if the screenRect is "0,0,320,200" then -- IIGS set rect of cd btn i to "197,152,242,163" else -- Mac set rect of cd btn i to "298,223,367,245" end if set name of cd btn i to "Cancel" set style of cd btn i to "roundRect" put name of cd btn i & return after cd fld i_save set script of cd btn i to tempScript choose browse tool unlock screen click at the loc of cd fld i_body_save -- set insertion point end createScrollDialog on deleteScrollDialog the_list set cursor to watch lock screen put cd fld the_list into the_list repeat with i = number of lines in the_list down to 1 if word 2 of line i of the_list is "button" then choose button tool else choose field tool end if put "select" && line i of the_list into temp do temp if word 2 of line i of the_list is "button" then doMenu "Clear Button" else doMenu "Clear Field" end if end repeat choose browse tool unlock screen end deleteScrollDialog -- End of the BalloonMaker stack script -- DO NOT DELETE THIS LINE -- @L= Prefs-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp set cursor to watch visual effect venetian blinds go to card "Prefs" end mouseUpR^> Examples-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp set cursor to watch visual effect venetian blinds go to card "Examples" end mouseUpBdp? Utilities-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp set cursor to watch visual effect venetian blinds go to card "Utilities" end mouseUpLC&  Documentation PopUp-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if -- The pass ... line below was commented out and the -- mouseDown2 line added because a bug in HCGS -- prevents a handler in an object from receiving a passed msg if -- both the source and target handlers have the same name. (Mac -- HyperCard handles this correctly, with the second handler -- getting control). -- pass mouseDown mouseDown2 end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- The following handler is required because the -- balloon function usurps this handler. On a Mac -- running HyperCard a handler can pass itself to another handler -- with the same name in the same object, but a bug in HCGS -- prevents this from working. If there was no balloon for this -- object then this handler would not be needed and -- the standard name could be used instead of the "2" name. on mouseDown mouseDown2 end mouseDown on mouseDown2 -- prefix each valid menu item with two spaces put " What Does It Do?" & return & " How Does It Work?" & return & " When Should I Use It?" & return & " How Do Balloons Work?" & return & " Preference Settings" & return & " Exclude Background Objects" & return & " Exclude Balloon Help Button" & return & " Create Balloon Object List File" & return & " Balloon Height" & return & " Balloon Width" & return & " Balloon Vertical Adjust" & return & " Balloon Handle Vertical Adjust" & return & " Balloon Font Values" & return & " Selecting a Target Stack" & return & " Deselecting Specific Objects" & return & " Updating the Target Stack" & return & "-" & return & " Editing Balloon Text" & return & " Deleting Balloons" & return & " More About Background Objects" & return & " Customizing Balloons" & return & "-" & return & " Converting with HyperMover" & return & " Useful HCGS scripts and objects" & return & "-" & return & " About the Author" into itemList put cd fld "Documentation PopUp Line" into initLine if initLine < 1 then put 1 into initLine put "" into char 1 of line initLine of itemList put addPopUp(itemList, left of me, top of me, initLine) into chosenItem delete char 1 to 2 of line initLine of itemList put chosenItem into saveItem -- adjust for the divider lines if chosenItem > 25 then subtract 1 from chosenItem if chosenItem > 22 then subtract 1 from chosenItem if chosenItem > 17 then subtract 1 from chosenItem if chosenItem > 0 then set cursor to watch lock screen put line saveItem of itemList into itemName put saveItem into cd fld "Documentation PopUp Line" put itemName into me put "Doc" && chosenItem into docFld put cd fld docFld into bg fld "Documentation" set scroll of bg fld "Documentation" to 0 unlock screen end if end mouseDown2 on getSelectedLine -- use the command -- send getSelectedLines to cd fld "Documentation PopUp" -- from another object and check "the result" for the response. put the number of me into the_fldNumber put word 1 of name of me into the_fldType put cd fld "Documentation PopUp Line" into initLine if initLine < 1 then put 0 into initLine put "line" && initLine && "of" && the_fldType && "field" && the_fldNumber into the_result if word 2 of the_result is "0" then put empty into the_result return the_result end getSelectedLine on getSelectedText -- use the command -- send getSelectedText to cd fld "Documentation PopUp" -- from another object and check "the result" for the response. if cd fld "Documentation PopUp Line" is empty then put empty into the_result else put line 1 of me into the_result delete char 1 to 2 of the_result end if return the_result end getSelectedText D@ menuBar_Buttonon mouseEnter show menuBar end mouseEnter on mouseLeave hide menuBar end mouseLeavehF& Documentation PopUp Lineon mouseUp hide me end mouseUpHx@ Select Stack Backingon mouseUp click at the loc of cd btn "Select Stack" end mouseUp $Iz> Select Stack-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp global g_BM_the_stackName, g_BM_pref_exclude_bg put "Start of" && "BalloonMaker script" into identifier_text answer file "Select the stack to update:" of type stack if it is empty then exit mouseUp set cursor to watch put it into g_BM_the_stackName put g_BM_the_stackName into cd fld "Long Stack Name" put short name of stack g_BM_the_stackName into cd fld "Stack Name" push card lock screen set the lockMessages to true set the lockRecent to true put empty into the_objectList go to first card of stack g_BM_the_stackName put 0 into the_cards_scanned -- Retrieve the long names of all background and card objects (buttons & -- fields), except fields whose last word is "*BMF*", and buttons whose last -- word is either "*BM1*" or "*BM2*". Items with these endings are assumed to -- have been created by BalloonMaker and do not themselves need balloons. -- Because object (bg, cd, btn, fld) names are not uniquely assigned, only id #s -- are used to uniquely identify the objects. -- But to make items more recognizable their names are shown at the front -- of the object line. The format of an object line then is: -- "object name",bkgnd/card field/button id # of card id # repeat until number(cards) = the_cards_scanned put short id of this card into the_short_card_id put number of cards in this bg into the_num_of_cards if g_BM_pref_exclude_bg = "N" then -- get all background fields except those that already own a balloon put number of bg flds into the_num_of_bg_flds repeat with the_fld_num = 1 to the_num_of_bg_flds if last word of short name of bg fld the_fld_num is not "*BMF*" and identifier_text is not in script of bg fld the_fld_num then put quote & short name of bg fld the_fld_num & quote into temp0 put long name of bg fld the_fld_num into temp1 if word 3 of temp1 is not "id" then put "id" && id of bg fld the_fld_num into word 3 of temp1 else put quote & "" & quote into temp0 end if if word 7 of temp1 is not "id" then put "id" && the_short_card_id into word 7 of temp1 end if delete word 9 to 11 of temp1 -- drop the stack name phrase put temp0 && temp1 & return after the_objectList end if end repeat -- get all background buttons except those that already own a balloon and "BM Balloon Help" put number of bg btns into the_num_of_bg_btns repeat with the_btn_num = 1 to the_num_of_bg_btns if last word of short name of bg btn the_btn_num is not "*BM1*" and last word of short name of bg btn the_btn_num is not "*BM2*" and identifier_text is not in script of bg btn the_btn_num and short name of bg btn the_btn_num is not "BM Balloon Help" then put quote & short name of bg btn the_btn_num & quote into temp0 put long name of bg btn the_btn_num into temp1 if word 3 of temp1 is not "id" then put "id" && id of bg btn the_btn_num into word 3 of temp1 else put quote & "" & quote into temp0 end if if word 7 of temp1 is not "id" then put "id" && the_short_card_id into word 7 of temp1 end if delete word 9 to 11 of temp1 -- drop the stack name phrase put temp0 && temp1 & return after the_objectList end if end repeat end if -- loop through the cards in this background repeat with the_card_num = 1 to the_num_of_cards -- get all card fields except those that already own a balloon put number of card flds into the_num_of_cd_flds repeat with the_fld_num = 1 to the_num_of_cd_flds if last word of short name of cd fld the_fld_num is not "*BMF*" and identifier_text is not in script of cd fld the_fld_num then put quote & short name of cd fld the_fld_num & quote into temp0 put long name of cd fld the_fld_num into temp1 if word 3 of temp1 is not "id" then put "id" && id of cd fld the_fld_num into word 3 of temp1 else put quote & "" & quote into temp0 end if if word 7 of temp1 is not "id" then put "id" && the_short_card_id into word 7 of temp1 end if delete word 9 to 11 of temp1 -- drop the stack name phrase put temp0 && temp1 & return after the_objectList end if end repeat -- get all card buttons except those that already own a balloon and "BM Balloon Help" put number of card btns into the_num_of_cd_btns repeat with the_btn_num = 1 to the_num_of_cd_btns if last word of short name of cd btn the_btn_num is not "*BM1*" and last word of short name of cd btn the_btn_num is not "*BM2*" and identifier_text is not in script of cd btn the_btn_num and short name of cd btn the_btn_num is not "BM Balloon Help" then put quote & short name of cd btn the_btn_num & quote into temp0 put long name of cd btn the_btn_num into temp1 if word 3 of temp1 is not "id" then put "id" && id of cd btn the_btn_num into word 3 of temp1 else put quote & "" & quote into temp0 end if if word 7 of temp1 is not "id" then put "id" && the_short_card_id into word 7 of temp1 end if delete word 9 to 11 of temp1 -- drop the stack name phrase put temp0 && temp1 & return after the_objectList end if end repeat add 1 to the_cards_scanned go to next card end repeat end repeat pop card put the_objectList into cd fld "List of Objects" if cd fld "List of Objects" is not empty then enable name of cd btn "Update Stack" hide cd btn "Select Stack Backing" show cd btn "Update Stack Backing" show cd fld "Short Instructions" else disable name of cd btn "Update Stack" show cd btn "Select Stack Backing" hide cd btn "Update Stack Backing" hide cd fld "Short Instructions" end if disable name of cd btn "Remove Obj" disable name of cd btn "Undo Remove" -- Clear scroll field hiliting send deselectScrollLines to cd fld "List of Objects" end mouseUpK5 Remove Obj Backingon mouseUp click at the loc of cd btn "Remove Obj" end mouseUpL5 Undo Remove Backingon mouseUp click at the loc of cd btn "Undo Remove" end mouseUpM5 Update Stack Backingon mouseUp click at the loc of cd btn "Update Stack" end mouseUplN3 Remove Obj-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp global g_BM_the_selections, g_BM_the_line_insert global g_BM_the_selectionLines if textColor of me is not 1 then exit mouseUp set hilite of me to true set hilite of me to false send getSelectedLines to cd fld "List of Objects" put the result into the_selectedLines if cd fld "List of Objects" is empty or the_selectedLines is empty then disable name of me answer "Nothing selected." exit mouseUp end if put the number of lines in cd fld "List of Objects" into num_of_lines -- save the contents of the selected lines in case it is needed for an undo put "put" && the_selectedLines && "into g_BM_the_selections" into temp do temp put the_selectedLines into g_BM_the_selectionLines -- save the line position in case it is needed for an undo put word 2 of the_selectedLines into g_BM_the_line_insert put word 4 of the_selectedLines into the_last_line_selected -- delete the selected lines delete line g_BM_the_line_insert to the_last_line_selected of cd fld "List of Objects" enable name of cd btn "Undo Remove" if cd fld "List of Objects" is empty then disable name of cd btn "Update Stack" hide cd fld "Short Instructions" end if -- Clear scroll field hiliting send deselectScrollLines to cd fld "List of Objects" end mouseUpO3 Undo Remove-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp global g_BM_the_selections, g_BM_the_line_insert global g_BM_the_selectionLines if textColor of me is not 1 then exit mouseUp set hilite of me to true set hilite of me to false if g_BM_the_line_insert <= number of lines in cd fld "List of Objects" then put return after g_BM_the_selections put g_BM_the_selections before line g_BM_the_line_insert of cd fld "List of Objects" disable name of me enable name of cd btn "Remove Obj" if cd fld "List of Objects" is not empty then enable name of cd btn "Update Stack" show cd fld "Short Instructions" end if -- reselect scroll hiliting send "setSelectedLines" && word 2 of g_BM_the_selectionLines & "," & word 4 of g_BM_the_selectionLines to cd fld "List of Objects" send hiliteScrollLines to cd fld "List of Objects" end mouseUpPP3 Update Stack-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~&& short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp global g_BM_the_stackName global g_BM_pref_balloon_width, g_BM_pref_balloon_height, g_BM_pref_vert_adj global g_BM_pref_handle_vert_adj, g_BM_pref_balloon_font, g_BM_pref_balloon_font_size global g_BM_pref_balloon_font_height, g_BM_pref_balloon_font_style, g_BM_pref_balloon_font_align global g_BM_pref_exclude_bg, g_BM_pref_create_list_file global g_BM_pref_exclude_bhelp, g_BM_pref_create_list_name -- if textColor of me is not 1 then exit mouseUp set cursor to watch -- set hilite of me to true set hilite of me to false -- lock screen set lockMessages to true set lockRecent to true put "false" into status_background -- -- get the list of objects to create balloons for put cd fld "List of Objects" into the_ObjectList put number of lines in the_ObjectList into the_ObjectList_Total -- -- check the target stack script to see if balloons have already been added -- if not update the stack script, add the icons, and copy over the Balloon Help btn put cd fld "BalloonStackScript" into BalloonStackScript push card go to stack g_BM_the_stackName put script of this stack into the_target_stack_script put "Start of the BalloonMaker stack script" into the_line if the_line is not in the_target_stack_script then -- handle all of the first-time-only updates -- update the stack script while we're here put return & BalloonStackScript after the_target_stack_script set script of this stack to the_target_stack_script -- pop card -- next copy over the necessary icons choose button tool repeat with i = 1 to 8 put "BB_BalloonMaker #" & i into temp set visible of cd btn temp to true -- must be visible to be selected select cd btn temp doMenu "Copy Button" push card go to stack g_BM_the_stackName doMenu "Paste Button" doMenu "Clear Button" pop card set visible of cd btn temp to false end repeat -- Copy the BM Balloon Help button to all of the target stack backgrounds if g_BM_pref_exclude_bhelp = "N" then select bg btn "BM Balloon Help" doMenu "Copy Button" push card go to stack g_BM_the_stackName doMenu "Background" repeat with i = 1 to number(backgrounds) go to first card of bg i doMenu "Paste Button" -- add the BM Balloon Help buttons to the object list put number of bg btns into the_btn_num put quote & short name of bg btn the_btn_num & quote into temp0 put long name of bg btn the_btn_num into temp1 if word 3 of temp1 is not "id" then put "id" && id of bg btn the_btn_num into word 3 of temp1 else put quote & "" & quote into temp0 end if if word 7 of temp1 is not "id" then put "id" && (short id of this card) into word 7 of temp1 end if delete word 9 to 11 of temp1 -- drop the stack name phrase put temp0 && temp1 & return after the_objectList end repeat doMenu "Background" pop card end if choose browse tool else pop card end if -- done with the first-time-only updates -- -- copy the necessary btn & fld scripts into variables put cd fld "BalloonFldScript" into BalloonFldScript put cd fld "BalloonBtnScript" into BalloonBtnScript -- push card go to stack g_BM_the_stackName -- -- use the card size to determine the quadrants put 200 into the_cd_height put the_cd_height / 2 into the_cd_half_height put 320 into the_cd_width put the_cd_width / 2 into the_cd_half_width -- -- assign balloon constants put g_BM_pref_balloon_width into the_balloon_width put g_BM_pref_balloon_height into the_balloon_height put 12 into ha -- horizontal adjustment from the object edge put g_BM_pref_vert_adj into va -- vertical adjustment from the object edge put 25 into the_handle_width put 23 into the_handle_height put -8 into hha -- handle horizontal adjust from the balloon field edge put g_BM_pref_handle_vert_adj into hva -- handle vertical adjust from the balloon field edge -- -- The name of the new items should be the object short id with "bkgnd" or "card" and -- "button" or "field" on the front (depending on the owner type), and " *BM1*", or -- " *BM2*", or " *BMF*" added to the end of the name. repeat with i = 1 to number of lines in the_ObjectList -- The format of an object line is: -- "object name" bkgnd/card field/button id # of card id # put line i of the_objectList into the_object put 0 into Balloon_Help_Flag if word 1 of the_object is quote & "BM Balloon Help" & quote then put 1 into Balloon_Help_Flag delete word 1 of the_object -- the_object will be in the following format: -- bkgnd/card button/field id # of card id # -- -- first go to the appropriate card put word 8 of the_object into temp if short id of this card is not temp then go to card id temp end if -- -- if object is in the background, select the background if first word of the_object is "bkgnd" and status_background is "false" then doMenu "Background" -- turn the background on put "true" into status_background else if first word of the_object is "card" and status_background is "true" then doMenu "Background" -- turn the background off put "false" into status_background end if -- -- find the center of the specified object put "put rectangle of " & the_object & " into the_object_rectangle" into temp do temp put (((item 3 of the_object_rectangle - item 1 of the_object_rectangle) / 2) + item 1 of the_object_rectangle) & comma & (((item 4 of the_object_rectangle - item 2 of the_object_rectangle) / 2) + item 2 of the_object_rectangle) into the_object_center -- -- determine balloon placement, size, and icon put "LL" into the_object_quadrant -- assume lower left quadrant to start if item 1 of the_object_center > the_cd_half_width then put "R" into char 2 of the_object_quadrant if item 2 of the_object_center < the_cd_half_height then put "U" into char 1 of the_object_quadrant put "x,x,x,x" into the_balloon_rectangle put "x,x,x,x" into the_balloon_handle_rectangle if the_object_quadrant is "UL" then -- If the object is in the upper left quadrant of the window, -- then the upper left corner of the balloon should be below and to the -- right of the lower right corner of the object. put item 3 of the_object_rectangle + ha into item 1 of the_balloon_rectangle put item 4 of the_object_rectangle + va into item 2 of the_balloon_rectangle put item 1 of the_balloon_rectangle + the_balloon_width into item 3 of the_balloon_rectangle put item 2 of the_balloon_rectangle + the_balloon_height into item 4 of the_balloon_rectangle put adjustBalloon(the_balloon_rectangle, the_cd_width, the_cd_height) into the_balloon_rectangle -- set up the balloon handle put item 1 of the_balloon_rectangle - hha into item 3 of the_balloon_handle_rectangle put item 2 of the_balloon_rectangle - hva into item 2 of the_balloon_handle_rectangle put item 3 of the_balloon_handle_rectangle - the_handle_width into item 1 of the_balloon_handle_rectangle put item 2 of the_balloon_handle_rectangle + the_handle_height into item 4 of the_balloon_handle_rectangle put "Balloon Help Left Up" into the_balloon_handle_icon else if the_object_quadrant is "LL" then -- If the object is in the lower left quadrant of the window, -- then the lower left corner of the balloon should be above and to the -- right of the upper right corner of the object. put item 3 of the_object_rectangle + ha into item 1 of the_balloon_rectangle put item 2 of the_object_rectangle - va into item 4 of the_balloon_rectangle put item 1 of the_balloon_rectangle + the_balloon_width into item 3 of the_balloon_rectangle put item 4 of the_balloon_rectangle - the_balloon_height into item 2 of the_balloon_rectangle put adjustBalloon(the_balloon_rectangle, the_cd_width, the_cd_height) into the_balloon_rectangle -- set up the balloon handle put item 1 of the_balloon_rectangle - hha into item 3 of the_balloon_handle_rectangle put item 4 of the_balloon_rectangle + hva into item 4 of the_balloon_handle_rectangle put item 3 of the_balloon_handle_rectangle - the_handle_width into item 1 of the_balloon_handle_rectangle put item 4 of the_balloon_handle_rectangle - the_handle_height into item 2 of the_balloon_handle_rectangle put "Balloon Help Left Down" into the_balloon_handle_icon else if the_object_quadrant is "UR" then -- If the object is in the upper right quadrant of the window, -- then the upper right corner of the balloon should be below and to the -- left of the lower left corner of the object. put item 1 of the_object_rectangle - ha into item 3 of the_balloon_rectangle put item 4 of the_object_rectangle + va into item 2 of the_balloon_rectangle put item 3 of the_balloon_rectangle - the_balloon_width into item 1 of the_balloon_rectangle put item 2 of the_balloon_rectangle + the_balloon_height into item 4 of the_balloon_rectangle put adjustBalloon(the_balloon_rectangle, the_cd_width, the_cd_height) into the_balloon_rectangle -- set up the balloon handle put item 3 of the_balloon_rectangle + hha into item 1 of the_balloon_handle_rectangle put item 2 of the_balloon_rectangle - hva into item 2 of the_balloon_handle_rectangle put item 1 of the_balloon_handle_rectangle + the_handle_width into item 3 of the_balloon_handle_rectangle put item 2 of the_balloon_handle_rectangle + the_handle_height into item 4 of the_balloon_handle_rectangle put "Balloon Help Right Up" into the_balloon_handle_icon else -- if the_object_quadrant is "LR" -- If the object is in the lower right quadrant of the window, -- then the lower right corner of the balloon should be above and to the -- left of the upper left corner of the object. put item 1 of the_object_rectangle - ha into item 3 of the_balloon_rectangle put item 2 of the_object_rectangle - va into item 4 of the_balloon_rectangle put item 3 of the_balloon_rectangle - the_balloon_width into item 1 of the_balloon_rectangle put item 4 of the_balloon_rectangle - the_balloon_height into item 2 of the_balloon_rectangle put adjustBalloon(the_balloon_rectangle, the_cd_width, the_cd_height) into the_balloon_rectangle -- set up the balloon handle put item 3 of the_balloon_rectangle + hha into item 1 of the_balloon_handle_rectangle put item 4 of the_balloon_rectangle + hva into item 4 of the_balloon_handle_rectangle put item 1 of the_balloon_handle_rectangle + the_handle_width into item 3 of the_balloon_handle_rectangle put item 4 of the_balloon_handle_rectangle - the_handle_height into item 2 of the_balloon_handle_rectangle put "Balloon Help Right Down" into the_balloon_handle_icon end if -- -- adjust the balloon text field to allow for scrolling fields put the_balloon_rectangle into the_balloon_text_rectangle add 5 to item 1 of the_balloon_text_rectangle add 5 to item 2 of the_balloon_text_rectangle subtract 5 from item 3 of the_balloon_text_rectangle subtract 5 from item 4 of the_balloon_text_rectangle -- -- create the balloon shape doMenu "New Button" if first word of the_object is "bkgnd" then put id of bg btn number of bg btns into the_btn_id set name of bg btn id the_btn_id to word 1 to 2 of the_object && short id of the_object && "*BM1*" put long name of bg btn id the_btn_id into the_balloon else put id of cd btn number of card buttons into the_btn_id set name of cd btn id the_btn_id to word 1 to 2 of the_object && short id of the_object && "*BM1*" put long name of cd btn id the_btn_id into the_balloon end if -- strip off the stack name from the object name repeat 3 times delete last word of the_balloon end repeat set rectangle of the_balloon to the_balloon_rectangle set style of the_balloon to roundRect set showName of the_balloon to false set visible of the_balloon to false -- -- create the balloon text field doMenu "New Field" if first word of the_object is "bkgnd" then put id of bg fld number of bg flds into the_fld_id set name of bg fld id the_fld_id to word 1 to 2 of the_object && short id of the_object && "*BMF*" put long name of bg fld id the_fld_id into the_balloon set sharedText of bg fld id the_fld_id to true else put id of cd fld number of card flds into the_fld_id set name of cd fld id the_fld_id to word 1 to 2 of the_object && short id of the_object && "*BMF*" put long name of cd fld id the_fld_id into the_balloon end if -- strip off the stack name from the object name repeat 3 times delete last word of the_balloon end repeat set rectangle of the_balloon to the_balloon_text_rectangle set lockText of the_balloon to true set dontSearch of the_balloon to true set style of the_balloon to transparent set wideMargins of the_balloon to false if Balloon_Help_Flag = 0 then -- use user preferences if not Balloon Help button set textFont of the_balloon to g_BM_pref_balloon_font set textStyle of the_balloon to g_BM_pref_balloon_font_style set textSize of the_balloon to g_BM_pref_balloon_font_size set textHeight of the_balloon to g_BM_pref_balloon_font_height set textAlign of the_balloon to g_BM_pref_balloon_font_align else -- use defaults for Balloon Help button set textFont of the_balloon to "Geneva" set textStyle of the_balloon to "plain" set textSize of the_balloon to 9 set textHeight of the_balloon to 10 set textAlign of the_balloon to "left" end if set script of the_balloon to BalloonFldScript set visible of the_balloon to false put "put " & quote & "A Balloon..." & quote & " & return & return & " & quote & "Created by Balloon Maker GS." & quote & " into " & the_balloon into temp do temp -- -- create the balloon handle doMenu "New Button" if first word of the_object is "bkgnd" then put id of bg btn number of bg btns into the_btn_id set name of bg btn id the_btn_id to word 1 to 2 of the_object && short id of the_object && "*BM2*" put long name of bg btn id the_btn_id into the_balloon_handle else put id of cd btn (number of card buttons) into the_btn_id set name of cd btn id the_btn_id to word 1 to 2 of the_object && short id of the_object && "*BM2*" put long name of cd btn id the_btn_id into the_balloon_handle end if -- strip off the stack name from the object name repeat 3 times delete last word of the_balloon_handle end repeat set rectangle of the_balloon_handle to the_balloon_handle_rectangle set style of the_balloon_handle to transparent set showName of the_balloon_handle to false set icon of the_balloon_handle to the_balloon_handle_icon set visible of the_balloon_handle to false -- -- update the object script (unless it is the Balloon Help button) if Balloon_Help_Flag = 0 then get script of the_object put it into temp put BalloonBtnScript & return before temp set script of the_object to temp end if put i && "of" && the_ObjectList_Total && "completed." end repeat -- -- get out of background mode if in it if status_background is "true" then doMenu "Background" -- turn the background off put "false" into status_background end if -- put empty into msg hide msg choose browse tool pop card -- -- create text file for list of objects if requested if g_BM_pref_create_list_file is "Y" then open file g_BM_pref_create_list_name write "Balloons created for stack:" && g_BM_the_stackName & return to file g_BM_pref_create_list_name write cd fld "List of Objects" to file g_BM_pref_create_list_name close file g_BM_pref_create_list_name end if -- put empty into cd fld "List of Objects" disable name of cd btn "Update Stack" show cd btn "Select Stack Backing" hide cd btn "Update Stack Backing" hide cd fld "Short Instructions" disable name of cd btn "Remove Obj" disable name of cd btn "Undo Remove" -- Clear scroll field hiliting send deselectScrollLines to cd fld "List of Objects" unlock screen -- answer "Balloons successfully added." end mouseUp function adjustBalloon f_the_object_rectangle, f_the_width, f_the_height -- make adjustments as needed in case a created object is partway out of an area if item 1 of f_the_object_rectangle < 0 then put item 1 of f_the_object_rectangle into temp multiply temp by (-1) put 0 into item 1 of f_the_object_rectangle put item 3 of f_the_object_rectangle + temp into item 3 of f_the_object_rectangle if item 3 of f_the_object_rectangle > f_the_width then put f_the_width into item 3 of f_the_object_rectangle end if end if if item 3 of f_the_object_rectangle > f_the_width then put item 3 of f_the_object_rectangle into temp subtract f_the_width from temp put f_the_width into item 3 of f_the_object_rectangle put item 1 of f_the_object_rectangle - temp into item 1 of f_the_object_rectangle if item 1 of f_the_object_rectangle < 0 then put 0 into item 1 of f_the_object_rectangle end if end if if item 2 of f_the_object_rectangle < 0 then put item 2 of f_the_object_rectangle into temp multiply temp by (-1) put 0 into item 2 of f_the_object_rectangle put item 4 of f_the_object_rectangle + temp into item 4 of f_the_object_rectangle if item 4 of f_the_object_rectangle > f_the_height then put f_the_height into item 4 of f_the_object_rectangle end if end if if item 4 of f_the_object_rectangle > f_the_height then put item 4 of f_the_object_rectangle into temp subtract f_the_height from temp put f_the_height into item 4 of f_the_object_rectangle put item 2 of f_the_object_rectangle - temp into item 2 of f_the_object_rectangle if item 2 of f_the_object_rectangle < 0 then put 0 into item 2 of f_the_object_rectangle end if end if return f_the_object_rectangle end adjustBalloon R~$  Popup Arrowon mouseDown send mouseDown to cd fld "Documentation Popup" end mouseDown zZ,<4  Print-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp put "Documentation" into fldName1 put "bg" into fldType1 put "List of Objects" into fldName2 put "cd" into fldType2 put "00" into printfieldflag if fldType1 is "bg" then if bg fld fldName1 is not empty then put "1" into char 1 of printfieldflag end if else if cd fld fldName1 is not empty then put "1" into char 1 of printfieldflag end if end if if fldType2 is "bg" then if bg fld fldName2 is not empty then put "1" into char 2 of printfieldflag end if else if cd fld fldName2 is not empty then put "1" into char 2 of printfieldflag end if end if -- printfieldflag values and meanings: -- "00" Both fldName1 and fldName2 are empty -- "10" fldName1 is not empty, fldName2 is empty -- "01" fldName2 is not empty, fldName1 is empty -- "11" fldName1 is not empty, fldName2 is not empty if "1" is not in printfieldflag then answer "Nothing to print." exit to HyperCard else -- Something to print if "0" is in printfieldflag then if char 1 of printfieldflag is "1" then answer "Turn your printer on and click OK to print the " && fldName1 & "." with "Cancel" or "OK" if it is "OK" then if fldType1 is "bg" then print bg fld fldName1 else print cd fld fldName1 end if exit to HyperCard else answer "Turn your printer on and click OK to print the " && fldName2 & "." with "Cancel" or "OK" if it is "OK" then if fldType2 is "bg" then print bg fld fldName2 else print cd fld fldName2 end if exit to HyperCard end if else answer "Print (1) the" && fldName1 && "or (2) the" && fldName2 && "?" with "1" or "2" or "Cancel" if it is "1" then if fldType1 is "bg" then print bg fld fldName1 else print cd fld fldName1 else if it is "2" then if fldType2 is "bg" then print bg fld fldName2 else print cd fld fldName2 end if end if end if end mouseUpl@ List of Objects:0:0:0on mouseEnter send mouseEnter to cd fld "List of Objects" end mouseEnter on mouseDown send mouseDown to cd fld "List of Objects" end mouseDown on mouseStillDown send mouseStillDown to cd fld "List of Objects" end mouseStillDown on mouseUp send mouseUp to cd fld "List of Objects" end mouseUp8>$ Doc 23D6!  card field 3 *BM1*;| card field 3 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogD{ L card field 3 *BM2*D0{!  card field 17 *BM1*5v card field 17 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogDi G card field 17 *BM2*D&q  card field 67 *BM1*+l card field 67 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogD!8 F card field 67 *BM2*FL  card button 29 *BM1*Q card button 29 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogFG^ H card button 29 *BM2*F^  card button 30 *BM1*c card button 30 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogFYp H card button 30 *BM2*Fd  card button 66 *BM1*_ card button 66 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogFRi I card button 66 *BM2*F/Jz  card button 73 *BM1*4Ou card button 73 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogFh9R G card button 73 *BM2*FD  card button 78 *BM1*I card button 78 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogF} I card button 78 *BM2*FX  card button 79 *BM1*] card button 79 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogF I card button 79 *BM2*F`  card button 80 *BM1*g card button 80 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogF I card button 80 *BM2*F<  card button 90 *BM1*A  card button 90 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogF7 N# H card button 90 *BM2*Click, shift-click, or drag to select objects to remove.Test Stack:HD_HFS:HyperCard:Test Stack-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Start of the BalloonMaker stack script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on showBMBalloon BM_targetName, BM_targetType, BM_targetText set cursor to watch lock screen if BM_targetType is "cd" then set visible of cd btn (BM_targetName && "*BM1*") to true set visible of cd btn (BM_targetName && "*BM2*") to true set visible of cd fld (BM_targetName && "*BMF*") to true if BM_targetText is not empty then put BM_targetText into cd fld (BM_targetName && "*BMF*") end if if style of cd fld (BM_targetName && "*BMF*") is "scrolling" then set scroll of cd fld (BM_targetName && "*BMF*") to 0 end if else set visible of bg btn (BM_targetName && "*BM1*") to true set visible of bg btn (BM_targetName && "*BM2*") to true set visible of bg fld (BM_targetName && "*BMF*") to true if BM_targetText is not empty then put BM_targetText into bg fld (BM_targetName && "*BMF*") end if if style of bg fld (BM_targetName && "*BMF*") is "scrolling" then set scroll of bg fld (BM_targetName && "*BMF*") to 0 end if end if unlock screen with dissolve very fast end showBMBalloon on hideBMBalloon BM_targetName, BM_targetType, BM_Override -- do not hide a balloon if it has a scrolling field unless override is specified lock screen if BM_targetType is "cd" then if style of cd fld (BM_targetName && "*BMF*") is not "scrolling" or BM_Override is "override" then set visible of cd btn (BM_targetName && "*BM1*") to false set visible of cd btn (BM_targetName && "*BM2*") to false set visible of cd fld (BM_targetName && "*BMF*") to false set lockText of cd fld (BM_targetName && "*BMF*") to true end if else -- must be a background balloon if style of bg fld (BM_targetName && "*BMF*") is not "scrolling" or BM_Override is "override" then set visible of bg btn (BM_targetName && "*BM1*") to false set visible of bg btn (BM_targetName && "*BM2*") to false set visible of bg fld (BM_targetName && "*BMF*") to false set lockText of bg fld (BM_targetName && "*BMF*") to true end if end if unlock screen with dissolve very fast end hideBMBalloon on deleteBMBalloon BM_targetname, BM_targetType lock screen put the tool into the_tool -- get the current tool name showBMBalloon BM_targetName, BM_targetType choose field tool if BM_targetType is "cd" then select cd fld (BM_targetName && "*BMF*") else select bg fld (BM_targetName && "*BMF*") end if if the screenRect is "0,0,320,200" then -- if IIGS doMenu "Clear Field" else -- else Mac doMenu "Clear Field" without dialog end if choose button tool if BM_targetType is "cd" then select cd btn (BM_targetName && "*BM1*") doMenu "Clear Button" select cd btn (BM_targetName && "*BM2*") doMenu "Clear Button" else select bg btn (BM_targetName && "*BM1*") doMenu "Clear Button" select bg btn (BM_targetName && "*BM2*") doMenu "Clear Button" end if choose the_tool unlock screen end deleteBMBalloon on BMDev global g_BM_Mode put "D" into g_BM_Mode answer "Balloon Maker Development mode ON. To return to production mode type BMProd." end BMDev on BMProd global g_BM_Mode put empty into g_BM_Mode answer "Balloon Maker Production mode ON." end BMProd on createScrollDialog f_the_caller, f_the_title_text, f_the_body_text -- Create field to hold object names choose field tool doMenu "New Field" put the number of cd flds into i_save if the screenRect is "0,0,320,200" then -- IIGS set rect of cd fld i_save to "75,27,250,49" else -- Mac set rect of cd fld i_save to "157,65,371,103" end if put name of cd fld i_save & return after cd fld i_save -- Create back button choose button tool doMenu "New Button" put the number of cd btns into i set style of cd btn i to "shadow" set autoHilite of cd btn i to false if the screenRect is "0,0,320,200" then -- IIGS set rect of cd btn i to "62,22,261,166" else -- Mac set rect of cd btn i to "150,54,378,256" end if put name of cd btn i & return after cd fld i_save -- Create Title Text field choose field tool doMenu "New Field" put the number of cd flds into i set style of cd fld i to "transparent" if the screenRect is "0,0,320,200" then -- IIGS set rect of cd fld i to "75,27,250,49" else -- Mac set rect of cd fld i to "157,65,371,103" end if put f_the_title_text into cd fld i set textStyle of cd fld i to "bold" set lockText of cd fld i to true put name of cd fld i & return after cd fld i_save -- Create Body Text field doMenu "New Field" put the number of cd flds into i put i into i_body_save set style of cd fld i to "scrolling" if the screenRect is "0,0,320,200" then -- IIGS set rect of cd fld i to "75,50,250,150" else -- Mac set rect of cd fld i to "157,102,371,215" end if put f_the_body_text into cd fld i put name of cd fld i & return after cd fld i_save -- Create OK Button choose button tool doMenu "New Button" put the number of cd btns into i if the screenRect is "0,0,320,200" then -- IIGS set rect of cd btn i to "145,152,190,163" else -- Mac set rect of cd btn i to "223,223,292,245" end if set name of cd btn i to "OK" set style of cd btn i to "roundRect" set autoHilite of cd btn i to true put name of cd btn i & return after cd fld i_save put "on mouseUp" & return & "put" && quote & "returnScrollDialog" & quote && "&& quote & short name of me & quote & comma &" && i_save && "into temp" & return & "send temp to" && f_the_caller & return & "end mouseUp" & return into tempScript set script of cd btn i to tempScript -- Create Cancel Button doMenu "New Button" put the number of cd btns into i set autoHilite of cd btn i to true if the screenRect is "0,0,320,200" then -- IIGS set rect of cd btn i to "197,152,242,163" else -- Mac set rect of cd btn i to "298,223,367,245" end if set name of cd btn i to "Cancel" set style of cd btn i to "roundRect" put name of cd btn i & return after cd fld i_save set script of cd btn i to tempScript choose browse tool unlock screen click at the loc of cd fld i_body_save -- set insertion point end createScrollDialog on deleteScrollDialog the_list set cursor to watch lock screen put cd fld the_list into the_list repeat with i = number of lines in the_list down to 1 if word 2 of line i of the_list is "button" then choose button tool else choose field tool end if put "select" && line i of the_list into temp do temp if word 2 of line i of the_list is "button" then doMenu "Clear Button" else doMenu "Clear Field" end if end repeat choose browse tool unlock screen end deleteScrollDialog -- End of the BalloonMaker stack script -- DO NOT DELETE THIS LINE -- -- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogThe purpose of this stack is to assist in developing balloon help support in HyperCard stacks. Although GS/OS does not have a Balloon Help feature, like the MacOS, it is possible to mimic Balloon Help capability using hidden fields, icons, and a master button or menu item. BalloonMaker can create balloons for buttons and fields in the card or background layers of any modifiable stack. Balloons are created based on a set of user preferences, but once created can be individually customized in size, text, font, and field type. The script that controls each balloon is in the owning object (button or field), and a pre-defined interface is provided so that balloon text can be either fixed or responsive to the environment. A global setting is used to determine whether or not balloons should be shown. The BM Balloon Help button in the upper right corner of this card (to the left of the Home button) can toggle the global setting, and will be automatically copied to each background of a selected target stack. This setting could also be controlled by a menu setting, which is demonstrated in this stack. The basic steps for creating balloons are as follows: 1. Make a copy of your target stack using the Finder or the Save a Copy... File pull-down menu command. In case something goes wrong you may want to be able to restore the original version of your stack. THIS IS STRONGLY RECOMMENDED. 2. Click the Prefs button to go to the Preferences card and set your balloon selection and appearance preferences. When finished return to this card. 3. Click the Select Stack button to select the stack you want to add balloons to. A list of all selected objects in the stack will be displayed in the list field. The names of the objects will be displayed at the beginning of each line. Note: Fields whose names end with *BMF and buttons whose names end with *BM1* or *BM2* are automatically excluded from selection, as well as any objects that already own Balloon Maker balloons. 4. Remove objects from the selection list via the Remove Obj button until only the objects that you want balloons created for are listed. 5. Click the Update Stack button to generate the balloons into your target stack. Time will vary based on the number of objects in your selection list and the processing speed of your machine. In addition to the field and 2 buttons added to create each balloon, the target stack script will be updated with seven new handlers (showBMBalloon, hideBMBalloon, deleteBMBalloon, BMDev, BMProd, createScrollDialog, and deleteScrollDialog), each selected object script will be updated with a new mouseEnter, mouseLeave, mouseDown, deleteButton, and deleteField handler, and the BM Balloon Help button (question mark in a balloon) will be added to each background in the stack. 6. Read the Help sections: Editing Balloon Text and Customizing Balloons. To see working examples of customized balloons click on the Examples button. 7. Click the shadowed button with your target stack name on it to go to the stack. 8. Open the message box and enter BMDev to turn on Balloon Maker development mode. In development mode balloons will be displayed when the mouse is placed over a balloon owner, and the balloon will stay visible if the option key is held down while the mouse is moved off of the owner. 9. Click once on the now visible balloon to unlock and edit its text. (Background layer balloons are edited in a popup scrolling dialog; card layer balloons are edited directly within the balloon). When finished just move the mouse cursor off of the balloon and the balloon text will be re-locked and hidden. If you want to reposition the balloon, select a different handle icon, or change the balloons font attributes do so using the standard HyperCard button, field, and text tools. 10. Open the Message Box and enter "BMProd" to turn off Balloon Maker development mode. 11. Test your balloons carefully. A few special cases to double-check: (1) You will need to modify any balloon-owning object that has its own mouseEnter, mouseLeave, mouseDown, deleteButton, or deleteField handlers due to a bug in the HCGS pass command which will prevent your pre-existing handlers from receiving the messages from the added balloon handlers. The pass ... command at the end of the balloon handlers can only pass the command to another object, not another handler in the same object. You will need to <1> modify your conflicting handler names to something unique, I suggest adding a 2 on the end, so your mouseDown handler becomes mouseDown2, your mouseEnter handler becomes mouseEnter2, and so on; <2> at the end of each of the conflicting balloon handlers add your new handler name so that the balloon handler will pass control to your handler (for instance, in the mouseDown handler add the line mouseDown2 just prior to the end mouseDown line); and <3> (optional) create a new handler after the balloon handler that has the same original handler name and contains only the modified handler name (for instance: on mouseDown mouseDown2 end mouseDown so that if the balloon handlers are ever removed from the object it will continue to work properly. [An example of an object in this stack whose script has been so modified is the documentation pop-up field just above this field (currently labeled How Does It Work?), which had a conflicting mouseDown handler.] (2) Check each of the balloon-owning background objects to make sure that the balloon is not hidden by card layer objects. If it is you may want to reposition it, eliminate it, or move the balloon to the card layer as well (if your background only has one card). (3) If you did not use a standard GS/OS font you should consider installing the font into the stack (see the Utilities screen for more info) as well as packaging it with your stack in case the users of your stack do not have it. Thats it. Balloon Maker can update the same stack multiple times, but because the locations of balloons will not automatically change when objects are moved, it makes sense to hold off on adding the balloons to a stack until all other stack modifications have been made rather than adding balloons as you develop a stack. If you plan on converting your stack using HyperMover you should do the conversion before adding balloons. Issues with converting balloons via HyperMover are discussed in detail in the help section titled Converting with HyperMover. A BalloonMaker balloon consists of two buttons and a field that are hidden until the mouse pointer is positioned over the owning object of the balloon, which itself is either a field or a button. Balloons are created in the same layer as the owning object, so the balloon for a card object will consist of card objects, and the balloon for a background object will consist of background objects. The balloon parts are named using the owning objects id and a suffix of either *BMF*, *BM1*, or *BM2*. Because the owning objects id never changes balloons will still work even if the owner is renamed. If an owner is moved or copied its balloon will not get moved or copied with it. Which is the primary reason why balloons should be added to a stack after all other stack changes have been made. Handlers in the owning objects script, stack script, and the balloon text field ensure that the balloon is shown and hidden when appropriate, as well as providing means of easily editing the balloon text and automatically deleting the balloon when the owning object is deleted. The only standard messages that are intercepted by balloon-owning objects are mouseEnter, mouseLeave, and mouseDown. The BalloonMaker stack determines the locations of balloons based on the position of an object on the card. The card is divided into quadrants and the balloons relative position and handle type are determined by the quadrant the object is in. For example, an object whose center is in the upper left quadrant will have a balloon which is below and to the right of the object. Most of the balloon characteristics, such as size, font, font size, balloon position relative to the owning object, and handle position relative to the balloon corner can be set on the Preferences screen. Once a balloon is created its characteristics can be further customized using the standard HyperCard button and field tools. For more information on customizing balloons, see the help sections: Editing Balloon Text and Customizing Balloons. Preference settings can be used to customize the default appearance of balloons, and assist in the selection of objects. To access the preferences screen click on the Prefs button to the right or select the BalloonMaker Preferences... pull-down menu option. Each preference setting is discussed in detail in a help section. It is recommended that you read each help section before adding balloons to a stack. The preference setting Exclude Background Objects is particularly important to understand before creating balloons. This checkbox indicates whether background objects should be excluded from selection when the Select Stack button on the Main screen is pressed. The default is that background objects will be included in the selection along with card objects. Depending on your target stack you may wish to exclude background objects. Background balloons are created in the background layer and therefore may be hidden behind card objects and pictures. For more information about the impacts of using background balloons read the help section More About Background Objects. This checkbox indicates whether the BM Balloon Help background button should be excluded from being copied from the BalloonMaker stack into the target stack when the Update Stack button is pressed. By default the BM Balloon Help button and its balloon will be copied into each background of the target stack. The first time you create a balloon in a target stack the target stack stack-script will be updated, required icons will be copied to the target stack, and the BM Balloon Help button will be copied to the backgrounds of the stack. These updates will not happen on subsequent updates to the same stack, so this preference should be set on only if you do not want the BM Balloon Help button created in your target stack at all. The BM Balloon Help button provides a simple way for the user to toggle balloon help on and off, but you may decide to use a menu option or other mechanism to do so instead. This checkbox indicates whether a text file containing a list of selected objects for which you are creating balloons should be written after the Update Stack button on the Main screen has been processed. The text file will be created in the same folder as the BalloonMaker stack and will have the name given in the text box below the preference setting. The name can be modified as long as the preference is checked. The name must follow the standard file naming restrictions of the operating system. The Balloon List file may prove useful as a checklist while customizing the balloon text and testing your stack to ensure that all balloons display properly. By default the Balloon Object List file is not created. If created the default file name is BalloonList. The Balloon Height preference determines the initial height of a standard balloon outline. The default is 75, which allows for a title line and 5 lines of balloon text (assuming the standard width and font size). The Balloon Height can range from 20 to 300. If you need a large amount of text in a balloon you should consider changing the field type of the balloon to scrolling, rather than increasing the size of the balloon to an extreme size. The Balloon Width preference determines the initial width of a standard balloon outline. The default is 100, which allows for a title line and 5 lines of balloon text (assuming the standard height and font size). The Balloon Width can range from 20 to 500. If you need a large amount of text in a balloon you should consider changing the field type of the balloon to scrolling, rather than increasing the size of the balloon to an extreme size. The Balloon Vertical Adjust is the vertical offset of a balloon from the corner of its owner. As the vertical adjust is increased a balloon moves further away vertically from the balloon owner. The default setting of 0 positions the balloon slightly higher or lower than the owning object. The easiest way to understand the effect of this preference is to change it on the Preferences screen and observe the change in the sample balloon. The Balloon Handle Vertical Adjust is the vertical offset of a balloon handle from the corner of the balloon. As the handle vertical adjust is decreased a balloon handle moves further away vertically from the nearest balloon corner. The default setting of -5 positions the balloon handle slightly higher or lower than the balloon corner closest to the owning object. The easiest way to understand the effect of this preference is to change it on the Preferences screen and observe the change in the sample balloon. The standard balloon font is plain Geneva 9 point, left justified. However, all of the font values: font, style, size, line height, and alignment can be specified by clicking inside the sample balloon and using the standard system Text Style dialog. Because the Text Style dialog is used to select a font, only fonts installed in your system at the time can be specified. In order to ensure that everyone views the balloons in your stack properly it is recommended that you stick to the standard Apple fonts and sizes or provide the font with your stack or installed in your stack (for information on installing a font into a stack see the Install a Font into a Stack help section on the Utilities screen). To select a target stack to add balloons to click on the Select Stack button below. (You should do this after you have decided whether or not to exclude background objects and set this preference on the Prefs screen). A standard file dialog will be displayed from which you can select the stack to which you wish to add balloons. The target stack will then be examined and a list of card and background (unless background objects are excluded) buttons and fields will be created and listed below. Objects that end with one of the balloon suffixes: *BM1*, *BM2*, or *BMF* will be automatically excluded, as well as the BM Balloon Help button if it is already in the target stack. Objects that already own a balloon (as indicated by the balloon handlers in their script) will also be excluded, so you cannot accidentally create two balloons for the same object. The shadowed button to the right of the Select Stack button will display the name of the currently selected target stack and if clicked will take you to the target stack. This can prove useful if trying to identify an object from the selection list. There may be objects in the target stack that do not need balloons, such as hidden objects that are never visible. Objects can be removed by selecting them in the object list and clicking the Remove Obj button. Lines in the object list can be selected with the mouse by clicking, shift-clicking, and dragging. Selection List Note: Unlike Mac HC, HCGS does not support a scrolling listField field type. The selection list used below provides the standard functionality of a list field, but because it is written in HyperTalk it is somewhat slow. Delays of a few seconds are to be expected. The Undo Remove button will undo the last remove performed with the Remove Obj button. Once the target stack has been selected andAfter creating the balloons in the target stack you will need to update the balloon text for each new balloon (except the BM Balloon Help balloon, which has its own text). The default text for created balloons states simply that the balloon is a balloon, which is true but not terribly enlightening to someone looking for help. The first step in editing is to go to your newly updated stack. The shadowed button to the right of the Select Stack button can be clicked to go to your stack. In your stack each balloon will need to be updated individually. You may want to use the text file list of balloons created during the update (if you had the Create Balloon List Object File preference selected) as a checklist to make certain that all of the balloons have been updated. Although it is possible to edit each balloon using the HyperCard tools, it is easier to edit them using the built-in edit functions provided while in Balloon Maker Development Mode. Development Mode is turned on by opening the message box and entering BMDev. If this is done correctly a message will be displayed stating that development mode is now on. While in development mode balloons will automatically be displayed when the cursor is moved onto their owner, and if the option key is pressed down will remain visible when the cursor is moved off of their owner. Once a balloon is visible and the cursor is off of the owner, let up on the option key and move the cursor within the balloon (not the balloon handle) and click the mouse. If the balloon is in the card layer then the balloon text will be unlocked for editing and the cursor will change to an I-beam. Click wherever you want to change the text and begin editing. When you are finished simply move the cursor outside of the balloon and it will be relocked and hidden. Customization Note: The edit process is the same for card balloons whose field type has been set to scrolling. Conversion Note: If you are entering text from a text file, such as the one created by the Export Balloon Text button on the Utilities screen, you should copy the text to the clipboard before opening up the balloon, and then use the keyboard paste command (command v) to paste your text into the balloon. If the balloon is in the background layer, then editing is a little more complicated. Clicking on the balloon will cause a scrolling dialog box to be displayed with the current balloon text. Edit the text in the dialog and then click the dialogs OK button to save your update and close the dialog (clicking the dialogs Cancel button will close the dialog without updating your balloon text). After you have finished editing the text of all of your balloons, turn off Development Mode and return to Production Mode by opening the message box and entering BMProd. If this is done correctly a message will be displayed stating that Production mode is now on. Balloons should now behave normally, that is they will not appear unless show balloon mode is on, holding down the option key will not prevent balloons from vanishing, and balloons cannot be edited. For information on using variable text in your balloons, in other words, different text in a balloon at different times, read the Customizing Balloons help section. Deleting an object that owns a balloon: When a button or field that owns a balloon is deleted the balloon will be automatically deleted as well. Deleting balloons from objects: The Delete Balloons from Stack button on the Utilities screen can be used to delete any number of balloons from a stack. In addition to the balloon objects being deleted, the Balloon Maker handlers will be removed from the scripts of the ex-balloon owners. For more information on this feature read the Deleting Balloons from a Stack help section on the Utilities screen. There are some caveats to creating balloons for background layer buttons and fields. Consideration should be given to these prior to creating the balloons for your stack, and possibly during future stack design. The background layer is a very important thing in that it allows one object to be common to multiple cards. This improves stack maintainability, helps to ensure a consistent user interface throughout a stack, and makes for smaller, more efficient stacks, without compromising functionality and flexibility. For these reasons good scripters will put any common object, such as a Home button, in the background layer. Balloons are created in the same layer as their owning object, which means that the balloon of a background object, perhaps a Home button, will consist of two background buttons and a background field. This makes a lot of sense, because the balloon for a background object, like its owner, would also need to be common to multiple cards. There are a couple of qualities of background objects that create problems for balloons. First, background layer objects are always displayed behind card layer objects. This means that a background object can be visibly obstructed by a card object, and that the only way to prevent this is to reposition the card or background objects so that they do not overlap. Depending on the placement of your background and card objects it will probably be the case that the balloons created for background objects will be obstructed by card objects. An example of this can be seen on the Examples screen. Although repositioning objects may correct this problem, this can be time consuming and may compromise the appearance of your stack. In some cases the solution may be to move an obstructing object from the card layer to the background layer, which requires deleting the card objects balloon, pasting the object into the background, recreating its balloon, and then using the Send Farther menu option to position the object behind the other objects balloon. This may solve the obstruction problem, but introduces the scripting problem that there may be cards in the background that you do not want the ex-card object to be visible on. A second problem is that background balloon fields use shared text, which means that the text displayed in the balloon is defined once and is displayed commonly on all cards in the background. While it makes sense for background balloon fields to have shared text, it complicates the text editing process for these balloons. HyperCard does not allow shared text background fields to be edited by cursor placement, and temporarily turning off shared text on the field does not help because the text typed into it while it was non-shared is not retained when it set once again to shared. For more information about the special requirements for editing the text of background balloons, read help section Editing Balloon Text. If you have a background object that you would like to have a balloon for and the background only has a single card, then you may want to consider creating a card layer balloon for the background object, instead of a background layer balloon. This requires creating the background layer balloon normally, then cutting and pasting each of the balloon parts from the background layer to the card layer, and then customizing the script of the background object to display a card layer balloon. The script customization is simple and is as follows: Paste the following line of script: put "cd" into targetType to each of the BalloonMaker handlers in the objects script immediately prior to the following lines (each of the five handlers will have one of these lines): In the mouseEnter handler: showBMBalloon targetName, targetType, targetText In the mouseLeave handler: hideBMBalloon targetName, targetType In the mouseDown handler: hideBMBalloon targetName, targetType, "override" In the deleteButton and deleteField handlers: deleteBMBalloon targetName, targetType Balloons created with Balloon Maker can be customized in several ways. The following techniques and features are available: Selecting an alternative balloon handle: There are eight balloon handle icons that are installed into a stack when balloons are added to the stack. By default four of these icons are used when balloons are created. The four handles that are normally used are positioned on the left or right side of a balloon and point either up or down. If you have an object that is along the top or bottom of the card, then you may want to use one of the four alternative balloon handles which can be positioned along the top or bottom edges of an object's balloon and point left or right. Use the button tool to move the handle button where you would like it and select the handle icon that you wish. Examples using the top and bottom handles are on the Examplesscreen. Scrolling Balloons: Although the default for balloons is a non-scrolling text field, using the field tool you can change the balloon field type to scrolling, which provides for an unlimited amount of text for a balloon without taking up a large amount of screen space. If a balloon type is set to scrolling it behaves a little differently than standard balloons. Normal balloons are hidden once the pointer is moved off of the balloon owner or the owner is clicked. This will not work for scrolling balloons because the user would be unable to move the mouse onto the balloon scroll bar without the balloon vanishing. Instead scrolling balloons will remain visible until one of three events: the mouse is clicked on the owner, the mouse is clicked inside the balloon, or the mouse pointer is moved through the balloon. Another special feature of scrolling balloons is that the scroll bar is always reset to the top of the field when they are made visible. An example of a working scrolling balloon is on the Examples screen. Using Balloon Variable Text: There may be circumstances for which you would like different text displayed in a balloon than under other circumstances. For example, if an on/off button switch is currently set to "on", you may want its balloon to have the text "The switch is ON", and if the switch is off the balloon text to be "The switch is OFF". By default balloons have fixed text that is stored in the balloon field, but only a simple change in the mouseEnter handler of an object is required to replace that text. Examples of variable text balloons are the "To be, or..." and "not to be" checkbox buttons on the Examples screen. Be aware that whatever text is in the balloon field will be permanently replaced. Card Balloons for Background Objects: Due to the negatives of background balloons, you may want to create card level balloons for background objects when there is only a single card in the background. For detailed information on how to do this read the More About Background Objects help section. Changing Other Balloon Characteristics: Balloons are created using the preferences specified on the Prefs screen, but once they are created they can be individually tailored using the standard HyperCard button and field tools. Feel free to customize with these tools as you wish, but do not change the name of the balloon parts or the scripts unless you are following the directions given in these help sections. This section will be of interest to those who have access to both of the HyperCard-capable platforms (the Mac and the Apple IIGS) and would like to cross-develop or convert their stacks between the platforms using Apples freeware HyperMover stack utility. Convert first, add balloons later If you are developing a HyperCard GS or Mac HyperCard stack that you plan to convert to the other platform you should hold off on adding the balloons until after the conversion, rather than adding the balloons prior to conversion and letting HyperMover try to convert them. To add balloons to the Mac HyperCard stack use MacBalloonMaker; to add balloons to the HyperCard GS stack use BalloonMakerGS. Why not let HyperMover convert the balloons? HyperMover is a very useful tool for stack conversion between the IIGS and Macintosh versions of HyperCard. Unfortunately, due to a few weaknesses it will not convert BalloonMaker balloons very well. First, it will not convert the balloon handle icons very well. HyperMover cannot convert icons from the GS to the Mac, so follow-up would be required on the Mac to copy the icons manually from MacBalloonMaker to the converted Mac stack. Converting from the Macintosh to the GS would also be problematic because the GS balloon handle icons look better, so manual effort would be necessary to copy the GS specific icons from BalloonMakerGS to the converted GS stack. Second, HyperMover places all card fields behind card buttons, which will prevent balloon text from being seen. Balloons consist of a button with a text field in front of it, and in the converted stack the balloon text would be behind and blocked by the balloon button. To correct this each balloon text field would need to be moved closer than its balloon button. This is also true of background fields and buttons. Third, the standard font and point size for balloons is Geneva 9, which fortunately is readable on both the Macintosh and the IIGS. However the default balloon sizes are different for the platforms due to pixel density differences. On the Macintosh the default balloon size is 100 height by 140 width, whereas a balloon of 75 height by 100 width on the IIGS holds more text and is of comparable visual size. Converting between the platforms can result in oddly sized balloons. Another difference is that the standard Balloon Line Height on the Macintosh is 11, while the standard Line Height on the GS is 10. But what about all that typing? The downside of adding the balloons separately, rather than converting them is that any balloon customization, including the balloon text, would need to be entered twice, once on each platform. To save wear and tear on your keyboard the Export Balloon Text feature on the Utilities screen can be used to copy all of the balloon text from a stack into a single text file. The text file can then be moved to the other platform over a network or via floppy disk and used to cut and paste the text into the converted stacks balloons. Balloon Help Button Toggles Balloons created with BalloonMakerGS. Copyright (c) 1996 by Brendan Bellina What Does It Do?1tBrendan Bellina has been an Apple enthusiast since 1980 and currently programs in HyperCard on an Apple IIGS, a Macintosh TV (not the fastest, but definitely the coolest-looking Mac), and a Macintosh Quadra 650. He is the published author of several HyperCard GS stacks, all of which have been re-released as freeware, and the author of a HyperCard GS GEnie University course (HyperCard Tutor 101). A graduate of the University of Notre Dame (with a B.A. in Philosophy), the author has professionally programmed on micro, mid-range, and mainframe computer systems for 14 years, and his hobbies include programming in HyperCard, collecting comic books, playing the trumpet, and referring to himself in the 3rd person. The author welcomes comments about this or any of his releases and can be reached at e-mail address: BBellina@aol.com. The purpose of this stack is to assist in developing balloon help support in HyperCard stacks. Although GS/OS does not have a Balloon Help feature, like the MacOS, it is possible to mimic Balloon Help capability using hidden fields, icons, and a master button or menu item. BalloonMaker can create balloons for buttons and fields in the card or background layers of any modifiable stack. Balloons are created based on a set of user preferences, but once created can be individually customized in size, text, font, and field type. The script that controls each balloon is in the owning object (button or field), and a pre-defined interface is provided so that balloon text can be either fixed or responsive to the environment. A global setting is used to determine whether or not balloons should be shown. The BM Balloon Help button in the upper right corner of this card (to the left of the Home button) can toggle the global setting, and will be automatically copied to each background of a selected target stack. This setting could also be controlled by a menu setting, which is demonstrated in this stack. There are a few scripts and objects used in Balloon Maker GS that are worth noting, especially if you are interested in duplicating features of Mac HyperCard in HCGS stacks. Disable/Enable buttons functions: The Mac HyperCard disable/enable functions allow buttons to be disabled without hiding them. A disabled button looks identical to an enabled button, except that the button's name is grayed. Disabled buttons do not respond to mouseup events. The Mac HC commands look like this: disable card button "Undo Remove" enable bg button "Remove Obj" The enable and disable functions in the stack script combined with special script in an object's mouse event handlers can mimic these functions, with nearly identical code. The HCGS commands will look like this: disable name of card button "Undo Remove" enable name of bg button "Remove Obj" (identical to the Mac commands except for the words name of) The functions are in the stack script, and the necessary if check in a button handler is simply: if textColor of me is not 1 then exit to HyperCard For these to work the button must have black text when enabled and gray text when disabled. Pop-up buttons: The pop-up button used to select which documentation section is displayed is designed to resemble some of the behavior of the Mac HC Popup button style. The button displayed is actually the combination of a shadowed field, a hidden field, and a button with a triangular icon. The primary similarities between the Mac Popup button style and the HCGS pop-up are: - the currently selected item is displayed in the pop-up first - a checkmark is displayed in the pop-up prior to the selected item - the HCGS command getSelectedLine when sent to the field will return in the result the selected line number in the same format as the Mac HC the selectedLine function, i.e. line x of card field n. - the HCGS command getSelectedText when sent to the field will return in the result the text of the current popup selection (minus the leading spaces) in the same format as the Mac HC the selectedText function. The PopUp uses the XCMD addPopUp. listField control By setting the Mac HC autoSelect, multipleLines, dontWrap, and LockText properties of a scrolling field the user can make selections from a scrolling listField with selections via click, shift-click, or drag, and automatic highliting of selected lines. The listField control used to display the list of objects on the Main and Utilities cards duplicates many of these features, albeit somewhat slowly. The listField consists of three parts: (1) the scrolling field, (2) a button which is used to simulate the hilighting of the selected lines, and (3) an idle handler in the card script (needed to force redisplay and possible adjustment of the highliting after the use of the scroll bar). The primary similarities between a Mac listField and the HCGS listField are: - the currently selected line(s) are hilited - the HCGS command getSelectedLines when sent to the field will return in the result the selected line number range in the same format as the Mac HC the selectedLines function, i.e. line x to y of card field n. - the HCGS command getSelectedText when sent to the field will return in the result the text of the currently selected lines in the same format as the Mac HC the selectedText function. - the HCGS commands setSelectedLines x,y and hiliteScrollLines when sent to the field mimic the functionality of the Mac HC select statement. - the HCGS command deselectScrollLines when sent to the field will deselect any selected lines and turn off the hiliting (something Mac HyperCard's select empty does not do). It should be noted that it is important that no item within the field exceed a line in length. pList of Objects This is the list of objects that balloons will be created for if the Update Stack button is pressed. mStack Shortcut Click to go directly to the selected stack :HD_HFS:HyperCard:Test Stack.jHelp Button Click on this popup button to select the help section to display or print.gPrefs Button Click to go to the Preferences screen. Same as the BalloonMaker Preferences menu option.dExamples Button Click to go to the Examples screen. Same as the BalloonMaker Examples menu option.aUtilities Button Click to go to the Utilities screen. Same as the BalloonMaker Utilities menu option. XSelect Stack Button Click to select a stack to add balloons to. A list of objects in the stack that can own balloons will be listed in the field below.LRemove Object(s) Button Click to remove hilited objects from the list of objects. Click Undo Remove to add them back. IUndo Remove Button Click to restore the last group of objects removed from the list of objects with the Remove Obj button.FUpdate Stack Button Click to create balloons for all objects in the list of objects field. It is strongly recommended that you have a back-up of your target stack before making any updates. CPrint Button Click to print either the currently displayed help section or the list of selected objects. Main----------------- Script info for this Card ----------------- HANDLERS: idle openCard closeCard Size of script: 1347 chars. 7/11/96 Brendan Bellina ----------------------------------------------------------- on idle put rect of cd fld "List of Objects" into tempRect put the mouseH into the_mouseH put the mouseV into the_mouseV if the_mouseH >= item 3 of tempRect - 13 and the_mouseH <= item 3 of tempRect and the_mouseV >= item 2 of tempRect and the_mouseV <= item 4 of tempRect then choose browse tool send hiliteScrollLines to cd fld "List of Objects" end if end idle on openCard global BalloonMakerMenu, g_BM_the_stackName global g_scroll_LoO put scroll of cd fld "List of Objects" into g_scroll_LoO disableMItem BalloonMakerMenu,2 -- disable "...Main Screen" lock screen show cd btn "Select Stack Backing" hide cd btn "Remove Obj Backing" hide cd btn "Undo Remove Backing" hide cd btn "Update Stack Backing" if cd fld "List of Objects" is empty then disable name of cd btn "Remove Obj" disable name of cd btn "Undo Remove" disable name of cd btn "Update Stack" hide cd fld "Short Instructions" else enable name of cd btn "Update Stack" show cd fld "Short Instructions" end if if cd fld "Long Stack Name" is not empty then put cd fld "Long Stack Name" into g_BM_the_stackName unlock screen end openCard on closeCard global BalloonMakerMenu if BalloonMakerMenu is not empty then enableMItem BalloonMakerMenu,2 -- enable "...Main Screen" end if end closeCard "CARD@I]6f@2} Sample Balloon7x Sample Balloonon mouseUp lock screen select me doMenu "Text Style..." choose browse tool put textAlign of me into cd fld "Balloon Text Alignment" put textFont of me into cd fld "Balloon Text Font" put textHeight of me into cd fld "Balloon Text Line Ht" put textSize of me into cd fld "Balloon Text Size" -- there can be multiple styles put empty into cd fld "Balloon Text Style" put textStyle of me into temp repeat with i = 1 to the number of items in temp put item i of temp & return after cd fld "Balloon Text Style" end repeat delete last char of cd fld "Balloon Text Style" -- delete last return unlock screen end mouseUpcx Balloon Height-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on returnInField enterInField -- this will cause a closeField msg if a change was made end returnInField on closeField put me into temp if temp < 20 then put 20 into temp if temp > 300 then put 300 into temp put temp into me redrawSample end closeFieldcx Balloon Width-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on returnInField enterInField -- this will cause a closeField msg if a change was made end returnInField on closeField put me into temp if temp < 20 then put 20 into temp if temp > 500 then put 500 into temp put temp into me redrawSample end closeField  Vertical Adjust-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on returnInField enterInField -- this will cause a closeField msg if a change was made end returnInField on closeField put me into temp if temp < -200 then put -200 into temp if temp > 200 then put 200 into temp put me into temp redrawSample end closeField  Handle Vertical Adj-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on returnInField enterInField -- this will cause a closeField msg if a change was made end returnInField on closeField put me into temp if temp < -200 then put -200 into temp if temp > 200 then put 200 into temp put temp into me redrawSample end closeField2=> Balloon Text Font-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp answer "To adjust font values, click inside the sample balloon." end mouseUpb#m8 Balloon Text Size-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp answer "To adjust font values, click inside the sample balloon." end mouseUpd= Name of List File-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on returnInField enterInField -- this will cause a closeField msg if a change was made end returnInField on closeField global g_BB_Platform if g_BB_Platform is "Mac" then put 30 into maxLength else put 15 into maxLength end if put me into temp if temp is empty then put "BalloonList" into temp else if length of temp > maxLength then put char 1 to maxLength of temp into temp end if -- replace any colons with periods if ":" is in temp then repeat with i = 1 to the number of chars in temp if char i of temp is ":" then put "." into char i of temp end if if ":" is not in temp then exit repeat end repeat answer "Illegal colons have been replaced with periods." end if end if put temp into me end closeField t Create Balloon Object List File-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. if hilite of me is true then put "A text file " & cd fld "Name of List File" & " will be" && "created listing the balloons created when Update" && "Stack is pressed." into targetText else put "No text file will be created listing the balloons created" && "when Update Stack is pressed." into targetText end if showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp if hilite of me is true then put cd fld "Name of List File" into temp if temp is empty or length of temp > 30 then put "BalloonList" into cd fld "Name of List File" answer "List file name set to default." end if set lockText of cd fld "Name of List File" to false select text of cd fld "Name of List File" else set lockText of cd fld "Name of List File" to true end if end mouseUp>`> Balloon Text Style-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp answer "To adjust font values, click inside the sample balloon." end mouseUpFO card button 25 *BM1*K card button 25 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogp#{8 Balloon Text Line Ht-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp answer "To adjust font values, click inside the sample balloon." end mouseUp : Balloon Text Alignment-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp answer "To adjust font values, click inside the sample balloon." end mouseUp$:  Return-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp set cursor to watch visual effect venetian blinds go to card "Main" end mouseUp Exclude Balloon Help Btn-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. if hilite of me is true then put "The Balloon Help button will not be copied into an updated" && "stack. Click to include the Balloon Help button." into targetText else put "The Balloon Help button will be copied into an updated" && "stack. Click to exclude the Balloon Help button." into targetText end if showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- da  Reset to Defaults-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp global g_BB_Platform lock screen set hilite of cd btn "Exclude Background Objects" to false set hilite of cd btn "Exclude Balloon Help Btn" to false set hilite of cd btn "Create Balloon Object List File" to true set lockText of cd fld "Name of List File" to false put "BalloonList" into cd fld "Name of List File" if g_BB_Platform = "Mac" then put "100" into cd fld "Balloon Height" put "140" into cd fld "Balloon Width" else put "75" into cd fld "Balloon Height" put "100" into cd fld "Balloon Width" end if put "0" into cd fld "Vertical Adjust" put "5" into cd fld "Handle Vertical Adj" put "Geneva" into cd fld "Balloon Text Font" set textFont of cd fld "Sample Balloon" to "Geneva" put "plain" into cd fld "Balloon Text Style" set textStyle of cd fld "Sample Balloon" to "plain" put "9" into cd fld "Balloon Text Size" set textSize of cd fld "Sample Balloon" to 9 if g_BB_Platform = "Mac" then put "11" into cd fld "Balloon Text Line Ht" else put "10" into cd fld "Balloon Text Line Ht" end if set textHeight of cd fld "Sample Balloon" to cd fld "Balloon Text Line Ht" put "left" into cd fld "Balloon Text Alignment" set textAlign of cd fld "Sample Balloon" to "left" redrawSample unlock screen end mouseUp* Exclude Background Objects-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. if hilite of me is true then put "Background layer objects will be excluded from selection" && "on the Main and Utilities screens. Click to include background" && "layer objects." into targetText else put "Background layer objects will be included in selection on" && "the Main and Utilities screens. Click to exclude background" && "layer objects." into targetText end if showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- FkvG Sample Balloon Handle>}B{ Sample Object@ b Balloon Height> b Balloon WidthB  Vertical Adjust D  Handle Vertical Adjt#7 O BM Balloon Help-- Created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_Balloon_Status, BalloonMakerMenu if the commandKey is not up then answer "Apple II Infinitum" if g_Balloon_Status is "on" then put empty into g_Balloon_Status -- update the pull-down menu if there is one if BalloonMakerMenu is not empty then enableMItem BalloonMakerMenu,7 -- enable "Show My Balloons" disableMItem BalloonMakerMenu,8 -- disable "Hide My Balloons" end if else put "on" into g_Balloon_Status -- update the pull-down menu if there is one if BalloonMakerMenu is not empty then disableMItem BalloonMakerMenu,7 -- disable "Show My Balloons" enableMItem BalloonMakerMenu,8 -- enable "Hide My Balloons" end if end if end mouseUp -- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- F %H card button 25 *BM2*"@ menuBar_Buttonon mouseEnter show menuBar end mouseEnter on mouseLeave hide menuBar end mouseLeaveD$P  card field 15 *BM1*%U card field 15 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogD&s G card field 15 *BM2*D']  card field 16 *BM1*(b card field 16 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogD)s G card field 16 *BM2*D*J  card field 17 *BM1*+O card field 17 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogD, I card field 17 *BM2*D-W  card field 18 *BM1*.[ card field 18 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogD/ I card field 18 *BM2*D0=  card field 19 *BM1*1B card field 19 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogD28O  H card field 19 *BM2*D3b  card field 20 *BM1*4] card field 20 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogD5Pg( I card field 20 *BM2*D6mj  card field 24 *BM1*7$re card field 24 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogD81 H card field 24 *BM2*D9`  card field 30 *BM1*:e card field 30 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogD;[r  H card field 30 *BM2*D<%p  card field 31 *BM1*=*k card field 31 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogD>^u( I card field 31 *BM2*D??  card field 32 *BM1*@D  card field 32 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogDAx  I card field 32 *BM2*DBC  card button 8 *BM1*C"A| card button 8 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogDDy% H card button 8 *BM2*DEh  card button 1 *BM1*Fm card button 1 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogDG) I card button 1 *BM2*DHsI  card button 7 *BM1*I#xD card button 7 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogDJb/{ F card button 7 *BM2*FKcI  card button 21 *BM1*LhN card button 21 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogFMw M card button 21 *BM2*DN|I  card button 6 *BM1*OE card button 6 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogDP k# F card button 6 *BM2*Sample Balloon This is what a balloon with the selected preferences will look like. 7510005Geneva9BalloonListBalloon Help Button Toggles Balloons created with BalloonMakerGS. Copyright (c) 1996 by Brendan Bellina10leftBalloon Height The height of created balloons. To change click in the field, type a new value (between 20 and 300), and press return. Balloon Width The width of created balloons. To change click in the field, type a new value (between 20 and 500), and press return. Vertical Adjust The vertical adjustment of a balloon respective to its owner. To change click in the field, type a new value (between -200 and 200), and press return. Handle Vertical Adjust The vertical adjustment of the balloon handle respective to the corner of the balloon. To change click in the field, type a new value (between -200 and 200), and press return. Font Name This is the font balloons will be created using. To change font values click on the sample balloon. Font Size This is the font size balloons will be created using. To change font values click on the sample balloon.List File Name This field displays the name of the file that is created if the Create Balloon Object List File option is selected. To edit the file name click on it.Font Line Height This is the font line height balloons will be created using. To change font values click on the sample balloon. Font Alignment This is the font alignment balloons will be created using. To change font values click on the sample balloon.A text file BalloonList will be created listing the balloons created when Update Stack is pressed.Return Button Press to return to the BalloonMaker GS main screen. The Balloon Help button will be copied into an updated stack. Click to exclude the Balloon Help button.Reset to Defaults Resets all preference settings to the factory defaults. Background layer objects will be included in selection on the Main and Utilities screens. Click to exclude background layer objects.plainFont Style These are the text styles that balloons will be created using. To change font values click on the sample balloon.Prefs----------------- Script info for this Card ----------------- HANDLERS: openCard closeCard getPreferences redrawSample Size of script: 5308 chars. 7/11/96 Brendan Bellina ----------------------------------------------------------- on openCard global BalloonMakerMenu getPreferences disableMItem BalloonMakerMenu,3 -- disable "...Preferences" end openCard on closeCard global BalloonMakerMenu getPreferences if BalloonMakerMenu is not empty then enableMItem BalloonMakerMenu,3 -- enable "...Preferences" end if end closeCard on getPreferences global g_BM_pref_balloon_width, g_BM_pref_balloon_height, g_BM_pref_vert_adj global g_BM_pref_handle_vert_adj, g_BM_pref_balloon_font, g_BM_pref_balloon_font_size global g_BM_pref_balloon_font_height, g_BM_pref_balloon_font_style, g_BM_pref_balloon_font_align global g_BM_pref_exclude_bg, g_BM_pref_create_list_file global g_BM_pref_exclude_bhelp, g_BM_pref_create_list_name put cd fld "Balloon Width" into g_BM_pref_balloon_width put cd fld "Balloon Height" into g_BM_pref_balloon_height put cd fld "Vertical Adjust" into g_BM_pref_vert_adj put cd fld "Handle Vertical Adj" into g_BM_pref_handle_vert_adj -- get font characteristics from the sample balloon put textFont of cd fld "Sample Balloon" into g_BM_pref_balloon_font put textStyle of cd fld "Sample Balloon" into g_BM_pref_balloon_font_style put textSize of cd fld "Sample Balloon" into g_BM_pref_balloon_font_size put textHeight of cd fld "Sample Balloon" into g_BM_pref_balloon_font_height put textAlign of cd fld "Sample Balloon" into g_BM_pref_balloon_font_align -- if hilite of cd btn "Exclude Background Objects" is true then put "Y" into g_BM_pref_exclude_bg else put "N" into g_BM_pref_exclude_bg end if if hilite of cd btn "Exclude Balloon Help Btn" is true then put "Y" into g_BM_pref_exclude_bhelp else put "N" into g_BM_pref_exclude_bhelp end if if hilite of cd btn "Create Balloon Object List File" is true then put "Y" into g_BM_pref_create_list_file put cd fld "Name of List File" into g_BM_pref_create_list_name else put "N" into g_BM_pref_create_list_file end if end getPreferences on redrawSample global g_BM_pref_balloon_width, g_BM_pref_balloon_height, g_BM_pref_vert_adj global g_BM_pref_handle_vert_adj, g_BM_pref_balloon_font, g_BM_pref_balloon_font_size global g_BM_pref_balloon_font_height, g_BM_pref_balloon_font_style global g_BM_pref_balloon_font_align set cursor to watch getPreferences put long name of cd btn "Sample Object" into the_object -- strip off the stack name delete word 7 to 9 of the_object put long name of cd btn "Sample Balloon" into the_balloon -- strip off the stack name delete word 7 to 9 of the_balloon put long name of cd fld "Sample Balloon" into the_balloon_fld -- strip off the stack name delete word 7 to 9 of the_balloon_fld put long name of cd btn "Sample Balloon Handle" into the_balloon_handle -- strip off the stack name delete word 7 to 9 of the_balloon_handle -- -- assign balloon constants put 12 into ha -- horizontal adjustment from the object edge put 25 into the_handle_width put 23 into the_handle_height put -8 into hha -- handle horizontal adjust from the balloon field edge -- -- find the center of the specified object put "put the rectangle of " & the_object & " into the_object_rectangle" into temp do temp put (((item 3 of the_object_rectangle - item 1 of the_object_rectangle) / 2) + item 1 of the_object_rectangle) & comma & (((item 4 of the_object_rectangle - item 2 of the_object_rectangle) / 2) + item 2 of the_object_rectangle) into the_object_center -- -- determine balloon placement, size, and icon put "x,x,x,x" into the_balloon_rectangle put "x,x,x,x" into the_balloon_handle_rectangle put item 3 of the_object_rectangle + ha into item 1 of the_balloon_rectangle put item 2 of the_object_rectangle - g_BM_pref_vert_adj into item 4 of the_balloon_rectangle put item 1 of the_balloon_rectangle + g_BM_pref_balloon_width into item 3 of the_balloon_rectangle put item 4 of the_balloon_rectangle - g_BM_pref_balloon_height into item 2 of the_balloon_rectangle -- set up the balloon handle put item 1 of the_balloon_rectangle - hha into item 3 of the_balloon_handle_rectangle put item 4 of the_balloon_rectangle + g_BM_pref_handle_vert_adj into item 4 of the_balloon_handle_rectangle put item 3 of the_balloon_handle_rectangle - the_handle_width into item 1 of the_balloon_handle_rectangle put item 4 of the_balloon_handle_rectangle - the_handle_height into item 2 of the_balloon_handle_rectangle set the rectangle of the_balloon to the_balloon_rectangle -- adjust the balloon text field to allow for scrolling fields put the_balloon_rectangle into the_balloon_text_rectangle add 5 to item 1 of the_balloon_text_rectangle add 5 to item 2 of the_balloon_text_rectangle subtract 5 from item 3 of the_balloon_text_rectangle subtract 5 from item 4 of the_balloon_text_rectangle set rectangle of the_balloon_fld to the_balloon_text_rectangle set rectangle of the_balloon_handle to the_balloon_handle_rectangle set textFont of the_balloon_fld to g_BM_pref_balloon_font set textStyle of the_balloon_fld to g_BM_pref_balloon_font_style set textSize of the_balloon_fld to g_BM_pref_balloon_font_size set textHeight of the_balloon_fld to g_BM_pref_balloon_font_height set textAlign of the_balloon_fld to g_BM_pref_balloon_font_align end redrawSample`BMAPrfrdF  ,   %(  $(1O ,(1,(1 ,(1" (??8?00 00    ?< K2GS-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- !BhL WWIN-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- l Scrolling balloon-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE --  6  Custom Handle and location-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE --  $:  Return-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp set cursor to watch visual effect venetian blinds go to card "Main" end mouseUp )  Custom Handle and location-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- .@ menuBar_Buttonon mouseEnter show menuBar end mouseEnter on mouseLeave hide menuBar end mouseLeaveDD  card field 7 *BM1*I card field 7 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogD?V H card field 7 *BM2*D2e}  card button 1 *BM1*7jx card button 1 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogD-TDm F card button 1 *BM2*DCe  card button 2 *BM1*Hj card button 2 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogD>TUm F card button 2 *BM2*Dii  card button 3 *BM1*#nd card button 3 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogDX0q F card button 3 *BM2*D0{  card button 4 *BM1*5v card button 4 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogD)@ F card button 4 *BM2*D>  card button 5 *BM1*C card button 5 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogD6M F card button 5 *BM2*DL  card button 6 *BM1*Q card button 6 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogDD[ F card button 6 *BM2*DKx  card button 8 *BM1*P} card button 8 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogDg G card button 8 *BM2*Dd2  card button 9 *BM1*j7 card button 9 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogD\u M card button 9 *BM2*Fh  card button 10 *BM1*m card button 10 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogF) I card button 10 *BM2*Fvb  card button 41 *BM1*|\ card button 41 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogFw J card button 41 *BM2*This is a scrolling card field.This is an unprotected background field with a customized location and handle.Balloon Help Button Toggles Balloons created with BalloonMakerGS. Copyright (c) 1996 by Brendan BellinaeA Balloon... Created by Balloon Maker GS.bHamlet To Be checkbox... This checkbox is selected. This balloon uses variable text._Not To Be checkbox... This checkbox is NOT selected. This balloon uses variable text.\A Balloon... Created by Balloon Maker GS.YA Balloon... Balloons can be created for Macintosh stacks using MacBalloonMaker. *** Apple II Infinitum ***VA Balloon... Balloons have been available in Macintosh applications for several years. With Balloon Maker GS you can have balloon help on your GS!SA Balloon... You're kidding, right?1? You can't do this with Windows!!!PScrolling balloons can be created by simply changing the type of field in the balloon to scrolling. If a balloon is defined as scrolling it will remain open until the mouse is clicked within it or is passed over it. In this way the scrolling thumb can be used.MA Balloon... Created by Balloon Maker GS. This balloon has a custom handle and location.JReturn Button Press to return to the BalloonMaker GS main screen.GA Balloon... Created by Balloon Maker GS. This balloon has a custom handle and location.Examples----------------- Script info for this Card ----------------- HANDLERS: openCard closeCard Size of script: 272 chars. 7/11/96 Brendan Bellina ----------------------------------------------------------- on openCard global BalloonMakerMenu disableMItem BalloonMakerMenu,4 -- disable "...Examples" end openCard on closeCard global BalloonMakerMenu if BalloonMakerMenu is not empty then enableMItem BalloonMakerMenu,4 -- enable "...Examples" end if end closeCard CARDC@;A!D W card button 2 *BM1*S0 card button 2 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogbOn Stack Name-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. put "Stack Shortcut" & return & return & "Click to go directly to" && "the selected stack " & cd fld "Long Stack Name" & "." into targetText showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteF  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ield put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp put cd fld "Long Stack Name" into L_BM_the_stackName go to stack L_BM_the_stackName end mouseUpD^r= Short InstructionsJ t List of Objects-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if -- The pass ... line below was commented out and the -- mouseEnter2 line added because a bug in HCGS -- prevents a handler in an object from receiving a passed msg if -- both the source and target handlers have the same name. (Mac -- HyperCard handles this correctly, with the second handler -- getting control). -- pass mouseEnter mouseEnter2 end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if -- The pass ... line below was commented out and the -- mouseLeave2 line added because a bug in HCGS -- prevents a handler in an object from receiving a passed msg if -- both the source and target handlers have the same name. (Mac -- HyperCard handles this correctly, with the second handler -- getting control). -- pass mouseLeave mouseLeave2 end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if -- The pass ... line below was commented out and the -- mouseDown2 line added because a bug in HCGS -- prevents a handler in an object from receiving a passed msg if -- both the source and target handlers have the same name. (Mac -- HyperCard handles this correctly, with the second handler -- getting control). -- pass mouseDown mouseDown2 end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- The following three handlers are required because the -- balloon function usurps these three handlers. On a Mac -- running HyperCard a handler can pass itself to another handler -- with the same name in the same object, but a bug in HCGS -- prevents this from working. If there was no balloon for this -- object then these three handlers would not be needed and -- the standard names could be used instead of the "2" names. on mouseEnter mouseEnter2 end mouseEnter on mouseLeave mouseLeave2 end mouseLeave on mouseDown mouseDown2 end mouseDown on mouseEnter2 global g_listField_btnID, g_listField_btnName set itemDelimiter to comma put getScrollControlInfo() into temp put first item of temp into g_listField_btnID put second item of temp into g_listField_btnName end mouseEnter2 on mouseLeave2 choose browse tool hiliteScrollLines end mouseLeave2 on mouseWithin if the mouseV > the right of me - 14 then choose browse tool hiliteScrollLines end if end mouseWithin function getScrollControlInfo -- Any handlers that can be called externally (via send) should -- use this function to get the appropriate values. Handlers -- that can only occur after a mouseEnter event can use the -- global variables (it is a bit faster). -- Any handler that updates the button name must also update -- the global variable g_listField_btnName. -- This function returns the button ID of the hilite btn for this -- field and the short name of the hilite btn, separated by commas. put 29 into the_btnID put word 1 of name of me into the_btnType put "put short name of" && the_btnType && "btn ID" && the_btnID && "into the_btnName" into temp do temp put the_btnID & "," & the_btnName into the_result return the_result end getScrollControlInfo function getScrollLine the_mouseV if style of me is not "scrolling" then answer "Error:" && short name of me && "is not a scrolling field." return "error" exit getScrollLine end if put top of me into the_top put textHeight of me into the_textHeight put scroll of me into the_scroll put the number of lines in me into the_numLines put (1+the_scroll+trunc((the_mouseV - the_top)/the_textHeight)) into the_result -- if the line is beyond end of data return "eod #" if the_result > the_numLines then put "eod" && the_result into the_result else -- if the line is empty return "empty #" if line the_result of me is empty then put "empty" && the_result into the_result end if return the_result end getScrollLine on hiliteScrollLines -- can be executed externally via send lock screen set itemDelimiter to comma put getScrollControlInfo() into temp put item 1 of temp into the_btnID put item 2 of temp into the_btnName put the number of me into the_fldNumber put word 1 of name of me into the_fldType set itemDelimiter to colon put item 2 of the_btnName into the_top_selectedLine put item 3 of the_btnName into the_bottom_selectedLine set itemDelimiter to comma if the_top_selectedLine is 0 and the_bottom_selectedLine is 0 then deselectScrollLines exit hiliteScrollLines end if put textHeight of me into the_textHeight put height of me into the_height put scroll of me into the_scroll put 1 + the_scroll into the_top_displayLine put the_top_displayLine + trunc(the_height / the_textHeight) - 1 into the_bottom_displayLine if the_bottom_selectedLine < the_top_displayLine or the_top_selectedLine > the_bottom_displayLine then -- selected lines are outside of viewing range, no hiliting if the_fldType is "card" then hide cd btn ID the_btnID else hide bg btn ID the_btnID else -- some lines are inside viewing range, so figure out hiliting put (the_bottom_displayLine - the_top_displayLine + 1) into the_max_lines -- if selection range starts before or at the display range if the_top_selectedLine <= the_top_displayLine then put 1 into the_hilite_start put (the_bottom_selectedLine - the_top_selectedLine + 1) - (the_top_displayLine - the_top_selectedLine) into the_hilite_length else -- selection range must start after the first line but within -- the display range put (the_top_selectedLine - the_top_displayLine + 1) into the_hilite_start put (the_bottom_selectedLine - the_top_selectedLine + 1) into the_hilite_length end if -- adjust the hilited lines to the max allowed if the_hilite_start + the_hilite_length - 1 > the_max_lines then put the_max_lines + 1 - the_hilite_start into the_hilite_length end if -- determine the appropriate rect of the hilite button put rect of me into tempRect add 1 to item 1 of tempRect add (((the_hilite_start - 1) * the_textHeight) + 1) to item 2 of tempRect subtract 13 from item 3 of tempRect put item 2 of tempRect + (the_hilite_length * the_textHeight) into item 4 of tempRect if the_fldType is "card" then set rect of cd btn ID the_btnID to tempRect show cd btn ID the_btnID else set rect of bg btn ID the_btnID to tempRect show bg btn ID the_btnID end if end if unlock screen end hiliteScrollLines on getSelectedLines -- use the command -- send getSelectedLines to cd fld "Scroll Control" from -- another object and check "the result" for the response. -- can be executed externally via send set itemDelimiter to comma put getScrollControlInfo() into temp put item 2 of temp into the_btnName put the number of me into the_fldNumber put word 1 of name of me into the_fldType set itemDelimiter to colon put item 2 of the_btnName into the_top_selectedLine put item 3 of the_btnName into the_bottom_selectedLine set itemDelimiter to comma put "line" && the_top_selectedLine && "to" && the_bottom_selectedLine && "of" && the_fldType && "field" && the_fldNumber into the_result if word 2 of the_result is "0" and word 4 of the_result is "0" then put empty into the_result return the_result end getSelectedLines function fcnSelectedLines -- use this function to get the selectedLines from within this -- field set itemDelimiter to comma put getScrollControlInfo() into temp put item 1 of temp into the_btnID put item 2 of temp into the_btnName put the number of me into the_fldNumber put word 1 of name of me into the_fldType set itemDelimiter to colon put item 2 of the_btnName into the_top_selectedLine put item 3 of the_btnName into the_bottom_selectedLine set itemDelimiter to comma put "line" && the_top_selectedLine && "to" && the_bottom_selectedLine && "of" && the_fldType && "field" && the_fldNumber into the_result if word 2 of the_result is "0" and word 4 of the_result is "0" then put empty into the_result return the_result end fcnSelectedLines on getSelectedText -- use the command -- send getSelectedText to cd fld "Scroll Control" from -- another object and check "the result" for the response. -- can be executed externally via send set itemDelimiter to comma put getScrollControlInfo() into temp put item 2 of temp into the_btnName put the number of me into the_fldNumber put word 1 of name of me into the_fldType set itemDelimiter to colon put item 2 of the_btnName into the_top_selectedLine put item 3 of the_btnName into the_bottom_selectedLine set itemDelimiter to comma put "line" && the_top_selectedLine && "to" && the_bottom_selectedLine && "of" && the_fldType && "field" && the_fldNumber into the_result if word 2 of the_result is "0" and word 4 of the_result is "0" then put empty into the_result else put "put" && the_result && "into the_result" into temp do temp end if return the_result end getSelectedText on setSelectedLines the_topLine,the_bottomLine,the_anchorLine -- can be executed externally via send set itemDelimiter to comma put getScrollControlInfo() into temp put item 1 of temp into the_btnID put item 2 of temp into the_btnName put word 1 of name of me into the_fldType set itemDelimiter to colon put the_topLine into item 2 of the_btnName put the_bottomLine into item 3 of the_btnName if the_anchorLine is empty then put "0" into the_anchorLine put the_anchorLine into item 4 of the_btnName set itemDelimiter to comma if the_fldType is "card" then set the name of cd btn ID the_btnID to the_btnName else set the name of bg btn ID the_btnID to the_btnName end setSelectedLines on deselectScrollLines -- can be executed externally via send set itemDelimiter to comma put getScrollControlInfo() into temp put item 1 of temp into the_btnID put item 2 of temp into the_btnName put word 1 of name of me into the_fldType -- clear the selected lines item and hide the hilite button set itemDelimiter to colon put "0" into item 2 of the_btnName put "0" into item 3 of the_btnName put "0" into item 4 of the_btnName set itemDelimiter to comma if the_fldType is "card" then set the name of cd btn ID the_btnID to the_btnName hide cd btn ID the_btnID else set the name of bg btn ID the_btnID to the_btnName hide bg btn ID the_btnID end if end deselectScrollLines on scrollFldUp global g_scroll_LoO global g_listField_btnID, g_listField_btnName set itemDelimiter to comma put g_listField_btnID into the_btnID put g_listField_btnName into the_btnName put the number of me into the_fldNumber put word 1 of name of me into the_fldType set itemDelimiter to colon put item 2 of the_btnName into the_top_selectedLine put scroll of me into the_scroll if the_scroll > 0 then set cursor to watch lock screen set scroll of me to (the_scroll - 1) subtract 1 from the_top_selectedLine put the_top_selectedLine into item 2 of the_btnName if the_fldType is "card" then set the name of cd btn ID the_btnID to the_btnName else set the name of bg btn ID the_btnID to the_btnName put the_btnName into g_listField_btnName hiliteScrollLines unlock screen end if set itemDelimiter to comma end scrollFldUp on scrollFldDown global g_scroll_LoO global g_listField_btnID, g_listField_btnName set itemDelimiter to comma put g_listField_btnID into the_btnID put g_listField_btnName into the_btnName put the number of me into the_fldNumber put word 1 of name of me into the_fldType set itemDelimiter to colon put item 2 of the_btnName into the_top_selectedLine put item 3 of the_btnName into the_bottom_selectedLine put textHeight of me into the_textHeight put height of me into the_height put scroll of me into the_scroll put 1 + the_scroll into the_top_displayLine put the_top_displayLine + trunc(the_height / the_textHeight) - 1 into the_bottom_displayLine put the number of lines in me into the_numLines if the_numLines > the_bottom_displayLine then set cursor to watch lock screen set scroll of me to (the_scroll + 1) add 1 to the_bottom_selectedLine put the_bottom_selectedLine into item 3 of the_btnName if the_fldType is "card" then set the name of cd btn ID the_btnID to the_btnName else set the name of bg btn ID the_btnID to the_btnName put the_btnName into g_listField_btnName hiliteScrollLines unlock screen end if set itemDelimiter to comma end scrollFldDown on mouseDown2 global g_listField_btnID, g_listField_btnName set cursor to watch set itemDelimiter to comma put the mouseV into the_MouseV put the shiftKey into the_shiftState put g_listField_btnID into the_btnID put g_listField_btnName into the_btnName put word 1 of name of me into the_fldType if the_shiftState is "up" then -- select the currently clicked line put getScrollLine(the_MouseV) into the_selectedLine if the_selectedLine is "error" or word 1 of the_selectedLine is "empty" or word 1 of the_selectedLine is "eod" then exit mouseDown2 else -- update the button name section of the control info set itemDelimiter to colon put the_selectedLine into item 2 of the_btnName put the_selectedLine into item 3 of the_btnName put the_selectedLine into item 4 of the_btnName set itemDelimiter to comma if the_fldType is "card" then set the name of cd btn ID the_btnID to the_btnName else set the name of bg btn ID the_btnID to the_btnName put the_btnName into g_listField_btnName hiliteScrollLines end if else -- the_shiftState is "down" mouseStillDown end if end mouseDown2 on mouseStillDown global g_listField_btnID, g_listField_btnName set cursor to hand set itemDelimiter to comma put the mouseV into the_MouseV if the_MouseV - 4 < top of me then scrollFldUp exit mouseStillDown else if the_MouseV + 4 > bottom of me then scrollFldDown exit mouseStillDown else put g_listField_btnID into the_btnID put g_listField_btnName into the_btnName put word 1 of name of me into the_fldType set itemDelimiter to colon put item 2 of the_btnName into the_top_selectedLine put item 3 of the_btnName into the_bottom_selectedLine put item 4 of the_btnName into the_anchoredLine put getScrollLine(the_MouseV) into the_selectedLine if the_selectedLine is "error" or word 1 of the_selectedLine is "empty" or word 1 of the_selectedLine is "eod" then exit mouseStillDown else if the_anchoredLine is empty or the_anchoredLine is 0 then if the_selectedLine > the_top_selectedLine then put the_top_selectedLine into item 2 of the_btnName put the_selectedLine into item 3 of the_btnName else put the_selectedLine into item 2 of the_btnName put the_bottom_selectedLine into item 3 of the_btnName end if -- set the new anchored line put the_selectedLine into item 4 of the_btnName else if the_selectedLine > the_anchoredLine then put the_anchoredLine into item 2 of the_btnName put the_selectedLine into item 3 of the_btnName else put the_selectedLine into item 2 of the_btnName put the_anchoredLine into item 3 of the_btnName end if end if -- update the control field info if the_fldType is "card" then set the name of cd btn ID the_btnID to the_btnName else set the name of bg btn ID the_btnID to the_btnName put the_btnName into g_listField_btnName hiliteScrollLines end if set itemDelimiter to comma end if end mouseStillDown on mouseUp global g_listField_btnID, g_listField_btnName set cursor to watch set itemDelimiter to comma put g_listField_btnID into the_btnID put g_listField_btnName into the_btnName put word 1 of name of me into the_fldType --clear the fixed anchor line set itemDelimiter to colon put 0 into item 4 of the_btnName set itemDelimiter to comma if the_fldType is "card" then set the name of cd btn ID the_btnID to the_btnName else set the name of bg btn ID the_btnID to the_btnName put the_btnName into g_listField_btnName -- enable the Remove Obj button if items are selected put fcnSelectedLines() into the_selectedLines if the_selectedLines is not empty then enable name of cd btn "Remove Obj" end mouseUp ^UUb Long Stack Nameon mouseUp hide me end mouseUpTFbx Doc 1on mouseUp hide me end mouseUpT)g[ Doc 2on mouseUp hide me end mouseUpT$V Doc 3on mouseUp hide me end mouseUp)>  Return-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp set cursor to watch visual effect venetian blinds go to card "Main" end mouseUpt#7 O BM Balloon Help-- Created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_Balloon_Status, BalloonMakerMenu if the commandKey is not up then answer "Apple II Infinitum" if g_Balloon_Status is "on" then put empty into g_Balloon_Status -- update the pull-down menu if there is one if BalloonMakerMenu is not empty then enableMItem BalloonMakerMenu,7 -- enable "Show My Balloons" disableMItem BalloonMakerMenu,8 -- disable "Hide My Balloons" end if else put "on" into g_Balloon_Status -- update the pull-down menu if there is one if BalloonMakerMenu is not empty then disableMItem BalloonMakerMenu,7 -- disable "Show My Balloons" enableMItem BalloonMakerMenu,8 -- enable "Hide My Balloons" end if end if end mouseUp -- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- D %H card button 2 *BM2* < Remove Obj-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp global g_BM_the_selections_Util, g_BM_the_line_insert_Util global g_BM_the_selectionLines_Util if textColor of me is not 1 then exit mouseUp set hilite of me to true set hilite of me to false send getSelectedLines to cd fld "List of Objects" put the result into the_selectedLines if cd fld "List of Objects" is empty or the_selectedLines is empty then disable name of me answer "Nothing selected." exit mouseUp end if put number of lines in cd fld "List of Objects" into num_of_lines -- save the contents of the selected lines in case it is needed for an undo put "put" && the_selectedLines && "into g_BM_the_selections_Util" into temp do temp put the_selectedLines into g_BM_the_selectionLines_Util -- save the line position in case it is needed for an undo put word 2 of the_selectedLines into g_BM_the_line_insert_Util put word 4 of the_selectedLines into the_last_line_selected -- delete the selected lines delete line g_BM_the_line_insert_Util to the_last_line_selected of cd fld "List of Objects" enable name of cd btn "Undo Remove" if cd fld "List of Objects" is empty then disable name of cd btn "Export Balloon Text" disable name of cd btn "Delete Balloons from Stack" hide cd fld "Short Instructions" end if -- Clear scroll field hiliting send deselectScrollLines to cd fld "List of Objects" end mouseUp < Undo Remove-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp global g_BM_the_selections_Util, g_BM_the_line_insert_Util global g_BM_the_selectionLines_Util if textColor of me is not 1 then exit mouseUp set hilite of me to true set hilite of me to false if g_BM_the_line_insert_Util <= number of lines in cd fld "List of Objects" then put return after g_BM_the_selections_Util put g_BM_the_selections_Util before line g_BM_the_line_insert_Util of cd fld "List of Objects" disable name of me enable name of cd btn "Remove Obj" if cd fld "List of Objects" is not empty then enable name of cd btn "Export Balloon Text" enable name of cd btn "Delete Balloons from Stack" show cd fld "Short Instructions" end if -- reselect scroll hiliting send "setSelectedLines" && word 2 of g_BM_the_selectionLines_Util & "," & word 4 of g_BM_the_selectionLines_Util to cd fld "List of Objects" send hiliteScrollLines to cd fld "List of Objects" end mouseUp  Delete Balloons from Stack-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp global g_BB_platform if textColor of me is not 1 then exit mouseUp set hilite of me to true set hilite of me to false answer "Deleting balloons from a stack is irreversible. Are you sure you want to continue?" with "Continue" or "Cancel" if it is "Cancel" then exit to HyperCard set cursor to watch lock screen set lockMessages to true set lockRecent to true put "Start of" && "BalloonMaker script" into identifier_text -- get the list of balloons to delete put cd fld "List of Objects" into the_ObjectList put number of lines in the_ObjectList into the_ObjectList_Total -- erase the list from the cd field put empty into cd fld "List of Objects" -- Clear scroll field hiliting send deselectScrollLines to cd fld "List of Objects" disable name of me disable name of cd btn "Export Balloon Text" hide cd fld "Short Instructions" disable name of cd btn "Remove Obj" disable name of cd btn "Undo Remove" push card put cd fld "Long Stack Name" into L_BM_the_stackName go to stack L_BM_the_stackName repeat with i = 1 to number of lines in the_ObjectList -- The format of an object line is: -- "object name" bkgnd/card fld id # of card id # put line i of the_objectList into the_object put word 1 of the_object into the_object_name delete char 1 of the_object_name delete last char of the_object_name delete word 1 of the_object -- the_object will be in the following format: -- bkgnd/card fld id # of card id # -- first go to the appropriate card put word 8 of the_object into temp if short id of this card is not temp then go to card id temp end if -- determine the balloon owner name put the_object_name into the_owner_name delete last word of the_owner_name put "id " before word 3 of the_owner_name -- update the balloon owner's script, removing the balloon handlers get script of the_owner_name put it into the_owner_script put empty into start_of_BM_handler put empty into end_of_BM_handler repeat with i = 1 to number of lines in the_owner_script put line i of the_owner_script into the_line if number of words in the_line is 12 then if start_of_BM_handler is empty then if word 2 to 5 of the_line is identifier_text then put i into start_of_BM_handler end if else if word 2 to 5 of the_line is "End of BalloonMaker script" then put i into end_of_BM_handler exit repeat end if end if end if end repeat if start_of_BM_handler is not empty and end_of_BM_handler is not empty then delete line start_of_BM_handler to end_of_BM_handler of the_owner_script set script of the_owner_name to the_owner_script end if -- delete the balloon text field choose field tool if word 1 of the_object is "bkgnd" then show bg fld the_object_name select bg fld the_object_name else show cd fld the_object_name select cd fld the_object_name end if if g_BB_platform is "GS" then doMenu "Clear Field" else doMenu "Clear Field" without dialog end if -- delete the balloon shape button choose button tool put "*BM1*" into last word of the_object_name if word 1 of the_object is "bkgnd" then show bg btn the_object_name select bg btn the_object_name else show cd btn the_object_name select cd btn the_object_name end if doMenu "Clear Button" -- delete the balloon handle button put "*BM2*" into last word of the_object_name if word 1 of the_object is "bkgnd" then show bg btn the_object_name select bg btn the_object_name else show cd btn the_object_name select cd btn the_object_name end if doMenu "Clear Button" put i && "of" && the_ObjectList_Total && "completed." end repeat put empty into msg hide msg pop card choose browse tool unlock screen answer "Balloons deleted successfully." end mouseUp   Export Balloon Text-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp global g_BB_Platform if textColor of me is not 1 then exit mouseUp set hilite of me to true set hilite of me to false ask file "Export balloons as:" with "BalloonsExport" if ((it is empty) or (the result is "Cancel")) then exit to HyperCard put it into fileName open file fileName set cursor to watch lock screen set lockMessages to true set lockRecent to true -- get the list of objects to extract text for put cd fld "List of Objects" into the_ObjectList put number of lines in the_ObjectList into the_ObjectList_Total push card put cd fld "Long Stack Name" into L_BM_the_stackName go to stack L_BM_the_stackName -- write file header write "**********" & return to file fileName write "Exported Balloon Text from" && L_BM_the_stackName & return to file fileName write "**********" & return to file fileName repeat with i = 1 to number of lines in the_ObjectList -- The format of an object line is: -- "object name" bkgnd/card field id # of card id # put line i of the_objectList into the_object put the_object into the_title_line put word 1 of the_object into the_object_name delete char 1 of the_object_name delete last char of the_object_name delete word 1 of the_object -- the_object will be in the following format: -- bkgnd/card field id # of card id # -- first go to the appropriate card put word 8 of the_object into temp if short id of this card is not temp then go to card id temp end if -- write the object header write return & "----------" & return to file fileName write "<<<" && the_title_line && ">>>" & return to file fileName -- write the owner info put the_object_name into the_owner_name delete last word of the_owner_name put "id " before word 3 of the_owner_name put "put short name of " & the_owner_name && "into the_owner_name" into temp do temp write "Owner name:" && the_owner_name & return to file fileName -- write the contents of the object if word 1 of the_object is "bkgnd" then write bg fld the_object_name & return to file fileName else write cd fld the_object_name & return to file fileName end if put i && "of" && the_ObjectList_Total && "completed." end repeat close file fileName put empty into msg hide msg pop card answer "Balloon text of stack" && L_BM_the_stackName && "exported to" && fileName & "." end mouseUp @ menuBar_Buttonon mouseEnter show menuBar end mouseEnter on mouseLeave hide menuBar end mouseLeaven   Documentation PopUp-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if -- The pass ... line below was commented out and the -- mouseDown2 line added because a bug in HCGS -- prevents a handler in an object from receiving a passed msg if -- both the source and target handlers have the same name. (Mac -- HyperCard handles this correctly, with the second handler -- getting control). -- pass mouseDown mouseDown2 end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- The following handler is required because the -- balloon function usurps this handler. On a Mac -- running HyperCard a handler can pass itself to another handler -- with the same name in the same object, but a bug in HCGS -- prevents this from working. If there was no balloon for this -- object then this handler would not be needed and -- the standard name could be used instead of the "2" name. on mouseDown mouseDown2 end mouseDown on mouseDown2 -- prefix each valid menu item with two spaces put " Selecting a Stack" & return & " Exporting Balloon Text" & return & " Deleting Balloons from a Stack" & return & " Install a Font into a Stack" into itemList put cd fld "Documentation PopUp Line" into initLine if initLine < 1 then put 1 into initLine put "" into char 1 of line initLine of itemList put addPopUp(itemList, left of me, top of me, initLine) into chosenItem delete char 1 to 2 of line initLine of itemList put chosenItem into saveItem if chosenItem > 0 then set cursor to watch lock screen put line saveItem of itemList into itemName put saveItem into cd fld "Documentation PopUp Line" put itemName into me put "Doc" && chosenItem into docFld put cd fld docFld into bg fld "Documentation" set scroll of bg fld "Documentation" to 0 unlock screen end if end mouseDown2 on getSelectedLine -- use the command -- send getSelectedLines to cd fld "Documentation PopUp" -- from another object and check "the result" for the response. put the number of me into the_fldNumber put word 1 of name of me into the_fldType put cd fld "Documentation PopUp Line" into initLine if initLine < 1 then put 0 into initLine put "line" && initLine && "of" && the_fldType && "field" && the_fldNumber into the_result if word 2 of the_result is "0" then put empty into the_result return the_result end getSelectedLine on getSelectedText -- use the command -- send getSelectedText to cd fld "Documentation PopUp" -- from another object and check "the result" for the response. if cd fld "Documentation PopUp Line" is empty then put empty into the_result else put line 1 of me into the_result delete char 1 to 2 of the_result end if return the_result end getSelectedText h  Documentation PopUp Lineon mouseUp hide me end mouseUp   Popup Arrowon mouseDown send mouseDown to cd fld "Documentation Popup" end mouseDown _p@ Select Stack Backingon mouseUp click at the loc of cd btn "Select Stack" end mouseUpan> Select Stack-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp answer file "Select the stack:" of type stack if it is empty then exit mouseUp set cursor to watch put it into L_BM_the_stackName put L_BM_the_stackName into cd fld "Long Stack Name" put short name of stack L_BM_the_stackName into cd fld "Stack Name" push card lock screen set lockMessages to true set lockRecent to true put empty into the_objectList go to first card of stack L_BM_the_stackName put 0 into the_cards_scanned -- Identify balloons by looking for fields that end with "*BMF*" -- Because object (bg, cd, btn, fld) names are not uniquely assigned, only id #s -- are used to uniquely identify the objects. -- But to make items more recognizable their names are shown at the front -- of the object line. The format of an object line then is: -- "object name",bkgnd/card field/button id # of card id # repeat until number(cards) = the_cards_scanned put short id of this card into the_short_card_id put number of cards in this bg into the_num_of_cards -- get all background fields put number of bg flds into the_num_of_bg_flds repeat with the_fld_num = 1 to the_num_of_bg_flds if last word of short name of bg fld the_fld_num is "*BMF*" then -- if the balloon is owned by the BM Balloon Help button, then skip it put short name of bg fld the_fld_num into temp delete last word of temp put "id " before word 3 of temp put "put short name of" && temp && "into temp" into temp do temp if temp is "BM Balloon Help" then next repeat -- put quote & short name of bg fld the_fld_num & quote into temp0 put long name of bg fld the_fld_num into temp1 if word 3 of temp1 is not "id" then put "id" && id of bg fld the_fld_num into word 3 of temp1 else put quote & "" & quote into temp0 end if if word 7 of temp1 is not "id" then put "id" && the_short_card_id into word 7 of temp1 end if delete word 9 to 11 of temp1 -- drop the stack name phrase put temp0 && temp1 & return after the_objectList end if end repeat -- loop through the cards in this background repeat with the_card_num = 1 to the_num_of_cards -- get all card fields put number of card flds into the_num_of_cd_flds repeat with the_fld_num = 1 to the_num_of_cd_flds if last word of short name of cd fld the_fld_num is "*BMF*" then -- if the balloon is owned by the BM Balloon Help button, then skip it put short name of cd fld the_fld_num into temp delete last word of temp put "id " before word 3 of temp put "put short name of" && temp && "into temp" into temp do temp if temp is "BM Balloon Help" then next repeat -- put quote & short name of cd fld the_fld_num & quote into temp0 put long name of cd fld the_fld_num into temp1 if word 3 of temp1 is not "id" then put "id" && id of cd fld the_fld_num into word 3 of temp1 else put quote & "" & quote into temp0 end if if word 7 of temp1 is not "id" then put "id" && the_short_card_id into word 7 of temp1 end if delete word 9 to 11 of temp1 -- drop the stack name phrase put temp0 && temp1 & return after the_objectList end if end repeat add 1 to the_cards_scanned go to next card end repeat end repeat pop card put the_objectList into cd fld "List of Objects" if cd fld "List of Objects" is not empty then enable name of cd btn "Export Balloon Text" enable name of cd btn "Delete Balloons from Stack" show cd fld "Short Instructions" else disable name of cd btn "Export Balloon Text" disable name of cd btn "Delete Balloons from Stack" hide cd fld "Short Instructions" end if disable name of cd btn "Remove Obj" disable name of cd btn "Undo Remove" -- Clear scroll field hiliting send deselectScrollLines to cd fld "List of Objects" end mouseUpz"(8  Print-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp put "Documentation" into fldName1 put "bg" into fldType1 put "List of Objects" into fldName2 put "cd" into fldType2 put "00" into printfieldflag if fldType1 is "bg" then if bg fld fldName1 is not empty then put "1" into char 1 of printfieldflag end if else if cd fld fldName1 is not empty then put "1" into char 1 of printfieldflag end if end if if fldType2 is "bg" then if bg fld fldName2 is not empty then put "1" into char 2 of printfieldflag end if else if cd fld fldName2 is not empty then put "1" into char 2 of printfieldflag end if end if -- printfieldflag values and meanings: -- "00" Both fldName1 and fldName2 are empty -- "10" fldName1 is not empty, fldName2 is empty -- "01" fldName2 is not empty, fldName1 is empty -- "11" fldName1 is not empty, fldName2 is not empty if "1" is not in printfieldflag then answer "Nothing to print." exit to HyperCard else -- Something to print if "0" is in printfieldflag then if char 1 of printfieldflag is "1" then answer "Turn your printer on and click OK to print the " && fldName1 & "." with "Cancel" or "OK" if it is "OK" then if fldType1 is "bg" then print bg fld fldName1 else print cd fld fldName1 end if exit to HyperCard else answer "Turn your printer on and click OK to print the " && fldName2 & "." with "Cancel" or "OK" if it is "OK" then if fldType2 is "bg" then print bg fld fldName2 else print cd fld fldName2 end if exit to HyperCard end if else answer "Print (1) the" && fldName1 && "or (2) the" && fldName2 && "?" with "1" or "2" or "Cancel" if it is "1" then if fldType1 is "bg" then print bg fld fldName1 else print cd fld fldName1 else if it is "2" then if fldType2 is "bg" then print bg fld fldName2 else print cd fld fldName2 end if end if end if end mouseUpC Install a Font into the Stack-- Start of BalloonMaker script -- DO NOT DELETE THIS LINE -- -- Script added by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseEnter global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- set the flag field so that the balloon is hidden properly upon -- a mouseDown or mouseLeave message put long id of this card into g_BM_target_card if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- show the balloon put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType if short name of me is "BM Balloon Help" then put "Balloon Help Button" & return & return & "Toggles Balloons created with BalloonMakerGS." & return & return & "Copyright (c) 1996 by Brendan Bellina" into targetText else put empty into targetText end if -- To have specialized text appear in the balloon, set targetText to the text you want -- before the showBMBalloon statement below. showBMBalloon targetName, targetType, targetText end if pass mouseEnter end mouseEnter on mouseLeave global g_Balloon_Status, g_BM_target_card, g_BM_Mode -- hide the balloon if it was not already hidden by mouseDown if long id of this card is g_BM_target_card then -- not already hidden by mouseDown put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- hide the balloon unless the option key is down in balloon development mode if not (the optionKey is down and g_BM_Mode is "D") then put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType end if end if end if pass mouseLeave end mouseLeave on mouseDown -- Don't check for the option button because it may be down for -- a reason specific to the click. -- It is necessary to hide the balloon on a mouseDown event in addition -- to the mouseLeave event because the object may have a go to command in -- its script, in which case the mouseLeave message would be received by -- the target of the go to, not the target object of the click. -- In the event that the target script does not have a go to command, both -- the mouseDown and mouseLeave messages will be received, so the flag field -- "g_BM_target_card" is used to prevent the mouseLeave from causing a second -- hide request for the same balloon. global g_Balloon_Status, g_BM_target_card, g_BM_Mode put empty into g_BM_target_card -- clear the flag field if g_Balloon_Status is "on" or g_BM_Mode is "D" or short name of me is "BM Balloon Help" then -- the balloon may be showing -- always hide the balloon on a mouseDown put (word 1 to 2 of long name of me && short id of me) into targetName if first word of the long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType hideBMBalloon targetName, targetType, "override" end if pass mouseDown end mouseDown on deleteButton put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteButton on deleteField put (word 1 to 2 of long name of me && short id of me) into targetName if first word of long name of me is "bkgnd" then put "bg" into targetType else put "cd" into targetType deleteBMBalloon targetName, targetType end deleteField -- End of BalloonMaker script -- DO NOT DELETE THIS LINE -- on mouseUp put cd fld "Long Stack Name" into L_BM_the_stackName if L_BM_the_stackName is empty then answer "No stack selected." with "Cancel" exit to HyperCard end if -- Select the font to install into the target stack answer file "Select font to install:" of type 200 if it is empty then exit to HyperCard put it into fontName if L_BM_the_stackName is not empty then put "Click OK to install the font into" && L_BM_the_stackName & ". Click Another to select a different stack." into prompt answer prompt with "Cancel" or "Another" or "OK" if it is "Cancel" then answer "Font install cancelled." exit mouseUp else if it is "Another" then put empty into L_BM_the_stackName end if if L_BM_the_stackName is empty then answer file "Select the stack:" of type stack if it is empty then answer "Font install cancelled." exit mouseUp else put it into L_BM_the_stackName end if set itemDelimiter to colon put "fontZ load," & quote & last item of fontName & quote into font_line set itemDelimiter to comma set the cursor to watch -- Copy the FontZ XCMD into the target stack put the long name of this stack into sourceStack put L_BM_the_stackName into targetStack delete char 1 to 7 of sourceStack delete last char of sourceStack resCopy "current", targetStack, 32798, "FontZ" put the Result into theResult if theResult is not empty then if theResult is not "That resource already exists in the destination file." then answer theResult exit mouseUp end if end if -- Load the font into the resource fork of the target stack makeresource fontName,targetStack,"$00C8" put the Result into theResult if theResult is not empty then answer theResult exit mouseUp end if -- lock down the hatches and go to the target stack lock screen set lockMessages to true set lockRecent to true push card go to stack L_BM_the_stackName -- Update the openStack handler to load the font get the script of this stack put it into the_stack_script put 0 into the_openStack_handler repeat with i = 1 to number of lines in the_stack_script if uppercase(word 1 of line i of the_stack_script) is not "ON" then next repeat if uppercase(word 2 of line i of the_stack_script) is not "OPENSTACK" then next repeat put i into the_openStack_handler exit repeat end repeat if the_openStack_handler = 0 then -- create an openStack handler put "on openStack" & return & font_line & return & "end openStack" & return & return before line 1 of the_stack_script else -- update the existing openStack handler put return & font_line & return after line the_openStack_handler of the_stack_script end if set the script of this stack to the_stack_script pop card set itemDelimiter to colon answer last item of fontname && "font installed into" && targetstack && "successfully." set itemDelimiter to comma end mouseUp T;m) Doc 4on mouseUp hide me end mouseUplu@ List of Objects:0:0:0on mouseEnter send mouseEnter to cd fld "List of Objects" end mouseEnter on mouseDown send mouseDown to cd fld "List of Objects" end mouseDown on mouseStillDown send mouseStillDown to cd fld "List of Objects" end mouseStillDown on mouseUp send mouseUp to cd fld "List of Objects" end mouseUpD b)  card field 7 *BM1*!]$ card field 7 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogD"Pg G card field 7 *BM2*D#g  card field 12 *BM1*$"c  card field 12 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogD%ax L card field 12 *BM2*D&e  card field 21 *BM1*'` card field 21 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogD(, F card field 21 *BM2*D)i  card button 1 *BM1**n card button 1 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogD+. I card button 1 *BM2*D,5  card button 9 *BM1*-:{ card button 9 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogD.n I card button 9 *BM2*F/L  card button 10 *BM1*0Q card button 10 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogF1 I card button 10 *BM2*F2Zf  card button 13 *BM1*3_l card button 13 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogF4j L card button 13 *BM2*F5Ja  card button 25 *BM1*6O\ card button 25 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogF7O9fR G card button 25 *BM2*F8(s  card button 26 *BM1*9-n card button 26 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogF:#:' H card button 26 *BM2*F;q;  card button 27 *BM1*<v6 card button 27 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogF= G card button 27 *BM2*F>Wb  card button 11 *BM1*?Ze card button 11 *BMF*-- Script created by BalloonMakerGS -- Copyright (c) 1996 by Brendan Bellina on mouseUp global g_BM_Mode if g_BM_Mode is "D" then if first word of the long name of me is not "bkgnd" then set lockText of me to (not the lockText of me) if lockText of me is true then hideMe "Y" end if else -- shared bg flds cannot be edited directly, so use a cd fld set cursor to watch lock screen put name of me into f_the_caller put "Update the Balloon Text:" into f_the_title_text put me into f_the_body_text createScrollDialog f_the_caller, f_the_title_text, f_the_body_text unlock screen end if else hideMe "Y" end if end mouseUp on mouseLeave hideMe "Y" end mouseLeave on hideMe BM_override if lockText of me is false then set lockText of me to true put short name of me into BM_targetName delete last word of BM_targetName if first word of long name of me is "bkgnd" then put "bg" into BM_targetType else put "cd" into BM_targetType if BM_override is "Y" then put "override" into BM_override else put empty into BM_override hideBMBalloon BM_targetName, BM_targetType, BM_override end hideMe on returnScrollDialog the_sender,the_list set cursor to watch if the_sender is "OK" then put "put line 4 of cd fld" && the_list && "into temp" into temp do temp put "put" && temp && "into me" into temp do temp end if deleteScrollDialog the_list end returnScrollDialogF@ M card button 11 *BM2*Balloon Help Button Toggles Balloons created with BalloonMakerGS. Copyright (c) 1996 by Brendan BellinaTest StackClick, shift-click, or drag to select objects to remove.:HD_HFS:HyperCard:Test StackTo select a stack to use with a utility click on the Select Stack button below. A standard file dialog will be displayed from which you can select the stack you wish. The selected stack will then be examined and a list of card and background balloon fields will be created and listed below. Balloons will be recognized by the suffix *BMF*. The BM Balloon Help balloon will be excluded from selection. The shadowed button to the right of the Select Stack button will display the name of the currently selected stack and if clicked will take you to the selected stack. This can prove useful if trying to identify an object from the selection list. After selecting a stack use the Remove Obj and Undo Remove to remove objects from the selection list. These buttons affect the items in the list only, they do not affect the selected stack directly. Selection List Note: Unlike Mac HC, HCGS does not support a scrolling listField field type. The selection list used below provides the standard functionality of a list field, but because it is written in HyperTalk it is somewhat slow. Delays of a few seconds are to be expected. The Export Balloon Text feature is used to export balloon text from a stack into a text file. This is useful when converting stacks between the Macintosh and IIGS platforms since the text file can be moved to the other platform over a network or via floppy disk and used to cut and paste the text into a converted stacks balloons. After selecting the stack and removing unwanted objects from the selection list using the Remove Obj button, click on the Export Balloon Text button to begin exporting the text. After clicking the button you will asked for a file name to store the exported text in. If the file named already exists it will be replaced. Each time a balloon is processed the total completed will be displayed in the message box. The Delete Balloons from Stack feature is used to delete a group of balloons from a stack. The group of balloons can range from a single balloon to all of the balloons in a stack (except the BM Balloon Help balloon). When a balloon is deleted the Balloon Maker handlers in the balloon owner's script will also be deleted. Each time a balloon is deleted the total completed will be displayed in the message box. Deleting all traces of BalloonMaker from a Stack It is highly recommended that you save a copy of your stack before you added balloons, so that if you decide to undo the addition of balloons you can simply restore from your copy. If you did not follow this recommendation here are the steps you will need to follow to remove all traces of the Balloon Maker modifications: - First, copy your stack in case things do not turn out the way you want. If you are tempted to skip this recommendation, just remember that if you followed the earlier recommendation above you wouldnt be in this situation. - Next, select the stack and use the Delete Balloons from Stack to delete all of the balloons in the stack. - Go to the first background in your stack. - Select the button tool - Click once on the BM Balloon Help button to select it. - Select the Clear Button option from the Edit pull-down menu. (Any time you delete an object that owns a balloon its balloon is automatically deleted as well.) - Go to the first card of each background and repeat the above steps to delete the BM Balloon Help button from all of the backgrounds in the stack. - Open the stack script and remove the handlers between the lines Start of the BalloonMaker stack script and End of the BalloonMaker stack script. - Use a resource utility such as HyperUtility to delete the eight balloon handle icons. - Lastly, if you installed a font into the stack you may want to remove the FontZ XCMD, the FontZ statement in the openStack handler, and the installed font from the stack resource fork. Selecting a Stack1GS/OS does not natively support TrueType fonts, as the MacOS does, so it is likely that a font that you might want to use in the balloons of a stack (such as the default Geneva.9) will not be available to the GS/OS Font Manager when someone else attempts to use the stack. The result in that case will be balloons with extremely ugly, and possibly unreadable text. To avoid this you can install the font directly into the stack, ensuring that balloons appear as intended, regardless of whether or not the user of the stack has the font you selected installed in their :System:Fonts folder. To install a font you will need the bitmap size of the font available to you. If you use WestCodes Pointless utility you may need to generate a bitmap file of the font size that you wish. Click on the Install a Font into the Stack to begin the font installation process. During the process you will be asked to locate the bitmap font you wish to install and the stack you wish to install the font into. The process will then add the font to the resource fork of the stack, copy the freeware FontZ XCMD into the stack, and update (or create) the openStack handler to load the font via the FontZ command. Unfortunately there are times when the FontZ command will fail to load a font, perhaps when there is not enough memory available. For this reason you may want to distribute a copy of the bitmap font size needed with your stack or use only the standard font sizes distributed with GS/OS. Geneva.9, which is both required by this stack (for the scrolling object lists and the balloons) and is the standard for balloons is not a standard GS/OS point size, so it has been both installed into this stack and included with this stack as a separate bitmap font file which can be installed into your :System:Fonts folder if needed. The freeware FontZ XCMDs is copyright (c) 1991 by Oz Data, and was written by Richard Bennett. To select a stack to use with a utility click on the Select Stack button below. A standard file dialog will be displayed from which you can select the stack you wish. The selected stack will then be examined and a list of card and background balloon fields will be created and listed below. Balloons will be recognized by the suffix *BMF*. The BM Balloon Help balloon will be excluded from selection. The shadowed button to the right of the Select Stack button will display the name of the currently selected stack and if clicked will take you to the selected stack. This can prove useful if trying to identify an object from the selection list. After selecting a stack use the Remove Obj and Undo Remove to remove objects from the selection list. These buttons affect the items in the list only, they do not affect the selected stack directly. Selection List Note: Unlike Mac HC, HCGS does not support a scrolling listField field type. The selection list used below provides the standard functionality of a list field, but because it is written in HyperTalk it is somewhat slow. Delays of a few seconds are to be expected. Stack Shortcut Click to go directly to the selected stack :HD_HFS:HyperCard:Test Stack.List of Objects This is the list of the balloons that will be processed by the Export Balloon Text and Delete Balloons utilities. Help Button Click on this popup button to select the help section to display or print. Return Button Press to return to the BalloonMaker GS main screen.Remove Object(s) Button Click to remove hilited objects from the list of objects. Click Undo Remove to add them back.Undo Remove Button Click to restore the last group of objects removed from the list of objects with the Remove Obj button. Export Balloon Text Click to create a text file containing the text of the balloons selected in the list. Filename and location will be prompted.Select Stack Button Click to select a stack to use with a utility function. A list of balloons in the stack will be listed in the field below.Print Button Click to print either the currently displayed help section or the list of selected objects. Font Install Click to install a bitmap font into a HyperCard stack. You will be prompted for the location of the bitmap font and the stack to update.Delete Balloons Click to remove the selected balloons from the selected stack. It is strongly recommended that you make a copy of your stack before selecting this option. Utilities----------------- Script info for this Card ----------------- HANDLERS: idle openCard closeCard Size of script: 1119 chars. 7/11/96 Brendan Bellina ----------------------------------------------------------- on idle put rect of cd fld "List of Objects" into tempRect put the mouseH into the_mouseH put the mouseV into the_mouseV if the_mouseH >= item 3 of tempRect - 13 and the_mouseH <= item 3 of tempRect and the_mouseV >= item 2 of tempRect and the_mouseV <= item 4 of tempRect then choose browse tool send hiliteScrollLines to cd fld "List of Objects" end if end idle on openCard global BalloonMakerMenu disableMItem BalloonMakerMenu,5 -- disable "...Utilities" lock screen if cd fld "List of Objects" is empty then disable name of cd btn "Remove Obj" disable name of cd btn "Undo Remove" disable name of cd btn "Export Balloon Text" disable name of cd btn "Delete Balloons from Stack" hide cd fld "Short Instructions" else enable name of cd btn "Export Balloon Text" enable name of cd btn "Delete Balloons from Stack" show cd fld "Short Instructions" end if unlock screen end openCard on closeCard global BalloonMakerMenu if BalloonMakerMenu is not empty then enableMItem BalloonMakerMenu,5 -- enable "...Utilities" end if end closeCard MPRT V PRNTV Untitled3Missing dr_ 2?  TAILThat's all folks...~?????$ 6t  PbFGbHIJ*K LZ M O\ P ]yv"0&>] nG^P)MaP*a Popup ArrowMBalloon Help Down RightGBalloon Help Left DownFBalloon Help Left UpHBalloon Help Right UpJBalloon Help Up LeftKBalloon Help Up RightOMed Balloon HelpIBalloon Help Right DownImageWriter II colorLBalloon Help Down Left DeleteMenu DisableMItem EnableMItemFontZResCopy MakeResourceAddMenuAddPopUp% ,@FONTZ FONTZ % ;8.[: E0246.[;i4k۠ڠݠH44w4ȷ4    ٙ # ٞ/   Q$ ?`   )  ?`+ C]y HH )HH "h  )Z z B4ȥ 4`Font resource not foundUnknown calling parameterError loading font resourceRequires two calling parametersLOADLOADFHHH"&"h*,***,*e*,i`4ȷ4 Ȁ `" `4ȷ4 Ȁ `a{8 `HHHH"hhiI Zڷ)$I ȷGIȌIG z zZ)8cizк .C .`,HK\rResName resource NAMETYPE 8`ii8`HH"`" qH1 "hKHHHHKH@ "h<" " `H1 "hKHHHH"hh"HH"HH$"` )Oei HHH "hMHHH "HHHHHH"mOiKH@ "h"$""&( Hڦ"$HHH$H"H"(")HH"$H"H"`D wz *-RUpuy} $\z]O,C ~ExpressLoadO d<b,maind,;maind ZZ;[ )J " Bh h  ȷ HH<<" H<<::" h\\" ႪH<<88" h" ႀ ȷ HHPP"  P ^QH"h4h66@6H4HQH"."*"VHTH"  {zz+zzk""" Bh h &Answer "FORM: DeleteMenu {Menu Name}"oAnswer "DeleteMenu XCMD v1.0" & return & "by Eric Schlosser, 08/02/90" & return & " 1990 Apple Computer, Inc.".Can't understand arguments of XCMD DeleteMenu.Invalid Menu Id!?O<]<c:s\<8PC"R`fv"FO,C ~ExpressLoadO O'g,mainO,;mainO ZZ;[ 1J " Bh h  ȷ HH''" H''!!" hII" ႬH''" hp||" ႂ ȷ HH;;" <#>% ȷ HH;;" ;; " hz)%m#H1"  {zz+zzkL2Answer "FORM: DisableMItem {MenuName},{Item no.}"qAnswer "DisableMItem XCMD v1.0" & return & "by Eric Schlosser, 08/02/90" & return & " 1990 Apple Computer, Inc."0Can't understand arguments of XCMD DisableMItem.!?#W'e'k!{I'|;;; &Zhn~%,GO,C ~ExpressLoadO L$g,mainL,;mainL ZZ;[ 1J " Bh h  ȷ HH$$" H$$" hII" ႬH$$" hp{{" ႂ ȷ HH88" 9 ;" ȷ HH88" 88 " hz)"m H0"  {zz+zzkL1Answer "FORM: EnableMItem {MenuName},{Item no.}"pAnswer "EnableMItem XCMD v1.0" & return & "by Eric Schlosser, 08/02/90" & return & " 1990 Apple Computer, Inc."/Can't understand arguments of XCMD EnableMItem.!?#W$e$k{I${888 &Zhn~%,G,;main ;i[ "  [zzzzzk ;ii7[{iH"򪈈iBHZZee{iH"H" mm{iH{iH"-" hz阠"HZ"H"&h"H""H"U [i\S[;i0k ;ii[{iH"iBHZZ{iH" hz똠"HZ"H"&h"H""H"U [i\S[;ik ;i[ "" [;i k ;i[ iBHZZoo" hz iJ [i\S  [zzzzzk ;ii[{iH"{iH{iH"-"  [i\S[;ik ;i["[;ik ;iiG[{iH"ddZZ{iH" hZZD"׆٧H"\h"ߪ߅ۆݩD۩窧煻ۦ݅d{iH "O>"xw"H"N"ߪ߅ۆݠwۇ۩O|yZZ"H"׆٧H"\h;ߪ߅ۆݥۦiHHH"H"G +H" +H"[;i@k ;iiW[:t盛H{iH" H{iH"qhJ "H{iH"qhJ " ";H盛H{iH" ei盛盛H{iH" ZZHH$" ᢻhhZZei盛H$" ᢿhhei盛盛H{iH" ZZ{iH " hϩei 盛盛H{iH" ZZee "?hhtHHh盛{iH "ZZgg "?hh{iH{iHHH" "{iH{iHii{iH"-"ZZ{iH "?hh{iH{iHHH" "ZZ{iH "?hh{iH{iHHH" "HH "Z"hZ"&hZ{iH{iH" Z{iH{iH" hJoo "-tZ{iH" hJZ"&hCZHHh盛H"hH "!("" "!Z{iH{iH{iH&" hZZ{iH " hZ"h7 " "-   "!5J"ZZ"qhhZZ"q"j  "%% "!  "j  "MM "!ZZ" hh "ss "-Jm  "j  " "!HH"j  " "!"{iH{iHѢ(" "Z"h ""UH "!Z{iH" hJ tZHHh盛H"hLڢcJuHHh盛H""U "!ZHHh盛H"h"U "!"- ""U>> "!Z"hZ"&hZ{iH{iH{iH&" h:!""U]] "-HH"&ZZ"jhӢHH"#" "!{iH'" "#" "!"c"""H "!"Z"&h"U[;iP kError # +Can't understand arguments of XCMD ResCopy.answer ""!fResCopy XCMD v1.0" & return & "by Darin Acquistapace, 4/13/90" & return & " 1990 Apple Computer, Inc.?SFORM: ResCopy SourceFile, DestFile, ResType," & return & " ResID|ResName76:Home4 ]  08Yw\߂=Kcq217El~I73 "# =g I&*[ $Wg{@Rfx)9k$5:E  (8".>MQWcs (NYfjrv.28@Pw~*0>SZg !%+:@GPn*| aKRY`gnu|]  ,@MAKERESOURMAKERESOUR ;8[: b[;ik۠14-APR-91 10:59:51 PMz|~H/ȷ  Ȁ ȷ  mȀ k ȷHHHHHHH"hڧ)$: $" ("hx" i~^fv" \`blnHHbH`HH "h&hj" d" t~^k "Hk "hzHHxH"hXhZHHxHZHXH "zH " 5HxHZHXH"0:/񈌀0HHzHxH"z     H) ̀OZȷ݁B̀z hxHHZHX"zHxH"z )iHchh:ЎHH)iwȷiH "h Hڦ Hڠ HH*" zHxH" iȷi)iH8hXZȗ ̀ HHzHxH "zH "zH "zLHH)i H "h :ȗȂ]zzH "z~ " t~`rS >3"HH)HH "h)Z z BȥL_NewHandle error Disk errorInput file not foundUnable to create resource fork&MAKERESOURCE requires three parametersN x``Z cfi>PSVY\ilorw{ &*.>IMQUbevy~ I%0;>C 9>tkktdd\FO,C ~ExpressLoadO 3 ,mainX3,;main3 ;8[1J" BhhzȷHH" H" h" -H" hp77" " hhȷ  )HH" ȷ ȷ   Ȁi  ȷ ȷ   ȀmiH "hHHHH ")J" BhhhhȷȷHH33" 33    ȷL H H33" 33  m  ȷ    i Lt u=q- ZzZȭȀȭȭȭȭȭȻz ` "႘ .  "hi h  i(ȀȷȀ숈ȷ i  HH-"hh HHH ""hH"*"" hBh" hhHH" HH" {i\DH\H >>--7Answer "FORM: Addmenu ({Menu Title},{Menu Item List})"oanswer "AddMenu XFCN v1.0.1 " & return & "by Eric Schlosser, 08/06/90" & return & " 1990 Apple Computer, Inc."+Can't understand arguments of XFCN AddMenu.#Not enough memory to add that menu.VonSchlobnicsMenuIDCounter?!&Zhn~773D333pda )]kq$'=]kv{~:INX^euz (-3;AGMSYcgjs  (,0Lg|O,C ~ExpressLoadO ,mainW,;main ;8[9J" Bhh:ȷHH" H" h" H" hpKK" ȷHH"  " h h HH"  ȷL= H H"   m  ȷ    i L6 }=y- ȷȘ͝譴譵護譸譹譺 `` .ȷHH"  " h hɀ ȷHH"  " hhɺBȷHH"  " hh"hi h  i(ȀȷȀ숈ȷ i  -"hh HHH "HHH" ""Hi HHiH@HHH<"h8 HH" zz" Bhh H"᭣HH."HHH"{i\DH\H --Answer "FORM: AddPopUp ({Menu Item List}," & return & " {TopX 0-320},{TopY 0-185}, {Selected Item}," & return & " [BdrColor:0..15])"ranswer "AddPopUp XFCN v1.0 " & return & "by Eric Schlosser, 07/26/90" & return & " 1990 Apple Computer, Inc.",Can't understand arguments of XFCN AddPopUp.?!> Popup \H 2ftzKKX_r%Be 5iw} 73e*TE>}b̦fH)"N<2C0$=hшBR` RB#0@T$ bDF9I(HD$303L&(""E33)̦fHFt"$Hi"-h$["BeRRB#0@9 $`:C|:7ȼG|3,nx)z"Dgwx33 Y GD$1 QJ$NnD_{"<9@ @ "$`Q p  @`0#0 0  #(-.127<>CHMRW\afginsx| #'+/37;<?DELPTX\`dgkpw| "&*/39>FNVY\aipw|$(,.05:?DKPRTX\aceiw~       Dans le dossier les.plus ---------------------- Dossier BalloonMaker : Balloon Maker GS de Bellina Bredon est une pile HyperCard IIGS permettant dinclure dans ses piles des bulles daide semblables celles disponibles dans le systme 7 de MacOsGS Infos 52 Bis --------------------- Dossier Virdat Virtual Data d'Andrew Roughan. Shareware $10. Finder extension. Garde l'endroit o on s'est arrt lors de la visite d'un volume. Utile quand on explore un CD-ROM. Systme 6.01. Dossier Worksets Workssets de Chris Vavruska. Shareware $10. Finder extension. Permet de rcuprer des fichiers de travail placs dans des dossiers diffrents. Systme 6.01. Dossier OpenIt OpenIt 1.2. Finder Extension. Permet de passer un chemin d'accs vers un fichier qui selon son type pourra recevoir des traitements diffrents. Dossier Gupp Gupp de Nathan Mates. Version 1.04. Freeware. Perm Init. Grand Unified Patcher Program. Systme TuneUp pour le 6.01. Cette version ajoute un patche AppleTalk. Dossier FinderRefresher FinderRefresher de Chris Vavruska. Version 1.01. Shareware $5. Finder extension. Rafrachi l'image du bureau. Utile lors de l'utilisation de Switch-It ou de The Manager. Systme 6.01. Dossier DrillDown DrillDown d'Andrew Roughan. Version 1.0. Freeware. Finder extension. Ajoute des fonctionnalits la navigation du Finder. Ouverture des fentres de plusieurs dossiers, lancement d'application, etc... Systme 6.01. Dossier FinderFlipper FinderFlipper de Chris Vavruska. Version 1.01. Freeware. Finder Extension. Ajoute un menu Window qui permet de retrouver et d'afficher au premier plan la fentre de son choix. Systme 6.01. Dossier CalcCDA CalcCDA. de Terry Morris. Version 1.01. CDA. Version mise jour de cette calculette en accessoire de bureau classique. Dossier CD.Remember CD.Remember de Chris Vavruska. Version 1.01. Shareware $15. Finder extension.Garde l'endroit o on s'est arrt lors de la visite d'un CD-ROM mme aprs un crash. Systme 6.01. Dossier BackGammon BackGammon par Bill Tudor. Version 1.00. Shareware $10. NDA. Version accessoire de bureau d'un des jeux les plus programms sur micro. Dj diffus mais complte la collection de Bill Tudor prsente dans ce numro. Dossier Tudor Les utilitaires de Bill Tudor rassembls dans un dossier : Blanker, BRAM.Checker, DskTpDoctor, EMIcons, FileFind, IconAppChecker, InitMaster, Keybd.Ext, Min, SFIcons, ShowClip, SysLogger et Xmgr. Dj diffuss en ordre dispers. Dossier SpeedReadDir SpeedRead Plus par Terry Morris. Version 2.20. Shareware 40 FF. Lecteur de fichiers TXT, SRC, AWP, Teach et AppleWorks GS. Dernire mise jour. Deux versions NDA ou S16. Le NDA ncessite le systme 6.01. Extra.Install Extra.Install est une pile HyperCardIIGS de Brenda Bellina qui permet de crer un menu Extras utilisable par les piles HyperCardIIGS. HypercardIIGS 1.1 et Systme 6.01. No.Worries No.Worries est une pile HyperCardIIGS de Brenda Bellina. Freeware. Pile HyperCard conue pour l'ducation; elle sert de lanceur d'applications, scurise par mot de passe elle permet d'viter une exploration sauvage ou destructrice du disque dur. . HypercardIIGS 1.1 et Systme 6.01. Domaine public Apple IIGS ------------------------------------ GSCLUB.482 : AnimSchool 3.0 Pile HyperStudio par Bill Lynn. Tutorial pour HyperStudio 3.0. Ncessite HyperStudio 3.1 GSCLUB.483 : Piles HyperStudio. -STB3, 4 et 5 : Stupid Button Tricks par Bill Lynn. Piles HyperStudio. Animation dans HyperStudio. - ClipArt01 HyperStudio : Pile ClipArt HyperStudio par Joel Helton. 13 cartes de dessins reprsentant des motifs floraux. Ncessite HyperStudio 3.1 GSCLUB.484 : divers - Animation dans HyperStudio par Paul T.Klenk. Pile tutorial. Comment raliser une animation partir d'HyperStudio par la pratique. Ncessite HyperStudio 3.1 - ClipArt : Pile ClipArt HyperStudio par Marty Knight. 20 cartes de dessins sur des thmes varis. Ncessite HyperStudio 3.1 - ClipArt02 HyperStudio : Pile ClipArt HyperStudio par Joel Helton. 21 cartes de dessins reprsentant des enfants. Ncessite HyperStudio 3.1 - SL Demo : Shifty List 2.0 par Eric Shepherd. Shareware $20. Version demo. Gestionnaire d'extensions pour l'Apple IIGS. - CoolWriter : CoolWriter 3.1 de Rolf Braun. Traitement de texte. - T.Day : Thought of the Day par Pegasoft. Shareware. La pense du jour s'affiche au dmarrage de votre GS. GSCLUB.485 : Piles HyperCardIIGS - DinoStack : tout propos des dinosaures par AAH Computer Graphic Production. - ClipArtServices : pour rcuprer les dessins dans les piles HyperCard - ConvertWP : des informations pour transfrer les fichiers d'un micro l'autre. - ConvertTransfer : pile fille de Convert WP - Gsify : prpare les fichiers textes de taille infrieure 30 Ko pour l'impression - ListSorter : trie les lignes d'un fichier texte en ordre alphabtique. - LoResStack : les graphiques basse-rsolution la porte d'HyperCard. - ShowFont : pile pour voir les polices de caractres. Domaine public Macintosh ------------------------------------ MAC0040 Duke Nukem Demo version Mac 68000 MAC0041 MAC0042 MAC0043 MAC0044 La dmo version 1.01 de Duke Nukem. L'vnement jeu de cet t sur Mac. Archive auto-dcompactable 13 Mo dcompact. MAC0045 Duke Nukem Demo version Power Mac MAC0046 MAC0047 MAC0048 MAC0049 La dmo version 1.01 de Duke Nukem. L'vnement jeu de cet t sur Mac. Archive auto-dcompactable 13 Mo dcompact. MAC0050 : Divers Archive autodcompactable contenant : - TattleTech version 2.54 pour tout savoir sur le contenu de son Macintosh - TechTool 1.14 dmo : l'outil d'auscultation du Macintosh - ID disinfect 3.0 : un antivirus pour pile Hypercard - Virtual Drummer III : batterie lectronique. 2.8 Mo sur disque dur. MAC0051 : HyperSlider 1.8.5 Archive compacte du programme HyperSliderdans sa version 1.85. Programme dont parle Jacques Rey dans GS Infos 51. 2.8 Mo sur disque dur. 'gfD0 *BMAC.52ANNONCES GALACTICA.525BEDITO5 FOCUS.INFO5 JUICEDGS.INFOUBHYPERQUART.INFO UAIDEULES.PLUSuB GSINF.52BISuDOMAINE.PUBLICB FINDER.DATA?_8&&.341--7Kd~}{zywxY0,\ϔN -@Uu˭nU>,'/C`ФoA$ )03105CZvtJ%1eƒ@ ,9FXxxkW?(/OwɛiA-*18:8427G`}j@ -aːK )6JjȥwiT=)#5T}Ԭ{P4*,39;:9?NenF! GLKIKVlZ/ Kݮj. )2A[ͧsj_O9"3ZЫ}S6*,4=BCBCMa|¼]5 ;xĈE '-08Mpܻzk`SB.&JwǜlD+$)3