Поиск

Да здравствуют велосипеды с варьируемым числом и формой колес!


Мой старый велосипед для обработки параметров командной строки перестал меня устраивать, т.к. не давал возможности указывать один и тот же параметр несколько раз (скажем, для сложных конвейеров), поэтому на его основе родился новый велосипед.
Велосипед изобилует ужасами вроде

void **aptr = *((void***)paptr);
...
result = (*((void**)aptr) = (void*)strdup(optarg));


и т.д., и т.п. (можно почитать код вместо принятия рвотных веществ ☺).

Пример работы велосипеда:

./myopt_example -a 1e-5 -f type=as:xsz=5s something -a 3e-9 -f type=med:ysz=15 some_more -s again -f xsz=5 -s more -M diam=8:foc=10 -vvvv
Globals:
S_dev = 8 (default)
randAmp[0]: 1e-05
randAmp[1]: 3e-09
meet str args:
str[0] = again
str[1] = more
S_interp = 100
S_image = 1000
N_phot = 10000
randMask = 0
Mirror =
	D = 8
	F = 10
	Zincl = 0
	Aincl = 0
rewrite_ifexists = 0
verbose = 4
There's also 2 free parameters:
	   0: something
	   1: some_more
filter parameters:
0:
Wrong argument "5s" of parameter "xsz"
	bad params
1:
	filtertype = med, sizes: 3x15
2:
	filtertype = (null), sizes: 5x3


Т.е. есть переменные с инкрементом (-v — чем больше раз встречается, тем больше число), массивы (randAmp, str), обработка по порядку свободных параметров (something, some_more), предварительная (до передачи управления обратно в вызвавшую parce_args функцию) обработка вложенных аргументов и постобработка вложенных аргументов (filter parameters) — уже вне велосипеда.
На этом, наверное, пока остановлюсь и продолжу пилить fits_filter, которая, возможно, перерастет в конце-концов в автомат для калибровки звездных полей (для определения коэффициентов СКН), расчета формы зеркала по гартманнограмме (сейчас это делается довольно-таки неудобно, частично вручную) и по снимку с датчика Шака-Гартманна (родной софт очень неудобен в эксплуатации, да еще и проприетарный до мозга костей). Хоть и хотелось бы сделать группировку параметров (как, скажем, в ffmpeg), но это уж совсем нетривиально.

eddy-em.livejournal.com

Добавить комментарий