A typical installation of a dual boot system one to boot into various images in the following order:
ISOLINUX has the ability to run a custom code instead of a kernel or a boot sector. Since this code is run in an environment where there is no OS, the code has to be written with care. Basically, the only system calls it can make are those supported by the BIOS and the SYSLINUX API calls. More info on COM32 code and the SYSLINUX API can be found here.
This basically consists of two utilities:
Basically, the writeker utility writes a specified list of boot images, to a specified block device where readker.c32 can read from. Every time readker.c32 executes, it reads this list, picks the first member of list, updates the list by removing the first entry, writes the new list back, and finally boots into the image it just read.
Since readker.c32 does not have access to system calls which read filesystems, the only thing it can do, is to read/write sectors from the hard disk (the CDROM is not writeable). So the writeker writes the list to the unpartitioned space in the hard disk between the end of the Master Boot Record and the start of the first partition. Each time one boots into readker.c32, it reads the appropriate sectors of the hard disk, pops the first element of the list, and writes the updated list back, and executes the appropriate image using an appropriate SYSLINUX API call.
So during the [prep] image, the script consults a file which has the bootorder specified. The file consulted depends on the user choices (choice and combination of operating systems). Then this file is run through gsar so that any special configuration information sent to the initial prep image can be passed on to the other images as well. Then it calls writeker with the appropriate bootorder and the harddisk (IDE/SCSI). Thats it!
Sometimes when one uses this CD, one needs to override many default settings. For example, in a network segment without a DHCP server one has to use static IP's. It will be useful if one can remeber that information across reboots as well. This is acheived easily by combining GSAR and autoboot. Before writing the list of images using writeker, one runs it through GSAR. Thus an entry such as "linstall network=%NETWORK% ipaddr=%IPADDR%" will get transformed into "linstall network=static ipaddr=192.168.3.4" or "linstall network=dhcp ipaddr=0.0.0.0" depending on the settings with which one invoked prep.
See downloads section.