diff enc-text/main.c @ 2:a16b1b9728f6

enc-text: sms-encode-text program written
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 05 Aug 2023 02:07:22 +0000
parents
children e56bb9f09ff1
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/enc-text/main.c	Sat Aug 05 02:07:22 2023 +0000
@@ -0,0 +1,106 @@
+/*
+ * This is the main module for sms-encode-text utility.
+ */
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <strings.h>
+#include <unistd.h>
+#include "defs.h"
+
+int utf8_input, ucs2_mode;
+int concat_enable, concat_refno_set;
+char msgtext[MAX_MSG_CHARS*2+2];
+u_char concat_refno;
+
+process_cmdline(argc, argv)
+	char **argv;
+{
+	int c;
+	extern int optind;
+	extern char *optarg;
+
+	while ((c = getopt(argc, argv, "cC:uU")) != EOF) {
+		switch (c) {
+		case 'c':
+			concat_enable = 1;
+			continue;
+		case 'C':
+			concat_enable = 1;
+			concat_refno = strtoul(optarg, 0, 0);
+			concat_refno_set = 1;
+			continue;
+		case 'u':
+			utf8_input = 1;
+			continue;
+		case 'U':
+			ucs2_mode = 1;
+			continue;
+		default:
+			/* error msg already printed */
+			exit(1);
+		}
+	}
+	if (argc > optind + 1) {
+		fprintf(stderr, "usage: %s [options] [message]\n", argv[0]);
+		exit(1);
+	}
+	if (argc < optind + 1)
+		return(0);
+	if (strlen(argv[optind]) > MAX_MSG_CHARS*2) {
+		fprintf(stderr, "error: message argument is too long\n");
+		exit(1);
+	}
+	strcpy(msgtext, argv[optind]);
+	return(1);
+}
+
+read_msgtext_from_stdin()
+{
+	unsigned pos, remain;
+	int cc;
+
+	pos = 0;
+	remain = sizeof(msgtext);
+	for (;;) {
+		if (!remain) {
+			fprintf(stderr,
+				"error: message on stdin is too long\n");
+			exit(1);
+		}
+		cc = read(0, msgtext + pos, remain);
+		if (cc < 0) {
+			fprintf(stderr, "error reading message from stdin\n");
+			exit(1);
+		}
+		if (cc == 0)
+			break;
+		pos += cc;
+		remain -= cc;
+	}
+	msgtext[pos] = '\0';
+}
+
+trim_trailing_newlines()
+{
+	char *cp;
+
+	cp = index(msgtext, '\0');
+	while (cp > msgtext && cp[-1] == '\n')
+		cp--;
+	*cp = '\0';
+}
+
+main(argc, argv)
+	char **argv;
+{
+	if (!process_cmdline(argc, argv))
+		read_msgtext_from_stdin();
+	trim_trailing_newlines();
+	if (ucs2_mode)
+		ucs2_mode_main();
+	else
+		gsm7_mode_main();
+}