home *** CD-ROM | disk | FTP | other *** search
/ db.tidbits.com / db.tidbits.com.tar / db.tidbits.com / getbits.acgi?tbart=04075.orig < prev    next >
Text File  |  2010-09-23  |  51KB  |  824 lines

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2.         "http://www.w3.org/TR/html4/loose.dtd">
  3.  
  4. <html lang="en">
  5. <head>
  6.     <meta http-equiv="content-type" content="text/html;charset=utf-8">
  7.     <meta http-equiv="Content-Language" content="en">
  8.     <title>TidBITS : HyperCard 2.2: The Great Becomes Greater</title>
  9.  
  10.     <meta name="title" content="TidBITS : HyperCard 2.2: The Great Becomes Greater">
  11.     <meta name="description" content="TidBITS is a free email and Web publication covering the Macintosh Internet community.">
  12.     <link rel="image_src" href="/images/tblogo9.gif" />
  13.     <meta name="keywords" content="Apple, Mac, Macintosh, Mac OS, Mac OS X, newsletter, Internet, analysis, reviews, technology, news, TidBITS, TidBITS Talk, Engst">
  14.     <link rel="Help" href="http://www.tidbits.com/about/about-tidbits.html" title="About TidBITS">
  15.     <link rel="Search" href="http://www.tidbits.com/search/" title="Search All TidBITS Content">
  16.     <link rel="Author" href="http://www.tidbits.com/about/contact-info.html" title="Contact Information">
  17.     <link rel="Contents" href="tb-issues/" title="TidBITS Issue Archive">
  18.     <link rel="alternate" type="application/rss+xml" href="http://db.tidbits.com/feeds/tidbits.rss" title="TidBITS Full Text Feed">
  19.     <link rel="alternate" type="application/rss+xml" href="http://db.tidbits.com/commentfeeds/firehose.xml" title="TidBITS Full Comments Feed">
  20.  
  21.     <link rel="stylesheet" href="/tidbits_2010_001.css" type="text/css">
  22.     <LINK rel="stylesheet" type="text/css" media="print" href="/tb-new-print.css">
  23.     <script src="/javascript/tb.js" type="text/javascript"></script>
  24.     <meta name="viewport" content="width:940">
  25.     <script type='text/javascript' src='http://db.tidbits.com/ads/delivery/spcjs.php?id=2'></script>
  26.     <script src="/javascript/prototype.js" type="text/javascript"></script>
  27. <script src="/javascript/scriptaculous.js" type="text/javascript"></script>
  28. <script src="/js-global/FancyZoom.js" type="text/javascript"></script>
  29. <script src="/js-global/FancyZoomHTML.js" type="text/javascript"></script>
  30. <script type="text/javascript"  src="http://api.recaptcha.net/js/recaptcha_ajax.js"></script>
  31.  
  32. </head>
  33. <body onLoad="setupZoom()">
  34. <!-- popup query -->
  35. <div id="big_ole_background" style="display:none"> </div>
  36. <div id="tipbits_enclosure_preview" style="display:none">
  37. <div class="tearoffbox_wide_container">
  38. <div class="tearoffbox_wide_tips">
  39.  
  40. <div class="tip_display">
  41. <div class="preview">
  42. <h6><span id="p_tips_title"></span></h6>
  43. <p id="p_tips_text"></p>
  44. <p>Visit <a href="javascript:void(0)" id="p_url"><span id="p_label"></span></a></p>
  45. <p class="credit">Submitted by <span id="p_reader"></span></p>
  46. <p><input type="submit" value="Back" name="preview_tip" onClick="preview_box('ts','tipbits_enclosure_preview'); return false;"></p>
  47. </div>
  48. </div>
  49. <div class="tearoffbox_wide_bottom_tips">
  50. </div>
  51.  
  52. </div><!-- end tearoffbox_wide_tips -->
  53. </div><!-- end tearoffbox_wide_container for tips-->
  54. <!-- end tearoff box wide -->
  55. </div><!-- end enclosure -->
  56.  
  57. <div class="popup_box_with_captcha" id="ts" style="display:none">
  58.     <div id="popup_box_thanks" style="display:none" onClick="close_popup_thanks('popup_box_thanks', 'ts')"><br>Thanks for submitting your tip! All submissions are moderated by an editor before appearing online. We've reset the form so you can enter another tip. Or you can close the tip submission box.    <div class="x_close" id="thanks_upper_right"><a href="javascript:void(0)" onmousedown="close_popup_thanks('popup_box_thanks', 'ts'); return true;">Close</a></div></div>
  59.     <div class="tip_box_format">
  60.     <div id="ts_innards" onClick="close_popup_thanks('popup_box_thanks', 'ts')">
  61.         <div class="tip_box_head">TipBITS Submission</div>
  62.         <div class="tip_box_form">        
  63.                 
  64.             <div class="tbf_row" id="ts_message_box" style="display:none">
  65.                 <div class="tbf_wide"><div class="tbf_alert" id="ts_top_message"></div></div>
  66.             </div>
  67.             <div class="spacer"></div>
  68.  
  69.             <form action="foobar.cgi" method="get" name="submit_tip">
  70.  
  71.             <div class="tbf_row"><div class="tbf_wide_extra_top not_bold">Please submit only technical tips that will help other TidBITS readers better use their Macs, iPhones, and related software and hardware. All product announcements should be sent to <a href="mailto:releases@tidbits.com">releases@tidbits.com</a>.</div></div>
  72.             <div class="spacer"></div>
  73.             <div class="tbf_row">
  74.                 <div class="tbf_left">Tip title<span class="required_field">*</span></div><div class="tbf_right"><input type="text" value="" id="tip_title_id" name="tip_title" tabindex="1"></div>
  75.             </div>
  76.             <div class="spacer"></div>
  77.             <div class="tbf_row">
  78.                 <div class="tbf_left">Your tip<span class="required_field">*</span></div><div class="tbf_right"><textarea name="tip_text" rows="3" cols="40" tabindex="2"></textarea></div>
  79.             </div>
  80.             <div class="spacer"></div>
  81.             <div class="tbf_row">
  82.                 <div class="tbf_left">URL</div><div class="tbf_right"><input type="text" value="" name="tip_link_url" tabindex="3"><span class="tip_description"><br>Enter the URL to a Web page that supports your tip.</span></div>
  83.             </div>
  84.             <div class="spacer"></div>
  85.             <div class="tbf_row">
  86.                 <div class="tbf_left">Linked text</div><div class="tbf_right"><input type="text" value="" name="tip_link_label" tabindex="4"><span class="tip_description"><br>Enter the name of the page linked above.</span></div>
  87.             </div>
  88.             <div class="spacer"></div>
  89.             <div class="tbf_row">
  90.                 <div class="tbf_left">Your name<span class="required_field">*</span></div><div class="tbf_right"><input type="text" value="" name="tip_reader_name" tabindex="5"></div>
  91.             </div>
  92.             <div class="spacer"></div>
  93.             <div class="tbf_row">
  94.                 <div class="tbf_left">Your email<span class="required_field">*</span></div><div class="tbf_right"><input type="text" value="" name="tip_reader_email" tabindex="6"></div>
  95.             </div>
  96.             <div class="spacer"></div>
  97.             <div class="spacer"></div>
  98.                 <div class="tbf_wide"><span class="fine_print"><span class="required_field">* indicates required fields</span></span></div>
  99.             <div class="spacer"></div>
  100.             <div class="tbf_row">
  101.                 <div class="tbf_wide_extra_top"><span class="fine_print">To help us avoid automated posts and spam, please enter the words below.</span></div>
  102.             </div>
  103.             <div class="spacer"></div>
  104.             <div class="tbf_row">
  105.                 <div class="tbf_wide"><div id="ts_recaptcha"></div></div>
  106.             </div>
  107.             <div class="spacer"></div>
  108.             <div class="tbf_row">
  109.                 <div class="tbf_wide"><input type="submit" value="Preview Your Tip" name="preview_tip" onClick="fill_preview('tipbits_enclosure_preview', 'ts', this.form); return false;" tabindex="7"> <input type="submit" value="Send Us Your Tip!" name="submit_this_tip" onClick="handle_tip_submission('ts', '', this.form, 'tip'); return false;" tabindex="8"></div>
  110.             </div>
  111.             <div class="spacer"></div>
  112.             <div class="tbf_row">
  113.                 <div class="tbf_wide"><span class="fine_print">When you submit a tip, you give us permission to use it. Read <a href="javascript:void(0)" onClick="generic_show_hide('tip_terms')">our terms</a> for more details. All submissions are reviewed before publication.</span></div>
  114.             </div>
  115.             
  116.             <div class="tbf_row" id="tip_terms" style="display: none">
  117.                 <div class="tbf_wide"><span class="fine_print">Our terms: By submitting a tip, you agree to assign TidBITS Publishing Inc., a non-exclusive, worldwide, perpetual license to reproduce, publish, and distribute your tip in connection with the TidBITS Web site and associated products in any media. You agree that you created the content you submitted, and that you have the right to assign us this license. You give us permission to use your name, but your email address won't be publicly displayed or shared. We review all submissions before publication, and reserve the right to select which submissions we feel are appropriate for our readers and to edit those we publish.</span></div>
  118.             </div>
  119.             <div class="spacer"></div>
  120.             </form>
  121.         </div><!-- end tip_box_form -->
  122.     </div><!-- end tip box innards -->
  123.     </div><!-- end tip box format -->
  124.     
  125.     <div class="x_close" id="ts_upper_right"><a href="javascript:void(0)" onmousedown="HidePopupContent('ts', 'ts', ''); return true;">Close</a></div>
  126.     
  127. </div><!-- end tip_submit box-->
  128.  
  129. <div class="popup_box_with_captcha" id="article_reference" style="display:none"><div class="article_ref_format"><textarea style="width:350px; height:100px;" name="article_ref" id="article_ref_box"></textarea></div>    <div class="x_close" id="article_reference_upper_right"><a href="javascript:void(0)" onmousedown="HidePopupContent('article_reference', 'article_reference', ''); return true;">Close</a></div>
  130. </div>
  131.  
  132. <div class="popup_box_with_captcha" id="comm" style="display:none">
  133.     <div class="tip_box_format">
  134.     <div id="comment_thanks" style="display:none" onClick="close_popup_thanks('comment_thanks', 'comm')"><br>Thanks for submitting a comment! Please check your email for a link that, when clicked, will verify that you're a real person and cause your comment to appear immediately. <div class="x_close" id="comment_upper_right"><a href="javascript:void(0)" onmousedown="close_popup_thanks('comment_thanks', 'comm'); return true;">Close</a></div></div>
  135.     <div id="comm_innards" onClick="close_popup_thanks('comment_thanks', 'comm')">
  136.         <div class="tip_box_head" id="comm_headline">Post a Comment</div>
  137.         <div class="tip_box_form">        
  138.                 
  139.             <div class="tbf_row" id="comm_message_box" style="display:none">
  140.                 <div class="tbf_wide"><div class="tbf_alert" id="comm_top_message"></div></div>
  141.             </div>
  142.             <div class="spacer"></div>
  143.  
  144.             <form action="foobar.cgi" method="get" name="post_comment" id="post_comment">
  145.             <input type="hidden" name="comment_nest" value=''>
  146.             <input type="hidden" name="comment_id" value=''>
  147.             <input type="hidden" name="article_id" value='1492'>
  148.             <input type="hidden" name="edit" value=''>
  149.             <div class="tbf_row">
  150.                 <div class="tbf_left">In reply to</div>
  151.                 <div class="tbf_right">
  152.                     <div id="cb_quoted_row">
  153.                         <div class='cb_open_quote'>“</div>
  154.                         <div id="cb_quoted"></div>
  155.                         <div class='cb_close_quote'>”</div>
  156.                     </div>
  157.                     <div class="spacer"></div>
  158.                 </div>
  159.             </div>
  160.             <div class="spacer"></div>
  161.  
  162.             <div class="tbf_row">
  163.                 <div class="tbf_left" style="padding-top:0">Your comment</div>
  164.                 <div class="tbf_right"><textarea tabindex="1" name="cb_item_add" id="cb_item_add" rows="4" cols="50" onKeyDown="count_insert('cb_item_add','cb_char_count')"></textarea><br><div class="cb_char_count" id="cb_add_count">Remaining characters: <span id="cb_char_count">0</span></div></div>
  165.             </div>
  166.             <div class="spacer"></div>            
  167.  
  168.             <div class="tbf_row">
  169.                 <div class="tbf_left">Your name</div><div class="tbf_right" style="margin-top:8px"><input tabindex="2" type="text" value="" name="cb_add_name" id="cb_add_name" style="margin-top: -4px"></div>
  170.             </div>
  171.             <div class="spacer"></div>
  172.             
  173.             <div class="tbf_row">
  174.                 <div class="tbf_left">Your email</div><div class="tbf_right"><input tabindex="3" type="text" name="cb_add_email" id="cb_add_email"></div>
  175.             </div>
  176.             <div class="spacer"></div>
  177.             
  178.             <div class="tbf_row">
  179.                 <div class="tbf_left"> </div><div class="tbf_right"><input id="comm_post_comment" tabindex="4" type="submit" value="Post Comment" name="submit_this_comment" style="width:100px; float:right" onClick="cb_post_submit(); return false;"></div>
  180.             </div>
  181.             <div class="spacer"></div>
  182.             
  183.             <div class="tbf_row" id="comment_terms">
  184.                 <div class="tbf_wide"><span class="fine_print">Our terms: We reserve the right to edit or delete any comment, so please post thoughtfully. We use your email address <i>only</i> to send you a one-time verification message confirming that you posted this comment. We also store your address to allow you to verify using other Web browsers in the future. For more info, see our <a href="http://db.tidbits.com/privacy.html">privacy policy</a>.</span></div>
  185.             </div>
  186.             <div class="spacer"></div>
  187.  
  188.             </form>
  189.         </div><!-- end comm_form -->
  190.     </div><!-- end comm box innards -->
  191.     </div><!-- end comm box format -->
  192.     
  193.     <div class="x_close" id="comm_upper_right"><a href="javascript:void(0)" onmousedown="HidePopupContent('comm', 'comm', ''); return true;">Close</a></div>
  194.     
  195. </div><!-- end comm_submit box-->
  196.  
  197.  
  198. <!-- start mainbody -->
  199. <div id="mainbody">
  200.  
  201. <!-- start header -->
  202. <div id="header">
  203.  
  204.  
  205.  
  206.     <div id="tblogo">
  207.     <a href="/"><img src="/images/tblogo20_01.gif" alt="TidBITS: Apple News for the Rest of Us" width="177" height="84" border="0"></a>
  208.  
  209.     </div><!-- end tblogo -->
  210.  
  211.  
  212. <!-- leaderboard ad -->
  213. <div id="top_banner">
  214. <script type='text/javascript'><!--// <![CDATA[
  215.     OA_show(3);
  216. // ]]> --></script><noscript><a target='_blank' href='http://db.tidbits.com/ads/delivery/ck.php?n=TBe5f7021'><img border='0' alt='' src='http://db.tidbits.com/ads/delivery/avw.php?zoneid=3&n=TBe5f7021'></a></noscript>
  217. </div><!-- end top_banner style -->
  218. <!-- end leaderboard ad -->
  219.  
  220.  
  221. </div><!-- end header  -->
  222.  
  223.  
  224. <!-- start content_container -->
  225. <div id="content_container">
  226.  
  227.  
  228. <!-- begin leftcolumn -->
  229. <div id="leftcolumn">
  230.  
  231. <!-- begin leftnav /left navigation -->
  232. <div>
  233.     <ul class="leftnav">
  234.         <!-- start search -->
  235.         <li class="topcorner">
  236.             <form action="http://db.tidbits.com" method="POST" name="search_form"><input type="hidden" name="advanced_search" value=''><input type="text" name="search_text" size="8" maxlength="70" value="Search" onFocus="this.value=''" onBlur="if (this.value == '') { this.value = 'Search'; }"> <span style="margin: 0 5px 0 5px; vertical-align: -2px"><span style="vertical-align: -2px"><input type="image" name="submit_search" src="/images/go_search_button.gif"></span>  <img src="/images/adv_search_button.gif" title="Click for Advanced Search" onClick="var f = document.search_form; f.search_text.value =''; f.advanced_search.value = '1'; f.submit();"></span></form>
  237.         </li>
  238.     </ul>
  239. </div>
  240. <!-- end search -->
  241.  
  242. <!-- Get TidBITS box (temp) -->
  243. <div>
  244.     <ul class="leftnav">
  245.         <li class="gettb"><strong>Get TidBITS via...</strong></li>
  246.     
  247.         <li><a href="http://www.tidbits.com/list" title="Subscribe via email" class="gettb">Email <img src="/images/gettb_button_email.gif" width="12" height="12" border="0" class="nav_img" alt="Email subscription options"></a></li>
  248.         <li><a href="/feeds/tidbits.rss" title="Subscribe via RSS" class="gettb">RSS <img src="/images/feed-icon-12x12.gif" width="12" height="12" border="0" class="nav_img" alt="Subscribe via RSS"></a></li>
  249.         <li><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=276986548" title="Subscribe to the podcast" class="gettb">Podcast <img src="/images/feed-icon-12x12_podcast.gif" width="12" height="12" border="0" class="nav_img" alt="Subscribe to the postcast"></a></li>
  250.         <li><a href="http://www.twitter.com/TidBITS" title="Get Article Updates via Twitter" class="gettb">Twitter <img src="/images/feed_icon_12x12_twitter.png" width="12" height="12" border="0" class="nav_img" alt="Get Article Updates via Twitter"></a></li>
  251.         <li><a href="http://www.facebook.com/pages/TidBITS/195314925519" title="Go to the TidBITS Page at Facebook" class="gettb">Facebook <img src="/images/feed_icon_12x12_facebook.gif" width="12" height="12" border="0" class="nav_img" alt="Go to the TidBITS Page at Facebook"></a></li>
  252.     </ul>
  253. </div>
  254. <!-- end Get TidBITS box -->
  255.     
  256.     <ul class="leftnav">
  257.         <li><a href="/" class="tabhead">TidBITS Home</a></li>
  258.  
  259.         <li><a href="javascript:void(0)" title="Sections" class="tabhead" onClick="return showhide('articleslist')">Sections <span id="articleslist_triangle"><img src="/images/nav_triangle_open.gif" width="9" height="9" border="0" class="navtriangle" id="articleslist_tri_image" alt="Click to show or hide the contents of this section."></span></a></li>
  260.     
  261.     
  262.     </ul>
  263.  
  264. <div id="articleslist" style="display: none"><ul class="leftnav"><li><a href="/section/business" >Business Apps</a></li>
  265. <li><a href="/section/entertainment" >Entertainment</a></li>
  266. <li><a href="/section/links" >External Links</a></li>
  267. <li><a href="/section/home" >Home Macs</a></li>
  268. <li><a href="/section/inside" >Inside TidBITS</a></li>
  269. <li><a href="/section/iphone-ipad-ipod" >iPhone iPad iPod</a></li>
  270. <li><a href="/section/fun" >Just for Fun</a></li>
  271. <li><a href="/section/macs" >Macs & Mac OS X</a></li>
  272. <li><a href="/section/creative" >Media Creation</a></li>
  273. <li><a href="/section/net" >Networking</a></li>
  274. <li><a href="/section/opinion" >Opinion</a></li>
  275. <li><a href="/section/support" >Problem Solving</a></li>
  276. <li><a href="/section/security" >Safe Computing</a></li>
  277. <li><a href="/section/tech" >Tech News</a></li>
  278. <li><a href="/section/watchlist" >Watchlist</a></li>
  279. </ul></div>
  280.  
  281. <div>
  282. <ul class="leftnav">
  283.     <li><a href="javascript:void(0)" onClick="return showhide('stafflist')" title="Staff" class="tabhead">Staff <span id="stafflist_triangle"><img src="/images/nav_triangle_closed.gif" width="9" height="9" border="0" class="navtriangle" id="stafflist_tri_image" alt="Click to show or hide the contents of this section."></span></a></li>
  284. </ul>
  285. </div>
  286.  
  287. <div id="stafflist" style="display:block"><ul class="leftnav"><li><a href="/author/Adam+C+Engst" title="Adam Engst, Publisher">Adam Engst</a></li>
  288.     <li><a href="/author/Tonya+Engst" title="Tonya Engst, Editor in Chief">Tonya Engst</a></li>
  289.     <li><a href="/author/Jeff+Carlson" title="Jeff Carlson, Managing Editor">Jeff Carlson</a></li>
  290.     <li><a href="/author/Joe+Kissell" title="Joe Kissell, Senior Editor">Joe Kissell</a></li>
  291.     <li><a href="/author/Glenn+Fleishman" title="Glenn Fleishman, Contributing Editor">Glenn Fleishman</a></li>
  292.     <li><a href="/author/Mark+Anbinder" title="Mark Anbinder, Contributing Editor">Mark H. Anbinder</a></li>
  293.     <li><a href="/author/Matt+Neuburg" title="Matt Neuburg, Contributing Editor">Matt Neuburg</a></li>
  294.     <li><a href="/author/Rich+Mogull" title="Rich Mogull, Contributing Editor">Rich Mogull</a></li>
  295.     <li><a href="/author/Lex+Friedman" title="Lex Friedman, Staff Writer">Lex Friedman</a></li>
  296.     </ul>
  297.     </div>
  298.  
  299. <div>
  300. <ul class="leftnav">
  301.  
  302.     <li><a href="javascript:void(0)" title="Issues" class="tabhead" onClick="return showhide('issuelist')">Weekly Issues <span id="issuelist_triangle"><img src="/images/nav_triangle_closed.gif" width="9" height="9" border="0" class="navtriangle" id="issuelist_tri_image" alt="Click to show or hide the contents of this section."></span></a></li>
  303. </ul>
  304. </div>
  305.  
  306. <div id="issuelist" style="display:none"><ul class="leftnav"><li><div class="special"><form method="post" action="noaction.cgi" onsubmit="return false" id="issue_search_form" name="issue_search_form">Issue # <input type="text" onkeydown="if (event.keyCode == 13) { redirect_issue(this.form); }" id="issue_searchvalue" name="issue_number" style="width:35px; height: 10px"> <input onclick="redirect_issue(this.form)" type="image" name="submit_search" src="/images/go_search_button_blk.gif"></form></div></li><li><A HREF="/issue/217" >#217, 14 Mar 94</A></li>
  307. <li><A HREF="/issue/216" >#216, 07 Mar 94</A></li>
  308. <li><A HREF="/issue/215" >#215, 28 Feb 94</A></li>
  309. <li><A HREF="/issue/214" >#214, 21 Feb 94</A></li>
  310. <li><A HREF="/issue/213" >#213, 14 Feb 94</A></li>
  311. <li><A HREF="/issue/212" >#212, 07 Feb 94</A></li>
  312. <li><A HREF="/issue/211" >#211, 31 Jan 94</A></li>
  313. <li><A HREF="/issue/210" >#210, 24 Jan 94</A></li>
  314. <li><A HREF="/issue/209" >#209, 17 Jan 94</A></li>
  315.  
  316.  
  317. <li><a href="/backissues">Back Issues</a></li></ul></div>
  318.  
  319.  
  320. <div>
  321. <ul class="leftnav">
  322.  
  323.     <li><a href="/tidbitstalk" title="TidBITS Talk" class="tabhead">TidBITS Talk</a></li>
  324. </ul>
  325. </div>
  326.  
  327.  
  328.  
  329. <div>    
  330. <ul class="leftnav">
  331.     <li><a href="javascript:void(0)" onClick="return showhide('abouttidbits')" title="About TidBITS" class="tabhead">About TidBITS <span id="abouttidbits_triangle"><img src="/images/nav_triangle_closed.gif" width="9" height="9" border="0" class="navtriangle" id="abouttidbits_tri_image" alt="Click to show or hide the contents of this section."></span></a></li>
  332. </ul>
  333. </div>
  334.  
  335. <div id="abouttidbits" style="display:none">
  336. <ul class="leftnav"><li><a href="/about.html" title="About TidBITS">About Us</a></li><li><a href="/account.html" title="Account Help">Account Help</a></li><li><a href="/advertising.html" title="Advertise with TidBITS!">Advertise</a></li><li><a href="/contact.html" title="Contact Info">Contact</a></li><li><a href="/copyright.html" title="Copyright Terms">Copyright</a></li>
  337. </ul>
  338. </div>
  339.  
  340. <div>
  341. <ul class="leftnav">
  342. <li class="bottom"> </li>
  343. </ul>
  344. </div>
  345. <!-- end leftnav/left navigation -->
  346.  
  347. <!-- making sure nav elements hide/show before page loads --><script type="text/javascript"><!--
  348.     showhide('articleslist','show'); 
  349. // --></script>
  350.  
  351. <!-- begin sponsor_sidebox -->
  352.  
  353. <div class="sponsor_sidebox">
  354.  
  355. <ul>
  356.  
  357. <li><a href="http://nuance.com/dragon/mac">Nuance</a></li>
  358.  
  359. <li><a href="http://www.smilesoftware.com/">Smile</a></li>
  360.  
  361. <li><a href="http://markspace.com/bits?source=tidbits">Mark/Space</a></li>
  362.  
  363. <li><a href="http://www.thedatarescuecenter.com/">The Data Rescue Center</a></li>
  364.  
  365. <li><a href="http://macte.ch/conf_tidbits">MacTech Conference</a></li>
  366.  
  367. <li><a href="http://crashplan.com/ref/tidbits.html">CrashPlan</a></li>
  368.  
  369. <li><a href="http://www.smithmicro.com/tidbits">Smith Micro</a></li>
  370.  
  371. <li><a href="http://www.tidbits.com/about/support/contributors.html">Readers Like You!</a></li>
  372.  
  373. <li><a href="http://www.econtechnologies.com/tb">Econ Technologies</a></li>
  374.  
  375. <li><a href="http://www.usefulfruit.com/tb">Useful Fruit</a></li>
  376.  
  377. <li><a href="http://www.webcrossing.com/">Web Crossing</a></li>
  378.  
  379. </ul><div class='sponsor_sidebox_bottom'> </div>
  380. </div>
  381.  
  382.  
  383. <!-- end sponsor_sidebox -->
  384.  
  385.  
  386. </div> <!-- end leftcolumn div -->
  387.  
  388. <!-- end left column -->
  389.  
  390.  
  391. <!-- begin centercolumn_border -->
  392.  
  393. <div id="centercolumn_border">
  394.  
  395. <div class="center_top">Thoughtful, detailed coverage of the Mac, iPhone, and iPad, plus the best-selling <a href="http://www.takecontrolbooks.com/?pt=TB-TAGLINE" style="color:yellow">Take Control</a> ebooks.</div>
  396.  
  397. <!-- begin centercolumn -->
  398. <div id="centercolumn">
  399.  
  400.  
  401.  
  402. <!-- begin rightcolumn_container -->
  403. <div id="rightcolumn_container">
  404.  
  405. <!-- begin rightcolumn -->
  406.     <!-- rightcolumn is embedded within centercolumn so featured text wraps around it -->
  407.     <div id="rightcolumn">
  408.  
  409. <p class="top"> </p>
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420. <!-- Watchlist items -->
  421. <div class="tearoffbox_wide_container">
  422. <div class="tearoffbox_wide_watchlist">
  423. <p class="tearoffbox_wide_top_watchlist"> </p>
  424.  
  425. <h6><a href="/section/watchlist">TidBITS Watchlist</a></h6>
  426. <ul>
  427.  
  428. <LI><a href="/article/11625">Adobe Flash Player 10.1.85.3</a></LI>
  429.  
  430. <LI><a href="/article/11622">DEVONthink and DEVONnote 2.0.4</a></LI>
  431.  
  432. <LI><a href="/article/11620">Security Update 2010-006</a></LI>
  433.  
  434. <LI><a href="/article/11619">TinkerTool 4.2</a></LI>
  435.  
  436. <LI><a href="/article/11618">Mailplane 2.2</a></LI>
  437.  
  438. <LI><a href="/article/11617">Pro Applications Update 2010-02</a></LI>
  439.  
  440. <LI><a href="/article/11611">Dialectic 1.7</a></LI>
  441.  
  442. <LI><a href="/article/11604">Transmit 4.1.1</a></LI>
  443.  
  444. <LI><a href="/article/11603">MarsEdit 3.1.1</a></LI>
  445.  
  446. <LI><a href="/article/11600">Savescreenie 2.0</a></LI>
  447.  
  448. </ul>
  449.  
  450. <div class="tearoffbox_wide_bottom_watchlist"> </div>
  451.  
  452. </div><!-- end tearoffbox_wide -->
  453.  
  454. </div><!-- end tearoffbox_wide_container for watchlist items -->
  455.  
  456. <!-- begin tearoff box wide -->
  457.  
  458. <div class="tearoffbox_wide_container">
  459. <div class="tearoffbox_wide_tips">
  460.  
  461. <div class="tip_display">
  462. <div class="tips_sponsor_logo">
  463.  
  464. </div>
  465. <h6>Printing onto Forms from Preview</h6>
  466. <p><p>Having trouble accurately printing onto pre-printed forms from Preview? First, save your file as a PDF and review it carefully onscreen, then choose Print. Next, within Preview's Print dialog, under Scaling options, select "No automatic page scaling," to ensure proper alignment with the pre-printed form.</p></p>
  467.  
  468. </div>
  469.  
  470. <div class="tearoffbox_wide_bottom_tips">
  471. <div style="padding-bottom:35px"><div class="tip_display" style="float:left"><p><br><a href="/tipbits/143">Link to this tip</a></p></div><div class="tip_display" style="float:right; width:150px">
  472.  
  473. <p class="credit">Written by<br><a href="/author/Tonya%20Engst">Tonya Engst</a></p></div></div>
  474.  
  475. </div>
  476.  
  477. <div class="tearoffbox_wide_tips_submit">
  478. <form method="post" onsubmit="return false" id="tipbits_form" name="tipbits_form" action="noaction.cgi"><p><a href="javascript:void(0)" onmousedown="ShowTipBox('ts','ts_recaptcha', 50, 'tip_title_id'); return true;">Share your own tip!</a> | <a href="javascript:void(0)" onClick="generic_show_hide('search_tipbits'); document.tipbits_form.tipbits_searchvalue.focus()">Search TipBITS</a></p>
  479. <p style="display:none" id="search_tipbits"><input type="text" onkeydown="if (event.keyCode == 13) { search_tipbits('tipbits_searchvalue'); }" id="tipbits_searchvalue" name="tipbits_searchvalue"> <a href="javascript:void(0)" onClick="search_tipbits('tipbits_searchvalue')">Search</a></p></form>
  480. </div>
  481. <div class="tearoffbox_wide_bottom_tips_submit">
  482.  
  483. </div>
  484.  
  485. </div><!-- end tearoffbox_wide_tips -->
  486. </div><!-- end tearoffbox_wide_container for tips-->
  487. <!-- end tearoff box wide -->
  488.  
  489.  
  490.  
  491. <!-- begin 300 x 250 ad -->
  492.  
  493. <div id="content_ad_square">
  494. <script type='text/javascript'><!--// <![CDATA[
  495.     OA_show(5);
  496. // ]]> --></script><noscript><a target='_blank' href='http://db.tidbits.com/ads/delivery/ck.php?n=TB7671f69'><img border='0' alt='' src='http://db.tidbits.com/ads/delivery/avw.php?zoneid=5&n=TB7671f69'></a></noscript>
  497. </div><!-- end 300 x 250 ad -->
  498.  
  499. <!-- TBTalk items -->
  500. <div class="tearoffbox_wide_container">
  501.  
  502. <div class="tearoffbox_wide_p">
  503. <p class="tearoffbox_wide_top_p"> </p>
  504.  
  505. <h5>Recent TidBITS Talk Discussions</h5>
  506. <ul>
  507.  
  508. <LI><a href="http://emperor.tidbits.com/webx?50@@.3cf95241">Alternatives to MobileMe for syncing calendars between iPad/Mac</a> (1 message)</LI>
  509.  
  510. <LI><a href="http://emperor.tidbits.com/webx?50@@.3cf94dbb">Free anti-virus for the Mac</a> (20 messages)</LI>
  511.  
  512. <LI><a href="http://emperor.tidbits.com/webx?50@@.3cf934e6">iTunes 10 syncing iPod Touch 4.1</a> (2 messages)</LI>
  513.  
  514. <LI><a href="http://emperor.tidbits.com/webx?50@@.3cf92a22">Thoughts about Ping</a> (16 messages)</LI>
  515.  
  516. </ul>
  517.  
  518. <div class="tearoffbox_wide_bottom_p"> </div>
  519.  
  520. </div><!-- end tearoffbox_wide -->
  521.  
  522. </div><!-- end tearoffbox_wide_container for TBtalk items -->
  523.  
  524. <!-- start takecontrol_ad -->
  525. <script type='text/javascript'><!--// <![CDATA[
  526.     OA_show(7);
  527. // ]]> --></script><noscript><a target='_blank' href='http://db.tidbits.com/ads/delivery/ck.php?n=TBe46d56f'><img border='0' alt='' src='http://db.tidbits.com/ads/delivery/avw.php?zoneid=7&n=TBe46d56f'></a></noscript><!-- end takecontrol_ad -->
  528.  
  529. <!-- begin tearoff box 2 -->
  530.  
  531. <div class="tearoffbox_wide_container">
  532.  
  533. <div class="tearoffbox_wide_p">
  534. <p class="tearoffbox_wide_top_p"> </p>
  535.  
  536. <h5>Related Articles</h5>
  537. <ul>
  538. <li><a href="/article/11151">The iPad: A Developer's Anti-Contrarian View</a> (05 Apr 10)</li>
  539. <li><a href="/article/10029">The Mac Turns 25: Our First Macs</a> (25 Jan 09)</li>
  540. <li><a href="/article/6641">Seeing the Light with Panorama</a> (19 Nov 01)</li>
  541. <li><a href="/article/5169">The Business Case for HyperCard</a> (09 Nov 98)</li>
  542. <li><a href="/article/5043">Yes, Virginia, There Is a REALbasic</a> (17 Aug 98)</li>
  543.  
  544. </ul>
  545.  
  546. <p class="tearoffbox_wide_bottom_p"> </p>
  547.  
  548. </div><!-- end tearoffbox_wide -->
  549. </div><!-- end tearoffbox_wide_container -->
  550.  
  551. <!-- end tearoff box 2 -->
  552.  
  553.  
  554. <!-- begin tearoff box for series -->
  555.  
  556. <div class="tearoffbox_wide_container">
  557.  
  558. <div class="tearoffbox_wide_p">
  559. <p class="tearoffbox_wide_top_p"> </p>
  560.  
  561. <h5>Other articles in the series <a href="/series/1211">HyperCard</a></h5>
  562. <ul>
  563. <li><a href="/article/5169">The Business Case for HyperCard</a> (09 Nov 98)</li>
  564. <li><a href="/article/5155">Alas, HyperCard!</a> (02 Nov 98)</li>
  565. <li><a href="/article/5008">HyperCard 2.4.1 Update</a> (27 Jul 98)</li>
  566. <li><a href="/article/4844">Apple Releases HyperCard 2.4</a> (27 Apr 98)</li>
  567. <li><a href="/article/1135">HyperCard 2.3.5 Stack Update</a> (12 Feb 96)</li>
  568. <li><a href="/article/1385">New Virus Targets HyperCard Stacks</a> (31 Jul 95)</li>
  569. <li><a href="/article/2727">HyperCard Folded Back Into Apple</a> (01 Feb 93)</li>
  570. <li><a href="/article/2922">HyperCard Player Bundled with Macs</a> (21 Sep 92)</li>
  571. <li><a href="/article/3228">HyperCard Confabulation</a> (10 Feb 92)</li>
  572. <li><a href="/article/3543">New HyperCard Virus</a> (22 Apr 91)</li>
  573. <li><a href="/article/3709">HyperCard Confusion</a> (26 Nov 90)</li>
  574. <li><a href="/article/3731">HyperCard Bits & Pieces</a> (05 Nov 90)</li>
  575. <li><a href="/article/3769">Claris HyperCard 2.0</a> (17 Sep 90)</li>
  576. <li><a href="/article/3776">HyperCard 2.0 Excuses</a> (10 Sep 90)</li>
  577. <li><a href="/article/3834">HyperCard 2.0, Finally</a> (25 Jun 90)</li>
  578.  
  579. </ul>
  580.  
  581. <p class="tearoffbox_wide_bottom_p"> </p>
  582.  
  583. </div><!-- end tearoffbox_wide -->
  584. </div><!-- end tearoffbox_wide_container -->
  585.  
  586. <!-- end tearoff box -->
  587.  
  588.  
  589.  
  590.  
  591. <!-- begin tearoff box 1 -->
  592.  
  593. <div class="tearoffbox_wide_container">
  594.  
  595. <div class="tearoffbox_wide">
  596. <p class="tearoffbox_wide_top"> </p>
  597.  
  598. <h5>Published in <a href="/issue/213">TidBITS 213</a>.<br><a href="http://www.tidbits.com/list">Subscribe</a> to our weekly email edition.</h5>
  599. <ul>
  600. <li><A HREF="/article/4069">Administrivia</A></li>
  601. <li><A HREF="/article/4070">Sculley Quits</A></li>
  602. <li><A HREF="/article/4071">PowerTalk deletes email</A></li>
  603. <li><A HREF="/article/4072">Apple Catalog Nixed</A></li>
  604. <li><A HREF="/article/4073">ARA Options</A></li>
  605. <li><A HREF="/article/4074">Info-Mac Archive Mirror Sites</A></li>
  606.  
  607. </ul>
  608.  
  609. <p class="tearoffbox_wide_bottom"> </p>
  610.  
  611. </div><!-- end tearoffbox_wide -->
  612. </div><!-- end tearoffbox_wide_container -->
  613.  
  614. <!-- end tearoff box 1 -->
  615.  
  616.  
  617.  
  618.  
  619.  
  620.  
  621.  
  622. <div id="rightcolumn_bottom">
  623.  
  624. </div>
  625.  
  626.     </div><!-- end rightcolumn -->
  627.  
  628.  
  629. </div><!-- end rightcolumn_container -->
  630.  
  631.  
  632.  
  633. <!-- featured articles -->
  634.  
  635. <div id="center_ajax_sub" class="instapaper_body">
  636.  
  637. <!-- google_ad_section_start -->
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658. <!-- issue, article, or series -->
  659.  
  660.     
  661.     
  662.     
  663.     
  664.     
  665.         
  666.     <!-- show article(s) -->
  667.     <div class="article"><a name="1492"></a>
  668.     
  669. <!-- comment initialization routine as needed -->
  670. <div class="popup_box_with_captcha" id="hc_1492" style="display: none">
  671.     <div class="tip_box_format">
  672.     <div id="hc_innards_alt_1492" style="display: none">
  673.             <div class="tbf_row">
  674.                 <div class="tbf_wide_80" id="hc_small_response_1492"></div><div class="x_close_row" id="hc_upper_right1_1492"><a href="javascript:void(0)" onmousedown="HidePopupContent('hc_1492', 'hc', '1492'); return true;">Close</a></div>
  675.  
  676.             </div>
  677.     </div>
  678.     <div id="hc_innards_1492">
  679.         <div class="tip_box_form">        
  680.             <form action="foobar.cgi" method="get" name="check_human_1492">
  681.             <div class="tbf_row">
  682.                 <div class="tbf_wide_80" id="hc_rc_1492">To help us avoid automated posts and misuse of our site, please enter the words below.</div><div class="x_close_row" id="hc_upper_right2_1492"><a href="javascript:void(0)" onmousedown="HidePopupContent('hc_1492', 'hc', '1492'); return true;">Close</a></div>
  683.  
  684.             </div>
  685.             <div class="spacer"></div>
  686.             <div class="tbf_row" id="hc_message_box_1492" style="display:none">
  687.                 <div class="tbf_wide"><div class="tbf_alert" id="hc_top_message_1492"></div></div>
  688.             </div>
  689.             <div class="spacer"></div>
  690.             <div class="tbf_row">
  691.                 <div class="tbf_wide"><div id="hc_recaptcha_1492"></div></div>
  692.             </div>
  693.             <div class="spacer"></div>
  694.             <div class="tbf_row">
  695.                 <div class="tbf_wide"><input type="submit" value="Submit" name="submit_this_tip" onClick="handle_tip_submission('hc', '1492', this.form, this.form.submit_type.value); return false;"><input name="calling_routine" type="hidden"><input type="hidden" name="getbits" value="4075"><input type="hidden" name="author_id"><input type="hidden" name="submit_type" value=""></div>
  696.             </div>
  697.             <div class="spacer"></div>
  698.             </form>
  699.         </div><!-- end tip_box_form -->
  700.     </div><!-- end hum box innards -->
  701.     </div><!-- end tip box format -->
  702. </div><!-- end tip_submit box-->
  703.  
  704.  
  705.  
  706.         
  707.         
  708.         <!-- specific article details here -->
  709.         
  710.         
  711.             
  712.         
  713.     
  714.         <article_link><script type="text/javascript">open_if_linked('')</script></article_link>
  715.         
  716.         <div class="featured_meta"><div class="meta_article">14 Feb 1994 | <a href="/article/4075?print_version=1">Print <span class="shift_up"><img src="/images/printer_icon.gif" alt="Printer-Friendly Version of This Article" border="0" width="9" height="10"></span></a></div></div>
  717.  
  718.         <H2>HyperCard 2.2: The Great Becomes Greater</H2>
  719.  
  720.         <p class="byline">by <a href="/author/Matt%20Neuburg">Matt Neuburg</a> <a href="javascript:void(0)" onClick="document.check_human_1492.submit_type.value='email'; document.check_human_1492.author_id.value='7'; ShowTipBox('hc_1492', 'hc_recaptcha_1492')"><span class="shift_down"><img src="/images/gettb_button_email.gif" height="12" width="12" border="0" alt="Send Email to Author"></span></a></P>
  721.  
  722.         <!-- article text -->
  723.         
  724.         <div id="article_box_1492"><P>[Note: this review was greatly improved thanks to corrections and insights from Kevin Calhoun, HyperCard 2.2 team leader. Other sources: Danny Goodman, "The Complete HyperCard 2.0 Handbook;" Doug Clapp (ed.), "The Macintosh Reader;" Frank Rose, "West of Eden."]</P><P>HyperCard 2.2 is here! HyperCard was what chiefly convinced me to buy my first Mac; I still regard it as the neatest, most useful, most generous program ever conceived. Generous because it was originally given away free (no more, alas!); generous because it lets you program the Mac yourself, easily and powerfully.</P><P><STRONG>HyperCard History</STRONG> -- HyperCard came to life in 1987 as a brainchild of Bill Atkinson. If you love the Mac, you should worship Bill Atkinson. Anyhow, I do. Apple Employee #31 (from 1978), he pushed for Apple Pascal (I loved it), then for Steve Jobs's famous visit to Xerox PARC (which inspired the Mac); he solved the problem of "regions" (thus creating QuickDraw), designed and wrote MacPaint (which helped define the Mac), and was made an Apple Fellow.</P><P>As with everything that goes on at Apple, there's a secret history of HyperCard's evolution that may never be told; certainly I don't know it, but must be content with hints and myths which have themselves become part of its mystique. It seems that Apple originally wanted to promulgate MacBasic to let ordinary folks program the Mac, as Microsoft Basic had for the Apple II, but Bill Gates balked. Meanwhile Atkinson had been working on HyperCard (then called WildCard), built around four elements:</P><UL><LI><P>buttons to push</P><LI><P>text fields to type into or click on</P><LI><P>screens ("cards") containing buttons and text fields plus graphics</P><LI><P>the capacity to set up automatic "links" to take you from one card to another</P></UL><P>This fourth element, still residually present (e.g., in the LinkTo button of the Button Info dialog), was subsequently expanded into an easy programming language - HyperTalk, created by Dan Winkler. Besides letting you calculate, manipulate variables, loop and test, and do all the other things you expect from a programming language, HyperTalk includes system messages reporting user actions, commands to simulate them, and functions and "properties" to obtain and alter the state of the interface and the machine. The implementation grows out of Atkinson's and Winkler's expertise in graphics and programming; but there is also a spirit of organizing and sharing information (fields and graphics, and the hypertext-ish act of clicking on a button or word to see a new card), plus a sense of giving control to the user since HyperTalk puts some of the Mac's functionality and behaviour into easy reach.</P><P>That spirit was instantly embraced by the world that received HyperCard bundled with the Mac from '87 to '91. I wonder whether any application has ever promoted so tangible an ethos, or been so transformed and enlivened by users' originality and enthusiasm. You can program the Mac; you can give the stack to others, and it's simple to use - hence educators (like me) went nuts about it. You acquire a stack someone else has written: you look inside it, see what makes it tick, modify it. Plus, HyperCard is extensible: you can attach XCMDs and XFCNs to extend its functionality, and people who could program the Mac's guts in "real" languages like Pascal and C distributed numerous XCMDs and XFCNs over the nets for all to enjoy. Many XCMDs were so useful that their functions were incorporated into later versions of HyperCard.</P><P>But according to legend, HyperCard spirit has not been universally understood at Apple. There is a tale of how Atkinson threatened to give HyperCard away himself if Apple wouldn't bundle it. There are stories of Chris Espinosa and John Sculley having to push for its original release. Perhaps there was resistance to the idea of giving away for free an application that essentially let users write their own applications; certainly there was enough fear that the idea of "programming" would repel users that Apple gave it the euphemistic name "scripting." Fortunately, as Atkinson bowed out of the scene, others who shared the vision remained and new ones, notably Kevin Calhoun, came on board, and HyperCard 2.0 and 2.1, in '90 and '91, were gems. After 2.1, though, apparently came a terrible period where HyperCard went to Claris and nearly died, then came back to Apple where it remained endangered.</P><P>Happily, HyperCard has survived to become 2.2, thanks in part, I presume, to AppleScript, which has been incorporated into it. To read the press release gobbledygook, you'd think corporate Apple still doesn't grasp just what HyperCard is; it's billed as an "application development platform" letting you create "customized software solutions," an "optimal choice for commercial solution providers." The HyperCard heart, though, beats healthy as ever; its evolution has been no mean spiritual and technical feat, and users have much to be grateful for.</P><P><STRONG>Improvements and Enhancements</STRONG> -- Version 2.2's improvements over 2.1 are many - mostly small tweaks to remove annoying shortcomings. 2.2 has nicer report printing; movable modal dialogs; Select All works in the Message box ; many limits (number of open windows, number of open stacks) are raised or removed. Sorting and finding are more powerful; date format conversion is better; doMenu can take modifier keys; and "there is" can check for disks, applications, documents, and card pictures. System messages, properties, and functions have been added to give handlers important, previously unavailable information: whether the menubar is showing, what the user is doing to the card window, where we're going in leaving this stack. There is better menuItem info, more convenient reference syntax. WorldScript is supported. At last you can determine the layering order of fields and buttons via a new property, "the partNumber." Clearly the HyperCard team listens to users and are serious users themselves.</P><P>More major changes make it easier to conform to the Mac Thought Police style. Radio buttons now automatically work in sets. Buttons can be disabled, and can be in standard Mac style. Simple pop-up buttons are now a standard feature, with an interesting by-product that a button can now be a container. Fields can more easily act like scrolling lists. Objects can be double-clicked.</P><P>Finally, a stack can now be saved as an application! The resulting application is essentially HyperCard itself (it's huge, and no faster than running under HyperCard), but it works, even if you "start using" or "go to" other stacks, and sure beats the hated HyperCard Player.</P><P><STRONG>QuickTime</STRONG> -- HyperCard 2.2 supports QuickTime via the Movie XCMD and the MovieInfo XFCN. The Movie XCMD puts up a movie window, in any of several styles, with or without a controller; you can manipulate the movie from a handler, or let the user do it with the controller. Many features of the movie can be manipulated, with a number of valuable messages and a callback feature. A utility stack installs the XCMD for you and simplifies setting up a movie window.</P><P><STRONG>Color</STRONG> -- HyperCard 2.0 introduced color "picture" windows, and you could click in them, but they weren't true cards; and true cards (with buttons, fields, graphics) were strictly black and white. Integrated color was a much hoped-for feature that Claris was reportedly working on for its abortive 2.5 version, but it was found to be too cumbersome. Now 2.2 provides a compromise, with a colorizing XCMD and a utility stack to ease the process of adding color.</P><P>You can color buttons and fields and add colored rectangular areas to cards; select or create the object, and click on a color. Each object has a solid color and can have a beveled edge of adjustable thickness. You can also display full color PICTs as part of the card. You dictate the layering order of the color items, and you can use over 25 transition effects as you apply color. The utility stack installs the XCMD, and modifies your handlers and gives your stack a database of permanently colored objects, so that color automatically appears. Color seems part of the card: moving the card or switching stacks presents no problems or major delay (unlike earlier third-party colorizers). You can also control the XCMD yourself, so that color objects can change in interesting ways as part of a handler: a button could suddenly become colored, a rectangular region of the card could change colors with a transition effect, and so on.</P><P>I have seen this system criticized on the nets as a kludge, but I find it ingenious. However, I was at first overwhelmed by the spectacular appearance of the Color Tools stack, and thought, "Wow, colored buttons and fields look like this?!?" But then I found that the stack's effects are achieved almost entirely with PICTs. If you want great looking objects you'll need to draw them yourself with a graphics application.</P><P><STRONG>Inter-Application Communications</STRONG> -- The most sweeping change in HyperCard 2.2 lies in communicating with other programs. HyperCard has long been a leader here; even before MultiFinder, you could use HyperCard to launch another application, and return when it quit. Basic support for Apple events arrived in 2.1; HyperCard could easily send and respond to the required suite plus doScript and evaluateExpression, and could be made to dissect and reply to any Apple event.</P><P>Now, however, HyperCard accepts some 150 different events, operating on 17 kinds of objects and their properties; it is thus scriptable, and you can control HyperCard from AppleScript or any other Apple event-sending mechanism. HyperCard can itself send messages via any OSA (Open Scripting Architecture) system-level scripting mechanism you have installed, like AppleScript, Frontier, or QuicKeys. A statement in a script, or a multiple statements in a container, can be sent into the system in any of these languages via the "do" command. What's more, the entire script of any object can be written in one of those other scripting languages. If the language is QuicKeys, which is not message-oriented, you can launch it with a new "run" message. If the language is AppleScript, messages can be passed directly between it and HyperTalk.</P><P>Much of the value of this new power lies in the future. AppleScript can't yet drive every application, though StuffIt, WordPerfect, FileMaker Pro, Excel, and others are on board already. The Finder isn't directly scriptable, although several hacks work around this, and a scriptable Finder is now shipping to developers. But QuicKeys can type and push buttons in just about any application, and I've already automated several drudge activities by having HyperCard do the looping and variable-setting and calling QuicKeys to drive the other application.</P><P>The move to OSA support is partly of symbolic significance, confirming (I hope) Apple's commitment to AppleScript and to HyperCard itself. But OSA support is also of great practical value; its marriage to HyperCard gives AppleScript access to all HyperCard's capabilities and significantly extends HyperCard's reach.</P><P><STRONG>Bugs and Shortcomings</STRONG> -- Apple fixed some bugs and serious misbehaviours, including the infamous "go first marked card" bug. Not everyone's wish list will be met, though. There's still no ControlKey function, and you still can't script the polygon tool. HyperCard's idle-time tasks, such as resetting the ItemDelimiter, still won't happen if a new message is pending (e.g. you clicked a button while the previous handler was running), and sending "idle" yourself is not a workaround.</P><P><STRONG>Documentation</STRONG> -- The documentation (manuals and some stacks) is good, but not uniformly so. HyperCard is hard to describe or teach, and though the manuals do a remarkably fine job of both at describing and teaching and the included stacks are superb as models, the manuals have errors, ranging from simple misprints and misstated syntax rules to howlers like a demo script for a Replace function that breaks if the replace-text contains the find-text. There are also odd arrangement choices and some serious omissions. Properties of palettes and external windows are not included in the Properties chapter. KeyDown and CommandKeyDown are not listed among the system messages sent to a field, and we are nowhere informed that TabKey, ReturnKey, EnterKey, FunctionKey, ArrowKey, and ControlKey (though not CommandKeyDown) messages are preceded by KeyDown (indeed, the manual wrongly denies that this is so). The Choose message is not documented in the manuals; nor is the important new "run" message. Many basic arrow-key navigation shortcuts are documented only deep in a Help stack. The "dynamic path" is incorrectly explained in the HT Reference stack. The new "copy template" command is practically undocumented. Such shortcomings in the official documentation seem somewhat outrageous.</P><P><STRONG>Conclusions</STRONG> -- HyperCard may not be free any more, but it's still a good deal. The propaganda says that the price will be $249 (or upgrade from registered 2.0/2.1 for $89), but $139 for a limited (unspecified) time; I ordered direct from APDA via email to <<A HREF="mailto:apda@applelink.apple.com">apda@applelink.apple.com</A>> and paid $99. The package includes the HyperCard application; two manuals; over two dozen stacks of documentation and utilities; the XCMDs for QuickTime and color; AppleScript 1.1 and the rest of the "Run Time" Kit; plus ADDmotion II from Motion Works, an application and XCMDs for multimedia in HyperCard. My recommendation: run, don't walk.</P><!-- HyperCard 2.2: The Great Becomes Greater Matt Neuburg --></div>
  725.         
  726.  
  727.         <!-- end article text -->
  728.     
  729.         
  730.         <!-- PayBITS -->
  731.         
  732.  
  733.         
  734. <p> </p><div class="sponsorbox">
  735. <div class="sponsortext"><A HREF="http://www.smithmicro.com/tidbits"><IMG SRC="http://db.tidbits.com/images/badges/StuffItDeluxe2010.gif" ALT="" HEIGHT="50" WIDTH="50" BORDER="0" ALIGN="left"></A>StuffIt Deluxe 2011 has everything you need to backup, encrypt,<br />share, and compress all of your photos, audio and documents.<br />Compress it. Secure it. Send it. Try StuffIt Deluxe 2011 today!<br />Click here for a free 30-day trial: <<a href="http://stuffIt.com/tidbits/">http://stuffIt.com/tidbits/</a>></div>
  736. </div>
  737. <div class="sponsorbox_bottom"> </div>
  738.  
  739.  
  740.         <!-- comments section -->
  741.         
  742.         <!-- end comment show-->
  743.         
  744.         <!-- end comments section -->
  745.  
  746.  
  747.         <!-- end article loop details -->
  748.         
  749.         
  750.  
  751.         
  752.     </div><!-- end show article -->
  753.     
  754.     
  755.  
  756.  
  757. <!-- article_plus end -->
  758. <!--
  759. </DIV>
  760. --><!-- end main_column DIV -->
  761.  
  762.  
  763. <!-- google_ad_section_end -->
  764.  
  765. </div><!-- end center AJAX insert -->
  766.  
  767. <!-- TipBITS Search Results Lozenge -->
  768. <div id="tipbits_results_loz" style="display:none">
  769. <form method="post" onsubmit="return false" id="tipbits_form_loz" name="tipbits_form_loz" action="noaction.cgi">
  770. <div class="tip_footer">
  771. <p id="search_tipbits_loz"><input type="text" onkeydown="if (event.keyCode == 13) { search_tipbits('tipbits_searchvalue_loz', 'tipbits_results_loz'); }" id="tipbits_searchvalue_loz" name="tipbits_searchvalue_loz"> <a href="javascript:void(0)" onClick="search_tipbits('tipbits_searchvalue_loz', 'tipbits_results_loz')">Search</a></p>
  772. </div>
  773. <div class="tip_footer_bottom">
  774.  </div>
  775. </form>
  776. </div><!-- end TipBITS Search Results lozenge -->
  777.  
  778.  
  779.  
  780.  
  781. <!-- begin footer -->
  782. <div id="footer">
  783.  
  784. <div id="qr_tag_right"><div id="qr_tag_image"><img src="http://db.tidbits.com/tags/4075.png"></div><div id="qr_tag_text"><a href="http://db.tidbits.com/article/10616">What's this image?</a></div></div>
  785. <p>Special thanks to <a href="http://www.forest.net/">digital.forest</a>, our
  786. Web and mailing list host.</p>
  787. <p>Unless otherwise noted, this article is copyright © 1994 <a href="/author/Matt%20Neuburg">Matt Neuburg</a></p>
  788. <p>TidBITS is copyright © 2010 TidBITS Publishing Inc.</p>
  789. <p>Reuse governed by <a href="http://www.tidbits.com/terms/">Creative Commons License</a>.</p>
  790.  
  791. <p><a href="/about.html" title="About TidBITS">About TidBITS</a> | <a href="/account.html" title="Account Help">Account Help</a> | <a href="/advertising.html" title="Advertise with TidBITS!">Advertise with TidBITS!</a> | <a href="/contact.html" title="Contact Info">Contact Info</a> | <a href="/copyright.html" title="Copyright Terms">Copyright Terms</a></p>
  792.  
  793. </div><!-- end footer -->
  794.  
  795.  
  796. </div> <!-- end centercolumn -->
  797.  
  798. <div class="center_bottom"> </div>
  799.  
  800. </div> <!-- end centercolumn_border -->
  801.  
  802.  
  803. </div> <!-- end content_container -->
  804.  
  805. </div> <!-- end mainbody -->
  806.  
  807.  
  808. <script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
  809. </script>
  810. <script type="text/javascript">
  811. _uacct = "UA-276924-3";
  812. urchinTracker();
  813. </script>
  814. <script type="text/javascript"
  815. src="http://tidbitscom.skimlinks.com/api/skimlinks.js"></script>
  816. <script type="text/javascript">
  817. var skimlinks_pub_id = '2559X585851';
  818. var skimlinks_domain = 'go.tidbits.com';
  819. skimlinks();
  820. </script>
  821. </body>
  822. </html>
  823.  
  824.