# -*- coding: utf-8 mode: awk -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 function mkindices(values, indices, i, j) { array_new(indices); j = 1; for (i in values) { indices[j++] = int(i); } return asort(indices); } function array_new(dest) { dest[0] = 0; # forcer awk à considérer dest comme un tableau delete dest; } function array_newsize(dest, size, i) { dest[0] = 0; # forcer awk à considérer dest comme un tableau delete dest; size = int(size); for (i = 1; i <= size; i++) { dest[i] = ""; } } function array_len(values, count, i) { # length(array) a un bug sur awk 3.1.5 # cette version est plus lente mais fonctionne toujours count = 0; for (i in values) { count++; } return count; } function array_copy(dest, src, count, indices, i) { array_new(dest); count = mkindices(src, indices); for (i = 1; i <= count; i++) { dest[indices[i]] = src[indices[i]]; } } function array_getlastindex(src, count, indices) { count = mkindices(src, indices); if (count == 0) return 0; return indices[count]; } function array_add(dest, value, lastindex) { lastindex = array_getlastindex(dest); dest[lastindex + 1] = value; } function array_deli(dest, i, l) { i = int(i); if (i == 0) return; l = array_len(dest); while (i < l) { dest[i] = dest[i + 1]; i++; } delete dest[l]; } function array_del(dest, value, ignoreCase, i) { do { i = key_index(value, dest, ignoreCase); if (i != 0) array_deli(dest, i); } while (i != 0); } function array_extend(dest, src, count, lastindex, indices, i) { lastindex = array_getlastindex(dest); count = mkindices(src, indices); for (i = 1; i <= count; i++) { dest[lastindex + i] = src[indices[i]]; } } function array_fill(dest, i) { array_new(dest); for (i = 1; i <= NF; i++) { dest[i] = $i; } } function array_getline(src, count, indices, i, j) { $0 = ""; count = mkindices(src, indices); for (i = 1; i <= count; i++) { j = indices[i]; $j = src[j]; } } function array_appendline(src, count, indices, i, nf, j) { count = mkindices(src, indices); nf = NF; for (i = 1; i <= count; i++) { j = nf + indices[i]; $j = src[indices[i]]; } } function in_array(value, values, ignoreCase, i) { if (ignoreCase) { value = tolower(value); for (i in values) { if (tolower(values[i]) == value) return 1; } } else { for (i in values) { if (values[i] == value) return 1; } } return 0; } function key_index(value, values, ignoreCase, i) { if (ignoreCase) { value = tolower(value); for (i in values) { if (tolower(values[i]) == value) return int(i); } } else { for (i in values) { if (values[i] == value) return int(i); } } return 0; } function array2s(values, prefix, sep, suffix, noindices, first, i, s) { if (!prefix) prefix = "["; if (!sep) sep = ", "; if (!suffix) suffix = "]"; s = prefix; first = 1; for (i in values) { if (first) first = 0; else s = s sep; if (!noindices) s = s "[" i "]="; s = s values[i]; } s = s suffix; return s; } function array2so(values, prefix, sep, suffix, noindices, count, indices, i, s) { if (!prefix) prefix = "["; if (!sep) sep = ", "; if (!suffix) suffix = "]"; s = prefix; count = mkindices(values, indices); for (i = 1; i <= count; i++) { if (i > 1) s = s sep; if (!noindices) s = s "[" indices[i] "]="; s = s values[indices[i]]; } s = s suffix; return s; } function array_join(values, sep, prefix, suffix, count, indices, i, s) { s = prefix; count = mkindices(values, indices); for (i = 1; i <= count; i++) { if (i > 1) s = s sep; s = s values[indices[i]]; } s = s suffix; return s; }