summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2006-03-04 18:16:49 +0000
committerHisham Muhammad <hisham@gobolinux.org>2006-03-04 18:16:49 +0000
commitd6231bab89d634da5564491196b7c478db038505 (patch)
treebfc0bf00b138763eb41132fd27a8f389a78bf3a4
Initial import.
-rw-r--r--AUTHORS1
-rw-r--r--AvailableColumnsListBox.c72
-rw-r--r--AvailableColumnsListBox.h31
-rw-r--r--AvailableMetersListBox.c103
-rw-r--r--AvailableMetersListBox.h33
-rw-r--r--COPYING339
-rw-r--r--CPUMeter.c86
-rw-r--r--CPUMeter.h41
-rw-r--r--CRT.c513
-rw-r--r--CRT.h112
-rw-r--r--CategoriesListBox.c134
-rw-r--r--CategoriesListBox.h40
-rw-r--r--ChangeLog219
-rw-r--r--CheckItem.c56
-rw-r--r--CheckItem.h33
-rw-r--r--ClockMeter.c54
-rw-r--r--ClockMeter.h37
-rw-r--r--ColorsListBox.c98
-rw-r--r--ColorsListBox.h32
-rw-r--r--ColumnsListBox.c104
-rw-r--r--ColumnsListBox.h32
-rw-r--r--DebugMemory.c187
-rw-r--r--DebugMemory.h62
-rw-r--r--DisplayOptionsListBox.c75
-rw-r--r--DisplayOptionsListBox.h31
-rw-r--r--FunctionBar.c131
-rw-r--r--FunctionBar.h47
-rw-r--r--Hashtable.c140
-rw-r--r--Hashtable.h55
-rw-r--r--Header.c177
-rw-r--r--Header.h62
-rw-r--r--INSTALL229
-rw-r--r--ListBox.c353
-rw-r--r--ListBox.h101
-rw-r--r--ListItem.c72
-rw-r--r--ListItem.h39
-rw-r--r--LoadAverageMeter.c71
-rw-r--r--LoadAverageMeter.h37
-rw-r--r--LoadMeter.c63
-rw-r--r--LoadMeter.h34
-rw-r--r--Makefile.am29
-rw-r--r--MemoryMeter.c90
-rw-r--r--MemoryMeter.h42
-rw-r--r--Meter.c350
-rw-r--r--Meter.h94
-rw-r--r--MetersListBox.c106
-rw-r--r--MetersListBox.h30
-rw-r--r--NEWS5
-rw-r--r--Object.c60
-rw-r--r--Object.h44
-rw-r--r--Process.c427
-rw-r--r--Process.h140
-rw-r--r--ProcessList.c589
-rw-r--r--ProcessList.h124
-rw-r--r--README48
-rw-r--r--RichString.c83
-rw-r--r--RichString.h43
-rw-r--r--ScreenManager.c225
-rw-r--r--ScreenManager.h58
-rw-r--r--Settings.c217
-rw-r--r--Settings.h39
-rw-r--r--SignalItem.c99
-rw-r--r--SignalItem.h41
-rw-r--r--SignalsListBox.c77
-rw-r--r--SignalsListBox.h32
-rw-r--r--String.c160
-rw-r--r--String.h52
-rw-r--r--SwapMeter.c65
-rw-r--r--SwapMeter.h40
-rw-r--r--TasksMeter.c56
-rw-r--r--TasksMeter.h35
-rw-r--r--TraceScreen.c164
-rw-r--r--TraceScreen.h37
-rw-r--r--TypedVector.c257
-rw-r--r--TypedVector.h69
-rw-r--r--UptimeMeter.c77
-rw-r--r--UptimeMeter.h39
-rw-r--r--UsersTable.c56
-rw-r--r--UsersTable.h41
-rw-r--r--autogen.sh6
-rw-r--r--configure.ac54
-rw-r--r--debug.h22
-rw-r--r--htop.1120
-rw-r--r--htop.c663
-rw-r--r--htop.desktop12
-rw-r--r--htop.h53
-rw-r--r--htop.pngbin0 -> 169 bytes
87 files changed, 9306 insertions, 0 deletions
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 00000000..de8bf3f1
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1 @@
+Hisham H. Muhammad
diff --git a/AvailableColumnsListBox.c b/AvailableColumnsListBox.c
new file mode 100644
index 00000000..f4f91372
--- /dev/null
+++ b/AvailableColumnsListBox.c
@@ -0,0 +1,72 @@
+
+#include "AvailableColumnsListBox.h"
+#include "Settings.h"
+#include "Header.h"
+#include "ScreenManager.h"
+#include "ColumnsListBox.h"
+
+#include "ListBox.h"
+
+#include "debug.h"
+#include <assert.h>
+
+/*{
+
+typedef struct AvailableColumnsListBox_ {
+ ListBox super;
+ ListBox* columns;
+
+ Settings* settings;
+ ScreenManager* scr;
+} AvailableColumnsListBox;
+
+}*/
+
+AvailableColumnsListBox* AvailableColumnsListBox_new(Settings* settings, ListBox* columns, ScreenManager* scr) {
+ AvailableColumnsListBox* this = (AvailableColumnsListBox*) malloc(sizeof(AvailableColumnsListBox));
+ ListBox* super = (ListBox*) this;
+ ListBox_init(super, 1, 1, 1, 1, LISTITEM_CLASS, true);
+ ((Object*)this)->delete = AvailableColumnsListBox_delete;
+
+ this->settings = settings;
+ this->scr = scr;
+ super->eventHandler = AvailableColumnsListBox_eventHandler;
+
+ ListBox_setHeader(super, "Available Columns");
+
+ for (int i = 1; i < LAST_PROCESSFIELD; i++) {
+ if (i != COMM)
+ ListBox_add(super, (Object*) ListItem_new(Process_fieldNames[i], 0));
+ }
+ this->columns = columns;
+ return this;
+}
+
+void AvailableColumnsListBox_delete(Object* object) {
+ ListBox* super = (ListBox*) object;
+ AvailableColumnsListBox* this = (AvailableColumnsListBox*) object;
+ ListBox_done(super);
+ free(this);
+}
+
+HandlerResult AvailableColumnsListBox_eventHandler(ListBox* super, int ch) {
+ AvailableColumnsListBox* this = (AvailableColumnsListBox*) super;
+ char* text = ((ListItem*) ListBox_getSelected(super))->value;
+ HandlerResult result = IGNORED;
+
+ switch(ch) {
+ case 13:
+ case KEY_ENTER:
+ case KEY_F(5):
+ {
+ int at = ListBox_getSelectedIndex(this->columns) + 1;
+ if (at == ListBox_getSize(this->columns))
+ at--;
+ ListBox_insert(this->columns, at, (Object*) ListItem_new(text, 0));
+ ColumnsListBox_update(this->columns);
+ result = HANDLED;
+ break;
+ }
+ }
+ return result;
+}
diff --git a/AvailableColumnsListBox.h b/AvailableColumnsListBox.h
new file mode 100644
index 00000000..d771e201
--- /dev/null
+++ b/AvailableColumnsListBox.h
@@ -0,0 +1,31 @@
+/* Do not edit this file. It was automatically genarated. */
+
+#ifndef HEADER_AvailableColumnsListBox
+#define HEADER_AvailableColumnsListBox
+
+#include "Settings.h"
+#include "Header.h"
+#include "ScreenManager.h"
+
+#include "ListBox.h"
+
+#include "debug.h"
+#include <assert.h>
+
+
+typedef struct AvailableColumnsListBox_ {
+ ListBox super;
+
+ Settings* settings;
+ ScreenManager* scr;
+ ListBox* columns;
+} AvailableColumnsListBox;
+
+
+AvailableColumnsListBox* AvailableColumnsListBox_new(Settings* settings, ListBox* columns, ScreenManager* scr);
+
+void AvailableColumnsListBox_delete(Object* object);
+
+HandlerResult AvailableColumnsListBox_eventHandler(ListBox* super, int ch);
+
+#endif
diff --git a/AvailableMetersListBox.c b/AvailableMetersListBox.c
new file mode 100644
index 00000000..757cd59d
--- /dev/null
+++ b/AvailableMetersListBox.c
@@ -0,0 +1,103 @@
+
+#include "AvailableMetersListBox.h"
+#include "Settings.h"
+#include "Header.h"
+#include "ScreenManager.h"
+
+#include "ListBox.h"
+
+#include "debug.h"
+#include <assert.h>
+
+/*{
+
+typedef struct AvailableMetersListBox_ {
+ ListBox super;
+
+ Settings* settings;
+ ListBox* leftBox;
+ ListBox* rightBox;
+ ScreenManager* scr;
+} AvailableMetersListBox;
+
+}*/
+
+AvailableMetersListBox* AvailableMetersListBox_new(Settings* settings, ListBox* leftMeters, ListBox* rightMeters, ScreenManager* scr) {
+ AvailableMetersListBox* this = (AvailableMetersListBox*) malloc(sizeof(AvailableMetersListBox));
+ ListBox* super = (ListBox*) this;
+ ListBox_init(super, 1, 1, 1, 1, LISTITEM_CLASS, true);
+ ((Object*)this)->delete = AvailableMetersListBox_delete;
+
+ this->settings = settings;
+ this->leftBox = leftMeters;
+ this->rightBox = rightMeters;
+ this->scr = scr;
+ super->eventHandler = AvailableMetersListBox_EventHandler;
+
+ ListBox_setHeader(super, "Available meters");
+ ListBox_add(super, (Object*) ListItem_new("Swap", 0));
+ ListBox_add(super, (Object*) ListItem_new("Memory", 0));
+ ListBox_add(super, (Object*) ListItem_new("Clock", 0));
+ ListBox_add(super, (Object*) ListItem_new("Load", 0));
+ ListBox_add(super, (Object*) ListItem_new("LoadAverage", 0));
+ ListBox_add(super, (Object*) ListItem_new("Uptime", 0));
+ ListBox_add(super, (Object*) ListItem_new("Tasks", 0));
+ if (settings->pl->processorCount > 1)
+ ListBox_add(super, (Object*) ListItem_new("CPUAverage", 0));
+ for (int i = 1; i <= settings->pl->processorCount; i++) {
+ char buffer[50];
+ sprintf(buffer, "CPU(%d)", i);
+ ListBox_add(super, (Object*) ListItem_new(buffer, 0));
+ }
+ return this;
+}
+
+void AvailableMetersListBox_delete(Object* object) {
+ ListBox* super = (ListBox*) object;
+ AvailableMetersListBox* this = (AvailableMetersListBox*) object;
+ ListBox_done(super);
+ free(this);
+}
+
+/* private */
+inline void AvailableMetersListBox_addHeader(Header* header, ListBox* lb, char* name, HeaderSide side) {
+ Header_createMeter(header, name, side);
+ int i = Header_size(header, side) - 1;
+ Meter* meter = (Meter*) Header_getMeter(header, i, side);
+ ListBox_add(lb, (Object*) Meter_toListItem(meter));
+}
+
+HandlerResult AvailableMetersListBox_EventHandler(ListBox* super, int ch) {
+ AvailableMetersListBox* this = (AvailableMetersListBox*) super;
+ Header* header = this->settings->header;
+
+ ListItem* selected = (ListItem*) ListBox_getSelected(super);
+ char* name = selected->value;
+ HandlerResult result = IGNORED;
+
+ switch(ch) {
+ case KEY_F(5):
+ case 'l':
+ case 'L':
+ {
+ AvailableMetersListBox_addHeader(header, this->leftBox, name, LEFT_HEADER);
+ result = HANDLED;
+ break;
+ }
+ case KEY_F(6):
+ case 'r':
+ case 'R':
+ {
+ AvailableMetersListBox_addHeader(header, this->rightBox, name, RIGHT_HEADER);
+ result = HANDLED;
+ break;
+ }
+ }
+ if (result == HANDLED) {
+ this->settings->changed = true;
+ Header_calculateHeight(header);
+ Header_draw(header);
+ ScreenManager_resize(this->scr, this->scr->x1, header->height, this->scr->x2, this->scr->y2);
+ }
+ return result;
+}
diff --git a/AvailableMetersListBox.h b/AvailableMetersListBox.h
new file mode 100644
index 00000000..be6da95b
--- /dev/null
+++ b/AvailableMetersListBox.h
@@ -0,0 +1,33 @@
+/* Do not edit this file. It was automatically genarated. */
+
+#ifndef HEADER_AvailableMetersListBox
+#define HEADER_AvailableMetersListBox
+
+#include "Settings.h"
+#include "Header.h"
+#include "ScreenManager.h"
+
+#include "ListBox.h"
+
+#include "debug.h"
+#include <assert.h>
+
+
+typedef struct AvailableMetersListBox_ {
+ ListBox super;
+
+ Settings* settings;
+ ListBox* leftBox;
+ ListBox* rightBox;
+ ScreenManager* scr;
+} AvailableMetersListBox;
+
+
+AvailableMetersListBox* AvailableMetersListBox_new(Settings* settings, ListBox* leftMeters, ListBox* rightMeters, ScreenManager* scr);
+
+void AvailableMetersListBox_delete(Object* object);
+
+
+HandlerResult AvailableMetersListBox_EventHandler(ListBox* super, int ch);
+
+#endif
diff --git a/COPYING b/COPYING
new file mode 100644
index 00000000..a43ea212
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+co