Compare commits
3 Commits
master
...
update-nul
Author | SHA1 | Date |
---|---|---|
Jephté Clain | 916d869af8 | |
Jephté Clain | 95e5fdcbf3 | |
Jephté Clain | cf9e2ef8c1 |
|
@ -1,4 +0,0 @@
|
||||||
# -*- coding: utf-8 mode: awk -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|
||||||
@include "base.core"
|
|
||||||
@include "base.array"
|
|
||||||
@include "base.date"
|
|
|
@ -1,157 +0,0 @@
|
||||||
# -*- 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
|
|
||||||
}
|
|
|
@ -0,0 +1,157 @@
|
||||||
|
# -*- 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;
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
# -*- coding: utf-8 mode: awk -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
@include "base.core.awk"
|
||||||
|
@include "base.array.awk"
|
||||||
|
@include "base.date.awk"
|
|
@ -1,141 +0,0 @@
|
||||||
# -*- coding: utf-8 mode: awk -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|
||||||
|
|
||||||
function num(s) {
|
|
||||||
if (s ~ /^[0-9]+$/) return int(s)
|
|
||||||
else return s
|
|
||||||
}
|
|
||||||
function ord(s, i) {
|
|
||||||
s = substr(s, 1, 1)
|
|
||||||
i = index(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~", s)
|
|
||||||
if (i != 0) i += 32 - 1
|
|
||||||
return i
|
|
||||||
}
|
|
||||||
function hex(i, s) {
|
|
||||||
s = sprintf("%x", i)
|
|
||||||
if (length(s) < 2) s = "0" s
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
function qhtml(s) {
|
|
||||||
gsub(/&/, "\\&", s)
|
|
||||||
gsub(/"/, "\\"", s)
|
|
||||||
gsub(/>/, "\\>", s)
|
|
||||||
gsub(/</, "\\<", s)
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
function unquote_html(s) {
|
|
||||||
gsub(/</, "<", s)
|
|
||||||
gsub(/>/, ">", s)
|
|
||||||
gsub(/"/, "\"", s)
|
|
||||||
gsub(/&/, "\\&", s)
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
function qawk(s) {
|
|
||||||
gsub(/\\/, "\\\\", s)
|
|
||||||
gsub(/"/, "\\\"", s)
|
|
||||||
gsub(/\n/, "\\n", s)
|
|
||||||
return "\"" s "\""
|
|
||||||
}
|
|
||||||
function qval(s) {
|
|
||||||
gsub(/'/, "'\\''", s)
|
|
||||||
return "'" s "'"
|
|
||||||
}
|
|
||||||
function sqval(s) {
|
|
||||||
return " " qval(s)
|
|
||||||
}
|
|
||||||
function qvals( i, line) {
|
|
||||||
line = ""
|
|
||||||
for (i = 1; i <= NF; i++) {
|
|
||||||
if (i > 1) line = line " "
|
|
||||||
line = line qval($i)
|
|
||||||
}
|
|
||||||
return line
|
|
||||||
}
|
|
||||||
function sqvals() {
|
|
||||||
return " " qvals()
|
|
||||||
}
|
|
||||||
function qarr(values, prefix, i, count, line) {
|
|
||||||
line = prefix
|
|
||||||
count = array_len(values)
|
|
||||||
for (i = 1; i <= count; i++) {
|
|
||||||
if (i > 1 || line != "") line = line " "
|
|
||||||
line = line qval(values[i])
|
|
||||||
}
|
|
||||||
return line
|
|
||||||
}
|
|
||||||
function qregexp(s) {
|
|
||||||
gsub(/[[\\.^$*+?()|{]/, "\\\\&", s)
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
function qsubrepl(s) {
|
|
||||||
gsub(/\\/, "\\\\", s)
|
|
||||||
gsub(/&/, "\\\\&", s)
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
function qgrep(s) {
|
|
||||||
gsub(/[[\\.^$*]/, "\\\\&", s)
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
function qegrep(s) {
|
|
||||||
gsub(/[[\\.^$*+?()|{]/, "\\\\&", s)
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
function qsql(s, suffix) {
|
|
||||||
gsub(/'/, "''", s)
|
|
||||||
return "'" s "'" (suffix != ""? " " suffix: "")
|
|
||||||
}
|
|
||||||
function cqsql(s, suffix) {
|
|
||||||
return "," qsql(s, suffix)
|
|
||||||
}
|
|
||||||
function unquote_mysqlcsv(s) {
|
|
||||||
gsub(/\\n/, "\n", s)
|
|
||||||
gsub(/\\t/, "\t", s)
|
|
||||||
gsub(/\\0/, "\0", s)
|
|
||||||
gsub(/\\\\/, "\\", s)
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
function sval(s) {
|
|
||||||
if (s == "") return s
|
|
||||||
else return " " s
|
|
||||||
}
|
|
||||||
function cval(s, suffix) {
|
|
||||||
suffix = suffix != ""? " " suffix: ""
|
|
||||||
if (s == "") return s
|
|
||||||
else return "," s suffix
|
|
||||||
}
|
|
||||||
|
|
||||||
function printto(s, output) {
|
|
||||||
if (output == "") {
|
|
||||||
print s
|
|
||||||
} else if (output ~ /^>>/) {
|
|
||||||
sub(/^>>/, "", output)
|
|
||||||
print s >>output
|
|
||||||
} else if (output ~ /^>/) {
|
|
||||||
sub(/^>/, "", output)
|
|
||||||
print s >output
|
|
||||||
} else if (output ~ /^\|&/) {
|
|
||||||
sub(/^\|&/, "", output)
|
|
||||||
print s |&output
|
|
||||||
} else if (output ~ /^\|/) {
|
|
||||||
sub(/^\|/, "", output)
|
|
||||||
print s |output
|
|
||||||
} else {
|
|
||||||
print s >output
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function find_line(input, field, value, orig, line) {
|
|
||||||
orig = $0
|
|
||||||
line = ""
|
|
||||||
while ((getline <input) > 0) {
|
|
||||||
if ($field == value) {
|
|
||||||
line = $0
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
close(input)
|
|
||||||
$0 = orig
|
|
||||||
return line
|
|
||||||
}
|
|
||||||
function merge_line(input, field, key, line) {
|
|
||||||
line = find_line(input, field, $key)
|
|
||||||
if (line != "") $0 = $0 FS line
|
|
||||||
}
|
|
|
@ -0,0 +1,141 @@
|
||||||
|
# -*- coding: utf-8 mode: awk -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
|
||||||
|
function num(s) {
|
||||||
|
if (s ~ /^[0-9]+$/) return int(s);
|
||||||
|
else return s;
|
||||||
|
}
|
||||||
|
function ord(s, i) {
|
||||||
|
s = substr(s, 1, 1);
|
||||||
|
i = index(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~", s);
|
||||||
|
if (i != 0) i += 32 - 1;
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
function hex(i, s) {
|
||||||
|
s = sprintf("%x", i);
|
||||||
|
if (length(s) < 2) s = "0" s;
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
function qhtml(s) {
|
||||||
|
gsub(/&/, "\\&", s);
|
||||||
|
gsub(/"/, "\\"", s);
|
||||||
|
gsub(/>/, "\\>", s);
|
||||||
|
gsub(/</, "\\<", s);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
function unquote_html(s) {
|
||||||
|
gsub(/</, "<", s);
|
||||||
|
gsub(/>/, ">", s);
|
||||||
|
gsub(/"/, "\"", s);
|
||||||
|
gsub(/&/, "\\&", s);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
function qawk(s) {
|
||||||
|
gsub(/\\/, "\\\\", s);
|
||||||
|
gsub(/"/, "\\\"", s);
|
||||||
|
gsub(/\n/, "\\n", s);
|
||||||
|
return "\"" s "\"";
|
||||||
|
}
|
||||||
|
function qval(s) {
|
||||||
|
gsub(/'/, "'\\''", s);
|
||||||
|
return "'" s "'";
|
||||||
|
}
|
||||||
|
function sqval(s) {
|
||||||
|
return " " qval(s);
|
||||||
|
}
|
||||||
|
function qvals( i, line) {
|
||||||
|
line = "";
|
||||||
|
for (i = 1; i <= NF; i++) {
|
||||||
|
if (i > 1) line = line " ";
|
||||||
|
line = line qval($i);
|
||||||
|
}
|
||||||
|
return line;
|
||||||
|
}
|
||||||
|
function sqvals() {
|
||||||
|
return " " qvals();
|
||||||
|
}
|
||||||
|
function qarr(values, prefix, i, count, line) {
|
||||||
|
line = prefix;
|
||||||
|
count = array_len(values);
|
||||||
|
for (i = 1; i <= count; i++) {
|
||||||
|
if (i > 1 || line != "") line = line " ";
|
||||||
|
line = line qval(values[i]);
|
||||||
|
}
|
||||||
|
return line;
|
||||||
|
}
|
||||||
|
function qregexp(s) {
|
||||||
|
gsub(/[[\\.^$*+?()|{]/, "\\\\&", s);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
function qsubrepl(s) {
|
||||||
|
gsub(/\\/, "\\\\", s);
|
||||||
|
gsub(/&/, "\\\\&", s);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
function qgrep(s) {
|
||||||
|
gsub(/[[\\.^$*]/, "\\\\&", s);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
function qegrep(s) {
|
||||||
|
gsub(/[[\\.^$*+?()|{]/, "\\\\&", s);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
function qsql(s, suffix) {
|
||||||
|
gsub(/'/, "''", s);
|
||||||
|
return "'" s "'" (suffix != ""? " " suffix: "");
|
||||||
|
}
|
||||||
|
function cqsql(s, suffix) {
|
||||||
|
return "," qsql(s, suffix);
|
||||||
|
}
|
||||||
|
function unquote_mysqlcsv(s) {
|
||||||
|
gsub(/\\n/, "\n", s);
|
||||||
|
gsub(/\\t/, "\t", s);
|
||||||
|
gsub(/\\0/, "\0", s);
|
||||||
|
gsub(/\\\\/, "\\", s);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
function sval(s) {
|
||||||
|
if (s == "") return s;
|
||||||
|
else return " " s;
|
||||||
|
}
|
||||||
|
function cval(s, suffix) {
|
||||||
|
suffix = suffix != ""? " " suffix: "";
|
||||||
|
if (s == "") return s;
|
||||||
|
else return "," s suffix;
|
||||||
|
}
|
||||||
|
|
||||||
|
function printto(s, output) {
|
||||||
|
if (output == "") {
|
||||||
|
print s;
|
||||||
|
} else if (output ~ /^>>/) {
|
||||||
|
sub(/^>>/, "", output);
|
||||||
|
print s >>output;
|
||||||
|
} else if (output ~ /^>/) {
|
||||||
|
sub(/^>/, "", output);
|
||||||
|
print s >output;
|
||||||
|
} else if (output ~ /^\|&/) {
|
||||||
|
sub(/^\|&/, "", output);
|
||||||
|
print s |&output;
|
||||||
|
} else if (output ~ /^\|/) {
|
||||||
|
sub(/^\|/, "", output);
|
||||||
|
print s |output;
|
||||||
|
} else {
|
||||||
|
print s >output;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function find_line(input, field, value, orig, line) {
|
||||||
|
orig = $0;
|
||||||
|
line = "";
|
||||||
|
while ((getline <input) > 0) {
|
||||||
|
if ($field == value) {
|
||||||
|
line = $0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close(input);
|
||||||
|
$0 = orig;
|
||||||
|
return line;
|
||||||
|
}
|
||||||
|
function merge_line(input, field, key, line) {
|
||||||
|
line = find_line(input, field, $key);
|
||||||
|
if (line != "") $0 = $0 FS line;
|
||||||
|
}
|
|
@ -2,51 +2,51 @@
|
||||||
|
|
||||||
function date__parse_fr(date, parts, y, m, d) {
|
function date__parse_fr(date, parts, y, m, d) {
|
||||||
if (match(date, /([0-9][0-9]?)\/([0-9][0-9]?)\/([0-9][0-9][0-9][0-9])/, parts)) {
|
if (match(date, /([0-9][0-9]?)\/([0-9][0-9]?)\/([0-9][0-9][0-9][0-9])/, parts)) {
|
||||||
y = int(parts[3])
|
y = int(parts[3]);
|
||||||
m = int(parts[2])
|
m = int(parts[2]);
|
||||||
d = int(parts[1])
|
d = int(parts[1]);
|
||||||
return mktime(sprintf("%04i %02i %02i 00 00 00 +0400", y, m, d))
|
return mktime(sprintf("%04i %02i %02i 00 00 00 +0400", y, m, d));
|
||||||
} else if (match(date, /([0-9][0-9]?)\/([0-9][0-9]?)\/([0-9][0-9])/, parts)) {
|
} else if (match(date, /([0-9][0-9]?)\/([0-9][0-9]?)\/([0-9][0-9])/, parts)) {
|
||||||
basey = int(strftime("%Y")); basey = basey - basey % 100
|
basey = int(strftime("%Y")); basey = basey - basey % 100;
|
||||||
y = basey + int(parts[3])
|
y = basey + int(parts[3]);
|
||||||
m = int(parts[2])
|
m = int(parts[2]);
|
||||||
d = int(parts[1])
|
d = int(parts[1]);
|
||||||
return mktime(sprintf("%04i %02i %02i 00 00 00 +0400", y, m, d))
|
return mktime(sprintf("%04i %02i %02i 00 00 00 +0400", y, m, d));
|
||||||
}
|
}
|
||||||
return -1
|
return -1;
|
||||||
}
|
}
|
||||||
function date__parse_mysql(date, parts, y, m, d) {
|
function date__parse_mysql(date, parts, y, m, d) {
|
||||||
if (match(date, /([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])/, parts)) {
|
if (match(date, /([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])/, parts)) {
|
||||||
y = int(parts[1])
|
y = int(parts[1]);
|
||||||
m = int(parts[2])
|
m = int(parts[2]);
|
||||||
d = int(parts[3])
|
d = int(parts[3]);
|
||||||
return mktime(sprintf("%04i %02i %02i 00 00 00 +0400", y, m, d))
|
return mktime(sprintf("%04i %02i %02i 00 00 00 +0400", y, m, d));
|
||||||
}
|
}
|
||||||
return -1
|
return -1;
|
||||||
}
|
}
|
||||||
function date__parse_any(date, serial) {
|
function date__parse_any(date, serial) {
|
||||||
serial = date__parse_fr(date)
|
serial = date__parse_fr(date);
|
||||||
if (serial == -1) serial = date__parse_mysql(date)
|
if (serial == -1) serial = date__parse_mysql(date);
|
||||||
return serial
|
return serial;
|
||||||
}
|
}
|
||||||
function date_serial(date) {
|
function date_serial(date) {
|
||||||
return date__parse_any(date)
|
return date__parse_any(date);
|
||||||
}
|
}
|
||||||
function date_parse(date, serial) {
|
function date_parse(date, serial) {
|
||||||
serial = date__parse_any(date)
|
serial = date__parse_any(date);
|
||||||
if (serial == -1) return date
|
if (serial == -1) return date;
|
||||||
return strftime("%d/%m/%Y", serial)
|
return strftime("%d/%m/%Y", serial);
|
||||||
}
|
}
|
||||||
function date_monday(date, serial, dow) {
|
function date_monday(date, serial, dow) {
|
||||||
serial = date__parse_any(date)
|
serial = date__parse_any(date);
|
||||||
if (serial == -1) return date
|
if (serial == -1) return date;
|
||||||
dow = strftime("%u", serial)
|
dow = strftime("%u", serial);
|
||||||
serial -= (dow - 1) * 86400
|
serial -= (dow - 1) * 86400;
|
||||||
return strftime("%d/%m/%Y", serial)
|
return strftime("%d/%m/%Y", serial);
|
||||||
}
|
}
|
||||||
function date_add(date, nbdays, serial) {
|
function date_add(date, nbdays, serial) {
|
||||||
serial = date__parse_any(date)
|
serial = date__parse_any(date);
|
||||||
if (serial == -1) return date
|
if (serial == -1) return date;
|
||||||
serial += nbdays * 86400
|
serial += nbdays * 86400;
|
||||||
return strftime("%d/%m/%Y", serial)
|
return strftime("%d/%m/%Y", serial);
|
||||||
}
|
}
|
|
@ -1,201 +1,201 @@
|
||||||
# -*- coding: utf-8 mode: awk -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: awk -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
@include "base.core"
|
@include "base.core.awk"
|
||||||
@include "base.array"
|
@include "base.array.awk"
|
||||||
|
|
||||||
function csv__parse_quoted(line, destl, colsep, qchar, echar, pos, tmpl, nextc, resl) {
|
function csv__parse_quoted(line, destl, colsep, qchar, echar, pos, tmpl, nextc, resl) {
|
||||||
line = substr(line, 2)
|
line = substr(line, 2);
|
||||||
resl = ""
|
resl = "";
|
||||||
while (1) {
|
while (1) {
|
||||||
pos = index(line, qchar)
|
pos = index(line, qchar);
|
||||||
if (pos == 0) {
|
if (pos == 0) {
|
||||||
# chaine mal terminee
|
# chaine mal terminee
|
||||||
resl = resl line
|
resl = resl line;
|
||||||
destl[0] = ""
|
destl[0] = "";
|
||||||
destl[1] = 0
|
destl[1] = 0;
|
||||||
return resl
|
return resl;
|
||||||
}
|
}
|
||||||
if (echar != "" && pos > 1) {
|
if (echar != "" && pos > 1) {
|
||||||
# tenir compte du fait qu"un caratère peut être mis en échappement
|
# tenir compte du fait qu"un caratère peut être mis en échappement
|
||||||
prevc = substr(line, pos - 1, 1)
|
prevc = substr(line, pos - 1, 1);
|
||||||
quotec = substr(line, pos, 1)
|
quotec = substr(line, pos, 1);
|
||||||
nextc = substr(line, pos + 1, 1)
|
nextc = substr(line, pos + 1, 1);
|
||||||
if (prevc == echar) {
|
if (prevc == echar) {
|
||||||
# qchar en échappement
|
# qchar en échappement
|
||||||
tmpl = substr(line, 1, pos - 2)
|
tmpl = substr(line, 1, pos - 2);
|
||||||
resl = resl tmpl quotec
|
resl = resl tmpl quotec;
|
||||||
line = substr(line, pos + 1)
|
line = substr(line, pos + 1);
|
||||||
continue
|
continue;
|
||||||
}
|
}
|
||||||
tmpl = substr(line, 1, pos - 1)
|
tmpl = substr(line, 1, pos - 1);
|
||||||
if (nextc == colsep || nextc == "") {
|
if (nextc == colsep || nextc == "") {
|
||||||
# fin de champ ou fin de ligne
|
# fin de champ ou fin de ligne
|
||||||
resl = resl tmpl
|
resl = resl tmpl;
|
||||||
destl[0] = substr(line, pos + 2)
|
destl[0] = substr(line, pos + 2);
|
||||||
destl[1] = nextc == colsep
|
destl[1] = nextc == colsep;
|
||||||
return resl
|
return resl;
|
||||||
} else {
|
} else {
|
||||||
# erreur de syntaxe: guillemet non mis en échappement
|
# erreur de syntaxe: guillemet non mis en échappement
|
||||||
# ignorer cette erreur et prendre le guillemet quand meme
|
# ignorer cette erreur et prendre le guillemet quand meme
|
||||||
resl = resl tmpl quotec
|
resl = resl tmpl quotec;
|
||||||
line = substr(line, pos + 1)
|
line = substr(line, pos + 1);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
# pas d"échappement pour qchar. il est éventuellement doublé
|
# pas d"échappement pour qchar. il est éventuellement doublé
|
||||||
tmpl = substr(line, 1, pos - 1)
|
tmpl = substr(line, 1, pos - 1);
|
||||||
quotec = substr(line, pos, 1)
|
quotec = substr(line, pos, 1);
|
||||||
nextc = substr(line, pos + 1, 1)
|
nextc = substr(line, pos + 1, 1);
|
||||||
if (nextc == colsep || nextc == "") {
|
if (nextc == colsep || nextc == "") {
|
||||||
# fin de champ ou fin de ligne
|
# fin de champ ou fin de ligne
|
||||||
resl = resl tmpl
|
resl = resl tmpl;
|
||||||
destl[0] = substr(line, pos + 2)
|
destl[0] = substr(line, pos + 2);
|
||||||
destl[1] = nextc == colsep
|
destl[1] = nextc == colsep;
|
||||||
return resl
|
return resl;
|
||||||
} else if (nextc == qchar) {
|
} else if (nextc == qchar) {
|
||||||
# qchar en echappement
|
# qchar en echappement
|
||||||
resl = resl tmpl quotec
|
resl = resl tmpl quotec;
|
||||||
line = substr(line, pos + 2)
|
line = substr(line, pos + 2);
|
||||||
} else {
|
} else {
|
||||||
# erreur de syntaxe: guillemet non mis en échappement
|
# erreur de syntaxe: guillemet non mis en échappement
|
||||||
# ignorer cette erreur et prendre le guillemet quand meme
|
# ignorer cette erreur et prendre le guillemet quand meme
|
||||||
resl = resl tmpl quotec
|
resl = resl tmpl quotec;
|
||||||
line = substr(line, pos + 1)
|
line = substr(line, pos + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function csv__parse_unquoted(line, destl, colsep, qchar, echar, pos) {
|
function csv__parse_unquoted(line, destl, colsep, qchar, echar, pos) {
|
||||||
pos = index(line, colsep)
|
pos = index(line, colsep);
|
||||||
if (pos == 0) {
|
if (pos == 0) {
|
||||||
destl[0] = ""
|
destl[0] = "";
|
||||||
destl[1] = 0
|
destl[1] = 0;
|
||||||
return line
|
return line;
|
||||||
} else {
|
} else {
|
||||||
destl[0] = substr(line, pos + 1)
|
destl[0] = substr(line, pos + 1);
|
||||||
destl[1] = 1
|
destl[1] = 1;
|
||||||
return substr(line, 1, pos - 1)
|
return substr(line, 1, pos - 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function csv__array_parse(fields, line, nbfields, colsep, qchar, echar, shouldparse, destl, i) {
|
function csv__array_parse(fields, line, nbfields, colsep, qchar, echar, shouldparse, destl, i) {
|
||||||
array_new(fields)
|
array_new(fields);
|
||||||
array_new(destl)
|
array_new(destl);
|
||||||
i = 1
|
i = 1;
|
||||||
shouldparse = 0
|
shouldparse = 0;
|
||||||
# shouldparse permet de gérer le cas où un champ vide est en fin de ligne.
|
# shouldparse permet de gérer le cas où un champ vide est en fin de ligne.
|
||||||
# en effet, après "," il faut toujours parser, même si line==""
|
# en effet, après "," il faut toujours parser, même si line==""
|
||||||
while (shouldparse || line != "") {
|
while (shouldparse || line != "") {
|
||||||
if (index(line, qchar) == 1) {
|
if (index(line, qchar) == 1) {
|
||||||
value = csv__parse_quoted(line, destl, colsep, qchar, echar)
|
value = csv__parse_quoted(line, destl, colsep, qchar, echar);
|
||||||
line = destl[0]
|
line = destl[0];
|
||||||
shouldparse = destl[1]
|
shouldparse = destl[1];
|
||||||
} else {
|
} else {
|
||||||
value = csv__parse_unquoted(line, destl, colsep, qchar, echar)
|
value = csv__parse_unquoted(line, destl, colsep, qchar, echar);
|
||||||
line = destl[0]
|
line = destl[0];
|
||||||
shouldparse = destl[1]
|
shouldparse = destl[1];
|
||||||
}
|
}
|
||||||
fields[i] = value
|
fields[i] = value;
|
||||||
i = i + 1
|
i = i + 1;
|
||||||
}
|
}
|
||||||
if (nbfields) {
|
if (nbfields) {
|
||||||
nbfields = int(nbfields)
|
nbfields = int(nbfields);
|
||||||
i = array_len(fields)
|
i = array_len(fields);
|
||||||
while (i < nbfields) {
|
while (i < nbfields) {
|
||||||
i++
|
i++;
|
||||||
fields[i] = ""
|
fields[i] = "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return array_len(fields)
|
return array_len(fields);
|
||||||
}
|
}
|
||||||
BEGIN {
|
BEGIN {
|
||||||
DEFAULT_COLSEP = ","
|
DEFAULT_COLSEP = ",";
|
||||||
DEFAULT_QCHAR = "\""
|
DEFAULT_QCHAR = "\"";
|
||||||
DEFAULT_ECHAR = ""
|
DEFAULT_ECHAR = "";
|
||||||
}
|
}
|
||||||
function array_parsecsv2(fields, line, nbfields, colsep, qchar, echar) {
|
function array_parsecsv2(fields, line, nbfields, colsep, qchar, echar) {
|
||||||
return csv__array_parse(fields, line, nbfields, colsep, qchar, echar)
|
return csv__array_parse(fields, line, nbfields, colsep, qchar, echar);
|
||||||
}
|
}
|
||||||
function array_parsecsv(fields, line, nbfields, colsep, qchar, echar) {
|
function array_parsecsv(fields, line, nbfields, colsep, qchar, echar) {
|
||||||
if (colsep == "") colsep = DEFAULT_COLSEP
|
if (colsep == "") colsep = DEFAULT_COLSEP;
|
||||||
if (qchar == "") qchar = DEFAULT_QCHAR
|
if (qchar == "") qchar = DEFAULT_QCHAR;
|
||||||
if (echar == "") echar = DEFAULT_ECHAR
|
if (echar == "") echar = DEFAULT_ECHAR;
|
||||||
return csv__array_parse(fields, line, nbfields, colsep, qchar, echar)
|
return csv__array_parse(fields, line, nbfields, colsep, qchar, echar);
|
||||||
}
|
}
|
||||||
function parsecsv(line, fields) {
|
function parsecsv(line, fields) {
|
||||||
array_parsecsv(fields, line)
|
array_parsecsv(fields, line);
|
||||||
array_getline(fields)
|
array_getline(fields);
|
||||||
return NF
|
return NF;
|
||||||
}
|
}
|
||||||
function getlinecsv(file, fields) {
|
function getlinecsv(file, fields) {
|
||||||
if (file) {
|
if (file) {
|
||||||
getline <file
|
getline <file;
|
||||||
} else {
|
} else {
|
||||||
getline
|
getline;
|
||||||
}
|
}
|
||||||
return parsecsv($0)
|
return parsecsv($0);
|
||||||
}
|
}
|
||||||
function csv__should_quote(s) {
|
function csv__should_quote(s) {
|
||||||
if (s ~ /^[[:blank:][:cntrl:][:space:]]/) return 1
|
if (s ~ /^[[:blank:][:cntrl:][:space:]]/) return 1;
|
||||||
if (s ~ /[[:blank:][:cntrl:][:space:]]$/) return 1
|
if (s ~ /[[:blank:][:cntrl:][:space:]]$/) return 1;
|
||||||
return 0
|
return 0;
|
||||||
}
|
}
|
||||||
function array_formatcsv2(fields, colsep, mvsep, qchar, echar, count, indices, line, i, value) {
|
function array_formatcsv2(fields, colsep, mvsep, qchar, echar, count, indices, line, i, value) {
|
||||||
line = ""
|
line = "";
|
||||||
count = mkindices(fields, indices)
|
count = mkindices(fields, indices);
|
||||||
for (i = 1; i <= count; i++) {
|
for (i = 1; i <= count; i++) {
|
||||||
value = fields[indices[i]]
|
value = fields[indices[i]];
|
||||||
if (i > 1) line = line colsep
|
if (i > 1) line = line colsep;
|
||||||
if (qchar != "" && index(value, qchar) != 0) {
|
if (qchar != "" && index(value, qchar) != 0) {
|
||||||
if (echar != "") gsub(qchar, quote_subrepl(echar) "&", value);
|
if (echar != "") gsub(qchar, quote_subrepl(echar) "&", value);;
|
||||||
else gsub(qchar, "&&", value);
|
else gsub(qchar, "&&", value);;
|
||||||
}
|
}
|
||||||
if (qchar != "" && (index(value, mvsep) != 0 || index(value, colsep) != 0 || index(value, qchar) != 0 || csv__should_quote(value))) {
|
if (qchar != "" && (index(value, mvsep) != 0 || index(value, colsep) != 0 || index(value, qchar) != 0 || csv__should_quote(value))) {
|
||||||
line = line qchar value qchar
|
line = line qchar value qchar;
|
||||||
} else {
|
} else {
|
||||||
line = line value
|
line = line value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return line
|
return line;
|
||||||
}
|
}
|
||||||
function array_formatcsv(fields) {
|
function array_formatcsv(fields) {
|
||||||
return array_formatcsv2(fields, ",", ";", "\"", "")
|
return array_formatcsv2(fields, ",", ";", "\"", "");
|
||||||
}
|
}
|
||||||
function array_printcsv(fields, output) {
|
function array_printcsv(fields, output) {
|
||||||
printto(array_formatcsv(fields), output)
|
printto(array_formatcsv(fields), output);
|
||||||
}
|
}
|
||||||
function get_formatcsv( fields) {
|
function get_formatcsv( fields) {
|
||||||
array_fill(fields)
|
array_fill(fields);
|
||||||
return array_formatcsv(fields)
|
return array_formatcsv(fields);
|
||||||
}
|
}
|
||||||
function formatcsv() {
|
function formatcsv() {
|
||||||
$0 = get_formatcsv()
|
$0 = get_formatcsv();
|
||||||
}
|
}
|
||||||
function printcsv(output, fields) {
|
function printcsv(output, fields) {
|
||||||
array_fill(fields)
|
array_fill(fields);
|
||||||
array_printcsv(fields, output)
|
array_printcsv(fields, output);
|
||||||
}
|
}
|
||||||
function array_findcsv(fields, input, field, value, nbfields, orig, found, i) {
|
function array_findcsv(fields, input, field, value, nbfields, orig, found, i) {
|
||||||
array_new(orig)
|
array_new(orig);
|
||||||
array_fill(orig)
|
array_fill(orig);
|
||||||
array_new(fields)
|
array_new(fields);
|
||||||
found = 0
|
found = 0;
|
||||||
while ((getline <input) > 0) {
|
while ((getline <input) > 0) {
|
||||||
array_parsecsv(fields, $0, nbfields)
|
array_parsecsv(fields, $0, nbfields);
|
||||||
if (fields[field] == value) {
|
if (fields[field] == value) {
|
||||||
found = 1
|
found = 1;
|
||||||
break
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
close(input)
|
close(input);
|
||||||
array_getline(orig)
|
array_getline(orig);
|
||||||
if (!found) {
|
if (!found) {
|
||||||
delete fields
|
delete fields;
|
||||||
if (nbfields) {
|
if (nbfields) {
|
||||||
nbfields = int(nbfields)
|
nbfields = int(nbfields);
|
||||||
i = array_len(fields)
|
i = array_len(fields);
|
||||||
while (i < nbfields) {
|
while (i < nbfields) {
|
||||||
i++
|
i++;
|
||||||
fields[i] = ""
|
fields[i] = "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return found
|
return found;
|
||||||
}
|
}
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
function base64__and(var, x, l_res, l_i) {
|
function base64__and(var, x, l_res, l_i) {
|
||||||
l_res = 0;
|
l_res = 0;
|
||||||
for (l_i = 0; l_i < 8; l_i++){
|
for (l_i = 0; l_i < 8; l_i++) {
|
||||||
if (var%2 == 1 && x%2 == 1) l_res = l_res/2 + 128;
|
if (var%2 == 1 && x%2 == 1) l_res = l_res/2 + 128;
|
||||||
else l_res /= 2;
|
else l_res /= 2;
|
||||||
var = int(var/2);
|
var = int(var/2);
|
||||||
|
@ -12,7 +12,7 @@ function base64__and(var, x, l_res, l_i) {
|
||||||
}
|
}
|
||||||
# Rotate bytevalue left x times
|
# Rotate bytevalue left x times
|
||||||
function base64__lshift(var, x) {
|
function base64__lshift(var, x) {
|
||||||
while(x > 0){
|
while(x > 0) {
|
||||||
var *= 2;
|
var *= 2;
|
||||||
x--;
|
x--;
|
||||||
}
|
}
|
||||||
|
@ -20,38 +20,38 @@ function base64__lshift(var, x) {
|
||||||
}
|
}
|
||||||
# Rotate bytevalue right x times
|
# Rotate bytevalue right x times
|
||||||
function base64__rshift(var, x) {
|
function base64__rshift(var, x) {
|
||||||
while(x > 0){
|
while(x > 0) {
|
||||||
var = int(var/2);
|
var = int(var/2);
|
||||||
x--;
|
x--;
|
||||||
}
|
}
|
||||||
return var;
|
return var;
|
||||||
}
|
}
|
||||||
BEGIN {
|
BEGIN {
|
||||||
BASE64__BYTES = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
|
BASE64__BYTES = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||||
}
|
}
|
||||||
function b64decode(src, result, base1, base2, base3, base4) {
|
function b64decode(src, result, base1, base2, base3, base4) {
|
||||||
result = ""
|
result = "";
|
||||||
while (length(src) > 0) {
|
while (length(src) > 0) {
|
||||||
# Specify byte values
|
# Specify byte values
|
||||||
base1 = substr(src, 1, 1)
|
base1 = substr(src, 1, 1);
|
||||||
base2 = substr(src, 2, 1)
|
base2 = substr(src, 2, 1);
|
||||||
base3 = substr(src, 3, 1); if (base3 == "") base3 = "="
|
base3 = substr(src, 3, 1); if (base3 == "") base3 = "=";
|
||||||
base4 = substr(src, 4, 1); if (base4 == "") base4 = "="
|
base4 = substr(src, 4, 1); if (base4 == "") base4 = "=";
|
||||||
# Now find numerical position in BASE64 string
|
# Now find numerical position in BASE64 string
|
||||||
byte1 = index(BASE64__BYTES, base1) - 1
|
byte1 = index(BASE64__BYTES, base1) - 1;
|
||||||
if (byte1 < 0) byte1 = 0
|
if (byte1 < 0) byte1 = 0;
|
||||||
byte2 = index(BASE64__BYTES, base2) - 1
|
byte2 = index(BASE64__BYTES, base2) - 1;
|
||||||
if (byte2 < 0) byte2 = 0
|
if (byte2 < 0) byte2 = 0;
|
||||||
byte3 = index(BASE64__BYTES, base3) - 1
|
byte3 = index(BASE64__BYTES, base3) - 1;
|
||||||
if (byte3 < 0) byte3 = 0
|
if (byte3 < 0) byte3 = 0;
|
||||||
byte4 = index(BASE64__BYTES, base4) - 1
|
byte4 = index(BASE64__BYTES, base4) - 1;
|
||||||
if (byte4 < 0) byte4 = 0
|
if (byte4 < 0) byte4 = 0;
|
||||||
# Reconstruct ASCII string
|
# Reconstruct ASCII string
|
||||||
result = result sprintf( "%c", base64__lshift(base64__and(byte1, 63), 2) + base64__rshift(base64__and(byte2, 48), 4) )
|
result = result sprintf( "%c", base64__lshift(base64__and(byte1, 63), 2) + base64__rshift(base64__and(byte2, 48), 4) );
|
||||||
if (base3 != "=") result = result sprintf( "%c", base64__lshift(base64__and(byte2, 15), 4) + base64__rshift(base64__and(byte3, 60), 2) )
|
if (base3 != "=") result = result sprintf( "%c", base64__lshift(base64__and(byte2, 15), 4) + base64__rshift(base64__and(byte3, 60), 2) );
|
||||||
if (base4 != "=") result = result sprintf( "%c", base64__lshift(base64__and(byte3, 3), 6) + byte4 )
|
if (base4 != "=") result = result sprintf( "%c", base64__lshift(base64__and(byte3, 3), 6) + byte4 );
|
||||||
# Decrease incoming string with 4
|
# Decrease incoming string with 4
|
||||||
src = substr(src, 5)
|
src = substr(src, 5);
|
||||||
}
|
}
|
||||||
return result
|
return result;
|
||||||
}
|
}
|
|
@ -423,14 +423,14 @@ function base_is_debug() {
|
||||||
|
|
||||||
function: lawk "Lancer GNUawk avec la librairie 'base'"
|
function: lawk "Lancer GNUawk avec la librairie 'base'"
|
||||||
function lawk() {
|
function lawk() {
|
||||||
gawk -i base "$@"
|
gawk -i base.awk "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
function: cawk "Lancer GNUawk avec LANG=C et la librairie 'base'
|
function: cawk "Lancer GNUawk avec LANG=C et la librairie 'base'
|
||||||
|
|
||||||
Le fait de forcer la valeur de LANG permet d'éviter les problèmes avec la locale"
|
Le fait de forcer la valeur de LANG permet d'éviter les problèmes avec la locale"
|
||||||
function cawk() {
|
function cawk() {
|
||||||
LANG=C gawk -i base "$@"
|
LANG=C gawk -i base.awk "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
function: lsort "Lancer sort avec support de la locale courante"
|
function: lsort "Lancer sort avec support de la locale courante"
|
|
@ -7,15 +7,15 @@ if [ -z "$NULIBDIR" -o "$NULIBDIR" != "$NULIBINIT" ]; then
|
||||||
function require:() { :; }
|
function require:() { :; }
|
||||||
function import:() { :; }
|
function import:() { :; }
|
||||||
fi
|
fi
|
||||||
##@include base.init
|
##@include base.init.sh
|
||||||
##@include base.core
|
##@include base.core.sh
|
||||||
##@include base.str
|
##@include base.str.sh
|
||||||
##@include base.arr
|
##@include base.arr.sh
|
||||||
##@include base.io
|
##@include base.io.sh
|
||||||
##@include base.eval
|
##@include base.eval.sh
|
||||||
##@include base.split
|
##@include base.split.sh
|
||||||
##@include base.path
|
##@include base.path.sh
|
||||||
##@include base.args
|
##@include base.args.sh
|
||||||
module: base base_ "Chargement de tous les modules base.*"
|
module: base base_ "Chargement de tous les modules base.*"
|
||||||
NULIB_RECURSIVE_IMPORT=1
|
NULIB_RECURSIVE_IMPORT=1
|
||||||
require: base.init base.core base.str base.arr base.io base.eval base.split base.path base.args
|
require: base.init base.core base.str base.arr base.io base.eval base.split base.path base.args
|
|
@ -3,7 +3,7 @@
|
||||||
##@require nulib.sh
|
##@require nulib.sh
|
||||||
##@require base
|
##@require base
|
||||||
module: git "" "Fonctions pour faciliter l'utilisation de git"
|
module: git "" "Fonctions pour faciliter l'utilisation de git"
|
||||||
require: nulib.sh base
|
require: nulib base
|
||||||
|
|
||||||
function: git_geturl ""
|
function: git_geturl ""
|
||||||
function git_geturl() {
|
function git_geturl() {
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
source "$(dirname -- "$0")/load.sh" || exit 1
|
source "$(dirname -- "$0")/../load.sh" || exit 1
|
||||||
export NULIBDIR NULIBINIT
|
export NULIBDIR NULIBINIT
|
||||||
|
|
||||||
ac_set_tmpfile bashrc
|
ac_set_tmpfile bashrc
|
||||||
|
@ -25,7 +25,7 @@ else
|
||||||
fi
|
fi
|
||||||
PS1=\"[nulib-shell] \$PS1\"
|
PS1=\"[nulib-shell] \$PS1\"
|
||||||
fi
|
fi
|
||||||
$(qvals source "$MYDIR/load.sh")"
|
$(qvals source "$MYDIR/../load.sh")"
|
||||||
|
|
||||||
"$SHELL" --rcfile "$bashrc" -i -- "$@"
|
"$SHELL" --rcfile "$bashrc" -i -- "$@"
|
||||||
# note: ne pas faire exec "$SHELL", parce que sinon le fichier temporaire bashrc
|
# note: ne pas faire exec "$SHELL", parce que sinon le fichier temporaire bashrc
|
|
@ -4,8 +4,8 @@ MYNAME="$(basename -- "$0")"
|
||||||
: "${PYTHON_MAIN_MODULE:=$MYNAME}"
|
: "${PYTHON_MAIN_MODULE:=$MYNAME}"
|
||||||
|
|
||||||
MYDIR="$(dirname -- "$0")"
|
MYDIR="$(dirname -- "$0")"
|
||||||
if [ -n "$PYTHONPATH" ]; then PYTHONPATH="$MYDIR/python:$PYTHONPATH"
|
if [ -n "$PYTHONPATH" ]; then PYTHONPATH="$MYDIR/../python:$PYTHONPATH"
|
||||||
else PYTHONPATH="$MYDIR/python"
|
else PYTHONPATH="$MYDIR/../python"
|
||||||
fi
|
fi
|
||||||
export PYTHONPATH
|
export PYTHONPATH
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
scriptdir="$(dirname -- "$0")"
|
|
||||||
if [ -z "$NULIBDIR" -o "$NULIBDIR" != "$NULIBINIT" ]; then
|
if [ -z "$NULIBDIR" -o "$NULIBDIR" != "$NULIBINIT" ]; then
|
||||||
# charger nulib si ce n'est pas déjà le cas
|
# charger nulib si ce n'est pas déjà le cas
|
||||||
source "$scriptdir/load.sh"
|
source "$(dirname -- "$0")/../load.sh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
DEFAULT_PYTHON=python2.7
|
DEFAULT_PYTHON=python2.7
|
||||||
|
|
||||||
#
|
#
|
||||||
echo ">>> Shell Python pour nulib"
|
echo ">>> Shell Python pour nulib"
|
||||||
exec "${PYTHON:-$DEFAULT_PYTHON}" -i -c "$(<"$scriptdir/pshell.py")"
|
exec "${PYTHON:-$DEFAULT_PYTHON}" -i -c "$(<"$MYDIR/pshell.py")"
|
|
@ -2,9 +2,9 @@
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
NULIB_NO_IMPORT_DEFAULTS=1
|
NULIB_NO_IMPORT_DEFAULTS=1
|
||||||
MYDIR="$(dirname -- "$0")"
|
MYDIR="$(dirname -- "$0")"
|
||||||
source "$MYDIR/load.sh" || exit 1
|
source "$MYDIR/../load.sh" || exit 1
|
||||||
|
|
||||||
NULIB_DOCDIR="$MYDIR/doc/bash"
|
NULIB_DOCDIR="$MYDIR/../doc/bash"
|
||||||
mkdir -p "$NULIB_DOCDIR"
|
mkdir -p "$NULIB_DOCDIR"
|
||||||
|
|
||||||
NULIB_DOCUMENTED_MODULES=()
|
NULIB_DOCUMENTED_MODULES=()
|
|
@ -66,7 +66,7 @@ NULIBDIRS=("$NULIBDIR/bash")
|
||||||
NULIBINIT="$NULIBDIR"
|
NULIBINIT="$NULIBDIR"
|
||||||
|
|
||||||
## Modules bash
|
## Modules bash
|
||||||
NULIB_LOADED_MODULES=(nulib.sh)
|
NULIB_LOADED_MODULES=(nulib)
|
||||||
NULIB_DEFAULT_MODULES=(base pretty sysinfos)
|
NULIB_DEFAULT_MODULES=(base pretty sysinfos)
|
||||||
|
|
||||||
# Si cette variable est non vide, require: recharge toujours le module, même
|
# Si cette variable est non vide, require: recharge toujours le module, même
|
||||||
|
@ -115,22 +115,22 @@ function nulib__require:() {
|
||||||
[ -n "$NULIB_SHOULD_IMPORT" ] && NULIB_ALLOW_IMPORT=1
|
[ -n "$NULIB_SHOULD_IMPORT" ] && NULIB_ALLOW_IMPORT=1
|
||||||
nr__found=
|
nr__found=
|
||||||
for nr__nulibdir in "${NULIBDIRS[@]}"; do
|
for nr__nulibdir in "${NULIBDIRS[@]}"; do
|
||||||
if [ -f "$nr__nulibdir/$nr__module" ]; then
|
if [ -f "$nr__nulibdir/$nr__module.sh" ]; then
|
||||||
nr__found=1
|
nr__found=1
|
||||||
if [ -n "$nr__force_reload" ] || ! nulib_check_loaded "$nr__module"; then
|
if [ -n "$nr__force_reload" ] || ! nulib_check_loaded "$nr__module"; then
|
||||||
NULIB_LOADED_MODULES=("${NULIB_LOADED_MODULES[@]}" "$nr__module")
|
NULIB_LOADED_MODULES=("${NULIB_LOADED_MODULES[@]}" "$nr__module")
|
||||||
source "$nr__nulibdir/$nr__module" || base_die
|
source "$nr__nulibdir/$nr__module.sh" || base_die
|
||||||
fi
|
fi
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
if [ -z "$nr__found" -a "$nr__module" == DEFAULTS ]; then
|
if [ -z "$nr__found" -a "$nr__module" == DEFAULTS ]; then
|
||||||
for nr__module in "${NULIB_DEFAULT_MODULES[@]}"; do
|
for nr__module in "${NULIB_DEFAULT_MODULES[@]}"; do
|
||||||
if [ -f "$nr__nulibdir/$nr__module" ]; then
|
if [ -f "$nr__nulibdir/$nr__module.sh" ]; then
|
||||||
nr__found=1
|
nr__found=1
|
||||||
if [ -n "$nr__force_reload" ] || ! nulib_check_loaded "$nr__module"; then
|
if [ -n "$nr__force_reload" ] || ! nulib_check_loaded "$nr__module"; then
|
||||||
NULIB_LOADED_MODULES=("${NULIB_LOADED_MODULES[@]}" "$nr__module")
|
NULIB_LOADED_MODULES=("${NULIB_LOADED_MODULES[@]}" "$nr__module")
|
||||||
source "$nr__nulibdir/$nr__module" || base_die
|
source "$nr__nulibdir/$nr__module.sh" || base_die
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
break
|
break
|
||||||
|
|
Loading…
Reference in New Issue