diff smsc-sendmt/imsi_entry.c @ 12:7543aa173634

proto-smsc-sendmt program written, compiles
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 27 Aug 2023 16:36:28 -0800
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smsc-sendmt/imsi_entry.c	Sun Aug 27 16:36:28 2023 -0800
@@ -0,0 +1,53 @@
+/*
+ * The library function implemented in this module supports IMSI entry
+ * at UI level, either in the standard form (long string of digits)
+ * or in the shorthand notation introduced in fc-sim-tools.
+ */
+
+#include <ctype.h>
+#include <string.h>
+
+int grok_imsi_user_arg(const char *arg, char *dest)
+{
+	const char *cp;
+	char *dp;
+	int n, tail_len, remain;
+
+	if (!isdigit(*arg))
+		return(-1);
+	cp = arg;
+	dp = dest;
+	n = 0;
+	while (isdigit(*cp)) {
+		if (n >= 15)
+			return(-1);
+		*dp++ = *cp++;
+		n++;
+	}
+	if (!*cp) {
+		if (n < 6)
+			return(-1);
+		*dp = '\0';
+		return(0);
+	}
+	if (*cp != '-')
+		return(-1);
+	cp++;
+	tail_len = strlen(cp);
+	if (!tail_len)
+		return(-1);
+	remain = 15 - n;
+	if (remain < tail_len + 1)
+		return(-1);
+	while (remain > tail_len) {
+		*dp++ = '0';
+		remain--;
+	}
+	while (*cp) {
+		if (!isdigit(*cp))
+			return(-1);
+		*dp++ = *cp++;
+	}
+	*dp = '\0';
+	return(0);
+}