private static int GetEncodation(byte[] text, int textOffset, int textSize, byte[] data, int dataOffset, int dataSize, int options, bool firstMatch) {
int e, j, k;
int[] e1 = new int[6];
if (dataSize < 0)
return -1;
e = -1;
options &= 7;
if (options == 0) {
e1[0] = AsciiEncodation(text, textOffset, textSize, data, dataOffset, dataSize);
if (firstMatch && e1[0] >= 0)
return e1[0];
e1[1] = C40OrTextEncodation(text, textOffset, textSize, data, dataOffset, dataSize, false);
if (firstMatch && e1[1] >= 0)
return e1[1];
e1[2] = C40OrTextEncodation(text, textOffset, textSize, data, dataOffset, dataSize, true);
if (firstMatch && e1[2] >= 0)
return e1[2];
e1[3] = B256Encodation(text, textOffset, textSize, data, dataOffset, dataSize);
if (firstMatch && e1[3] >= 0)
return e1[3];
e1[4] = X12Encodation(text, textOffset, textSize, data, dataOffset, dataSize);
if (firstMatch && e1[4] >= 0)
return e1[4];
e1[5] = EdifactEncodation(text, textOffset, textSize, data, dataOffset, dataSize);
if (firstMatch && e1[5] >= 0)
return e1[5];
if (e1[0] < 0 && e1[1] < 0 && e1[2] < 0 && e1[3] < 0 && e1[4] < 0 && e1[5] < 0) {
return -1;
}
j = 0;
e = 99999;
for (k = 0; k < 6; ++k) {
if (e1[k] >= 0 && e1[k] < e) {
e = e1[k];
j = k;
}
}
if (j == 0)
e = AsciiEncodation(text, textOffset, textSize, data, dataOffset, dataSize);
else if (j == 1)
e = C40OrTextEncodation(text, textOffset, textSize, data, dataOffset, dataSize, false);
else if (j == 2)
e = C40OrTextEncodation(text, textOffset, textSize, data, dataOffset, dataSize, true);
else if (j == 3)
e = B256Encodation(text, textOffset, textSize, data, dataOffset, dataSize);
else if (j == 4)
e = X12Encodation(text, textOffset, textSize, data, dataOffset, dataSize);
return e;
}
switch (options) {
case DM_ASCII:
return AsciiEncodation(text, textOffset, textSize, data, dataOffset, dataSize);
case DM_C40:
return C40OrTextEncodation(text, textOffset, textSize, data, dataOffset, dataSize, true);
case DM_TEXT:
return C40OrTextEncodation(text, textOffset, textSize, data, dataOffset, dataSize, false);
case DM_B256:
return B256Encodation(text, textOffset, textSize, data, dataOffset, dataSize);
case DM_X21:
return X12Encodation(text, textOffset, textSize, data, dataOffset, dataSize);
case DM_EDIFACT:
return EdifactEncodation(text, textOffset, textSize, data, dataOffset, dataSize);
case DM_RAW:
if (textSize > dataSize)
return -1;
System.Array.Copy(text, textOffset, data, dataOffset, textSize);
return textSize;
}
return -1;
}