hschumann2/TempleOS-Source-Code
0847
1 2#help_index "Task/Settings"3 4public CTaskSettings *SettingsPush(CTask *task=NULL,I64 flags=0)5{//Typically, called at start of an application.6//It saves many settings so they can be restored7 //at the end of the application with SettingsPop().8 9 CTaskSettings *tmpse;10 CDoc *doc;11 if (!task) task=Fs;12 if (!TaskValidate(task)) return NULL;13 tmpse=CAlloc(sizeof(CTaskSettings),task);14 tmpse->cur_dir=DirCur(task,task);15 tmpse->draw_it=task->draw_it;16 GrPaletteGet(tmpse->palette);17 tmpse->task_end_cb=task->task_end_cb;18 19 if (!(flags&TSF_SAME_SONG)) {20 if (tmpse->song_task=task->song_task) {21 Suspend(task->song_task);22 Snd;23 }24 task->song_task=NULL;25 }26 27 if (tmpse->animate_task=task->animate_task)28 Suspend(task->animate_task);29 task->animate_task=NULL;30 31 if (doc=DocPut(task)) {32 tmpse->hide_cursor=!Bt(&doc->flags,DOCf_HIDE_CURSOR);33 tmpse->highlight_cursor=!Bt(&doc->flags,DOCf_DONT_HIGHLIGHT_CURSOR);34 tmpse->scroll=!Bt(&doc->flags,DOCf_NO_SCROLL_BARS);35 }36 37 tmpse->left=task->win_left;38 tmpse->right=task->win_right;39 tmpse->top=task->win_top;40 tmpse->bottom=task->win_bottom;41 42 tmpse->scroll_x=task->scroll_x;43 tmpse->scroll_y=task->scroll_y;44 tmpse->scroll_z=task->scroll_z;45 46 tmpse->win_inhibit=task->win_inhibit;47 tmpse->text_attr=task->text_attr;48 StrCpy(tmpse->task_title,task->task_title);49 tmpse->title_src =task->title_src;50 tmpse->border_attr=task->border_attr;51 tmpse->border_src =task->border_src;52 tmpse->border=!Bt(&task->display_flags,DISPLAYf_NO_BORDER);53 if (TaskValidate(ac.task))54 tmpse->autocomplete=TRUE;55 else56 tmpse->autocomplete=FALSE;57 58 tmpse->next=task->next_settings;59 task->next_settings=tmpse;60 return tmpse;61}62 63U0 SettingsPop2(CTask *task,CTaskSettings *tmpse)64{65 CDoc *doc;66 67 if (doc=DocPut(task)) {68 LBEqu(&doc->flags,DOCf_HIDE_CURSOR,!tmpse->hide_cursor);69 LBEqu(&doc->flags,DOCf_DONT_HIGHLIGHT_CURSOR,!tmpse->highlight_cursor);70 LBEqu(&doc->flags,DOCf_NO_SCROLL_BARS,!tmpse->scroll);71 }72 73 WinBorder(tmpse->border,task);74 WinHorz(tmpse->left,tmpse->right,task);75 WinVert(tmpse->top,tmpse->bottom,task);76 task->scroll_x=tmpse->scroll_x;77 task->scroll_y=tmpse->scroll_y;78 task->scroll_z=tmpse->scroll_z;79 task->win_inhibit=tmpse->win_inhibit;80 task->text_attr=tmpse->text_attr;81 task->border_attr=tmpse->border_attr;82 task->border_src =tmpse->border_src;83 task->title_src =tmpse->title_src;84 StrCpy(task->task_title,tmpse->task_title);85 AutoComplete(tmpse->autocomplete);86 GrPaletteSet(tmpse->palette);87 Snd;88}89 90public U0 SettingsPop(CTask *task=NULL,I64 flags=0)91{//Typically, called at end of an application.92 CTaskSettings *tmpse;93 if (!task) task=Fs;94 if (!TaskValidate(task))95 return;96 if (tmpse=task->next_settings) {97 task->next_settings=tmpse->next;98 Cd(tmpse->cur_dir);99 Free(tmpse->cur_dir);100 task->draw_it=tmpse->draw_it;101 task->task_end_cb=tmpse->task_end_cb;102 103 if (task->animate_task)104 Kill(task->animate_task);105 if (task->animate_task=tmpse->animate_task)106 Suspend(task->animate_task,FALSE);107 108 if (!(flags&TSF_SAME_SONG)) {109 if (task->song_task)110 Kill(task->song_task);111 if (task->song_task=tmpse->song_task)112 Suspend(task->song_task,FALSE);113 }114 115 SettingsPop2(task,tmpse); //Do it to get ress fast116 Refresh(,TRUE);117 SettingsPop2(task,tmpse); //Redo in case was lost by old update118 119 Free(tmpse);120 }121}122 