User's Guide
In this part of your example, you'll use the same To-Do List program
and create two ICs. The first will contain only IcTestModel
and will be an "interior" or reusable IC. That is, it will not
contain any system startup code and so will not be able to be started like a
"leaf" IC. Call this IC reusable.ic. It
will need to be loaded by another leaf IC when the leaf IC starts. This
happens automatically as a result of an application in the leaf IC including
an application in the reusable IC as a prerequisite. You've
already specified this prerequisite relationship. You did so when you
included IcTestModel as a prerequisite of
IcTestView.
The second IC you will create is the leaf IC that will contain
IcTestView. It will depend on reusable.ic,
which contains IcTestModel.
First, create a reusable IC which contains IcTestModel.
You must do this first because later, when you create the leaf IC which will
depend on the reusable IC, the leaf IC needs to know about the existence of
the reusable IC.
- Note:
- In this and the following sections, some of the detail that was included as
explanations in the previous section will be omitted for brevity.
- If you still have ictest.ic loaded in your image, remove
it with the following:
System removeComponent: 'ictest.ic'
Reload the IcTestView and IcTestModel applications
from the VisualAge Smalltalk library.
- Open the packager. Select Reusable image component as
the type of package to build. Also, enter a name for the packaging
instructions, IcTestReusableIcPackagingInstructions.
- Select the Modify Instructions button at the bottom of the
panel. You'll modify these instructions in much the same way as
you did in the previous example. From the left pane of the
Applications and ICs page, select IcTestModel and click
on >> to add it to the reusable IC. In the middle pane
should appear all the applications that are prerequisites of
IcTestModel. Since you are building a reusable IC, the
packager automatically assigns ICs to these other prerequisites that were
added by the packager when you added IcTestModel. The only
application without an associated IC should be the one you just added,
IcTestModel.
- Since this is a reusable IC and not a leaf IC, you do not need to specify
startup code. However, you do need to specify the name of the IC
file. Select the Startup Code tab. Enter
reusable.ic as the name of the Output
File.
- Select the Reduce button to generate the IC. When the
reduction is complete, verify that there were no errors encountered. If
there are errors, refer to Troubleshooting or to Advanced packaging to resolve them.
- At this point, another useful check you can perform is to check the status
of everything the packager included in the IC being created.
We're illustrating this here because it's easier to correlate
what you see in the Browse Image Contents window with what you specified to be
included. This is because in a reusable IC what is included in the
image is the entire contents of only the applications you specified.
This is as opposed to browsing the contents of a leaf IC which includes
startup code and for which reduction has been performed.
Select Examine & Fix Problems then select Image
Contents from the Browse menu. You'll see lists
of Applications, classes, pool dictionaries, and global variables along with
notations indicating that they were excluded, included because of a reference,
or included as part of the prerequisite chain. You can expand the lists
and sublists to see more information.

Above is the list of applications expanded with application
IcTestModel expanded to show its classes and class Thing
expanded to show its methods and instance variables. Application
IcTestModel and its classes are shown annotated with included
- referenced, which indicates they are included as part of the IC per
your packaging instructions.
This kind of check is always useful regardless of whether you're
packaging a reusable or a leaf IC or a reduced runtime image. It is
especially so in the cases where reduction is performed or where prerequisite
applications are added by the packager. You should verify what the
packager decided to include in, or to remove from, the image being created is
what you expect.
- Specify the disposition of your packaging instructions. Select the
Save Instructions button. Specify the class name as
IcTestReusableIcPackagingInstructions and the application name as
IcTestPackagingInstructions. Also select Keep these
instructions in memory. This enables the packager to know about
this reusable IC you are creating when you create the leaf IC that will depend
on it. When complete, select Save now.
An alternative way to enable the packager to know about the reusable IC you
are creating is to unload IcTestModel, explicitly load its IC,
reusable.ic, and then begin packaging of the leaf IC.
This may be a more desirable approach in a couple of situations. First,
if you do not have access to the instructions used to create the reusable
IC. Or second, if you are building a leaf IC on a memory constrained
machine and have a large number of prerequisite ICs that are already loaded in
your development image. In the second case, loading the packaging
instruction classes for the prerequisite ICs will use up considerable
additional memory.
Since you already have the packaging instructions for the reusable IC in
memory, you will use them instead of loading
reusable.ic.
- To complete packaging of the reusable IC, select the Output
Image button to output the reusable IC file,
reusable.ic.
Now, on to creating a leaf IC for IcTestView that will depend on
the reusable IC you've just created which contains
IcTestModel.
- Select the Choose Instructions button.

- Note the entry in the left pane of the Instructions In Memory
page. The packaging instructions,
IcTestReusableIcPackagingInstructions, from the creation of the
reusable IC, are left in memory. You need now to create instructions
for your leaf IC. Switch to the Create New Instructions page
to create the instructions for the leaf IC. Select VisualAge
startup image component w/ windows. Enter
IcTestDependentLeafIcPackagingInstructions as the name of the
instructions.
- Select the Modify Instructions button. From the left
pane of the Applications and ICs page, select IcTestView
and click on >> to add it to your leaf IC. Again note in the
center pane the prerequisite applications that were added in addition to
IcTestView. In addition to the VisualAge runtime ICs,
IcTestModel was also added as a prerequisite. This is
because you defined it as a prerequisite of IcTestView when you
created the applications. Select Default ICs to assign ICs
to these prerequisite applications.
- Note that you still need to assign an IC to IcTestModel.
Do this by using the packaging instructions left in memory,
IcTestReusableIcPackagingInstructions, for the reusable IC you
created for IcTestModel. Select
IcTestReusableIcPackagingInstructions from the right pane and click
on the right << button.
You should now have ICs assigned to all of the prerequisite applications
appearing in the center pane. You can verify this by scrolling the list
and ensuring there are IC entries for all applications except
IcTestView.
- Since this is a leaf IC, you need to specify startup code. You also
need to name the IC file. Switch to the Startup Code page
and enter the following for the Application Entry Point:
ToDoListView new openWidget
Also enter depleaf.ic for the Output
File.
- To create the IC file depleaf.ic, select the
Reduce button. When the reduction is complete, verify that
no errors were encountered. Select Save Instructions.
Specify the class as IcTestDependentLeafIcPackagingInstructions and
the application as IcTestPackagingInstructions as the application
in which to save the instructions. You can choose to keep these
instructions in memory or discard them. Select Save
now.
- Finally, output the IC file depleaf.ic by selecting the
Output Image button.
- Now that you have your reusable and leaf ICs, test them. Do so by
either or both of the methods that were described in the previous
section. If you explicitly load depleaf.ic first
without loading reusable.ic, once the load is complete, you
can verify depleaf.ic was also loaded due to the
prerequisite relationship by browsing the IcTestModel
application.
In the first example, you created a single IC for your example To-do List
program. In the second example, you saw how to package a program as two
ICs, one dependent on the other. In both of these examples, the runtime
scenario is straightforward. The end user simply starts the leaf
IC. The VisualAge Smalltalk runtime system takes care of the
rest. In the following example, you're going to see how to
programmatically manage the loading and unloading of ICs.
[ Top of Page | Previous Page | Next Page | Table of Contents | Index ]