TweetFollow Us on Twitter

HyperCard 2.0
Volume Number:6
Issue Number:11
Column Tag:XCMD Corner

HyperCard 2.0

By Donald Koscheka, MacTutor Contributing Editor

The Revolution

Thomas Jefferson once stated that “Revolution is that event which allows all ordinary events to continue”. Based on this definition, I’m inclined to feel that HyperCard 2.0 is a bit revolutionary. For the past 3 years, stack developers have expended a tremendous amount of energy trying to squeeze the last bit of performance from HyperCard.

This effort almost always leads to the development of some suite of XCMDs to supercharge an existing stack. As I watched this evolution develop, I noticed that XCMDs typically fall along a specific set of tasks. These include file I/O, interfacing to external devices, print management and window management (including dialogs). From the perspective of the XCMD programmer, the HyperCard 2.0 revolution is not at all subtle: HyperCard incorporates many features found previously only in XCMDs.

HyperCard 2.0 brings more to the party than new XCMD capability but in keeping with the spirit of this column, I will focus on what’s new in the XCMD world.

What’s New and What’s Not

Whenever you need to develop for a new version of any software package, you need to evaluate the scope of the update. You can perform this evaluation very quickly by asking yourself two questions: “What changed since the last version” and “What hasn’t changed since the last version?”

Armed with these two questions, the best place to find the answers is in the interface and library files in HyperCard 2.0. My version of HyperCard 2.0 came with just 3 files: HyperXCMD.p, HyperXCMD.h and HyperXlib.o. I was immediately surprised to find that XCMDGlue was missing from the distribution disk. At first I thought this was a mistake but a quick disassembly of HyperXLib.o showed this not to be the case; XCMDGlue is no longer needed, that function is now performed directly in the Callback Library.

So the first change is that we no longer need to compile our code with a glue routine. The interface code varies incrementally beyond this point (that is, they’ve ADDED stuff but all of the old stuff is still intact). For example, XCMDs are still called with the same parameter block record as in earlier versions of HyperCard with the exception that the the fields in the block take on special meaning for external windows. External windows adds a whole new dimension to HyperCard so look for a lot of discussion about them in future installments of this column.

The parameter block is not only used for interfacing between the calling script and the XCMD but also for interfacing between the XCMD and the HyperCard callbacks. The callback engine has been increased to over 75 callbacks (I counted two callbacks that appear in the library but are not documented as of this writing). The new callbacks can be divided into groups according to the class of services they perform: Hypertalk utilities, Memory Utilities, String Utilities, String Conversions, field utilities, miscellaneous utilities, Creating and disposing windows, window utilities, text edit utilities, script editor utilities, debugging tools. The categories are Apple’s, not mine. I will use this list to set the agenda for this column for the next several months. We will look at each of these categories in detail in turn.

One of the most salient additions to XCMDs in HyperCard 2.0 is the addition of “version control” information. From now, whenever the user passes ! as the first parameter to an xcmd, you need to return the version of that XCMD. if the user types passes ? as the first parameter, you should pass usage information to the user. This is straightforward and simple enough to abide by. Funny how those darned “command lines” have a habit of appearing in the most unusual of places. With this in mind, we will start at the beginning again, introducing “Simple XCMD 2.0.c” with this new twist. This is the building block for all 2.0 XCMDs and you can use it as a sort of template. A controversy will no doubt arise over the hard coding of strings in the XCMD code resource, but without a lot of thought, I think that you can convince yourself that there isn’t a better way to do this.

An XCMD For 2.0

While we haven’t answered both questions in great detail on this pass, we have learned enough to jump right into trying our hand at an XCMD for 2.0. We learned that the interface is pretty much unchanged and that old XCMD should work fine under 2.0 although they won’t be able to take advantage of 2.0’s features. Most importantly, we learned that this isn’t a complete restart; we can easily build on existing experience as we migrate our code to 2.0. This is good -- nobody likes to spend 3 years doing anything just to discover on such and such a date that everything they know is wrong!

Listing 1 is a sample HyperCard 2.0 XCMD. It is quite straightforward since it doesn’t actually do anything. I am taking the introduction of HyperCard 2.0 as a rare opportunity to “wipe the slate clean” and start all over again with a fresh look at XCMDs. Since this is the first of many columns in which I will discuss 2.0, I have decided to start off slow and sure and build from here. Listing 1 conforms to the structure of a 2.0 XCMD without relying on the new XCMD glue. If you don’t have 2.0 yet, you can build and test this XCMD under earlier versions of HyperCard until you get version 2.0. I did this to allow those of you who want to follow along with this column to get caught up first. I will start in earnest on 2.0 next month. Until then, Happy Hacking!

/**********************************/
/* File: Sample.c*/
/* */
/* A sample XCMD for Hypercard*/
/* 2.0  */
/* */
/* Well-behaved XCMDs for HC2.0  */
/* will respond to the ! and ?*/
/* requests by returning version */
/* and usage information  */
/* respectively. */
/* */
/* ----------------------------  */
/* ©1990, Donald Koscheka */
/* All Rights Reserved    */
/**********************************/

/*
 Project:

 ANSI-A4-- standard “C” libraries assembled
 off of register A4
 
 MacTraps
 Sample2.0.c (contents of listing 1)

 Set Project Type:
 Type == XCMD | XFCN
 Name == SimpleXCMD
 id == 1000
 
 Usage
 
 SimpleXCMD “?”
 SimpleXCMD “!”
 put the result
 
 OR
 
 Put simpleXCMD( “?” )
 Put simpleXCMD( “!” )
*/

#include<SetUpA4.h>
#include<string.h>
#include<HyperXCMD.h>
 
#ifndef NIL
 #define NIL(void *)0L
#endif

Handle  strToParam( str )
 char *str;
/***************************
* Given a pointer to a string,
* copy that string into a handle
* and return the handle.
*
* The input and output strings
* are both null-terminated
*
***************************/
{
 Handle outH = NIL;
 long len = 0;
 
 len = strlen( str );
 if( len )
 if( outH = NewHandle( len ) )
 BlockMove( str, *outH, len + 1 );
 
 return( outH );
}

pascal void main( paramPtr )
 XCmdPtrparamPtr;
{
 Handle answer = NIL;
 char *str;
 long len;
 
 paramPtr->returnValue = NIL;

 /** The first thing that a well-behaved           **/
 /** HC2.0 XCMD should do is check to see    **/
 /** whether the first (and only) parameter  **/
 /** is the user request for information or  **/
 /** or usage information.  If so, just pass **/
 /** your answer back to the user, otherwise **/
 /** go ahead and perform your xcmd services **/
 
 if (paramPtr->paramCount == 1){
 if ( **(paramPtr->params[0]) == ‘!’ ){
 paramPtr->returnValue = strToParam(“Simple XCMD, version 1.0, ©Donald 
Koscheka, 1990”);
 return;
 }
 
 if ( **(paramPtr->params[0]) == ‘?’ ){
 paramPtr->returnValue = strToParam(“Simple takes no parameters and does 
nothing with them.”);
 return;
 }
 }
}

Listing 1. SimpleXCMD.c

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

calibre 4.17.0 - Complete e-book library...
Calibre is a complete e-book library manager. Organize your collection, convert your books to multiple formats, and sync with all of your devices. Let Calibre be your multi-tasking digital librarian... Read more
MacPilot 11.1.4 - $15.96
MacPilot gives you the power of UNIX and the simplicity of Macintosh, which means a phenomenal amount of untapped power in your hands! Use MacPilot to unlock over 1,200 features, and access them all... Read more
Transmission 3.00 - Popular BitTorrent c...
Transmission is a fast, easy, and free multi-platform BitTorrent client. Transmission sets initial preferences so things "just work", while advanced features like watch directories, bad peer blocking... Read more
Doom 3 1.3.1 - First-person shooter acti...
A massive demonic invasion has overwhelmed the Union Aerospace Corporation's (UAC) Mars Research Facility, leaving only chaos and horror in its wake. As one of only a few survivors, you must fight... Read more
Box Sync 4.0.8004 - Online synchronizati...
Box Sync gives you a hard-drive in the Cloud for online storage. Note: You must first sign up to use Box. What if the files you need are on your laptop -- but you're on the road with your iPhone? No... Read more
LibreOffice 6.4.4.2 - Free, open-source...
LibreOffice is an office suite (word processor, spreadsheet, presentations, drawing tool) compatible with other major office suites. The Document Foundation is coordinating development and... Read more
Day One 4.14 - Maintain a daily journal.
Day One is an easy, great-looking way to use a journal / diary / text-logging application. Day One is well designed and extremely focused to encourage you to write more through quick Menu Bar entry,... Read more
Doxie 2.12.2 - Scan, share, and store do...
Introducing Doxie, the new, modern paper scanner that's so simple, it'll revolutionize the way you think about sharing and storing docs and photos forever. Doxie is ultra-portable, fully automatic,... Read more
Tinderbox 8.7.0 - Store and organize you...
Tinderbox is a personal content management assistant. It stores your notes, ideas, and plans. It can help you organize and understand them. And Tinderbox helps you share ideas through Web journals... Read more
Viber 13.0.0 - Send messages and make fr...
Viber lets you send free messages and make free calls to other Viber users, on any device and network, in any country! Viber syncs your contacts, messages and call history with your mobile device, so... Read more

Latest Forum Discussions

See All

SINoALICE, Yoko Taro and Pokelabo's...
Yoko Taro and developer Pokelabo's SINoALICE has now opened for pre-registration over on the App Store. It's already amassed 1.5 million Android pre-registrations, and it's currently slated to launch on July 1st. [Read more] | Read more »
Masketeers: Idle Has Fallen's lates...
Masketeers: Idle Has Fallen is the latest endeavour from Appxplore, the folks behind Crab War, Thor: War of Tapnarok and Light A Way. It's an idle RPG that's currently available for Android in Early Access and will head to iOS at a later date. [... | Read more »
Evil Hunter Tycoon celebrates 2 million...
Evil Hunter Tycoon has proved to be quite the hit since launching back in March, with its most recent milestone being 2 million downloads. To celebrate the achievement, developer Super Planet has released a new updated called Darkness' Front Yard... | Read more »
Peak's Edge is an intriguing roguel...
Peak's Edge is an upcoming roguelike puzzle game from developer Kenny Sun that's heading for both iOS and Android on June 4th as a free-to-play title. It will see players rolling a pyramid shape through a variety of different levels. [Read more] | Read more »
Clash Royale: The Road to Legendary Aren...
Supercell recently celebrated its 10th anniversary and their best title, Clash Royale, is as good as it's ever been. Even for lapsed players, returning to the game is as easy as can be. If you want to join us in picking the game back up, we've put... | Read more »
The Magic Gladiator class arrives in MU...
The Magic Gladiator class is now available in MU Origin 2 following the most recent patch. It also marks the start of Abyss Season 11 and the introduction of Couple Skills and Couple Dungeons. [Read more] | Read more »
The 5 Best Racing Games
With KartRider Rush+ making a splash this past week, we figured it was high time we updated our list of the best mobile racing games out there. From realistic racing sims to futuristic arcade racers (and even racing management games!), check out... | Read more »
KartRider Rush+ Guide - Tips for new rac...
KartRider Rush+ continues to be a surprisingly refreshing and fun kart racer that's entirely free-to-play. The main reason for this is just how high its skill ceiling is. Check out the video above if you're curious to know what top level play looks... | Read more »
KartRider Rush+ might be good, actually?
It's hard to find good racing games on mobile. Most of them are free-to-play, and free-to-play racers generally suck. Even Nintendo couldn't put together a competent Mario Kart game, opting instead for a weird score chaser that resembles--but feels... | Read more »
LifeAfter, NetEase's popular surviv...
A new map will be making its way into NetEase's popular survival game LifeAfter. The map is set to arrive on May 28th and will introduce a volcano that's teetering on the verge of eruption, bringing a host of added challenges to the game. [Read... | Read more »

Price Scanner via MacPrices.net

Memorial Day Weekend Sale: Take $300 off thes...
Apple resellers are offering $300 discounts on select 16″ MacBook Pros as part of their Memorial Day Weekend 2020 sales. Prices start at $2099: – 16″ 2.6GHz 6-Core Space Gray MacBook Pro: $2099 at... Read more
Best Memorial Day Weekend 2020 Apple AirPods...
Apple resellers are offering discounts ranging up to $50 off MSRP on AirPods as part of their Memorial Day Weekend 2020 sales. These are the best deals today on various AirPods models. See our... Read more
Memorial Day Weekend Sale: 10″ Apple iPads fo...
Amazon is offering new 10.2″ iPads for $80-$100 off Apple’s MSRP as part of their Memorial Day Weekend 2020 sale, with prices starting at only $249. These are the same iPads sold by Apple in their... Read more
Memorial Day Weekend Sale: 2020 Apple iPhone...
Sprint is offering Apple’s new 2020 64GB iPhone SE for $0 per month for 18 months as part of their Memorial Day Weekend 2020 sale. New line of service and trade-in required. Offer is valid from 5/22/... Read more
Amazon’s popular $100 Apple Watch Series 5 di...
Amazon has Apple Watch Series 5 GPS + Cellular models on sale for up to $100 off Apple’s MSRP today. Shipping is free. These are the same Apple Watch models sold by Apple in their retail and online... Read more
2020 13″ 4-Core MacBook Air on sale for $949,...
Apple reseller Adorama has the new 2020 13″ 1.1GHz 4-Core Space Gray MacBook Air on sale today for $949 shipped. Their price is $50 off Apple’s MSRP, and it’s the lowest price currently available for... Read more
Apple Retail Chief Announces Staggered Reopen...
NEWS: 05.20.20 – In the midst of a global pandemic, after its retail outlets were shuttered temporarily in mid-March as a mitigation measure enacted by Apple during the peak of the spread of COVID-19... Read more
Apple’s Pro Display XDR models in stock today...
Abt Electronics has Apple’s new 32″ Pro Display XDR models in stock and on sale today for up to $305 off MSRP. Shipping is free. Their prices are currently the lowest available for these new models... Read more
Apple restocks refurbished iPhone 8 for $339
Apple has restocked Apple Certified Refurbished 64GB iPhone 8 models for only $339. Apple dropped their price on this phone last month by $160, from $499 to $339. Each refurbished iPhone comes with a... Read more
New at AT&T: 50% off iPhone 11 for new cu...
AT&T is offering a 50% off the 64GB iPhone 11 for new customers who switch to AT&T and open a new line of service. Discount applied over a 30 month period The fine print: “iPhone 11 64GB for... Read more

Jobs Board

Cub Foods - *Apple* Valley - Now Hiring Par...
Cub Foods - Apple Valley - Now Hiring Part Time! United States of America, Minnesota, Apple Valley New Retail Operations Post Date 5 days ago Requisition # Read more
Senior Data Engineer - *Apple* - Theorem, L...
Job Summary Apple is seeking an experienced, detail-minded data engineeringconsultant to join our worldwide business development and strategy team. If you are Read more
Cub Foods - *Apple* Valley - Now Hiring Par...
Cub Foods - Apple Valley - Now Hiring Part Time! United States of America, Minnesota, Apple Valley New Retail Operations Post Date 4 days ago Requisition # Read more
Medical Screener - *Apple* Hill - Evenings...
Medical Screener - Apple Hill - Evenings Tracking Code D-MS-AH-E Job Description Medical Screener - Temporary We Are Hiring: WellSpan Health has a temporary Medical Read more
*Apple* Systems Administrator - Solidus Tech...
Solidus is searching for an Apple Systems Engineer. The engineer will be responsible for desktop and server infrastructure. This includes support for operating Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.