| 
									
										
										
										
											2013-04-03 21:00:38 +02:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Copy me if you can. | 
					
						
							|  |  |  |  * by 20h | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-18 08:29:28 +01:00
										 |  |  | #ifndef ARG_H__
 | 
					
						
							|  |  |  | #define ARG_H__
 | 
					
						
							| 
									
										
										
										
											2013-04-03 21:00:38 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | extern char *argv0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* use main(int argc, char *argv[]) */ | 
					
						
							|  |  |  | #define ARGBEGIN	for (argv0 = *argv, argv++, argc--;\
 | 
					
						
							|  |  |  | 					argv[0] && argv[0][1]\ | 
					
						
							|  |  |  | 					&& argv[0][0] == '-';\ | 
					
						
							|  |  |  | 					argc--, argv++) {\ | 
					
						
							| 
									
										
										
										
											2013-12-18 08:29:28 +01:00
										 |  |  | 				char argc_;\ | 
					
						
							|  |  |  | 				char **argv_;\ | 
					
						
							|  |  |  | 				int brk_;\ | 
					
						
							| 
									
										
										
										
											2013-04-03 21:00:38 +02:00
										 |  |  | 				if (argv[0][1] == '-' && argv[0][2] == '\0') {\ | 
					
						
							|  |  |  | 					argv++;\ | 
					
						
							|  |  |  | 					argc--;\ | 
					
						
							|  |  |  | 					break;\ | 
					
						
							|  |  |  | 				}\ | 
					
						
							| 
									
										
										
										
											2013-12-18 08:29:28 +01:00
										 |  |  | 				for (brk_ = 0, argv[0]++, argv_ = argv;\ | 
					
						
							|  |  |  | 						argv[0][0] && !brk_;\ | 
					
						
							| 
									
										
										
										
											2013-04-03 21:00:38 +02:00
										 |  |  | 						argv[0]++) {\ | 
					
						
							| 
									
										
										
										
											2013-12-18 08:29:28 +01:00
										 |  |  | 					if (argv_ != argv)\ | 
					
						
							| 
									
										
										
										
											2013-04-03 21:00:38 +02:00
										 |  |  | 						break;\ | 
					
						
							| 
									
										
										
										
											2013-12-18 08:29:28 +01:00
										 |  |  | 					argc_ = argv[0][0];\ | 
					
						
							|  |  |  | 					switch (argc_) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Handles obsolete -NUM syntax */ | 
					
						
							|  |  |  | #define ARGNUM				case '0':\
 | 
					
						
							|  |  |  | 					case '1':\ | 
					
						
							|  |  |  | 					case '2':\ | 
					
						
							|  |  |  | 					case '3':\ | 
					
						
							|  |  |  | 					case '4':\ | 
					
						
							|  |  |  | 					case '5':\ | 
					
						
							|  |  |  | 					case '6':\ | 
					
						
							|  |  |  | 					case '7':\ | 
					
						
							|  |  |  | 					case '8':\ | 
					
						
							|  |  |  | 					case '9' | 
					
						
							| 
									
										
										
										
											2013-04-03 21:00:38 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define ARGEND			}\
 | 
					
						
							| 
									
										
										
										
											2013-12-18 08:29:28 +01:00
										 |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define ARGC()		argc_
 | 
					
						
							| 
									
										
										
										
											2013-04-03 21:00:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-18 08:29:28 +01:00
										 |  |  | #define ARGNUMF(base)	(brk_ = 1, estrtol(argv[0], (base)))
 | 
					
						
							| 
									
										
										
										
											2013-04-03 21:00:38 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define EARGF(x)	((argv[0][1] == '\0' && argv[1] == NULL)?\
 | 
					
						
							|  |  |  | 				((x), abort(), (char *)0) :\ | 
					
						
							| 
									
										
										
										
											2013-12-18 08:29:28 +01:00
										 |  |  | 				(brk_ = 1, (argv[0][1] != '\0')?\ | 
					
						
							| 
									
										
										
										
											2013-04-03 21:00:38 +02:00
										 |  |  | 					(&argv[0][1]) :\ | 
					
						
							|  |  |  | 					(argc--, argv++, argv[0]))) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define ARGF()		((argv[0][1] == '\0' && argv[1] == NULL)?\
 | 
					
						
							|  |  |  | 				(char *)0 :\ | 
					
						
							| 
									
										
										
										
											2013-12-18 08:29:28 +01:00
										 |  |  | 				(brk_ = 1, (argv[0][1] != '\0')?\ | 
					
						
							| 
									
										
										
										
											2013-04-03 21:00:38 +02:00
										 |  |  | 					(&argv[0][1]) :\ | 
					
						
							|  |  |  | 					(argc--, argv++, argv[0]))) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 |