ГОСТ ISO/1EC 24724—2011
Приложение G
(справочное)
Программа декодирования ширины элемента на языке
программирования С
#tndude <stdio.h>
Г
...........
..........
*..................................................... .........................
* Две подпрограммы -- elements!) и elementsExp() -*
входные данные:
* eDist[] = первые нормированные (2’К>-2 значения «от края до подобного края»
* (всегда начиная с внешнего шаблона поиска!!) и
* N и К. определяющие структуру знака.
* выходные данные:
* widths П = 2’К размеры ширины элементов.
* Для символов GS1 DataBar Всенаправленный. GS1 DataBar Усеченный. GS1 DataBar Двустрочный или GS1
DataBar Двустрочный Всенаправленный вызов:
* elements (*eDist.*vrtdths.15,4) внутренних знаков символа &
* elements (*eDist’widths.16.4) для внешних знаков символа.
* Для GS1 DataBar Ограниченный вызов elements (*eDist.*widths.26.7).
* Для GS1 DataBar Расширенный вызов elementsExp(’eDist.’widths. 17,4).
.......*.............*
.......
*.........................................*...................... ***•■/
........... . . . . .......
..
.......
.
. ..........................
* подпрограмма elements!) определяет ширину элементов знака (n.k) при по крайней мере одном
* элементе с четным номером шириной ровно один модуль.
• ( П р и м
.
е
.
ч
.
а
.
н
.
и е — Элементы
.
с четными номерами — 2-й, 4-й. 6-й и тд. имеют нечетные индексы).
void elements (int ’eDist. int *vndths, int N. int K) {
int i:
int minEven;
int barSum;
/* получение размеров ширины элементов из нормированных измерений «от края до подобного края»*/
minEven = 10; /’ начинают с завышенного наименьшего значения V
barSum = widths [0] = 1; Г сначала предполагают, что ширина первого штриха равна 1 модулю’/
for (i = 1; i < К‘2-2; i += 2){
widths[i] = eDist[i-1] - widths[i-1]:
widths(i+1) = eDist[i] - widths(i):
barSum += widths[i] + widthsp+1):
if (widthsji] < minEven) minEven = widths[i);
}
widths[K’2-1] = N - barSum; Г ширина последнего четного элеменга составляет N модулей 7
if (vndths[K*2-1] < minEven) minEven = wktthsfK*2-1],
if (minEven > 1) (
/* минимальная четная ширина четного элемента слишком большая, следует откорректировать ее на 1 "/
for (i = 0; i < К*2; i ♦= 2){
wrdthsp] += minEven-1;
widths[i+1J — minEven-1;
)
}
return;
63