TweetFollow Us on Twitter

Spring 91 - Apple II Q&A

Apple II Q&A

Apple II DEVELOPER TECHNICAL SUPPORT


Q When I write an Apple II GS TextEdit keyFilter procedure and put its address in my TextEdit control template, I get funny little pieces of garbage drawn on the screen in my TextEdit record, and sometimes TextEdit crashes. Doesn't the keyFilter mechanism work?

A The keyFilter mechanism in TextEdit works, but there's no space for a keyFilter address in a TextEdit control template. The only filter procedure in the control template is the generic filter procedure, which does not take the same parameters as the keyFilter procedure. If you include a filterProc address in a TextEdit control template, it must be to a generic filter procedure. Generic filter procedures are defined on pages 49-16 through 49-18 of Apple IIGS Toolbox Reference Volume 3.

If you want to use TextEdit's keystroke filter, word wrap hook, or word break hook, you must modify the TERecord directly to put your procedure's address in the appropriate place.

Q While linking my Apple IIGS® application, LinkIIGS does a system death: "ExpressLoad error 1301." What am I doing wrong?

A Believe it or not, LinkII GS has dynamic segments. ExpressLoad has the annoying habit of taking error codes it's not expecting, adding $1100 to them, and calling SysFailMgr. Why is this habit annoying? Well, it works just fine for what the author had in mind, which was GS/OS errors (all of the form $00xx), but it causes problems with Toolbox errors.

You've probably figured out the rest by now: $1301 - $1100 = $0201 = Memory Manager "unable to allocate handle" error. ExpressLoad ran out of memory trying to load a dynamic segment in LinkIIGS.

The best solution is to get more memory. If you can't make enough memory to link it, you might consider having some of your code in code resources instead of in dynamic segments in the data fork, to create separate links for those segments and make the big link even smaller.

Q What is the correct procedure for installing system software on an Apple II GS?

A Always use the Installer application. The Installer scripts provided by Apple on the Apple II GS system disks will put everything you need on the startup disk. If you attempt to install system software without using the Installer, there's a good chance you'll forget to copy a needed file or delete an obsolete file. Because SCSI hard disk drivers are not included on System.Disk, you'll need to do the following to install System 5.0.4 on a hard disk:

  1. Make backup copies of System.Disk and System.Tools, making sure they keep the same names.
  2. Launch the Installer from System.Tools (backup) and install SCSI Driver on the backup of System.Disk. The Installer script will delete a couple of fonts as well as the tutorial folder to make room for the SCSI information on a 3.5-inch disk.
  3. Boot the backup of System.Disk and install System 5.0.4 onto your hard drive. If you want Shaston 16 and Times 12 fonts, install "Additional Fonts" last.

The Installer knows how to make the software fit on a floppy disk. It can also update your system without requiring you to trash your existing System Folder.

Apple IIGS Technical Note #64, Apple IIGS Installer and Installer Scripts, describes how the Apple IIGS Installer executes Installer script files and how to write Installer script files.

Q In some of my recent work, I've found it necessary to patch the Apple II GS GS/OS vectors in order to monitor OS calls. My patch works without interfering, but it disappears when the user switches to ProDOS 8 and back to GS/OS. I tried unsuccessfully to fix this by using the notification queue, asking GS/OS to notify me when the user was coming back from ProDOS 8. How can I safely and reliably patch GS/OS on a permanent basis?

A You should be able to patch GS/OS ® with System 5.0.4. Two observations may help:

  • If you ask for all notification events, you'll get at least one disk-insert event before you get any restart events, since the device driver for the startup disk will "fake" a disk insert to get the appropriate disk-switched statuses set before doing any real work.
  • Your procedure may not be the first notification procedure called at restart time. For example, the Resource Manager inserts a procedure so that it can reopen the system resource file on return from ProDOS®
  • If this mechanism was broken as you say, the Resource Manager's notification procedure wouldn't work either.

Q Why does a dialog box without a Cancel button come up from an Apple II GS Loader call when the volume is not on-line?

A The loaders always set the preferences to "dialog, no Cancel button" when trying to load a dynamic segment indirectly (because you passed control to it). The loaders must do this because they have no way to report errors. For example, if your code does a JMP DynSegLabel, the Loader must load the dynamic segment. Should it get an error, it has no way to report an error and no place to pass control back to if your program does a JMP and the Loader has no place to return to. In earlier systems, inability to load a dynamic segment was a fatal system error. Today, the Loader will not give up until you insert the disk because it has no other choice. However, if you call LoadSegName yourself, the Loader should not change the preferences; because that's a call, the Loader can return from it gracefully. Indirect dynamic segment loading doesn't have that luxury. The current Loader documentation is in the Addison-Wesley version of GS/OS Reference .

Q What are longStatText2 items, mentioned in the "Dialog Manager" chapter of the Apple II GS Toolbox Reference?

A A longStatText2 item is similar to a longStatText item except that the text is drawn with LETextBox2. A longStatText2 item allows you to embed formatting codes so that you can change fonts, font styles, sizes, colors, and justification. The longStatText2 capability is built into the Dialog Manager to support formatting flexibility in standard dialogs. To use longStatText2 items, the Apple IIGS QuickDraw Auxiliary and Font Manager tools must be started.

Q Where do I find a current list of the MessageCenter message types that have been registered with DTS?

A Message types that are assigned to individual developers are treated confidentially. We have very few of these, as most developers now use MessageByName to get an assignment dynamically.

Q Where do I find technical documentation on the messages written by the Finder to tell an Apple II GS application which files to open as it starts up?

A The only truly public message types are #1 (the files message from the Finder or other program launchers) and #2 (the desktop pattern message).

Message type #1 is documented in Apple IIGS Toolbox Reference Volume 2, with the description of the MessageCenter tool call. The documentation implies that there are both filenames and full pathnames (such as Standard File returns) in the message, but, in fact, each Pascal string indicates a totally separate file. Message type #2 is documented in Apple IIGS Toolbox Reference Volume 3, in the "Window Manager Update" chapter (page 52-4).

Q How does an Apple II GS New Desk Accessory (NDA) obtain its ID?

A Each Apple IIGS NDA has two IDs: a Memory Manager ID and a Menu ID. If you want the Memory Manager ID, simply call MMStartup from your DA. The NDA ID for the OpenNDA call can easily be obtained from your menu string. The Desk Manager replaces the ** of your \H** at the end of your menu string with your Menu ID, which is also your NDA number. A note of caution: Please be sure you're running in the 16-bit environment before using the NDA ID to call OpenNDA. If you try this while ProDOS 8 is running, nothing good comes of it!

Q I'm creating an Apple IIGS list control from a resource. How can I update my listRef resource dynamically, if my list grows dynamically?

A To modify the content of a resource and to grow it, load the resource, make any changes you want to the handle (such as change the data inside or call SetHandleSize to make it bigger), and then use the MarkResourceChange call to tell the Resource Manager your resource's content has been changed. The Resource Manager then updates the contents of your file when you call UpdateResourceFile. The Resource Manager even recognizes handle size and content changes (actually, it just assumes the contents have changed).

Q Why is there no GS-only version of HyperMover?

A HyperMoverTM is actually implemented as a pair of HyperCard ® stacks: HyperMover.mac, which runs under Macintosh HyperCard and disassembles Macintosh stacks; and HyperMover.GS, which runs under HyperCard II GS and reassembles the stacks into HyperCard IIGS stacks. Although there are a few XCMDs to handle tricky stuff like sounds and paint files, the majority of the work is done by simple HyperTalk scripts. It may seem like a disadvantage to require two computers to do the translation, but in fact there are a number of tremendous advantages:

  • HyperMover doesn't need to know anything about the internal binary format of stacks. This makes it somewhat immune to stack format changes. For example, you can convert a Macintosh HyperCard 1.2.5 stack to HyperCard 2.0 format, but HyperMover will still translate it because the HyperCard program takes care of reading data from the stack.
  • The interchange format is simple--a file containing a complete textual description of the stack. After disassembly, you can open and even edit this file using any text editor (such as MPW or APW), before reassembling the file on the GS side. This provides an easy way to browse scripts, looking for potential machine dependencies, and you can actually perform global modifications on your stack using the find-and-replace capabilities of your text editor.
  • When small-font painted text is used to label objects, it often shrinks to unreadability when converted to the Apple IIGS screen resolution. You'll need a Macintosh to view all the graphics and decide what they're supposed to look like, before you can redraw them in 16- color Apple IIGS graphics.
  • You'll also need a Macintosh to perform side-by-side comparisons and testing of your new stack.

Having a Macintosh available is important at all phases of the stack translation process. You'll find it makes the entire process much smoother.

Q Which versions of Macintosh HyperCard are compatible with HyperMover?

A The HyperMover stack will execute in the 1.2.5 and 2.0 Macintosh HyperCard environments. However, stacks that are translated should be either 1.2.5 stacks, or 1.2.5 stacks converted to 2.0 but not modified . There are two reasons for this:

  • The graphics converters are designed to start from a Macintosh HyperCard 1.2.5-sized card only, because stacks with other card sizes may have objects and graphics improperly aligned.
  • HyperCard IIGS uses a version of the HyperTalk ® scripting language derived from Macintosh HyperCard 1.2.5, so if a stack uses language elements that were not present in Macintosh HyperCard 1.2.5, it may translate correctly but report script errors when the script is executed.

Q How can I perform error trapping in a script?

A Normally, most errors interrupt script execution and immediately present a dialog to the user. Advanced scripters may want to intercept these errors and deal with them more "aggressively." Two new HyperCard properties, lockErrors and lastError, have been provided to control error handling:

  • lockErrors is a Boolean property that has a simple effect: it prevents the display of errors. The errors, however, are still there, and stop execution of the current handler.
  • lastError is a string property that always contains the text of the most recent error dialog, whether displayed or not. Because errors cause handlers to terminate, you'll probably wind up checking lastError from an idle handler.

How do you use lockErrors and lastError? To activate an "error catcher" you can use the following scripts:

on CatchErrors errorSource    -- Begin handling errors.
  global gErrorSource
  set the lastError to empty
  set lockErrors to true
  put errorSource into gErrorSource
end CatchErrors
on ClearErrors        -- Handle errors normally.
  global gErrorSource
  set the lastError to empty
  set lockErrors to false
  put empty into gErrorSource
end ClearErrors
on idle               -- Check for error occurrence.
  global gErrorSource
  if gErrorSource is not empty
  then 
    -- Error-handling code goes here.
    -- gErrorSource = where in your code the error happened.
    -- The lastError = what the error was.
  end if
  pass idle
end idle

If you have a button that does something dangerous, you can surround the dangerous portions of the handler with

on mouseUp
  -- normal error handling out here
  CatchErrors “dangerous operation #1”
  -- Do things that might not work.
  ClearErrors
  -- Now we’re back to normal error handling.
end mouseUp

For more information, be sure to see the HyperCard IIGS Script Language Guide , published by Addison-Wesley.

Kudos to our readers who care enough to ask us terrific and well thought-out questions. The answers are supplied by our teams of technical gurus; our thanks to all. Special thanks to Matt Deatherage, C. K. Haun, Jim Luther, and Jim Mensch for the material in this Q & A column.

*Have more questions? Need more answers? Take a look at the developer technical library on AppleLink (updated weekly) or the Q & A stack on the Developer Essentials disc. *

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

jAlbum 19.2 - Create custom photo galler...
With jAlbum, you can create gorgeous custom photo galleries for the Web without writing a line of code! Beginner-friendly, with pro results - Simply drag and drop photos into groups, choose a design... Read more
BlueStacks 4.140.13 - Run Android applic...
BlueStacks App Player lets you run your Android apps fast and fullscreen on your Mac. Feature comparison chart Version 4.140.13: Highlights/Bug Fixes: Feel free to use BlueStacks as your go to... Read more
Adobe Premiere Pro CC 2020 14.0.1 - Digi...
Premiere Pro CC 2020 is available as part of Adobe Creative Cloud for as little as $52.99/month. The price on display is a price for annual by-monthly plan for Adobe Premiere Pro only Adobe Premiere... Read more
VirtualBox 6.1.2 - x86 virtualization so...
VirtualBox is a family of powerful x86 virtualization products for enterprise as well as home use. Not only is VirtualBox an extremely feature rich, high performance product for enterprise customers... Read more
RoboForm 8.6.8 - Password manager; syncs...
RoboForm is a password manager that offers one-click login, mobile syncing, easy form filling, and reliable security. Password Manager. RoboForm remembers your passwords so you don't have to! Just... Read more
Postbox 7.0.11 - Powerful and flexible e...
Postbox is a new email application that helps you organize your work life and get stuff done. It has all the elegance and simplicity of Apple Mail, but with more power and flexibility to manage even... Read more
calibre 4.9.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
Notability 4.2 - Note-taking and annotat...
Notability is a powerful note-taker to annotate documents, sketch ideas, record lectures, take notes and more. It combines, typing, handwriting, audio recording, and photos so you can create notes... Read more
FoldersSynchronizer 5.0.1 - Synchronize...
FoldersSynchronizer is a popular and useful utility that synchronizes and backs-up files, folders, disks and boot disks. On each session you can apply special options like Timers, Multiple Folders,... Read more
Sketch 62 - Design app for UX/UI for iOS...
Sketch is an innovative and fresh look at vector drawing. Its intentionally minimalist design is based upon a drawing space of unlimited size and layers, free of palettes, panels, menus, windows, and... Read more

Latest Forum Discussions

See All

The Alliance update to Out There: Omega...
Out There is an old go-to recommendation for a lot of mobile stalwarts, but I could never really get into it. This sci-fi survival game that blended elements of interactive fiction and roguelike mechanics just felt a little off-balance and a little... | Read more »
Animal Fury Destination is an action-adv...
Animal Fury Destination is an action-adventure game from independent, Colombian developer Ignicion Games. It's a 3D action game where you'll play as various different characters as you embark on a quest to stop an evil crow sorcerer. [Read more] | Read more »
Shadowgun War Games Closed Beta Impressi...
Shadowgun: War Games is an upcoming free-to-play multiplayer shooter that’s essentially just an Overwatch knock-off. There are hero characters with special abilities, and you compete in 5-v-5 game modes where the goal is to use superior team... | Read more »
Slingsters is a physics-based puzzler fo...
Slingsters is a physics-based puzzle game where the aim is to collect various different monsters by flinging them from one side of a level to the other and into a box. It's also the first game from Nappy Cat and is available now for iOS and... | Read more »
Spiritwish's latest update sees the...
A sizeable update has hit Nexon's MMORPG Spiritwish today. It brings a new game mode, characters and there will also be a special event to celebrate the update with a firework display. [Read more] | Read more »
Maze Machina, a turn-based puzzler from...
The latest game from Arnold Rauers also known as Tiny Touch Tales is now available. You may be familiar with one of his many excellent titles such as Card Crawl, Enyo and Card Thief. His latest endeavour is called Maze Machina and you can grab it... | Read more »
Mario Kart Tour's Ice Tour races to...
Can you believe Mario Kart Tour is already on its 9th tour? The game only launched back in September, and since then it's become increasingly tricky to keep on top of the amount of new content Nintendo is pumping out. [Read more] | Read more »
Apple Arcade: Ranked - Top 50 [Updated 1...
In case you missed it, I am on a quest to rank every Apple Arcade game there is. [Read more] | Read more »
Marvel Future Fight's latest update...
Marvel Future Fight's latest update has added an all-new team of heroes to recruit and do battle with. The 'Warriors of the Sky' include Blue Dragon, War Tiger, Sun Bird, and Shadow Shell. As is the norm, each character comes with their own unique... | Read more »
Klee: Spacetime Cleaners is a fast-paced...
Klee: Spacetime Cleaners is a fast-paced auto-shooter that sports a cute retro aesthetic thathad racked up an impressive 100,000 pre-registers prior to its release. It's available now for both iOS and Android. [Read more] | Read more »

Price Scanner via MacPrices.net

Just in! Apple iMacs on sale for $100-$150 of...
B&H Photo has new 2019 21″ and 27″ 5K iMacs on stock today and on sale for up to $150 off Apple’s MSRP, with prices starting at only $999. These are the same iMacs sold by Apple in their retail... Read more
Save $100 on the 13″ 1.4GHz MacBook Pro at th...
Apple resellers have 13″ 1.4GHz MacBook Pros on sale today for $100 off Apple’s MSRP, and some are including free overnight delivery: (1) Amazon has new 2019 13″ 1.4GHz MacBook Pros on sale for $100... Read more
AT&T offers free 64GB Apple iPhone XS wit...
Open a new line of service with AT&T, and they will include a free 64GB iPhone XS. Credit for the phone is applied monthly over a 30 month lease. The fine print: “Limited Time Requires new line... Read more
New Verizon deal: Apple iPhone XR for $300 of...
Switch to Verizon and sign up with one of their Unlimited plans, and Verizon will take $300 off the price of an Apple iPhone XR (regularly $749), plus get a free $200 prepaid Mastercard. This is an... Read more
Amazon’s popular AirPods sale is back with mo...
Amazon has new 2019 Apple AirPods on sale today ranging up to $40 off MSRP, starting at $129, as part of their popular Apple AirPods sale. Shipping is free: – AirPods Pro: $234.98 $15 off MSRP –... Read more
Apple’s top of the line 10.5″ 256GB WiFi + Ce...
B&H Photo has the top of the line 10.5″ 256GB WiFi + Cellular iPad Air on sale for $599 shipped. That’s $180 off Apple’s MSRP for this model and the cheapest price available. Overnight shipping... Read more
Apple’s refurbished iPad Pros are the cheapes...
Apple has Certified Refurbished 11″ iPad Pros available on their online store for up to $220 off the cost of new models. Prices start at $679. Each iPad comes with a standard Apple one-year warranty... Read more
Just in: Take $100 off the price of the 3.0GH...
Apple resellers are offering new 2018 6-Core Mac minis for $100 off Apple’s MSRP today, only $999. B&H Photo has 6-Core Mac minis on sale for $100 off Apple’s standard MSRP. Overnight shipping is... Read more
Apple has 4-core and 6-core 2018 Mac minis av...
Apple has Certified Refurbished 2018 Mac minis available on their online store for $120-$170 off the cost of new models. Each mini comes with a new outer case plus a standard Apple one-year warranty... Read more
Amazon offers $200 discount on 13″ MacBook Ai...
Amazon has new 2019 13″ MacBook Airs with 256GB SSDs on sale for $200 off Apple’s MSRP, now only $1099, each including free shipping. Be sure to select Amazon as the seller during checkout, rather... Read more

Jobs Board

*Apple* Mobility Pro - Best Buy (United Stat...
**744429BR** **Job Title:** Apple Mobility Pro **Job Category:** Store Associates **Store NUmber or Department:** 000574-Garner-Store **Job Description:** At Best Read more
Geek Squad *Apple* Consultation Professiona...
**757963BR** **Job Title:** Geek Squad Apple Consultation Professional **Job Category:** Store Associates **Store NUmber or Department:** 000433-Henrietta-Store Read more
*Apple* Computing Professional - Best Buy (U...
**754611BR** **Job Title:** Apple Computing Professional **Job Category:** Store Associates **Store NUmber or Department:** 000142-Milpitas-Store **Job Read more
Best Buy *Apple* Computing Master - Best Bu...
**745058BR** **Job Title:** Best Buy Apple Computing Master **Job Category:** Store Associates **Store NUmber or Department:** 001080-Lake Charles-Store **Job Read more
Geek Squad *Apple* Consultation Professiona...
**756640BR** **Job Title:** Geek Squad Apple Consultation Professional **Job Category:** Store Associates **Store NUmber or Department:** 000484-Manchester-Store Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.