letterize-1.3/COPYING 0000644 0000027 0000027 00000002615 11457624753 012575 0 ustar esr esr BSD LICENSE
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
Neither name of the this project nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
letterize-1.3/letterize.1 0000644 0000027 0000027 00000005660 11457633002 013621 0 ustar esr esr '\" t
.\" Title: letterize
.\" Author: [see the "AUTHOR" section]
.\" Generator: DocBook XSL Stylesheets v1.75.2
.\" Date: 10/20/2010
.\" Manual: Miscellanea
.\" Source: letterize
.\" Language: English
.\"
.TH "LETTERIZE" "1" "10/20/2010" "letterize" "Miscellanea"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
letterize_ \- phone\-number to letter\-mnemonic generator
.SH "SYNOPSIS"
.HP \w'\fBletterize\fR\ 'u
\fBletterize\fR \fInnnnnnn\fR
.SH "DESCRIPTION"
.PP
This program tries to help you find a letter mnemonic matching a given phone number\&.
.PP
It emits to standard output each possible pronounceable mnemonic, one per line, using the American standard mapping of dial letters to numbers (2 goes to ABC, 3 to DEF, 4 to GHI, 5 to JKL, 6 to MNO, 7 to PRS, 8 to TUV, 9 to XYZ)\&.
.PP
The program uses a table of pronounceable letter\-triples derived from a dictionary scan\&. Each potential mnemonic must be such that all of its letter\-triples are in the table to be emitted\&. About 30% of possible triples are considered pronounceable\&.
.PP
A typical 7\-digit phone number has 19,683 possible mnemonics, but this test usually cuts the list down to a few hundred or so, a reasonable number to eyeball\-check\&. For some numbers, the list will, sadly, be empty\&.
.PP
It\*(Aqs best to leave out punctuation such as dashes and parens\&.
.SH "BUGS"
.PP
The filtering method doesn\*(Aqt know what plausible medial triples are not reasonable at the beginnings and ends of words\&.
.PP
I\*(Aqm not sure what table position 0 (which is what 0 and 1 are mapped to) means\&. If you figure it out, you tell me\&. I really should have generated my own table, but that would have been more work than this seemed worth \-\- if your number contains either, you probably need to generate your mnemonic in disjoint pieces around the digits anyway\&.
.SH "AUTHOR"
.PP
Eric S\&. Raymond
esr@snark\&.thyrsus\&.com\&. It\*(Aqs based on a table of plausible letter\-triples that had no name attached to it\&. Surf to
\m[blue]\fBhttp://www\&.catb\&.org/~esr/\fR\m[]
for updates and related resources\&.
letterize-1.3/letterize.c 0000644 0000027 0000027 00000026731 11457627127 013720 0 ustar esr esr /*
* letterize.c -- generate all mnemonics corresponding to a phone number
*
* by Eric S. Raymond , Oct 24 1994
*
* Everything between the CUT HEREs was copied from a code fragment I found
* on the net, unattributed.
*
* ------------------------------ CUT HERE -----------------------------------
*/
/*
Table of triple usage in text
24511 words were used to make this table.
The words came from the files:
/usr/dict/words
obvpats.lp
The table is 30 percent populated.
*/
long obvtab[27][27] =
{
{ 0X00100001, 0X00040000, 0X00040000, 0X00009000, 0X00808020, 0X00140000,
0X00000000, 0X00080000, 0X00000002, 0X00000000, 0X00000000, 0X00000000,
0X00001020, 0X00000000, 0X00000010, 0X00000020, 0X00000000, 0X00000000,
0X00000030, 0X00300100, 0X00000100, 0X00000000, 0X00000020, 0X00000000,
0X00000000, 0X00000000, 0X00000000 },
{ 0X00090000, 0X000c708a, 0X022cd73e, 0X023ffbbe, 0X02fffffe, 0X002cd0da,
0X023cdae2, 0X02adf3b6, 0X0024f222, 0X00dd7efa, 0X00008022, 0X02b5937a,
0X06fdfbfe, 0X02bdf37e, 0X07ffdfff, 0X003c3248, 0X023dfb76, 0X00200000,
0X07fffffe, 0X02bbfbbe, 0X06bcfb6f, 0X055f7dfc, 0X02609232, 0X021cfbf6,
0X02999222, 0X00bdf3ff, 0X06308232 },
{ 0X00080000, 0X07fdfbfc, 0X022c9226, 0X00008012, 0X00248222, 0X07dffbfe,
0X00200000, 0X00000000, 0X00208020, 0X047ffdfe, 0X00000020, 0X00000000,
0X02208222, 0X00800220, 0X0000a022, 0X03fdfffe, 0X00048000, 0X00000000,
0X02208222, 0X00308228, 0X00049062, 0X071efefc, 0X00000220, 0X00000020,
0X00000000, 0X049d11a2, 0X00000000 },
{ 0X00080080, 0X02fffffe, 0X000c0020, 0X0024932a, 0X0000802a, 0X06bdf3fe,
0X00000002, 0X00248220, 0X02bdf3fe, 0X007df0fe, 0X00000000, 0X02bdfffe,
0X02208222, 0X00200222, 0X00008222, 0X07fffffe, 0X00000102, 0X00200000,
0X02308222, 0X00188200, 0X02aca262, 0X003df27e, 0X00000004, 0X00000000,
0X00000000, 0X001dd08e, 0X00000022 },
{ 0X00088022, 0X06fd7bfc, 0X02249222, 0X00209102, 0X02249332, 0X07fff7fe,
0X00249282, 0X02a43a22, 0X00008222, 0X05fdf3fe, 0X00208022, 0X00000220,
0X02208222, 0X00208222, 0X00008223, 0X07fdf3fe, 0X00049322, 0X00200000,
0X02208222, 0X0091bb2a, 0X00008302, 0X043dfafe, 0X00008222, 0X02048222,
0X00000000, 0X00987aef, 0X00200000 },
{ 0X004c1030, 0X04ff79dc, 0X023c9226, 0X023c9b3a, 0X02bdf3fe, 0X04ddfbfe,
0X023c92fa, 0X0224f3e6, 0X0224a222, 0X045d7afa, 0X00208022, 0X0218ca36,
0X02fdfbfe, 0X02a9f22e, 0X06ffffff, 0X05fd73d8, 0X02bdb32e, 0X00200000,
0X07fffffe, 0X02fbfbbe, 0X06bdfb6e, 0X005d78bc, 0X066c8222, 0X029df37e,
0X0333832a, 0X008df97f, 0X06648222 },
{ 0X00080000, 0X07bc7bfe, 0X00000222, 0X0000000a, 0X00008002, 0X02fc7abe,
0X022cb366, 0X00000102, 0X00000022, 0X055c70fe, 0X00008000, 0X00000002,
0X02208222, 0X0000000a, 0X00000200, 0X03edf2be, 0X00000008, 0X00000000,
0X02208222, 0X00118922, 0X028ca32e, 0X041c74b8, 0X00000000, 0X00000002,
0X00000000, 0X00000000, 0X00000000 },
{ 0X00080000, 0X06fdf3fc, 0X00008222, 0X00000000, 0X00008022, 0X02fdf3fe,
0X00240220, 0X020d93a2, 0X02bddffe, 0X047df0fe, 0X00000002, 0X00008200,
0X02208222, 0X02300222, 0X00318226, 0X02fdf3fe, 0X00009220, 0X00000000,
0X02208222, 0X00919b06, 0X00048302, 0X061cf2ee, 0X00000000, 0X02048022,
0X00000000, 0X00056002, 0X00000002 },
{ 0X00080000, 0X06fdfbfe, 0X02249222, 0X00048102, 0X00048202, 0X07fff2ff,
0X00208202, 0X00008022, 0X00008122, 0X047dfcfe, 0X00000800, 0X00008220,
0X02248222, 0X0008a222, 0X0028c222, 0X06fdfeff, 0X00209202, 0X00200000,
0X02249232, 0X00108302, 0X02bdf3fa, 0X071d71fe, 0X00000200, 0X00008322,
0X00000000, 0X011d32be, 0X00000000 },
{ 0X00483010, 0X05dd7bbc, 0X022cf226, 0X023cdb2a, 0X02bdf6b6, 0X04fd79fc,
0X0234d262, 0X063df3a2, 0X00000222, 0X00000202, 0X00208002, 0X02208a22,
0X02fdbbfe, 0X022df36e, 0X07ffffff, 0X05fd70be, 0X02bdb766, 0X00200000,
0X02fdfafe, 0X02ffffff, 0X06bdfb6f, 0X000c7008, 0X02248222, 0X00008202,
0X023082e2, 0X00000002, 0X04608022 },
{ 0X00080000, 0X07ed7bbc, 0X00000000, 0X00000000, 0X00000000, 0X009cd57a,
0X00000000, 0X00000000, 0X00000000, 0X005070c4, 0X00000400, 0X00001000,
0X00000000, 0X00000000, 0X00000000, 0X02fc5bae, 0X00000000, 0X00000000,
0X00000000, 0X00000000, 0X00000000, 0X015d7e96, 0X00000000, 0X00000000,
0X00000000, 0X00000000, 0X00000000 },
{ 0X00080000, 0X07fdfff4, 0X00248222, 0X00040302, 0X00048022, 0X02fdf3f6,
0X00208222, 0X00048000, 0X0014a022, 0X00ddf8fe, 0X00000002, 0X0000ca22,
0X0220a222, 0X00000022, 0X00208222, 0X01fdfb7a, 0X00009202, 0X00000000,
0X02208222, 0X02b1abae, 0X00048302, 0X029d7110, 0X00000000, 0X00008322,
0X00000000, 0X00ac9522, 0X00000000 },
{ 0X00088000, 0X07fffbfe, 0X02249222, 0X0234b322, 0X02bdf36e, 0X07fdfffe,
0X00bc93e6, 0X00048222, 0X00008222, 0X05fffdfe, 0X00008000, 0X0288d322,
0X02bdb7fe, 0X0228e332, 0X00208020, 0X07fffffe, 0X021ca362, 0X00000000,
0X02208022, 0X0299ab26, 0X06eca326, 0X055dfefe, 0X00008222, 0X02008322,
0X00000000, 0X00bdfbfe, 0X00000022 },
{ 0X00080000, 0X07fdffbc, 0X002dd236, 0X0021fbfe, 0X00008020, 0X07ddfbfe,
0X00209220, 0X00000000, 0X00208020, 0X053efcfa, 0X00000000, 0X00000000,
0X00008222, 0X0220a222, 0X02208222, 0X07fdfbfe, 0X023c9be6, 0X00200000,
0X00088002, 0X0239a37c, 0X00048120, 0X041dfaf8, 0X00000020, 0X00008222,
0X00000000, 0X001cd0a8, 0X00000000 },
{ 0X00180000, 0X06fdfbfe, 0X002c922a, 0X02349b22, 0X02bffffe, 0X07fff3ff,
0X00249222, 0X02bdbb76, 0X02208222, 0X057ffbfe, 0X00208022, 0X021d33ea,
0X02008222, 0X00008222, 0X0228c222, 0X07fdf2fe, 0X00209220, 0X00200000,
0X0220822a, 0X02fdfbfe, 0X06adf3ee, 0X043dfafe, 0X02208222, 0X00048322,
0X00100200, 0X01ffb11e, 0X02808222 },
{ 0X0008113c, 0X017f79da, 0X02fcd77e, 0X02349b2a, 0X02adfbfe, 0X037ef35c,
0X0234b262, 0X02bcf7f6, 0X0204f222, 0X011c58fe, 0X00008222, 0X02a99b2e,
0X06fdfbfe, 0X02aff36e, 0X07ffffff, 0X045df9dc, 0X02bffbae, 0X00200000,
0X06fffbfe, 0X02fbbbae, 0X02bdf3ee, 0X055f73ff, 0X02008a22, 0X06bdfb7e,
0X02d043ea, 0X001dd37e, 0X06008222 },
{ 0X00080000, 0X07fffabc, 0X002c9022, 0X00008100, 0X00040002, 0X07fdfefe,
0X00241220, 0X00040002, 0X023cd232, 0X057ff8fa, 0X00000002, 0X00000220,
0X02208222, 0X00208022, 0X00008020, 0X03fdfafa, 0X022db322, 0X00040000,
0X02208222, 0X02b0bb2a, 0X0224832a, 0X041d7afe, 0X00000008, 0X00048202,
0X00000000, 0X00949b86, 0X00000000 },
{ 0X00080000, 0X00100000, 0X00000000, 0X00000000, 0X00000000, 0X00000010,
0X00000000, 0X00000000, 0X00000000, 0X00000000, 0X00000000, 0X00000000,
0X00000000, 0X00000000, 0X00000000, 0X00000000, 0X00000000, 0X00020000,
0X00080000, 0X00000000, 0X00000000, 0X02008222, 0X00000000, 0X00000020,
0X00000000, 0X00000000, 0X00000000 },
{ 0X00080010, 0X07fffffc, 0X022c9222, 0X023c9b2a, 0X02bdd366, 0X07ffffff,
0X00249222, 0X022cb322, 0X02208222, 0X07fbfdfe, 0X00208020, 0X029df336,
0X02b98236, 0X0239936e, 0X02b9ab66, 0X07fffffe, 0X023cb322, 0X00200000,
0X02248322, 0X02f3fb7e, 0X06bcf3ee, 0X01ddf2fe, 0X02208222, 0X00008222,
0X00000020, 0X0099f0be, 0X00008222 },
{ 0X00081000, 0X03fdfffe, 0X02248222, 0X0224b323, 0X00248242, 0X07fffbfe,
0X02208222, 0X002c8220, 0X02f5fa6e, 0X057ff8fe, 0X00200000, 0X0224a222,
0X02208222, 0X02208222, 0X02208223, 0X06f5f7fe, 0X022c9326, 0X00200000,
0X00288222, 0X02bdf36e, 0X02edf7ff, 0X041df2fe, 0X00010220, 0X00248222,
0X00000000, 0X001d78bc, 0X00000000 },
{ 0X001c1010, 0X03fdfbfc, 0X00248222, 0X02249102, 0X00048000, 0X03fdfbfe,
0X00249222, 0X00248022, 0X02bffbfe, 0X047ff8fe, 0X00000000, 0X02000222,
0X02208222, 0X00208222, 0X00308223, 0X07fdfafe, 0X00049222, 0X00000000,
0X02a08222, 0X02f1ab7e, 0X027c9be2, 0X031df2fe, 0X00000202, 0X01208322,
0X00000000, 0X01ad328e, 0X000db2a2 },
{ 0X004c1010, 0X02dd7bdc, 0X027db736, 0X023c9b2a, 0X06ac92b6, 0X063df5f6,
0X0030b042, 0X002cf3a2, 0X00004002, 0X057dd0be, 0X00208202, 0X00048a30,
0X06fdfafe, 0X007bf36e, 0X02bdfbfe, 0X023d5210, 0X02bdbbfe, 0X00200000,
0X06fffbfe, 0X023bdbbe, 0X06bcf3be, 0X00202000, 0X00840220, 0X00000002,
0X00309220, 0X00601022, 0X04208022 },
{ 0X00080000, 0X003d7fbc, 0X00004000, 0X00000000, 0X00000002, 0X039dfbfe,
0X00000000, 0X00000000, 0X00000000, 0X057cdafe, 0X00000000, 0X00000100,
0X00008002, 0X00000000, 0X00000000, 0X02bcfa88, 0X00000000, 0X00000000,
0X00008020, 0X00000800, 0X00000000, 0X000c1000, 0X02400220, 0X01000000,
0X00000000, 0X00800200, 0X00008000 },
{ 0X00080000, 0X077d7bde, 0X00248222, 0X00208102, 0X02248220, 0X025d53bf,
0X00209202, 0X00000200, 0X02208222, 0X055d70f8, 0X00000000, 0X02804200,
0X02180222, 0X00000222, 0X02bd03fc, 0X00fdf864, 0X00209222, 0X00000000,
0X02008222, 0X02bdbb2c, 0X00208322, 0X00057100, 0X00000000, 0X00808002,
0X02000000, 0X0000f022, 0X02000000 },
{ 0X00080000, 0X005870d8, 0X00000000, 0X00649322, 0X00000000, 0X021c7298,
0X00008000, 0X00201000, 0X00208202, 0X0058f0fe, 0X00000000, 0X00000000,
0X00000020, 0X00000000, 0X00000002, 0X001d6090, 0X00249222, 0X00200000,
0X00000000, 0X00000020, 0X02248326, 0X00051016, 0X00000200, 0X00008020,
0X01008000, 0X04041080, 0X00000000 },
{ 0X004c1010, 0X0097f998, 0X00248232, 0X00009322, 0X0004c226, 0X00ddf0f6,
0X00201222, 0X0224f230, 0X02048020, 0X00094030, 0X00000002, 0X00004420,
0X00699a22, 0X0221e22e, 0X0310c3ba, 0X04fd78d8, 0X023dd322, 0X00200000,
0X0234c272, 0X0039b32e, 0X02108322, 0X00095b88, 0X00000022, 0X0004832a,
0X00000200, 0X02000000, 0X00000002 },
{ 0X00080000, 0X00557b8e, 0X00000000, 0X00000000, 0X00000002, 0X00bc5a3e,
0X00000000, 0X00000020, 0X00000000, 0X003df0ae, 0X00000000, 0X00000000,
0X02008020, 0X00000002, 0X00000000, 0X0065e2b2, 0X00000002, 0X00000000,
0X00008002, 0X00000008, 0X00000020, 0X00040820, 0X00008020, 0X00008020,
0X00000008, 0X00002084, 0X06809222 } };
/*
Configuration parameters
*/
short unusual; /* count of unusual triples */
/*
dotriple -- called by obvword
If this triple is not used by any word used to build the table,
we tally that fact.
*/
dotriple(m1,m2,m3)
short m1,m2,m3; /* all in 0..26 */
{
if (!(obvtab[m1][m2] & (1L << m3))) unusual++; /* check for triple */
}
/*
* ------------------------------ CUT HERE -----------------------------------
*/
#include
/*
obvword -- do one word
dotriple is called on each 3-character triple in the word,
using a mapped value of the character into the range 0..26,
where letters map into 1..26 regardless of case and everything
else maps to zero.
*/
obvword(word)
char word[]; /* word to do, max 20 chars */
{
register int i; /* for loops */
register int patcnt = 0; /* count in word */
register char ch; /* working char */
short pat[21]; /* pattern of mapped values */
unusual = 0;
for (i=0; word[i] && (i < sizeof(pat)); i++) /* scan until null */
{
patcnt = i; /* max value */
ch = word[i]; /* get character */
if ((ch >= 'a') && (ch <= 'z')) pat[i] = ch + 1 - 'a';
else if ((ch >= 'A') && (ch <= 'Z')) pat[i] = ch + 1 - 'A';
else pat[i] = 0; /* map into 0..26 */
}
for (i=0; i < patcnt - 1; i++) /* for all triples */
dotriple(pat[i], pat[i+1], pat[i+2]); /* do the triple */
return(unusual == 0);
}
void phone_gen(s, i)
/* print out all trailing substrings of s that satify obvword() */
char *s;
int i;
{
static char *digitrans[]
= { "abc", "def", "ghi", "jkl", "mno", "prs", "tuv", "wxy" };
char c, *s2;
c = s[i];
if (c == '\0')
{
if (obvword(s))
(void) printf("%s\n", s);
}
else if ('2' <= c && c <= '9')
for (s2 = digitrans[c-'2']; s[i]= *s2++;)
phone_gen(s, i+1);
else
phone_gen(s, i+1);
s[i] = c;
}
main(argc, argv)
int argc;
char **argv;
{
for (; --argc > 0; printf("\n"))
phone_gen(*++argv, 0);
return(0);
}
/* letterize.c ends here */
letterize-1.3/letterize.spec 0000644 0000027 0000027 00000002320 11457631024 014403 0 ustar esr esr Name: letterize
Version: 1.3
Release: 1
Summary: generate pronounceable mnemonics from phone numbers
URL: http://www.catb.org/~esr/letterize/
Source0: %{name}-%{version}.tar.gz
License: BSD
Group: Applications
BuildRoot: %{_tmppath}/%{name}-root
%description
Generate all possible alphabetic mnemonics for a phone
number, then filter them for phonetic plausibility in
English.
%prep
%setup -q
%build
make %{?_smp_mflags} letterize letterize.1
%install
[ "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf "$RPM_BUILD_ROOT"
mkdir -p "$RPM_BUILD_ROOT"%{_bindir}
mkdir -p "$RPM_BUILD_ROOT"%{_mandir}/man1/
cp letterize "$RPM_BUILD_ROOT"%{_bindir}
cp letterize.1 "$RPM_BUILD_ROOT"%{_mandir}/man1/
%clean
[ "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf "$RPM_BUILD_ROOT"
%files
%defattr(-,root,root,-)
%{_mandir}/man1/letterize.1*
%{_bindir}/letterize
%doc README COPYING
%changelog
* Wed Oct 20 2010 Eric S. Raymond 1.3-1
- Polish to modern C, with like, #includes and everything.
- Change license to BSD.
* Mon Dec 29 2003 Eric S. Raymond 1.2-1
- RPM packaging fixes for freshmeat release.
* Tue Jul 30 2002 Eric S. Raymond
- Initial build.
letterize-1.3/letterize.xml 0000644 0000027 0000027 00000005313 11457631435 014264 0 ustar esr esr
letterize
1
October 24, 1994
letterize
letterize
Miscellanea
letterize
phone-number to letter-mnemonic generator
letterize nnnnnnn
DESCRIPTION
This program tries to help you find a letter mnemonic matching a
given phone number.
It emits to standard output each possible pronounceable mnemonic, one
per line, using the American standard mapping of dial letters to
numbers (2 goes to ABC, 3 to DEF, 4 to GHI, 5 to JKL, 6 to MNO, 7 to
PRS, 8 to TUV, 9 to XYZ).
The program uses a table of pronounceable letter-triples derived from
a dictionary scan. Each potential mnemonic must be such that all of
its letter-triples are in the table to be emitted. About 30% of
possible triples are considered pronounceable.
A typical 7-digit phone number has 19,683 possible mnemonics, but this
test usually cuts the list down to a few hundred or so, a reasonable
number to eyeball-check. For some numbers, the list will, sadly, be
empty.
It's best to leave out punctuation such as dashes and parens.
BUGS
The filtering method doesn't know what plausible medial triples are
not reasonable at the beginnings and ends of words.
I'm not sure what table position 0 (which is what 0 and 1 are mapped
to) means. If you figure it out, you tell me. I really should have
generated my own table, but that would have been more work than this
seemed worth -- if your number contains either, you probably need
to generate your mnemonic in disjoint pieces around the digits anyway.
AUTHOR
Eric S. Raymond esr@snark.thyrsus.com. It's
based on a table of plausible letter-triples that had no name attached
to it. Surf to http://www.catb.org/~esr/
for updates and related resources.
letterize-1.3/Makefile 0000644 0000027 0000027 00000001771 11457631604 013175 0 ustar esr esr #
# Makefille for the phone-number letterizer
#
VERS=$(shell sed MANIFEST
@(cd ..; ln -s letterize letterize-$(VERS))
(cd ..; tar -czf letterize/letterize-$(VERS).tar.gz `cat letterize/MANIFEST`)
@(cd ..; rm letterize-$(VERS))
clean:
rm -f letterize letterize.tar letterize*.gz letterize*.rpm
rm -f *~ *.1 *.html MANIFEST SHIPPER.*
install: uninstall letterize.1
cp letterize /usr/bin
cp letterize.1 /usr/share/man/man1/letterize.1
uninstall:
rm -f /usr/bin/letterize /usr/share/man/man1/letterize.1
dist: letterize-$(VERS).tar.gz
release: letterize-$(VERS).tar.gz letterize.html
shipper -u -m -t; make clean
letterize-1.3/README 0000644 0000027 0000027 00000001055 11455414462 012407 0 ustar esr esr letterize -- phone digits to letter-mnemonics
by Eric S. Raymond Oct 24 1994
I built this around some code for detecting pronounceable letter combinations
that I picked up off the net. Not sure who wrote it.
Files:
README -- this file
letterize.c -- the code
Makefile -- A simple Makefile
letterize.1 -- man page
letterize.xml -- XML DocBook master for the man page
Bugs. Don't talk to me about bugs. Email me at esr@thyrsus.com instead.
You can surf to http://www.catb.org/~esr/ for updates and related resources.