Separated text processing functions
This commit is contained in:
parent
27c0f0c42d
commit
95153e6de0
5 changed files with 68 additions and 48 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1 +1,2 @@
|
||||||
*.o
|
*.o
|
||||||
|
gen_ft8
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -1,5 +1,5 @@
|
||||||
CXXFLAGS = -std=c++14
|
CXXFLAGS = -std=c++14
|
||||||
LDFLAGS = -lm
|
LDFLAGS = -lm
|
||||||
|
|
||||||
gen_ft8: gen_ft8.o encode.o pack.o
|
gen_ft8: gen_ft8.o encode.o pack.o text.o
|
||||||
$(CXX) $(LDFLAGS) -o $@ $^
|
$(CXX) $(LDFLAGS) -o $@ $^
|
||||||
|
|
48
pack.cpp
48
pack.cpp
|
@ -2,57 +2,11 @@
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
|
||||||
#include "pack.h"
|
#include "pack.h"
|
||||||
|
#include "text.h"
|
||||||
|
|
||||||
constexpr int32_t NBASE = 37*36*10*27*27*27L;
|
constexpr int32_t NBASE = 37*36*10*27*27*27L;
|
||||||
constexpr int32_t NGBASE = 180*180L;
|
constexpr int32_t NGBASE = 180*180L;
|
||||||
|
|
||||||
|
|
||||||
// Utility functions for characters and strings
|
|
||||||
|
|
||||||
char to_upper(char c) {
|
|
||||||
return (c >= 'a' && c <= 'z') ? (c - 'a' + 'A') : c;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool is_digit(char c) {
|
|
||||||
return (c >= '0') && (c <= '9');
|
|
||||||
}
|
|
||||||
|
|
||||||
bool is_letter(char c) {
|
|
||||||
return ((c >= 'A') && (c <= 'Z')) || ((c >= 'a') && (c <= 'z'));
|
|
||||||
}
|
|
||||||
|
|
||||||
bool is_space(char c) {
|
|
||||||
return (c == ' ');
|
|
||||||
}
|
|
||||||
|
|
||||||
bool starts_with(const char *string, const char *prefix) {
|
|
||||||
return 0 == memcmp(string, prefix, strlen(prefix));
|
|
||||||
}
|
|
||||||
|
|
||||||
bool equals(const char *string1, const char *string2) {
|
|
||||||
return 0 == strcmp(string1, string2);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Text message formatting:
|
|
||||||
// - replaces lowercase letters with uppercase
|
|
||||||
// - merges consecutive spaces into single space
|
|
||||||
void fmtmsg(char *msg_out, const char *msg_in) {
|
|
||||||
char c;
|
|
||||||
char last_out = 0;
|
|
||||||
while ( (c = *msg_in) ) {
|
|
||||||
if (c != ' ' || last_out != ' ') {
|
|
||||||
last_out = to_upper(c);
|
|
||||||
*msg_out = last_out;
|
|
||||||
++msg_out;
|
|
||||||
}
|
|
||||||
++msg_in;
|
|
||||||
}
|
|
||||||
*msg_out = 0; // Add zero termination
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Returns integer encoding of a character (number/digit/space).
|
// Returns integer encoding of a character (number/digit/space).
|
||||||
// Alphabet: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ +-./?"
|
// Alphabet: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ +-./?"
|
||||||
// - Digits are encoded as 0..9
|
// - Digits are encoded as 0..9
|
||||||
|
|
51
text.cpp
Normal file
51
text.cpp
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
#include "text.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
// Utility functions for characters and strings
|
||||||
|
|
||||||
|
char to_upper(char c) {
|
||||||
|
return (c >= 'a' && c <= 'z') ? (c - 'a' + 'A') : c;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool is_digit(char c) {
|
||||||
|
return (c >= '0') && (c <= '9');
|
||||||
|
}
|
||||||
|
|
||||||
|
bool is_letter(char c) {
|
||||||
|
return ((c >= 'A') && (c <= 'Z')) || ((c >= 'a') && (c <= 'z'));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool is_space(char c) {
|
||||||
|
return (c == ' ');
|
||||||
|
}
|
||||||
|
|
||||||
|
bool in_range(char c, char min, char max) {
|
||||||
|
return (c >= min) && (c <= max);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool starts_with(const char *string, const char *prefix) {
|
||||||
|
return 0 == memcmp(string, prefix, strlen(prefix));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool equals(const char *string1, const char *string2) {
|
||||||
|
return 0 == strcmp(string1, string2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Text message formatting:
|
||||||
|
// - replaces lowercase letters with uppercase
|
||||||
|
// - merges consecutive spaces into single space
|
||||||
|
void fmtmsg(char *msg_out, const char *msg_in) {
|
||||||
|
char c;
|
||||||
|
char last_out = 0;
|
||||||
|
while ( (c = *msg_in) ) {
|
||||||
|
if (c != ' ' || last_out != ' ') {
|
||||||
|
last_out = to_upper(c);
|
||||||
|
*msg_out = last_out;
|
||||||
|
++msg_out;
|
||||||
|
}
|
||||||
|
++msg_in;
|
||||||
|
}
|
||||||
|
*msg_out = 0; // Add zero termination
|
||||||
|
}
|
14
text.h
Normal file
14
text.h
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
char to_upper(char c);
|
||||||
|
bool is_digit(char c);
|
||||||
|
bool is_letter(char c);
|
||||||
|
bool is_space(char c);
|
||||||
|
bool in_range(char c, char min, char max);
|
||||||
|
bool starts_with(const char *string, const char *prefix);
|
||||||
|
bool equals(const char *string1, const char *string2);
|
||||||
|
|
||||||
|
// Text message formatting:
|
||||||
|
// - replaces lowercase letters with uppercase
|
||||||
|
// - merges consecutive spaces into single space
|
||||||
|
void fmtmsg(char *msg_out, const char *msg_in);
|
Loading…
Reference in a new issue