Legacy Documentclose button

Important: The information in this document is obsolete and should not be used for new development.

Previous Book Contents Book Index Next

Inside Macintosh: Text /
Appendix A - Built-in Script Support / WorldScript I


How Calls Are Dispatched

In every script system that is compatible with WorldScript I, the dispatch-table element for every script utility and QuickDraw patch consists of two pointers: one to the WorldScript I implementation of the routine and one to the original routine. In all cases, the WorldScript I routine executes first. In some cases, WorldScript I calls the original routine after its own; in other cases, the pointer to the original routine is NIL and the WorldScript I routine is all that executes. See Figure A-2. This design allows you to place a patched routine so that it executes either before, in place of, or after the WorldScript I routine and allows you to either call the original routine or not call it.

Figure A-2 Dispatch table entry for script utilities and QuickDraw patches

Every script-aware call to system software that executes as a script utility goes through the _ScriptUtil trap ($A8B5). The script management system handles some of those calls, such as GetSMVariable, itself; other calls, such as DrawJustified, it passes to a script system through the script system's script record. Those calls are listed in Table A-11 on page A-26. The script system uses its script utility dispatch table to call the right script utility. See Figure A-3.

When it receives a script utility call, a script's dispatch routine does the following:

  1. It checks to see if the call (as defined by the script utility selector) is within the range of routines handled by the script.
  2. It gets the address of the script utility from the script's dispatch table, using the script utility selector.
  3. It replaces the selector on the stack with the address of its own script record.
  4. It jumps into the WorldScript I routine obtained in step 2. As the routine executes, it obtains script-specific characteristics from the script record passed to it in step 3.
  5. The WorldScript I routine gets the address of the original (Roman) routine from the dispatch table and, if it is not NIL, jumps to that routine upon completion.

Figure A-3 How calls are dispatched to the 1-byte script utilities

A patched low-level QuickDraw call follows a similar path, except that it goes through a QuickDraw trap that has been patched to execute code in WorldScript I instead of passing through the script management system. After determining which script should handle this call (by examining the current font), WorldScript I uses the script's QuickDraw dispatch table to jump to the proper routine. See Figure A-4.

Figure A-4 How calls are dispatched to the 1-byte QuickDraw patches


Previous Book Contents Book Index Next

© Apple Computer, Inc.
6 JUL 1996