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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										52
									
								
								st.c
								
								
								
								
							
							
						
						
									
										52
									
								
								st.c
								
								
								
								
							| 
						 | 
					@ -27,6 +27,10 @@
 | 
				
			||||||
#include <X11/Xft/Xft.h>
 | 
					#include <X11/Xft/Xft.h>
 | 
				
			||||||
#include <fontconfig/fontconfig.h>
 | 
					#include <fontconfig/fontconfig.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "arg.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					char *argv0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define Glyph Glyph_
 | 
					#define Glyph Glyph_
 | 
				
			||||||
#define Font Font_
 | 
					#define Font Font_
 | 
				
			||||||
#define Draw XftDraw *
 | 
					#define Draw XftDraw *
 | 
				
			||||||
| 
						 | 
					@ -41,10 +45,6 @@
 | 
				
			||||||
 #include <libutil.h>
 | 
					 #include <libutil.h>
 | 
				
			||||||
#endif
 | 
					#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 */
 | 
					/* XEMBED messages */
 | 
				
			||||||
#define XEMBED_FOCUS_IN  4
 | 
					#define XEMBED_FOCUS_IN  4
 | 
				
			||||||
| 
						 | 
					@ -3308,37 +3308,37 @@ 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
 | 
					int
 | 
				
			||||||
main(int argc, char *argv[]) {
 | 
					main(int argc, char *argv[]) {
 | 
				
			||||||
	int i, bitm, xr, yr;
 | 
						int bitm, xr, yr;
 | 
				
			||||||
	uint wr, hr;
 | 
						uint wr, hr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	xw.fw = xw.fh = xw.fx = xw.fy = 0;
 | 
						xw.fw = xw.fh = xw.fx = xw.fy = 0;
 | 
				
			||||||
	xw.isfixed = False;
 | 
						xw.isfixed = False;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for(i = 1; i < argc; i++) {
 | 
						ARGBEGIN {
 | 
				
			||||||
		switch(argv[i][0] != '-' || argv[i][2] ? -1 : argv[i][1]) {
 | 
					 | 
				
			||||||
	case 'a':
 | 
						case 'a':
 | 
				
			||||||
		allowaltscreen = false;
 | 
							allowaltscreen = false;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case 'c':
 | 
						case 'c':
 | 
				
			||||||
			if(++i < argc)
 | 
							opt_class = EARGF(usage());
 | 
				
			||||||
				opt_class = argv[i];
 | 
					 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case 'e':
 | 
						case 'e':
 | 
				
			||||||
		/* eat all remaining arguments */
 | 
							/* eat all remaining arguments */
 | 
				
			||||||
			if(++i < argc)
 | 
							opt_cmd = &argv[1];
 | 
				
			||||||
				opt_cmd = &argv[i];
 | 
					 | 
				
			||||||
		goto run;
 | 
							goto run;
 | 
				
			||||||
	case 'f':
 | 
						case 'f':
 | 
				
			||||||
			if(++i < argc)
 | 
							opt_font = EARGF(usage());
 | 
				
			||||||
				opt_font = argv[i];
 | 
					 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case 'g':
 | 
						case 'g':
 | 
				
			||||||
			if(++i >= argc)
 | 
							bitm = XParseGeometry(EARGF(usage()), &xr, &yr, &wr, &hr);
 | 
				
			||||||
				break;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			bitm = XParseGeometry(argv[i], &xr, &yr, &wr, &hr);
 | 
					 | 
				
			||||||
		if(bitm & XValue)
 | 
							if(bitm & XValue)
 | 
				
			||||||
			xw.fx = xr;
 | 
								xw.fx = xr;
 | 
				
			||||||
		if(bitm & YValue)
 | 
							if(bitm & YValue)
 | 
				
			||||||
| 
						 | 
					@ -3356,22 +3356,18 @@ main(int argc, char *argv[]) {
 | 
				
			||||||
			xw.isfixed = True;
 | 
								xw.isfixed = True;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case 'o':
 | 
						case 'o':
 | 
				
			||||||
			if(++i < argc)
 | 
							opt_io = EARGF(usage());
 | 
				
			||||||
				opt_io = argv[i];
 | 
					 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case 't':
 | 
						case 't':
 | 
				
			||||||
			if(++i < argc)
 | 
							opt_title = EARGF(usage());
 | 
				
			||||||
				opt_title = argv[i];
 | 
							break;
 | 
				
			||||||
 | 
						case 'w':
 | 
				
			||||||
 | 
							opt_embed = EARGF(usage());
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case 'v':
 | 
						case 'v':
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
			die(USAGE);
 | 
							usage();
 | 
				
			||||||
		case 'w':
 | 
						} ARGEND;
 | 
				
			||||||
			if(++i < argc)
 | 
					 | 
				
			||||||
				opt_embed = argv[i];
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
run:
 | 
					run:
 | 
				
			||||||
	setlocale(LC_CTYPE, "");
 | 
						setlocale(LC_CTYPE, "");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue