'; window.popUpWin.document.write(zhtm); window.popUpWin.document.close(); // Johnny Jackson 4/28/98 } //--> Windows 98 Professional Reference -- Ch 12 -- Supporting Devices


Windows 98 Professional Reference

Previous chapterNext chapterContents


- 12 -
Supporting Devices



Devices, devices, devices! Back when PCs were new, there was a straightforward list of devices you could install and use, and the choices from different manufacturers all worked pretty much the same. You had Winchester-type hard disks, floppy disk drives, maybe a serial port or two, a parallel port, a display adapter, and a monitor. Oh, and maybe you had a modem hooked up to one of those serial ports, and a printer connected to a parallel port. The most difficult decision was whether you wanted to use a color graphics adapter or a monochrome display adapter. And all this was accomplished on a single bus type, the Industry Standard Architecture (ISA) bus.

Well, progress being what it is, it was obvious that new devices would have to be invented to take advantage of

new techniques that offer better performance and greater capabilities in PCs. Unfortunately, all the old device types still have to be supported, too! (Well, within limits, anyway. For instance, we don't think you can even get a driver for a Hercules monochrome graphics adapter card for Windows 98!)

Of course, operating systems in those days were rudimentary beasts, at best. But as device sophistication grew in PCs, operating systems had to improve dramatically to keep up with things--and so that you wouldn't have to hold a PhD in computer science to manage the myriad devices available today and make them all work together.

Windows 95 introduced the idea of Plug and Play (PnP) support in the operating system. Furthermore, Microsoft worked with hardware designers to come up with the hardware portion of PnP, so that with today's computers, setting up devices is generally a snap. Although unique problems can occur, PnP has made support for different devices much easier than in years past.


NOTE: Although it's de rigueur to pretend that the PC world is the one, true, personal-computing arena, it's not really true that Windows 95 introduced the idea of Plug and Play support in operating systems. Using no name at all (and, of course, using different specifications), Macintosh computers have long supported the concept of "plug and play." We're not apologists for the many shortcomings of the Macintosh OS, but you have to give Apple credit for making some things much easier than the state of the art at the time, which in the early PC world meant dip switches, jumper blocks, and figuring out IRQs, DMAs, and I/O port addresses on your own.


In this chapter you learn about device support under Windows 98. You'll learn about the technology of device support, about the capabilities Windows 98 includes to support different devices, and how to manage devices.

About Windows 98 Device Support

Windows 98 includes the following key features that enable you (and it) to manage multiple devices in computer systems:

Understanding IRQs, DMAs, Memory, and I/O Settings

The nice thing about Windows 98 is that you really don't need to understand IRQs, DMAs, and I/O port addresses, even though they still exist and are vital ways for devices to communicate with the computer system itself. There are times, however, when you will need to know this information--mostly to support legacy hardware devices or to resolve some sort of conflict that Windows 98 can't resolve for itself. To prepare for those times, review the information in the following sections.

About Interrupt Requests (IRQs)

IRQ is short for Interrupt Request. Connected to the processor are a number of Interrupt Request lines, which are used by devices to signal the processor that they have data to send to the processor or require some sort of attention by the processor. In the standard PC architecture, there are 16 IRQ lines, divided into two groups of 8 lines. Each hardware device that communicates with the processor over one of the system busses (ISA, EISA, or PCI) uses an IRQ to signal its needs to the processor. On ISA and PCI busses, IRQs are said to be edge sensitive, meaning that they can simply signal on and off states by using a single signal level. On the EISA bus, IRQs can be level sensitive, with multiple levels of signals, each one supporting a different device, on a single IRQ. The idea on EISA was that devices could share the scarce IRQ lines on the system, but the unfortunate reality is that this doesn't work very well; you should dedicate a single IRQ to a single device that requires one, even on EISA systems. Technically, even on ISA busses, IRQs can be shared among devices, although in such cases two devices cannot use the IRQ at the same time; if there is any chance of this happening, then the IRQ should not be shared. Generally, always try to avoid sharing IRQs. Figure 12.1 shows a standard set of IRQ assignments seen with the System Information utility built into Windows 98.

Figure 12.1

IRQ assignments in a standard system.


NOTE: IRQs are also called hardware interrupts. They are completely distinct from software interrupts. A software interrupt (Int) is a signal from an application to the operating system, telling the operating system to carry out some function for the program. For instance, you may see references at times to different DOS function interrupts such as Int 27h, or Int 10h, which is used for BIOS calls (and there are many others). The point is, software interrupts shouldn't be confused with hardware interrupts.


Direct Memory Access (DMA)

At times, a device needs to transfer large amounts of data directly into a system's memory, and doesn't require the processor to examine all that transferred memory as it is transmitted. For example, hard disks often transfer a great deal of data into and out of memory at one time, and can use DMA techniques to accelerate this transfer. (Although modern EIDE drives do not use DMA, SCSI hard disks often do.) Other examples include some network interface cards and many sound cards. Such devices can realize significant performance advantages by setting up a Direct Memory Access transfer, in which the system lets them transfer data directly into memory, using certain rules. Generally, DMAs allow data to be transferred into or out of memory without involving the processor, which is free to carry out other tasks while the DMA operation is running. Eight DMA channels (0-7) are available on most PCs. DMA channels cannot be shared between devices. Figure 12.2 shows a typical set of DMA assignments.

Figure 12.2

Typical DMA assignments.

Memory Assignments

Memory assignments refer to the requirement of some hardware devices that they have some of the system's memory addresses designated to them, usually because the device contains some memory that an application or driver needs to access. An example of this is a display adapter, which has its own memory that contains all the information shown on the screen. These memory assignments cannot overlap real RAM installed in the system, and clearly cannot be shared between devices. Figure 12.3 shows a typical set of memory address assignments.

Figure 12.3

Typical memory assignments.


I/O Port Addresses

I/O port addresses identify small areas of system memory (RAM) that are set aside so that information can be transferred between a program on the system (such as a driver) and an installed device (such as a mouse). Programs cannot send data directly to most devices; instead, they place the data in a set of I/O port addresses, and the device can take the data from that small chunk of memory, and vice versa. I/O port addresses cannot be shared; even more important, there can be no overlaps between the addresses. Figure 12.4 shows the beginning of a list of typical I/O port addresses.

Configuring IRQ Addresses

When you're configuring IRQ addresses, you should be aware of the following standard assignments for devices:

IRQ Reserved For
0 System Timer (always)
1 Keyboard (always)
IRQ Reserved For
2 Cascade IRQ for handling signals from IRQs 8-15; can sometimes be used for devices, although generally it's a good idea to avoid using it
3 Serial ports (COM2 and COM4)
4 Serial ports (COM1 and COM3)
5 Printer port 2 (LPT2); can often be used for other devices like sound cards because few systems have two LPT ports installed
6 Floppy disk controller (always)
7 Printer port 1 (LPT1); older sound cards shared this IRQ with the printer under DOS, but that's not possible under Windows 98
8 System CMOS/Real-Time Clock (always)
9 Usually open
10 Cascade IRQ for passing IRQ signals from IRQs 8-15 to IRQ 2
11 Often occupied by installed SCSI controller; otherwise available
12 PS/2 Mouse Port (available for use if a serial mouse is being used instead)
13 Numeric data processor (always in 80486 and Pentium processors; was optional with 80386 family and not used for 80486sx family)
14 Usually open, unless system has two hard disk controllers, in which case one will be assigned IRQ 14
15 Usually used by hard disk controller

Figure 12.4

Typical I/O port address assignments.

There are two good ways to view the specific device assignments being used in any particular system. The first is to use the Microsoft System Information utility included with Windows 98 (MSINFO32.EXE). The second involves opening the System control panel, moving to the Device Manager tab, selecting Computer at the top of the tree, and clicking the Properties button, which brings up the Computer Properties dialog box shown in Figure 12.5. Use the option buttons at the top of the dialog box to look at different types of reserved resources.


NOTE: For the remainder of the chapter, the Device Manager tab in the System control panel is referred to simply as "Device Manager."


Figure 12.5

Using Device Manager to view resource assignments.

You can also view the specific resource assignments for a single device, if you need to. Using Device Manager, select the device you want to view and click the Properties button. Then move to the Resources tab, which will show you the resources being used by that device, as in Figure 12.6.

Figure 12.6

Viewing resources for a specific device.

Understanding Plug and Play

Plug and Play (PnP) is a collection of specifications that provide automatic configuration of devices supporting PnP. For full support of PnP functions, the system must have a PnP-capable Basic Input/Output System (BIOS). The goals for the PnP design are to do the following:

PnP meets these original design goals. Using PnP, devices can be automatically configured quickly and easily so that a system avoids any resource conflicts.

PnP works differently for different data busses. Following are some of the key points for different busses you might encounter:


TIP: Some newer systems support a Plug and Play setting in their CMOS setup program. Such settings must be turned on (to enable full PnP support) prior to installing Windows 98. If Windows 98 is mistakenly installed on such a system with the setting turned off, then some devices may not be fully recognized by the operating system, or may not function normally.
When this happens, you can enable the setting and rerun the Windows 98 installation program to correct the installation.


Understanding Real-Mode versus Protected-Mode Drivers

Windows 98 supports two types of device drivers: real- and protected-mode. Real-mode drivers are generally designed for MS-DOS systems, but can still be used under Windows 98. They are loaded through the CONFIG.SYS file and not by Windows 98 itself. Because they are loaded before Windows 98 boots, they run in real-mode on the system, and can be accessed by any processes running under Windows 98, such as MS-DOS programs that can make use of them. Because they are running in real mode, however, they can be somewhat less stable than protected-mode drivers, and they do not receive the benefits of Windows 98's Plug and Play support. Still, when necessary, the ability to load them can help you access a device that you could not make use of in any other way.

Protected-mode drivers are loaded by Windows 98 through the Device Manager tree (stored in the system's Registry). They, too, can be accessed by any processes running on the system, including most MS-DOS programs, and Win16 and Win32 programs.

A number of real-mode device drivers are known to work under Windows 98 and are supported. They are listed in the IOS.INI file stored in the \Windows directory. You should check this file; some of these drivers have protected-mode versions available, a fact that is noted (usually with "PM driver exists") in this file.

Managing Devices

Knowing about device technology won't help you when it's time to manage the devices! In this section you learn how to work with devices and Windows 98. You'll find out about adding and removing devices, working with non-PnP devices, and resolving configuration problems. You'll also learn about working with certain specific device types.

Installing New Devices

There are two types of devices you install under Windows 98: bus-connected devices and peripheral devices (which usually connect to some sort of adapter on the bus or on the motherboard). Installing and configuring peripheral devices, such as modems, printers, and some multimedia devices, is covered elsewhere in this book. Here, you'll learn about bus-connected device management.

Installing PnP devices on PnP-capable systems is fairly easy. Generally, you simply install the device and then boot the system. The BIOS should recognize that a new device has been added, and should automatically install the necessary device drivers, or at least prompt you for the appropriate device drivers from a manufacturer-supplied floppy disk or the Windows 98 CD-ROM.

If the system isn't recognizing a PnP device that you've just installed, check the following:

If these steps fail to recognize the device, contact either the computer manufacturer or the device manufacturer for additional assistance. In rare cases there may be some sort of incompatibility that they should know about, or they may be able to advise you on additional steps, given their particular hardware.


TIP: If a PnP device in a PnP system isn't being recognized, force-loading its driver (which you can do if Add New Hardware fails to detect it) usually won't resolve the problem.


Installing a non-PnP device may involve additional steps, depending on the device itself. Basically, installing such a device revolves around three key steps: configuring the device appropriately, installing the device, and then installing the driver in Windows 98. Depending on the device, you might perform the configuration step either before or after it's installed. For example, a device with dip switches or jumpers must be configured prior to installation. Other devices may be configurable from software supplied with the device. Check the documentation that came with the device.


Dip Switches and Jumpers: An Idea Whose Time Has Passed


Although it would be nice to fully eradicate dip switches and jumpers on devices, sometimes you still have to deal with them. The good news is that once they're set, you usually don't have to mess with them ever again.
Jumpers are small, rectangular pieces of plastic (usually black, with a gold-plated sheet of metal inside) that are designed to fit over two or more pins on an interface card, or on the motherboard. They are usually a bit smaller than the diameter of a pencil eraser. Dip switches are made up of small switch blocks (often light blue or black, with white switches), in which each switch can be set to two or three positions.
Dip switches almost always have two positions, with one direction representing on (or 1) and one representing off (or 0). Jumpers represent on (or 1) when they connect two pins, and off (or 0) when they are connected to only one pin.
It's always best if you have the documentation that describes the available jumpers or dip switches, because every card uses them differently, and you often can't figure out how they should be set. On better-designed cards, however, printed clues next to the switches or jumper pins can often help you discern their purpose and use when no other avenues are available. For instance, SCSI devices sometimes have to have their SCSI address set to a number between 0 and 7, so if you see an eight-position dip switch and printing on the circuit card next to it that says "address," or "SCSIID," or something like that, you can usually guess that those switches set the address. Sometimes they're a bit harder to figure out, because you can also count to 7 with only three binary digits (001 = 1, 010 = 2, and so on up to 111, which equals 7 in binary), and some cards use this device.
Trying to guess at dip switch settings and jumper settings is almost always a bad idea, although sometimes you simply have no choice. One thing to check first, however, is for a Web site for the manufacturer of the card or device. Most companies publish these settings for their cards and devices, even long after they're no longer being sold.


To configure a non-PnP device, you first have to find out what resources it requires so that you can set it appropriately. Open Device Manager, select Computer in the hardware tree, and then click the Properties button. Using the dialog box shown in Figure 12.5, locate available resources that the device needs: IRQs, DMA channels, and Memory I/O Ports.

After you have identified the resources, you may want to reserve them. This is important for devices that may not be installed all the time. Reserving the resources needed by a device ensures that other devices won't be assigned those resources in error. In the Computer Properties dialog box, move to the Reserve Resources tab shown in Figure 12.7. For each of the required resources, click the Add button and reserve the resources needed by the device.

Figure 12.7

Use this dialog box to reserve resources for devices.

Next, configure and install the device. This may be done on the device itself before it's installed, or you may have to install it first and then use a software program (possibly DOS-based) to set the device to use the resources you identified in the previous step.

After the device is configured and installed, start the system. You should then run the Add New Hardware Wizard to let Windows 98 identify the device, if it can. If it is not identified by the wizard, you can specify the driver manually in the Add New Hardware dialog box shown in Figure 12.8. Select the appropriate category and click the Next button.

Figure 12.8

Manually selecting a hardware category.

Next you see a dialog box in which you choose both the manufacturer and the exact model of the device (see Figure 12.9). Select both settings, and click Next to install the driver. If the device you're installing is not listed, and you have a floppy disk or set of driver files from the manufacturer, click Have Disk, and then select the driver files for installation.

Figure 12.9

Choosing a manufacturer and model.

After you've installed the appropriate driver by using the preceding steps, shut down and restart the system (it's best to power-off the system). After you restart the system, the device should be active and available. You can check the device's status in Device Manager.


TIP: If a device doesn't function when the system boots, you may be able to garner some information as to what the problem is by performing a logged boot with the Windows Startup menu. See Chapter 36, "The Windows 98 Boot Process and Emergency Recovery," for more information on performing a logged boot. Information in Chapter 37, "Tools and Strategies for Troubleshooting Windows 98," may also be helpful.


If the device is not functioning, open Device Manager, select the device (it should have a trouble icon next to it), and click the Properties button. Move to the Resources tab, which should show what conflicts exist. Figure 12.10 shows the Resources tab for a working device.

Figure 12.10

A device's Resources tab in Device Manager.

If there is a conflict, try deselecting the Use Automatic Settings check box, select the resource type that you need to change, and then click the Change Setting button. You can select other resources for the device in this way, although you may need to reconfigure the device after you've done so, using whatever procedure the device requires.

Updating and Removing Device Drivers

Updating device drivers with newer versions is a simple procedure. First, of course, you need to obtain the newer drivers. With some devices, the manufacturer may specify an installation routine. Otherwise, open Device Manager and move to the Driver tab in the Properties dialog box for the device. Click the Update Driver button to load the new device driver. You will be prompted for the new driver files' location.

To remove a device from the system, open Device Manager, select the device, and then click the Remove button. If you are using Hardware Profiles, you see the Confirm Device Removal dialog box shown in Figure 12.11, which asks whether you want to remove the device generally, or only from the current Hardware Profile. Choose the appropriate response and click OK.

Figure 12.11

Confirm Device Removal dialog box.


NOTE: See Chapter 9, "Hardware Profiles" for details on managing Hardware Profiles under Windows 98.


Recovering from Windows 3.x Driver Installations

It is possible to install a 32-bit device driver intended for use under Windows 3.x into Windows 98, which can cause problems. To remove the driver, you have to remove any reference to it from the SYSTEM.INI file. If the system is booting, you can simply edit the SYSTEM.INI file with Notepad. If it is not booting, however, you first need to boot the system in Command Prompt Only mode (Safe Mode may also work), and then remove all references to the device from the SYSTEM.INI file in the \WINDOWS directory. (Settings in SYSTEM.INI override settings in the Registry.) Then, using Safe Mode, remove references to the device in Device Manager. Finally, restart the system and use the procedure discussed earlier in this chapter for installing device drivers in Windows 98.

Understanding Specific Devices

Many different devices have settings and features of which you may not be aware. This section discusses different device capabilities and tips, to help you manage such devices. that some device information may be found in other chapters that focus on different subjects, such as Multimedia devices or modems.

System Devices

A number of the default system devices listed in Device Manager have settings that control the way they behave. You control these settings through each device's Properties dialog box. Figure 12.12 shows Device Manager with a number of system devices from a standard ISA/PCI system displayed.

Figure 12.12

Device Manager with a standard set of system devices.

Table 12.1 shows you available settings for system devices that support such settings.

Table 12.1 System Device Settings

Device Setting Description
EISA Direct Memory Reserve DMA Buffer Lets you reserve a certain amount of memory for the DMA buffer (by default, 16KB is set aside by the operating system).
Access Controller Restrict DMA Transfers Lets you specify that DMA transfers must take place below either 16MB or 4GB (in the virtual memory space). Some SCSI hard disks on older systems can only support DMA transfers below 16MB.
Numeric Data Use numeric This device's Settings tab reports on
Processor processor whether the system has the infamous Pentium floating point bug. If so, you can choose to force Windows to use internal floating-point emulation routines by choosing Never Use the Numeric Data Processor.
PCI Bus Device Enumeration This setting lets you choose to use either the hardware or the system's BIOS to report on PCI devices connected to the bus. Generally, Use Hardware should be selected, although if a PCI-connected device isn't working properly, you can try the Use BIOS setting.
  Override Bridges When selected, causes the system to ignore the system's BIOS settings for PCI devices.
  IRQ Steering Windows 98 cannot assign IRQs to PCI devices. Normally, this is not a problem, as the bus itself resolves most such problems. For some devices, however, you may want to activate a feature called IRQ steering, in which Windows 98 can intercept IRQ configuration requests for PCI devices and "steer" them to an unused IRQ. Typically, this feature is used only with docking computers.
Plug and Play BIOS Disable NVRAM/ Updates if Windows is not starting or shutting down ESCD. Select this setting properly. Sometimes there can be problems when Windows tries to update the system's Plug and Play BIOS settings.

Display Adapters

Display adapter drivers can be maintained in two ways: through Device Manager and through the Display control panel. To install and maintain display adapter drivers through the Display control panel, move to the Settings tab and click the Advanced button. Then move to the Adapter tab and click the Change button.

The Advanced button on the Settings tab displays the properties for the display adapter, divided up into multiple tabs. There are a number of useful settings on these tabs. Figure 12.13 shows the first such tab, General. On this tab you can choose the size of fonts that you want to use with the display, and you can specify how you should be prompted and how the system should react to different selected monitor resolutions and color depths. You can also choose to display the settings icon on the taskbar, so that you can quickly make most monitor changes "on the fly."

Figure 12.13

Display adapter properties, General tab.

The Adapter tab, shown in Figure 12.14, shows you detailed information about the display adapter, and also lets you choose the refresh rate at which to drive the monitor. that the monitor must support the combination of resolution, color depth, and refresh rate that you select, or your display may become unreadable (boot in Safe Mode and correct the setting, if necessary).

The Monitor tab lets you choose whether the monitor is Plug and Play-compliant, whether the system should automatically try to detect Plug and Play monitors, and whether the system should reset the display whenever the system's power management suspends and then resumes operations. You can also specify a different monitor by clicking the Change button on the Monitor tab. that it's important that you select a monitor on the Monitor tab that matches the actual, physical monitor, so that Windows can correctly set the refresh rate and other properties appropriately.

Figure 12.14

Display adapter properties, Adapter tab.

On the Performance tab you can drag a slider control to affect how much of the display adapter's acceleration feature should be used by Windows. If you are having strange display problems, such as clipped regions of the screen, or other problems when certain types of programs run, try reducing the acceleration setting on the Performance tab.

The final tab, Color Management, lets you choose an appropriate color management (*.ICM) file for your specific monitor. You may have to acquire such a file from your monitor's manufacturer. Using the Color Management tab, you can more closely approximate color standards for a given monitor.


NOTE: A display's color depth, the number of colors it can display, is controlled by the amount of memory available on the display adapter (as well as the capabilities of the monitor). For instance, a monochrome 640 * 480 display requires only 307,200 bits, or about 38KB. In this instance, only one bit of memory is required for each pixel. To display more colors you need more bits per displayed pixel. The following table shows the number of bits per pixel required for different color depths:



Color Depth



Bits per Pixel



Monochrome



1



16 Colors



4



256 Colors



8



32,768 Colors



15



65,536 Colors (High Color)



16



16.7 Million Colors (True Color)



32


Multiple Monitor Support

New to Windows 98 is the ability to support multiple monitors on multiple display adapters. If you have the right hardware, this can be a very useful feature. For example, you can program on one monitor and test your code on another. Or you can work on a document on one monitor, and keep your appointments and email open on another. The possibilities are limited only by your imagination.

To use Multiple Monitor support, you must be using PCI- or AGP-based display adapters, and of course you must have one display adapter for each monitor you want to drive. Install the second display adapter just as you would any other device: install it with the system off, turn on the system, and let PnP detect and install the appropriate drivers. Restart Windows 98, and you should be off and running. that the following display adapter chip sets are known to be supported at this time:

Other adapter types may also be supported. Check with the manufacturer of the adapter you want to use.

When you boot a system that is successfully using multiple monitors, the secondary monitor should display a message as the system initializes, indicating that the monitor is functioning. If you do not see such a message, verify that the display adapter uses a supported chip set (check the preceding list) and that the driver is properly installed (look in Device Manager).

Some programs may not function correctly with multiple monitors. For instance, programs that use Adobe Type Manager, as well as some remote control programs or programs that bypass the Windows graphical management services will not work correctly. If you suspect an application-specific problem (test and make sure that the built-in Windows applications work properly with both monitors), you should contact the application vendor for more information.

Serial Ports

Communications ports (also known as COM ports, serial ports, and RS-232C ports) are typically used to communicate with modems or to interface to certain other RS-232C devices. Generally, COM ports don't require much support, but supporting more than two COM ports can become problematic. Basic PCs support as many as four COM ports (COM1-COM4) but assign them standard IRQs in such a way that it is virtually impossible to use all four ports at once. By default, COM1 and COM3 use IRQ 4, while COM2 and COM4 use IRQ 3. Remember that you cannot generally share IRQ assignments between devices simultaneously. Therefore, a serial mouse connected to COM1 and a modem using COM3 will not work simultaneously unless one of them uses a different IRQ. For PnP-based computers, Windows 98 avoids such conflicts by remapping the IRQs. For non-PnP systems, you will have to do this yourself, using Device Manager. You can assign COM3 and COM4 to other available IRQs in the system.


TIP: When you assign COM numbers to devices, such as an installed internal-modem, remember that you cannot have missing COM port numbers. For instance, if a system has COM1 and COM2 serial ports on its motherboard, you cannot set an internal modem to act as COM4 unless some other device is acting as COM3.


Windows 98 will support up to eight COM ports, provided there are sufficient IRQs available (not an easy task!). If you require more than four COM ports for some application, a better solution is to purchase and use a multi-port communications card (such as the excellent cards from Digi), which usually will support eight or more COM ports using a single IRQ on the system. Such devices are commonly used for modem pools, for instance.

Conclusion

One of the real benefits of Windows 95, and now of Windows 98, is its support for Plug and Play hardware. If you remember the nightmare of supporting devices in the pre-PnP world, you undoubtedly find PnP to be a welcome feature. Using current hardware, PnP makes managing the devices on the system almost completely painless.

In this chapter you learned about PnP and how it works. You also learned about automatically and manually managing device drivers on a Windows 98 system, and finally reviewed some information about some specific device types. For more detailed device information not discussed in this chapter, see appropriate topics elsewhere in this book. For instance, you might want to review the following chapters:


Previous chapterNext chapterContents

Copyright, Macmillan Computer Publishing. All rights reserved.