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$ZealOS 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: ZealOS 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";