From a839c3f2ca5a11b2293ad0c588859d38aa98d194 Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Mon, 17 Dec 2007 05:50:00 +0000 Subject: [PATCH] Adding affinity panel --- AffinityPanel.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ AffinityPanel.h | 19 +++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 AffinityPanel.c create mode 100644 AffinityPanel.h diff --git a/AffinityPanel.c b/AffinityPanel.c new file mode 100644 index 00000000..007b0590 --- /dev/null +++ b/AffinityPanel.c @@ -0,0 +1,48 @@ + +#include "AffinityPanel.h" + +#include "Panel.h" +#include "CheckItem.h" + +#include "debug.h" +#include + +Panel* AffinityPanel_new(int processorCount, unsigned long mask) { + Panel* this = Panel_new(1, 1, 1, 1, CHECKITEM_CLASS, true, ListItem_compare); + this->eventHandler = AffinityPanel_eventHandler; + + Panel_setHeader(this, "Use CPUs:"); + for (int i = 0; i < processorCount; i++) { + char number[10]; + snprintf(number, 9, "%d", i+1); + Panel_add(this, (Object*) CheckItem_new(String_copy(number), NULL, mask & (1 << i))); + } + return this; +} + +unsigned long AffinityPanel_getAffinity(Panel* this) { + int size = Panel_getSize(this); + unsigned long mask = 0; + for (int i = 0; i < size; i++) { + if (CheckItem_get((CheckItem*)Panel_get(this, i))) + mask = mask | (1 << i); + } + return mask; +} + +HandlerResult AffinityPanel_eventHandler(Panel* this, int ch) { + HandlerResult result = IGNORED; + CheckItem* selected = (CheckItem*) Panel_getSelected(this); + switch(ch) { + case ' ': + CheckItem_set(selected, ! (CheckItem_get(selected)) ); + result = HANDLED; + break; + case 0x0a: + case 0x0d: + case KEY_ENTER: + result = BREAK_LOOP; + break; + } + return result; +} diff --git a/AffinityPanel.h b/AffinityPanel.h new file mode 100644 index 00000000..dfea3d74 --- /dev/null +++ b/AffinityPanel.h @@ -0,0 +1,19 @@ +/* Do not edit this file. It was automatically generated. */ + +#ifndef HEADER_AffinityPanel +#define HEADER_AffinityPanel + + +#include "Panel.h" +#include "CheckItem.h" + +#include "debug.h" +#include + +Panel* AffinityPanel_new(int processorCount, unsigned long mask); + +unsigned long AffinityPanel_getAffinity(Panel* this); + +HandlerResult AffinityPanel_eventHandler(Panel* this, int ch); + +#endif