1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
#ifndef CHARLIST_H
#define CHARLIST_H
#define INT_LETTERS 1
static const char Chars[] =
#ifdef INT_LETTERS
"abcdefghijklmnopqrstuvwxyz0123456789?.,:åäöü£)/=";
#else
"abcdefghijklmnopqrstuvwxyz0123456789?.,:)/=";
#endif
static const char *Codes[] =
{ ".-", "-...", "-.-.", "-..", ".", "..-.", "--.",
"....", "..", ".---", "-.-", ".-..", "--", "-.", "---",
".--.", "--.-", ".-.", "...", "-", "..-", "...-",
".--", "-..-", "-.--", "--..", /* A..Z */
"-----", ".----", "..---", "...--", "....-",
".....", "-....", "--...", "---..", "----.", /* 0..9 */
"..--..", ".-.-.-", "--..--", "---...", /* ?|.,: */
#ifdef INT_LETTERS
".--.-", ".-.-", "---.", "..--", /* International letters */
#endif
"........", /* Error */
"-.--.-", /* () */
"-..-.", /* / */
"-...-" /* = */
};
static int
parse_charlist (char *ch)
{
int prev = 0, i, j;
if (strcmp (ch, "-1") == 0)
return parse_charlist ("aeost");
if (strcmp (ch, "-2") == 0)
return parse_charlist ("hilnr");
if (strcmp (ch, "-3") == 0)
return parse_charlist ("cfgu");
if (strcmp (ch, "-4") == 0)
return parse_charlist ("dkmp");
if (strcmp (ch, "-5") == 0)
return parse_charlist ("bqvy");
if (strcmp (ch, "-6") == 0)
return parse_charlist ("jvxz");
#ifdef INT_LETTERS
if (strcmp (ch, "-7") == 0)
return parse_charlist ("äöå");
#endif
if (strcmp (ch, "-8") == 0)
return parse_charlist ("50146");
if (strcmp (ch, "-9") == 0)
return parse_charlist ("27389");
if (strcmp (ch, "-10") == 0)
return parse_charlist ("/=?");
if (strcmp (ch, "-11") == 0)
return parse_charlist (").,-");
#ifdef INT_LETTERS
if (strcmp (ch, "-a") == 0) /* Finnish CWH module */
return parse_charlist ("a-zåäö0-9/=?");
if (strcmp (ch, "-d") == 0) /* Some very difficult characters */
return parse_charlist ("1j/l4bh569ö");
#endif
for (i = 0; i < strlen (ch); i++)
if (ch[i] == '-')
{
prev = -prev;
}
else
{
if (prev > 0)
{
for (j = prev; j <= ch[i]; j++)
{
randomlist[nrandom++] = j;
randomlist[nrandom] = 0;
}
}
else
{
randomlist[nrandom++] = ch[i];
randomlist[nrandom] = 0;
}
prev = -((unsigned char) ch[i] + 1);
}
return 0;
}
#endif
|