annotate enc-text/main.c @ 28:6e925aa54727

libcoding: more sensible naming of GSM time encoding and decoding modules
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 13 Jun 2024 02:32:11 +0000
parents e56bb9f09ff1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * This is the main module for sms-encode-text utility.
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 */
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 #include <sys/types.h>
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 #include <stdio.h>
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 #include <stdlib.h>
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #include <string.h>
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 #include <strings.h>
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <unistd.h>
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 #include "defs.h"
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12
23
e56bb9f09ff1 sms-encode-text: port over -e option from fcup-smsend
Mychaela Falconia <falcon@freecalypso.org>
parents: 2
diff changeset
13 int utf8_input, ucs2_mode, allow_escape;
2
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 int concat_enable, concat_refno_set;
23
e56bb9f09ff1 sms-encode-text: port over -e option from fcup-smsend
Mychaela Falconia <falcon@freecalypso.org>
parents: 2
diff changeset
15 char msgtext[MAX_MSG_CHARS*3+2];
2
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 u_char concat_refno;
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 process_cmdline(argc, argv)
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 char **argv;
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 {
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 int c;
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 extern int optind;
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 extern char *optarg;
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24
23
e56bb9f09ff1 sms-encode-text: port over -e option from fcup-smsend
Mychaela Falconia <falcon@freecalypso.org>
parents: 2
diff changeset
25 while ((c = getopt(argc, argv, "cC:euU")) != EOF) {
2
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 switch (c) {
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 case 'c':
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 concat_enable = 1;
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 continue;
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 case 'C':
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 concat_enable = 1;
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 concat_refno = strtoul(optarg, 0, 0);
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 concat_refno_set = 1;
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 continue;
23
e56bb9f09ff1 sms-encode-text: port over -e option from fcup-smsend
Mychaela Falconia <falcon@freecalypso.org>
parents: 2
diff changeset
35 case 'e':
e56bb9f09ff1 sms-encode-text: port over -e option from fcup-smsend
Mychaela Falconia <falcon@freecalypso.org>
parents: 2
diff changeset
36 allow_escape = 1;
e56bb9f09ff1 sms-encode-text: port over -e option from fcup-smsend
Mychaela Falconia <falcon@freecalypso.org>
parents: 2
diff changeset
37 continue;
2
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 case 'u':
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 utf8_input = 1;
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 continue;
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 case 'U':
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 ucs2_mode = 1;
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 continue;
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 default:
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 /* error msg already printed */
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 exit(1);
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 }
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 }
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 if (argc > optind + 1) {
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 fprintf(stderr, "usage: %s [options] [message]\n", argv[0]);
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 exit(1);
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 }
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 if (argc < optind + 1)
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 return(0);
23
e56bb9f09ff1 sms-encode-text: port over -e option from fcup-smsend
Mychaela Falconia <falcon@freecalypso.org>
parents: 2
diff changeset
55 if (strlen(argv[optind]) > MAX_MSG_CHARS*3) {
2
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 fprintf(stderr, "error: message argument is too long\n");
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 exit(1);
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 }
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 strcpy(msgtext, argv[optind]);
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 return(1);
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 }
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 read_msgtext_from_stdin()
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 {
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 unsigned pos, remain;
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 int cc;
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 pos = 0;
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 remain = sizeof(msgtext);
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 for (;;) {
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 if (!remain) {
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 fprintf(stderr,
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 "error: message on stdin is too long\n");
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 exit(1);
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 }
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 cc = read(0, msgtext + pos, remain);
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 if (cc < 0) {
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 fprintf(stderr, "error reading message from stdin\n");
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 exit(1);
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 }
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 if (cc == 0)
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 break;
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 pos += cc;
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 remain -= cc;
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 }
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 msgtext[pos] = '\0';
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 }
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 trim_trailing_newlines()
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 {
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 char *cp;
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 cp = index(msgtext, '\0');
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 while (cp > msgtext && cp[-1] == '\n')
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 cp--;
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 *cp = '\0';
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 }
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99 main(argc, argv)
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 char **argv;
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 {
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 if (!process_cmdline(argc, argv))
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103 read_msgtext_from_stdin();
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 trim_trailing_newlines();
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105 if (ucs2_mode)
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106 ucs2_mode_main();
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
107 else
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
108 gsm7_mode_main();
a16b1b9728f6 enc-text: sms-encode-text program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
109 }