Adopting arg.h with more flexible cmd handling.
This commit is contained in:
		
							parent
							
								
									580c8bbd46
								
							
						
					
					
						commit
						b1813b14d9
					
				|  | @ -0,0 +1,55 @@ | |||
| /*
 | ||||
|  * Copy me if you can. | ||||
|  * by 20h | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __ARG_H__ | ||||
| #define __ARG_H__ | ||||
| 
 | ||||
| extern char *argv0; | ||||
| 
 | ||||
| #define USED(x)		((void)(x)) | ||||
| 
 | ||||
| /* use main(int argc, char *argv[]) */ | ||||
| #define ARGBEGIN	for (argv0 = *argv, argv++, argc--;\ | ||||
| 					argv[0] && argv[0][1]\ | ||||
| 					&& argv[0][0] == '-';\ | ||||
| 					argc--, argv++) {\ | ||||
| 				char _argc;\ | ||||
| 				char **_argv;\ | ||||
| 				int brk;\ | ||||
| 				if (argv[0][1] == '-' && argv[0][2] == '\0') {\ | ||||
| 					argv++;\ | ||||
| 					argc--;\ | ||||
| 					break;\ | ||||
| 				}\ | ||||
| 				for (brk = 0, argv[0]++, _argv = argv;\ | ||||
| 						argv[0][0] && !brk;\ | ||||
| 						argv[0]++) {\ | ||||
| 					if (_argv != argv)\ | ||||
| 						break;\ | ||||
| 					_argc = argv[0][0];\ | ||||
| 					switch (_argc) | ||||
| 
 | ||||
| #define ARGEND			}\ | ||||
| 				USED(_argc);\ | ||||
| 			}\ | ||||
| 			USED(argv);\ | ||||
| 			USED(argc); | ||||
| 
 | ||||
| #define ARGC()		_argc | ||||
| 
 | ||||
| #define EARGF(x)	((argv[0][1] == '\0' && argv[1] == NULL)?\ | ||||
| 				((x), abort(), (char *)0) :\ | ||||
| 				(brk = 1, (argv[0][1] != '\0')?\ | ||||
| 					(&argv[0][1]) :\ | ||||
| 					(argc--, argv++, argv[0]))) | ||||
| 
 | ||||
| #define ARGF()		((argv[0][1] == '\0' && argv[1] == NULL)?\ | ||||
| 				(char *)0 :\ | ||||
| 				(brk = 1, (argv[0][1] != '\0')?\ | ||||
| 					(&argv[0][1]) :\ | ||||
| 					(argc--, argv++, argv[0]))) | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
							
								
								
									
										116
									
								
								st.c
								
								
								
								
							
							
						
						
									
										116
									
								
								st.c
								
								
								
								
							|  | @ -27,6 +27,10 @@ | |||
| #include <X11/Xft/Xft.h> | ||||
| #include <fontconfig/fontconfig.h> | ||||
| 
 | ||||
| #include "arg.h" | ||||
| 
 | ||||
| char *argv0; | ||||
| 
 | ||||
| #define Glyph Glyph_ | ||||
| #define Font Font_ | ||||
| #define Draw XftDraw * | ||||
|  | @ -41,10 +45,6 @@ | |||
|  #include <libutil.h> | ||||
| #endif | ||||
| 
 | ||||
| #define USAGE \ | ||||
| 	"st " VERSION " (c) 2010-2013 st engineers\n" \ | ||||
| 	"usage: st [-a] [-v] [-c class] [-f font] [-g geometry] [-o file]" \ | ||||
| 	" [-t title] [-w windowid] [-e command ...]\n" | ||||
| 
 | ||||
| /* XEMBED messages */ | ||||
| #define XEMBED_FOCUS_IN  4 | ||||
|  | @ -3308,70 +3308,66 @@ run(void) { | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| void | ||||
| usage(void) { | ||||
| 	die("%s " VERSION " (c) 2010-2013 st engineers\n" \ | ||||
| 	"usage: st [-a] [-v] [-c class] [-f font] [-g geometry] [-o file]" \ | ||||
| 	" [-t title] [-w windowid] [-e command ...]\n", argv0); | ||||
| } | ||||
| 
 | ||||
| int | ||||
| main(int argc, char *argv[]) { | ||||
| 	int i, bitm, xr, yr; | ||||
| 	int bitm, xr, yr; | ||||
| 	uint wr, hr; | ||||
| 
 | ||||
| 	xw.fw = xw.fh = xw.fx = xw.fy = 0; | ||||
| 	xw.isfixed = False; | ||||
| 
 | ||||
| 	for(i = 1; i < argc; i++) { | ||||
| 		switch(argv[i][0] != '-' || argv[i][2] ? -1 : argv[i][1]) { | ||||
| 		case 'a': | ||||
| 			allowaltscreen = false; | ||||
| 			break; | ||||
| 		case 'c': | ||||
| 			if(++i < argc) | ||||
| 				opt_class = argv[i]; | ||||
| 			break; | ||||
| 		case 'e': | ||||
| 			/* eat all remaining arguments */ | ||||
| 			if(++i < argc) | ||||
| 				opt_cmd = &argv[i]; | ||||
| 			goto run; | ||||
| 		case 'f': | ||||
| 			if(++i < argc) | ||||
| 				opt_font = argv[i]; | ||||
| 			break; | ||||
| 		case 'g': | ||||
| 			if(++i >= argc) | ||||
| 				break; | ||||
| 	ARGBEGIN { | ||||
| 	case 'a': | ||||
| 		allowaltscreen = false; | ||||
| 		break; | ||||
| 	case 'c': | ||||
| 		opt_class = EARGF(usage()); | ||||
| 		break; | ||||
| 	case 'e': | ||||
| 		/* eat all remaining arguments */ | ||||
| 		opt_cmd = &argv[1]; | ||||
| 		goto run; | ||||
| 	case 'f': | ||||
| 		opt_font = EARGF(usage()); | ||||
| 		break; | ||||
| 	case 'g': | ||||
| 		bitm = XParseGeometry(EARGF(usage()), &xr, &yr, &wr, &hr); | ||||
| 		if(bitm & XValue) | ||||
| 			xw.fx = xr; | ||||
| 		if(bitm & YValue) | ||||
| 			xw.fy = yr; | ||||
| 		if(bitm & WidthValue) | ||||
| 			xw.fw = (int)wr; | ||||
| 		if(bitm & HeightValue) | ||||
| 			xw.fh = (int)hr; | ||||
| 		if(bitm & XNegative && xw.fx == 0) | ||||
| 			xw.fx = -1; | ||||
| 		if(bitm & XNegative && xw.fy == 0) | ||||
| 			xw.fy = -1; | ||||
| 
 | ||||
| 			bitm = XParseGeometry(argv[i], &xr, &yr, &wr, &hr); | ||||
| 			if(bitm & XValue) | ||||
| 				xw.fx = xr; | ||||
| 			if(bitm & YValue) | ||||
| 				xw.fy = yr; | ||||
| 			if(bitm & WidthValue) | ||||
| 				xw.fw = (int)wr; | ||||
| 			if(bitm & HeightValue) | ||||
| 				xw.fh = (int)hr; | ||||
| 			if(bitm & XNegative && xw.fx == 0) | ||||
| 				xw.fx = -1; | ||||
| 			if(bitm & XNegative && xw.fy == 0) | ||||
| 				xw.fy = -1; | ||||
| 
 | ||||
| 			if(xw.fh != 0 && xw.fw != 0) | ||||
| 				xw.isfixed = True; | ||||
| 			break; | ||||
| 		case 'o': | ||||
| 			if(++i < argc) | ||||
| 				opt_io = argv[i]; | ||||
| 			break; | ||||
| 		case 't': | ||||
| 			if(++i < argc) | ||||
| 				opt_title = argv[i]; | ||||
| 			break; | ||||
| 		case 'v': | ||||
| 		default: | ||||
| 			die(USAGE); | ||||
| 		case 'w': | ||||
| 			if(++i < argc) | ||||
| 				opt_embed = argv[i]; | ||||
| 			break; | ||||
| 		} | ||||
| 	} | ||||
| 		if(xw.fh != 0 && xw.fw != 0) | ||||
| 			xw.isfixed = True; | ||||
| 		break; | ||||
| 	case 'o': | ||||
| 		opt_io = EARGF(usage()); | ||||
| 		break; | ||||
| 	case 't': | ||||
| 		opt_title = EARGF(usage()); | ||||
| 		break; | ||||
| 	case 'w': | ||||
| 		opt_embed = EARGF(usage()); | ||||
| 		break; | ||||
| 	case 'v': | ||||
| 	default: | ||||
| 		usage(); | ||||
| 	} ARGEND; | ||||
| 
 | ||||
| run: | ||||
| 	setlocale(LC_CTYPE, ""); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue