File: /~heha/basteln/Haus/Telefon/CLIP-Anzeige/vorwahl.zip/MSVC/readme.txt

VORWAHL.DSP:

Sieh mal folgende Beispiele (meine Telefonnummern):

Beispiel 1:	+493713396018	oder	+49 371 3396018
Beispiel 2:	017621695671	oder	0176 21695671

Die rechte Darstellung ist IMHO wesentlich übersichtlicher,
und man erkennt (als Deutscher) sofort, ob's eine Handynummer
oder eine Festnetznummer ist, und ahnt auch etwa den Ort (Chemnitz).
(Gibt es ein Handy oder Smartphone, was das kann?)

Es ging bei diesem Visual-Studio-Projekt darum festzustellen,
wieviel Kode für diese ABGESETZTE Anzeige der internationalen Ländervorwahl
sowie der deutschen und österreichischen Vorwahl inklusive Handynummern
erforderlich ist.
Dabei ist besonders der Algorithmus für die Ex-DDR knifflig bei der Optimierung.

Wurde in Visual Studio 6 und mit avr-gcc probeweise übersetzt.
Wobei die Größe der Windows-EXE-Datei schon auf sehr wenig Speicherbedarf hindeutet.

Ergebnis: Weniger als 1 Kilobyte, wobei avr-gcc 10.10 immer noch recht lausig optimiert.

Damit passt es locker in einen ATtiny oder kleinen ATmega,
OHNE dass eine Datenbank mit den Ortsnamen herhalten muss.

henni, 201224

Inzwischen wurde die Vorwahl-Längendetektierung ergänzt um:
USA+Kanada, Tschechien, Polen, Slowakei, Ungarn, Italien, Frankreich, Großbritannien,
Russland.
Da diese Länder viel einfachere Längenregeln aufweisen, trägt das kaum zur Größe bei.
Bei USA+Kanada, Frankreich und Russland wurde schlicht eine 3-stellige Vorwahl festgesetzt.
Von einigen Ländern wie Dänemark und Benelux liegen keine ETSI-Dokumente zum
landesweiten Nummerierungsplan vor.

Um den Namen der Ortsvermittlungsstelle für eine Vorwahl anzeigen zu können
bedarf es Flash-Speicher im 64-K- bis 128-KB-Bereich.
Begnügt man sich für Deutschland für die Text-Anzeige
numerisch davor liegender größerer Knoten,
etwa "3501 Pirna" und "35020 ~Pirna" statt "35020 Struppen",
würden schätzungsweise 8 KByte genügen.

henni, 201226

NAMEN.DSP

Will man doch Ortsnamen statt nur abgetrennter Vorwahlen ausspucken,
wurde der notwendige Speicher evaluiert.
Für Deutschland kommt man auf reichlich 70 KByte,
für internationale Vorwahlen und die übrigen europäischen Staaten
einschließlich Österreich werden sicherlich 128 KByte genügen.
Voraussetzung ist das kompakte Abspeichern der Zeichenketten
möglichst in 7 Bit mit 8. Bit = Terminator sowie die Erstellung eines
geeigneten Baums.
So wurde ermittelt, dass für Deutschland:
 * 840 Knoten à 10 WORDs (Adressen) = 16800 Bytes für den Suchbaum
 * 5198 Strings mit einer Gesamtlänge von 59276 Zeichen (ohne \0)
 * ein < 100 Byte kleines schnelles Programm zum Traversieren des Baums
erforderlich ist.
Der Suchbaum ist trotzdem kleiner als das tabellarische Ablegen
von Nummer und Name und das mehr oder weniger lineare Durchsuchen.

Um den Suchbaum aus der Liste zu erstellen gibt es MAKETREE.DSP.
Das Programm verarbeitet als <stdin> „de-Vorwahlen.htm“ und spuckt
den wesentlichen Teil des Quelltextes von „tree-de.cpp“
auf <stdout> aus.
Der MSVC-Compiler fügt alle Strings hinter allen anderen structs an,
sodass die Unterscheidung zwischen Node und String durch den
ungewöhnlichen Vergleich mit "Deggendorf" entschieden werden kann,
der String mit der niedrigsten Adresse.
/GF (Zusammenlegung gleicher Strings) ist hierfür erforderlich.

Zur Erstellung eines Flash-Images für einen ATmega
wäre „maketree.cpp“ entsprechend zu ändern,
um das kompakte Ablegen der Nodes und Strings
„zu Fuß“ zu erledigen, etwa durch Erstellen eines Binärimages.
Da es sich um Daten handelt, ist die Verwendung eines externen
seriellen EEPROMs 24LC1025 (128K×8) naheliegend,
will man keinen ATmega128/256 für ein olles Telefon verheizen.

henni, 210101
Detected encoding: UTF-80