#help_index "Windows" class CWallPaperGlobals { I64 last_calc_idle_count, last_swap_counter[MP_PROCESSORS_NUM]; F64 last_calc_idle_delta_time; U8 top_line[STR_LEN]; } *wall = CAlloc(sizeof(CWallPaperGlobals)); wall->last_calc_idle_delta_time = 1.0; class CTaskWallPaperData { I64 alloced_u8s, used_u8s; U8 caller_stack[4096 - $]; }; U0 WallPaper(CTask *_task) { I64 i, j, k, l = TEXT_ROWS - 1; CTask *task; CTaskWallPaperData *wpd; CHashTable *old_hash = Fs->hash_table; CCPU *c; CDateStruct ds; U8 *st; _task->text_attr = DKGRAY << 4 + WHITE; if (sys_data_bp) { TextPrint(Fs, 0, l--, DKGRAY << 4 + YELLOW, "%010X/%010X %010X/%010X%12td%12td%12td", sys_data_bp->used_u8s, sys_data_bp->alloced_u8s, sys_code_bp->used_u8s, sys_code_bp->alloced_u8s, cmp.compiled_lines, blkdev.read_count, blkdev.write_count); TextPrint(Fs, 0, l--, DKGRAY << 4 + WHITE, "______Data_Heap______ ______Code_Heap______ " "___Lines___ ___Reads___ __Writes___"); } else { TextPrint(Fs, 0, l--, DKGRAY << 4 + WHITE, "%010X/%010X%12td%12td%12td", sys_code_bp->used_u8s, sys_code_bp->alloced_u8s, cmp.compiled_lines, blkdev.read_count, blkdev.write_count); TextPrint(Fs, 0, l--, DKGRAY << 4 + WHITE, "____CodeData_Heap____ " "___Lines___ ___Reads___ ___Writes__"); } TextPrint(Fs, 0, l--, DKGRAY << 4 + WHITE, "ProgressBars:%016X %016X %016X %016X", progress1, progress2, progress3, progress4); for (i = 0; i < mp_count; i++) { c = &cpu_structs[i]; if (winmgr.t->calc_idle_count != wall->last_calc_idle_count) { wall->last_calc_idle_delta_time = winmgr.t->calc_idle_delta_time; wall->last_swap_counter[i] = winmgr.t->last_swap_counter[i]; winmgr.t->last_swap_counter[i] = c->swap_counter; } task = c->executive_task; do { wpd = &task->wallpaper_data; if (!TaskValidate(task)) break; if (!(winmgr.updates & 5)) { if (c == Gs) Fs->hash_table = task->hash_table; else //precaution Fs->hash_table = old_hash; StrPrint(wpd->caller_stack, " %p ", TaskCaller(task, 0)); for (j = 1; j < 16; j++) { if ((k = TaskCaller(task, j)) > 0) CatPrint(wpd->caller_stack, ". %p ", k); } } TextPrint(Fs, 0, l--, DKGRAY << 4 + YELLOW, wpd->caller_stack); j = UnusedStack(task); if (j < 0) Panic("Stack Overflow", task); if (!(winmgr.updates & 15)) { wpd->alloced_u8s = TaskMemAlloced(task); wpd->used_u8s = TaskMemUsed(task); } TextPrint(Fs, 0, l--, DKGRAY << 4 + BLACK, " %-18ts #%08X %010X %010X/%010X %04X:%02tX:%08X", task->task_title, task, j, wpd->used_u8s, wpd->alloced_u8s, task->task_flags, task->display_flags, task->win_inhibit); if (!TaskValidate(task)) break; task = task->next_task; } while (task != c->executive_task); TextPrint(Fs, 0, l--, DKGRAY << 4 + WHITE, "CPU%02X %2tf%% ContextSwaps/s:%9,d", i, 100.0 * (1.0 - c->idle_factor), ToI64((winmgr.t->last_swap_counter[i] - wall->last_swap_counter[i]) / wall->last_calc_idle_delta_time)); } TextPrint(Fs, 0, l--, DKGRAY << 4 + WHITE, " ___Description____ #__Task__ UnusedStack _UsedMem_/_AllocMem_ ______Flags_____"); if (!(winmgr.updates & 15) || !*wall->top_line) { Date2Struct(&ds, Now); i = sys_code_bp->alloced_u8s - sys_code_bp->used_u8s; if (sys_data_bp) i += sys_data_bp->alloced_u8s - sys_data_bp->used_u8s; StrPrint(wall->top_line, "%3tZ %02d/%02d/%02d %02d:%02d:%02d FPS:%2tf Mem:%010X CPU", ds.day_of_week, "ST_DAYS_OF_WEEK", ds.mon, ds.day_of_mon, ds.year % 100, ds.hour, ds.min, ds.sec, winmgr.fps, i); } TextPrint(Fs, 0, 0, DKGRAY << 4 + WHITE, wall->top_line); if (screencast.record) TextPrint(Fs, 44 -4, 0, DKGRAY << 4 + RED, "*"); for (i = 0; i < mp_count; i++) { c = &cpu_structs[i]; if (i & 1) TextPrint(Fs, 47 + i * 2, 0, DKGRAY << 4 + WHITE, "%2tf", 100.0 * (1.0 - c->idle_factor)); else TextPrint(Fs, 47 + i * 2, 0, DKGRAY << 4 + YELLOW, "%2tf", 100.0 * (1.0 - c->idle_factor)); } st = ScanCode2KeyName(kbd.last_down_scan_code); TextPrint(Fs, TEXT_COLS - 25, 0, DKGRAY << 4 + YELLOW, "%25ts", st); Free(st); Fs->hash_table = old_hash; wall->last_calc_idle_count = winmgr.t->calc_idle_count; } <1>/* Graphics Not Rendered in HTML */ <2>/* Graphics Not Rendered in HTML */ U0 DrawTermBttn(CDC *dc, CCtrl *c) { if (Blink) Sprite3(dc, c->left, c->top, 0, <1>); else Sprite3(dc, c->left, c->top, 0, <2>); } U0 LeftClickTermBttn(CCtrl *, I64, I64, Bool down) { if (down) User; } CCtrl *TermBttnNew() { I64 min_x, max_x, min_y, max_y; CCtrl *c = SysCAlloc(sizeof(CCtrl)); c->win_task = sys_winmgr_task; c->flags = CTRLF_SHOW; c->type = CTRLT_GENERIC; c->draw_it = &DrawTermBttn; c->left_click = &LeftClickTermBttn; SpriteExtents(<1>, &min_x, &max_x, &min_y, &max_y); //min must be zero c->left = sys_winmgr_task->pix_width - (max_x - min_x + 1); c->right = c->left + (max_x - min_x + 1) - 1; c->top = sys_winmgr_task->pix_height - (max_y - min_y + 1); c->bottom = c->top + (max_y - min_y + 1) - 1; QueueInsert(c, sys_winmgr_task->last_ctrl); TaskDerivedValsUpdate(sys_winmgr_task); return c; } U0 WallPaperInit() { TermBttnNew; gr.fp_wall_paper = &WallPaper; }