public FolderEntry [] getFolders (boolean external) throws IOException
     {
	int		blocks = getFolderBlockCount (external);
	byte		folders [] = new byte [blocks * BLOCKSIZE];
	Data		data = new Data (this, folders);
	Vector		v = new Vector (8);
	int		offset = 0;
	int		folderNum = 0;
	FolderEntry	temp;
	FolderEntry	retval [];

	checkTalking ();
	read (external, ROOT_FOLDER_ADDRESS, folders, 0, folders.length);
	while (offset < folders.length) {
	    temp = new FolderEntry (this, external, folderNum++, data, offset);
	    if (temp.getOffset () == 0xffff)
		break;
	    v.addElement (temp);
	    offset += 2048;
	}

	retval = new FolderEntry [v.size ()];
	for (int i = 0; i < retval.length; i++)
	    retval [i] = (FolderEntry) v.elementAt (i);
	return retval;
     }