CTask *tour_put, *tour_task;
Bool tour_okay_pressed;

U0 TourPutTask()
{
	CDoc *doc;
	I64   ch;

	DocTermNew;
	WinHorz(TEXT_COLS / 2, TEXT_COLS - 2);
	WinVert(TEXT_ROWS / 2 + 5, TEXT_ROWS - 7);
	LBts(&Fs->display_flags, DISPLAYf_WIN_ON_TOP);
	WinToTop;
	Fs->border_src	= BDS_CONST;
	Fs->border_attr	= LTGRAY << 4 + DriveTextAttrGet(':') & 15;
	Fs->text_attr	= LTGRAY << 4 + BLUE;
	Fs->win_inhibit	= WIG_NO_FOCUS_TASK_DEFAULT;
	doc = DocPut;
	doc->flags |= DOCF_FORM;
	DocCursor(FALSE, doc);
	"$$WW+H,1$$";
	while (TRUE)
	{
		Refresh;
		if (MessageScan(&ch,, 1 << MESSAGE_KEY_DOWN) && (ch == CH_ESC || ch == CH_SHIFT_ESC))
		{
			Kill(tour_task->parent_task, FALSE);
			break;
		}
		DocLock(doc);
		if (ch == CH_SPACE && doc->cur_entry != doc) {
			if (doc->cur_entry->de_flags & DOCEF_LINK)
				'' CH_SPACE;
			else if (doc->cur_entry->type_u8 == DOCT_BTTN)
				tour_okay_pressed = TRUE;
		}
		DocUnlock(doc);
		if (tour_okay_pressed)
		{
			Fs->win_inhibit = WIG_NO_FOCUS_TASK_DEFAULT;
			if (sys_focus_task == Fs)
				WinRefocus;
		}
		else
		{
			Fs->win_inhibit = 0;
			WinFocus;
		}
	}
	tour_put = NULL;
}

U0 TourPut(U8 *st,Bool wait_okay=FALSE)
{
	CDoc  *doc;
	CTask *old_focus_task;

	if (TaskValidate(tour_put))
	{
		doc = DocPut(tour_put);
		DocClear(doc);
		DocPrint(doc, "%s", st);
		if (!wait_okay)
			tour_okay_pressed = TRUE;
		else
		{
			DocPrint(doc, "\n\n$$CM-RE+CX,LE=-2$$$$BT,\"Okay\",LM=\"b\"$$\n\n");
			DocFormBwd(doc);
			old_focus_task = sys_focus_task;
			tour_okay_pressed = FALSE;
			do Refresh;
			while (!tour_okay_pressed);
			WinFocus(old_focus_task);
			DocClear(doc);
		}
	}
	else
		Kill(tour_task,, TRUE);
}

public I64 PopUpTourPart()
{
	I64   i;
	CDoc *doc = DocNew;

	DocPrint(doc,	"$$PURPLE$$ZenithOS Tours$$FG$$\n\n"
					"$$CM+LX,4,4$$$$BT,\"Part  1: The help system\",LE=1$$"
					"$$CM+LX,4,4$$$$BT,\"Part  2: The basics\",LE=2$$"
					"$$CM+LX,4,4$$$$BT,\"Part  3: Editing and running programs\",LE=3$$"
					"$$CM+LX,4,4$$$$BT,\"Part  4: Adding macros to PersonalMenu\",LE=4$$"
					"$$CM+LX,4,4$$$$BT,\"Part  5: Choose filename, choose dir\",LE=5$$"
					"$$CM+LX,4,4$$$$BT,\"Part  6: AutoComplete\",LE=6$$"
					"$$CM+LX,4,4$$$$BT,\"Part  7: Search (Find)\",LE=7$$"
					"$$CM+LX,4,4$$$$BT,\"Part  8: ZenithOS file masks\",LE=8$$"
					"$$CM+LX,4,4$$$$BT,\"Part  9: Editor filter\",LE=9$$"
					"$$CM+LX,4,4$$$$BT,\"Part 10: Debugging\",LE=10$$"
					"$$CM+LX,4,4$$$$BT,\"Part 11: Wow!!\",LE=11$$"
					"$$CM+LX,4,4$$$$BT,\"Part 12: Test Suite\",LE=12$$"
					"$$CM+LX,4,4$$$$BT,\"Done\",LE=DOCM_CANCEL$$\n");
	doc->flags |= DOCF_FORM;
	i = PopUpPrint("WinMax;DocMenu(0x%X,0);", doc);
	DocDel(doc);

	return i;
}

U0 TourMenu()
{
	U8  buf[STR_LEN];
	I64 i;

	tour_task = Fs;
	tour_okay_pressed = TRUE;
	tour_put = Spawn(&TourPutTask, NULL, "TourPut",, Fs);
	TaskWait(tour_put);
	while (TRUE)
	{
		Cd(__DIR__);
		AutoComplete;
		if (LBtr(&tour_put->display_flags, DISPLAYf_SHOW))
			WinZBufUpdate;
		i = PopUpTourPart;
		if (i > 0)
		{
			if (!LBts(&tour_put->display_flags, DISPLAYf_SHOW))
				WinZBufUpdate;
			StrPrint(buf, "Tour%X.IN", i);
			ExeFile(buf);
		}
		else
			break;
	}
	Kill(tour_put);
}

"DocClear;WinMax;\n";
Refresh(2);
TourMenu;
Message(MESSAGE_KEY_DOWN, 0, SC_CURSOR_DOWN | SCF_CTRL);
"Cd;Dir;\n";
