I am coding in C on an Android tablet with Termux. Can I compile for MacOS?
I'd like to share my program with some friends to show off, but naturally a lot of them are on Apple products... I use clang to compile.
::: spoiler 263 lines of code
#include <stdio.h>
#include <string.h>
//Function declarations
void promptchoice_main(void);
void promptchoice_main_again(void);
void promptinput(void);
void promptchoice_trim(void);
void executechoice(char choice_trim);
void trimnumbers(void);
void trimwhitespace(void);
void trimletters(void);
void trimspecial(void);
void specifyspecial(void);
void printresult(char input[]);
//Global variables
char choice_main = 0x00;
char choice_trim = 0x00;
char choice_detail = 0x00;
char input[1000] = "";
char previous_input[1000] = "";
//Remove specific numbers, letters, punctuation or whitespace characters from input.
int main() {
printf("\nWelcome! This program trims text by removing unwanted characters.\n");
while (1) {
if (strlen(previous_input) == 0) { // Check for previously trimmed text in memory.
promptchoice_main();
if (choice_main == 'E') { break; }
if (choice_main == 'T') {
promptinput();
promptchoice_trim();
executechoice(choice_trim);
printresult(input);
}
}
else {
promptchoice_main_again();
if (choice_main == 'E') { break; }
if (choice_main == 'T') {
promptinput();
promptchoice_trim();
executechoice(choice_trim);
printresult(input);
}
else if (choice_main == 'P') {
sprintf(input, "%s", previous_input);
printf("\nYou are trimming previously trimmed text: %s\n", input);
promptchoice_trim();
executechoice(choice_trim);
printresult(input);
}
}
}
printf("\nGoodbye!\n");
return 0;
}
//Function definitions
void promptchoice_main(void) {
while (1) {
printf("\nPress T and ENTER to trim text or E and ENTER to exit: ");
scanf("%c", &choice_main);
while (getchar() != '\n') {}
if (choice_main == 'T' || choice_main == 'E') { break; }
else { printf("\nInvalid input!\n"); }
}
return;
}
void promptchoice_main_again(void) {
while (1) {
printf("\nPress T and ENTER to trim new text, P and ENTER to trim previously trimmed text or E and ENTER to exit: ");
scanf("%c", &choice_main);
while (getchar() != '\n') {}
if (choice_main == 'T' || choice_main == 'P' || choice_main == 'E') { break; }
else { printf("\nInvalid input!\n"); }
}
return;
}
void promptinput(void) {
printf("\nEnter the text that you would like to trim and press ENTER: ");
fgets(input, sizeof input, stdin);
input[strlen(input) - 1] = '\0';
return;
}
void promptchoice_trim(void) {
while (1) {
int x = 0;
int n = 0;
printf("\nWhat would you like to trim?\n1) Numbers (1, 2, 3...)\n2) Whitespace (space, tab or newline) \n3) Letters (A,B,C... a,b,c...)\n4) Special characters (!,?, . , ...)\nType one of the above numbers and press ENTER: ");
scanf("%c", &choice_trim);
while (getchar() != '\n') {}
if (choice_trim < 0x31 || choice_trim > 0x34) { printf("\nInvalid choice!\n"); }
else if (choice_trim == 0x31) {
for (n = strlen(input) - 1; n >= 0; n--) {
if (input[n] >= 0x30 && input[n] <= 0x39) { x++; }
}
if (x == 0) { printf("\nNo numbers found!\n"); }
else { break; }
}
else if (choice_trim == 0x32) {
for (n = strlen(input) - 1; n >= 0; n--) {
if (input[n] == 0x20 || input[n] == 0x09 || input[n] == 0x0A) { x++; }
}
if (x == 0) { printf("\nNo whitespace found!\n"); }
else { break; }
}
else if (choice_trim == 0x33) {
for (n = strlen(input) - 1; n >= 0; n--) {
if (input[n] >= 0x41 && input[n] < 0x5A || input[n] >= 0x61 && input[n] <= 0x7A ) { x++; }
}
if (x == 0) { printf("\nNo letters found!\n"); }
else { break; }
}
else if (choice_trim == 0x34) {
for (n = strlen(input) - 1; n >= 0; n--) {
if (input[n] >= 0x21 && input[n] < 0x2F || input[n] >= 0x3A && input[n] < 0x40 || input[n] >= 0x5B && input[n] < 0x60 || input[n] >= 0x7B && input[n] <= 0x7E) { x++; }
}
if (x == 0) { printf("\nNo special characters found!\n"); }
else { break; }
}
}
return;
}
void executechoice(char choice_trim) {
switch (choice_trim) {
case 0x31:
trimnumbers(); // 123 etc
break;
case 0x32:
trimwhitespace(); // space, tab, newline
break;
case 0x33:
trimletters(); // ABC..., abc...
break;
case 0x34:
trimspecial(); // ! ? , . etc.
break;
}
return;
}
void trimnumbers(void) {
int n = 0;
for (n = strlen(input) - 1; n >= 0; n--) {
if (input[n] >= 0x30 && input[n] <= 0x39) { input[n] = 0x18; }
}
return;
}
void trimwhitespace(void) {
while (1) {
printf("\nType S to trim SPACE, T to trim TAB, N to trim NEWLINE or A to trim all whitespace: ");
scanf("%c", &choice_detail);
while (getchar() != '\n') {}
if (choice_detail == 'S' || choice_detail == 'T' || choice_detail == 'A') { break; }
else { printf("\nInvalid input!\n"); }
}
int n = 0;
for (n = strlen(input) - 1; n >= 0; n--) {
if (choice_detail == 'S') { if (input[n] == 0x20) { input[n] = 0x18; } } // space
else if (choice_detail == 'T') { if (input[n] == 0x09) { input[n] = 0x18; } } // tab
else if (choice_detail == 'N') { if (input[n] == 0x0A) { input[n] = 0x18; } } // newline
else if (choice_detail == 'A') { if (input[n] == 0x20 || input[n] == 0x09 || input[n] == 0x0A) { input[n] = 0x18; } }
}
return;
}
void trimletters(void) {
int x = 0;
int n = 0;
while (1) {
printf("\nType U to trim uppercase letters, L to trim lowercase letters or A to trim all letters: ");
scanf("%c", &choice_detail);
while (getchar() != '\n') {}
if (choice_detail != 'U' && choice_detail != 'L' && choice_detail != 'A') { printf("\nInvalid input!\n"); }
else if (choice_detail == 'U') {
for (n = strlen(input) - 1; n >= 0; n--) {
if (input[n] >= 0x41 && input[n] <= 0x5A) { x++; }
}
if (x == 0) { printf("\nUppercase letters not found!\n"); }
else {
for (n = strlen(input) - 1; n >= 0; n--) {
if (input[n] >= 0x41 && input[n] <= 0x5A) { input[n] = 0x18; }
}
break;
}
}
else if (choice_detail == 'L') {
for (n = strlen(input) - 1; n >= 0; n--) {
if (input[n] >= 0x61 && input[n] <= 0x7A ) { x++; }
}
if (x == 0) { printf("\nLowercase letters not found!\n"); }
else {
for (n = strlen(input) - 1; n >= 0; n--) {
if (input[n] >= 0x61 && input[n] <= 0x7A ) { input[n] = 0x18; }
}
break;
}
}
else if (choice_detail == 'A') {
for (n = strlen(input) - 1; n >= 0; n--) {
if (input[n] >= 0x41 && input[n] <= 0x5A || input[n] >= 0x61 && input[n] <= 0x7A ) { input[n] = 0x18; }
}
break;
}
}
return;
}
void trimspecial(void) {
while (1) {
printf("\nType A to trim all special characters or S to specify which character to remove: ");
scanf("%c", &choice_detail);
while (getchar() != '\n') {}
if (choice_detail == 'A' || choice_detail == 'S') { break; }
else { printf("\nInvalid input!\n"); }
}
int n = 0;
for (n = strlen(input) - 1; n >= 0; n--) {
if (choice_detail == 'A') { if (input[n] >= 0x21 && input[n] <= 0x2F || input[n] >= 0x3A && input[n] <= 0x40 || input[n] >= 0x5B && input[n] <= 0x60 || input[n] >= 0x7B && input[n] <= 0x7E) { input[n] = 0x18; } } // All whitespace
}
if (choice_detail == 'S') { specifyspecial(); } // Let user specify character.
return;
}
void specifyspecial(void) {
char choice_special = 0x00;
int x = 0;
int n = 0;
while (1) {
printf("\nEnter special character to trim and press ENTER: ");
scanf("%c", &choice_special);
while (getchar() != '\n') {}
if (choice_special < 0x21 || choice_special > 0x2F && choice_special < 0x3A || choice_special > 0x40 && choice_special < 0x5B || choice_special > 0x60 && choice_special < 0x7B || choice_special > 0x7E) { printf("\nNot a special character!\n"); }
else {
for (n = strlen(input) - 1; n >= 0; n--) {
if (input[n] == choice_special) { x++; }
}
if (x == 0) { printf("\nCharacter not found!\n"); }
else { break; }
}
}
for (n = strlen(input) - 1; n >= 0; n--) { if (input[n] == choice_special) { input[n] = 0x18; } }
return;
}
void printresult(char input[]) {
printf("\nTrimmed text:\n\n%s\n", input);
sprintf(previous_input, "%s", input); // Save trimmed text for reuse.
return;
}
//TODO
//Replace characters (uppercase/lowercase, user selected, etc).
:::