From 8f21eaeb2ada1a2f053074ecce776e3351c1eda8 Mon Sep 17 00:00:00 2001 From: mfrasca <> Date: Tue, 3 Oct 2006 07:45:25 +0000 Subject: [PATCH] 1569327 release 1.1 is broken trying to clean up things. wmdocklib now contains the modules to install. examples all the scripts. only pywmhdmon.py has been tested. --- pywmhdmon/INSTALL | 8 - pywmhdmon/README | 21 -- pywmhdmon/__init__.py | 1 - pywmhdmon/pywmhdmon.py | 589 ----------------------------------- pywmhdmon/sample.pywmhdmonrc | 50 --- pywmhdmon/tmount | 35 --- pywmseti/INSTALL | 8 - pywmseti/README | 16 - pywmseti/__init__.py | 1 - pywmseti/pywmseti.py | 551 -------------------------------- pywmseti/sample.pywmsetirc | 12 - pywmsysmon/INSTALL | 6 - pywmsysmon/README | 14 - pywmsysmon/__init__.py | 1 - pywmsysmon/pywmsysmon.py | 465 --------------------------- setup.py | 18 +- 16 files changed, 9 insertions(+), 1787 deletions(-) delete mode 100644 pywmhdmon/INSTALL delete mode 100644 pywmhdmon/README delete mode 100644 pywmhdmon/__init__.py delete mode 100755 pywmhdmon/pywmhdmon.py delete mode 100644 pywmhdmon/sample.pywmhdmonrc delete mode 100644 pywmhdmon/tmount delete mode 100644 pywmseti/INSTALL delete mode 100644 pywmseti/README delete mode 100644 pywmseti/__init__.py delete mode 100755 pywmseti/pywmseti.py delete mode 100644 pywmseti/sample.pywmsetirc delete mode 100644 pywmsysmon/INSTALL delete mode 100644 pywmsysmon/README delete mode 100644 pywmsysmon/__init__.py delete mode 100755 pywmsysmon/pywmsysmon.py diff --git a/pywmhdmon/INSTALL b/pywmhdmon/INSTALL deleted file mode 100644 index 6fcd7ab..0000000 --- a/pywmhdmon/INSTALL +++ /dev/null @@ -1,8 +0,0 @@ -1. If you don't have pywmgeneral installed, install it first. Can be found - at http://pywmdockapps.sourceforge.net. - -2. Copy pywmhdmon.py to somewhere in your path (like ~/bin or - /usr/local/bin). - -3. Copy the sample.pywmhdmonrc to ~/.pywmhdmonrc and edit as you like. - diff --git a/pywmhdmon/README b/pywmhdmon/README deleted file mode 100644 index ce704a6..0000000 --- a/pywmhdmon/README +++ /dev/null @@ -1,21 +0,0 @@ -[WHAT] -pywmhdmon is a WindowMaker dockapp that displays the available space on -up to four of your filesystems. It also contains a bar showing the -current HD activity. It currently only works on system which has a -/proc/stat like file. The application is easy to configure, invoke it -with --help or see the sample rc-file for more information. - -[WHY] -As usual, I didn't find a dockapp that fitted me. And I really like to -see the current disk activity since my disks are so quiet that I can't -hear when they work. - -[BUGS] -The activity bar does not work with the proc filesystem that comes with -the 2.6 kernels. It is just a matter of rewriting the app to parse the -new format, but I'm low on time personally. - -[CONTACT] -Contact me with anything regarding this program, see -http://pywmdockapps.sourceforge.net/ for ways to do this. - diff --git a/pywmhdmon/__init__.py b/pywmhdmon/__init__.py deleted file mode 100644 index a14ea61..0000000 --- a/pywmhdmon/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from pywmhdmon import * diff --git a/pywmhdmon/pywmhdmon.py b/pywmhdmon/pywmhdmon.py deleted file mode 100755 index ccacb4a..0000000 --- a/pywmhdmon/pywmhdmon.py +++ /dev/null @@ -1,589 +0,0 @@ -#!/usr/bin/env python2.3 - -"""pywmhdmon.py - -WindowMaker dockapp to monitor the free space on your partitions and -the disk activity. - -Copyright (C) 2003 Kristoffer Erlandsson - -Licensed under the GNU General Public License. - - -Changes - -2005-09-02 Mario Frasca - added -s option for skipping an amount of configuration items. - changed some single quotes to double quotes for use in emacs. - updated the rc sample file - -2004-07-16 Mario Frasca - recognizes unmounted partitions. - configurable mouse actions. - 'used' information for read-only media. - recognizes #-started numerical-coded colors. - -2003-09-01 Kristoffer Erlandsson -Fixed a bug where the numbers wouldn't show if they were between 1000 and 1024. - -2003-06-25 Kristoffer Erlandsson -Fixed a bug where a mouse click caused the app to enter an infinite loop - -2003-06-24 Kristoffer Erlandsson -Additional fine tuning - -2003-06-23 Kristoffer Erlandsson -First working version - -""" - -usage = '''pywmhdmon.py [options] -Available options are: --h, --help print this help --t, --textcolor set the text color --f, --barfgcolor set the foregroundcolor of the act. bar --g, --barbgcolor set the background color of the act. bar --b, --background set the background color --r, --rgbfile set the rgb file to get color codes from --c, --configfile set the config file to use --p, --procstat set the location of /proc/stat --s, --skipconf determines how many configuration items to skip -''' - -import sys -import time -import getopt -import os - -from pywmgeneral import pywmhelpers - -width = 64 -height = 64 - -xOffset = 4 -yOffset = 4 - -lettersStartX = 0 -lettersStartY = 74 -letterWidth = 6 -letterHeight = 8 - -digitsStartX = 0 -digitsStartY = 64 -digitWidth = 6 -digitHeight = 8 - -graphStartX = 7 -graphStartY = 53 -graphHeight = 4 - -graphBgStartX = 72 -graphBgStartY = 53 - -graphLineStartX = 66 -graphLineStartY = 58 - -letters = 'abcdefghijklmnopqrstuvwxyz' -digits = '0123456789:/-%. ' - -defaultConfigFile = os.environ['HOME']+'/.pywmhdmonrc' -defaultRGBFiles = ('/usr/lib/X11/rgb.txt', '/usr/X11R6/lib/X11/rgb.txt') -defaultProcStat = '/proc/stat' -displayModes = ('bar', 'percent', 'free', 'used') -defaultMode = 'bar' - -hdmon = None - -class NotMounted(OSError): - pass - -class PywmHDMon: - def __init__(self, pathsToMonitor, procStat='/proc/stat', actMonEnabled=1, skipping=0): - self._pathsToMonitor = pathsToMonitor - self._actMonEnabled = actMonEnabled - self._skipping = skipping - - self._statFile = procStat - self._maxIODiff = 0 - self._lastIO = -1 - - def addString(self, s, x, y): - try: - pywmhelpers.addString(s, x, y, letterWidth, letterHeight, - lettersStartX, lettersStartY, letters, digitWidth, - digitHeight, digitsStartX, digitsStartY, digits, - xOffset, yOffset, width, height) - except ValueError, e: - sys.stderr.write('Error when painting string:\n' + str(e) + '\n') - sys.exit(3) - - def getHdInfo(self, path): - """Get the free and total space of the filesystem which path is on. - - Return a tuple with (, ) in bytes. Raise - OSError if we can't stat the path. Raise NotMounted if not mounted. - These operations are quite costly, not adviced to perform these checks - more than once every 10 seconds. - """ - - # check if is mounted <- st_dev(/mount/point) == st_dev(/mount) - if path is not '/': - statOwn = os.stat(path) - - # the following is a bit ugly: it removes the trailing - # dirname from the mount point. split by '/', leave the - # last string, join back, check for empty string. - statCnt = os.stat('/'.join(path.split('/')[:-1]) or '/') - if statOwn[2] == statCnt[2]: - raise NotMounted - stat = os.statvfs(path) - blockSize = stat.f_bsize - availableBlocks = stat.f_bavail - totalBlocks = stat.f_blocks - free = blockSize * availableBlocks - total = blockSize * totalBlocks - return (total, free) - - def paintGraph(self, percentFilled, x, y, w, thin=None): - '''Paint a graph with percentFilled percent filled. - - Paint at position x, y and with width w. - if thin == 1, make it a thin line instead of a block. - ''' - paintWidth = int(round(percentFilled/100.0 * w)) - if paintWidth > 0: - pywmhelpers.copyXPMArea( - graphLineStartX, graphLineStartY, paintWidth, thin or graphHeight, - x + xOffset, y + yOffset) - if w - paintWidth > 0: - pywmhelpers.copyXPMArea( - graphBgStartX, graphBgStartY, w - paintWidth, thin or graphHeight, - x + paintWidth + xOffset, y + yOffset) - - def getY(self, line): - return 2 + (line - 1) * (letterHeight + 3) - - def paintLabel(self, line, label): - self.addString(label, 1, self.getY(line)) - - def paintHdData(self, line, data, mode): - total, free = data - xStart = width - xOffset - 6 * letterWidth - 1 - if total==0: - self.addString(' ', xStart, self.getY(line)) - self.paintGraph(0, xStart, self.getY(line) + 4, - width - xOffset*2 - xStart - 2, - thin=1) - pass - elif mode == 'percent': - percent = (float(free) / float(total)) * 100.0 - percentStr = (str(int(round(percent))) + '%').rjust(5) - self.addString(percentStr, xStart, self.getY(line)) - elif mode == 'used': - totalStr = bytesToStr(total).rjust(5) - self.addString(totalStr, xStart, self.getY(line)) - elif mode == 'free': - freeStr = bytesToStr(free).rjust(5) - self.addString(freeStr, xStart, self.getY(line)) - elif mode == 'bar': - percentUsed = (float(total - free) / float(total)) * 100.0 - self.paintGraph(percentUsed, xStart, self.getY(line) + 2, - width - xOffset*2 - xStart - 2) - else: - sys.stderr.write('Unknown display mode: %s, ignoring data.\n' - % mode) - def getHdActivity(self): - """Return the current hd activity in percent. - - Return how many percent of the max achieved activity during the - program's lifetime the current activity is. However, every time - this method is called we decrease the max achieved activity a - little bit to get a bit less affected by spikes. I think the - interesting thing is to see if the hard drive is active, not - really exactly how active. - """ - - statFile = file(self._statFile, 'r') - diskIoStartTag = 'disk_io: ' - ioLine = None - for line in statFile: - if line.startswith(diskIoStartTag): - ioLine = line - statFile.close() - if ioLine is None: - # Can't get HD activity - sys.stderr.write("Can't get hd activity from %s\n" % - self._statFile) - return 0.0 - ioLine = ioLine[len(diskIoStartTag):] - disks = ioLine.split() - currIO = 0 - for disk in disks: - dataPart = disk.split(':')[1].strip(')(') - infos = dataPart.split(',') - blocksRead = long(infos[2]) - blocksWritten = long(infos[4]) - currIO += blocksRead + blocksWritten - if self._lastIO == -1: - self._lastIO = currIO - currDiff = currIO - self._lastIO - self._lastIO = currIO - if currDiff > self._maxIODiff: - self._maxIODiff = currDiff - if self._maxIODiff <= 0: - self._maxIODiff = 0 - return 0.0 - currAct = (float(currDiff) / float(self._maxIODiff)) * 100.0 - self._maxIODiff -= 1 # So spikes won't affect us too much. - return currAct - - def updateHdActivity(self): - currentAct = self.getHdActivity() - self.paintGraph(currentAct, 3, height - yOffset*2 - 3 - graphHeight, - width - 2 * xOffset - 6) - - def _checkEvents(self): - event = pywmhelpers.getEvent() - while event is not None: - if event['type'] == 'destroynotify': - sys.exit(0) - elif event['type'] == 'buttonrelease': - area = pywmhelpers.checkMouseRegion(event['x'],event['y']) - if area is not -1: - action = self._pathsToMonitor[area-1+self._skipping][3] - if action: - os.spawnvp(os.P_NOWAIT, action[0], action) - event = pywmhelpers.getEvent() - - def updateMonitoredPaths(self): - index = 0 - pageoffset = self._skipping - for i in self._pathsToMonitor: - index += 1 - if index < pageoffset+1: - continue - if i is not None: - label, path, mode, action = i - self.paintLabel(index-pageoffset, label) - try: - hdData = self.getHdInfo(path) - except NotMounted: - hdData = (0, 0) - except OSError, e: - sys.stderr.write( - "Can't get hd data from %s: %s\n" % (path, str(e))) - hdData = (0, 0) - self.paintHdData(index-pageoffset, hdData, mode) - if index - pageoffset == 5: - break - - def mainLoop(self): - self.updateMonitoredPaths() - while 1: - self._checkEvents() - if self._actMonEnabled: - self.updateHdActivity() - pywmhelpers.redraw() - time.sleep(0.1) - - -import signal -def handler(num, frame): - hdmon.updateMonitoredPaths() - signal.alarm(10) - -def parseCommandLine(argv): - '''Parse the commandline. Return a dictionary with options and values.''' - shorts = 'ht:f:g:b:r:c:p:s:' - longs = ['help', 'textcolor=', 'background=', 'barfgcolor=', - 'rgbfile=', 'configfile=', 'barbgcolor=', 'procstat=', - 'skipconf='] - try: - opts, nonOptArgs = getopt.getopt(argv[1:], shorts, longs) - except getopt.GetoptError, e: - sys.stderr.write('Error when parsing commandline: ' + str(e) + '\n') - sys.stderr.write(usage) - sys.exit(2) - d = {} - for o, a in opts: - if o in ('-h', '--help'): - sys.stdout.write(usage) - sys.exit(0) - if o in ('-t', '--textcolor'): - d['textcolor'] = a - if o in ('-b', '--background'): - d['background'] = a - if o in ('-r', '--rgbfile'): - d['rgbfile'] = a - if o in ('-c', '--configfile'): - d['configfile'] = a - if o in ('-g', '--barbgcolor'): - d['barbgcolor'] = a - if o in ('-f', '--barfgcolor'): - d['barfgcolor'] = a - if o in ('-p', '--procstat'): - d['procstat'] = a - if o in ('-s', '--skipconf'): - d['skipconf'] = a - return d - -def parseColors(defaultRGBFileList, config, xpm): - rgbFileName = '' - for fn in defaultRGBFileList: - if os.access(fn, os.R_OK): - rgbFileName = fn - break - rgbFileName = config.get('rgbfile', rgbFileName) - useColors = 1 - if not os.access(rgbFileName, os.R_OK): - sys.stderr.write( - "Can't read the RGB file, try setting it differently using -r,\n") - sys.stderr.write( - "Ignoring your color settings, using the defaults.\n") - useColors = 0 - if useColors: - # Colors is a list with (, ) pairs. - colors = (('barfgcolor', 'graph'), - ('barbgcolor', 'graphbg'), - ('textcolor', 'text'), - ('background', 'background')) - for key, value in colors: - col = config.get(key) - if not col is None: - if col[0] is '#': code=col - else: code = pywmhelpers.getColorCode(col, rgbFileName) - if code is None: - sys.stderr.write('Bad colorcode for %s, ignoring.\n' % key) - else: - pywmhelpers.setColor(xpm, value, code) - -def makeNumDigits(num, numDigits): - '''Make a floating point number a certain number of digits, including - decimal. Return a string containing it. - ''' - lenOfIntPart = len(str(int(num))) - if lenOfIntPart > numDigits: - # Can't convert a number to less digits then it's integer part... - return '' - decimalsNeeded = numDigits - lenOfIntPart - s = '%' + str(lenOfIntPart) + '.' + str(decimalsNeeded) + 'f' - s = s % round(num, decimalsNeeded) - return s - -def bytesToStr(bytes): - """Convert a number of bytes to a nice printable string. - - May raise ValueError if bytes can't be seen as an float. - """ - bytes = float(bytes) - kb = 1024 - mb = 1024 * 1024 - gb = 1024 * mb - tb = 1024 * gb - pb = 1024 * tb - if bytes < kb: - size = bytes - letter = 'B' - #return makeNumDigits(bytes, numDigits) + 'B' - elif bytes < mb: - size = bytes / kb - letter = 'k' - #return makeNumDigits(bytes/kb, numDigits) + 'k' - elif bytes < gb: - size = bytes / mb - letter = 'M' - #return makeNumDigits(bytes/mb, numDigits) + 'M' - elif bytes < tb: - size = bytes / gb - letter = 'G' - #return makeNumDigits(bytes/gb, numDigits) + 'G' - elif bytes < pb: - size = bytes / tb - letter = 'T' - #return makeNumDigits(bytes/tb, numDigits) + 'T' - else: - size = bytes / pb - letter = 'p' - #return makeNumDigits(bytes/pb, numDigits) + 'P' - if size >= 1000: - res = makeNumDigits(size, 4) - else: - res = makeNumDigits(size, 3) - res += letter - return res - - -def main(): - clConfig = parseCommandLine(sys.argv) - configFile = clConfig.get('configfile', defaultConfigFile) - configFile = os.path.expanduser(configFile) - fileConfig = pywmhelpers.readConfigFile(configFile, sys.stderr) - config = fileConfig - for i in clConfig.iteritems(): - config[i[0]] = i[1] - parseColors(defaultRGBFiles, config, xpm) - - pathsToMonitor = [] - for i in range(1,1000): - labelStr = str(i) + '.label' - pathStr = str(i) + '.path' - modeStr = str(i) + '.displaymode' - actionStr = str(i) + '.action' - label = config.get(labelStr) - if not label: break - path = config.get(pathStr) - action = config.get(actionStr) - if action: action=eval(action) - displayMode = config.get(modeStr, defaultMode) - if not displayMode in displayModes: - sys.stderr.write( - 'Unknown display mode: %s, using default.\n' % displayMode) - displayMode = defaultMode - pathsToMonitor.append((label[:3], path, displayMode, action)) - pywmhelpers.addMouseRegion(i, - 8, 8 + (i - 1) * (letterHeight + 3), - 58, 4 + i * (letterHeight + 3)) - procStat = config.get('procstat', defaultProcStat) - skipping = int(config.get('skipconf', 0)) - actMonEnabled = int(config.get('monitoring')) - if not os.access(procStat, os.R_OK): - sys.stderr.write( - "Can't read your procstat file, try setting it with -p. ") - sys.stderr.write("Disabling the HD activity bar.\n") - actMonEnabled = 0 - try: - programName = sys.argv[0].split(os.sep)[-1] - except IndexError: - programName = '' - sys.argv[0] = programName - pywmhelpers.setDefaultPixmap(xpm) - pywmhelpers.openXwindow(sys.argv, width, height) - - signal.signal(signal.SIGCHLD, handler) - signal.signal(signal.SIGALRM, handler) - signal.alarm(10) - - global hdmon - hdmon = PywmHDMon(pathsToMonitor, procStat, actMonEnabled, skipping) - hdmon.mainLoop() - - -xpm = \ -['160 100 13 1', - ' \tc #208120812081', - '.\tc #00000000FFFF', - 'o\tc #C71BC30BC71B', - 'O\tc #861782078E38', - '+\tc #EFBEF3CEEFBE', - '@\tc #618561856185', - '#\tc #9E79A2899E79', - '$\tc #410341034103', - 'o\tc #2020b2b2aaaa s indicator', - '/\tc #2020b2b2aaaa s graph', - '-\tc #707070707070 s graphbg', - 'X\tc #000000000000 s background', - '%\tc #2081B2CAAEBA s text', - ' ...............................................................................................', - ' .///..XXX..ooo..XXX..XXX.......................................................................', - ' .///..XXX..ooo..XXX..XXX.......................................................................', - ' .///..XXX..ooo..XXX..XXX.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..XXX.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..XXX.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..XXX.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..ooo..XXX.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..ooo..XXX.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..ooo..XXX.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..XXX.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..XXX.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..XXX.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..ooo.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..ooo.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..ooo.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...-------------------------------------------------------------------------------------...', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...-------------------------------------------------------------------------------------...', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...-------------------------------------------------------------------------------------...', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...-------------------------------------------------------------------------------------...', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///////////////////////////////////////////////////////////////////////////////////////////...', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///////////////////////////////////////////////////////////////////////////////////////////...', - ' .///////////////////////////////////////////////////////////////////////////////////////////...', - ' .///////////////////////////////////////////////////////////////////////////////////////////...', - ' ...............................................................................................', - ' ...............................................................................................', - 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - 'X%%%%%XXX%XXX%%%%%X%%%%%X%XXX%X%%%%%X%%%%%X%%%%%X%%%%%X%%%%%XXXXXXXXXX%XXXXXXXXXX%X%XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - 'X%XXX%XX%%XXXXXXX%XXXXX%X%XXX%X%XXXXX%XXXXXXXXX%X%XXX%X%XXX%XX%%XXXXXX%XXXXXXXXXXXX%XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - 'X%XXX%XXX%XXXXXXX%XXXXX%X%XXX%X%XXXXX%XXXXXXXXX%X%XXX%X%XXX%XX%%XXXXX%%XXXXXXXXXXX%%XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - 'X%XXX%XXX%XXX%%%%%XX%%%%X%%%%%X%%%%%X%%%%%XXXXX%X%%%%%X%%%%%XXXXXXXXX%XXX%%%%%XXXX%XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - 'X%XXX%XXX%XXX%XXXXXXXXX%XXXXX%XXXXX%X%XXX%XXXXX%X%XXX%XXXXX%XXXXXXXX%%XXXXXXXXXXX%%XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - 'X%XXX%XXX%XXX%XXXXXXXXX%XXXXX%XXXXX%X%XXX%XXXXX%X%XXX%XXXXX%XX%%XXXX%XXXXXXXXXXXX%XXXXX%%XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - 'X%%%%%XX%%%XX%%%%%X%%%%%XXXXX%X%%%%%X%%%%%XXXXX%X%%%%%X%%%%%XX%%XXXX%XXXXXXXXXXXX%X%XXX%%XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - '................................................................................................................................................................', - 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', - 'XX%%%XX%%%%XXX%%%%X%%%%XX%%%%XX%%%%%X%%%%%X%XXX%XXX%XXXXXXX%X%XXX%X%XXXXX%XXX%X%%%%XX%%%%%X%%%%%X%%%%%X%%%%%X%%%%%X%%%%%X%XXX%X%XXX%X%XXX%X%XXX%X%XXX%X%%%%%XXXX', - 'X%XXX%X%XXX%X%XXXXX%XXX%X%XXXXX%XXXXX%XXXXX%XXX%XXX%XXXXXXX%X%XXX%X%XXXXX%%X%%X%XXX%X%XXX%X%XXX%X%XXX%X%XXX%X%XXXXXXX%XXX%XXX%X%XXX%X%XXX%X%XXX%X%XXX%XXXXX%XXXX', - 'X%XXX%X%XXX%X%XXXXX%XXX%X%XXXXX%XXXXX%XXXXX%XXX%XXX%XXXXXXX%X%XX%XX%XXXXX%X%X%X%XXX%X%XXX%X%XXX%X%XXX%X%XXX%X%XXXXXXX%XXX%XXX%X%XXX%X%XXX%XX%X%XX%XXX%XXXX%XXXXX', - 'X%%%%%X%%%%XX%XXXXX%XXX%X%%%%XX%%%%XX%X%%%X%%%%%XXX%XXXXXXX%X%%%XXX%XXXXX%XXX%X%XXX%X%XXX%X%%%%%X%%XX%X%%%%XX%%%%%XXX%XXX%XXX%X%XXX%X%XXX%XXX%XXX%%%%%XXX%XXXXXX', - 'X%XXX%X%XXX%X%XXXXX%XXX%X%XXXXX%XXXXX%XXX%X%XXX%XXX%XXXXXXX%X%XX%XX%XXXXX%XXX%X%XXX%X%XXX%X%XXXXX%X%X%X%XXX%XXXXX%XXX%XXX%XXX%X%XXX%X%X%X%XX%X%XXXXXX%XX%XXXXXXX', - 'X%XXX%X%XXX%X%XXXXX%XXX%X%XXXXX%XXXXX%XXX%X%XXX%XXX%XXX%XXX%X%XXX%X%XXXXX%XXX%X%XXX%X%XXX%X%XXXXX%XX%%X%XXX%XXXXX%XXX%XXX%XXX%X%XXX%X%%X%%X%XXX%XXXXX%X%XXXXXXXX', - 'X%XXX%X%%%%XXX%%%%X%%%%XX%%%%XX%XXXXX%%%%%X%XXX%XXX%XXXX%%%XX%XXX%X%%%%XX%XXX%X%XXX%X%%%%%X%XXXXX%%%%%X%XXX%X%%%%%XXX%XXXX%%%%XX%%%XX%XXX%X%XXX%X%%%%%X%%%%%XXXX', - 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................'] - - -if __name__ == '__main__': - main() diff --git a/pywmhdmon/sample.pywmhdmonrc b/pywmhdmon/sample.pywmhdmonrc deleted file mode 100644 index 35b39b7..0000000 --- a/pywmhdmon/sample.pywmhdmonrc +++ /dev/null @@ -1,50 +0,0 @@ -[DEFAULT] - -# Displaymodes are used, free, percent or bar, displays the used size, -# free size, free percent and a bar representing space, respectively. - -1.label=/ -1.path=/ -#1.displaymode=free - -2.label=usr -2.path=/usr -#2.displaymode=free - -3.label=home -3.path=/home -#3.displaymode=free - -4.label=cd -4.path=/mnt/cd -4.displaymode=used -4.action=['/home/mario/bin/tmount', '/mnt/cd', 'eject'] - -5.label=jr -5.path=/mnt/jr -5.displaymode=used -5.action=['/home/mario/bin/tmount', '/mnt/jr', 'eject'] - -6.label=sm -6.path=/mnt/sm -6.displaymode=free -6.action=['/home/mario/bin/tmount', '/mnt/sm'] - -7.label=cf -7.path=/mnt/cf -7.displaymode=free -7.action=['/home/mario/bin/tmount', '/mnt/cf'] - -8.label=flo -8.path=/mnt/flo -8.displaymode=free -8.action=['/home/mario/bin/tmount', '/mnt/flo'] - -textcolor=light sea green -background=black -barfgcolor=light sea green -barbgcolor=grey45 -monitoring=0 - -#rgbfile=/usr/lib/X11/rgb.txt - diff --git a/pywmhdmon/tmount b/pywmhdmon/tmount deleted file mode 100644 index 943ffac..0000000 --- a/pywmhdmon/tmount +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh - -# tmount - toggle mount / eject -# -# usage: tmount mountpoint ejectable -# -# parameter mountpoint: the mount point, without trailing '/' -# ejectable: not empty indicates that the media is software ejectable -# action: if the indicated file system is not mounted, mounts it -# otherwise unmounts it -# if mounting fails or when unmounting, ejects software ejectable -# media. - -if [ "$2" == "" ]; then eject=echo -else eject=eject -fi - -mountpointIndicated=$1 -mountpointFound=`df $1 | tail -1 | cut -d% -f2` - -if [ $mountpointIndicated = $mountpointFound ] - then - - umount $mountpointIndicated - $eject $mountpointIndicated - -else - - # my smartmedia does not mount correctly after a media change - # second try always succeeds. ask me why! if neither mount - # attempt succeeds, then attempt ejecting ejectable media - - mount $mountpointIndicated || mount $mountpointIndicated || $eject $mountpointIndicated - -fi diff --git a/pywmseti/INSTALL b/pywmseti/INSTALL deleted file mode 100644 index 4ba52fc..0000000 --- a/pywmseti/INSTALL +++ /dev/null @@ -1,8 +0,0 @@ -1. If you don't have pywmgeneral installed, install it first. Can be found - at http://pywmdockapps.sourceforge.net - -2. Copy pywmseti.py to somewhere in your path (like ~/bin or - /usr/local/bin). - -3. Copy the sample.pywmseti to ~/.pywmseti and edit as you like. - diff --git a/pywmseti/README b/pywmseti/README deleted file mode 100644 index 0f160ff..0000000 --- a/pywmseti/README +++ /dev/null @@ -1,16 +0,0 @@ -[WHAT] -Pywmseti is an WindowMaker dockapp for monitoring your seti@home progress. -The application displays how many workunits you have done and the progress -on the current one. You start/stop the seti@home process by simply clicking -anywhere in the application. It also displays the time spent on the workunit -(or since you started the program if you restart it in the middle of a -workunit). Invoke the program with --help or see the sample rc-file for -more information about customization. - -[WHY] -No one of the existing monitors suited my needs. And the more Python the -world gets, the better it'll be! ;) - -[CONTACT] -Mail anything related to this program to me, Mario Frasca - diff --git a/pywmseti/__init__.py b/pywmseti/__init__.py deleted file mode 100644 index e0d0e8c..0000000 --- a/pywmseti/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from pywmseti import * diff --git a/pywmseti/pywmseti.py b/pywmseti/pywmseti.py deleted file mode 100755 index e4a8e38..0000000 --- a/pywmseti/pywmseti.py +++ /dev/null @@ -1,551 +0,0 @@ -#!/usr/bin/env python - -'''pywmseti.py - -WindowMaker dockapp to monitor the progress of your seti@home. - -Copyright (C) 2003 Kristoffer Erlandsson - -Licensed under the GNU General Public License. - - -Changes - -2003-06-24 Kristoffer Erlandsson -Added event handling for graceful shutdown - -2003-06-17 Kristoffer Erlandsson -First workingish version - -''' -usage = '''pywmseti.py [options] -Available options are: --h, --help print this help --t, --textcolor set the text color --p, --progressbarcolor set the color of the progress bar --g, --barbgcolor set the background color of the progress bar --i, --indicatorcolor set the color of the running indicator --b, --background set the background color --d, --setidir set the directory where seti@home resides --n, --nice set the nice value to run seti@home with --r, --rgbfile set the rgb file to get color codes from --c, --configfile set the config file to use -''' - -import sys -import time -import getopt -import os - -from pywmgeneral import pywmhelpers - -width = 64 -height = 64 - -xOffset = 4 -yOffset = 4 - -lettersStartX = 0 -lettersStartY = 74 -letterWidth = 6 -letterHeight = 8 - -digitsStartX = 0 -digitsStartY = 64 -digitWidth = 6 -digitHeight = 8 - -graphStartX = 7 -graphStartY = 53 -graphLength = 50 -graphHeight = 4 - -graphBgStartX = 72 -graphBgStartY = 53 - -graphLineStartX = 66 -graphLineStartY = 58 - -runningIndX = 71 -runningIndY = 1 -runningIndWidth = 3 -runningIndHeight = 15 -numRunningInds = 4 - -letters = 'abcdefghijklmnopqrstuvwxyz' -digits = '0123456789:/-% ' - -defaultConfigFile = '~/.pywmsetirc' -defaultRGBFiles = ['/usr/lib/X11/rgb.txt', '/usr/X11R6/lib/X11/rgb.txt'] - -stateFileName = 'state.sah' -uinfoFileName = 'user_info.sah' -pidFileName = 'pid.sah' -execFileName = 'setiathome' - -class PywmSeti: - def __init__(self, statePath, uinfoPath, pidPath, execCmd): - self._statePath = statePath - self._uinfoPath = uinfoPath - self._pidPath = pidPath - self._execCmd = execCmd - self._currentRunningInd = 0 - self._lastTime = time.time() - self._lastNumResults = -1 - self._progress = 0 - - def addString(self, s, x, y): - try: - pywmhelpers.addString(s, x, y, letterWidth, letterHeight, - lettersStartX, lettersStartY, letters, digitWidth, - digitHeight, digitsStartX, digitsStartY, digits, - xOffset, yOffset, width, height) - except ValueError, e: - sys.stderr.write('Error when painting string:\n' + str(e) + '\n') - sys.exit(3) - - def getCenterStartPos(self, s): - return pywmhelpers.getCenterStartPos(s, letterWidth, width, xOffset) - - def getVertSpacing(self, numLines, margin): - return pywmhelpers.getVertSpacing(numLines, margin, height, - letterHeight, yOffset) - - def getProgress(self, lines): - '''Return the progess of the current workunit. - - Supply the lines of the statefile as argument. - ''' - for line in lines: - if line.startswith('prog='): - try: - progress = float(line.split('=')[-1]) - except ValueError: - progress = 0 - return progress - return 0 - - def getNumResults(self, lines): - '''Return the number of results produced. - - Supply the lines in the user info file as argument. - ''' - for line in lines: - if line.startswith('nresults='): - try: - results = int(line.split('=')[-1]) - except ValueError: - pass - else: - return results - sys.stderr.write( - "Error when reading uinfo file! Can't get number of results.\n") - return -1 - - def pidIsRunning(self, pid): - '''Determine if the process with PID pid is running. - - Return 1 if it is running. - Return 0 if it is not running. - Return -1 if we do not have permission to signal the process - This could be slightly non-portal, but I can not find any better - way to do it. - ''' - try: - os.kill(pid, 0) - except OSError, e: - if e.errno == 1: - return -1 - return 0 - return 1 - - def openFileRead(self, fileName): - try: - f = file(fileName, 'r') - except IOError, e: - sys.stderr.write('Error when opening %s: %s\n' % (fileName, str(e))) - return None - return f - - - def paintCurrentRunningIndicator(self): - '''Paint the running indicator. - ''' - indX = runningIndX + self._currentRunningInd * \ - (runningIndWidth + 2) - indY = runningIndY - w = runningIndWidth - h = runningIndHeight - targX = width - xOffset - w - 5 - targY = yOffset + 5 - pywmhelpers.copyXPMArea(indX, indY, w, h, targX, targY) - - def updateRunning(self): - '''Update the information regarding if we got seti@home running or not. - - Return a tuple with (running, startStopenabled). - startStopEnabled is 1 if we own the process and got the permissions - to start and stop it, or if there is no process running. - ''' - pidFile = self.openFileRead(self._pidPath) - if pidFile is None: - sys.stderr.write("Can't read pid file") - self._running = 0 - self._startStopEnabled = 0 - return - try: - self._pid = int(pidFile.read().strip()) - except ValueError: - sys.stderr.write("Can't get pid from %s.\n" % self._pidPath) - self._running = 0 - self._startStopEnabled = 0 - return - pidFile.close() - self._running = self.pidIsRunning(self._pid) - if self._running == -1 and self._startStopEnabled: - sys.stderr.write( - "An other seti@home process which you don't own is running.\n") - sys.stderr.write( - "Starting and stopping of the process is disabled.\n") - self._startStopenabled = 0 - if self._running == -1: - self._running = 1 - else: - # If no process is running (we could have stopped the one - # running from an other process), enable starting and stopping. - self._startStopEnabled = 1 - if self._running: - self._currentRunningInd = (self._currentRunningInd - 1) \ - % numRunningInds - else: - self._currentRunningInd = 0 - self.paintCurrentRunningIndicator() - - def updateProgress(self): - '''Update the progress on the current workunit.''' - stateFile = self.openFileRead(self._statePath) - if stateFile is None: - # Can't open file, probably in progress of gettin a new workunit. - progress = 0 - else: - progress = self.getProgress(stateFile.readlines()) - stateFile.close() - self._progress = progress - percent = int(progress * 100.0) - graphSize = int(round(progress * graphLength)) - pywmhelpers.copyXPMArea( - graphLineStartX, graphLineStartY, graphSize, graphHeight, - graphStartX, graphStartY) - pywmhelpers.copyXPMArea( - graphBgStartX, graphBgStartY, graphLength - graphSize, graphHeight, - graphStartX + graphSize, graphStartY) - self.addString((str(percent) + '%').ljust(4), 4, 32) - - def updateNumResults(self): - '''Update the number of workunits done.''' - uinfoFile = self.openFileRead(self._uinfoPath) - numResults = self.getNumResults(uinfoFile.readlines()) - if self._lastNumResults == -1: - self._lastNumResults = numResults - if numResults != self._lastNumResults and self._progress < 0.03: - # If we just got a new number of results and the progress of the - # current workunit is under 3%, assume we started working on a new - # workunit. The times this could be missleading is if we have an - # other seti@home process running on an other computer, but this is - # accurate enough I think. - self.nextWorkUnitStarted() - self._lastNumResults = numResults - uinfoFile.close() - self.addString(str(numResults)[:7], 4, 4) - - def updateTime(self): - '''Update the time line. - - We display the time that we have been on the current work unit, since - either the last one was done or since we started the program. - ''' - timeSpent = time.time() - self._lastTime - hours = int(timeSpent / 3600) - mins = int((timeSpent - hours * 3600) / 60) - hours = str(hours)[:3] - mins = str(mins).zfill(2) - s = (hours + ':' + mins).ljust(6) - self.addString(s, 4, 18) - - def nextWorkUnitStarted(self): - self._lastTime = time.time() - - def handleMouseClick(self, region): - if region == 0: - if self._startStopEnabled: - if self._running: - try: - os.kill(self._pid, 15) - except OSError, e: - sys.stderr.write( - "Error when ending process: "+str(e)+'\n') - else: - os.system(self._execCmd) # Use fork instead? - - def _checkForEvents(self): - '''Check for, and handle, X events.''' - event = pywmhelpers.getEvent() - while not event is None: - if event['type'] == 'buttonrelease': - region = pywmhelpers.checkMouseRegion(event['x'], - event['y']) - self.handleMouseClick(region) - elif event['type'] == 'destroynotify': - sys.exit(0) - event = pywmhelpers.getEvent() - - def mainLoop(self): - counter = -1 - self._startStopEnabled = 1 - while 1: - counter += 1 - self._checkForEvents() - if counter % 10 == 0: - self.updateRunning() - if counter % 100 == 0: - self.updateProgress() - self.updateNumResults() - self.updateTime() - if counter == 999999: - counter = -1 - pywmhelpers.redraw() - time.sleep(0.1) - - -def parseCommandLine(argv): - '''Parse the commandline. Return a dictionary with options and values.''' - shorts = 'ht:b:n:d:r:c:p:g:i:' - longs = ['help', 'textcolor=', 'background=', 'setidir=', 'nice=', - 'rgbfile=', 'configfile=', 'progressbarcolor=', 'barbgcolor=', - 'indicatorcolor='] - try: - opts, nonOptArgs = getopt.getopt(argv[1:], shorts, longs) - except getopt.GetoptError, e: - sys.stderr.write('Error when parsing commandline: ' + str(e) + '\n') - sys.stderr.write(usage) - sys.exit(2) - d = {} - for o, a in opts: - if o in ('-h', '--help'): - sys.stdout.write(usage) - sys.exit(0) - if o in ('-t', '--textcolor'): - d['textcolor'] = a - if o in ('-b', '--background'): - d['background'] = a - if o in ('-d', '--setidir'): - d['setidir'] = a - if o in ('-n', '--nice'): - d['nice'] = a - if o in ('-r', '--rgbfile'): - d['rgbfile'] = a - if o in ('-c', '--configfile'): - d['configfile'] = a - if o in ('-p', '--progressbarcolor'): - d['progressbarcolor'] = a - if o in ('-g', '--barbgcolor'): - d['barbgcolor'] = a - if o in ('-i', '--indicatorcolor'): - d['indicatorcolor'] = a - return d - -def parseColors(defaultRGBFileNames, config, xpm): - rgbFileName = '' - for fn in defaultRGBFileNames: - if os.access(fn, os.R_OK): - rgbFileName = fn - break - rgbFileName = config.get('rgbfile', rgbFileName) - useColors = 1 - if not os.access(rgbFileName, os.R_OK): - sys.stderr.write( - "Can't read the RGB file, try setting it differently using -r,\n") - sys.stderr.write( - "Ignoring your color settings, using the defaults.\n") - useColors = 0 - if useColors: - # Colors is a list with (, ) pairs. - colors = (('indicatorcolor', 'indicator'), - ('progressbarcolor', 'graph'), - ('barbgcolor', 'graphbg'), - ('textcolor', 'text'), - ('background', 'background')) - for key, value in colors: - col = config.get(key) - if not col is None: - code = pywmhelpers.getColorCode(col, rgbFileName) - if code is None: - sys.stderr.write('Bad colorcode for %s, ignoring.\n' % key) - else: - pywmhelpers.setColor(xpm, value, code) - -def main(): - clConfig = parseCommandLine(sys.argv) - configFile = clConfig.get('configfile', defaultConfigFile) - configFile = os.path.expanduser(configFile) - fileConfig = pywmhelpers.readConfigFile(configFile, sys.stderr) - # Merge the two configs, let the commandline options overwrite those in the - # configuration file. - config = fileConfig - for i in clConfig.iteritems(): - config[i[0]] = i[1] - # Get the configurations - parseColors(defaultRGBFiles, config, xpm) - setiDir = config.get('setidir') - if setiDir is None: - sys.stderr.write( - 'You have to supply a directory where seti@home resides. Either in\n') - sys.stderr.write( - 'the configuration file or with -d/--setidir.\n') - sys.exit(3) - setiDir = os.path.expanduser(setiDir) - try: - os.chdir(setiDir) - except OSError, e: - sys.stderr.write('Error when accessing seti directory: %s\n' % str(e)) - sys.exit(4) - statePath = os.path.join(setiDir, stateFileName) - uinfoPath = os.path.join(setiDir, uinfoFileName) - pidPath = os.path.join(setiDir, pidFileName) - execPath = os.path.join(setiDir, execFileName) - niceVal = config.get('nice') - if niceVal is None: - execCmd = execPath - else: - execCmd = execPath + ' -nice %s' % niceVal + '&' - try: - programName = sys.argv[0].split(os.sep)[-1] - except IndexError: - programName = '' - sys.argv[0] = programName - pywmhelpers.setDefaultPixmap(xpm) - pywmhelpers.openXwindow(sys.argv, width, height) - pywmhelpers.addMouseRegion(0, xOffset, yOffset, width - 2 * xOffset, - height - 2 * yOffset) - pwms = PywmSeti(statePath, uinfoPath, pidPath, execCmd) - pwms.mainLoop() - -xpm = \ -['160 100 13 1', - ' \tc #208120812081', - '.\tc #00000000FFFF', - 'o\tc #C71BC30BC71B', - 'O\tc #861782078E38', - '+\tc #EFBEF3CEEFBE', - '@\tc #618561856185', - '#\tc #9E79A2899E79', - '$\tc #410341034103', - 'o\tc #2020b2b2aaaa s indicator', - '/\tc #2020b2b2aaaa s graph', - '-\tc #707070707070 s graphbg', - 'X\tc #000000000000 s background', - '%\tc #2081B2CAAEBA s text', - ' ...............................................................................................', - ' .///..XXX..ooo..XXX..XXX.......................................................................', - ' .///..XXX..ooo..XXX..XXX.......................................................................', - ' .///..XXX..ooo..XXX..XXX.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..XXX.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..XXX.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..XXX.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..ooo..XXX.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..ooo..XXX.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..ooo..XXX.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..XXX.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..XXX.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..XXX.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..ooo.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..ooo.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..ooo.......................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...-------------------------------------------------------------------------------------...', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...-------------------------------------------------------------------------------------...', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...-------------------------------------------------------------------------------------...', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...-------------------------------------------------------------------------------------...', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///////////////////////////////////////////////////////////////////////////////////////////...', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///////////////////////////////////////////////////////////////////////////////////////////...', - ' .///////////////////////////////////////////////////////////////////////////////////////////...', - ' .///////////////////////////////////////////////////////////////////////////////////////////...', - ' ...............................................................................................', - ' ...............................................................................................', - 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - 'X%%%%%XXX%XXX%%%%%X%%%%%X%XXX%X%%%%%X%%%%%X%%%%%X%%%%%X%%%%%XXXXXXXXXX%XXXXXXXXXX%X%XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - 'X%XXX%XX%%XXXXXXX%XXXXX%X%XXX%X%XXXXX%XXXXXXXXX%X%XXX%X%XXX%XX%%XXXXXX%XXXXXXXXXXXX%XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - 'X%XXX%XXX%XXXXXXX%XXXXX%X%XXX%X%XXXXX%XXXXXXXXX%X%XXX%X%XXX%XX%%XXXXX%%XXXXXXXXXXX%%XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - 'X%XXX%XXX%XXX%%%%%XX%%%%X%%%%%X%%%%%X%%%%%XXXXX%X%%%%%X%%%%%XXXXXXXXX%XXX%%%%%XXXX%XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - 'X%XXX%XXX%XXX%XXXXXXXXX%XXXXX%XXXXX%X%XXX%XXXXX%X%XXX%XXXXX%XXXXXXXX%%XXXXXXXXXXX%%XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - 'X%XXX%XXX%XXX%XXXXXXXXX%XXXXX%XXXXX%X%XXX%XXXXX%X%XXX%XXXXX%XX%%XXXX%XXXXXXXXXXXX%XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - 'X%%%%%XX%%%XX%%%%%X%%%%%XXXXX%X%%%%%X%%%%%XXXXX%X%%%%%X%%%%%XX%%XXXX%XXXXXXXXXXXX%X%XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - '................................................................................................................................................................', - 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', - 'XX%%%XX%%%%XXX%%%%X%%%%XX%%%%XX%%%%%X%%%%%X%XXX%XXX%XXXXXXX%X%XXX%X%XXXXX%XXX%X%%%%XX%%%%%X%%%%%X%%%%%X%%%%%X%%%%%X%%%%%X%XXX%X%XXX%X%XXX%X%XXX%X%XXX%X%%%%%XXXX', - 'X%XXX%X%XXX%X%XXXXX%XXX%X%XXXXX%XXXXX%XXXXX%XXX%XXX%XXXXXXX%X%XXX%X%XXXXX%%X%%X%XXX%X%XXX%X%XXX%X%XXX%X%XXX%X%XXXXXXX%XXX%XXX%X%XXX%X%XXX%X%XXX%X%XXX%XXXXX%XXXX', - 'X%XXX%X%XXX%X%XXXXX%XXX%X%XXXXX%XXXXX%XXXXX%XXX%XXX%XXXXXXX%X%XX%XX%XXXXX%X%X%X%XXX%X%XXX%X%XXX%X%XXX%X%XXX%X%XXXXXXX%XXX%XXX%X%XXX%X%XXX%XX%X%XX%XXX%XXXX%XXXXX', - 'X%%%%%X%%%%XX%XXXXX%XXX%X%%%%XX%%%%XX%X%%%X%%%%%XXX%XXXXXXX%X%%%XXX%XXXXX%XXX%X%XXX%X%XXX%X%%%%%X%%XX%X%%%%XX%%%%%XXX%XXX%XXX%X%XXX%X%XXX%XXX%XXX%%%%%XXX%XXXXXX', - 'X%XXX%X%XXX%X%XXXXX%XXX%X%XXXXX%XXXXX%XXX%X%XXX%XXX%XXXXXXX%X%XX%XX%XXXXX%XXX%X%XXX%X%XXX%X%XXXXX%X%X%X%XXX%XXXXX%XXX%XXX%XXX%X%XXX%X%X%X%XX%X%XXXXXX%XX%XXXXXXX', - 'X%XXX%X%XXX%X%XXXXX%XXX%X%XXXXX%XXXXX%XXX%X%XXX%XXX%XXX%XXX%X%XXX%X%XXXXX%XXX%X%XXX%X%XXX%X%XXXXX%XX%%X%XXX%XXXXX%XXX%XXX%XXX%X%XXX%X%%X%%X%XXX%XXXXX%X%XXXXXXXX', - 'X%XXX%X%%%%XXX%%%%X%%%%XX%%%%XX%XXXXX%%%%%X%XXX%XXX%XXXX%%%XX%XXX%X%%%%XX%XXX%X%XXX%X%%%%%X%XXXXX%%%%%X%XXX%X%%%%%XXX%XXXX%%%%XX%%%XX%XXX%X%XXX%X%%%%%X%%%%%XXXX', - 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................'] - - -if __name__ == '__main__': - main() diff --git a/pywmseti/sample.pywmsetirc b/pywmseti/sample.pywmsetirc deleted file mode 100644 index da86ee4..0000000 --- a/pywmseti/sample.pywmsetirc +++ /dev/null @@ -1,12 +0,0 @@ -[DEFAULT] -setidir=/home/erl/setiathome -# Nice value to start the seti@home process with on click. -nice=19 -textcolor=light sea green -progressbarcolor=light sea green -barbgcolor=grey45 -indicatorcolor=light sea green -background=black - -#rgbfile=/usr/lib/X11/rgb.txt - diff --git a/pywmsysmon/INSTALL b/pywmsysmon/INSTALL deleted file mode 100644 index 30139c3..0000000 --- a/pywmsysmon/INSTALL +++ /dev/null @@ -1,6 +0,0 @@ -1. If you don't have pywmgeneral installed, install it first. Can be found - at http://pywmdockapps.sourceforge.net - -2. Copy pywmsysmon.py to somewhere in your path (like ~/bin or - /usr/local/bin). - diff --git a/pywmsysmon/README b/pywmsysmon/README deleted file mode 100644 index c102eab..0000000 --- a/pywmsysmon/README +++ /dev/null @@ -1,14 +0,0 @@ -[WHAT] -pywmsysmon is a WindowMaker dockapp that displays your cpu and memory -usages. The upper graph shows your cpu usage history and the lower -"progress bar" shows your current memory usage excluding cached and -buffered data. This program currently only works on systems which got -the /proc/stat and /proc/meminfo files available. Invoke the program -with --help for information about customization. - -[WHY] -As usual, I didn't find a dockapp that fitted me. - -[CONTACT] -Mail anything related to this program to me, Mario Frasca - diff --git a/pywmsysmon/__init__.py b/pywmsysmon/__init__.py deleted file mode 100644 index 60763cd..0000000 --- a/pywmsysmon/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from pywmsysmon import * diff --git a/pywmsysmon/pywmsysmon.py b/pywmsysmon/pywmsysmon.py deleted file mode 100755 index 3cc4d47..0000000 --- a/pywmsysmon/pywmsysmon.py +++ /dev/null @@ -1,465 +0,0 @@ -#! /usr/bin/env python - -'''pywmsysmon.py - -WindowMaker system monitor dockapp written in Python. It displays your CPU -usage and your available/used memory. - -Copyright (C) 2003 Kristoffer Erlandsson - -Licensed under the GNU General Public License. - -Changes -2003-06-28 Kristoffer Erlandsson -Fixed a bug which caused infinite loop if the mouse was clicked - -2003-06-24 Kristoffer Erlandsson -First working version -''' -usage='''pywmsysmon.py [options] -Available options are: --h, --help print this help --f, --barfgcolor set the foreground color of the memory bar --g, --barbgcolor set the background color of the memory bar --b, --background set the background color --p, --graphforeground set the cpu graph foreground color --a, --graphbackground set the cpu graph background color --r, --rgbfile set the rgb file to get color codes from --s, --procstat set the location of /proc/stat --m, --procmeminfo set the location of /proc/meminfo --i, --ignorenice ignore nice valued cpu usage --u, --updatedelay delay (in seconds) between cpu graph updates -''' - -import sys -import time -import getopt -import os - -from pywmgeneral import pywmhelpers - -width = 64 -height = 64 - -xOffset = 4 -yOffset = 4 - -lettersStartX = 0 -lettersStartY = 74 -letterWidth = 6 -letterHeight = 8 - -digitsStartX = 0 -digitsStartY = 64 -digitWidth = 6 -digitHeight = 8 - -hGraphStartX = 7 -hGraphStartY = 53 -hGraphHeight = 4 -hGraphWidth = width - xOffset * 2 - 6 - -hGraphBgStartX = 72 -hGraphBgStartY = 53 - -hGraphLineStartX = 66 -hGraphLineStartY = 58 - -vGraphStartX = 7 -vGraphStartY = 7 -vGraphHeight = 43 -vGraphWidth = 50 - -vGraphLineStartX = 95 -vGraphLineStartY = 1 - -vGraphBgStartX = 97 -vGraphBgStartY = 1 - -letters = 'abcdefghijklmnopqrstuvwxyz' -digits = '0123456789:/-%. ' - -defaultConfigFile = '~/.pywmhdmonrc' -defaultRGBFiles = ('/usr/lib/X11/rgb.txt', '/usr/X11R6/lib/X11/rgb.txt') -defaultProcStat = '/proc/stat' -defaultProcMeminfo = '/proc/meminfo' - -class PywmSysMon: - def __init__(self, procMeminfo, procStat, ignoreNice=0, updateDelay=10): - self._procStat = procStat - self._procMeminfo = procMeminfo - self._ignoreNice = ignoreNice - - self._lastUsed = 0 - self._lastTotal = 0 - - self._usageHistory = [0.0] * vGraphWidth - - self._cpuUpdateDelay = updateDelay - self._memUpdateDelay = 30 - - def addUsageToHist(self, cpuUsage): - self._usageHistory = self._usageHistory[1:] - self._usageHistory.append(cpuUsage) - - def getMemInfo(self): - '''Get memory information. - - Return a tuple with (total_mem, used_mem, buffered_mem, cached_mem). - ''' - try: - meminfoFile = file(self._procMeminfo, 'r') - except IOError, e: - sys.stderr.write("Can't open meminfo file: %s.\n" % str(e)) - sys.exit(2) - theLine = None - for line in meminfoFile: - if line.startswith('Mem:'): - theLine = line - if theLine is None: - sys.stderr.write("Can't find memory information in %s.\n" % - self._procMeminfo) - sys.exit(4) - parts = [long(x) for x in theLine.split()[1:]] - total, used, free, shared, buffers, cached = parts - return (total, used, buffers, cached) - - def freeMem(self, memData): - '''Take a tuple as returned from getMemInfo and return the free mem. - ''' - total, used, buffers, cached = memData - reallyUsed = used - buffers - cached - free = total - reallyUsed - return free - - def getCPUUsage(self): - '''Get the current CPU usage. - - Only works for systems where this can be found in a /proc/stat like - file. Return the usage in percent. - ''' - try: - statFile = file(self._procStat, 'r') - except IOError, e: - sys.stderr.write("Can't open statfile: %s.\n" % str(e)) - sys.exit(2) - line = statFile.readline() - statFile.close() - cpu, nice, system, idle = [long(x) for x in line.split()[1:]] - used = cpu + system - if not self._ignoreNice: - used += nice - total = cpu + nice + system + idle - if total - self._lastTotal <= 0 or self._lastTotal == 0: - cpuUsage = 0.0 - else: - cpuUsage = 100.0 * (float(used - self._lastUsed) / float(total - - self._lastTotal)) - self._lastUsed = used - self._lastTotal = total - return cpuUsage - - def addString(self, s, x, y): - try: - pywmhelpers.addString(s, x, y, letterWidth, letterHeight, - lettersStartX, lettersStartY, letters, digitWidth, - digitHeight, digitsStartX, digitsStartY, digits, - xOffset, yOffset, width, height) - except ValueError, e: - sys.stderr.write('Error when painting string:\n' + str(e) + '\n') - sys.exit(3) - - def paintGraph(self, percentFilled, x, y, w): - '''Paint a graph with percentFilled percent filled. - - Paint at position x, y and with width w. - ''' - paintWidth = int(round(percentFilled/100.0 * w)) - if paintWidth > 0: - pywmhelpers.copyXPMArea( - hGraphLineStartX, hGraphLineStartY, paintWidth, hGraphHeight, - x, y) - if w - paintWidth > 0: - pywmhelpers.copyXPMArea( - hGraphBgStartX, hGraphBgStartY, w - paintWidth, hGraphHeight, - x + paintWidth, y) - - def drawVertLine(self, sourceX, sourceY, targX, targY, length): - '''Draw a vertical line. - ''' - if length > 0: - pywmhelpers.copyXPMArea(sourceX, sourceY, 1, length, targX, targY) - - def drawCPUUsageHistory(self): - '''Draw the complete CPU usage graph according to what's in the history. - ''' - count = 0 - for histItem in self._usageHistory: - lengthFilled = int(round(vGraphHeight * (histItem/100.0))) - lengthNotFilled = vGraphHeight - lengthFilled - self.drawVertLine(vGraphBgStartX, vGraphBgStartY, - vGraphStartX + count, vGraphStartY, - lengthNotFilled) - self.drawVertLine(vGraphLineStartX, vGraphLineStartY, - vGraphStartX + count, - vGraphStartY + lengthNotFilled, lengthFilled) - count += 1 - - def updateCPUInfo(self): - '''Update the current cpu usage graph.''' - currentUsage = self.getCPUUsage() - self.addUsageToHist(currentUsage) - self.drawCPUUsageHistory() - - def updateMemInfo(self): - '''Update the current memory usage graph.''' - memInfo = self.getMemInfo() - total = memInfo[0] - free = self.freeMem(memInfo) - percentUsed = 100.0 * (float(total - free) / float(total)) - self.paintGraph(percentUsed, hGraphStartX, hGraphStartY, hGraphWidth) - - def _checkForEvents(self): - event = pywmhelpers.getEvent() - while not event is None: - if event['type'] == 'destroynotify': - sys.exit(0) - event = pywmhelpers.getEvent() - - def mainLoop(self): - counter = -1 - while 1: - counter += 1 - self._checkForEvents() - if counter % self._cpuUpdateDelay == 0: - self.updateCPUInfo() - if counter % self._memUpdateDelay == 0: - self.updateMemInfo() - if counter == 999999: - counter = -1 - pywmhelpers.redraw() - time.sleep(0.1) - -def parseCommandLine(argv): - '''Parse the commandline. Return a dictionary with options and values.''' - shorts = 'hf:g:b:p:a:r:s:m:iu:' - longs = ['help=', 'barbgcolor=', 'barfgcolor=', 'background=', - 'graphforeground=', 'graphbackground=', 'rgbfile=', 'procstat=', - 'procmeminfo=', 'ignorenice', 'updatedelay='] - try: - opts, nonOptArgs = getopt.getopt(argv[1:], shorts, longs) - except getopt.GetoptError, e: - sys.stderr.write('Error when parsing commandline: ' + str(e) + '\n') - sys.stderr.write(usage) - sys.exit(2) - d = {} - for o, a in opts: - if o in ('-h', '--help'): - sys.stdout.write(usage) - sys.exit(0) - if o in ('-b', '--background'): - d['background'] = a - if o in ('-r', '--rgbfile'): - d['rgbfile'] = a - if o in ('-g', '--barbgcolor'): - d['barbgcolor'] = a - if o in ('-f', '--barfgcolor'): - d['barfgcolor'] = a - if o in ('-s', '--procstat'): - d['procstat'] = a - if o in ('-p', '--graphforeground'): - d['graphforeground'] = a - if o in ('-a', '--graphbackground'): - d['graphbackground'] = a - if o in ('-m', '--procmeminfo'): - d['procmeminfo'] = a - if o in ('-i', '--ignorenice'): - d['ignorenice'] = 1 - if o in ('-u', '--updatedelay'): - try: - d['updatedelay'] = int(a) * 10 - except ValueError: - sys.stderr.write( - "Value for updatedelay has to be an integer.\n") - sys.exit(2) - return d - -def parseColors(defaultRGBFileList, config, xpm): - rgbFileName = '' - for fn in defaultRGBFileList: - if os.access(fn, os.R_OK): - rgbFileName = fn - break - rgbFileName = config.get('rgbfile', rgbFileName) - useColors = 1 - if not os.access(rgbFileName, os.R_OK): - sys.stderr.write( - "Can't read the RGB file, try setting it differently using -r,\n") - sys.stderr.write( - "Ignoring your color settings, using the defaults.\n") - useColors = 0 - if useColors: - # Colors is a list with (, ) pairs. - colors = (('barfgcolor', 'graph'), - ('barbgcolor', 'graphbg'), - ('background', 'background'), - ('graphforeground', 'vgraph'), - ('graphbackground', 'vgraphbg')) - for key, value in colors: - col = config.get(key) - if not col is None: - code = pywmhelpers.getColorCode(col, rgbFileName) - if code is None: - sys.stderr.write('Bad colorcode for %s, ignoring.\n' % key) - else: - pywmhelpers.setColor(xpm, value, code) - - - -def main(): - config = parseCommandLine(sys.argv) - parseColors(defaultRGBFiles, config, xpm) - procStat = config.get('procstat', defaultProcStat) - if not os.access(procStat, os.R_OK): - sys.stderr.write( - "Can't read your procstat file, try setting it with -s.\n") - sys.exit(4) - procMeminfo = config.get('procmeminfo', defaultProcMeminfo) - if not os.access(procMeminfo, os.R_OK): - sys.stderr.write( - "Can't read your procmeminfo file, try setting it with -m.\n") - sys.exit(4) - ignoreNice = config.get('ignorenice', 0) - updateDelay = config.get('updatedelay', 30) - try: - programName = sys.argv[0].split(os.sep)[-1] - except IndexError: - programName = '' - sys.argv[0] = programName - pywmhelpers.setDefaultPixmap(xpm) - pywmhelpers.openXwindow(sys.argv, width, height) - pywmsysmon = PywmSysMon(procMeminfo, procStat, ignoreNice, updateDelay) - pywmsysmon.mainLoop() - - -xpm = \ -['160 100 15 1', - ' \tc #208120812081', - '.\tc #00000000FFFF', - 'o\tc #C71BC30BC71B', - 'O\tc #861782078E38', - '+\tc #EFBEF3CEEFBE', - '@\tc #618561856185', - '#\tc #9E79A2899E79', - '$\tc #410341034103', - 'o\tc #2020b2b2aaaa s indicator', - '/\tc #2020b2b2aaaa s graph', - '-\tc #707070707070 s graphbg', - '|\tc #2020b2b2aaaa s vgraph', - 'I\tc #707070707070 s vgraphbg', - 'X\tc #000000000000 s background', - '%\tc #2081B2CAAEBA s text', - ' ...............................................................................................', - ' .///..XXX..ooo..XXX..XXX......|.I..............................................................', - ' .///..XXX..ooo..XXX..XXX......|.I..............................................................', - ' .///..XXX..ooo..XXX..XXX......|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..XXX......|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..XXX......|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..XXX......|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..ooo..XXX......|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..ooo..XXX......|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..ooo..XXX......|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..XXX......|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..XXX......|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..XXX......|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..ooo......|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..ooo......|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..XXX..XXX..XXX..ooo......|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///..........................|.I..............................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...-------------------------------------------------------------------------------------...', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...-------------------------------------------------------------------------------------...', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...-------------------------------------------------------------------------------------...', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...-------------------------------------------------------------------------------------...', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///...........................................................................................', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///////////////////////////////////////////////////////////////////////////////////////////...', - ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .///////////////////////////////////////////////////////////////////////////////////////////...', - ' .///////////////////////////////////////////////////////////////////////////////////////////...', - ' .///////////////////////////////////////////////////////////////////////////////////////////...', - ' ...............................................................................................', - ' ...............................................................................................', - 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - 'X%%%%%XXX%XXX%%%%%X%%%%%X%XXX%X%%%%%X%%%%%X%%%%%X%%%%%X%%%%%XXXXXXXXXX%XXXXXXXXXX%X%XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - 'X%XXX%XX%%XXXXXXX%XXXXX%X%XXX%X%XXXXX%XXXXXXXXX%X%XXX%X%XXX%XX%%XXXXXX%XXXXXXXXXXXX%XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - 'X%XXX%XXX%XXXXXXX%XXXXX%X%XXX%X%XXXXX%XXXXXXXXX%X%XXX%X%XXX%XX%%XXXXX%%XXXXXXXXXXX%%XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - 'X%XXX%XXX%XXX%%%%%XX%%%%X%%%%%X%%%%%X%%%%%XXXXX%X%%%%%X%%%%%XXXXXXXXX%XXX%%%%%XXXX%XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - 'X%XXX%XXX%XXX%XXXXXXXXX%XXXXX%XXXXX%X%XXX%XXXXX%X%XXX%XXXXX%XXXXXXXX%%XXXXXXXXXXX%%XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - 'X%XXX%XXX%XXX%XXXXXXXXX%XXXXX%XXXXX%X%XXX%XXXXX%X%XXX%XXXXX%XX%%XXXX%XXXXXXXXXXXX%XXXXX%%XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - 'X%%%%%XX%%%XX%%%%%X%%%%%XXXXX%X%%%%%X%%%%%XXXXX%X%%%%%X%%%%%XX%%XXXX%XXXXXXXXXXXX%X%XXX%%XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................', - '................................................................................................................................................................', - 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', - 'XX%%%XX%%%%XXX%%%%X%%%%XX%%%%XX%%%%%X%%%%%X%XXX%XXX%XXXXXXX%X%XXX%X%XXXXX%XXX%X%%%%XX%%%%%X%%%%%X%%%%%X%%%%%X%%%%%X%%%%%X%XXX%X%XXX%X%XXX%X%XXX%X%XXX%X%%%%%XXXX', - 'X%XXX%X%XXX%X%XXXXX%XXX%X%XXXXX%XXXXX%XXXXX%XXX%XXX%XXXXXXX%X%XXX%X%XXXXX%%X%%X%XXX%X%XXX%X%XXX%X%XXX%X%XXX%X%XXXXXXX%XXX%XXX%X%XXX%X%XXX%X%XXX%X%XXX%XXXXX%XXXX', - 'X%XXX%X%XXX%X%XXXXX%XXX%X%XXXXX%XXXXX%XXXXX%XXX%XXX%XXXXXXX%X%XX%XX%XXXXX%X%X%X%XXX%X%XXX%X%XXX%X%XXX%X%XXX%X%XXXXXXX%XXX%XXX%X%XXX%X%XXX%XX%X%XX%XXX%XXXX%XXXXX', - 'X%%%%%X%%%%XX%XXXXX%XXX%X%%%%XX%%%%XX%X%%%X%%%%%XXX%XXXXXXX%X%%%XXX%XXXXX%XXX%X%XXX%X%XXX%X%%%%%X%%XX%X%%%%XX%%%%%XXX%XXX%XXX%X%XXX%X%XXX%XXX%XXX%%%%%XXX%XXXXXX', - 'X%XXX%X%XXX%X%XXXXX%XXX%X%XXXXX%XXXXX%XXX%X%XXX%XXX%XXXXXXX%X%XX%XX%XXXXX%XXX%X%XXX%X%XXX%X%XXXXX%X%X%X%XXX%XXXXX%XXX%XXX%XXX%X%XXX%X%X%X%XX%X%XXXXXX%XX%XXXXXXX', - 'X%XXX%X%XXX%X%XXXXX%XXX%X%XXXXX%XXXXX%XXX%X%XXX%XXX%XXX%XXX%X%XXX%X%XXXXX%XXX%X%XXX%X%XXX%X%XXXXX%XX%%X%XXX%XXXXX%XXX%XXX%XXX%X%XXX%X%%X%%X%XXX%XXXXX%X%XXXXXXXX', - 'X%XXX%X%%%%XXX%%%%X%%%%XX%%%%XX%XXXXX%%%%%X%XXX%XXX%XXXX%%%XX%XXX%X%%%%XX%XXX%X%XXX%X%%%%%X%XXXXX%%%%%X%XXX%X%%%%%XXX%XXXX%%%%XX%%%XX%XXX%X%XXX%X%%%%%X%%%%%XXXX', - 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................', - '................................................................................................................................................................'] - - -if __name__ == '__main__': - main() diff --git a/setup.py b/setup.py index 044701d..560d93a 100644 --- a/setup.py +++ b/setup.py @@ -7,11 +7,11 @@ XIncludes = '/usr/X11R6/include' from distutils.core import setup, Extension -module1 = Extension('pywmgeneral', +module1 = Extension('wmdocklib.pywmgeneral', libraries = ['Xpm', 'Xext', 'X11'], library_dirs = [XLibDir], include_dirs = [XIncludes], - sources = ['pywmgeneral/pywmgeneral.c']) + sources = ['wmdocklib/pywmgeneral.c']) setup(name="pywmdockapps", version = "$Revision$"[11:-2], @@ -23,11 +23,11 @@ setup(name="pywmdockapps", author_email="mfrasca@zonnet.nl", url="http://ibo.sourceforge.net", license="(L)GPL", - py_modules=['pywmdatetime.pywmdatetime', - 'pywmgeneral.pywmhelpers', - 'pywmgeneric.pywmgeneric', - 'pywmhdmon.pywmhdmon', - 'pywmseti.pywmseti', - 'pywmsysmon.pywmsysmon', - ], + packages=['wmdocklib', + ], + scripts=['examples/pywmdatetime.py', + 'examples/pywmhdmon.py', + 'examples/pywmseti.py', + 'examples/pywmsysmon.py', + 'examples/setup.py'], ext_modules = [module1])