Мой старый велосипед для обработки параметров командной строки перестал меня устраивать, т.к. не давал возможности указывать один и тот же параметр несколько раз (скажем, для сложных конвейеров), поэтому на его основе родился новый велосипед.
Велосипед изобилует ужасами вроде
и т.д., и т.п. (можно почитать код вместо принятия рвотных веществ ☺).
Пример работы велосипеда:
Т.е. есть переменные с инкрементом (-v — чем больше раз встречается, тем больше число), массивы (randAmp, str), обработка по порядку свободных параметров (something, some_more), предварительная (до передачи управления обратно в вызвавшую parce_args функцию) обработка вложенных аргументов и постобработка вложенных аргументов (filter parameters) — уже вне велосипеда.
На этом, наверное, пока остановлюсь и продолжу пилить fits_filter, которая, возможно, перерастет в конце-концов в автомат для калибровки звездных полей (для определения коэффициентов СКН), расчета формы зеркала по гартманнограмме (сейчас это делается довольно-таки неудобно, частично вручную) и по снимку с датчика Шака-Гартманна (родной софт очень неудобен в эксплуатации, да еще и проприетарный до мозга костей). Хоть и хотелось бы сделать группировку параметров (как, скажем, в ffmpeg), но это уж совсем нетривиально.
Велосипед изобилует ужасами вроде
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), но это уж совсем нетривиально.
no subject
Date: 2015-12-08 06:29 pm (UTC)no subject
Date: 2015-12-08 06:49 pm (UTC)А вот всякую перловку-питонку и т.п. мне не надо, спасибо.
no subject
Date: 2015-12-08 07:28 pm (UTC)