#pragma once #include #include #include struct PublicMessage { static const uint8_t kWrapCols = 54; static const uint8_t kTextMax = 172; // 171 visible bytes plus NUL. uint32_t sequence; uint32_t timestamp; bool outbound; bool rebroadcasted; uint8_t hash[MAX_HASH_SIZE]; char text[kTextMax]; }; static inline uint8_t wrappedSegmentLen(const char* text, uint8_t cols = PublicMessage::kWrapCols) { uint8_t len = 0; uint8_t last_space = 0; if (!text || !*text) { return 0; } while (text[len] && len < cols) { if (text[len] == ' ') { last_space = len; } ++len; } if (!text[len]) { return len; } return (last_space > 0) ? last_space : cols; } static inline uint8_t wrappedLineCount(const char* text, uint8_t cols = PublicMessage::kWrapCols) { if (!text || !*text) { return 1; } uint8_t count = 0; const char* p = text; while (*p) { while (*p == ' ') { ++p; } if (!*p) { break; } uint8_t len = wrappedSegmentLen(p, cols); if (len == 0) { break; } ++count; p += len; while (*p == ' ') { ++p; } } return count ? count : 1; }