wmgeneral: Merge 2003-10-10 version from wmmon and wmtime.
Note that this was a fork of the earlier 1998-05-02 version and didn't contain the later changes. Therefore we merge the best of both versions. wmtime had some additional unnecessary dummy variables, so we use the wmmon version.
This commit is contained in:
		
							parent
							
								
									a680f87666
								
							
						
					
					
						commit
						6dc4716c29
					
				
					 14 changed files with 393 additions and 155 deletions
				
			
		| 
						 | 
				
			
			@ -11,7 +11,9 @@
 | 
			
		|||
 | 
			
		||||
	---
 | 
			
		||||
	CHANGES:
 | 
			
		||||
    ---
 | 
			
		||||
	---
 | 
			
		||||
	10/10/2003 (Simon Law, sfllaw@debian.org)
 | 
			
		||||
		* changed the parse_rcfile function to use getline instead of fgets.
 | 
			
		||||
    14/09/1998 (Dave Clark, clarkd@skyia.com)
 | 
			
		||||
        * Updated createXBMfromXPM routine
 | 
			
		||||
        * Now supports >256 colors
 | 
			
		||||
| 
						 | 
				
			
			@ -134,7 +136,8 @@ void parse_rcfile(const char *filename, rckeys *keys) {
 | 
			
		|||
void parse_rcfile2(const char *filename, rckeys2 *keys) {
 | 
			
		||||
 | 
			
		||||
	char	*p;
 | 
			
		||||
	char	temp[128];
 | 
			
		||||
	char	*line = NULL;
 | 
			
		||||
	size_t  line_size = 0;
 | 
			
		||||
	char	*tokens = " :\t\n";
 | 
			
		||||
	FILE	*fp;
 | 
			
		||||
	int		i,key;
 | 
			
		||||
| 
						 | 
				
			
			@ -142,10 +145,10 @@ void parse_rcfile2(const char *filename, rckeys2 *keys) {
 | 
			
		|||
 | 
			
		||||
	fp = fopen(filename, "r");
 | 
			
		||||
	if (fp) {
 | 
			
		||||
		while (fgets(temp, 128, fp)) {
 | 
			
		||||
		while (getline(&line, &line_size, fp) >= 0) {
 | 
			
		||||
			key = 0;
 | 
			
		||||
			while (key >= 0 && keys[key].label) {
 | 
			
		||||
				if ((p = strstr(temp, keys[key].label))) {
 | 
			
		||||
				if ((p = strstr(line, keys[key].label))) {
 | 
			
		||||
					p += strlen(keys[key].label);
 | 
			
		||||
					p += strspn(p, tokens);
 | 
			
		||||
					if ((i = strcspn(p, "#\n"))) p[i] = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -383,14 +386,10 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
	int				i, wx, wy;
 | 
			
		||||
 | 
			
		||||
	for (i=1; argv[i]; i++) {
 | 
			
		||||
		if (!strcmp(argv[i], "-display")) {
 | 
			
		||||
			display_name = argv[i+1];
 | 
			
		||||
			i++;
 | 
			
		||||
		}
 | 
			
		||||
		if (!strcmp(argv[i], "-geometry")) {
 | 
			
		||||
			geometry = argv[i+1];
 | 
			
		||||
			i++;
 | 
			
		||||
		}
 | 
			
		||||
		if (!strcmp(argv[i], "-display"))
 | 
			
		||||
			display_name = argv[++i];
 | 
			
		||||
		else if (!strcmp(argv[i], "-geometry"))
 | 
			
		||||
			geometry = argv[++i];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!(display = XOpenDisplay(display_name))) {
 | 
			
		||||
| 
						 | 
				
			
			@ -416,6 +415,9 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
 | 
			
		||||
	XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints,
 | 
			
		||||
				&mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy);
 | 
			
		||||
	if (geometry)
 | 
			
		||||
		XParseGeometry(geometry, &mysizehints.x, &mysizehints.y,
 | 
			
		||||
		               (unsigned int *) &mysizehints.width, (unsigned int *) &mysizehints.height);
 | 
			
		||||
 | 
			
		||||
	mysizehints.width = 64;
 | 
			
		||||
	mysizehints.height = 64;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,9 @@
 | 
			
		|||
 | 
			
		||||
	---
 | 
			
		||||
	CHANGES:
 | 
			
		||||
    ---
 | 
			
		||||
	---
 | 
			
		||||
	10/10/2003 (Simon Law, sfllaw@debian.org)
 | 
			
		||||
		* changed the parse_rcfile function to use getline instead of fgets.
 | 
			
		||||
    14/09/1998 (Dave Clark, clarkd@skyia.com)
 | 
			
		||||
        * Updated createXBMfromXPM routine
 | 
			
		||||
        * Now supports >256 colors
 | 
			
		||||
| 
						 | 
				
			
			@ -134,7 +136,8 @@ void parse_rcfile(const char *filename, rckeys *keys) {
 | 
			
		|||
void parse_rcfile2(const char *filename, rckeys2 *keys) {
 | 
			
		||||
 | 
			
		||||
	char	*p;
 | 
			
		||||
	char	temp[128];
 | 
			
		||||
	char	*line = NULL;
 | 
			
		||||
	size_t  line_size = 0;
 | 
			
		||||
	char	*tokens = " :\t\n";
 | 
			
		||||
	FILE	*fp;
 | 
			
		||||
	int		i,key;
 | 
			
		||||
| 
						 | 
				
			
			@ -142,10 +145,10 @@ void parse_rcfile2(const char *filename, rckeys2 *keys) {
 | 
			
		|||
 | 
			
		||||
	fp = fopen(filename, "r");
 | 
			
		||||
	if (fp) {
 | 
			
		||||
		while (fgets(temp, 128, fp)) {
 | 
			
		||||
		while (getline(&line, &line_size, fp) >= 0) {
 | 
			
		||||
			key = 0;
 | 
			
		||||
			while (key >= 0 && keys[key].label) {
 | 
			
		||||
				if ((p = strstr(temp, keys[key].label))) {
 | 
			
		||||
				if ((p = strstr(line, keys[key].label))) {
 | 
			
		||||
					p += strlen(keys[key].label);
 | 
			
		||||
					p += strspn(p, tokens);
 | 
			
		||||
					if ((i = strcspn(p, "#\n"))) p[i] = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -383,14 +386,10 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
	int				i, wx, wy;
 | 
			
		||||
 | 
			
		||||
	for (i=1; argv[i]; i++) {
 | 
			
		||||
		if (!strcmp(argv[i], "-display")) {
 | 
			
		||||
			display_name = argv[i+1];
 | 
			
		||||
			i++;
 | 
			
		||||
		}
 | 
			
		||||
		if (!strcmp(argv[i], "-geometry")) {
 | 
			
		||||
			geometry = argv[i+1];
 | 
			
		||||
			i++;
 | 
			
		||||
		}
 | 
			
		||||
		if (!strcmp(argv[i], "-display"))
 | 
			
		||||
			display_name = argv[++i];
 | 
			
		||||
		else if (!strcmp(argv[i], "-geometry"))
 | 
			
		||||
			geometry = argv[++i];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!(display = XOpenDisplay(display_name))) {
 | 
			
		||||
| 
						 | 
				
			
			@ -416,6 +415,9 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
 | 
			
		||||
	XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints,
 | 
			
		||||
				&mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy);
 | 
			
		||||
	if (geometry)
 | 
			
		||||
		XParseGeometry(geometry, &mysizehints.x, &mysizehints.y,
 | 
			
		||||
		               (unsigned int *) &mysizehints.width, (unsigned int *) &mysizehints.height);
 | 
			
		||||
 | 
			
		||||
	mysizehints.width = 64;
 | 
			
		||||
	mysizehints.height = 64;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,9 @@
 | 
			
		|||
 | 
			
		||||
	---
 | 
			
		||||
	CHANGES:
 | 
			
		||||
    ---
 | 
			
		||||
	---
 | 
			
		||||
	10/10/2003 (Simon Law, sfllaw@debian.org)
 | 
			
		||||
		* changed the parse_rcfile function to use getline instead of fgets.
 | 
			
		||||
    14/09/1998 (Dave Clark, clarkd@skyia.com)
 | 
			
		||||
        * Updated createXBMfromXPM routine
 | 
			
		||||
        * Now supports >256 colors
 | 
			
		||||
| 
						 | 
				
			
			@ -134,7 +136,8 @@ void parse_rcfile(const char *filename, rckeys *keys) {
 | 
			
		|||
void parse_rcfile2(const char *filename, rckeys2 *keys) {
 | 
			
		||||
 | 
			
		||||
	char	*p;
 | 
			
		||||
	char	temp[128];
 | 
			
		||||
	char	*line = NULL;
 | 
			
		||||
	size_t  line_size = 0;
 | 
			
		||||
	char	*tokens = " :\t\n";
 | 
			
		||||
	FILE	*fp;
 | 
			
		||||
	int		i,key;
 | 
			
		||||
| 
						 | 
				
			
			@ -142,10 +145,10 @@ void parse_rcfile2(const char *filename, rckeys2 *keys) {
 | 
			
		|||
 | 
			
		||||
	fp = fopen(filename, "r");
 | 
			
		||||
	if (fp) {
 | 
			
		||||
		while (fgets(temp, 128, fp)) {
 | 
			
		||||
		while (getline(&line, &line_size, fp) >= 0) {
 | 
			
		||||
			key = 0;
 | 
			
		||||
			while (key >= 0 && keys[key].label) {
 | 
			
		||||
				if ((p = strstr(temp, keys[key].label))) {
 | 
			
		||||
				if ((p = strstr(line, keys[key].label))) {
 | 
			
		||||
					p += strlen(keys[key].label);
 | 
			
		||||
					p += strspn(p, tokens);
 | 
			
		||||
					if ((i = strcspn(p, "#\n"))) p[i] = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -383,14 +386,10 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
	int				i, wx, wy;
 | 
			
		||||
 | 
			
		||||
	for (i=1; argv[i]; i++) {
 | 
			
		||||
		if (!strcmp(argv[i], "-display")) {
 | 
			
		||||
			display_name = argv[i+1];
 | 
			
		||||
			i++;
 | 
			
		||||
		}
 | 
			
		||||
		if (!strcmp(argv[i], "-geometry")) {
 | 
			
		||||
			geometry = argv[i+1];
 | 
			
		||||
			i++;
 | 
			
		||||
		}
 | 
			
		||||
		if (!strcmp(argv[i], "-display"))
 | 
			
		||||
			display_name = argv[++i];
 | 
			
		||||
		else if (!strcmp(argv[i], "-geometry"))
 | 
			
		||||
			geometry = argv[++i];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!(display = XOpenDisplay(display_name))) {
 | 
			
		||||
| 
						 | 
				
			
			@ -416,6 +415,9 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
 | 
			
		||||
	XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints,
 | 
			
		||||
				&mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy);
 | 
			
		||||
	if (geometry)
 | 
			
		||||
		XParseGeometry(geometry, &mysizehints.x, &mysizehints.y,
 | 
			
		||||
		               (unsigned int *) &mysizehints.width, (unsigned int *) &mysizehints.height);
 | 
			
		||||
 | 
			
		||||
	mysizehints.width = 64;
 | 
			
		||||
	mysizehints.height = 64;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,9 @@
 | 
			
		|||
 | 
			
		||||
	---
 | 
			
		||||
	CHANGES:
 | 
			
		||||
    ---
 | 
			
		||||
	---
 | 
			
		||||
	10/10/2003 (Simon Law, sfllaw@debian.org)
 | 
			
		||||
		* changed the parse_rcfile function to use getline instead of fgets.
 | 
			
		||||
    14/09/1998 (Dave Clark, clarkd@skyia.com)
 | 
			
		||||
        * Updated createXBMfromXPM routine
 | 
			
		||||
        * Now supports >256 colors
 | 
			
		||||
| 
						 | 
				
			
			@ -134,7 +136,8 @@ void parse_rcfile(const char *filename, rckeys *keys) {
 | 
			
		|||
void parse_rcfile2(const char *filename, rckeys2 *keys) {
 | 
			
		||||
 | 
			
		||||
	char	*p;
 | 
			
		||||
	char	temp[128];
 | 
			
		||||
	char	*line = NULL;
 | 
			
		||||
	size_t  line_size = 0;
 | 
			
		||||
	char	*tokens = " :\t\n";
 | 
			
		||||
	FILE	*fp;
 | 
			
		||||
	int		i,key;
 | 
			
		||||
| 
						 | 
				
			
			@ -142,10 +145,10 @@ void parse_rcfile2(const char *filename, rckeys2 *keys) {
 | 
			
		|||
 | 
			
		||||
	fp = fopen(filename, "r");
 | 
			
		||||
	if (fp) {
 | 
			
		||||
		while (fgets(temp, 128, fp)) {
 | 
			
		||||
		while (getline(&line, &line_size, fp) >= 0) {
 | 
			
		||||
			key = 0;
 | 
			
		||||
			while (key >= 0 && keys[key].label) {
 | 
			
		||||
				if ((p = strstr(temp, keys[key].label))) {
 | 
			
		||||
				if ((p = strstr(line, keys[key].label))) {
 | 
			
		||||
					p += strlen(keys[key].label);
 | 
			
		||||
					p += strspn(p, tokens);
 | 
			
		||||
					if ((i = strcspn(p, "#\n"))) p[i] = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -383,14 +386,10 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
	int				i, wx, wy;
 | 
			
		||||
 | 
			
		||||
	for (i=1; argv[i]; i++) {
 | 
			
		||||
		if (!strcmp(argv[i], "-display")) {
 | 
			
		||||
			display_name = argv[i+1];
 | 
			
		||||
			i++;
 | 
			
		||||
		}
 | 
			
		||||
		if (!strcmp(argv[i], "-geometry")) {
 | 
			
		||||
			geometry = argv[i+1];
 | 
			
		||||
			i++;
 | 
			
		||||
		}
 | 
			
		||||
		if (!strcmp(argv[i], "-display"))
 | 
			
		||||
			display_name = argv[++i];
 | 
			
		||||
		else if (!strcmp(argv[i], "-geometry"))
 | 
			
		||||
			geometry = argv[++i];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!(display = XOpenDisplay(display_name))) {
 | 
			
		||||
| 
						 | 
				
			
			@ -416,6 +415,9 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
 | 
			
		||||
	XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints,
 | 
			
		||||
				&mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy);
 | 
			
		||||
	if (geometry)
 | 
			
		||||
		XParseGeometry(geometry, &mysizehints.x, &mysizehints.y,
 | 
			
		||||
		               (unsigned int *) &mysizehints.width, (unsigned int *) &mysizehints.height);
 | 
			
		||||
 | 
			
		||||
	mysizehints.width = 64;
 | 
			
		||||
	mysizehints.height = 64;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,9 @@
 | 
			
		|||
 | 
			
		||||
	---
 | 
			
		||||
	CHANGES:
 | 
			
		||||
    ---
 | 
			
		||||
	---
 | 
			
		||||
	10/10/2003 (Simon Law, sfllaw@debian.org)
 | 
			
		||||
		* changed the parse_rcfile function to use getline instead of fgets.
 | 
			
		||||
    14/09/1998 (Dave Clark, clarkd@skyia.com)
 | 
			
		||||
        * Updated createXBMfromXPM routine
 | 
			
		||||
        * Now supports >256 colors
 | 
			
		||||
| 
						 | 
				
			
			@ -134,7 +136,8 @@ void parse_rcfile(const char *filename, rckeys *keys) {
 | 
			
		|||
void parse_rcfile2(const char *filename, rckeys2 *keys) {
 | 
			
		||||
 | 
			
		||||
	char	*p;
 | 
			
		||||
	char	temp[128];
 | 
			
		||||
	char	*line = NULL;
 | 
			
		||||
	size_t  line_size = 0;
 | 
			
		||||
	char	*tokens = " :\t\n";
 | 
			
		||||
	FILE	*fp;
 | 
			
		||||
	int		i,key;
 | 
			
		||||
| 
						 | 
				
			
			@ -142,10 +145,10 @@ void parse_rcfile2(const char *filename, rckeys2 *keys) {
 | 
			
		|||
 | 
			
		||||
	fp = fopen(filename, "r");
 | 
			
		||||
	if (fp) {
 | 
			
		||||
		while (fgets(temp, 128, fp)) {
 | 
			
		||||
		while (getline(&line, &line_size, fp) >= 0) {
 | 
			
		||||
			key = 0;
 | 
			
		||||
			while (key >= 0 && keys[key].label) {
 | 
			
		||||
				if ((p = strstr(temp, keys[key].label))) {
 | 
			
		||||
				if ((p = strstr(line, keys[key].label))) {
 | 
			
		||||
					p += strlen(keys[key].label);
 | 
			
		||||
					p += strspn(p, tokens);
 | 
			
		||||
					if ((i = strcspn(p, "#\n"))) p[i] = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -383,14 +386,10 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
	int				i, wx, wy;
 | 
			
		||||
 | 
			
		||||
	for (i=1; argv[i]; i++) {
 | 
			
		||||
		if (!strcmp(argv[i], "-display")) {
 | 
			
		||||
			display_name = argv[i+1];
 | 
			
		||||
			i++;
 | 
			
		||||
		}
 | 
			
		||||
		if (!strcmp(argv[i], "-geometry")) {
 | 
			
		||||
			geometry = argv[i+1];
 | 
			
		||||
			i++;
 | 
			
		||||
		}
 | 
			
		||||
		if (!strcmp(argv[i], "-display"))
 | 
			
		||||
			display_name = argv[++i];
 | 
			
		||||
		else if (!strcmp(argv[i], "-geometry"))
 | 
			
		||||
			geometry = argv[++i];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!(display = XOpenDisplay(display_name))) {
 | 
			
		||||
| 
						 | 
				
			
			@ -416,6 +415,9 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
 | 
			
		||||
	XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints,
 | 
			
		||||
				&mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy);
 | 
			
		||||
	if (geometry)
 | 
			
		||||
		XParseGeometry(geometry, &mysizehints.x, &mysizehints.y,
 | 
			
		||||
		               (unsigned int *) &mysizehints.width, (unsigned int *) &mysizehints.height);
 | 
			
		||||
 | 
			
		||||
	mysizehints.width = 64;
 | 
			
		||||
	mysizehints.height = 64;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,9 @@
 | 
			
		|||
 | 
			
		||||
	---
 | 
			
		||||
	CHANGES:
 | 
			
		||||
    ---
 | 
			
		||||
	---
 | 
			
		||||
	10/10/2003 (Simon Law, sfllaw@debian.org)
 | 
			
		||||
		* changed the parse_rcfile function to use getline instead of fgets.
 | 
			
		||||
    14/09/1998 (Dave Clark, clarkd@skyia.com)
 | 
			
		||||
        * Updated createXBMfromXPM routine
 | 
			
		||||
        * Now supports >256 colors
 | 
			
		||||
| 
						 | 
				
			
			@ -134,7 +136,8 @@ void parse_rcfile(const char *filename, rckeys *keys) {
 | 
			
		|||
void parse_rcfile2(const char *filename, rckeys2 *keys) {
 | 
			
		||||
 | 
			
		||||
	char	*p;
 | 
			
		||||
	char	temp[128];
 | 
			
		||||
	char	*line = NULL;
 | 
			
		||||
	size_t  line_size = 0;
 | 
			
		||||
	char	*tokens = " :\t\n";
 | 
			
		||||
	FILE	*fp;
 | 
			
		||||
	int		i,key;
 | 
			
		||||
| 
						 | 
				
			
			@ -142,10 +145,10 @@ void parse_rcfile2(const char *filename, rckeys2 *keys) {
 | 
			
		|||
 | 
			
		||||
	fp = fopen(filename, "r");
 | 
			
		||||
	if (fp) {
 | 
			
		||||
		while (fgets(temp, 128, fp)) {
 | 
			
		||||
		while (getline(&line, &line_size, fp) >= 0) {
 | 
			
		||||
			key = 0;
 | 
			
		||||
			while (key >= 0 && keys[key].label) {
 | 
			
		||||
				if ((p = strstr(temp, keys[key].label))) {
 | 
			
		||||
				if ((p = strstr(line, keys[key].label))) {
 | 
			
		||||
					p += strlen(keys[key].label);
 | 
			
		||||
					p += strspn(p, tokens);
 | 
			
		||||
					if ((i = strcspn(p, "#\n"))) p[i] = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -383,14 +386,10 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
	int				i, wx, wy;
 | 
			
		||||
 | 
			
		||||
	for (i=1; argv[i]; i++) {
 | 
			
		||||
		if (!strcmp(argv[i], "-display")) {
 | 
			
		||||
			display_name = argv[i+1];
 | 
			
		||||
			i++;
 | 
			
		||||
		}
 | 
			
		||||
		if (!strcmp(argv[i], "-geometry")) {
 | 
			
		||||
			geometry = argv[i+1];
 | 
			
		||||
			i++;
 | 
			
		||||
		}
 | 
			
		||||
		if (!strcmp(argv[i], "-display"))
 | 
			
		||||
			display_name = argv[++i];
 | 
			
		||||
		else if (!strcmp(argv[i], "-geometry"))
 | 
			
		||||
			geometry = argv[++i];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!(display = XOpenDisplay(display_name))) {
 | 
			
		||||
| 
						 | 
				
			
			@ -416,6 +415,9 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
 | 
			
		||||
	XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints,
 | 
			
		||||
				&mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy);
 | 
			
		||||
	if (geometry)
 | 
			
		||||
		XParseGeometry(geometry, &mysizehints.x, &mysizehints.y,
 | 
			
		||||
		               (unsigned int *) &mysizehints.width, (unsigned int *) &mysizehints.height);
 | 
			
		||||
 | 
			
		||||
	mysizehints.width = 64;
 | 
			
		||||
	mysizehints.height = 64;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,9 @@
 | 
			
		|||
 | 
			
		||||
	---
 | 
			
		||||
	CHANGES:
 | 
			
		||||
    ---
 | 
			
		||||
	---
 | 
			
		||||
	10/10/2003 (Simon Law, sfllaw@debian.org)
 | 
			
		||||
		* changed the parse_rcfile function to use getline instead of fgets.
 | 
			
		||||
    14/09/1998 (Dave Clark, clarkd@skyia.com)
 | 
			
		||||
        * Updated createXBMfromXPM routine
 | 
			
		||||
        * Now supports >256 colors
 | 
			
		||||
| 
						 | 
				
			
			@ -134,7 +136,8 @@ void parse_rcfile(const char *filename, rckeys *keys) {
 | 
			
		|||
void parse_rcfile2(const char *filename, rckeys2 *keys) {
 | 
			
		||||
 | 
			
		||||
	char	*p;
 | 
			
		||||
	char	temp[128];
 | 
			
		||||
	char	*line = NULL;
 | 
			
		||||
	size_t  line_size = 0;
 | 
			
		||||
	char	*tokens = " :\t\n";
 | 
			
		||||
	FILE	*fp;
 | 
			
		||||
	int		i,key;
 | 
			
		||||
| 
						 | 
				
			
			@ -142,10 +145,10 @@ void parse_rcfile2(const char *filename, rckeys2 *keys) {
 | 
			
		|||
 | 
			
		||||
	fp = fopen(filename, "r");
 | 
			
		||||
	if (fp) {
 | 
			
		||||
		while (fgets(temp, 128, fp)) {
 | 
			
		||||
		while (getline(&line, &line_size, fp) >= 0) {
 | 
			
		||||
			key = 0;
 | 
			
		||||
			while (key >= 0 && keys[key].label) {
 | 
			
		||||
				if ((p = strstr(temp, keys[key].label))) {
 | 
			
		||||
				if ((p = strstr(line, keys[key].label))) {
 | 
			
		||||
					p += strlen(keys[key].label);
 | 
			
		||||
					p += strspn(p, tokens);
 | 
			
		||||
					if ((i = strcspn(p, "#\n"))) p[i] = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -383,14 +386,10 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
	int				i, wx, wy;
 | 
			
		||||
 | 
			
		||||
	for (i=1; argv[i]; i++) {
 | 
			
		||||
		if (!strcmp(argv[i], "-display")) {
 | 
			
		||||
			display_name = argv[i+1];
 | 
			
		||||
			i++;
 | 
			
		||||
		}
 | 
			
		||||
		if (!strcmp(argv[i], "-geometry")) {
 | 
			
		||||
			geometry = argv[i+1];
 | 
			
		||||
			i++;
 | 
			
		||||
		}
 | 
			
		||||
		if (!strcmp(argv[i], "-display"))
 | 
			
		||||
			display_name = argv[++i];
 | 
			
		||||
		else if (!strcmp(argv[i], "-geometry"))
 | 
			
		||||
			geometry = argv[++i];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!(display = XOpenDisplay(display_name))) {
 | 
			
		||||
| 
						 | 
				
			
			@ -416,6 +415,9 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
 | 
			
		||||
	XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints,
 | 
			
		||||
				&mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy);
 | 
			
		||||
	if (geometry)
 | 
			
		||||
		XParseGeometry(geometry, &mysizehints.x, &mysizehints.y,
 | 
			
		||||
		               (unsigned int *) &mysizehints.width, (unsigned int *) &mysizehints.height);
 | 
			
		||||
 | 
			
		||||
	mysizehints.width = 64;
 | 
			
		||||
	mysizehints.height = 64;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,8 +14,25 @@
 | 
			
		|||
	---
 | 
			
		||||
	10/10/2003 (Simon Law, sfllaw@debian.org)
 | 
			
		||||
		* changed the parse_rcfile function to use getline instead of fgets.
 | 
			
		||||
    14/09/1998 (Dave Clark, clarkd@skyia.com)
 | 
			
		||||
        * Updated createXBMfromXPM routine
 | 
			
		||||
        * Now supports >256 colors
 | 
			
		||||
	11/09/1998 (Martijn Pieterse, pieterse@xs4all.nl)
 | 
			
		||||
		* Removed a bug from parse_rcfile. You could
 | 
			
		||||
		  not use "start" in a command if a label was
 | 
			
		||||
		  also start.
 | 
			
		||||
		* Changed the needed geometry string.
 | 
			
		||||
		  We don't use window size, and don't support
 | 
			
		||||
		  negative positions.
 | 
			
		||||
	03/09/1998 (Martijn Pieterse, pieterse@xs4all.nl)
 | 
			
		||||
		* Added parse_rcfile2
 | 
			
		||||
	02/09/1998 (Martijn Pieterse, pieterse@xs4all.nl)
 | 
			
		||||
		* Added -geometry support (untested)
 | 
			
		||||
	28/08/1998 (Martijn Pieterse, pieterse@xs4all.nl)
 | 
			
		||||
		* Added createXBMfromXPM routine
 | 
			
		||||
		* Saves a lot of work with changing xpm's.
 | 
			
		||||
	02/05/1998 (Martijn Pieterse, pieterse@xs4all.nl)
 | 
			
		||||
		* changed the read_rc_file to parse_rcfile, as suggester by Marcelo E. Magallon
 | 
			
		||||
		* changed the read_rc_file to parse_rcfile, as suggested by Marcelo E. Magallon
 | 
			
		||||
		* debugged the parse_rc file.
 | 
			
		||||
	30/04/1998 (Martijn Pieterse, pieterse@xs4all.nl)
 | 
			
		||||
		* Ripped similar code from all the wm* programs,
 | 
			
		||||
| 
						 | 
				
			
			@ -23,7 +40,6 @@
 | 
			
		|||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#define _GNU_SOURCE
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -66,7 +82,6 @@ typedef struct {
 | 
			
		|||
	int		right;
 | 
			
		||||
} MOUSE_REGION;
 | 
			
		||||
 | 
			
		||||
#define MAX_MOUSE_REGION (8)
 | 
			
		||||
MOUSE_REGION	mouse_region[MAX_MOUSE_REGION];
 | 
			
		||||
 | 
			
		||||
  /***********************/
 | 
			
		||||
| 
						 | 
				
			
			@ -80,17 +95,53 @@ void AddMouseRegion(int, int, int, int, int);
 | 
			
		|||
int CheckMouseRegion(int, int);
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************\
 | 
			
		||||
|* read_rc_file																   *|
 | 
			
		||||
|* parse_rcfile																   *|
 | 
			
		||||
\*******************************************************************************/
 | 
			
		||||
 | 
			
		||||
void parse_rcfile(const char *filename, rckeys *keys) {
 | 
			
		||||
 | 
			
		||||
	char	*p,*q;
 | 
			
		||||
	char	temp[128];
 | 
			
		||||
	char	*tokens = " :\t\n";
 | 
			
		||||
	FILE	*fp;
 | 
			
		||||
	int		i,key;
 | 
			
		||||
 | 
			
		||||
	fp = fopen(filename, "r");
 | 
			
		||||
	if (fp) {
 | 
			
		||||
		while (fgets(temp, 128, fp)) {
 | 
			
		||||
			key = 0;
 | 
			
		||||
			q = strdup(temp);
 | 
			
		||||
			q = strtok(q, tokens);
 | 
			
		||||
			while (key >= 0 && keys[key].label) {
 | 
			
		||||
				if ((!strcmp(q, keys[key].label))) {
 | 
			
		||||
					p = strstr(temp, keys[key].label);
 | 
			
		||||
					p += strlen(keys[key].label);
 | 
			
		||||
					p += strspn(p, tokens);
 | 
			
		||||
					if ((i = strcspn(p, "#\n"))) p[i] = 0;
 | 
			
		||||
					free(*keys[key].var);
 | 
			
		||||
					*keys[key].var = strdup(p);
 | 
			
		||||
					key = -1;
 | 
			
		||||
				} else key++;
 | 
			
		||||
			}
 | 
			
		||||
			free(q);
 | 
			
		||||
		}
 | 
			
		||||
		fclose(fp);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************\
 | 
			
		||||
|* parse_rcfile2															   *|
 | 
			
		||||
\*******************************************************************************/
 | 
			
		||||
 | 
			
		||||
void parse_rcfile2(const char *filename, rckeys2 *keys) {
 | 
			
		||||
 | 
			
		||||
	char	*p;
 | 
			
		||||
	char	*line = NULL;
 | 
			
		||||
	size_t  line_size = 0;
 | 
			
		||||
	char	*tokens = " :\t\n";
 | 
			
		||||
	FILE	*fp;
 | 
			
		||||
	int		i,key;
 | 
			
		||||
	char	*family = NULL;
 | 
			
		||||
 | 
			
		||||
	fp = fopen(filename, "r");
 | 
			
		||||
	if (fp) {
 | 
			
		||||
| 
						 | 
				
			
			@ -109,6 +160,7 @@ void parse_rcfile(const char *filename, rckeys *keys) {
 | 
			
		|||
		}
 | 
			
		||||
		fclose(fp);
 | 
			
		||||
	}
 | 
			
		||||
	free(family);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -236,6 +288,54 @@ int CheckMouseRegion(int x, int y) {
 | 
			
		|||
	return (i-1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************\
 | 
			
		||||
|* createXBMfromXPM															   *|
 | 
			
		||||
\*******************************************************************************/
 | 
			
		||||
void createXBMfromXPM(char *xbm, char **xpm, int sx, int sy) {
 | 
			
		||||
 | 
			
		||||
	int		i,j,k;
 | 
			
		||||
	int		width, height, numcol, depth;
 | 
			
		||||
    int 	zero=0;
 | 
			
		||||
	unsigned char	bwrite;
 | 
			
		||||
    int		bcount;
 | 
			
		||||
    int     curpixel;
 | 
			
		||||
 | 
			
		||||
	sscanf(*xpm, "%d %d %d %d", &width, &height, &numcol, &depth);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    for (k=0; k!=depth; k++)
 | 
			
		||||
    {
 | 
			
		||||
        zero <<=8;
 | 
			
		||||
        zero |= xpm[1][k];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	for (i=numcol+1; i < numcol+sy+1; i++) {
 | 
			
		||||
		bcount = 0;
 | 
			
		||||
		bwrite = 0;
 | 
			
		||||
		for (j=0; j<sx*depth; j+=depth) {
 | 
			
		||||
            bwrite >>= 1;
 | 
			
		||||
 | 
			
		||||
            curpixel=0;
 | 
			
		||||
            for (k=0; k!=depth; k++)
 | 
			
		||||
            {
 | 
			
		||||
                curpixel <<=8;
 | 
			
		||||
                curpixel |= xpm[i][j+k];
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ( curpixel != zero ) {
 | 
			
		||||
				bwrite += 128;
 | 
			
		||||
			}
 | 
			
		||||
			bcount++;
 | 
			
		||||
			if (bcount == 8) {
 | 
			
		||||
				*xbm = bwrite;
 | 
			
		||||
				xbm++;
 | 
			
		||||
				bcount = 0;
 | 
			
		||||
				bwrite = 0;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************\
 | 
			
		||||
|* copyXPMArea																   *|
 | 
			
		||||
\*******************************************************************************/
 | 
			
		||||
| 
						 | 
				
			
			@ -274,16 +374,16 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
	unsigned int	borderwidth = 1;
 | 
			
		||||
	XClassHint		classHint;
 | 
			
		||||
	char			*display_name = NULL;
 | 
			
		||||
	char			*geometry = NULL;
 | 
			
		||||
	char			*wname = argv[0];
 | 
			
		||||
	XTextProperty	name;
 | 
			
		||||
 | 
			
		||||
	XGCValues		gcv;
 | 
			
		||||
	unsigned long	gcm;
 | 
			
		||||
 | 
			
		||||
	char			*geometry = NULL;
 | 
			
		||||
 | 
			
		||||
	int				dummy=0;
 | 
			
		||||
	int				i;
 | 
			
		||||
	int				i, wx, wy;
 | 
			
		||||
 | 
			
		||||
	for (i=1; argv[i]; i++) {
 | 
			
		||||
		if (!strcmp(argv[i], "-display"))
 | 
			
		||||
| 
						 | 
				
			
			@ -314,8 +414,7 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
	fore_pix = GetColor("black");
 | 
			
		||||
 | 
			
		||||
	XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints,
 | 
			
		||||
	            &mysizehints.x, &mysizehints.y,
 | 
			
		||||
	            &mysizehints.width, &mysizehints.height, &dummy);
 | 
			
		||||
				&mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy);
 | 
			
		||||
	if (geometry)
 | 
			
		||||
		XParseGeometry(geometry, &mysizehints.x, &mysizehints.y,
 | 
			
		||||
		               (unsigned int *) &mysizehints.width, (unsigned int *) &mysizehints.height);
 | 
			
		||||
| 
						 | 
				
			
			@ -374,7 +473,11 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
	XSetCommand(display, win, argv, argc);
 | 
			
		||||
	XMapWindow(display, win);
 | 
			
		||||
 | 
			
		||||
	if (geometry) {
 | 
			
		||||
		if (sscanf(geometry, "+%d+%d", &wx, &wy) != 2) {
 | 
			
		||||
			fprintf(stderr, "Bad geometry string.\n");
 | 
			
		||||
			exit(1);
 | 
			
		||||
		}
 | 
			
		||||
		XMoveWindow(display, win, wx, wy);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* vim: sw=4 ts=4 columns=82
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,7 +5,7 @@
 | 
			
		|||
 /* Defines */
 | 
			
		||||
/***********/
 | 
			
		||||
 | 
			
		||||
#define MAX_MOUSE_REGION (8)
 | 
			
		||||
#define MAX_MOUSE_REGION (16)
 | 
			
		||||
 | 
			
		||||
  /************/
 | 
			
		||||
 /* Typedefs */
 | 
			
		||||
| 
						 | 
				
			
			@ -18,6 +18,14 @@ struct _rckeys {
 | 
			
		|||
	char		**var;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct _rckeys2 rckeys2;
 | 
			
		||||
 | 
			
		||||
struct _rckeys2 {
 | 
			
		||||
	const char	*family;
 | 
			
		||||
	const char	*label;
 | 
			
		||||
	char		**var;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
	Pixmap			pixmap;
 | 
			
		||||
	Pixmap			mask;
 | 
			
		||||
| 
						 | 
				
			
			@ -41,6 +49,7 @@ void openXwindow(int argc, char *argv[], char **, char *, int, int);
 | 
			
		|||
void RedrawWindow(void);
 | 
			
		||||
void RedrawWindowXY(int x, int y);
 | 
			
		||||
 | 
			
		||||
void createXBMfromXPM(char *, char **, int, int);
 | 
			
		||||
void copyXPMArea(int, int, int, int, int, int);
 | 
			
		||||
void copyXBMArea(int, int, int, int, int, int);
 | 
			
		||||
void setMaskXY(int, int);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,9 @@
 | 
			
		|||
 | 
			
		||||
	---
 | 
			
		||||
	CHANGES:
 | 
			
		||||
    ---
 | 
			
		||||
	---
 | 
			
		||||
	10/10/2003 (Simon Law, sfllaw@debian.org)
 | 
			
		||||
		* changed the parse_rcfile function to use getline instead of fgets.
 | 
			
		||||
    14/09/1998 (Dave Clark, clarkd@skyia.com)
 | 
			
		||||
        * Updated createXBMfromXPM routine
 | 
			
		||||
        * Now supports >256 colors
 | 
			
		||||
| 
						 | 
				
			
			@ -134,7 +136,8 @@ void parse_rcfile(const char *filename, rckeys *keys) {
 | 
			
		|||
void parse_rcfile2(const char *filename, rckeys2 *keys) {
 | 
			
		||||
 | 
			
		||||
	char	*p;
 | 
			
		||||
	char	temp[128];
 | 
			
		||||
	char	*line = NULL;
 | 
			
		||||
	size_t  line_size = 0;
 | 
			
		||||
	char	*tokens = " :\t\n";
 | 
			
		||||
	FILE	*fp;
 | 
			
		||||
	int		i,key;
 | 
			
		||||
| 
						 | 
				
			
			@ -142,10 +145,10 @@ void parse_rcfile2(const char *filename, rckeys2 *keys) {
 | 
			
		|||
 | 
			
		||||
	fp = fopen(filename, "r");
 | 
			
		||||
	if (fp) {
 | 
			
		||||
		while (fgets(temp, 128, fp)) {
 | 
			
		||||
		while (getline(&line, &line_size, fp) >= 0) {
 | 
			
		||||
			key = 0;
 | 
			
		||||
			while (key >= 0 && keys[key].label) {
 | 
			
		||||
				if ((p = strstr(temp, keys[key].label))) {
 | 
			
		||||
				if ((p = strstr(line, keys[key].label))) {
 | 
			
		||||
					p += strlen(keys[key].label);
 | 
			
		||||
					p += strspn(p, tokens);
 | 
			
		||||
					if ((i = strcspn(p, "#\n"))) p[i] = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -383,14 +386,10 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
	int				i, wx, wy;
 | 
			
		||||
 | 
			
		||||
	for (i=1; argv[i]; i++) {
 | 
			
		||||
		if (!strcmp(argv[i], "-display")) {
 | 
			
		||||
			display_name = argv[i+1];
 | 
			
		||||
			i++;
 | 
			
		||||
		}
 | 
			
		||||
		if (!strcmp(argv[i], "-geometry")) {
 | 
			
		||||
			geometry = argv[i+1];
 | 
			
		||||
			i++;
 | 
			
		||||
		}
 | 
			
		||||
		if (!strcmp(argv[i], "-display"))
 | 
			
		||||
			display_name = argv[++i];
 | 
			
		||||
		else if (!strcmp(argv[i], "-geometry"))
 | 
			
		||||
			geometry = argv[++i];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!(display = XOpenDisplay(display_name))) {
 | 
			
		||||
| 
						 | 
				
			
			@ -416,6 +415,9 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
 | 
			
		||||
	XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints,
 | 
			
		||||
				&mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy);
 | 
			
		||||
	if (geometry)
 | 
			
		||||
		XParseGeometry(geometry, &mysizehints.x, &mysizehints.y,
 | 
			
		||||
		               (unsigned int *) &mysizehints.width, (unsigned int *) &mysizehints.height);
 | 
			
		||||
 | 
			
		||||
	mysizehints.width = 64;
 | 
			
		||||
	mysizehints.height = 64;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,9 @@
 | 
			
		|||
 | 
			
		||||
	---
 | 
			
		||||
	CHANGES:
 | 
			
		||||
    ---
 | 
			
		||||
	---
 | 
			
		||||
	10/10/2003 (Simon Law, sfllaw@debian.org)
 | 
			
		||||
		* changed the parse_rcfile function to use getline instead of fgets.
 | 
			
		||||
    14/09/1998 (Dave Clark, clarkd@skyia.com)
 | 
			
		||||
        * Updated createXBMfromXPM routine
 | 
			
		||||
        * Now supports >256 colors
 | 
			
		||||
| 
						 | 
				
			
			@ -134,7 +136,8 @@ void parse_rcfile(const char *filename, rckeys *keys) {
 | 
			
		|||
void parse_rcfile2(const char *filename, rckeys2 *keys) {
 | 
			
		||||
 | 
			
		||||
	char	*p;
 | 
			
		||||
	char	temp[128];
 | 
			
		||||
	char	*line = NULL;
 | 
			
		||||
	size_t  line_size = 0;
 | 
			
		||||
	char	*tokens = " :\t\n";
 | 
			
		||||
	FILE	*fp;
 | 
			
		||||
	int		i,key;
 | 
			
		||||
| 
						 | 
				
			
			@ -142,10 +145,10 @@ void parse_rcfile2(const char *filename, rckeys2 *keys) {
 | 
			
		|||
 | 
			
		||||
	fp = fopen(filename, "r");
 | 
			
		||||
	if (fp) {
 | 
			
		||||
		while (fgets(temp, 128, fp)) {
 | 
			
		||||
		while (getline(&line, &line_size, fp) >= 0) {
 | 
			
		||||
			key = 0;
 | 
			
		||||
			while (key >= 0 && keys[key].label) {
 | 
			
		||||
				if ((p = strstr(temp, keys[key].label))) {
 | 
			
		||||
				if ((p = strstr(line, keys[key].label))) {
 | 
			
		||||
					p += strlen(keys[key].label);
 | 
			
		||||
					p += strspn(p, tokens);
 | 
			
		||||
					if ((i = strcspn(p, "#\n"))) p[i] = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -383,14 +386,10 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
	int				i, wx, wy;
 | 
			
		||||
 | 
			
		||||
	for (i=1; argv[i]; i++) {
 | 
			
		||||
		if (!strcmp(argv[i], "-display")) {
 | 
			
		||||
			display_name = argv[i+1];
 | 
			
		||||
			i++;
 | 
			
		||||
		}
 | 
			
		||||
		if (!strcmp(argv[i], "-geometry")) {
 | 
			
		||||
			geometry = argv[i+1];
 | 
			
		||||
			i++;
 | 
			
		||||
		}
 | 
			
		||||
		if (!strcmp(argv[i], "-display"))
 | 
			
		||||
			display_name = argv[++i];
 | 
			
		||||
		else if (!strcmp(argv[i], "-geometry"))
 | 
			
		||||
			geometry = argv[++i];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!(display = XOpenDisplay(display_name))) {
 | 
			
		||||
| 
						 | 
				
			
			@ -416,6 +415,9 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
 | 
			
		||||
	XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints,
 | 
			
		||||
				&mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy);
 | 
			
		||||
	if (geometry)
 | 
			
		||||
		XParseGeometry(geometry, &mysizehints.x, &mysizehints.y,
 | 
			
		||||
		               (unsigned int *) &mysizehints.width, (unsigned int *) &mysizehints.height);
 | 
			
		||||
 | 
			
		||||
	mysizehints.width = 64;
 | 
			
		||||
	mysizehints.height = 64;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,8 +14,25 @@
 | 
			
		|||
	---
 | 
			
		||||
	10/10/2003 (Simon Law, sfllaw@debian.org)
 | 
			
		||||
		* changed the parse_rcfile function to use getline instead of fgets.
 | 
			
		||||
    14/09/1998 (Dave Clark, clarkd@skyia.com)
 | 
			
		||||
        * Updated createXBMfromXPM routine
 | 
			
		||||
        * Now supports >256 colors
 | 
			
		||||
	11/09/1998 (Martijn Pieterse, pieterse@xs4all.nl)
 | 
			
		||||
		* Removed a bug from parse_rcfile. You could
 | 
			
		||||
		  not use "start" in a command if a label was
 | 
			
		||||
		  also start.
 | 
			
		||||
		* Changed the needed geometry string.
 | 
			
		||||
		  We don't use window size, and don't support
 | 
			
		||||
		  negative positions.
 | 
			
		||||
	03/09/1998 (Martijn Pieterse, pieterse@xs4all.nl)
 | 
			
		||||
		* Added parse_rcfile2
 | 
			
		||||
	02/09/1998 (Martijn Pieterse, pieterse@xs4all.nl)
 | 
			
		||||
		* Added -geometry support (untested)
 | 
			
		||||
	28/08/1998 (Martijn Pieterse, pieterse@xs4all.nl)
 | 
			
		||||
		* Added createXBMfromXPM routine
 | 
			
		||||
		* Saves a lot of work with changing xpm's.
 | 
			
		||||
	02/05/1998 (Martijn Pieterse, pieterse@xs4all.nl)
 | 
			
		||||
		* changed the read_rc_file to parse_rcfile, as suggester by Marcelo E. Magallon
 | 
			
		||||
		* changed the read_rc_file to parse_rcfile, as suggested by Marcelo E. Magallon
 | 
			
		||||
		* debugged the parse_rc file.
 | 
			
		||||
	30/04/1998 (Martijn Pieterse, pieterse@xs4all.nl)
 | 
			
		||||
		* Ripped similar code from all the wm* programs,
 | 
			
		||||
| 
						 | 
				
			
			@ -23,7 +40,6 @@
 | 
			
		|||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#define _GNU_SOURCE
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -46,11 +62,6 @@ int			screen;
 | 
			
		|||
int			x_fd;
 | 
			
		||||
int			d_depth;
 | 
			
		||||
XSizeHints	mysizehints;
 | 
			
		||||
/* Deal with strange X11 function prototyping...
 | 
			
		||||
 * If I don't do this, I will get warnings about the sign
 | 
			
		||||
 * of the width/height variables - which are thrown away anyway. */
 | 
			
		||||
int dummy_int_width, dummy_int_height;
 | 
			
		||||
unsigned int uint_width, uint_height;
 | 
			
		||||
XWMHints	mywmhints;
 | 
			
		||||
Pixel		back_pix, fore_pix;
 | 
			
		||||
char		*Geometry = "";
 | 
			
		||||
| 
						 | 
				
			
			@ -71,7 +82,6 @@ typedef struct {
 | 
			
		|||
	int		right;
 | 
			
		||||
} MOUSE_REGION;
 | 
			
		||||
 | 
			
		||||
#define MAX_MOUSE_REGION (8)
 | 
			
		||||
MOUSE_REGION	mouse_region[MAX_MOUSE_REGION];
 | 
			
		||||
 | 
			
		||||
  /***********************/
 | 
			
		||||
| 
						 | 
				
			
			@ -85,17 +95,53 @@ void AddMouseRegion(int, int, int, int, int);
 | 
			
		|||
int CheckMouseRegion(int, int);
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************\
 | 
			
		||||
|* read_rc_file																   *|
 | 
			
		||||
|* parse_rcfile																   *|
 | 
			
		||||
\*******************************************************************************/
 | 
			
		||||
 | 
			
		||||
void parse_rcfile(const char *filename, rckeys *keys) {
 | 
			
		||||
 | 
			
		||||
	char	*p,*q;
 | 
			
		||||
	char	temp[128];
 | 
			
		||||
	char	*tokens = " :\t\n";
 | 
			
		||||
	FILE	*fp;
 | 
			
		||||
	int		i,key;
 | 
			
		||||
 | 
			
		||||
	fp = fopen(filename, "r");
 | 
			
		||||
	if (fp) {
 | 
			
		||||
		while (fgets(temp, 128, fp)) {
 | 
			
		||||
			key = 0;
 | 
			
		||||
			q = strdup(temp);
 | 
			
		||||
			q = strtok(q, tokens);
 | 
			
		||||
			while (key >= 0 && keys[key].label) {
 | 
			
		||||
				if ((!strcmp(q, keys[key].label))) {
 | 
			
		||||
					p = strstr(temp, keys[key].label);
 | 
			
		||||
					p += strlen(keys[key].label);
 | 
			
		||||
					p += strspn(p, tokens);
 | 
			
		||||
					if ((i = strcspn(p, "#\n"))) p[i] = 0;
 | 
			
		||||
					free(*keys[key].var);
 | 
			
		||||
					*keys[key].var = strdup(p);
 | 
			
		||||
					key = -1;
 | 
			
		||||
				} else key++;
 | 
			
		||||
			}
 | 
			
		||||
			free(q);
 | 
			
		||||
		}
 | 
			
		||||
		fclose(fp);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************\
 | 
			
		||||
|* parse_rcfile2															   *|
 | 
			
		||||
\*******************************************************************************/
 | 
			
		||||
 | 
			
		||||
void parse_rcfile2(const char *filename, rckeys2 *keys) {
 | 
			
		||||
 | 
			
		||||
	char	*p;
 | 
			
		||||
	char	*line = NULL;
 | 
			
		||||
	size_t  line_size = 0;
 | 
			
		||||
	char	*tokens = " :\t\n";
 | 
			
		||||
	FILE	*fp;
 | 
			
		||||
	int		i,key;
 | 
			
		||||
	char	*family = NULL;
 | 
			
		||||
 | 
			
		||||
	fp = fopen(filename, "r");
 | 
			
		||||
	if (fp) {
 | 
			
		||||
| 
						 | 
				
			
			@ -114,6 +160,7 @@ void parse_rcfile(const char *filename, rckeys *keys) {
 | 
			
		|||
		}
 | 
			
		||||
		fclose(fp);
 | 
			
		||||
	}
 | 
			
		||||
	free(family);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -241,6 +288,54 @@ int CheckMouseRegion(int x, int y) {
 | 
			
		|||
	return (i-1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************\
 | 
			
		||||
|* createXBMfromXPM															   *|
 | 
			
		||||
\*******************************************************************************/
 | 
			
		||||
void createXBMfromXPM(char *xbm, char **xpm, int sx, int sy) {
 | 
			
		||||
 | 
			
		||||
	int		i,j,k;
 | 
			
		||||
	int		width, height, numcol, depth;
 | 
			
		||||
    int 	zero=0;
 | 
			
		||||
	unsigned char	bwrite;
 | 
			
		||||
    int		bcount;
 | 
			
		||||
    int     curpixel;
 | 
			
		||||
 | 
			
		||||
	sscanf(*xpm, "%d %d %d %d", &width, &height, &numcol, &depth);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    for (k=0; k!=depth; k++)
 | 
			
		||||
    {
 | 
			
		||||
        zero <<=8;
 | 
			
		||||
        zero |= xpm[1][k];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	for (i=numcol+1; i < numcol+sy+1; i++) {
 | 
			
		||||
		bcount = 0;
 | 
			
		||||
		bwrite = 0;
 | 
			
		||||
		for (j=0; j<sx*depth; j+=depth) {
 | 
			
		||||
            bwrite >>= 1;
 | 
			
		||||
 | 
			
		||||
            curpixel=0;
 | 
			
		||||
            for (k=0; k!=depth; k++)
 | 
			
		||||
            {
 | 
			
		||||
                curpixel <<=8;
 | 
			
		||||
                curpixel |= xpm[i][j+k];
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ( curpixel != zero ) {
 | 
			
		||||
				bwrite += 128;
 | 
			
		||||
			}
 | 
			
		||||
			bcount++;
 | 
			
		||||
			if (bcount == 8) {
 | 
			
		||||
				*xbm = bwrite;
 | 
			
		||||
				xbm++;
 | 
			
		||||
				bcount = 0;
 | 
			
		||||
				bwrite = 0;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************\
 | 
			
		||||
|* copyXPMArea																   *|
 | 
			
		||||
\*******************************************************************************/
 | 
			
		||||
| 
						 | 
				
			
			@ -279,16 +374,16 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
	unsigned int	borderwidth = 1;
 | 
			
		||||
	XClassHint		classHint;
 | 
			
		||||
	char			*display_name = NULL;
 | 
			
		||||
	char			*geometry = NULL;
 | 
			
		||||
	char			*wname = argv[0];
 | 
			
		||||
	XTextProperty	name;
 | 
			
		||||
 | 
			
		||||
	XGCValues		gcv;
 | 
			
		||||
	unsigned long	gcm;
 | 
			
		||||
 | 
			
		||||
	char			*geometry = NULL;
 | 
			
		||||
 | 
			
		||||
	int				dummy=0;
 | 
			
		||||
	int				i;
 | 
			
		||||
	int				i, wx, wy;
 | 
			
		||||
 | 
			
		||||
	for (i=1; argv[i]; i++) {
 | 
			
		||||
		if (!strcmp(argv[i], "-display"))
 | 
			
		||||
| 
						 | 
				
			
			@ -319,21 +414,19 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
	fore_pix = GetColor("black");
 | 
			
		||||
 | 
			
		||||
	XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints,
 | 
			
		||||
	            &mysizehints.x, &mysizehints.y,
 | 
			
		||||
	            &dummy_int_width, &dummy_int_height, &dummy);
 | 
			
		||||
				&mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy);
 | 
			
		||||
	if (geometry)
 | 
			
		||||
		XParseGeometry(geometry, &mysizehints.x, &mysizehints.y,
 | 
			
		||||
		               &uint_width, &uint_height);
 | 
			
		||||
		               (unsigned int *) &mysizehints.width, (unsigned int *) &mysizehints.height);
 | 
			
		||||
 | 
			
		||||
   /* Override width/height anyway */
 | 
			
		||||
	uint_width = 64;
 | 
			
		||||
	uint_height = 64;
 | 
			
		||||
	mysizehints.width = 64;
 | 
			
		||||
	mysizehints.height = 64;
 | 
			
		||||
 | 
			
		||||
	win = XCreateSimpleWindow(display, Root, mysizehints.x, mysizehints.y,
 | 
			
		||||
				uint_width, uint_height, borderwidth, fore_pix, back_pix);
 | 
			
		||||
				mysizehints.width, mysizehints.height, borderwidth, fore_pix, back_pix);
 | 
			
		||||
 | 
			
		||||
	iconwin = XCreateSimpleWindow(display, win, mysizehints.x, mysizehints.y,
 | 
			
		||||
				uint_width, uint_height, borderwidth, fore_pix, back_pix);
 | 
			
		||||
				mysizehints.width, mysizehints.height, borderwidth, fore_pix, back_pix);
 | 
			
		||||
 | 
			
		||||
	/* Activate hints */
 | 
			
		||||
	XSetWMNormalHints(display, win, &mysizehints);
 | 
			
		||||
| 
						 | 
				
			
			@ -380,7 +473,11 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
	XSetCommand(display, win, argv, argc);
 | 
			
		||||
	XMapWindow(display, win);
 | 
			
		||||
 | 
			
		||||
	if (geometry) {
 | 
			
		||||
		if (sscanf(geometry, "+%d+%d", &wx, &wy) != 2) {
 | 
			
		||||
			fprintf(stderr, "Bad geometry string.\n");
 | 
			
		||||
			exit(1);
 | 
			
		||||
		}
 | 
			
		||||
		XMoveWindow(display, win, wx, wy);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* vim: ts=4 columns=82
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,7 +5,7 @@
 | 
			
		|||
 /* Defines */
 | 
			
		||||
/***********/
 | 
			
		||||
 | 
			
		||||
#define MAX_MOUSE_REGION (8)
 | 
			
		||||
#define MAX_MOUSE_REGION (16)
 | 
			
		||||
 | 
			
		||||
  /************/
 | 
			
		||||
 /* Typedefs */
 | 
			
		||||
| 
						 | 
				
			
			@ -18,6 +18,14 @@ struct _rckeys {
 | 
			
		|||
	char		**var;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct _rckeys2 rckeys2;
 | 
			
		||||
 | 
			
		||||
struct _rckeys2 {
 | 
			
		||||
	const char	*family;
 | 
			
		||||
	const char	*label;
 | 
			
		||||
	char		**var;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
	Pixmap			pixmap;
 | 
			
		||||
	Pixmap			mask;
 | 
			
		||||
| 
						 | 
				
			
			@ -41,6 +49,7 @@ void openXwindow(int argc, char *argv[], char **, char *, int, int);
 | 
			
		|||
void RedrawWindow(void);
 | 
			
		||||
void RedrawWindowXY(int x, int y);
 | 
			
		||||
 | 
			
		||||
void createXBMfromXPM(char *, char **, int, int);
 | 
			
		||||
void copyXPMArea(int, int, int, int, int, int);
 | 
			
		||||
void copyXBMArea(int, int, int, int, int, int);
 | 
			
		||||
void setMaskXY(int, int);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,9 @@
 | 
			
		|||
 | 
			
		||||
	---
 | 
			
		||||
	CHANGES:
 | 
			
		||||
    ---
 | 
			
		||||
	---
 | 
			
		||||
	10/10/2003 (Simon Law, sfllaw@debian.org)
 | 
			
		||||
		* changed the parse_rcfile function to use getline instead of fgets.
 | 
			
		||||
    14/09/1998 (Dave Clark, clarkd@skyia.com)
 | 
			
		||||
        * Updated createXBMfromXPM routine
 | 
			
		||||
        * Now supports >256 colors
 | 
			
		||||
| 
						 | 
				
			
			@ -134,7 +136,8 @@ void parse_rcfile(const char *filename, rckeys *keys) {
 | 
			
		|||
void parse_rcfile2(const char *filename, rckeys2 *keys) {
 | 
			
		||||
 | 
			
		||||
	char	*p;
 | 
			
		||||
	char	temp[128];
 | 
			
		||||
	char	*line = NULL;
 | 
			
		||||
	size_t  line_size = 0;
 | 
			
		||||
	char	*tokens = " :\t\n";
 | 
			
		||||
	FILE	*fp;
 | 
			
		||||
	int		i,key;
 | 
			
		||||
| 
						 | 
				
			
			@ -142,10 +145,10 @@ void parse_rcfile2(const char *filename, rckeys2 *keys) {
 | 
			
		|||
 | 
			
		||||
	fp = fopen(filename, "r");
 | 
			
		||||
	if (fp) {
 | 
			
		||||
		while (fgets(temp, 128, fp)) {
 | 
			
		||||
		while (getline(&line, &line_size, fp) >= 0) {
 | 
			
		||||
			key = 0;
 | 
			
		||||
			while (key >= 0 && keys[key].label) {
 | 
			
		||||
				if ((p = strstr(temp, keys[key].label))) {
 | 
			
		||||
				if ((p = strstr(line, keys[key].label))) {
 | 
			
		||||
					p += strlen(keys[key].label);
 | 
			
		||||
					p += strspn(p, tokens);
 | 
			
		||||
					if ((i = strcspn(p, "#\n"))) p[i] = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -383,14 +386,10 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
	int				i, wx, wy;
 | 
			
		||||
 | 
			
		||||
	for (i=1; argv[i]; i++) {
 | 
			
		||||
		if (!strcmp(argv[i], "-display")) {
 | 
			
		||||
			display_name = argv[i+1];
 | 
			
		||||
			i++;
 | 
			
		||||
		}
 | 
			
		||||
		if (!strcmp(argv[i], "-geometry")) {
 | 
			
		||||
			geometry = argv[i+1];
 | 
			
		||||
			i++;
 | 
			
		||||
		}
 | 
			
		||||
		if (!strcmp(argv[i], "-display"))
 | 
			
		||||
			display_name = argv[++i];
 | 
			
		||||
		else if (!strcmp(argv[i], "-geometry"))
 | 
			
		||||
			geometry = argv[++i];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!(display = XOpenDisplay(display_name))) {
 | 
			
		||||
| 
						 | 
				
			
			@ -416,6 +415,9 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 | 
			
		|||
 | 
			
		||||
	XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints,
 | 
			
		||||
				&mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy);
 | 
			
		||||
	if (geometry)
 | 
			
		||||
		XParseGeometry(geometry, &mysizehints.x, &mysizehints.y,
 | 
			
		||||
		               (unsigned int *) &mysizehints.width, (unsigned int *) &mysizehints.height);
 | 
			
		||||
 | 
			
		||||
	mysizehints.width = 64;
 | 
			
		||||
	mysizehints.height = 64;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue