int32_t CBC_DataMatrixDecodedBitStreamParser::DecodeAsciiSegment( CBC_CommonBitSource* bits, CFX_ByteString& result, CFX_ByteString& resultTrailer, int32_t& e) { FX_CHAR buffer[128]; FX_BOOL upperShift = FALSE; do { int32_t oneByte = bits->ReadBits(8, e); BC_EXCEPTION_CHECK_ReturnValue(e, 0); if (oneByte == 0) { e = BCExceptionFormatException; return 0; } else if (oneByte <= 128) { oneByte = upperShift ? oneByte + 128 : oneByte; upperShift = FALSE; result += ((FX_CHAR)(oneByte - 1)); return ASCII_ENCODE; } else if (oneByte == 129) { return PAD_ENCODE; } else if (oneByte <= 229) { int32_t value = oneByte - 130; #if defined(_FX_WINAPI_PARTITION_APP_) memset(buffer, 0, sizeof(FX_CHAR) * 128); _itoa_s(value, buffer, 128, 10); #else FXSYS_itoa(value, buffer, 10); #endif if (value < 10) { result += '0'; buffer[1] = '\0'; } else { buffer[2] = '\0'; } result += buffer; } else if (oneByte == 230) { return C40_ENCODE; } else if (oneByte == 231) { return BASE256_ENCODE; } else if (oneByte == 232 || oneByte == 233 || oneByte == 234) { } else if (oneByte == 235) { upperShift = TRUE; } else if (oneByte == 236) { result += "[)>"; result += 0x1E; result += "05"; result += 0x1D; resultTrailer.Insert(0, 0x1E); resultTrailer.Insert(0 + 1, 0x04); } else if (oneByte == 237) { result += "[)>"; result += 0x1E; result += "06"; result += 0x1D; resultTrailer.Insert(0, 0x1E); resultTrailer.Insert(0 + 1, 0x04); } else if (oneByte == 238) { return ANSIX12_ENCODE; } else if (oneByte == 239) { return TEXT_ENCODE; } else if (oneByte == 240) { return EDIFACT_ENCODE; } else if (oneByte == 241) { } else if (oneByte >= 242) { if (oneByte == 254 && bits->Available() == 0) { } else { e = BCExceptionFormatException; return 0; } } } while (bits->Available() > 0); return ASCII_ENCODE; }