mirror of
				https://github.com/DreamMaoMao/maomaowm.git
				synced 2025-11-03 09:01:47 -05:00 
			
		
		
		
	
		
			
	
	
		
			66 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			66 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * Copy me if you can.
							 | 
						||
| 
								 | 
							
								 * by 20h
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef ARG_H__
							 | 
						||
| 
								 | 
							
								#define ARG_H__
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								extern char *argv0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* use main(int argc, char *argv[]) */
							 | 
						||
| 
								 | 
							
								#define ARGBEGIN                                                               \
							 | 
						||
| 
								 | 
							
									for (argv0 = *argv, argv++, argc--;                                        \
							 | 
						||
| 
								 | 
							
										 argv[0] && argv[0][0] == '-' && argv[0][1]; 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_)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* 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'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define ARGEND                                                                 \
							 | 
						||
| 
								 | 
							
									}                                                                          \
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define ARGC() argc_
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define ARGNUMF() (brk_ = 1, estrtonum(argv[0], 0, INT_MAX))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#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])))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define LNGARG() &argv[0][0]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |